--- title: "MUSIcomp" id: 72153 type: "computer_media" slug: "musicomp" url: "http://localhost/computer_media/musicomp/" markdown_url: "http://localhost/computer_media/musicomp.md" published_at: "2026-10-22T16:19:34+00:00" modified_at: "2026-10-22T16:19:34+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/musicomp-1.png" excerpt: "A music composer that lets you enter, edit, save and load tunes, then compile them for playback, with a demo song supplied on the tape." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Byte Power" slug: "byte-power" taxonomy: "post_tag" url: "http://localhost/tag/byte-power/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Eric Boisvert" slug: "boisvert-eric" taxonomy: "indiv" url: "http://localhost/indiv/boisvert-eric/" genre: - name: "Music" slug: "music" taxonomy: "genre" url: "http://localhost/type/music/" media_contents: - id: 63046 title: "Byte Power November 1986" type: "computer_media" url: "http://localhost/computer_media/byte-power-november-1986/" media_type: "Program" programmers: - name: "Eric Boisvert" slug: "boisvert-eric" taxonomy: "indiv" url: "http://localhost/indiv/boisvert-eric/" mediadate: "1986" producer_company: - id: 25181 title: "Byte Power" type: "company" url: "http://localhost/company/byte-power/" images: - url: "http://localhost/wp-content/uploads/2026/10/musicomp-1.png" media_type_tags: "Music" --- # MUSIcomp 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"CODE ```