Z80 Single Board Computer

This is my first didactic 8bit – Z80 based computer.

I’ve made it because I was interested into homebrew a working computer from TTL chips since high-scool times. I was intrigued by the idea of better understanding of PC architecture and  I wish to learn programming with assembler language.

My project starts copying Grant Searle’s project: Grant’s 7 chip Z80 Computer

Original schematic by Grant Searle

Please note that I’ve changed the way of the UART/RS232 converter is wired. In fact I’ve lost a lot of time following Grant’s schematic: everything double cecked but no data received to the serial port… uhm… I’ve solved in this way:

No jumpers between DB9 connector pins or other RTS shit… just a simple straight RX-TX converter between 6850 UART and DB9 connector.

I’ve build it using point-to-point wire soldering on a veroboard prototyping board. At the moment it comunicate with me via a RS232 serial link.

The schematic is the same of the Searle’s website except I’ve modified the clock source and the init.asm code that drive the 68B50 ACIA.

I’m using a 1.8432Mhz crystal oscillator at first for cpu and ACIA then switched to drive the cpu via a 10.240Mhz crystal oscillator. The 1.8432Mhz crystall only drive the ACIA… setting the divider byte to 16 generates 115200bps.

I’m not using the RTS signal, in fact I’ve not wired it at all but RTS_HIGH and RTS_LOW values in int32.asm code must be changed to make the code working.

RTS_HIGH is D6h and equals binary 11010110b. Per MC6850’s datasheet at page 8, from left to right, one bit at a time:
1 – CR7 register, interupt enabled
1 – CR6 and
0 – CR5 this bit plus the past one selects RTS HIGH trasmitting interrupt disabled
1 – CR4 and
0 – CR3 and
1 – CR2 selects 8 bits + 1 stop bit
1 – CR1 and
0 – CR0 selects clock divider /64

if you wish 115200bps from 1.82Mhz crystal you’ll need 1.82/0.1152 = 16 then per datasheet CR1 must be 0 and CR0 must be 1
the new data for RTS_HIGH is then 11010101b = D5h
as you can see the difference between divider by 16 and 64 is just one bit. simply subtract one bit!
RTS_HIGH is D5h and RTS_low is 95h

Another problem is that the MC6850 is made to operate with MC68000 timings. It usualy don’t go in master reset mode specially if your Z80 clock is faster than it’s own clock.

I’ve “fixed” this by hot (with circuit powered) extracting the mc6850 from it’s socket and re inserting it applying then a reset via the reset circuit button.

I think that must be a better way… and there is! Joe Helmick contactem me some weeks ago, he told me that a strong pull-up resistor on /INT line solved the boot timing issue. He uses in his homebrew Z80 SCB a 1Kohm resistor. He also had made a very interesting implementation of “Conway the game of live” for his Z’ed. His homepage is here: https://weehourstechnology.com/2019/04/13/conways-game-of-life-on-a-z80/

Z80 SBC connections details

Z80 SBC solder side details

I’ve benchmarked it’s performance via the Mandelbrot fractal generator provided by the RC2014 project.

color_mandelbrot    mandelbrot

The RC2014 project, another Z80 experimental project, started like mine, copying the Searle’s project and improving it.

The results? At 1.832Mhz it took 46:52 Minutes to complete. At 10.240Mhz just 8:31 minutes

Here you can find the complete MS Basic language reference Microsoft_Basic_8086Xenix_Reference

And here the Nascom Basic NASCOM_Basic_Manual