10
20
30
40
50
60
70 :
80 DIM space% &400
100 IRQ2V=&206:USERV=&200
110 mcode%=&FFFF0B58
120 FOR P=0 TO 1
130 P%=mcode%:O%=space%
140 [OPT P*3+4
150 .Start%
160 LDA IRQ2V:CMP #CS%AND255:BNE Setup
170 LDA IRQ2V+1:CMP#CS%DIV256:BEQ Exit
180 .Setup
190 JSR Vectors:\ Save old vectors
200 LDA #Int AND 255:STA IRQ2V
210 LDA #Int DIV 256:STA IRQ2V+1
220 LDA #Undo AND 255:STA USERV
230 LDA #Undo DIV 256:STA USERV+1
240 LDA #&00:LDX #&04
250 .ClrLp
260 STA &93,X
270 DEX:BNE ClrLp
280 LDX #&FD:JSR IntMask
290 .Exit
300 LDX #7
310 .ExitLp
320 LDA Chars,X:JSR &FFEE
330 DEX:BPL ExitLp
340 RTS
350 .Chars
360 EQUB 12:EQUB 8:EQUB &27
370 EQUB &18:EQUB 0:EQUB 28
380 EQUB 7:EQUB 22
390 .IntMask
400 LDA #&E9:LDY #0:JMP &FFF4
410 .Undo
420 LDX #&FF:JSR IntMask
430 .Vectors
440 LDX #1
450 .VecLp
460 LDA USERV,X:LDY OldUSERV,X
470 STA OldUSERV,X:TYA:STA USERV,X
480 LDA IRQ2V,X:LDY OldIRQ2V,X
490 STA OldIRQ2V,X:TYA:STA IRQ2V,X
500 DEX:BPL VecLp
510 RTS
520 .Screen
530 LDA #32:LDX #255
540 .ScrBlnk
550 STA &7C40,X:DEX:BNE ScrBlnk
560 LDX #8
570 .ScrLp
580 LDA Vol,X:STA &7C00,X:STA &7C50,X
590 STA &7CA0,X:STA &7CF0,X
600 LDA Pit,X:STA &7C28,X:STA &7C78,X
610 STA &7CC8,X:STA &7D18,X
620 DEX:BPL ScrLp
630 RTS
640 .Vol:EQUS "Volume0“"
650 .Pit:EQUS "Pitch0— "
660 :
670 .CS%:.C%:\ Code start
680 .L7D40
690 .Int
700 LDA &FC
710 PHA:TXA:PHA:TYA:PHA
720 LDA &FE4D:AND #&82
730 CMP #&82:BEQ L7D53
740 JMP L0CB0-CS%+C%
750 .L7D53
760 STA &FE4D
770 LDA #&09:STA &90
780 LDA #&7C:STA &91
790 LDA #&30:STA &92
800 LDA #&7C:STA &93
810 LDA #&00:STA L0CDC-CS%+C%
820 .L0C2B
830 LDX L0CDC-CS%+C%
840 LDA &0808,X
850 CMP #&C0:BMI L7D7B
860 CMP #&C7:BPL L7D7B
870 LDA #&C7
880 .L7D7B
890 SEC:SBC #&C7
900 LSR A:LSR A:LSR A:STA L0CDE-CS%+C%
910 LDY #&00:LDA #&AF
920 .L7D88
930 CPY L0CDE-CS%+C%:BMI L7D8F
940 LDA #&20
950 .L7D8F
960 STA (&90),Y
970 INY:CPY #&10:BNE L7D88
980 LDA &90:CLC:ADC #&50:STA &90
990 BCC L7DA1:INC &91
1000 .L7DA1
1010 LDX L0CDC-CS%+C%
1020 LDA L0CDE-CS%+C%:BEQ L7DB6
1030 LDA &0830,X:STA L0CDD-CS%+C%
1040 CPX #&00:BEQ L7DFA
1050 .L0C73
1060 LSR A:LSR A:LSR A
1070 .L7DB6:.L0C76
1080 STA L0CDF-CS%+C%
1090 LDY &94,X
1100 LDA #&20:STA (&92),Y
1110 LDA L0CDE-CS%+C%:BEQ L7DD7
1120 LDY #&A5:LDA L0CDD-CS%+C%
1130 AND #&04:BEQ L7DCF
1140 LDY #&AA
1150 .L7DCF
1160 TYA
1170 LDY L0CDF-CS%+C%
1180 STY &94,X
1190 STA (&92),Y
1200 .L7DD7
1210 LDA &92:CLC:ADC #&50:STA &92
1220 BCC L7DE2
1230 INC &93
1240 .L7DE2
1250 LDX L0CDC-CS%+C%
1260 INX
1270 STX L0CDC-CS%+C%
1280 CPX #&04
1290 BEQ L7DF0
1300 JMP L0C2B-CS%+C%
1310 .L7DF0:.L0CB0
1320 LDA &7D18:CMP #ASC"P":BNE CallScr
1330 LDA &7C00:CMP #ASC"V":BEQ IntExit
1340 .CallScr
1350 JSR Screen
1360 .IntExit
1370 PLA:TAY:PLA:TAX:PLA:STA &FC
1380 JMP (OldIRQ2V-CS%+C%)
1390 .L7DFA
1400 AND #&07:CMP #&03:BEQ L7E0E
1410 CMP #&07:BEQ L7E0E
1420 PHA
1430 LDA #&93:STA &7C2F
1440 PLA
1450 JMP L0C76-CS%+C%
1460 .L7E0E
1470 LDA #&92:STA &7C2F
1480 LDA &0831
1490 STA L0CDD-CS%+C%
1500 JMP L0C73-CS%+C%
1510 .L0CDC:BRK
1520 .L0CDD:BRK
1530 .L0CDE:BRK
1540 .L0CDF:BRK
1550 .OldIRQ2V:EQUW Int
1560 .OldUSERV:EQUW Undo
1570 ]NEXT:O%=O%-4
1580 PRINT"*SAVE Music ";~space%;" ";~O%;" ";~Start%OR&FFFF0000;" ";~mcode%