S100 Computers

Home S-100 Boards History New Boards Software Boards For Sale
Forum Other Web Sites News Index    
  
An S-100 Bus Z80 V3 CPU Board.
 
  Z80 V3 Board_2
 
Introduction

Our original S100 Bus Master Z80 CPU board came out in 2010. It has shown itself the be a stable and very reliable CPU board.
Most systems handle a clock frequency of 8MHz (with 3 IO wait states). By switching out some 74LSxx chips to 74Fxx chips the board runs in three  terminated S100 bus I here have easily and reliably at 10MHz. 
The circuit used was almost an exact copy of the Intersystem's Z80-II  CPU board.
 
Apart from all the then common features found on a Z80 board (and being completely S-100 IEEE-696 compliant), it had an extremely clever and powerful ability to allow the Z80 to address up to 1 MG of RAM in two 16K "windows" within the Z80's address space. 
This is described elsewhere and will be discussed in more detail below. 
But its primary importance is that it could be used to address greater than 64K of RAM for CPM3 and that it can be used to load/examine 8086 code at the top of the 1MG RAM/ROM address space.

Even with the above windowing feature there was quite a bit of spare space on the board.
I decided to enlarge the boards features.  This new V3 Z80 Master Z80 CPU board has the following features.

1.    Two 16K RAM/ROM addressable windows which can reside anywhere in the first 1MB of the S100 Bus Address space
2.    Switch selectable ability to add 0-8 CPU wait states to Memory, IO or INTA CPU cycles.
3.    An IOBYTE 8 bit switch selectable IO port for flexible monitor options.
4.    A USB port to up/download code to/from a PC.
5.    This USB port can also be configured to act as a Console IO port for the Monitor/CPM etc. instead of the Propeller Console IO board.
6.    A reliable S100 bus Reset, POC and Slave Clear circuit for systems/motherboards that do not provide these signals.
7.    The ability to activate each of the S100 bus TMA0,1,2,3 lines for Master/Slave CPU control of the bus.
8.    An "IMSAI" style 8 pin ribbon cable connector to hook up to a front panel board.
9.    The board will work with all S100 computers hardware and software as the previous Z80 CPU boards.

With almost any RAM board and Disk Controller board you should have a basic working S100 bus system.

That's the good news, the bad news is this board is now quite complex. Its a densely packed 4 layer board where 70% of the board needs to be built/working before anything works.
It's probably not suitable for a beginner S100 bus board builder. 


The Z80 CPU Board Circuitry
The complete schematic of the board can be seen here.  At first it does look a bit scary, but once you split it into its components it gets a lot easier.  First the board circuit can be split into 3 parts.  First the address/data line components, second the S-100 status and control signals and third the "new" USB port, IOBYTE port and TMA selection lines. The first two are almost identical to that on the V1 and V2 boards. Let us first look at the address lines.

Address lines.
Pushing the sixteen Z80 address lines out on to the S-100 bus on Z80 boards is usually not complicated.  Typically it is done with a two  buffer/driver IC's (that can be tri-stated by the S-100
ADSB* signal if the board is no longer the bus master).   The reason this board is more complicated is that we have added the capability to intercept the address the Z80 "thinks" it is putting out with another actual address on the bus.  The circuitry itself is a bit complicated, but for most it can be regarded as a "black box" that has the following properties:-
   

There are two address space windows 0-3FFFH and 4000H to 7FFFH that intercept the Z80 address lines and modify them depending on 8 bit "offset values' placed in ports at D2H and D3H on the board (U17 & U16). 

 

The window "offset value" placed in port D2H (or D3H) is used as the top six bits of a 20-bit address space (allowing up to 1MG to be addressed).

Upon board reset, these "offsets" are 0H, so the address put out by the Z80 is the same as that which appears on the bus.

This address modification does not affect Z80 addresses above 7FFFH.

 

The two 16K windows are actually independent of each other and while often contiguous, can be different and used to move data from one memory location to another anywhere in the 1MG address space.

 

