There were several boards made in the 1980s:
ARC40 (Z8, parallel I/O, 8255-based EPROM programmer)
ARC41 (Z8, 146818 real-time clock/calendar, 4K battery-backed RAM, RS232 port)
ARC42 (Z8 prototyping board, the one I have)
Software available:
Z8 Monitor
Resident Z8 Assembler
Resident Z8 BASIC Compiler
This project seeks to preserve the designs and software.
Files
Z8FORTHManual.pdf
From YulBEdwards. Official manual of the Oak Ridge Laboratories FORTH.
Adobe Portable Document Format -
248.57 kB -
01/06/2023 at 22:39
This is the optimised Z8 FORTH source code shown in TM-10463.pdf
written by Oak Ridge Laboratories.
Recreated from OCR text, it may well have typos, but the hex output matches the start of the binary hex dump assembly.
Found errors in a webpage about upgrading the Z8 BASIC to use a fixed baud rate for a given frequency.
The assembly listing conflicts with the pure hex data. Not major, I can fix it, but it shows they did not check it.
Hip repair surgery means I have to take bus or train to work for a while. This takes longer than my usual 35 minute cycle ride, so I have less free time. I will have to do hobby work at the weekends.
2020-02-03
Found source code for a Z8 disassembler, which says it compiles with Microsoft C. It compiles with cygwin gcc but crashes when run. Also gives a segmentation fault when compiled under Linux on my home PC.
The problem was that Linux has 32-bit ints and 64-bit long ints, while the original code expected 16-bit ints and 32-bit long ints. Therefore Linux produced 64-bit indexes which is far too big. I conditionally #define int32 depending on the environment. It now compiles and runs without crashing.
It assumes the code is located at 0000h and the program counter initialises to zero.
The RZ8 ROM begins at 1000h and contains ASCII text, data and BASIC. I do not know the machine-code entry points, but I can read the BASIC text and see it makes USR calls here:
usr(84): (a routine in BASIC ROM) if and(usr(84),%5f)<>%43 goto 30089"
if usr(%1776,s,e)=0 goto 30070" if usr(%1779)<>0 goto 30064 if usr(%177c,s,e)=0 goto 30087 if usr(%177f)<>0 goto 30082
which gives clues as to what the usr routines do. I imagine the s,e parameters are start,end for EPROM reading and writing.
2020-01-04
Added code to show the BASIC code in the ROM. Results uploaded.
2020-02-09
Uploaded assembly source code that generates the original ROM data. Quite a lot of work! It shows text and BASIC, and the rest is from a disassembly. The latter may be code or data, I don't have time to analyse this in full detail. I leave that to experienced Z8 programmers. It is a good starting point.