MUSIcomp

This file is part of Byte Power November 1986. Download the collection to get this file.
Developer(s): Eric Boisvert
Date: 1986
Type: Program
Platform(s): TS 2068
Tags: Music

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.

Appears On

Tape-based magazine. Tracks 08 Super Budget and 09 MUSIcomp were previously only in the download as a snapshot and a

Image Gallery

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"CODE

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.