Hi Allison,
I just got back home from a trip to VCF-East in New Jersey, and then a week visiting family in Michigan (over 3000 miles of driving -- yech). I'm still catching up on emails while I was gone. Josh Bensadon (who wrote the software for the Z80MC) was also at VCF-East, so I imagine he's busy catching up as well. I see there's been a lot of activity on the Z80MC list. Thanks to Allison for holding sway in our absence!
Josh's CP/M Explorer works on my computer with Win 7. That's the latest version of Windows I have. He wrote it back in 2019. Perhaps Microsoft has broken something in later versions? I think he wrote it in Visual BASIC. Maybe it needs to be re-compiled to work in later version of Windows.
Allison is right about the Z80MC memory map. With just the CPU card, or the CPU + Front Panel card. it has the EPROM at 0-32k, and the RAM at 32-64k. Very simple. Kerem can't load programs at 0-32k unless he writes them into the EPROM (there is still quite a bit of space in it).
With the Z80-SIO card, things get more complicated. The CPU card has series resistors between the address decoder and RAM and ROM chip-selects. These allow other cards (like the Z80-SIO) to alter the memory map. U4 on the Z80-SIO (75HCT151) is the memory decoder. It is controlled by output port C1h bit D0 (BANK).
At power-up, or reset, or if xxxx.xxx0 is written to port C1h, BANK=0. The SIO card has no effect on CPU card RAM or ROM.
If xxxx.xxx1 is written to port C1h, BANK=1. This changes the memory map as follows:
1. Writes with A15=0 (0-32k) write to the SIO card's current RAM bank.
2. Writes with A15=1 (32-64k) write to CPU card's RAM.
3. Reads with A15=0 (0-32k) disable the CPU ROM, and instead read the SIO card's current RAM bank.
4. Reads with A15=1 (32-64k) read CPU card's RAM.
The 128k RAM on the SIO card has 4 banks of 32k each. These are selected by writing to output port FCh (8250 MODEM control register 4). The extra address bits are as follows:
FCh bit 0 = /DTR = B15 \ selects bank in 128k or 512k RAM
FCh bit 1 = /RTS = B16 /
FCh bit 2 = /OUT1 = B17 \ selects bank in 512k RAM
FCh bit 3 = /OUT2 = B18 /
FCh bits 4-7 should be set to 0
Note that the physical pins are *inverted* (so you have to write a "0" to set the address pin high).
What does all this mean? CP/M expects an all-RAM system, with RAM from 0-64k. 0-100h needs to contain restart and interrupt vectors, jumps to the BDOS, input and DMA buffers, and other important constants. The high end of RAM needs to contain the CCP, BDOS, and BIOS. The C/PM "boot" program sets all this up for you. The source is on my website, and Josh did an excellent job of commenting it. User programs usually start at 0100h, so they have full access to all of C/PM's subroutines and features.
I hope this helps. If you find any errors or omissions, please let me know!
Lee
--
Excellence does not require perfection. -- Henry James
But it *does* require attention to detail! -- Lee Hart
--
Lee A. Hart