NEO-ZMC
Package | SOIC24 |
Manufacturer | |
First use | 1995 ? |
Used on | cartridges |
Picture courtesy of [MVS-Scans].
Z80 Memory Controller. Provides 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 system.
Pinout
OpenOffice Draw file: File:Neo-zmc.odg
10, 11, 12 are certainly MA19, MA20, MA21.
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;
Z80 address bus
(SDA0~15) |
BANK
0-31 |
Window... | ...mapped to
(M1 A0~18) |
---|---|---|---|
$8003 | bank 00 | $8000~$BFFF | $00000~$03FFF |
$8103 | bank 01 | $8000~$BFFF | $04000~$07FFF |
$8203 | bank 02 | $8000~$BFFF | $08000~$0BFFF |
$8303 | bank 03 | $8000~$BFFF | $0C000~$0FFFF |
$8403 | bank 04 | $8000~$BFFF | $10000~$13FFF |
$8503 | bank 05 | $8000~$BFFF | $14000~$17FFF |
$8603 | bank 06 | $8000~$BFFF | $18000~$1BFFF |
$8703 | bank 07 | $8000~$BFFF | $1C000~$1FFFF |
$8803 | bank 08 | $8000~$BFFF | $20000~$23FFF |
$8903 | bank 09 | $8000~$BFFF | $24000~$27FFF |
$8A03 | bank 10 | $8000~$BFFF | $28000~$2BFFF |
$8B03 | bank 11 | $8000~$BFFF | $2C000~$2FFFF |
$8C03 | bank 12 | $8000~$BFFF | $30000~$33FFF |
$8D03 | bank 13 | $8000~$BFFF | $34000~$37FFF |
$8E03 | bank 14 | $8000~$BFFF | $38000~$3BFFF |
$8F03 | bank 15 | $8000~$BFFF | $3C000~$3FFFF |
$9003 | bank 16 | $8000~$BFFF | $40000~$43FFF |
$9103 | bank 17 | $8000~$BFFF | $40000~$47FFF |
$9203 | bank 18 | $8000~$BFFF | $40000~$4BFFF |
$9303 | bank 19 | $8000~$BFFF | $40000~$4FFFF |
$9403 | bank 20 | $8000~$BFFF | $50000~$53FFF |
$9503 | bank 21 | $8000~$BFFF | $54000~$57FFF |
$9603 | bank 22 | $8000~$BFFF | $58000~$5BFFF |
$9703 | bank 23 | $8000~$BFFF | $5C000~$5FFFF |
$9803 | bank 24 | $8000~$BFFF | $60000~$63FFF |
$9903 | bank 25 | $8000~$BFFF | $64000~$67FFF |
$9A03 | bank 26 | $8000~$BFFF | $68000~$6BFFF |
$9B03 | bank 27 | $8000~$BFFF | $6C000~$6FFFF |
$9C03 | bank 28 | $8000~$BFFF | $70000~$73FFF |
$9D03 | bank 29 | $8000~$BFFF | $74000~$77FFF |
$9E03 | bank 30 | $8000~$BFFF | $78000~$7BFFF |
$9F03 | bank 31 | $8000~$BFFF | $7C000~$7FFFF |
Others range sets may differ from the range access here.(e.g. $8000, $8001 or $8002)