I have been working on disassembling and documenting a disk rom for the purpose of writing a disk driver based on the same controller. The major change is the relocation of the disk controller to the I/O space instead of the Memory Map. The purpose of this is to facilitate one of my own projects where I am creating a docking station for the Casio MX-10. But I also want to do this so others can use my work in their own projects.
The disk rom I have been dissecting is the TDC-600, as it uses the WD37C65 which is compatible with several other controllers such as the GM82C765 and FDC37C65. I have chosen these as they are more modern controllers with built in separators. During documentation of the ROM I’m seeing some calls in the disk rom to the bios that make absolutely no sense to me. Such as a call to $00DD, which is right in the middle of a paddle routine. But the call comes from what I believe is the DSKCHG (disk change) routine.
The subroutine mentioned calls to:
$0193 - Not sure where this
$00A7 - Printer Character Output
$00DD - Paddle Status
These are just some examples of some of the calls that are within the disk rom. And should not be considered to be the only calls I'm concerned with. The purpose of the post is to better understand exactly what they are calling to. Though these specific calls can be found in memory locations $7AE5-7AF9 of the TDC-600 rom.
Now, I could assume that the driver is copying a routine to ram, and then calling to these routines. However, this doesn’t appear to be the case since the floppy interface I’m using works on my MX-10 which only has RAM in Page 3 (16k). I suppose this could be a DOS 1 only routine, that gets mapped someone between $0 and $100. But that doesn't explaine the $193 memory location. And I can not seem to find any documentation on low level MSX DOS 1 calls other than to the BIOS.
Does anyone know what I’m looking at here? This doesn't appear to be a data block, as there are jumps to this subroutine from other areas in the code. And without knowing what these are calling to, I can only speculate what the code is doing.
If anyone is interested in taking a look at the work so far, it can be found here: https://github.com/jdgabbard/TDC-600-Source-Code