Running programs on the Apple 1 – Plus GIVEAWAY

The Apple 1 itself was up and running, but it still needed a practical way to load software. I went ahead and used the Apple Cassette Interface I had already built earlier in the series, along with a period Panasonic cassette recorder, and worked through what it actually took to get programs into memory and run them.

I also announced a giveaway for a pair of reproduced Apple 1 manual sets. These included the Apple 1 manual, cassette interface manual, ad, and BASIC manual reproduced by Armin H. Viewers could enter by leaving a comment with #retrohackshack, and I said I’d pick two winners after two weeks.

Giveaway!
Giveaway!

For cassette hardware, I compared two Panasonic recorders: the later RQ-2102 Slimline that Mike Willegal recommended in his build guide, and an older RQ-309DS that matched the period much better. The newer unit weighed 1 pound 13 ounces, while the older one came in at 3 pounds 10 ounces. The RQ-309DS did run, but it started to crinkle tape, so I cleaned the heads, capstan, and pinch roller, and roughed up the old rubber a bit with sandpaper.

Repairs and calibration
Repairs and calibration

I checked motor speed on both machines with a reference tape and a spectrum analyzer app on my phone. Both recorders were running at the correct speed, which saved a lot of trouble. I also covered cabling, and what worked best here was a mono-to-mono 1/8 inch cable into the cassette interface input rather than a stereo cable or a stereo-to-mono combiner.

Loading programs
Loading programs

To improve the source files, I used Audacity and loaded Apple 1 program audio from AIFF or WAV rather than compressed formats. I normalized the files to -4 dB to raise the level and clean up the waveform a bit before exporting them back out as WAV files. That gave me a better signal when playing the files from a phone, which is handy since phone audio output tends to be a little soft for this job.

Testing some games
Testing some games

Loading on the Apple 1 took a little setup each time. I entered C100R to run the cassette interface routine, then supplied the target memory range and an R command to read data in. BASIC loaded at E000.EFFFR, and after one failed attempt I raised the volume and tried again. The second load worked, and I got the BASIC prompt back and verified it with a simple PRINT command.

Wrap up
Wrap up

From there I loaded a BASIC Christmas program and checked the last bytes in memory against the expected values before jumping back into BASIC with E2B3R so memory stayed intact. That one ran and printed an ASCII Christmas tree in a loop. I also tried Lunar Lander, which loaded but I didn’t get working properly, and then loaded Uncle Bernie’s Codebreaker game, which did run and was playable once I followed the included instructions.

I finished by recording a program from my phone onto the vintage Panasonic cassette deck and then loading it back into the Apple 1 from tape. After adjusting the recording level and turning off phone notifications so they didn’t interrupt the data stream, BASIC loaded correctly from the cassette and ran.

— Aaron

Watch Now!

Links

Timestamps

00:00 – Intro

01:02 – Giveaway!

05:30 – Cassette Recorders

13:22 – Repairs and calibration

18:00 – Improving audio file quality

20:54 – Loading programs

27:21 – Testing BASIC

32:00 – Testing some games

36:54 – Loading from vintage cassette

40:19 – Wrap up

«
»