Sunday, December 11, 2022

reZet80 SCOUT - I/O, display and keypad

The reZet80 SCOUT is a single-board computer (SBC) that provides very basic input and output capabilities.
A 74LS139 demultiplexer addresses one input and one output port:
Two 74LS244 buffers are used for the ports.
The output port is connected to two 7-segment common-cathode displays.
The input port provides the connection to a 20-key keypad for hexadecimal input.
Four special keys (ENTER, BACK, ESC and SHIFT) are also connected.
So the reZet80 SCOUT enables you to input and output hexadecimal numbers (for now).
The ports could be used for other purposes, too.

Thursday, November 24, 2022

reZet80 SCOUT - CPU & memory

The reZet80 SCOUT uses the reZet80 CPU bus specs R2 (release 2).
For a single-board computer (SBC) the reZet80 CPU card is integrated into the mainboard.
Please check the reZet80 CPU card R2 and the reZet80 CPU bus specs R2 for the specs.
The schematics (including power on/off and reset switches and power LED and connectors):
The 64 KiB address space of the Z80 is divided into 2 banks of 32 KiB each:
The reZet80 SCOUT is equipped with 1 KiB of RAM and 2 KiB or 4 KiB of ROM provided by two 2114 chips and one 2716 or one 2732 chip, respectively. Only one ROM socket is provided due to space limitations.
The schematics for RAM, ROM and the 74LS139 demultiplexer:
The demultiplexer is also used for addressing the input and output ports that will be covered next.

Saturday, October 22, 2022

reZet80 SCOUT - a minimalistic 70s single-board computer

The reZet80 SCOUT is a minimalistic single-board computer (SBC).
It is equipped with a Z80 CPU, 1 KiB of RAM and 2 or 4 KiB of ROM containing a simple debug monitor.
Two 8-bit I/O ports connect to a 20-key keypad as default input and a 2-digit 7-segment display as default output.
You can also attach other peripherals to both I/O ports.
The board also includes power supply sockets and on/off and reset switches.

The reZet80 SCOUT is the little sister / brother of the reZet80 PIONEER. If you need more RAM or ROM or better expansion capabilities use the reZet80 PIONEER.

A minimal amount of NMOS and LSTTL chips that were available in the mid to late 70s are used in this project:
  • Zilog Z80 (CPU, NMOS, 1976)
  • Intel 2114 or compatible (1K x 4 bit static RAM, NMOS, 1976)
  • Intel 2125 or compatible (1K x 1 bit static RAM, NMOS, 1976, alternative to 2114)
  • Intel 2716 or compatible (2 KiB UV erasable EPROM, NMOS, 1977)
  • Intel 2732 or compatible (4 KiB UV erasable EPROM, NMOS, 1978, alternative to 2716)
  • 74LS139 (memory and I/O decoding, LSTTL, 1975)
  • 74LS244 (input and output ports, LSTTL, 1976)
Image of the current prototype running on the reZet80 HWDK using the reZet80 CPU card R2 and the reZet80 4 KiB ROM 2 KiB RAM card.

Thursday, September 1, 2022

Experience the 1970s with reZet80

The Spectravideo SV-328 was my first computer so I had my first encounter with home computers in the 80s. So why go back in time to the 70s and design an NMOS/LSTTL computer? Well, because IMO the home computer (r)evolution began in the 70s and the 70s were as challenging and thrilling as the 80s.

It was the decade that gave birth to 8-bit microprocessors: Intel 8008 (1972), Intel 8080 (1974), Motorola 6800 (1974), MOS 6502 (1975), Zilog Z80 (1976) and Intel 8085 (1977).
Well-known home computers of the 70s were (in alphabetical order) Altair 8800, Apple 1 and Apple 2, Atari 400 and Atari 800, Commodore PET, NEC PC-8000, Sharp MZ-80K and Tandy TRS-80.

CP/M was created in 1974.
Computer kits became available for computer hobbyists.
The 1970s were also the beginning of the video game era.
One of the first arcade video games from 1972 was Pong by Atari.
The first home video game console was the Magnavox Odyssey from 1972.
Atari's VCS was introduced in 1977.
Space Invaders was released by Taito in 1978.

These are lots of reasons to follow up with the computer technology of the 70s.

The two 70s computers I'm building are the reZet80 SCOUT and the reZet80 PIONEER.
The reZet80 SCOUT is a minimalistic single-board computer (SBC) equipped with a Z80 CPU, 1 KiB of RAM and 2 or 4 KiB of ROM, one input and one output port. These ports connect to a 20-key keypad as default input and a 2-digit 7-segment display as default output.
The reZet80 PIONEER is a modular stand-alone computer system, the big sister/brother of the reZet80 SCOUT. It can accomodate more RAM and ROM, more I/O ports and is expandable.

