What Fun!, a BASICODE program on vinyl

While searching for more vinyl records containing computer data, I stumbled upon Let’s Get Digital by What Fun!, a Dutch group. And I got stuck a bit before getting the program to work.

Instead of repeating all the previous articles each time, I’ll refer you to the dedicated page, which explains what I do with vinyl records and lists all the pages containing programs, explanations, etc.

 

During my initial attempts, I assumed that what the text found on YouTube said was true, namely that it was a program for the ZX Spectrum. But after a few unsuccessful tries, I looked at the cover and read « This record contains a computer program in N.O.S. BASICODE. ». A Wikipedia search later, I learned that BASICODE is a kind of standardized BASIC used in the Netherlands, and it allows running programs on different computers. The method to decode it is even available on the page and involves Minimodem, which I had already used. So, I processed my recordings through it to decode everything.

The cover sets the tone (at the bottom)

The result was filled with errors (correctable manually) during my initial attempts, but I realized that by filtering frequencies (low-pass filter at 5,000 Hz, high-pass at 300 Hz), the result was practically perfect (just one poorly encoded line). Furthermore, there are websites that display the code (with an error on one line, by the way, and you have to correct the "). I’ll include the code at the end of the article, just in case.

The next question was, « how to run the code? » In theory, the solution involves the BASICODE interpreter, possibly in an emulator. It’s possible, someone did it on an Amstrad CPC. In practice, it’s quite complicated. You have to load the interpreter and then try to load the data once it’s launched. I’m not proficient enough with those old machines for that, but it’s still possible, and you can find the code for many devices from that era, from the Apple II to the Commodore 64, including the ZX81 and ZX Spectrum (and others). The second solution, which I chose, is a modern BASICODE interpreter. There’s one that’s open source and usable online (it’s in JavaScript). In practice, the result is initially mixed: it’s way too fast, and I couldn’t slow it down to settings that would truly show the animation. The first part of the video shows the result with the default settings. For the second part, I slowed it down to the minimum and adjusted the code loops a bit to make it usable, then I sped it up a bit for something smooth and closer to the result on a real computer from that time. Without cheating, it runs in less than 10 seconds in the interpreter. The modified version shows the animations well without being too long, playing a bit with the playback speed.

The Code

1000 A=100:GOTO20
1010 WF$="WHAT FUN!"
1020 LG$="Let's get DIGITAL"
1030 WL$=WF$+" "+LG$+"."
1040 GOSUB100:PRINTWF$;" ";WF$
1050 OH=20:OV=13:VE=5
1060 OH=OH+1:HO=OH:GOSUB110:GOSUB120:IFHO=OH THEN1060
1070 HO=10
1080 OV=OV+1:VE=OV:GOSUB110:GOSUB120:IFVE=OV THEN1080
1090 OH=OH-1:OV=OV-1
1100 SP$=" "
1110 SP$=SP$+SP$:SP$=LEFT$(SP$,OH)
1120 GOSUB100
2000 FORC=1 TOOV-2 STEP2
2010 PRINTTAB(INT(C*OH/OV));"*"
2020 PRINTTAB(INT((OH-17)/2));LG$
2030 NEXTC
2040 FORI=1 TO5000:NEXTI
3000 GOSUB100
3010 FORP=1 TOINT(OV/7)
3020 FORQ=0 TO6
3030 TQ=1+INT((OH-19)*Q/7)
3040 IFQ=5 THENBH=TQ
3050 PRINTTAB(TQ);WF$;" ";WF$
3060 NEXTQ
3070 NEXTP
3080 NR=INT(OH/6)
4000 FORL=1 TO350
4010 GOSUB260:HO=INT(OH*RV)
4020 GOSUB260:VE=INT(OV*RV):IFVE=OV THENVE=VE-1
4030 GOSUB260:RN=1+INT(NR*RV)
4040 IFL>150 THENRN=OH
4050 IFHO+RN>OH THENRN=OH-HO
4060 IFVE<>5 THEN4080
4070 IFHO<=BH+8 ORHO+RN>=BH THEN4090
4080 GOSUB110:PRINTLEFT$(SP$,RN);
4090 NEXTL
5000 IM=2*(OH+OV)-3:I0=1
5010 FORI=0 TOIM
5020 IFI28 THENI0=1
5080 NEXTI
5090 FORI=1 TO5000:NEXTI
5100 RUN
30000 REM LET'S GET DIGITAL
30010 REM
30020 REM EEN PROGRAMMA VAN
30030 REM HAN VOET
30040 REM EN
30050 REM JACK HAUBRICH