P6 ROM dump

File by Christer Ericson (christer@cs.umu.se)

This is the actual contents of a Disk II controller P6 state machine ROM. You don't need any fancy equipment to read such a ROM; actually you already have that equipment, it is the Disk II controller itself!

What I did in order to get this dump was simply switching place of the P5 and P6 ROMs on the controller card and voila, the contents of the P6 ROM appears where the boot code normally reside (eg $C600-C6FF for slot 6). I wouldn't recommend switching the the ROMs back with the power on, (but if you choose to do it on your machine, go ahead!) therefore, saving the dump to disk requires having two controller cards (or alternatively, a tape recorder), obviously.

Mega-clever, huh?! How I wish I had thought about that eons ago...

88B88808 0A0A0A0A 88C988C9 88CB88CB 
88C88848 0A0A0A0A 88C988C9 88CB88CB 
B83DB8B8 0A0A0A0A 98D998D9 98DB98DB 
98DD98D8 0A0A0A0A 98D998D9 98DB98DB 
B8B8B8B8 0A0A0A0A A8E8A8E8 A8E8A8E8 
A8E8A8E8 0A0A0A0A A8E8A8E8 A8E8A8E8 
B9FDB8F8 0A0A0A0A B8F8B8F8 B8F8B8F8 
B9FD50F8 0A0A0A0A B8F8B8F8 B8F8B8F8 
4DB8C828 0A0A0A0A 48284828 48284828 
4D28C828 0A0A0A0A 48284828 48284828 
B8B9B8B8 0A0A0A0A 58385838 58385838 
49A95838 0A0A0A0A 58385838 58385838 
B8B8B8B8 0A0A0A0A 68086818 68086818 
68186818 0A0A0A0A 68086818 68086818 
B8BD7870 0A0A0A0A 78187808 78187808 
082D7870 0A0A0A0A 78187808 78187808 
Now if you compare this dump with the charts of the state machine as published in Beneath Apple ProDOS (see my Notes on the P6 ROM document for the BAPD charts) you'll notice that apart from the $0A block, nothing really makes sense. Why isn't the dump identical with the charts, and vice versa?

To simplify the design of the Disk II controller card, in particular to avoid lines crossing each other, Woz decoded this ROM a bit different from what one normally does. So, if we address the P6 ROM with an index byte built up as:

+-------+-------+-------+-------+-------+-------+-------+-------+
| STATE | STATE | STATE | PULSE |  Q7   |  Q6   |  SR   | STATE |
| bit 0 | bit 2 | bit 3 |       |       |       |  MSB  | bit 1 |
+-------+-------+-------+-------+-------+-------+-------+-------+
    7       6       5       4       3       2       1       0
instead of the format used in the BAPD charts:
+-------+-------+-------+-------+-------+-------+-------+-------+
| STATE | STATE | STATE | STATE |  Q7   |  Q6   |  SR   | PULSE |
| bit 3 | bit 2 | bit 1 | bit 0 |       |       |  MSB  |       |
+-------+-------+-------+-------+-------+-------+-------+-------+
    7       6       5       4       3       2       1       0
we will get the correct byte (as given in the BAPD charts). Well, almost anyway.

The bytes in the P6 ROM has the high four bits reversed compared to the BAPD charts, so you will have to reverse them after fetching the byte.

So, what is this good for? Ahh, good question you ask! With this information it is possible to construct your own P6 ROM which, combined with the right software, turns your Disk II controller into a thing capable of making an exact bit-for-bit copy of a track, very much like the hardware card available for EDD 4 PLUS (which I unfortunately don't know anything more about; info appreciated). If you want more info on this project, contact me at the email address given above.


This file was brought to you by Christer Ericson. (christer@cs.umu.se)