|
Post by jmpff3d on Nov 26, 2018 15:51:44 GMT
While perusing the C128 CP/M memory map offered by HDS, ( c-128.freeforums.net/thread/664/128-cp-memory-map ) I stumbled onto this blurb, which may be of interest to emulator authors: FC00 to FD00 INTBLOCK This block contains all FD's. It is the pointer to the main interupt vector (FDFD). A hardware quirk of the C-128 requires from FC00 to FD00 to be all FD's else the low byte of the interupt pointer address will not be correctly specified on the Z-80 address bus. If you use this seemingly unused area for your own programs, it will crash on a random basis if an interupt occurs, unless you disable the interupts first with a Z-80 'DI' instruction. BEWARE!!
Not sure what this "hardware quirk" is .. or if it has been fixed in the DCR revisions. If anyone has an idea, let us know !
|
|
|
Post by nikoniko on Nov 26, 2018 23:46:45 GMT
IM2 expects the high byte of its jump vector in the I register and the low byte correlated with the interrupt source to be placed on the data bus. But because the C128's bus is designed around the 8502, that isn't supported and the low byte could end up being anything. So $FC00 to $FD00 are filled with $FD to force everything to go through the interrupt handling vector at $FDFD. On a more standard Z-80 system, the low byte would be an even number from 0 to 254, but on some systems can also be 255, necessitating a 257 byte vector table.
|
|