Hi, etwas hat mich gerade ziemlich zum Staunen gebracht - folgender Code: reset: clr _0 ldiw X, RAMTOP ;Clear RAM ldi AL, 0 ; st X+, _0 ; dec AL ; brne PC-2 ; ; outi OSCCAL, 172 ;Adjust OSCCAL if needed. outi PORTB, 0b001101 ;Initalize Port B; PB3 to 1 for LED outi DDRB, 0b011010 ; outi PLLCSR, 0b00000110 ;Initialize TC1 in 250 kHz fast PWM mode. outi TCCR1, 0b01100001 ;Connect TC1 to OC1A outi GTCCR, 0b01100000 ;Connect TC1 to OC1B outi OCR0A, 62 ;Initalize TC0 in 32 kHz interval timer. outi TCCR0A, 0b00000010 outi TCCR0B, 0b00000010 outi TIMSK, (1<<OCIE0A) start_play: ldiw Z, score*2 cli clrw _Tmr clr _TmrS sei pl_next: lpmw B, Z+ rcall drv_decay cli cpw _Tmr, B sei brcs PC-5 pl_note: lpm CL, Z+ cpi CL, EoS breq sleep_handler mov AL, CL rcall note_on andi CL, en breq pl_note rjmp pl_next sleep_handler: .DEF PWR_DOWN = R16 ldi r18, 3 cpi r18, 3 BRNE start_play LDI PWR_DOWN, (1<<SE) | (1<<SM1) | (0<<SM0) OUT MCUCR, PWR_DOWN outi PORTB, 0 SLEEP Folgender Sachverhalt: Es geht um "sleep_handler" - da r18 == 3 ist, wird wie erwartet der Chip in den Sleep-Mode versetzt. Aber! Wird die Codezeile "ldi r18, 3" jedoch zum Beispiel in die "reset"-section ganz am Anfang verschoben, dann wird "BRNE start_play" immer condition true executed, obwohl r18 == 3 ist. Warum??? Es kann doch wohl nicht sein, dass Registerwerte nur innerhalb eines Labels erhalten bleiben oder? Es gib zwar auch ein paar Subroutine-Calls, aber das sollte nicht das Problem sein, denn R18 nirgendwo weiter verwendet, und selbst wenn sollte es ja auf dem Stack gesichert sein. Komisch, komisch. verwirrt
Gibts noch mehr Code, vielleicht welcher der R18 streichelt, oder ist das wirklich alles? Ausserdem sieht man den Makros und Symbolen nicht an, was sich dahinter verbirgt.
Nein, es gibt mehr, habe wegen der Übersicht nicht alles gepostet. Hier jetzt alles: ;----------------------------------------------------------; ; Melody Generator (C)ChaN, 2005 .include "tn45def.inc" ;This is included in "Atmel AVR Studio" .include "avr.inc" .include "mg.inc" .def _0 = r15 .def _Sreg = r14 .def _Zreg = r12 .def _Yreg = r10 .def _TmrH = r9 .def _TmrL = r8 .def _TmrS = r7 .equ N_NOTE = 6 ;----------------------------------------------------------; ; Work Area .dseg .org RAMTOP NoteIdx:.byte 1 ; Note rotation index Notes: .byte (2+3+1+1+1+1)*N_NOTE .equ ns_freq = 0 ;Angular Speed .equ ns_rptr = 2 ;Wave table read pointer (16.8 fraction) .equ ns_lvl = 5 ;Level .equ ns_wrap = 6 ;Loop Flag .equ ns_loop = 7 ;Loop Count .equ ns_lp = 8 ;Level Pointer .equ nsize = 9 ;size of this structure ;----------------------------------------------------------; ; Program Code .cseg ; Interrupt Vectors (ATtiny45) rjmp reset ; Reset rjmp 0 ; INT0 rjmp 0 ; PCINT0 rjmp 0 ; TC1_COMA rjmp 0 ; TC1_OVF rjmp 0 ; TC0_OVF rjmp 0 ; EE_RDY rjmp 0 ; ANA_COMP rjmp 0 ; ADC rjmp 0 ; TC1_COMB rjmp isr_tc0_coma ; TC0_COMA ; rjmp 0 ; TC0_COMB ; rjmp 0 ; WDT ; rjmp 0 ; USI_START ; rjmp 0 ; USI_OVF ;--------------------------------------------------------------------; ; Program Code reset: clr _0 ldiw X, RAMTOP ;Clear RAM ldi AL, 0 ; st X+, _0 ; dec AL ; brne PC-2 ; ldi r18, 0; ; outi OSCCAL, 172 ;Adjust OSCCAL if needed. outi PORTB, 0b001101 ;Initalize Port B; PB3 to 1 for LED outi DDRB, 0b011010 ; outi PLLCSR, 0b00000110 ;Initialize TC1 in 250 kHz fast PWM mode. outi TCCR1, 0b01100001 ;Connect TC1 to OC1A outi GTCCR, 0b01100000 ;Connect TC1 to OC1B outi OCR0A, 62 ;Initalize TC0 in 32 kHz interval timer. outi TCCR0A, 0b00000010 outi TCCR0B, 0b00000010 outi TIMSK, (1<<OCIE0A) start_play: inc r18; ldiw Z, score*2 cli clrw _Tmr clr _TmrS sei pl_next: lpmw B, Z+ rcall drv_decay cli cpw _Tmr, B sei brcs PC-5 pl_note: lpm CL, Z+ cpi CL, EoS breq sleep_handler mov AL, CL rcall note_on andi CL, en breq pl_note rjmp pl_next sleep_handler: .DEF PWR_DOWN = R16 cpi r18, 3 BRNE start_play LDI PWR_DOWN, (1<<SE) | (1<<SM1) | (0<<SM0) OUT MCUCR, PWR_DOWN ldi r18, 0 outi PORTB, 0 SLEEP ;--------------------------------------------------------------------; ; Note ON ; ;Call: AL[6:0] = key number note_on: pushw Z mov ZL, AL lsl ZL clr ZH addiw Z, tbl_pitch*2 lpmw A, Z+ lds YL, NoteIdx addi YL, 9 cpi YL, 9*N_NOTE brcs PC+2 clr YL sts NoteIdx, YL clr YH addiw Y, Notes ldiw B, wt_attack*2 cli stdw Y+ns_freq, A stdw Y+ns_rptr+1, B sei stdi Y+ns_lvl, 255 std Y+ns_wrap, AL std Y+ns_loop, _0 std Y+ns_lp, _0 popw Z ret ;--------------------------------------------------------------------; ; Decay envelope generation drv_decay: pushw Z ldiw Y, Notes dd_lp: ldd AL, Y+ns_wrap ;Has sustain loop not wrapped? ldi AH, 255 ; cp AL, AH ; breq dd_nxt ;/ std Y+ns_wrap, AH ;Clear wrapped flag. ldd AL, Y+ns_loop inc AL cpi AL, 12 brcs PC+2 ldi AL, 0 std Y+ns_loop, AL brcs dd_nxt ldd ZL, Y+ns_lp inc ZL breq dd_nxt std Y+ns_lp, ZL clr ZH addiw Z, envelope*2 lpm AL, Z std Y+ns_lvl, AL dd_nxt: adiw YL, 9 cpi YL, low(Notes+nsize*N_NOTE) brne dd_lp popw Z ret ;--------------------------------------------------------------------; ; 32 kHz wave form synthesising interrupt isr_tc0_coma: in _Sreg, SREG ;Save regs... movw _Zreg, ZL ; movw _Yreg, YL ;/ ldiw Y, Notes ;Process all notes clrw T2 ;Clear accumlator tone_lp: ldd EH, Y+ns_rptr ;Load wave table pointer lddw Z, Y+ns_rptr+1 ;/ lpm EL, Z ;Get a sample lddw T4, Y+ns_freq ;Load angular speed add EH, T4L ;Increase wave table ptr (next angle) adc ZL, T4H ; adc ZH, _0 ;/ cpi ZH, high(wt_end*2) ;Repeat sustain area brcs PC+4 ; subiw Z, (wt_end-wt_loop)*2 ; std Y+ns_wrap, _0 ;/ std Y+ns_rptr, EH ;Save wave table ptr stdw Y+ns_rptr+1, Z ;/ ldd EH, Y+ns_lvl ;Apply envelope curve MULT ;/ addw T2, T0 ;Add the sample to accumlator adiw YL, 9 ;Next note cpi YL, low(Notes+nsize*N_NOTE); brne tone_lp ;/ asrw T2 ;Divide it by 4 asrw T2 ;/ ldiw E, 253 ;Clip it between -255 to 253 cpw T2, E ; brlt PC+2 ; movw T2L, EL ; ldiw E, -255 ; cpw T2, E ; brge PC+2 ; movw T2L, EL ;/ asrw T2 ;Set it to PWM modulator ror T2H ; mov EL, T2L ; subi EL, 0x80 ; mov EH, EL ; com EH ; sbrc T2H, 7 ; inc EL ; out OCR1A, EL ; out OCR1B, EH ;/ sec ;Increment sequense timer adc _TmrS, _0 ; adc _TmrL, _0 ; adc _TmrH, _0 ;/ movw ZL, _Zreg ;Restore regs... movw YL, _Yreg ; out SREG, _Sreg ;/ reti ;--------------------------------------------------------------------; ; Score table ;--------------------------------------------------------------------; score: .include "melody.asm" ;--------------------------------------------------------------------; ; Pitch number to angular speed conversion table ;--------------------------------------------------------------------; ;Since sustain area of wave table, a cycle of fundamental frequency, is sampled ;in 128 points, the base frequency becomes 32000/128 = 250 Hz. The wave table ;lookup pointer, 16.8 fraction, is increased every sample by these 8.8 fractional ;angular speed values. tbl_pitch: ; A B H C Cis D Dis E F Fis G Gis .dw 225, 239, 253, 268, 284, 301, 319, 338, 358, 379, 401, 425 ; 220Hz.. .dw 451, 477, 506, 536, 568, 601, 637, 675, 715, 758, 803, 851 ; 440Hz.. .dw 901, 955, 1011, 1072, 1135, 1203, 1274, 1350, 1430, 1515, 1606, 1701 ; 880Hz.. .dw 1802, 1909, 2023, 2143, 2271, 2406, 2549, 2700, 2861, 3031, 3211, 3402 ; 1760Hz.. .dw 3604, 3818, 4046, 4286, 4542, 4812, 5098, 5400 ; 3520Hz ;--------------------------------------------------------------------; ; Envelope Table ;--------------------------------------------------------------------; envelope: .db 255,252,250,247,245,243,240,238,235,233,231,228,226,224,222,219 .db 217,215,213,211,209,207,205,203,201,199,197,195,193,191,189,187 .db 185,183,182,180,178,176,174,173,171,169,168,166,164,163,161,159 .db 158,156,155,153,152,150,149,147,146,144,143,141,140,139,137,136 .db 134,133,132,130,129,128,127,125,124,123,122,120,119,118,117,116 .db 115,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99 .db 98,97,96,95,94,93,92,91,90,89,88,87,87,86,85,84 .db 83,82,82,81,80,79,78,78,77,76,75,75,74,73,72,72 .db 71,70,69,69,68,67,67,66,65,65,64,64,63,62,62,61 .db 60,60,59,59,58,57,57,56,56,55,55,54,54,53,53,52 .db 51,51,50,50,49,49,48,48,48,47,47,46,46,45,45,44 .db 44,43,43,43,42,42,41,40,40,39,39,38,38,37,37,36 .db 35,35,34,34,33,33,32,31,31,30,30,29,29,28,28,27 .db 26,26,25,25,24,24,23,22,22,21,21,20,20,19,19,18 .db 17,17,16,16,15,15,14,13,13,12,12,11,11,10,10,9 .db 8,8,7,7,6,6,5,4,4,3,3,2,2,1,1,0 ;--------------------------------------------------------------------; ; Wave Table ;--------------------------------------------------------------------; ; 8bit, 32 ksps, 250 Hz fundamental frequency .org 3072/2 ; Bottom stored wt_attack: ; Attack area .db 0, 0, 0, 0, 0, 0, -1, -2, -2, -3, -2, -2, -1, 0, 0, 0 .db 0, 0, -1, -2, -3, -3, -4, -4, -3, -2, -1, 0, 0, 1, 0, 0 .db 0, -1, -2, -3, -3, -2, 0, 0, 2, 4, 5, 5, 5, 3, 1, 0 .db -2, -3, -4, -3, -2, 0, 1, 2, 3, 2, 0, -2, -6, -11, -15, -18 .db -19, -19, -16, -11, -5, 1, 8, 15, 20, 23, 24, 23, 20, 17, 13, 10 .db 7, 6, 6, 8, 10, 13, 16, 18, 20, 20, 20, 19, 18, 18, 18, 18 .db 19, 21, 24, 26, 27, 28, 27, 25, 22, 17, 11, 5, 0, -5, -9, -12 .db -13, -13, -11, -9, -5, -1, 1, 4, 6, 6, 4, 0, -5, -12, -21, -30 .db -39, -48, -56, -62, -66, -69, -70, -71, -70, -70, -70, -71, -72, -75, -77, -79 .db -80, -78, -75, -69, -61, -50, -38, -26, -13, -2, 7, 15, 21, 25, 28, 30 .db 33, 36, 40, 44, 49, 55, 59, 61, 62, 60, 56, 49, 42, 34, 27, 22 .db 20, 21, 25, 33, 42, 52, 63, 72, 80, 86, 89, 90, 89, 87, 84, 81 .db 79, 77, 75, 73, 72, 69, 66, 61, 55, 48, 39, 31, 22, 14, 6, 0 .db -5, -10, -14, -17, -20, -22, -24, -26, -28, -29, -30, -31, -32, -33, -34, -35 .db -36, -37, -39, -41, -44, -48, -52, -57, -63, -70, -77, -85, -94, -102, -110, -116 .db -121, -124, -124, -121, -116, -109, -99, -89, -78, -68, -60, -53, -48, -45, -43, -43 .db -43, -42, -41, -40, -37, -33, -29, -25, -22, -19, -17, -16, -15, -14, -12, -9 .db -4, 2, 11, 22, 34, 46, 57, 67, 75, 81, 84, 86, 87, 86, 86, 85 .db 85, 85, 86, 86, 87, 86, 84, 82, 78, 73, 69, 64, 60, 58, 56, 57 .db 59, 62, 66, 70, 75, 79, 83, 86, 89, 91, 92, 92, 92, 90, 86, 81 .db 73, 63, 52, 38, 24, 9, -5, -19, -31, -42, -50, -57, -61, -64, -66, -67 .db -68, -68, -68, -67, -66, -64, -61, -56, -52, -46, -41, -36, -32, -29, -28, -28 .db -30, -34, -39, -44, -50, -56, -62, -68, -74, -79, -84, -90, -95, -100, -104, -107 .db -108, -108, -107, -103, -98, -92, -84, -76, -67, -58, -49, -40, -32, -24, -16, -8 .db -1, 5, 11, 16, 20, 22, 22, 21, 18, 14, 10, 5, 1, -1, -3, -3 .db -2, 0, 1, 5, 9, 12, 16, 20, 24, 28, 34, 40, 47, 55, 64, 72 .db 81, 89, 96, 101, 105, 108, 108, 108, 107, 105, 103, 101, 100, 98, 96, 93 .db 90, 87, 83, 79, 75, 70, 66, 62, 59, 56, 55, 53, 52, 51, 50, 48 .db 46, 44, 42, 39, 37, 34, 31, 28, 24, 20, 15, 10, 3, -3, -12, -21 .db -30, -39, -48, -57, -65, -72, -79, -85, -90, -95, -99, -103, -106, -109, -110, -112 .db -112, -112, -111, -110, -109, -107, -106, -105, -104, -104, -103, -102, -101, -99, -97, -94 .db -90, -86, -82, -78, -75, -72, -69, -67, -65, -63, -61, -58, -54, -50, -44, -38 .db -31, -23, -16, -10, -4, 1, 6, 10, 14, 18, 23, 27, 32, 38, 43, 49 .db 54, 59, 63, 67, 70, 73, 75, 77, 79, 81, 83, 85, 88, 91, 93, 96 .db 99, 101, 103, 105, 107, 109, 110, 111, 112, 112, 112, 111, 109, 107, 104, 100 .db 96, 92, 88, 83, 79, 75, 70, 65, 60, 55, 49, 43, 36, 30, 24, 18 .db 12, 7, 3, 0, -3, -6, -8, -11, -14, -17, -20, -24, -28, -32, -37, -42 .db -46, -51, -55, -59, -63, -67, -71, -75, -79, -82, -85, -88, -91, -93, -95, -97 .db -98, -100, -101, -102, -103, -104, -104, -104, -103, -101, -99, -96, -93, -89, -86, -83 .db -80, -78, -76, -75, -74, -73, -72, -71, -70, -68, -65, -63, -59, -56, -52, -48 .db -44, -40, -35, -30, -24, -18, -11, -4, 3, 11, 19, 27, 34, 41, 48, 53 .db 58, 63, 67, 71, 75, 79, 82, 86, 89, 92, 94, 95, 96, 97, 98, 98 .db 99, 100, 101, 103, 105, 108, 110, 112, 114, 115, 115, 114, 113, 110, 107, 103 .db 99, 95, 91, 87, 83, 79, 74, 70, 65, 59, 53, 47, 41, 35, 29, 24 .db 19, 14, 11, 7, 4, 1, -1, -5, -9, -14, -19, -25, -31, -37, -43, -50 .db -56, -62, -68, -73, -78, -83, -88, -92, -97, -101, -105, -109, -112, -115, -117, -119 .db -120, -121, -120, -119, -118, -116, -114, -112, -109, -106, -104, -101, -99, -96, -94, -91 .db -88, -85, -81, -78, -74, -70, -66, -62, -57, -53, -49, -45, -41, -37, -32, -27 .db -22, -16, -10, -4, 1, 8, 14, 20, 25, 31, 36, 41, 46, 50, 55, 60 .db 64, 69, 73, 77, 81, 85, 88, 90, 93, 95, 97, 99, 101, 103, 106, 109 .db 112, 115, 118, 121, 123, 125, 126, 126, 125, 125, 123, 121, 119, 117, 115, 112 .db 110, 107, 103, 99, 94, 89, 83, 76, 69, 62, 54, 47, 39, 31, 24, 16 .db 9, 2, -4, -11, -18, -25, -31, -38, -44, -51, -57, -62, -68, -73, -79, -84 .db -88, -93, -97, -102, -106, -109, -113, -116, -119, -121, -123, -124, -125, -126, -127, -127 .db -127, -127, -126, -125, -125, -123, -122, -120, -118, -116, -114, -111, -107, -104, -100, -95 .db -91, -86, -80, -75, -69, -63, -58, -52, -46, -40, -34, -28, -22, -16, -10, -4 wt_loop: ; Sustain area .db 0, 5, 11, 17, 23, 28, 34, 39, 45, 50, 55, 60, 65, 69, 74, 78 .db 82, 85, 89, 92, 95, 98, 100, 102, 104, 106, 107, 109, 109, 110, 110, 111 .db 110, 110, 109, 108, 107, 106, 104, 102, 100, 98, 95, 93, 90, 87, 83, 80 .db 76, 72, 68, 64, 59, 55, 50, 46, 41, 36, 31, 26, 21, 15, 10, 5 .db 0, -5, -10, -15, -21, -26, -31, -36, -41, -46, -50, -55, -59, -64, -68, -72 .db -76, -80, -83, -87, -90, -93, -95, -98, -100, -102, -104, -106, -107, -108, -109, -110 .db -110, -111, -110, -110, -109, -109, -107, -106, -104, -102, -100, -98, -95, -92, -89, -85 .db -82, -78, -74, -69, -65, -60, -55, -50, -45, -39, -34, -28, -23, -17, -11, -5 wt_end: Das ist ein Code zur Erzeugung von Melodien an einem Piezosummer (von klm-chan). Falls du die include-Dateien auch noch sehen möchtest, sag bitte Bescheid.
Ach ich poste die relevanten einfach mal: AVR.inc: ;------------------------------------------------; ; Constants .equ RAMTOP = 0x60 ; SRAM top address .equ RAMTOP100 = 0x100 ; For memory mapped I/O devices .equ bit0 = 0b00000001 .equ bit1 = 0b00000010 .equ bit2 = 0b00000100 .equ bit3 = 0b00001000 .equ bit4 = 0b00010000 .equ bit5 = 0b00100000 .equ bit6 = 0b01000000 .equ bit7 = 0b10000000 .def T0L = r0 .def T0H = r1 .def T2L = r2 .def T2H = r3 .def T4L = r4 .def T4H = r5 .def T6L = r6 .def T6H = r7 .def T8L = r8 .def T8H = r9 .def T10L = r10 .def T10H = r11 .def T12L = r12 .def T12H = r13 .def T14L = r14 .def T14H = r15 .def AL = r16 .def AH = r17 .def BL = r18 .def BH = r19 .def CL = r20 .def CH = r21 .def DL = r22 .def DH = r23 .def EL = r24 .def EH = r25 ;------------------------------------------------; ; Push/Pop register pair ; ; pushw Z .macro pushw push @0H push @0L .endm .macro popw pop @0L pop @0H .endm ;------------------------------------------------; ; Load/store word from/to direct memory/immediate ; ; ldsw Z,mem ; ldiw Z,imm .macro ldiw ldi @0L,low(@1) ldi @0H,high(@1) .endm .macro ldsw lds @0L,@1 lds @0H,@1+1 .endm .macro stsw sts @0+1,@1H sts @0,@1L .endm .macro lddw ldd @0L,@1 ldd @0H,@1+1 .endm .macro stdw std @0+1,@1H std @0,@1L .endm .macro ldw ld @0L,@1 ld @0H,@1 .endm .macro stw st @0,@1L st @0,@1H .endm .macro inw in @0L,@1L in @0H,@1H .endm .macro outw out @0H,@1H out @0L,@1L .endm ;------------------------------------------------; ; Store immediate into indirect memory via r16 ; ; sti Z,imm ; stdi Z+d,imm .macro sti ldi r16,@1 st @0,r16 .endm .macro stdi ldi r16,@1 std @0,r16 .endm .macro muli ldi r16,@1 mul @0,r16 .endm ;------------------------------------------------; ; add/sub/subc/cp/cpc/lsl/lsr/rol/ror to register pair ; .macro addiw subi @0L,low(-(@1)) sbci @0H,high(-(@1)) .endm .macro subiw subi @0L,low(@1) sbci @0H,high(@1) .endm .macro addw add @0L,@1L adc @0H,@1H .endm .macro adcw adc @0L,@1L adc @0H,@1H .endm .macro subw sub @0L,@1L sbc @0H,@1H .endm .macro sbcw sbc @0L,@1L sbc @0H,@1H .endm .macro cpw cp @0L,@1L cpc @0H,@1H .endm .macro cpcw cpc @0L,@1L cpc @0H,@1H .endm .macro cpiw cpi @0L,low(@1) ldi r16,high(@1) cpc @0H,r16 .endm .macro andw and @0L,@1L and @0H,@1H .endm .macro andiw andi @0L,low(@1) andi @0H,high(@1) .endm .macro orw or @0L,@1L or @0H,@1H .endm .macro oriw ori @0L,low(@1) ori @0H,high(@1) .endm .macro lslw lsl @0L rol @0H .endm .macro lsrw lsr @0H ror @0L .endm .macro asrw asr @0H ror @0L .endm .macro rolw rol @0L rol @0H .endm .macro rorw ror @0H ror @0L .endm .macro clrw clr @0L clr @0H .endm .macro comw com @0L com @0H .endm .macro negw com @0H neg @0L brne PC+2 inc @0H .endm .macro movew mov @0L, @1L mov @0H, @1H .endm .macro lpmw lpm @0L, @1 lpm @0H, @1 .endm ;------------------------------------------------; ; Store immediate into direct memory via r16 ; ; stsi var,imm .macro stsi ldi r16,@1 sts @0,r16 .endm ;------------------------------------------------; ; Output port immediate via r16 ; ; outi port,var .macro outi ldi r16,@1 out @0,r16 .endm ;------------------------------------------------; ; Add immediate to register .macro addi subi @0,-(@1) .endm ;------------------------------------------------; ; Long branch .macro rjne breq PC+2 rjmp @0 .endm .macro rjeq brne PC+2 rjmp @0 .endm .macro rjcc brcs PC+2 rjmp @0 .endm .macro rjcs brcc PC+2 rjmp @0 .endm .macro rjtc brts PC+2 rjmp @0 .endm .macro rjts brtc PC+2 rjmp @0 .endm .macro rjge brlt PC+2 rjmp @0 .endm .macro rjlt brge PC+2 rjmp @0 .endm .macro retcc brcs PC+2 ret .endm .macro retcs brcc PC+2 ret .endm .macro reteq brne PC+2 ret .endm .macro retne breq PC+2 ret .endm ;------------------------------------------------; ; Move single bit between two registers ; ; bmov dstreg,dstbit,srcreg.srcbit .macro movb bst @2,@3 bld @0,@1 .endm
Schau lieber mal ins Listing, ob da irgenwo R18 auftaucht. Hier sind mir zu viele Makros.
mg.inc: ;----------------------------------------------------------; ; Melody Generator Include File .equ A2 = 0 ;220Hz .equ B2 = 1 .equ H2 = 2 .equ C2 = 3 .equ Cis2 = 4 .equ D2 = 5 .equ Dis2 = 6 .equ E2 = 7 .equ F2 = 8 .equ Fis2 = 9 .equ G2 = 10 .equ Gis2 = 11 .equ A3 = 12 ;440Hz .equ B3 = 13 .equ H3 = 14 .equ C3 = 15 .equ Cis3 = 16 .equ D3 = 17 .equ Dis3 = 18 .equ E3 = 19 .equ F3 = 20 .equ Fis3 = 21 .equ G3 = 22 .equ Gis3 = 23 .equ A4 = 24 ;880Hz .equ B4 = 25 .equ H4 = 26 .equ C4 = 27 .equ Cis4 = 28 .equ D4 = 29 .equ Dis4 = 30 .equ E4 = 31 .equ F4 = 32 .equ Fis4 = 33 .equ G4 = 34 .equ Gis4 = 35 .equ A5 = 36 ;1760Hz .equ B5 = 37 .equ H5 = 38 .equ C5 = 39 .equ Cis5 = 40 .equ D5 = 41 .equ Dis5 = 42 .equ E5 = 43 .equ F5 = 44 .equ Fis5 = 45 .equ G5 = 46 .equ Gis5 = 47 .equ A6 = 48 ;3520Hz .equ B6 = 49 .equ H6 = 50 .equ C6 = 51 .equ Cis6 = 52 .equ D6 = 53 .equ Dis6 = 54 .equ E6 = 55 .equ EoS = 255 ;End of score .equ en = 128 ;End of line flag ;--------------------------------------------------------------------; ; T0 = int8(EL) x .uint8(EH), 32clks .macro MULT mov T0H, EL sbrc EL, 7 neg EL clr T0L sbrc EH, 0 add T0L, EL lsr T0L sbrc EH, 1 add T0L, EL lsr T0L sbrc EH, 2 add T0L, EL lsr T0L sbrc EH, 3 add T0L, EL clr T0L sbrc EH, 4 add T0L, EL lsr T0L sbrc EH, 5 add T0L, EL lsr T0L sbrc EH, 6 add T0L, EL lsr T0L sbrc EH, 7 add T0L, EL lsl T0H mov T0H, _0 brcc PC+3 neg T0L sbc T0H, T0H .endm
haha yo, trotzdem danke. aber war wohl wirklich so, dass r18 iwo gestreichelt wurde. hab jetzt einfach r26 benutzt und es funktioniert. :D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.