I know the above sounds confusing.  Lets take an example. Suppose you want to see what is in RAM at FC000H to FFFFFH (a region addressed by say a 8086 CPU reset/monitor). If you output to port D2H the "offset value" 0FCH and then examine with your Z80 monitor program memory from 0H to 3FFFH what the Z80 will actually get is what is in RAM at FC000H to FFFFFH. If you have no RAM at that location in your system you will just see FFH's. Until you issue a new value to port D2H any Z80 code addressing memory from 0 to 3FFFH will actually be looking in hardware at RAM at FC000H to FFFFFH.  If you placed 80H in port D2H you would be looking at a 16K window starting at 80000H in RAM. If you issue 0H to port D2H (or do a hardware reset) the Z80 address lines match with the hardware address lines (i.e. a 16K window starting at 0H in RAM -- or no actual translation).

The second port (
D3H) works exactly the same except its window is 4000H to 7FFFH.  So again if you issued 0FCH to port D3H When the Z80 accesses memory between 4000H to 7FFFH it will actually get in hardware memory at FC000H to FFFFFH
Note the port address (
D2H & D3H) are configured using jumper P2 with only 5-6 connected.  (1101 + U27A)
You can assign another port number if you like with jumpers on
P2 (0xH -Fxh).
 
Here is a picture of the address translation circuitry.
 
Address Translation Circuit
    
The relevance for all this becomes very apparent if you want to use CPM3 (or CPM+).  See here for a more detailed description of that operating system.
By utilizing the above
16K windows you can very quickly and easily implement a banked CPM3 system. 
However we are getting ahead of ourselves. Remember for now, upon startup/reset, the Z80 sees only 64K of RAM just like any other S-100 CPU board.

The EPROM/Power On Jump Circuit.
The Z80 boots up on reset at 0H in RAM. Typically we want it to jump to high RAM (e.g. E000H or F000H) where we have a Monitor program in EPROM.
For this we need to force to start at that location upon power on or reset. 
The circuit below accomplishes this.
  
    Power On Jump Circuit
   
The trick is to force 00H (NOP's) on to the data bus until the desired Address is reached.  The Boot (upper 4) address lines are set with a jumper (
P3) of U15. In my case I use F000H. So upon reset, all address lines are 0H. The output from U29 will turn on the inputs from U18. These will set the data lines to 0H. The Z80 will this see only the NOP opcode on its data lines. This will increase the address lines one byte. The process will repeat until the U15 matches the address lines (A12-A15) with that on Jumper P3.  At that point pin 19 of U15 will go low. ROM_SELECT* will go low. This causes U29 to switch off U18 and turn on the EPROM outputs. 

Note, Pin 1 & 19 of  U20 the "Normal" buffer to input data from the S-100 bus to the Z80 will be high all this time because the READ_STROBE input never goes high.   It is inhibited by the "Jump Enable" output of
U29 going (via pin #3 of U41) to the Boards main READ_STROBE/pDBIN signal. The latter is not shown in the above diagram but can be seen in the main schematic.

Here is a Logic Analyzer Display of some of the signals (using a USBee SX).
     
    Reset Signal
 
You can place the EPROM on any 4K boundary in the Z80's 64K address space.
I use
0F000H to 0FFFFH for the following Master ROM Monitor.   This monitor code can be downloaded from the bottom of this page.
I like to use Atmel AT28C64B EEPROMS and a Wellon VP-290 (or later) Programmer.

Wait State Generator Circuits
Since we will be pushing this board to speeds uo to 10MHz we will need to have the ability to add bus wait states for use with older slower S-100 boards.
The usual tried and true
74LS165 circuit is used. Here is an example:-
  
  Wait State Generator
   
By setting the switch anything from 0 to 8 wait states can be added to bus signals.  On this board I have 2 wait state generators to allow one to individually tune wait states for the onboard ROM, M1 type Memory accesses or any memory access and I/O port access.  For the Z80 an
M1 type memory access has the shortest access time, so with a slow RAM board you can first try setting a M1 access wait state addition, if that does not work you can fall back to (slower) all memory accesses.  With all the current S100 Computers Memory boards normally none, 1 or 2 M1 wait states is all that is required.

Status Signal Decoding.
The control signals from the Z80 cannot be directly used on the S-100 bus. They must be first converted into what is essentially Intel 8080 type signals.  The circuitry for this is a bit complex and is shown here just for completeness.  There are a number of Jumper options to alter the S100 bus signals. These are described in detail for the V2 board Z80 circuit and summarized in a table below. For detail, see the above complete schematic .pdf file.
  
Z80 Control Circuit
   
Power Up, Reset Circuit.
Most S100 Bus motherboards provide a negative going pulse to the
S100 Bus Reset line (75), Slave Clear (54)  and Power On (99) lines on startup.
Alternatively the signals are provided by the Front Panel if the system has one.
However some setups assume the Master CPU will provide these signals.
Previous S100 Computers boards provided a Transistor/Capacitor discharge circuit which did not work very good.
Here we will use an Analogue Devices
DS 1233-5 to generate the signals. Here is the circuit:-
   
     Reset Circuit
   
One minor change to the original V2 Z80 Board circuit is the CPU data lines are now each pulled up with a
4.7K resistor (RR10) located under the Z80 CPU.
You need to get a 40 pin socket of the type that has a small bridge across the clear are in the middle of the socket.
Cut out this bridge leaving a socket with a large clear central area.
This 4.7K resistor network on the Z80 data lines is required for a Front Panel connection.

The V3 Board Circuit Additions.
The USB Port
The USB connection uses the same
DLP-USB1232H Parallel Port to USB module we used on our Serial IO Board.
This module while not inexpensive is very
simple to interface and is very reliable.  There are a few types. Make sure you use this exact one.
Here is the circuit.
     
  USB  Circuit
   
There is one data input port to the Z80 data bus, One status input port to the Z80 data bus and one output data port from the Z80 data bus. The default status port is
E8H and the data port is E9H
These designations can be changed with jumpers on
P13 (E8H-EFH)
The updated Z80 ROM
"Master.z80" monitor (Version V6.2 and greater) has been updated to send and receive data with the "X" command (see below).

A very important jumper is
K9. If jumpered 1-2 The Z80 monitor will act as it always did in the past using the Propeller Console IO port for all Console IO. 
If
K8 is jumpered 2-3 Then the Z80 monitor communicates over the USB port and is expecting a USB linked terminal at the other end.  This is typically a PC program like Tera Term etc.
  
     data Output
   

The IOBYTE Port
The second addition is an "
IOBYTE" data input port. Normally with the S100 Computers Boards this 8 bit Monitor IO configuration ports resides on the SMB at Port EFH. The Dip switch SW1 allows the IOBYTE bits to be changed.  By moving the SMB IOBYTE port on to this Master Z80 board, the SMB is not required for most software.  However if the SMB is in the system (to display the address lines, data and bus status lines etc.) you must inactivate the IOBYTE port on this Z80 CPU board by removing the Jumper 15-16 on P19. Otherwise you will have two boards providing possibly conflicting IOBYTE values.  Here is a picture of the circuit.
        
     IOBYTE Circuit
  
The DMA Selection Circuit
The third addition is the circuit to activate one of the
S100 Bus TMA lines.
These lines are used to activate one of the many S100 Computers Slave CPU's. 

The circuit is quite simple. Again we use a Jumper on
P19 to activate a 4 bit output port (U59) on this board
When activated (and the slave CPU is now in control) one of the 4 LEDs
(D2,D3,D4 and D7) also lights up.
The
TMA line is activated by outputting to port EFH 1, 2, 4 or 8. Here is a picture of the circuit:
  
  TMA Lines
  
Finally this board brings the internal Z80 Data lines out to a 16 DIP connector at the top RHS of the board for possible connection to an IMSAI like front panel.
     
    IMSAI FP Connector_2
 

The Onboard ROM

The
Z80 Master monitor has by now evolved into a sophisticated monitor with many menu options. It no longer fits into the F000H-FFFFH
address space.
Rather than drop the monitor down to E000H-FFFFH we leave it at F000H-FFFFH and use hardware on the board to "page in" either the lower half of an 8K ROM or the upper half of the same ROM. 
This is all explained here in detail in the monitor software section of this site. I use an EEPROM such as a Samsung MK28C64A 8KX8 EEROM.

Remember BTW, you can totally inactivate the ROM. (That is a very important function for CPM3). 
You do this by outputting xxxxxxx1 to port D3H. You can shadow it back in by xxxxxxx0 to port D3H.  i.e. bit 0 of port D3H.  



Step By Step Building the V3-Z80 CPU Board.
The first step is to examine the bare board carefully for scratches or damaged traces. Use a magnifying glass if need be. The quality of the boards we get is excellent.
I must have done hundreds by now, never had a problem, but there is always a first time. A broken trace is almost impossible to detect by eye on a completed board.

Next solder in all the required IC sockets, resistors, resistor arrays, capacitors, jumpers, and the DIP switches and LED's.
Be sure you put the resistor arrays in with the correct orientation of pin 1.
Check their values before  soldering (they are difficult to remove).  Do not add the dual color LED to K4 yet.

You can use cheaper "double swipe" IC sockets. However for a critical board like this I prefer to use "Machine Tooled" IC sockets (e.g. Jameco # 38623). 
Unfortunately they are more expensive and you have to be particularly careful not to bend the IC pins. 
 If you think you will be doing a lot of EEPROM burning you should use the Low Profile ZIF sockets (e.g. Jameco #102745) for the EEPROM socket. 
However be aware that long term these do not make as good a connection as the above Machine Tooled IC sockets. 
The two clock oscillators should have their own special sockets (e.g. Jameco #133006).

The Board Power Supply.
This board only requires a single 5V supply for the circuits. There are a number of 5V regulator options:-
You need to pick one.
       
  Pololu 5V
   
These days there are a number of different Pololu 5V switching regulators. They  can be found here.
The board requires about 1.5 Amps at 5V. So you need to match the pinouts of
P5 or P6 with the Pololu regulator you use.
Alternatively you can use the right three pads of
P6 with a EzSBC 5V regulator.

Before adding any IC chips put the board in the bus and check all the IC sockets are receiving a 5 volt supply.
Here is a picture of the board at this stage.
  
   Empty Board
Unlike many of the other boards on this web site it's not really practical here to add chips one by one to this board with functional circuit testing. 
So you kind of have to take the plunge and add everything to the core CPU circuit. 

Add all IC's marked on the board EXCEPT the following:-
U53,U57,U60,U59,U54,U58,U55,U7,U52,U50,U51,U44,U67 and U48.
If you can use a 74S00 or 74F00 for U28.
See the table and pictures below for all the jumper settings. Add them all.

Start with a
4MHz Oscillator in U46. At these speeds you can use 74LSxx chips throughout.  If you have the earlier V2 version of the board you are in great shape. 
Setup the jumpers as they were on that board. We will normally want the monitor jump location to be
F000H, so Jumper P8 1,2,3 & 4 to P10 1,2,3 & 4.  No jumpers on P3.  
At 4 MHz wait state switches are normally not important. 
Add the jumpers exactly as outlined in the table and pictures below.
Before you pop the into your system check the orientation and number of each IC on the board. 
Please do this, I don't know how many times I have ignored this and created un-necessary problems for myself.  
Remove your current CPU board (if present) and pop it into your system.  

If you are lucky the board should come right up. The (blue)
D8, LED should light up.  If not, don't worry often there is a trivial error. First check all jumpers one more time. 
Do not underestimate the presence of a bent IC pin or missed solder joint.
If you reach a road block replace the onboard monitor with one containing only 76's (
HLT) and see if the CPU goes into the halt state (S-100 bus pin 48 high). 
If OK, you can step things along with EPROMS of increasing complexity to identify the problem. See here. If you have our SMB things are easier. 
 
Next you need to test the board with most of the Master Monitor commands. The
"K" command should display like this:-
 
    Master Monitor Menu
   
After trying the usual simple commands like displaying memory, modifying memory etc., use the "P" command to boot CPM3 from the IDE/CF card board or equivalent.
This operation system must boot every time without issues. Try a known working banked version of CPM3.
 
Next add the DLP-USB1232H USB module. Jumper
K6 1-2.
For the initial build/testing you can usually get away with pressing the module into the pads on the board without a socket.
However long term you should use a socket. You can clip the modules pins so it does not stay too high above the board.
 
If you jumper K8 2-3 then all Monitor I/O goes via the USB port.
Here is an example:-
       
    USB Serial Output

  
If everything is OK move the clock frequency up to 8MHz. You may need one or two wait states for ROM access and IO access.  Experiment!.
Most S100 bus systems should be able to handle 8MHz with 2 ROM and 2 IO wait states. Be sure the Z80 specs allow this speed.

At this point you can add the dual colored LED K4. Insert it such that on reset the color is green. This will indicate the Z80 is in the low ROM page.
The "X" commabnd should go to the high page and set the LED red.

To get to 10MHz (reliably) you need to swap out the following
74LSxx ICs for 74Fxx ICs.
Change:
U22,U20,U3,U2,U12, U4, U18,U21,U23,  U30,U39,U38,U25, U35 and U45.
Make sure U28 is a 74F00 or 74S00.
 
     10 MHz Additions 
     
With this arrangement and with 2 M1 RAM read wait states, 2 ROM and 2 IO wait states I have no trouble running banked CPM3 with all S100 Computer RAM and IO boards
in 3 different S100 board systems, (a 10 slot Morrow "Wondedrbus" Motherboard, a 20 slot Godbout motherboard and a 21 slot TEI motherboard -- all 3 motherboards are terminated). 
The Z80 CPUs were rated for 10 MHz.

Actually for overkill I replace all the critical signal processing circuit chips with 74Sxx or 74Fxx chips.
If you can afford it, the green circled chips (see below) can be replaced for the above black colored ones above as welll.
It goes without saying that the Z80 CPU itself must be rated for 10MHz or above.
   
    10 MH Adfditions 4
   
While each S100 bus system is different, I have found that the Dual IDE/CF card boards with that 8255A seem to be the most sensitive to CPU speed.
One nice thing about the V3 IDE/CF card board is it has its own wait state generator.  Should have done it on the V4 as well.

A Description of the Board Jumpers.
The  board contains a number of important jumpers that determine how it functions.
Most will not need to be changed once the system is running but it is very important they are configured correctly. 
In no particular order:-
   
 
Jumper    Function 
JP5,JP6,JP4,JP7 Used only if the board is to act as a bus master and are not generated elsewhere.  Generates Power On, Reset etc.
JP4, 1-2 Use only if no other board generates the S-100 2MHz clock signal when the Z80 is active
JP4, 3-4 Use only if no other board generates the S-100 MWRT signal when the Z80 is active
JP8 Address A11 to ROM. For 2 ROM pages Jumper 1-2.
SW4 (ROM WAIT) Sets number of wait states for onboard EEPROM (0-8).  I use 2 wait states, so for switch SW4 the 2 right most switches are closed.
K3 Use onboard clock Jumper 1-2.
P36 Allows wait states. 1-2, every sINTA,  3-4, M1 memory bus cycles,  5-6 All Memory cycles. I use 3-4.
SW2 (MEM WAIT) Sets number of wait states for P36 options.  I use 1 wait state for M1 cycles only, so for switch SW2 the right most switch is closed.
SW3 (I/O WAIT) Sets number of wait states for port I/O cycles.  I use 2 wait states, so for switch SW3 the two right most switches are closed.
K2 Normally set 2-3, however older pre-IEEE 696 boards (for example the Cromemco dazzler board) often require 1-2.
P37 Normally 1-2 (Partial latch mode).
K1, 2-3 If NMI software is not implemented do not connect
P39, J88, JP9 These jumpers are to configure different EPROMS and EEPROMS.  (For a 28C64:- P39 7-8, JP8 1-2, JP9 closed).
P2, 5-6 Memory window configuration port. I use I/O port D0H
P3. No jumpers. This sets the PROM boot address to F000H.
JP1, JP2, JP3 This provides extra ground lines on board IF ALL boards meet IEEE-696 specs. Normally unconnected.
K7 Determines the source of 5V for the USB port module. 1-2 the external USB bus. 2-3 The boards 5V line. Normally 2-3.
K8 Bit 0 of USB status port. If 2-3 the Monitor assumes the USB module is the console. Normally 1-2.
JP5 Stretch Reset pulse, Nornally no jumper
JP9 NC ROM pin. Jumper just in case.
JP10 Jumper to use onboard ROM.
K5 Normally 2-3 for 8 bit port addressing of Ports E8H -EFH
Dual color LED K4. This LED flips RED/GREEN depending on the current ROM Low/High Page currently active.
K6 Normally jumpered 1-2 unless you are using a Font Panel with DIDSB* and SSWDSB*.
JP2 Normally open unless you are using a Front Panel with DIDSB*
K10 Nornally open unless you are using a Front Panel with SSWDSB*
  
    Jumpers1
   
  Jumpers 2
   
  Jumpers 3
   
USB Port LED
LED D1 requires a little explanation.  It is triggered by any USB status or Data port access.
Since the ROM monitor always tests the USB status port (bit 0) to decide where to read/send a console character it is always on.
However once you boot CPM (at least with the current Propeller console driven CPM BIOS'es) you will not normally use this port and so the LED will not light up.
However if you modify your CPM BIOS to use this USB port to download or upload a CPM file (using
USBGET.COM) it will of course light up.  This is a useful diagnostic.

BTW this board works unchanged with all the "old" Master monitor ROMs -- you just will not be able to access the new features.  Likewise for all CPM3 images.

Parts
Almost all the parts for this board are common and can be obtained from venders like Jameco, Mouser, DigiKey etc.
One unusual part is the Analogue Devices DS 1233-5 transistor like item.  (The Mouser part number is
700-DS1233-5)
It is not essential if you have a front panel or motherboard that generates POC and reset or have the SMB in the bus.
The second unusual part is the DLP-USB245R USB port adaptor. (The Mouser part number is 626-DLP-USB245R).
This part is getting rare. Mouser & DigiKey are currently backordered. Look elswhere using Google etc. OnlineComponents.com currently stock them.
Note there is a related
DLP-USB1232H module, but this one needs to be programmed with the FT_PROG utility.

If you have a V2 version of this Z80 board you can transfer across all the IC's and add the new ones.


BUGS
None so far I have not tested this board with the IMSAI Front Panel  connector however.

S100 Bus Master/Slaves.
Please note this board is set to act as an IEEE-696 bus master.  It will work with any of our other S100 boards described on this site. It is important to remember however that when this CPU board relinquishes control of the bus to a slave device, it inactivates all of its address, data, status and control lines while the slave has control of the bus. The S100 bus signals ADSB*, DDSB*, SDSB* and CDSB* will all go low as specified by the IEEE-696 protocol.  Some older S100 bus DMA driven boards may not expect this.

A Production S-100 Board
Realizing that a number of people might want to utilize a board a group order of bare boards will be announced on the  Google Groups S100Computers Forum.
Please see there
for more information.


The links below will contain the most recent schematic of this board.
Note, it may change over time and some IC part or pin numbers may not correlate exactly with the text in the article above.

MOST CURRENT Z80 CPU V3.32 BOARD SCHEMATIC     (V3.32, FINAL, 12/14/2025)
KiCAD BOM for this board  V3.32                                        (V3.32, FINAL, 11/15/2025)
KiCAD folder for V3.32 board (.ZIP File)                                        (V3.32, FINAL, 12/14/2025)
Gerber Files for V3.32  Board                                                                (V3.32, FINAL, 12/14/2025)
 
Master ROM Monitor for V3 Z80 CPU Board (Will work with earlier Z80 Boards).
MOST CURRENT VERSION .ZIP FILE OF THE MASTER Z80 MONITOR (MASTER.Z80  V6.6)  (Using two 4K Pages)    (V64   12/18/2025)
MOST CURRENT TEXT VERSION  OF  "MASTER0.Z80" V6.6 MONITOR  (V6.4  12/18/2025)
MOST CURRENT TEXT VERSION  OF  "MASTER1.Z80" V6.6 MONITOR  
(6.4  12/18/2025)



Other pages describing my S-100 hardware and software.
Please click here to continue...

This page was last modified on 12/29/2025