SC523 is a Z80-compatible programmable ‘ROM’ card designed for Z50Bus.

This card is designed for firmware developers. It provides the read-only memory for a Z80-based system. In this case, however, the term “read-only” is not really correct as data can be written to it.
The card contains “shadow” RAM which is arranged such that writing to the ‘ROM’ area causes the data to be written to the “shadow” RAM. Once the “shadow” RAM contains the required ROM image, the memory select switch can be used to reconfigure the memory such that reading is from “shadow” RAM, which is now write-protected.
A minimal system using this card also requires:
- Backplane (eg. SC501, SC508, SC515, or SC522)
- Power and reset card (eg. SC502)
- Z80 CPU and memory:
- Z80 processor card (eg. SC516 with ROM chip removed), or
- Z80 CPU + Z80 memory (eg. SC518+SC519 with FLASH chip removed)
- Serial card (eg. SC511, SC520, or SC521)
The standard ROM (or Flash) memory chip needs to be removed from its normal card (eg. SC516 or SC519). This allows SC523 to provide the ‘ROM’ without conflict.
SC523’s Flash memory socket (U1) should contain suitable firmware. Typically this is SCM F1 or SCM F2. SCM F1 supports SC516’s serial port but does not support SC523’s software-controlled memory bank selection. SCM F2 does not support SC516’s serial port but does support SC523’s software-controlled memory bank selection. Firmware developers are likely to want a good serial port, not the very basic port on SC516, thus SCM F2 is likely to be the most appropriate configuration.
The firmware development process
This card replaces the Flash/ROM chip in a Z80 system.
The card houses a Flash/ROM chip containing standard firmware (eg. SCM F2) and also a “shadow” RAM chip (pseudo-ROM).
The system is booted up from the standard Flash/ROM chip as usual.
Any writes to the lower 32k of memory are directed to the “shadow” RAM chip on this card.
Trial firmware code is written to the “shadow” RAM, typically by sending a hex file of the firmware to be tested via the Small Computer Monitor (SCM).
The function of the Flash/ROM and “shadow” RAM is then swapped with the toggle switch to allow the trial firmware to be tested without having to program a Flash/ROM chip.
It is advisable to press and hold the reset button while swapping the chip functions to prevent memory corruption during the change-over.
Minor tweaks to the trial firmware can be made using SCM as memory writes are directed to the “shadow” RAM chip. However, this can be confusing as SCM will always read the existing memory contents from the SCM ROM and not from the “shadow” RAM.
The whole card can be paged out of memory with the usual write to port address 0x38.
Default settings
The illustration below shows the default jumper shunt positions. JP1 and JP2 select the bottom 32k bytes of the memory chips. JP3 write protects the Flash memory.

Memory map
This memory card is designed for use with a Z80 CPU.
Following a hardware reset, with the jumper shunts in their default positions and the toggle switch set to FLASH, the memory is mapped as indicated below. The upper 32k bytes of RAM are supplied by a separate card (eg. SC516 or SC519).
Z80 memory range | Function/mapping |
Lower 32k bytes 0x0000 to 0x7FFF | Read: SC523’s FLASH (U1) 0x00000 to 0x07FFF Write: “shadow” RAM (U2) 0x00000 to 0x07FFF |
Upper 32k bytes 0x8000 to 0xFFFF | External RAM, read and write 0x08000 to 0x0FFFF eg. from SC516 or SC519 |
SC523’s FLASH (U1) not visible to Z80 | 0x08000 to 0x1FFFF |
SC523’s “shadow” RAM (U2) not visible to Z80 | 0x08000 to 0x1FFFF |
As above but the toggle switch set to RAM, the memory map
Z80 memory range | Function/mapping |
Lower 32k bytes 0x0000 to 0x7FFF | Read: “shadow” RAM (U2) 0x00000 to 0x07FFF Write: SC523’s FLASH (U1) 0x00000 to 0x07FFF |
Upper 32k bytes 0x8000 to 0xFFFF | External RAM, read and write 0x08000 to 0x0FFFF eg. from SC516 or SC519 |
SC523’s FLASH (U1) not visible to Z80 | 0x08000 to 0x1FFFF |
SC523’s “shadow” RAM (U2) not visible to Z80 | 0x08000 to 0x1FFFF |
Writing to Flash memory requires JP3 to be set to enable writes and also the correct sequence of addresses must be issued to unlock the Flash chip for writing.
The memory map can be changed to all 64k being RAM, as needed for CP/M, by writing a 1 (high) to port 0x38 bit 0. The memory map is illustrated below. The 64k of RAM is supplied by an external card, such as SC516 or SC519. SC523 is completely disabled.
Z80 memory range | Function/mapping |
Lower 32k bytes 0x0000 to 0x7FFF | External RAM, read and write 0x00000 to 0x07FFF |
Upper 32k bytes 0x8000 to 0xFFFF | External RAM, read and write 0x08000 to 0x0FFFF |
SC523’s FLASH (U1) not visible to Z80 | 0x00000 to 0x1FFFF |
SC523’s “shadow” RAM (U2) not visible to Z80 | 0x00000 to 0x1FFFF |
Jumper options
With the jumper shunts in the default positions, the FLASH memory (U1) is protected against being written to and the first 32k bank of the Flash (U1, read) and RAM (U2, write) is mapped into the Z80’s memory from 0x0000 to 0x7FFF.
JP1 shunt can be moved to the “Write enable” position if you want to update the firmware in FLASH memory (U1). This requires appropriate software which is not currently available (as far as I know). The shunt can be left in this position as it is very unlikely the FLASH memory will be written to without special software. The IC requires a very specific sequence in order to accept write operations. For peace of mind, it is best to fit the shunt in the “Write protect” during normal use.
JP2 and JP3 allow one of four 32k banks of the FLASH (U1) and RAM (U2) to be selected. This allows easy selection of up to four different firmware programs. Alternatively, bank selection can be set for software control. Software control allows the four banks to be manipulated by two output port bits. This enables software to access all 128k of the FLASH (U1) and RAM (U2).
Status LED
When using the Small Computer Monitor ‘ROM’, pressing the reset button should cause the status LED to flash.
- One flash off and on indicates a serial card has been detected on the bus and is being used to connect to a terminal. Serial cards usually work at 115200 baud, 8 data bits, 1 stop bit, no parity, and hardware flow control (RTS/CTS).
- Continuous flashing means the RAM test has failed.
After this, the LED is available for use by any software. Just write to port 0x08 (or decimal 8) to control the LED. See table below.
Output port bits
This card uses the following output port and bits.
Port | Bit | Function |
0x08 | 0 | Status LED 0 (low) = ON 1 (high) = OFF |
0x20 | 0 | Memory bank select (MA15) |
0x28 | 0 | Memory bank select (MA16) |
0x38 | 0 | Lower 32k select 0 (low) = Enabled SC523 1 (high) = Disabled SC523 |
Upper 32k is always RAM |
All of the above bits are cleared to 0 (low) by a hardware reset.