The board itself is basically just 2 chips and some configuration jumpers. There's a 32k or larger (e)eprom or flash and a 16V8 GAL. I'm using a 128k Amic flash as it's easier re-programming. However changing the bottom (green) jumper to the right hand setting would allow a 28 pin 27C256 eprom to be used instead.
The board's been angled to march the keyboard slope, the end plate won't fit with the board in place, but that's not really an issue. If an MTX is broken enough to need the board, the case will be open anyway.
The top 3 jumpers are to the right in the photo indicating that all 3 system roms are to be supported on the board. The red jumper selects either the standard 8k rom, or an image with some basic diagnostics. You'll notice the empty socket, that's one of the 74xx157 ram multiplexers. With that pulled booting the system on the standard roms will produce the classic black screen and tone.
Booting from the alternate boot rom, even with the ram disabled, currently brings up this screen.
The ram test need some more work, possibly with an option to check the rom paging as well as the ram. But the screen and keyboard handling system is working.
To show there's no cheating you can see the motherboard in the photo with empty multiplexer and rom socket.
The last photo has the 74xx157 in the socket and show the MTX at ready, despite there being 3 empty sockets where the OS should be. Programming a Z80 to run with ROM only isn't as complicated as it might seem. There are enough registers available to make a lot of tasks doable.
With no ram you can't:
- call subroutines
push/pull temporary data
use interrupts
Code: Select all
LD IX,return ;or IY
JP subroutine
return:
Code: Select all
JP (IX) ;or JP (IY)
Conditional return isn't possible though that can be dealt with by having a conditional jump to the unconditional "return" instead.
The Z80's alternate register set are awkward to use as general registers as all 3 register pairs swap at the same time. Making it hard to change just 1 register or register pair. I've used more macro's instead to give 6 bytes of "ram" accessible to the A register. They generate the following code. The assembler will take a number 0-5 and convert that to BCDEH or L. So that the "ram" address can be defined as equates.
Code: Select all
; store macro
EXX
LD %1,A
EXX
;get macro
EXX
LD A,%1
EXX
Basically the test rom is written as if it was an 8080 with a 2 level stack and 6 bytes of ram. Restricted yes. but not too restricted.
*edited to correct typo