The 74C923 key encoder chip is a remarkable IC.
First of all, it supports key debouncing so there's no need to filter out the noise in software.
And it triggers an interrupt (I use the /NMI) once a key is pressed.
Actually, it provides a high-active data available output (DA) which is fed to the /NMI by an inverter.
Unfortunately it can only detect 20 key. That’s enough for a hexadecimal keyboard 0 - F and four special keys: ENTER, BACK, ESC and SHIFT.
The solution is to add three ALT keys: red ALT 1, green ALT 2 and blue ALT 3.
So that I can map all the alphanumeric characters and 28 punctuation symbols to the 16 hexadecimal keys.
Additionally you can check the NMI service routine and the char encoding (key codes) on GitHub.
Friday, June 26, 2026
Monday, May 25, 2026
SENTINEL hardware
The reZet80 SENTINEL is a computer system that could have been built in the 80s.
It is built in CMOS technology with HCMOS chips, only the UVEPROM is NMOS.
Only technologies that were available in the 80s are used.
The Z80 CMOS CPU is clocked at 2 MHz (currently in the prototyping phase) but I'm planning to use frequencies up to 20 MHz (maximum frequency for CMOS). I'd like to have a go at overclocking, too. I've never overclocked my Z80 CPUs but I'll do so as part of my tests used to determine which CPUs are genuine and which are counterfeit. So far I've only carried out CMOS/NMOS tests but the CPU speed tests are due to take place next.schematic for R0 and R1
The reZet80 SENTINEL is equipped with 128 KiB of RAM and 4 KiB of ROM.
The 128 KiB RAM are divided into 4 banks of 32 KiB each but only the first two banks are addressed in R0 and R1.circuit diagram for R1
128 I/O ports are provided, actually 8 ports of 16 addresses each.
4 ports are currently in use for the configuration and status registers, the keyboard and the LCD display.
One additional port will be used in R2 for the memory cartridge (NAND memcart).I/O demultiplexing schematic for R0 and R1
The SENTINEL keyboard features a full keyboard (alphanumericals, 28 punctuation symbols and 7 special keys) with just 23 keys! More on this in my next post. It uses the 74C923 key encoder chip that supports key debouncing and interrupts. It triggers /NMI once a key is pressed.circuit diagrams for R0 and R1
An LCD display is used for visual output. All LCD displayes that use Hitachi's HD44780 dot matrix LCD controller or a compatible chip can be connected. In R0 only a 16x1 LCD module is supported but 16x2 and 40x1 modules will be added in R1 and even more in R2.schematic for R0 and R1
A configuration register (8-bit latch) is used for addressing the physical memory banks and to switch ROM out after boot.circuit diagram for R1
The status register is an 8-bit buffer. It's used to control keyboard and memcart.schematic for R2
For the sake of completeness: inverter, oscillator and reset switch.
It is built in CMOS technology with HCMOS chips, only the UVEPROM is NMOS.
Only technologies that were available in the 80s are used.
The Z80 CMOS CPU is clocked at 2 MHz (currently in the prototyping phase) but I'm planning to use frequencies up to 20 MHz (maximum frequency for CMOS). I'd like to have a go at overclocking, too. I've never overclocked my Z80 CPUs but I'll do so as part of my tests used to determine which CPUs are genuine and which are counterfeit. So far I've only carried out CMOS/NMOS tests but the CPU speed tests are due to take place next.
The reZet80 SENTINEL is equipped with 128 KiB of RAM and 4 KiB of ROM.
The 128 KiB RAM are divided into 4 banks of 32 KiB each but only the first two banks are addressed in R0 and R1.
128 I/O ports are provided, actually 8 ports of 16 addresses each.
4 ports are currently in use for the configuration and status registers, the keyboard and the LCD display.
One additional port will be used in R2 for the memory cartridge (NAND memcart).
The SENTINEL keyboard features a full keyboard (alphanumericals, 28 punctuation symbols and 7 special keys) with just 23 keys! More on this in my next post. It uses the 74C923 key encoder chip that supports key debouncing and interrupts. It triggers /NMI once a key is pressed.
An LCD display is used for visual output. All LCD displayes that use Hitachi's HD44780 dot matrix LCD controller or a compatible chip can be connected. In R0 only a 16x1 LCD module is supported but 16x2 and 40x1 modules will be added in R1 and even more in R2.
A configuration register (8-bit latch) is used for addressing the physical memory banks and to switch ROM out after boot.
The status register is an 8-bit buffer. It's used to control keyboard and memcart.
For the sake of completeness: inverter, oscillator and reset switch.
Friday, April 24, 2026
Tiny Games
Tiny games are games that fit into one chunk of memory (256 bytes).
They are bundled with a 2 or 4 KiB debug monitor as they need additional display and keyboard routines.
A game size of 512 bytes is also acceptable for a system without a storage unit.
These tiny games are available for my reZet80 PIONEER and reZet80 SENTINEL systems.
Availability for different display types:
A tiny text adventure is at least 2 KiB in size due to the descriptive text and the dictionary:
The reZet80 PIONEER uses a 14-segment 16-char display so only 16x1 games are available.
The reZet80 SENTINEL provides various LCD displays (16x1, 40x1 and 16x2 for now).
More screenshots and game previews will be added soon.
They are bundled with a 2 or 4 KiB debug monitor as they need additional display and keyboard routines.
A game size of 512 bytes is also acceptable for a system without a storage unit.
These tiny games are available for my reZet80 PIONEER and reZet80 SENTINEL systems.
Availability for different display types:
| 16x1 | 40x1 | 16x2 | |||
|---|---|---|---|---|---|
| Asteroid Belt | X | X | X | ||
| Black Jack | X | X | X | ![]() | |
| Camel Race | X | ||||
| Dino Chase | X | ||||
| Donkey Race | X | ||||
| Hex Invaders | X | X | X | ![]() | |
| Hex Man | X | X | X | ![]() | |
| Obstacle Runner | X |
A tiny text adventure is at least 2 KiB in size due to the descriptive text and the dictionary:
| 16x1 | 40x1 | 16x2 | |||
|---|---|---|---|---|---|
| Haunted House | X | X | X | ![]() | |
| The Lighthouse | X | X | X |
The reZet80 PIONEER uses a 14-segment 16-char display so only 16x1 games are available.
The reZet80 SENTINEL provides various LCD displays (16x1, 40x1 and 16x2 for now).
More screenshots and game previews will be added soon.
Sunday, March 1, 2026
reZet80 status
The first reZet80 SENTINEL release R0 is out!
Screenshots, source code, technical specifications and ROM images for now only at GitHub but everything will be added here as well. This release includes the following games:
So many Z80 projects and always so little time... reZet80 stands for "Reset me back to the 80s with the Z80".
reZet80 features a set of retro projects to develop computing and arcade systems that resemble the Z80 machines of the late 70s and 80s.
All systems are built from scratch and not copies of any other Z80 system.
The development process includes hardware design and software programming in Assembler.
I started reZet80 back in 2016.
reZet80 releases (including documentation, schematics and source code at GitHub):
Off-topic note: The letter Z stands for the company Zilog and the Z80 CPU. The Z is in NO WAY related to the Russian war against Ukraine!
Screenshots, source code, technical specifications and ROM images for now only at GitHub but everything will be added here as well. This release includes the following games:
- Asteroid Belt
- Hex Invaders
- Black Jack
- Haunted House text adventure
- Hex Man (Hexadecimal Hangman)
- Dino Chase
- Camel Race
- Donkey Race
- Obstacle Runner
- enhanced Hex Invaders game
- The Lighthouse text adventure
- enhanced Haunted House text adventure
So many Z80 projects and always so little time... reZet80 stands for "Reset me back to the 80s with the Z80".
reZet80 features a set of retro projects to develop computing and arcade systems that resemble the Z80 machines of the late 70s and 80s.
All systems are built from scratch and not copies of any other Z80 system.
The development process includes hardware design and software programming in Assembler.
I started reZet80 back in 2016.
reZet80 releases (including documentation, schematics and source code at GitHub):
- 2026-02: reZet80 SENTINEL R0
- 2023-10: reZet80 PIONEER R1 (Haunted House-only release)
- 2022-12: reZet80 SCOUT R0 (prototype, unfinished code)
- 2022-06: reZet80 PIONEER R0
- 2021-06: reZet80 HWDK R0
- 2021-02: reZet80 DEV R1 (unfinished code)
- 2020-11: reZet80 DEV R0
Off-topic note: The letter Z stands for the company Zilog and the Z80 CPU. The Z is in NO WAY related to the Russian war against Ukraine!
Friday, February 27, 2026
Tiny Text Adventure Engine
The tiny text adventure engine is intended for Z80 systems of the 70s like my reZet80 PIONEER.
It also runs on systems of the 80s like my reZet80 SENTINEL. The game size of my first release of the Haunted House text adventure was 2236 bytes. For the second release I managed to squeeze out another 42 bytes but with 2194 bytes it's still too big for a 2 KiB ROM.
The size excludes the keyboard and display handling that need to fit in the same ROM, so for Haunted House at least 3 KiB of ROM are needed.
But depending on the descriptive text and the dictionary a text adventure that fits in 2 KiB is feasible. So what to expect from a 2 KiB text adventure?
That's 26 capital letters, 4 punctuation symbols (" ", ".", "," and "'") and 2 special codes: ENTER (used as delimiter after 16 characters) and EOS (end of string).
You could also enter "OPEN DRAWER" and the door will still be opened.
The trick ist to use unique, unambiguous verb / noun combinations for each location.
So you won't find a door and a drawer at the same location.
In order to overcome this unpleasant behaviour the parser has to check for "O DO" and "O DR".
This increases code size and leads to my tiny text adventure engine becoming a text adventure engine. BTW, I started coding my second text adventure The Lighthouse.
I will add support for more LCD displays (40x1, 16x2, 16x4, ...).
Releases of both games for a 16-char 14-segment display are also in the pipeline.
It also runs on systems of the 80s like my reZet80 SENTINEL. The game size of my first release of the Haunted House text adventure was 2236 bytes. For the second release I managed to squeeze out another 42 bytes but with 2194 bytes it's still too big for a 2 KiB ROM.
The size excludes the keyboard and display handling that need to fit in the same ROM, so for Haunted House at least 3 KiB of ROM are needed.
But depending on the descriptive text and the dictionary a text adventure that fits in 2 KiB is feasible. So what to expect from a 2 KiB text adventure?
- It runs on a 16-character LCD display.
- The descriptive text is short and the dictionary is limited.
- It uses a simple parser that understands one and two word commands made of a verb and a noun.
- The focus lies on solving puzzles.
- The atmosphere is secondary.
- There is no time limit and no score.
- It is written entirely in Assembler.
- I use 5-bit packed chars.
That's 26 capital letters, 4 punctuation symbols (" ", ".", "," and "'") and 2 special codes: ENTER (used as delimiter after 16 characters) and EOS (end of string).
- Only the first letter of verb and noun are distinguished.
You could also enter "OPEN DRAWER" and the door will still be opened.
The trick ist to use unique, unambiguous verb / noun combinations for each location.
So you won't find a door and a drawer at the same location.
In order to overcome this unpleasant behaviour the parser has to check for "O DO" and "O DR".
This increases code size and leads to my tiny text adventure engine becoming a text adventure engine. BTW, I started coding my second text adventure The Lighthouse.
I will add support for more LCD displays (40x1, 16x2, 16x4, ...).
Releases of both games for a 16-char 14-segment display are also in the pipeline.
Friday, January 30, 2026
Z80 NMOS/CMOS Test
Since 2016 when I started reZet80 I have accumulated about forty Z80 CPUs.
Most of them are standard Z80s in a DIP-40 package from ebay or unsoldered from old computers.
I also collected some exotic ones like the T6C79 from Toshiba and the ATJ3310 and ATJ3315 from Actions.
But I'll stick to the pure Z80 as produced by Zilog here.
A short history of Z80 CPUs:
A simple 8-byte program will help me differentiate between NMOS and CMOS Z80 CPUs:
;=============================================================================
; take it easy
nop
; disable interrupts
di
; SENTINEL configuration register
ld c, 00h
; out (c), 0
db EDh, 71h
; loop forever
_loop:
jr _loop
;=============================================================================
NMOS CPUs output 00 (hex) executing the undocumented instruction "out (c), 0".
CMOS CPUs output FF (hex).
The SENTINEL configuration register is a 74HC273 latch.
I simply connect eight LEDs to the latch output to display the results:Zilog Z80A (7725 date)
ceramic package, clearly NMOS
Mostek MK3880 (7807 date)
ceramic package, NMOS
Mostek MK3880 (8029 date)
ceramic package, NMOS
SGS Z8400AD1 (18214 marking)
ceramic package, NMOS
Toshiba TMPZ84C00P (8532 date)
CMOS, extracted from a YAMAHA FB-01 mainboard.
I bought the FM sound generator from ebay so I can't comment on its history but I expected the CPU to be a genuine Toshiba CMOS part.SGS Z8400B1 (88207 marking)
NMOS as expected
Zilog Z84C0020PEC (0047 date)
Bought from a leading ebay seller in China many years ago.
At least it seems to be a CMOS CPU, not a counterfeit NMOS one as expected.Zilog Z84C0020PEC (0723 date)
Also from China, again a surprise, all twelve are CMOS CPUs.
Sharp LH0080A (0940 date)
Bought from a German ebay seller, NMOS as expected.
Zilog Z84C0020PEC (1035 date)
According to some sources on the internet these CPUs are fake.
Well, at least they are CMOS. Will test speed next.MME VB880D (X6 marking)
NMOS as expected
Sharp LH0080A (546DA marking)
Extracted from a YAMAHA CX5M mainboard, NMOS as expected.
Most of them are standard Z80s in a DIP-40 package from ebay or unsoldered from old computers.
I also collected some exotic ones like the T6C79 from Toshiba and the ATJ3310 and ATJ3315 from Actions.
But I'll stick to the pure Z80 as produced by Zilog here.
A short history of Z80 CPUs:
- Z80: 2.5 MHz NMOS
- Z80A: 4 MHz NMOS
- Z80B: 6 MHz NMOS
- Z80H: 8 MHz NMOS
- Z80: 4-20 MHz CMOS
A simple 8-byte program will help me differentiate between NMOS and CMOS Z80 CPUs:
;=============================================================================
; take it easy
nop
; disable interrupts
di
; SENTINEL configuration register
ld c, 00h
; out (c), 0
db EDh, 71h
; loop forever
_loop:
jr _loop
;=============================================================================
NMOS CPUs output 00 (hex) executing the undocumented instruction "out (c), 0".
CMOS CPUs output FF (hex).
The SENTINEL configuration register is a 74HC273 latch.
I simply connect eight LEDs to the latch output to display the results:
I bought the FM sound generator from ebay so I can't comment on its history but I expected the CPU to be a genuine Toshiba CMOS part.
At least it seems to be a CMOS CPU, not a counterfeit NMOS one as expected.
Well, at least they are CMOS. Will test speed next.
Subscribe to:
Posts (Atom)












































