Just thought I'd say 'hi' and introduce myself...
I bought a Gigatron a few months ago to work on with my son as a bit of a project to do together, however to make it more interesting than just a soldering project (he's done enough of those already) we're building it on a breadboard!. The purchase actually came about as he'd been making some simple circuits on breadboards and asked 'is it possible to make a computer on a breadboard?'... I Googled, imaging I'd fine an interesting Z80 based project that we could build when I found the Gigatron and figured that was far more exciting.
Current state of play:
It's taken him about 6 weeks of doing the odd half an hour every so often and it's finally 'finished' (i.e. he believes all connections are made). I then checked and didn't find any obvious mistakes - although all I really did was check power and ground was correct on all ICs and that if there were any ICs with pins not connected to anything that matched the schematic.
I clearly didn't do my checking as thoroughly as I should as there was a mistake - Vcc of U8 was connected to ground instead of Vcc... Thankfully I'd powered it up on a bench supply with the limit set at 100mA so although it did hit the current limit all seems fine (U8 still seems to be functioning as expected).
After fixing that issue we got a bit further, but still nothing on screen. Probing the ROM address bus I can see that it halts when the memory address test fails (I see it sit in the loop at address 0x0A):
Code: Select all
# Give a first sign of life that can be checked with a voltmeter
ld(0b0000); C('LEDs |OOOO|')
ld(syncBits^hSync, OUT) # Prepare XOUT update, hSync goes down, RGB to black
ld(syncBits, OUT) # hSync goes up, updating XOUT
# Simple RAM test and size check by writing to [1<<n] and see if [0] changes.
ld(1); C('RAM test and count')
label('.countMem0')
st([memSize], Y)
ld(255)
xora([Y,0])
st([Y,0]) # Test if we can change and read back ok
st([0]) # Preserve (inverted) memory value in [0]
xora([Y,0])
bne(pc()) # Just hang here on apparent RAM failure
For tomorrows tinkering I've written a small Arduino utility... It takes control of the reset and clock lines and allows me to single step the Gigatron, whilst the remaining pins act as a crude logic analyser. After the mini-me had gone to bed I tested it and confirmed it captures the looping behavior I'd already observed by monitoring the ROM address lines.
So possible faults:
(1) Something wrong in the condition decoder logic
(2) Something wrong in the RAM interface
(3) Something wrong in the addressing mode decoder
My money is on #3 given the messyness of the assembly.... (I did suggest he lay it out in a grid on the breadboard, but of course he knows best...)
Wish us luck!
M.