Thursday, August 18, 2022

FCFC part 1

Fake chips from China (FCFC): fake Z80 chips

This blog post is about testing faulty retro chips from China revealing the faults.
Back in 2016 when I started the reZet80 project, ebay and Aliexpress sellers from China offered thousands of retro chips. Being interested in chips from the 70s and 80s I ordered a few Z80 CPUs and many 74LS series chips.
I never bought from the cheapest sellers because I never trusted them (interesting how they try to outbid each other by 1 cent). A wide range of chips is still offered today but prices went up a lot after Corona and the war in the Ukraine.
Most of the chips are OK, at least they do the job they are supposed to do according to the datasheet. For the price they might be Chinese clones of branded chips but I don't care as long as the functionality is not faulty or limited.

Let's get started with two Z84C0020PEC chips, 20 MHz CMOS Z80 CPUs.
The scratches on the back side of the chips were caused by myself.
Inserting the CPUs in a working reZet80 system does nothing. An oscilloscope reveals that both Z80 are dead.
An oscilloscope capture of a "good" Z80 CPU looks like this:
Channel 0 (white) is /RESET, Channel 1 (brown) /MREQ, Channel 2 (red) /RD, Channel 3 (orange) /WR and Channel 7 (purple) /IORQ. Channels 4, 5 and 6 (yellow, green and blue, respectively) are a mix of address and data lines. My test program repeatedly reads some data from ROM and outputs it to I/O, so note that /IORQ and /WR are both low at the same time with /MREQ and /RD high.

Firstly the visual inspection, I examined the logo and production date: Nothing conspicuous but the marking on the bottom is missing. This might be a clue.
The pins look brand new.
Second step: Use acetone to expose very cheap fakes. No, still the same top markings:
Using nail polish remover in the third step makes the markings look paler but still OK:
Time for destructive behavior: Remove the top finish with a sharp tool (well, too much destruction):
BUT revealing some part numbers on the back side:
After some investigation on the net I found that for earlier Z80A CPUs 12- and 13-digit codes were used. So one chip might be a resurfaced NMOS Z80A. 14-digit codes were used for Z8000 processors and peripherals, so the second chip could be a Z85xx. Or maybe a newer NMOS Z80A.
With these clues I tried to measure the internal resistance between +5V (Vcc) and GND for all 40-pin Z80 and Z8000 processors and peripherals. Nothing, absolutely dead. So RIP, whatever you were!
But wait, one last step that comes to my mind, decapping with hammer and pliers:
This is how far I get with brute force:
IMO these don't look like pieces of a Z80 die...

Saturday, July 2, 2022

Understanding the DC characteristics of the Z80 CPU

When checking the compatibility of digital chips it's important to understand the electrical DC characteristics found in the datasheet. In this example we'll see how those have to be interpreted for the connection between the Z80 and Intel's 2114 RAM chips.

IMO eight parameters in the datasheet of the Z80 CPU are of interest:
- VIL (input low voltage)
- IIL (input low current)
- VIH (input high voltage)
- IIH (input high current)
- VOL (output low voltage)
- IOL (output low current)
- VOH (output high voltage)
- IOH (output high current)

Maximal and minimal values for the NMOS Z80 CPU (a few values differ slightly for CMOS CPUs):
- VIL = 0.8 V (max), IIL = 0.01 mA
- VIH = 2.0 V (min), IIH = 0.01 mA
- VOL = 0.4 V (max), IOL = 2.0 mA
- VOH = 2.4 V (min), IOH = 0.25 mA
An NMOS Z80 is able to sink 2.0 mA and source 0.25 mA in NMOS/TTL circuits.
So when the Z80 outputs a logic low ("0") it sinks current from the external source.
And when the Z80 outputs a logic high ("1") it sources current to the external load.

The characteristic values for a 2114 RAM chips (HMOS, fully TTL compatible):
- VIL = 0.8 V (max), IIL = 0.01 mA
- VIH = 2.0 V (min), IIH = 0.01 mA
- VOL = 0.4 V (max), IOL = 2.1 mA (min)
- VOH = 2.4 V (min), IOH = 1.0 mA (min)
It's not surprising that the values are similar as both CPU and SRAM are built in NMOS technology.

In the reZet80 SCOUT and reZet80 PIONEER systems each of the CPU data lines D0-D7 is connected to one SRAM chip. The CPU address lines A0-A9 and the /WR pin are connected to both RAM chips (the 2114 is a 4-bit chip). A 74LS139 demultiplexer drives the /CE pins of the SRAM chips but let's ignore it for now to keep things simpler.

