A music composition program. The menu offers 1 Input, 2 Clear, 3 Save, 4 Load, 5 Compile, 6 Copy and 7 Quit program. You enter a tune, keep it on tape as a music file, and compile it. A demo song is on the tape and can be loaded with option 4.
The screen reads “MUSIcomp, Copyright 1986 BYTE POWER, Written by Eric Boisvert”. It was track 09 of Byte Power 1st Class Magazine, Issue 4, November 1986, a tape magazine from Canada. It is a different program from Musicomp 1 in Byte Power’s Issue 6.
Program Analysis
The work is done by a machine code block, MUSICP.C1, 5159 bytes loaded at 50000. Line 9000 is the start line. It loads the code, and line 10 runs it with RANDOMIZE USR 5e4. As in other Byte Power programs, the code returns with a BASIC line number in addresses 65534–65535, and BASIC jumps there with GO TO PEEK 65535*256+PEEK 65534. Line 3010 re-enters the menu at 50282.
- Lines 4000–5230 handle files. Line 8020 reads a value that the code leaves in addresses 65532–65533. If it is below 59999, line 5110 saves the music file from 55727. Otherwise line 5030 saves the data from 60000 up to that address. Loads always go to 55727.
- Line 10 sets the TS2068’s
ON ERR GO TO 9900, so any BASIC error, such as a tape error, prints ERROR…SORRY! and returns to the menu rather than stopping the program. - Quit (line 2610) runs
RANDOMIZE USR 0, which resets the computer. - The tape also has the demo song
MUSDEM.C1(1595 bytes) and a further code file,SOLFEG.CX.
Potential Issues
- Line 4020 always loads at 55727. A block saved from 60000 by line 5030 would therefore load at the wrong address if it is reloaded through option 4, unless it is meant for use outside the program.
- The verify after saving, at lines 5210–5220, is commented out.
Until now, the issue’s download had this track only as a WAV recording. It now also includes the track as a TAP converted from a Larken disk copy, with the PRINT #4 prefixes, RANDOMIZE USR 100 calls and disk load line removed. It was tested in ZEsarUX, including loading the demo song from tape.
Source Code
0 REM MUSIcomp *1986 BYTE POWER written by Eric Boisvert
10 IF PEEK 23681<>0 THEN ON ERR GO TO 9900: RANDOMIZE USR 5e4: GO TO PEEK 65535*256+PEEK 65534
20 CLS : LIST 9999: STOP
2600 REM QUIT PROGRAM
2610 RANDOMIZE USR 0
3000 REM RETURN TO MUSICOMP
3010 PRINT AT 0,0;: RANDOMIZE USR 50282: GO TO PEEK 65535*256+PEEK 65534
4000 REM LOAD FILE
4010 GO SUB 8000
4020 PRINT #4: LOAD n$CODE 55727
4030 GO TO 3000
5000 REM SAVE FILE/DATA
5010 GO SUB 8000
5015 REM SAVE DATA (at 6e4)
5020 IF a<59999 THEN GO TO 5100
5030 PRINT #4: SAVE n$CODE 60000,a-59999
5040 GO TO 5200
5100 REM SAVE FILE
5110 PRINT #4: SAVE n$CODE 55727,a+1
5200 REM VERIFY RECORDED DATA
5210 REM PRINT #1;AT 1,0;"REWIND TAPE TO VERIFY ";n$
5220 REM VERIFY n$CODE : GO TO 3000
5230 GO TO 3000
8000 REM INPUT FILE NAME
8010 CLS : INPUT "FILE NAME:"; LINE n$: IF LEN n$>9 THEN GO TO 8010
8020 LET a=PEEK 65532+256*PEEK 65533: RETURN
9000 CLS : PRINT AT 10,0;"STILL LOADING...": PAUSE 180: CLS
9010 RANDOMIZE USR 100: LOAD "MUSICP.C1"CODE : GO TO 10
9900 ON ERR GO TO 9900
9910 CLS : PRINT #1;AT 1,0;"ERROR...SORRY!": PAUSE 180: GO TO 3000
9992 RANDOMIZE USR 100: SAVE "MUSICP.B1" LINE 9000: REM RANDOMIZE USR 100: SAVE "MUSICP.C1"CODE 5e4,5159
9998 PRINT #4: LOAD "L.B1"
9999 SAVE "MUSIcomp" LINE 9000: SAVE "MUSIcodes"CODE 5e4,5159: VERIFY "MUSIcomp": VERIFY "MUSIcodes"CODENote: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
