Wow! What an awesome month July has been. The whole Retro Challenge thing has been great, and despite moments of stress or despair, I have thoroughly enjoyed taking part and seeing what everyone else has been up to. Before I sum up my project, I should make a few honourable mentions.
Retro Challenge – A huge thanks to Mark and Wgoodf do a great job in hosting this twice a year. Keeping everyone updated via Twitter has worked really well. Cheers guys!
Grant Searle is responsible for the general Z80 design I used and also converted MS BASIC from the Nascom to run on this. Really, this project is a test of my understanding of Grants work and seeing how far I can take things.
Nottingham Hackspace has an amazing “parts bin” that included the LEDs, Veroboard, case, some of the logic chips and the RAM I used.
OSHPark did a great job (for a very good price!) on the PCBs – even if the postal system did keep me on the edge of my seat for a bit!
Chris Gammell introductions to KiCad PCB design videos were critical in guiding me through the various stages of board design.
Rodney Zaks book Programming the Z80 has been like a bible for me. Combined with a few dozen other resources of Z80 info on line I’ve been able to at least get the basics assembly language programming.
CLRHome is a great online Z80 IDE that can compile assembly language in a variety of output formats including for the ZX Spectrum. I doubt I could have managed this in notepad!
All of the other Retro Challenge entrants deserve a mention too, but there’s a few that really caught my eye and taught me stuff about their particular approach to RC2014, such as Wgoodf – Turtles all the way down, Ians restoration of Northstar Horizon, Tezzas restoration and programming of Challenger 4P, John finishing work on Fahrfall
I have shared the PCB design files on OSHPark, so if you want to build your own Z80 computer but don’t want to get involved in the PCB design side, you just need to click Add To Cart and the boards will pop through your letterbox soon. I think all the component info and other details you need are there, but if you do decide to build your own, please let me know. I’d love to see other people using the RC2014!
I cannot get my head around Github, so, for now, the design files and source code are not up there. If I can get Github to do what I expect it to do any time soon I’ll upload the files. In the mean time though, I am going to print the schematics, BOMs and PCB layouts as pdf files for those of you that want to take a look. Feel free to drop me a line if you want the actual KiCad files or if there’s anything I can help you with.
As for the Z80 assembler code, here’s an abridged version (The full ASCII stuff was posted here a couple of weeks ago, and makes for a very long tedious lising!). As I have said before, I am not a programmer, so I know that this is not pretty code. It is not efficient code. It is not easy to read code. It does, however, do what I needed it to do, so that’s fine by me :-)
#define DECODED $9000 #define DEC2 $9001 #define DEC3 $9002 #define DEC4 $9003 #define DEC5 $9004 #define WRKSPC $8045 .org $0000 NOP NOP di ;disable intrupts. NOP NOP NOP ld hl,WRKSPC ld sp,hl ;set stack pointer to 0x8045 ;clear led matrix ld a,255 out (0),a ld a,0 out (1),a out (2),a out (3),a out (4),a out (5),a ld a,49 out (129),a ;Fill display memory - 1st character ld b,0 ld c,8 ld ix,STRING ld a,(ix+0) sub 32 ld hl,0 ld l,a add hl,hl ;2 x string(b) add hl,hl ;4 x string(b) add hl,hl ;8 x string(b) ld de,ASCII add hl,de ; hl now points to ASCII +( 8 x (STRING+b)) ld de,DECODED Loops80: ld a,(hl) ;load A with line from ASCII ld (de),a ;DECODED now contains line of stuff inc de inc de inc de inc de inc de ;added 5 to DECODED address inc hl ;increment to next line of ASCII dec c jp nz,Loops80 ; repeat for next 7 lines ;This bit of code is copied & pasted 5 times for each character, but with an incrementing "ld a,(ix+0) and the loops80: For brevity I've omitted them here ;5th character ld c,8 ld ix,STRING ld a,(ix+4) sub 32 ld hl,0 ld l,a add hl,hl ;2 x string(b) add hl,hl ;4 x string(b) add hl,hl ;8 x string(b) ld de,ASCII add hl,de ; hl now points to ASCII + 8 x (STRING+b) ld de,DEC5 Loops84: ld a,(hl) ld (de),a ;decoded now contains line of stuff inc de inc de inc de inc de inc de ;added 5 to decode address inc hl dec c jp nz,Loops84 ;Main Loop START: ld hl,DECODED ld a,127 ;start x with $01111111 ld b,8 ROWLOOP: out (0),a ld c,5 COLLOOP: ld d,(hl) out (c),d inc hl dec c jp nz,COLLOOP ;repeat this loop 5 times call DELAY rrca ;move to next row <<10111111<<<11011111<<etc dec b jp nz,ROWLOOP ;repeat this loop 8 times jp START DELAY: push hl ;save hl and af registers push af ld hl,1000 DELLOOP: dec l jp nz,DELLOOP ;countdown l from 255 to 0 dec h jp nz,DELLOOP ;countdown h from 16 to 0 ;clear led matrix ld a,255 out (0),a ld a,0 out (1),a out (2),a out (3),a out (4),a out (5),a pop af ;restore hl and af registers pop hl ret STRING: .db "SOwen" ;this is the text to be displayed ASCII: ;these ascii characters were taken from ZX Spectrum ROM ; $20 - Character: ' ' CHR$(32) .defb %00000000 .defb %00000000 ;See previous post for full ascii listing
Thanks to everyone that has been keeping up with this project and encouraging me along the way. There’s still a lot that I want to do with the RC2014 computer, but I’m sure a lot of that can wait until the Winter Challenge!