home *** CD-ROM | disk | FTP | other *** search
- ; UTILITY - Musicraft Development System
-
- IF NOT TRS80
- ORG 100H
- ELSE
- ORG 7000H
- ENDIF
-
- MAIN$LINE:
- JMP RESTART
- BOOTER: JMP SYSTEM
- DB 'copyright 1981 by computercraft'
-
- ORG MAIN$LINE+80H
- RESTART:
- LXI SP,STACK
- MOVI STATE,0
- MOVI OLD$SW,FALSE
- MOVI STO$SW,FALSE
- CALL BEGIN
- CALL INIT$UART
- MNLN01:
- CALL CLR$SCR
- WRTLN MAIN$MENU
- GTCH CH
- MOV B,A
- MIFI 'J',JUKE$BOX,MNLN01
- MIFI 'P',PRNT$SONG,MNLN01
- MIFI 'T',RS232,MNLN01
- MIFI 'D',DISK$OPS,MNLN01
- MIFI 'U',OLD$NEW,MNLN01
- MIFI 'B',BASIC,MNLN01
- MIFI 'Q',BOOT,MNLN01
- JMP MNLN01
-
- MAIN$MENU:
- DB 13,10
- DB 'Type a...'
- DB 13,10
- DB ' J to edit a jukebox menu'
- DB 13,10
- DB ' P to print a song from memory'
- DB 13,10
- DB ' T to transfer between memory and RS232'
- DB 13,10
- DB ' D to transfer between memory and diskette'
- DB 13,10
- DB ' U to convert old format to new format'
- DB 13,10
- DB ' B to convert BASIC output to proper format'
- DB 13,10
- DB ' Q to quit the utility program'
- DB 13,10
- DB ' ...>'
- DB '$'
-
- JUKE$BOX:
- CALL GET$NAME
- CALL CLEAR$MENU
- CALL LOAD$MENU
- CALL DSPL$MENU
- JC JUKE02
- JUKE01:
- CALL EDIT$MENU
- CALL DSPL$MENU
- JNC JUKE01
- JUKE02:
- CALL SAVE$MENU
- RET
-
- GET$NAME:
- CALL CLR$SCR
- WRTLN GTNML1
- REDLN MENU$NAME,32
- RET
- GTNML1: DB 13,10,'Enter name of menu to edit >','$'
- DB 32,0
- MENU$NAME: DS 32
-
- CLEAR$MENU:
- LXI H,MENU
- MVI D,10
- CLMN01:
- MVI M,0FFH
- INX H
- MVI E,56
- CLMN02:
- MVI M,SPACE
- INX H
- DCR E
- JNZ CLMN02
- MVI M,'$'
- INX H
- DCR D
- JNZ CLMN01
- RET
-
- LOAD$MENU:
- RESET FCB,MENU$NAME,'S','C','D'
- RC
- READF FCB,CH
- MCPI CH,'M' ; CHECK FOR MENU
- JNZ LDMN03
- LXI H,MENU
- MVI D,10
- LDMN01:
- MVI E,58
- LDMN02:
- PUSH H
- PUSH D
- READF FCB,CH
- POP D
- POP H
- RC
- MOV M,A
- INX H
- DCR E
- JNZ LDMN02
- DCR D
- JNZ LDMN01
- RET
- LDMN03:
- WRTLN LDMNL1
- GTCH CH
- POP H
- RET
- LDMNL1: DB 13,10,'File specified is not a menu file.'
- DB 13,10,'Press any key to continue >','$'
-
- DSPL$MENU:
- CALL CLR$SCR
- DMVI I,MENU
- DMVI J,0
- WRTLN DSMNL1 ; WRITE LEGEND
- DSMN01:
- INTSTR J,DSMNR,1 ; DISPLAY LINE NUMBER
- WRTLN DSMNL2
- XGET 0,I ; DISPLAY KEY
- ORA A
- JP DSMN02
- MVI A,SPACE
- DSMN02:
- CALL FWTCH
- DINC I
- MVI A,SPACE
- CALL FWTCH
- MVI B,16 ; DISPLAY FILE NAME
- DSMN03:
- XGET 0,I
- PUSH B
- CALL FWTCH
- POP B
- DINC I
- DCR B
- JNZ DSMN03
- MVI A,SPACE
- CALL FWTCH
- LHLD I ; DISPLAY MENU TEXT
- CALL FWRTLN
- DADI I,I,41
- NXTI DSMN01,J,9
- DSMN04:
- WRTLN DSMNL3 ; ASK FOR EDIT
- READ CH
- MCPI CH,'N'
- STC
- RZ
- MCPI CH,'Y'
- STC
- CMC
- RZ
- CALL BEEP
- MVI A,7
- CALL FWTCH
- JMP DSMN04
- DSMNL1: DB 13,10,'L K Filename (<=16) '
- DB 'Menutext (<=40)'
- DB 13,10,'$'
- DSMNL2: DB 13,10
- DSMNR: DB ' ','$'
- DSMNL3: DB 13,10,'Do you wish to edit a line (y/n)? >','$'
-
- EDIT$MENU:
- WRTLN EDMNL1 ; GET LINE NUMBER
- READ CH
- MCPI CH,'0'
- JM EDIT$MENU
- MCPI CH,':'
- JP EDIT$MENU
- ANI 0FH
- MOV L,A
- MVI H,0
- SHLD I
- DMLI I,I,58
- DADI I,I,MENU
- WRTLN EDMNL2 ; GET IDENTIFIER
- READ CH
- CPI SPACE ; CHECK FOR
- JM EDMN01 ; DELETE
- LHLD I
- MOV M,A
- INX H
- SHLD I
- WRTLN EDMNL3 ; GET FILE NAME
- REDLN EDMNL4,16
- LHLD I
- XCHG
- LXI H,EDMNL4
- MVI A,16
- CALL MOVE$LEFT
- DADI I,I,16
- WRTLN EDMNL5 ; GET MENU TEXT
- REDLN EDMNL6,40
- LHLD I
- XCHG
- LXI H,EDMNL6
- MVI A,40
- CALL MOVE$LEFT
- RET
- EDMN01:
- LHLD I ; CLEAR ENTRY
- MVI M,0FFH
- INX H
- MVI E,56
- EDMN02:
- MVI M,SPACE
- INX H
- DCR E
- JNZ EDMN02
- RET
- EDMNL1: DB 13,10,13,10,'Enter line number (0..9) >','$'
- EDMNL2: DB 13,10,'Enter song select key >','$'
- EDMNL3: DB 13,10,'Enter song file name (<=16 char) >','$'
- DB 32,0
- EDMNL4: DS 32
- EDMNL5: DB 13,10,'Enter song prompt text (<=40 char) >','$'
- DB 40,0
- EDMNL6: DS 40
-
- SAVE$MENU:
- DELETE FCB,MENU$NAME,'S','C','D'
- REWRT FCB,MENU$NAME,'S','C','D'
- LXI D,FCB
- MVI A,'M'
- CALL FWRIT
- LXI H,MENU
- MVI D,10
- SVMN01:
- MVI E,58
- SVMN02:
- PUSH H
- PUSH D
- MOV A,M
- LXI D,FCB
- CALL FWRIT
- POP D
- POP H
- INX H
- DCR E
- JNZ SVMN02
- DCR D
- JNZ SVMN01
- WRTFI FCB,0
- WRTFI FCB,0
- CLOSE FCB
- RET
-
- PRNT$SONG:
- MCPI STATE,1
- RNZ
- CALL GET$DATE
- DMVI SONG$CNT,0
- DMVI LINE$CNT,99
- DMVI J,0
- PRSG01:
- CALL PRNT$LINE
- DCP I,J
- JP PRSG01
- MCPI PAGE$FEED,0
- RZ
- CALL PRINT
- RET
-
- GET$DATE:
- CALL CLR$SCR
- WRTLN GTDTL1
- REDLN DATE,32
- RET
-
- GTDTL1:
- DB 13,10
- DB 13,10
- DB 'Enter date for heading >','$'
- DS 2
- DATE: DS 33
-
- PRNT$LINE:
- LHLD J
- LXI D,SONG$TABLE
- DAD D
- LXI D,PRLN+4
- LDA LSIZE
- CALL MOVELEFT
- IF PERCUSSION
- CALL CNVRT$PRC
- ENDIF
- DADD J,J,LSIZE
- DINC SONG$CNT
- DINC LINE$CNT
- MCP LINE$CNT,PAGE$HEIGHT
- CP PRNT$HEAD
- MCPI PRLN+4,'*'
- JZ PRNT$OPTION
- INTSTR SONG$CNT,PRLN,4
- DMVI D$PNT,PRLN
- DMVI C$PNT,SP$LINE
- DMOV COUNT,LSIZE
- DADI COUNT,COUNT,4
- IF PERCUSSION
- DADI COUNT,COUNT,8
- ENDIF
- CALL PRNT$DATA
- CALL NEW$PRLN
- RET
-
- IF PERCUSSION
- CNVRT$PRC:
- XGET PRLN-1,LSIZE ; GET
- STA CPX2 ; PERCUSSION
- DMVI CPX1,PER$TAB ; CPX1:=0;
- CP01:
- XGET PKEY,CPX1 ; WHILE PER_TAB[CPX1].KEY<>0FFH DO BEGIN
- CPI TRUE
- RZ
- MVI C,SPACE
- LDA CPX2 ; IF PERCUSSION AND
- MOV B,A
- XGET PMSK,CPX1 ; PER_TAB[CPX1].MSK THEN BEGIN
- ANA B
- JZ CP02
- XGET PKEY,CPX1 ; WRITE(PER_TAB[CPX1].KEY)
- MOV C,A
- CP02:
- XGET PATTR,CPX1
- MOV E,A
- MVI D,0
- LXI H,PRLN+16
- DAD D
- MOV M,C
- DADI CPX1,CPX1,3
- JMP CP01
-
- CPX1: DW 0
- CPX2: DB 0
-
- PKEY EQU 0
- PMSK EQU 1
- PATTR EQU 2
- PER$TAB:
- DB 'A',80H,0
- DB 'B',40H,1
- DB 'C',20H,2
- DB 'D',10H,3
- DB 'E',08H,4
- DB 'F',04H,5
- DB 'G',02H,6
- DB 0FFH
- ENDIF
-
- PRNT$HEAD:
- MCPI PAGE$FEED,0
- JNZ PRHD01
- MCPI PAGE$SPACE,0
- RZ
- PRHD01:
- MCPI PAGE$CNT,0
- JZ PRHD04
- MCPI PAGE$FEED,0
- JZ PRHD02
- CALL PRINT
- JMP PRHD04
- PRHD02:
- MOVE X,PAGE$SPACE
- MOVI X+1,0
- PRHD03:
- CALL NEW$PRLN
- DDEC X
- MOV A,H
- ORA L
- JNZ PRHD03
- PRHD04:
- DMVI LINE$CNT,0
- LMVI FILE$NAME,HEDNG,12
- LMOV DATE,HEDNG+12,DATE-1
- DINC PAGE$CNT
- INTSTR PAGE$CNT,HPAGE+4,2
- DMVI D$PNT,HEDNG
- DMVI C$PNT,SP$HEAD
- DMVI COUNT,46
- CALL PRNT$DATA
- CALL NEW$PRLN
- CALL NEW$PRLN
- DMVI D$PNT,LEGEND
- DMVI C$PNT,SP$LEGEND
- IF PERCUSSION
- DMVI COUNT,44
- ELSE
- DMVI COUNT,36
- ENDIF
- CALL PRNT$DATA
- CALL NEW$PRLN
- CALL NEW$PRLN
- RET
-
- PRNT$OPTION:
- DMVI D$PNT,PRLN+4
- DMVI C$PNT,SP$OPT
- DMVI COUNT,15
- CALL PRNT$DATA
- CALL NEW$PRLN
- RET
-
- PRNT$DATA:
- DMVI X,1
- PRDT01:
- LHLD C$PNT
- MOV A,M
- ORA A
- JM PRDT02
- CALL PRNT$SPACE
- LHLD D$PNT
- MOV A,M
- CALL PRINT
- PRDT02:
- DINC D$PNT
- DINC C$PNT
- NEXT PRDT01,X,COUNT
- RET
-
- PRNT$SPACE:
- ORA A
- RZ
- STA W
- XRA A
- STA W+1
- DMVI Y,1
- PRSP01:
- MVI A,SPACE
- CALL PRINT
- NEXT PRSP01,Y,W
- RET
-
- NEW$PRLN:
- MVI A,0DH
- CALL PRINT
- MVI A,0AH
- CALL PRINT
- CALL PRNT$NULL
- CALL PRNT$NULL
- CALL PRNT$NULL
- PRNT$NULL:
- MVI A,0
- CALL PRINT
- RET
- PRINT:
- IF NOT TRS80
- MOV E,A
- MVI C,5
- CALL CPM
- RET
- ELSE
- LXI H,37E8H
- PRNT$LOOP:
- MOV D,M
- DB 0CBH,7AH ; BIT 7,D
- JNZ PRNT$LOOP
- MOV M,A
- RET
- ENDIF
- W: DW 0
- X: DW 0
- Y: DW 0
- D$PNT: DW 0
- C$PNT: DW 0
- SONG$CNT: DW 0
- LINE$CNT: DW 99
- COUNT: DW 0
- PAGE$CNT: DW 0
-
- HEDNG: DB ' '
- DB ' '
- HPAGE: DB 'PAGE '
- SP$HEAD: DB 10,0,0,0,0,0,0,0
- DB 2,0,0,0,0,0,0,0
- DB 0,0,0,0,0,0,0,0
- DB 0,0,0,0,0,0,0,0
- DB 0,0,0,0,0,0,0,0
- DB 2,0,0,0,1,0
- IF NOT PERCUSSION
- LEGEND: DB 'LINEDURATIONVOICE1VOICE2VOICE3VOICE4'
- SP$LEGEND: DB 10,0,0,0
- DB 3,0,0,0,0,0,0,0
- DB 3,0,0,0,0,0
- DB 3,0,0,0,0,0
- DB 3,0,0,0,0,0
- DB 3,0,0,0,0,0
- PRLN: DB 'LLLLDDDWWWXXXYYYZZZ'
- SP$LINE: DB 10,0,0,0
- DB 128,6,0
- DB 7,0,0
- DB 6,0,0
- DB 6,0,0
- DB 6,0,0
- ELSE
- LEGEND: DB 'LINEDURATIONVOICE1VOICE2VOICE3VOICE4ABCDEFG'
- SP$LEGEND: DB 10,0,0,0
- DB 3,0,0,0,0,0,0,0
- DB 3,0,0,0,0,0
- DB 3,0,0,0,0,0
- DB 3,0,0,0,0,0
- DB 3,0,0,0,0,0
- DB 3,0,0,0,0,0,0,0
- PRLN: DB 'LLLLDDDWWWXXXYYYZZZ '
- SP$LINE: DB 10,0,0,0
- DB 128,6,0
- DB 7,0,0
- DB 6,0,0
- DB 6,0,0
- DB 6,0,0
- DB 3,0,0,0,0,0,0,0
- ENDIF
- SP$OPT: DB 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
- RS232:
- CALL CLR$SCR
- WRTLN RSL1
- GTCH CH
- MOV B,A
- MIFI '1',RCEV$SONG,RS01
- MIFI '2',XMIT$SONG,RS01
- MIFI '3',RCEV$WAVE,RS01
- MIFI '4',XMIT$WAVE,RS01
- MIFI '5',SET$BAUD,RS01
- RS01: RET
-
- RSL1: DB 13,10
- DB 'RS232:'
- DB 13,10
- DB ' Type a...'
- DB 13,10
- DB ' 1 to receive a song'
- DB 13,10
- DB ' 2 to send a song'
- DB 13,10
- DB ' 3 to receive a waveform'
- DB 13,10
- DB ' 4 to send a waveform'
- DB 13,10
- DB ' 5 to change the baud'
- DB 13,10
- DB ' ...>'
- DB '$'
-
- RCEV$SONG:
- WRTLN RCSGL1
- DMVI I,0
- RCSG01:
- CALL GTCHAR
- CPI 7FH
- JZ RCSG02
- XPUT SONG$TABLE,I
- DINC I
- JMP RCSG01
- RCSG02:
- DDEC I
- MOVI STATE,1
- RET
-
- RCSGL1:
- DB 13,10
- DB 13,10
- DB 'Receiving song. Please stand by.'
- DB '$'
-
- XMIT$SONG:
- MCPI STATE,1
- RNZ
- WRTLN XMSGL1
- GTCH CH
- CPI SPACE
- RNZ
- WRTLN XMSGL2
- DDEC I
- DMVI J,0
- XMSG01:
- XGET SONG$TABLE,J
- CALL PTCHAR
- NEXT XMSG01,J,I
- MVI A,7FH
- CALL PTCHAR
- RET
-
- XMSGL1:
- DB 13,10
- DB 13,10
- DB 'Type <space> when ready to transmit >'
- DB '$'
- XMSGL2:
- DB 13,10
- DB 13,10
- DB 'Transmitting song. Please stand by.'
- DB '$'
-
- RCEV$WAVE:
- WRTLN RCWVL1
- DMVI I,0
- RCWV01:
- CALL GTBYTE
- XPUT WAVE$TABLE,I
- NXTI RCWV01,I,591
- MOVI STATE,2
- RET
-
- RCWVL1:
- DB 13,10
- DB 13,10
- DB 'Receiving waveform. Please stand by.'
- DB '$'
-
- XMIT$WAVE:
- MCPI STATE,2
- RNZ
- WRTLN XMWVL1
- GTCH CH
- CPI SPACE
- RNZ
- WRTLN XMWVL2
- DMVI I,0
- XMWV01:
- XGET WAVE$TABLE,I
- CALL PTBYTE
- NXTI XMWV01,I,591
- RET
-
- XMWVL1:
- DB 13,10
- DB 13,10
- DB 'Press <space> when ready to transmit >'
- DB '$'
- XMWVL2:
- DB 13,10
- DB 13,10
- DB 'Transmitting waveform. Please stand by.'
- DB '$'
-
- SET$BAUD:
- WRTLN STBDL1
- GTCH CH
- CPI '1'
- JM SET$BAUD
- CPI '8'
- JP SET$BAUD
- ANI 07H
- DCR A
- MVI B,0
- MOV C,A
- CALL INIT$BAUD
- RET
-
- STBDL1:
- DB 13,10
- DB 13,10
- DB 'Type a...'
- DB 13,10
- DB ' 1 for 110'
- DB 13,10
- DB ' 2 for 300'
- DB 13,10
- DB ' 3 for 600'
- DB 13,10
- DB ' 4 for 1200'
- DB 13,10
- DB ' 5 for 2400'
- DB 13,10
- DB ' 6 for 4800'
- DB 13,10
- DB ' 7 for 9600'
- DB 13,10
- DB ' ...>'
- DB '$'
-
- DISK$OPS:
- CALL CLR$SCR
- WRTLN DKOPL1
- GTCH CH
- MOV B,A
- MIFI '1',LOAD$SONG,DKOP01
- MIFI '2',SAVE$SONG,DKOP01
- MIFI '3',LOAD$WAVE,DKOP01
- MIFI '4',SAVE$WAVE,DKOP01
- DKOP01: RET
-
- DKOPL1:
- DB 13,10
- DB 'Diskette:'
- DB 13,10
- DB ' Type a...'
- DB 13,10
- DB ' 1 to load a song'
- DB 13,10
- DB ' 2 to save a song'
- DB 13,10
- DB ' 3 to load a waveform'
- DB 13,10
- DB ' 4 to save a waveform'
- DB 13,10
- DB ' ...>'
- DB '$'
-
- LOAD$SONG:
- WRTLN LDSGL1
- REDLN FILE$NAME,32
- RESET FCB,FILE$NAME,'S','N','G'
- JC LDSG02
- WRTLN LDSGL2
- DMVI I,0
- DMVI J,0
- LDSG01:
- READF FCB,CH
- JC LDSG03
- MCPI STO$SW,TRUE ; THIS CODE
- JNZ LDSG01A ; DELETES
- MCPI CH,13 ; CHARACTERS
- JZ LDSG01 ; USED BY
- MCPI CH,10 ; CBASIC
- JZ LDSG01 ; PROGRAMS
- MCPI CH,'"' ; FOR FORMAT
- JZ LDSG01 ; CONTROL
-
- MCPI CH,63 ; USED TO
- JNZ LDSG01A ; INDICATE
- MOVI CH,0 ; PERCUSSION
- LDSG01A:
- MCPI CH,0
- JZ LDSG01B
- MCPI CH,SPACE
- JM LDSG03
- LDSG01B:
- XPUT SONG$TABLE,I
- DINC I
- DINC J
- MCPI OLD$SW,TRUE ; IF CONVERSION
- JNZ LDSG01 ; OF OLD SONG
- DCPI J,15 ; TO NEW FORMAT
- JNZ LDSG01 ; ADD EXTRA ZERO
- DMVI J,0 ; EVERY 15 BYTES
- MOVI CH,0
- XPUT SONG$TABLE,I
- DINC I
- JMP LDSG01
- LDSG02:
- WRTLN LDSGL3
- CALL BEEP
- GTCH CH
- RET
- LDSG03:
- MOVI STATE,1
- DDEC I
- RET
-
- LDSGL1:
- DB 13,10
- DB 13,10
- DB 'Enter input song name >'
- DB '$'
- LDSGL2:
- DB 13,10
- DB 13,10
- DB 'Loading song from disk. Please stand by.'
- DB '$'
- LDSGL3:
- DB 13,10
- DB 13,10,7
- DB 'Song name not recognized.'
- DB 13,10
- DB 'Press any key to continue >'
- DB '$'
-
- SAVE$SONG:
- MCPI STATE,1
- RNZ
- WRTLN SVSGL1
- REDLN FILE$NAME,32
- DELETE FCB,FILE$NAME,'S','N','G'
- REWRT FCB,FILE$NAME,'S','N','G'
- JC SVSG02
- WRTLN SVSGL2
- DMVI J,0
- SVSG01:
- XGET SONG$TABLE,J
- LXI D,FCB
- CALL FWRIT
- JC SVSG02
- NEXT SVSG01,J,I
- CLOSE FCB
- RET
- SVSG02:
- WRTLN SVSGL3
- CALL BEEP
- GTCH CH
- JMP SAVE$SONG
-
- SVSGL1:
- DB 13,10
- DB 13,10
- DB 'Enter name of output song >'
- DB '$'
- SVSGL2:
- DB 13,10
- DB 13,10
- DB 'Saving song on disk. Please stand by.'
- DB '$'
- SVSGL3:
- DB 13,10
- DB 13,10,7
- DB 'No space on disk for song.'
- DB 13,10
- DB 'Mount new disk and press any'
- DB 13,10
- DB 'key to continue >'
- DB '$'
-
- LOAD$WAVE:
- WRTLN LDWVL1
- REDLN FILE$NAME,32
- RESET FCB,FILE$NAME,'W','A','V'
- JC LDWV02
- WRTLN LDWVL2
- DMVI I,0
- LDWV01:
- LXI D,FCB
- CALL FREAD
- JC LDWV02
- XPUT WAVE$TABLE,I
- NXTI LDWV01,I,591
- MOVI STATE,2
- RET
- LDWV02:
- WRTLN LDWVL3
- CALL BEEP
- GTCH CH
- RET
-
- LDWVL1:
- DB 13,10
- DB 13,10
- DB 'Enter name of input waveform >'
- DB '$'
- LDWVL2:
- DB 13,10
- DB 13,10
- DB 'Loading waveform from disk. Please stand by.'
- DB '$'
- LDWVL3:
- DB 13,10
- DB 13,10,7
- DB 'Waveform name not recognized.'
- DB 13,10
- DB 'Press any key to continue >'
- DB '$'
-
- SAVE$WAVE:
- MCPI STATE,2
- RNZ
- WRTLN SVWVL1
- REDLN FILE$NAME,32
- DELETE FCB,FILE$NAME,'W','A','V'
- REWRT FCB,FILE$NAME,'W','A','V'
- JC SVWV02
- WRTLN SVWVL2
- DMVI I,0
- SVWV01:
- XGET WAVE$TABLE,I
- LXI D,FCB
- CALL FWRIT
- NXTI SVWV01,I,591
- CLOSE FCB
- RET
- SVWV02:
- WRTLN SVWVL3
- CALL BEEP
- GTCH CH
- JMP SAVE$WAVE
-
- SVWVL1:
- DB 13,10
- DB 13,10
- DB 'Enter name of output waveform >'
- DB '$'
- SVWVL2:
- DB 13,10
- DB 13,10
- DB 'Saving waveform on disk. Please stand by.'
- DB '$'
- SVWVL3:
- DB 13,10
- DB 13,10,7
- DB 'No space on disk for waveform.'
- DB 13,10
- DB 'Mount new disk and press any'
- DB 13,10
- DB 'key to continue >'
- DB '$'
-
- BASIC:
- CALL CLR$SCR
- MOVI STO$SW,TRUE
- CALL LOAD$SONG
- CALL SAVE$SONG
- MOVI STO$SW,FALSE
- RET
- STO$SW: DB FALSE
-
- OLD$NEW:
- CALL CLR$SCR
- MOVI OLD$SW,TRUE
- CALL LOAD$SONG
- STRINT SONG$TABLE+3,J
- DADI J,J,1
- INTSTR J,SONG$TABLE+3,1
- CALL SAVE$SONG
- MOVI OLD$SW,FALSE
- RET
- OLD$SW: DB FALSE
-