intro
who is peepaw?
Me!
why a retro computer?
help a kid understand computers
why z80?
cheap, available, cheap
the plan
build from scratch
build something like a tec1
https://en.wikipedia.org/wiki/TEC-1
a great guide is the 1981 book build your own z80 computer
Build
Your Own Z80 Computer Steve Ciarcia/
get started with nop tester
http://www.z80.info/z80test0.htm
want an expandable system
keep the cost down
work up to a system like the jupiter ace (which is like a zx-81
sinclair computer)
https://en.wikipedia.org/wiki/Jupiter_Ace
getting started, the nop test
use an arduino mega board and some forth to spin up the most basic
z80 system
https://gitlab.com/8bitforce/retroshield-hw/-/tree/master/hardware
give the z80 5 volts, a clock and the right data and it will happily
start up and run through its address space doing nothing
the nop tester, in software
make a forth logic probe
https://en.wikipedia.org/wiki/Logic_probe
use a gate method of frequency counting
https://ww1.microchip.com/downloads/en/Appnotes/doc8365.pdf
create a few forth words to make a "logic probe" and test that
probe
https://pajacobs-ghub.github.io/flashforth/ff5-tutorial-guide.html#_counting_button_presses
need an arduino mega running flashforth
https://store.arduino.cc/products/arduino-mega-2560-rev3
https://flashforth.com/atmega.html
datasheet
https://store.arduino.cc/products/arduino-mega-2560-rev3
https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf
some jumper wires
z80
solderless bread board
the code walk through, start from the bottom up note: ( -- ) are
stack effect comments, back slashes are plain comments
constants
variable
@ ! mset mclr mtst
set up external interrupt, int4, arduino board pin4
the source code
declare some constants and variable as labels
variable Compare
variable Count
$100 constant PINH these labels come from the atmega2560 datasheet
$101 constant DDRH
$102 constant PORTH
$a0 constant TCCR4A
$a1 constant TCCR4B
$a8 constant OCR4A
$2c constant PINE
$2d constant DDRE
$2e constant PORTE
$6a constant EICRB
$3d constant EIMSK
: ext4.irq ( -- ) Count @ 1+ Count ! ;i the frequency counter
: logicprobe-init ( -- )
1249 Compare ! 100 hz
%0000.1000 DDRH mset h3 output
%0100.0000 TCCR4A c! toggle d6, ph3 on compare match
0000.1011 %TCCR4B c! set ctc mode, clk/64
Compare @ OCR4A ! set compare value
%0 DDRE c! e input
0001.0000 PORTE mset pullup on e4
%0000.0010 %EIC