home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Antic Magazine 1987 April
/
Antic_Magazine_1987_04_Antic.atr
/
musician.m65
< prev
next >
Wrap
Text File
|
2023-02-26
|
5KB
|
1 lines
0100 ;MUSICIAN¢0110 ;BY MIKE EGGERS AND MATT LOVELESS¢0120 ;(c) 1987, ANTIC PUBLISHING¢0130 .TITLE "MUSICIAN -- Music Player"¢0140 ;¢0150 AUDC1 = $D201 ;Control reg for¢0160 ; sounds¢0170 AUDF1 = $D200 ;Tone frequency¢0180 ; reg.¢0190 CLOCK = $14 ;Last byte of¢0200 ; real-time clock¢0210 TEMPO = $D6 ;Tempo index¢0220 ; number*4¢0230 OCTAVE = $D7 ;Octave of note¢0240 ; (3-6).¢0250 DURATN = $D8 ;Tone duration 0211 ; index.¢0260 ; index¢0270 POS = $D9 ;Current pos.¢0280 ; in string.¢0290 ADDR = $DA ;Location of¢0300 ; string.¢0310 TONES = $DC ;Addr of string¢0320 ; w/note info.¢0330 TIME = $DE ;Addr of string with duration info¢0340 ; ; w/duration inf¢0350 ;¢0360 *= $0600¢0370 ;¢0380 TOP¢0390 LDA #0 ;Set default¢0400 STA TEMPO ; tempo,¢0410 STA DURATN ; duration,¢0420 STA POS ; position¢0430 LDA #2 ; & octave.¢0440 STA OCTAVE¢0450 PLA ;Ignore argument¢0460 ; count.¢0470 PLA ;get addr¢0480 ; of string.¢0490 STA ADDR+1¢0500 PLA ¢0510 STA ADDR¢0520 PLA ;Get addr of¢0530 ; tone variable.¢0540 STA TONES+1¢0550 PLA ¢0560 STA TONES¢0570 PLA ;Get addr of¢0580 ; time variable.¢0590 STA TIME+1¢0600 PLA ¢0610 STA TIME¢0620 PLA ;Ignore hi-byte¢0630 ; of volume.¢0640 PLA ;Get low-byte¢0650 ; of volume,¢0660 ORA #$A0 ;OR w/distortion¢0670 ; value,¢0680 STA AUDC1 ; init sound.¢0690 INC1¢0700 LDY POS ;Find index into¢0710 ; string.¢0720 INC POS ;Move right¢0730 LDA (ADDR),Y ;Get current¢0740 ; character.¢0750 TAX ; Save it.¢0760 INY ; Increase again¢0770 LDA (ADDR),Y ;Get operand¢0780 ; (if any)¢0790 TAY ;Save it.¢0800 SEC ;Make operand¢0810 ; into an index¢0820 SBC #$31 ; by subtracting¢0830 ; a "1".¢0840 CPX #$54 ;Is it a tempo¢0850 ; command?¢0860 BNE TSTDUR ;No. Try again.¢0870 ;¢0880 ASL A ;Multiply by 4¢0890 ; for an index¢0900 ASL A ; into table.¢0910 STA TEMPO ;Done.¢0920 ;¢0930 TSTDUR¢0940 CPX #$4C ;A duration cmd?¢0950 BNE TSTOCT ;No. Try again.¢0960 ;¢0970 STA DURATN ;Save new¢0980 ; dur. index.¢0990 TSTOCT¢1000 CPX #$4F ;Is it an "O"¢1010 ; (An Octave?)¢1020 BNE TSTPER ;No. Try again.¢1030 ;¢1040 SEC ;subtract two to¢1050 SBC #$02 ; find total of¢1060 ; "3"¢1070 STA OCTAVE ; and save it.¢1080 TSTPER¢1090 CPX #$2E ;Is it a period?¢1100 BNE TSTCOM ;No.¢1110 ;¢1120 RTS ¢1130 ;¢1140 TSTCOM¢1150 CPX #$2C ;Is it a delay?¢1160 BNE TSTSEM ;No.¢1170 ;¢1180 LDA TEMPO ;1st duration¢1190 ; for this tempo¢1200 CLC ; and branch.¢1210 BCC DELAY2 ;UNCONDITIONAL!¢1220 ;¢1230 TSTSEM¢1240 CPX #$3B ;Is it a " ; "?¢1250 BNE TSTNOTE ;No. Try again.¢1260 ;¢1270 LDA #5 ;Delay for 1/12¢1280 ; of a second.¢1290 BNE DELAY3 ;UNCONDITIONAL!¢1300 ;¢1310 TSTNOTE¢1320 CPX #$41 ;Less than "A" ?¢1330 BMI INC1 ;Yes...¢1340 ;¢1350 CPX #$48 ;Gr. than "G" ?¢1360 BCS INC1 ;Yes, so note¢1370 ; is illegal.¢1380 ;¢1390 TXA ;Convert note to¢1400 ; an index¢1410 SEC ; by subtracting¢1420 ; an "A"¢1430 SBC #$41¢1440 ASL A ;Multiply by two¢1450 CPY #$23 ;Is next char.¢1460 ; a "#" ?¢1470 BNE FLAT ;No. Try again.¢1480 ;¢1490 CLC ;get flat of nxt¢1500 ; higher note.¢1510 ADC #3¢1520 FLAT¢1530 CPY #$2D ;Is next char a¢1540 ; "-" ?¢1550 BNE TIMES4 ;No. Try again.¢1560 ;¢1570 CLC ;Point to Flat¢1580 ; value.¢1590 ADC #1¢1600 TIMES4¢1610 CMP #$0F ;Is Note greater¢1620 ; than G# ?¢1630 BCC TIMES5 ;No. Try again.¢1640 ;¢1650 LDA #1 ;Yes. Go back to¢1660 ; A-flat.¢1670 TIMES5¢1680 ASL A ;Multiply note¢1690 ; by 4 to get a¢1700 ASL A ; table index.¢1710 CLC ;Add octave for¢1720 ADC OCTAVE ; position of¢1730 ; sound vlue¢1740 TAY ;Prepare to LOAD¢1750 LDA (TONES),Y ;get actual¢1760 ; sound value¢1770 STA AUDF1 ; & start note.¢1780 DELAY¢1790 LDA TEMPO ;Figure tone¢1800 ; duration by¢1810 CLC ; by adding¢1820 ; duration to¢1830 ; TEMPO*4¢1840 ADC DURATN ; to get index.¢1850 DELAY2¢1860 TAY ;Prepare to LOAD¢1870 LDA (TIME),Y ;Get actual¢1880 ; tone duration.¢1890 DELAY3¢1900 LDY #0 ;Reset clock¢1910 STY CLOCK¢1920 WAIT¢1930 CMP CLOCK ;Time up?¢1940 BCS WAIT ;No. Continue.¢1950 ;¢1960 STY AUDF1 ;Turn off sound.¢1970 CLC ¢1980 BCC INC1 ;UNCONDITIONAL!¢1990 ;¢2000 .END ¢