gertk
Experienced Member
Hi,
In an attempt to create disk support for my ARM based Exidy emulator I tried to understand the Exidy boot rom (the 1979 one from Exidy).
This rom is also to be found in the Mess and Java emulators.
Disassembling the ROM data was not so easy, the jumps and calls looked like they were jumping all over the place. Part of the complexity was probably because the code was 8080 based.
But so far I already succeeded in figuring out what the nifty code does:
First it figures out where it is in the memory map by setting up the stackpointer at a known address and writing a RET command into 'zero' page RAM and calling the address that RET was written to. By examining the contents of the stack the program knows where the RET was called from.
This is used for calculating the start address for copying the rest of the rom code to ram.
It also sets up a pointer to the floppy controller hardware that can be used later on. It seems that this was at a fixed offset ($200) from the rom start.
Alas the floppy controller seems to be memory mapped and not IO mapped.
After copying the remaining code to ram it jumps to the ram and executes from there.
Now for the fun part: I could not find what kind of floppy controller is/was used on the Exidy with this rom. Since the expansions system was S100 based I assume some kind of S100 Floppy controller but which one ?
If I understand the code correctly it was quite a simple device, maybe without DMA or even a sector buffer as the code simply waits for the correct sector to pass underneath the head and then reads in 270 bytes of data (1st byte is discarded, the last byte is a checksum)
Some more information about the original floppy controller would be nice.
[Edit] looks like the controller was (similar to) this one: Vector Graphic Micropolis Floppy Disk Controller (thanks to exidyboy)
In an attempt to create disk support for my ARM based Exidy emulator I tried to understand the Exidy boot rom (the 1979 one from Exidy).
This rom is also to be found in the Mess and Java emulators.
Disassembling the ROM data was not so easy, the jumps and calls looked like they were jumping all over the place. Part of the complexity was probably because the code was 8080 based.
But so far I already succeeded in figuring out what the nifty code does:
First it figures out where it is in the memory map by setting up the stackpointer at a known address and writing a RET command into 'zero' page RAM and calling the address that RET was written to. By examining the contents of the stack the program knows where the RET was called from.
This is used for calculating the start address for copying the rest of the rom code to ram.
It also sets up a pointer to the floppy controller hardware that can be used later on. It seems that this was at a fixed offset ($200) from the rom start.
Alas the floppy controller seems to be memory mapped and not IO mapped.
After copying the remaining code to ram it jumps to the ram and executes from there.
Now for the fun part: I could not find what kind of floppy controller is/was used on the Exidy with this rom. Since the expansions system was S100 based I assume some kind of S100 Floppy controller but which one ?
If I understand the code correctly it was quite a simple device, maybe without DMA or even a sector buffer as the code simply waits for the correct sector to pass underneath the head and then reads in 270 bytes of data (1st byte is discarded, the last byte is a checksum)
Some more information about the original floppy controller would be nice.
[Edit] looks like the controller was (similar to) this one: Vector Graphic Micropolis Floppy Disk Controller (thanks to exidyboy)
Last edited: