Arme Leute Apple Disk Transfer (Poor Man's ADT)

A method to backup your Apple II disks if your Apple has less than 64k RAM.

This page describes how to backup old Apple II DOS 3.3 disks to PC if your Apple has less than 64k RAM (hence the name) without any additional hardware.

If your Apple does have >= 64k, you’re probably better off with ADTPro.

Now, I’m not sure how general-purpose the tools and instructions given here are, I’ve made and used everything for the Apple II europlus I own(ed) and it worked fine. All the disks I backed up were formatted with DOS 3.3 and thus had 16 sectors and 35 tracks (as opposed to pre-3.3 disks which are formatted with 13 sectors). ProDOS or DOS < 3.3 disks may work, but you’ll at least have to change the code to only expect 13 sectors.

Either way, give it a try and let me know if it worked for you or not.

Except for the diskdump-code, the tool “a2audioup” can be used to place any data into the Apple’s RAM from the PC, without any additional hardware required (except an audio cable).

Overview

This is what we’ll do:

  • Connect our soundcard with the Apple’s cassette ports
  • Put the small program “disk2cassette.bin” to the Apple’s RAM with the tool “a2audioup”
  • Start that program, which will send the contents of the inserted disk out the cassette port
  • Record that output with some Wave-Editor on the PC
  • Send that file through the decoder “a2cassdecode”
  • Done!

Connecting PC and Apple II

The soundcard’s line-out goes to “CASSETTE IN” on the Apple and line-in/microphone goes to “CASSETTE OUT”. If you have only one cable it’s fine — you don’t need to have both things connected at the same time, since we’ll be only sending data in one direction at once — it may be a little inconvenient, though.

See here for a very detailed description on how to connect everything.

Running the diskdump-tool on the Apple

Turn your Apple on and boot from a disk formatted with DOS. Enter the Monitor by typing

CALL -151

Enter this to make the Apple read our program from the cassette port (that’s zeros, not O’s):

C00.CFFR

After this, the Apple will wait for data — on the PC-side, send the file “disk2cassette.bin” with the tool “a2audioup”:

a2audioup -i disk2cassette.bin

After the data has been sent, the Apple should beep and return to prompt. If there was an error, try some of the hints provided at the ADTPro-site.

Recording the output

Now the program is in place, waiting to get started. As soon as it runs, it will start reading the inserted disk into memory. After it has collected a chunk of memory, it will send it out via the cassette-port. That’s exactly the data we want to record with a Wave-Editor! Launch your trusted app (Audacity, Wavelab, …) and start recording at 44100Hz, 8 bit and mono. Then enter this to start the program:

C00G

The drive should start loading at the same moment and you should see output like this:

00 00: 00
00 01: 00
00 02: 00
00 03: 00
00 04: 00
.
.
.
07 04: 00
-

The first number is the current track, the second the current sector and the number after the colon is the result. If the sector has been read successfully, it’s 00, if there was an error, it’s not.

After a while it will stop and output a dash. This is the moment where the data read into the memory so far is being sent out the cassette-port, you should be getting something in the Wave-Editor! This will take a few minutes each, don’t be impatient. After that, it will read some more from the disk and send it again until the whole disk has been read.

A disk takes around 12 minutes to dump. You know that the dump-app is done when it beeps a few times and the prompt is back.

Stop the recording, you should see something like that:

dumpdisk

Save the file.

Decoding the recorded data

We’re almost done, the last step is to make “a2cassdecode” decode the file. It doesn’t have to be a WAV, it can be anything — as long as it’s 8bit unsigned audio.

Decode it by running

a2cassdecode recorded.wav image.dsk

and you should see something like:

Apple ][ Cassette Audio Decoder
(c) 2008 seb at riot dot org
$Rev: 20 $

DC=0.00

34.42 secs : sync found, period is 29, samplefreq is ~44615.38
44.59 secs : data starts
176.26 secs : data ends: 29952 bytes, checksum OK

205.11 secs : sync found, period is 28, samplefreq is ~43076.92
215.64 secs : data starts
337.04 secs : data ends: 29952 bytes, checksum OK

359.80 secs : sync found, period is 28, samplefreq is ~43076.92
370.34 secs : data starts
492.20 secs : data ends: 29952 bytes, checksum OK

515.04 secs : sync found, period is 28, samplefreq is ~43076.92
525.57 secs : data starts
646.97 secs : data ends: 29952 bytes, checksum OK

665.09 secs : sync found, period is 28, samplefreq is ~43076.92
675.62 secs : data starts
771.08 secs : data ends: 23552 bytes, checksum OK

Total: 143360 bytes

If you get decoding errors, your recording may be bad. Check the cabling and make sure you’re recording at a normal volume. It doesn’t have to (actually, shouldn’t) be at 0 dB non-stop, but the SNR should be reasonable.

That’s all! The generated file is usable in all the emulators.

File(s)

  • aladt_v1.zip - All the stuff needed, tools compiled for Windows + sources
  • a2audioup_fixes.diff - Patch for a2audioup, only needed for OS X and Linux (fixes compilation on Linux and WAV-writing on OS X)

It should be possible to build the tools on Linux or other POSIX-platforms, Makefiles are included.

References