When the CPU reads data from memory the values that apply are:
- for a logic "0":
  RAM: VOL = 0.4 V (max), IOL = 2.1 mA (min)
  CPU: VIL = 0.8 V (max), IIL = 0.01 mA
The maximal output voltage of the memory chip is lower than the maximal accepted input voltage of the CPU. And the RAM chip could drive low a minimum of 210 (2.1 / 0.01) Z80s.
- for a logic "1":
  RAM: VOH = 2.4 V (min), IOH = 1.0 mA (min)
  CPU: VIH = 2.0 V (min), IIH = 0.01 mA
The minimal output voltage of the memory chip is higher than the minimal accepted input voltage of the CPU. And the RAM chip could drive high a minimum of 100 (1.0 / 0.01) Z80s.

When the CPU writes data to memory the values that apply are:
- for a logic "0":
  CPU: VOL = 0.4 V (max), IOL = 2.0 mA
  RAM: VIL = 0.8 V (max), IIL = 0.01 mA
The maximal output voltage of the CPU is lower than the maximal accepted input voltage of the memory chip. And the CPU could drive low a maximum of 200 (2.0 / 0.01) memory chips on every data, address and control line.
- for a logic "1":
  CPU: VOH = 2.4 V (min), IOH = 0.25 mA
  RAM: VIH = 2.0 V (min), IIH = 0.01 mA
The minimal output voltage of the CPU is higher than the minimal accepted input voltage of the memory chip. The CPU could drive high a maximum of 25 (0.25 / 0.01) memory chips on every data, address and control line.

That seems to be enough driving power for two memory chips (1 KiB).

Saturday, June 4, 2022

reZet80 PIONEER debug Monitor

A short description of the reZet80 deMon (debug Monitor) R0 (release zero).

The deMon is a simple piece of software that boots up the reZet80 PIONEER and enables you to start simple tasks.

After reset the start of RAM and the amount of RAM in KiB will be displayed (shall be "3C0001" for a 1 KiB and "380002" for a 2 KiB system). The first four hexadecimal digits specify the RAM start address and the last two digits show the amount of RAM in KiB. Please check the reZet80 PIONEER address decoding specs for details on the address space.
The deMon uses hexadecimal notation only so all commands and data have to be entered in hexadecimal. Hexadecimal digits that you enter are displayed from left to right.
You can enter no more than 6 digits. All following digits are ignored.
The BACK key moves you one digit to the left.
Pressing ESC brings you back to the first display position.
Please note that digits you have already entered will not be deleted but can be overwritten.
Press ENTER when you have finished entering your command.

The list of available commands:
- "0XXXX": jump to specified address ("00000" for soft reset)
- "1ZYYWW": output byte to 16-bit I/O port
- "EXXXX": examine/modify memory from specified address on

Please make sure that the address XXXX and the parameters WW, YY and Z you enter are valid because no plausibility checks are done in the deMon.

In examine/modify mode you can examine the content of ROM and RAM but you can only modify RAM. The address you supplied and the value of that memory location is displayed. Entering "E0000" for example will display "0000F3" (F3 is the opcode of the "di" instruction that is the first instruction in the ROM at address 0000). Press ENTER to move to the next memory location. In our example "00013E" is then displayed. Press ENTER once more to see "0002FF" (3EFF is the instruction "ld a, ffh" that follows "di" in the ROM).
You can change the content of a RAM address by entering a new value before pressing ENTER. As you type the new value is displayed replacing the old one. You can enter 2 digits at most (00-FF). All additional digits are ignored.
Use the BACK key to correct your entry.
ESC quits examine/modify mode and you are taken back to the first display position.

Enter "167F00" to output "0" to the leftmost display position, "167F3F" for the 7-segment display. This is just an example to explain the output command. "00" or "3F" is the byte to output (WW). "7F" (YY) is the 8-bit I/O port. 70-7F can be used for the 6-digit display (see I/O decoding specs). 6 (Z) is the leftmost display digit, 1 the rightmost.
Usually one card uses one I/O port in the reZet80 PIONEER's 8-bit I/O space. Additionally a second 8-bit value is used to address one out of 256 possible I/O addresses per I/O port (1 to 6 for the display).
The display will change to "067F00" or "067F3F" after the command has been executed. Press ESC to restore the display to the command you have entered and move back to the first display position.

The SHIFT key is not used for now.

The code has been optimized for size and, if possible, for speed, too.
It makes use of both register sets and the least significant half of "ix" (the undocumented "ixl" register). "ixh" and "iy" including "iyl" and "iyh" are not used in the code (I keep a reserve for the next release).
Maskable interrupts are run in mode 1 so the "i" register is used, too.

The deMon occupies only a small amount of the 2 KiB ROM. Depending on your hardware configuration at least 1639 bytes are free for your enhancements.

Wednesday, May 4, 2022

