Blackcauldron
From DaphneWiki
The Black Cauldron (Apple //e)
- The nibble count for this disk is well documented in several computist magazines. My goal is to document how it works.
- To get started on finding the copy protection routine, set a breakpoint at $4b10 and if it has a JSR to $ff00, you've found the right spot.
Notes
$ffb7 sets up an IOB and calls RWTS. The IOB is stored at $b7e8 (standard place). To learn about IOB and RWTS, see the book "Beneath Apple DOS" which is how I learned about it.
The IOB looks like this:
b7e8: 01 60 01 01 00 00 fb b7 .`....{7 b7f0: 00 02 00 01 00 00 01 60 01 .......`.
- b7e8: table type (must be 1)
- b7e9: slot * 16 (0x60)
- b7ea: drive number (1 in this case)
- b7eb: volume number expected (1 in this case)
- b7ec: track number (0 in this case)
- b7ed: sector number (0 in this case)
- b7ee: pointer to device characteristics table (DCT), $b7fb in this case
- b7f0: pointer to buffer to read/write ($2000 in this case)
- b7f2: unused
- b7f3: byte count for partial sector ($1 in this case)
- b7f4: command code (0 in this case, which means SEEK)
- b7f5-b7f8 are return codes (from what I can tell)
So in other words, this function performs a seek to track $0, sector $0. (unless I've read it wrong)
The Device Characteristics Table (DBT) referenced contains standard DOS 3.3 values, so it doesn't demand attention.