[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Hardware Project
"Terence J. Boldt" <apple2@cgocable.net> writes:
>Write the controlling code for it and squeeze it into 256 bytes. Make it
>work with ProDOS.
>I need to know how ProDOS accesses a block device for read and write. I
>know about all the ID and info bytes required in ROM (thanks Dave Wilson),
>but what do I need to handle as far as calls from ProDOS to my card?
Cn01 20
Cn03 00
Cn05 03
Cn07 00 If Smartport, bootable on enhanced //e and //gs
3C If not Smartport and bootable on ][+, //e and //gs.
other bootable only on enhanced //e and //gs
CnFC/D XXXX total blocks on disk
0000 if STATUS call will return # of blocks
CnFE XX status byte
bit 7 removable medium
bit 6 device is interruptable
bits 5 & 4 number of volumes supported (0..3 according to
Apple docs - I think that this represents 1..4)
bit 3 device supports FORMAT
bit 2 device supports WRITE
bit 1 device supports READ (must be set)
bit 0 device supports STATUS (must be set)
CnFF XX low byte of entry point to driver
00 Disk II with 16 sector ROM - internal driver used
FF Disk II with 13 sector ROM - not supported
The first 4 bytes listed above can be taken care of by:
Cn00 CMP #$20
CMP #$00
CMP #$03
CMP #$3C
The driver code is passed the following:
0042 command 0 = STATUS, 1 = READ, 2 = WRITE, 3 = FORMAT
0043 unit# bit 7 drive (0 = 1st, 1 = 2nd)
bits 6-4 slot #
bits 3-0 unused
0044/5 buffer pointer to 512 byte buffer
0046/7 block# number of block to read/write, ignored for status/format
The return status is in the A register and carry is set if an error occured.
Errors such as I/O Error ($27), No Device Connected ($28) and Write Protected
($2B) should be implemented.
If you support 3 or 4 volumes then the card has to go in slot 5 and you
have to handle being passed calls for slot 2 (by adding 2 to the drive number
passed in $43).
To have a bootable card, the code starting at Cn00 should load block 0
of drive 0 into memory at $0800. If this succeeds, check that $0800 contains
a $01. If so, jump to $0801. If any of this fails, put a message up on the
screen saying so. If you want to be really nice you can jump back to SLOOP
in the monitor (after adjusting the slot number) and the system will keep
scanning for a bootable device.
--
David Wilson School of IT & CS, Uni of Wollongong, Australia david@uow.edu.au