reZet80 PIONEER - 1 KiB RAM card using 2125 chips

This card can be used for the reZet80 PIONEER if you own 2125 SRAM memory chips but you don't have 2114 chips.
Eight 1024x1 SRAM chips produce an amount of 1 KiB RAM.
Bill of materials:
- reZet80 PIONEER 1 KiB RAM card PCB
- 40-pin right-angled male connector
- 8x DIP-16 socket (optional)
- 8x D2125A SRAM (or compatible 1024x1 chips)
- 9x capacitor 100 nF

Thursday, April 7, 2022

reZet80 PIONEER - 10 KiB ROM card

Five 2 KiB UVEPROM chips produce an amount of 10 KiB ROM.
This card enables us to use a total amount of 14 KiB ROM with the reZet80 PIONEER.
See the memory map and address decoding for more details.
EEPROM chips can also be used although they were not available in the 70s (just in case an easier handling is more important than a 70s feeling).
Bill of materials:
- reZet80 PIONEER 10 KiB ROM card PCB
- 40-pin right-angled male connector
- 5x DIP-24 socket
- 5x 2716 EPROM (or compatible 2 KiB chips)
- 6x capacitor 100 nF

Thursday, March 3, 2022

reZet80 PIONEER - alternative 20-key keypad

This is the alternative 20-key keypad for the KEYPAD bus (see 20-key keypad with 74C923 key encoder for the KEYPAD bus specs).
The keys '0' to 'F' plus 4 special keys (ENTER, BACK, ESC and SHIFT) are connected via LSTTL chips.
This circuit requires polling the keys constantly.
The card uses two I/O ports in the 8-bit I/O space (see IO decoding specs).
It could also be implemented to use only one I/O port but it would require one extra demultiplexer and currently we have plenty of free I/O ports.

Bill of materials:
- reZet80 PIONEER keypad card (prototype)
- 10-pin right-angled male connector
- 2x 10-pin male socket
- 10-wire cable female/female
- 2x DIP-20 socket
- 74LS244 8-bit buffer
- 74LS374 8-bit flip-flop (or 74LS574)
- 20 key switches (FUTABA MA41)
- 4x resistor 4k7
- 2x capacitor 100 nF

Tuesday, February 1, 2022

reZet80 PIONEER - 6-digit 7-segment LED display

This is the 6-digit display card for the DISPLAY bus (see 6-digit TIL311 display for the specs).
It displays 6 hexadecimal numbers with 7-segment LED displays.
Please note that the decimal point is wired in hardware but not enabled in software in the current version.
The card uses one I/O port in the 8-bit I/O space (see specs for I/O map and decoding).
The card has been designed for 7mm common cathode LED displays.
Provisions have been made to accomodate all LED displays up to a height of 17,78 mm (distance between pins) but you'll have to wire them yourself on the card.
It's also possible to use common anode displays but hardware and software need to be adapted.
Bill of materials:
- reZet80 PIONEER 6-digit 7-segment display card PCB
- 14-pin right-angled male connector
- DIP-16 socket (optional)
- 6x DIP-20 socket (optional)
- 74LS138 demultiplexer
- 6x 74LS374 8-bit flip-flop
- 6x 1-digit common cathode LED display (Vishay 7mm TDS series)
- 7x capacitor 100 nF

Sunday, January 9, 2022

reZet80 PIONEER - 20-key keypad with 74C923 key encoder

This is a 20-key keypad connected via the 74C923 chip and the KEYPAD bus (see specs below).
It provides the keys '0' to 'F' plus 4 special keys (ENTER, BACK, ESC and SHIFT).
This 74C923 chip simplifies the circuit.
It is LPTTL compatible and supports key debouncing and interrupts.
It triggers /NMI once a key is pressed (I use the non-maskable interrupt because it has the fastest interrupt response time).
The card uses one I/O port in the 8-bit I/O space (see IO decoding specs).
An alternative circuit without the 74C923 can be constructed using LSTTL chips (I will post a changed reZet80 DEV keypad soon). But the circuit requires polling the keys.
Bill of materials:
- reZet80 PIONEER keypad card (prototype)
- 10-pin right-angled male connector
- 2x 10-pin male socket
- 10-wire cable female/female
- DIP-14 socket
- DIP-20 socket
- 74HC04 inverter
- 74C923 key encoder
- 20 key switches (FUTABA MA41)
- 3x capacitor 100 nF
- capacitor 1 uF

The KEYPAD bus spec:
KEYB01: D4
KEYB02: D3
KEYB03: D2
KEYB04: D1
KEYB05: D0
KEYB06: /IOSEL_5X
KEYB07: /IOSEL_6X
KEYB08: /NMI
KEYB09: GND
KEYB10: +5V