[MZ-80 K / MZ-80 A / MZ-700] undetermined $Exxx I/O range?
Posted: Sun Aug 26, 2018 4:15 pm
[ MZ-80 K ]
IC47 154 is outputting up to 16 /CS so /CS0 means $0000-0FFF, /CS1 $1000-1FFF, ..., /CSE $E000-EFFF, /CSF $F000-FFFF. It is interesting that if you have just an MZ-80 K with no I/O expansion, you can use /CSF as a chip select for an SRAM or a ROM by just connecting the wires with no extra decoding circuit.
But the point here is to check which I/O ranges are determined. So the chip select is /CSE (pin #14 of IC47). It is connected to IC30 LS42 which can dispatch to one amongst 10 chip selectors: /CSE0 ($Ex00-Ex03), /CSE1 ($Ex00-Ex03), /CSE2 ($Ex04-Ex07), ..., /CSE9 ($Ex24-Ex27). if the 4-bit input value is above 9, there are no active chip selector output, which makes the range $Ex2C-$Ex3F only usable by an external circuit with its own address decoder. As for $E040-E067, $E080-E0A7, ..., $E0C0-ExE3, they are just mirrors of $E000-E027. And $E100-$E127, $E200-$E227, ..., $EF00-$EF27 are also mirrors of $E000-E027.
However /CSE0, /CSE1 and /CSE2 are already in use so they are not candidates for /CSEx.
Note that we cannot map an SRAM or a ROM to $E800-EFFF.
So we have from /CSE3 to /CSE9 to create our own I/O mapping and need to wire:
- 1 x /CSEx as the chip selector of a controller (one pin of IC30)
- 1 x /RD to tell a read I/O memory access (from pin #7 of IC 35)
- 1 x /WR to tell a write I/O memory access (from pin #5 of IC 35)
- 8 x D0-7 to read/write an 8-bit data (from bus-side of IC 36 and IC 37)
- 2 x A0-1 to read the I/O memory register index (from bus-side of IC 44)
- 1 x /WAIT to pause a read/write memory access if necessary(from pin #24 of IC 46 Z80)
So you'll need at least 14 wires with clips that we can connect on an Arduino MEGA turned into an I/O controller. If this Arduino needs to emulate several I/O controllers then add extra /CSEx wires.
IC47 154 is outputting up to 16 /CS so /CS0 means $0000-0FFF, /CS1 $1000-1FFF, ..., /CSE $E000-EFFF, /CSF $F000-FFFF. It is interesting that if you have just an MZ-80 K with no I/O expansion, you can use /CSF as a chip select for an SRAM or a ROM by just connecting the wires with no extra decoding circuit.
But the point here is to check which I/O ranges are determined. So the chip select is /CSE (pin #14 of IC47). It is connected to IC30 LS42 which can dispatch to one amongst 10 chip selectors: /CSE0 ($Ex00-Ex03), /CSE1 ($Ex00-Ex03), /CSE2 ($Ex04-Ex07), ..., /CSE9 ($Ex24-Ex27). if the 4-bit input value is above 9, there are no active chip selector output, which makes the range $Ex2C-$Ex3F only usable by an external circuit with its own address decoder. As for $E040-E067, $E080-E0A7, ..., $E0C0-ExE3, they are just mirrors of $E000-E027. And $E100-$E127, $E200-$E227, ..., $EF00-$EF27 are also mirrors of $E000-E027.
However /CSE0, /CSE1 and /CSE2 are already in use so they are not candidates for /CSEx.
Note that we cannot map an SRAM or a ROM to $E800-EFFF.
So we have from /CSE3 to /CSE9 to create our own I/O mapping and need to wire:
- 1 x /CSEx as the chip selector of a controller (one pin of IC30)
- 1 x /RD to tell a read I/O memory access (from pin #7 of IC 35)
- 1 x /WR to tell a write I/O memory access (from pin #5 of IC 35)
- 8 x D0-7 to read/write an 8-bit data (from bus-side of IC 36 and IC 37)
- 2 x A0-1 to read the I/O memory register index (from bus-side of IC 44)
- 1 x /WAIT to pause a read/write memory access if necessary(from pin #24 of IC 46 Z80)
So you'll need at least 14 wires with clips that we can connect on an Arduino MEGA turned into an I/O controller. If this Arduino needs to emulate several I/O controllers then add extra /CSEx wires.