NEO-ZMC



Z80 memory controller. Has a hardwired 32KiB bank and switchable 16/8/4/2KiB banks arranged as a register file. To save pins the high address lines (A15-A8) are used for data input. The chip's write strobe is (port) address decoded inside the console.

=Pinout=

OpenOffice Draw file:


 * SDA0,SDA1,SDA8~15: Z80 address bus
 * SDRD0: /Write signal from NEO-D0

=Operation=

SDA10,SDA9,SDA8 are bank selector and SDA1,SDA0 range size selector or rom size selector.

SDA1,SDA0 = 0,0 (Z80 port 8) select bank ranges for the Z80 $F000~$F7FF range (2Kbytes) (64k M1)

SDA1,SDA0 = 0,1 (Z80 port 9) select bank ranges for the Z80 $E000~$EFFF range (4Kbytes) (128k M1)

SDA1,SDA0 = 1,0 (Z80 port A) select bank ranges for the Z80 $C000~$DFFF range (8Kbytes) (256k M1)

SDA1,SDA0 = 1,1 (Z80 port B) select bank ranges for the Z80 $8000~$BFFF range (16Kbytes) (512k M1)

SDRD0 is the /write signal: the bank configuration is latched and the address output lines are changed on the rising edge.

Details:

SDRD0 must be high before configuring banks.

To configure a bank to be accessed (e.g. bank 0 in the $8000~$BFFF range):
 * Set SDRD0 low (prepare for new bank configuration, outputs are tri-stated)
 * Set SDA0~15 = $8003 (select bank 0 and 16k range size) Why $8003 and not just $0003 ?
 * Set SDRD0 high (latch bank, ready to convert inputs to proper output signals)
 * Now, when the Z80 accesses the $8000~BFFF range, NEO-ZMC will convert this the M1 ROM zone $00000~$03FFF;

To configure a bank to be accessed (e.g. bank 1 in the $8000~$BFFF range):
 * Set SDRD0 low (prepare for new bank configuration, outputs are tri-stated)
 * Set SDA0~15 = $8103 (select bank 1 and 16k range size) Why $8103 and not just $0103 ?
 * Set SDRD0 high (latch bank, ready to convert inputs to proper output signals)
 * Now, when the Z80 accesses the $8000~BFFF range, NEO-ZMC will convert this the M1 ROM zone $04000~$07FFF;

To configure a bank to be accessed (e.g. bank 3 in the $C000~$DFFF range):
 * Set SDRD0 low (prepare for new bank configuration, outputs are tri-stated)
 * Set SDA0~15 = $8302 (select bank 3 and 8k range size) Why $8302 and not just $0302 ?
 * Set SDRD0 high (latch bank, ready to convert inputs to proper output signals)
 * Now, when the Z80 accesses the $C000~DFFF range, NEO-ZMC will convert this the M1 ROM zone $06000~$07FFF;



Others range sets may differ from the range access here.(e.g. $8000, $8001 or $8002)