Zalt - an alternative Z80 homebrew computer - Page 1
Forum section: electronics / projects

author: obiwanjacobi
author_rank: Super Contributor
timestamp: October 12, 2016, 10:22:12 am
content: I have just published the source files for my Zalt Z80 computer (here).It contains:- a vintage Z80 CPU but running at 20MHz- memory extension up to 1MB RAM (20 address lines)- ROMless design- modular stackable PCB design.- CPU Board contains the Z80, RAM and MMU- Decoder Board contains a CPLD (Altera Max II) that provides all needed control signals.- BusSpy Board with 8 TIL311 digits for debugging. Contains the PSoC.- PSoC5 (kit) used as System Controller- custom target for the z88dk C-compilerI havea blog that contain several posts about the Zalt project.EDIT: attached some schematics as pdf for easy viewing.

author: obiwanjacobi
author_rank: Super Contributor
timestamp: October 12, 2016, 12:22:44 pm
content: I used WinCUPL (atmel).https://github.com/obiwanjacobi/Zalt/blob/master/BusSpy%20Board/WinCUPL/BusSpyDecoder.pldI had to run the editor on an old XP machine because it crashes on Windows 8.1 - even when trying out all kinds of compatibility settings...

author: bigsky
author_rank: Regular Contributor
timestamp: October 14, 2016, 05:00:14 pm
content: Quote from: obiwanjacobi on October 12, 2016, 10:22:12 amIf it was really vintage (like me) it would run at 2.5MHz !

author: Len
author_rank: Frequent Contributor
timestamp: October 14, 2016, 10:03:07 pm
content: Quote from: obiwanjacobi on October 12, 2016, 10:22:12 amDoes ROMless mean that every time you turn it on you have to toggle in the boot routine via front panel switches?QuoteWhat's the relative performance of that system controller compared to the main CPU?

author: Andy Watson
author_rank: Super Contributor
timestamp: October 14, 2016, 10:24:00 pm
content: Quote from: bigsky on October 14, 2016, 05:00:14 pmOh please! 2.5MHz ? were you over-clocking it?I'm considering resurrecting my S100 bus "system". I think the processor maxed-out at 2MHz. The problem I have is what to do about the peripherals. Seems like cheating to interface its 8 bit keyboard port with PIC16Fxxxx and USB.And what to do about its tape interface? Another PIC reading a 16GB memory stick into 9600 baud?Ah! The memories. Like the OP's point-to-point wiring, nice, really nice - until you have to change the logic

author: Andy Watson
author_rank: Super Contributor
timestamp: October 15, 2016, 12:24:08 am
content: Quote from: wilfred on October 14, 2016, 11:03:33 pmThat is exactly my dilemma. To make my Z80 work again I will need to surround it with modern chipery that is, more often then not, an order of magnitude more "powerful". It seems like cheating because I remember spending far too much time chasing down runt pulses, race conditions and all those "marginal" TTL conditions that occured at those giddy high frequencies above a mega-hertz. Sheeeehs! The youth of today! They've no idea how tricky it used to beI think you're right, it was 2400 baud maximum on tape. Damn it, my biological memory's losing bits!

author: obiwanjacobi
author_rank: Super Contributor
timestamp: October 15, 2016, 05:58:03 am
content: Well, I only wanted to use a Z80. After that anything is game. Mainly I selected my parts based on price. I also wanted to learn new things, like (win)CUPL, VHDL (Quartus) and the PSoC5. At times a bit frustrating having to lookup the syntax for the new languages, but I got it to work and that is a wonderful feeling.Quote from: Len on October 14, 2016, 10:03:07 pmIn a sense, yes. You have to up-load the program from the PC via the System Controller into the Z80's memory.At startup the System Controller holds the Z80 in RESET.Quote from: Len on October 14, 2016, 10:03:07 pmNot sure yet. Initially I thought that I would be fast enough (and then some). But I had to insert a WAIT state in the IO-logic of the System Controller in order to have it correctly respond to the In/Out instructions for the console (which it forwards to/from the PC) at higher clock rates (10MHz). I think I never got it to work properly at 20MHz. I definitely have some more research to do there.

author: C
author_rank: Super Contributor
timestamp: October 15, 2016, 06:44:03 am
content: You might want to think of using your Z80 Simulator as a dissembler for Z80 code.If you are doing Z80 instructions correctly, would be very hard to hide some code. Your Z80 Simulator would know all and see all. Just need to log information to disk.some programs relocate code. seen part of an instruction used as an instruction.A good one is a sub that pops call return address, uses return as data pointer then pushes new return address on stack.Your Z80 Simulator should catch all fun & games.

author: obiwanjacobi
author_rank: Super Contributor
timestamp: October 15, 2016, 06:57:13 am
content: I think the problem is in the PSoC, not in the Z80...?

author: C
author_rank: Super Contributor
timestamp: October 15, 2016, 09:52:05 am
content: QuoteBack in the day it was hard to get a Z80 up to it's max speed with out wait states. When things got close to time limits, you had a choice of adding a wait state or slowing Z80 clock speed some. Slowing the clock speed some could make a Z80 faster over all.Sounds like you need to compute some timings for Z80 and PSOC or look at system with a scope.Nothing is harder to find then when you have some signal timing right on the edge where it works most of time but fails at times. Very easy to get just to close to the edge of some signal time in a memory or io cycle. Note that when you change from 10Mhz to 20Mhz how the time for Z80 signals change. You have a lot of devices in address buss. Address buss could get stable after MREQ for example. Note also that the PSOC could be in a different part of it's clock cycle with respect to Z80. Do to the two clocks changing, you could have it works and later it fails.This assumes that the two clocks are not generated from same source.

author: newbrain
author_rank: Super Contributor
timestamp: October 15, 2016, 10:25:05 am
content: This post is just to thank Obiwanjacobi for making this great stuff available!I'm moving my first steps with the PSoC, so it will take some time I go round to implementing my 6809 idea.Zalt will be a good base to start, even if I might go for a simpler architecture, at least initially.

author: obiwanjacobi
author_rank: Super Contributor
timestamp: October 15, 2016, 12:17:45 pm
content: Quote from: newbrain on October 15, 2016, 10:25:05 amThanks. Be warned though, I am but a hobbyist and this was my first (real) PSoC project. So don't take this as a best practice...Quote from: C on October 15, 2016, 09:52:05 amYes, correct. I need to do a deep analysis of what is going on at higher speeds. I have been just too lazy to do it.

author: newbrain
author_rank: Super Contributor
timestamp: October 16, 2016, 01:53:07 pm
content: One (half silly) question:I'm going through your PSoC creator project, and noticed that you are using P0 pins 2, 3, 4, P3 pin 2, and P15 pin 4.I'm I right in thinking you removed the 1µF caps on those pins (or the 0R resistor on P15.4)?I find it hard to believe that the data and address bus would work correctly at a reasonable speed with that much capacitive load!

author: obiwanjacobi
author_rank: Super Contributor
timestamp: October 16, 2016, 02:18:35 pm
content: You are correct. I lifted (tombstoned) all the caps (only) on those pins.I probably should document that somewhere...(...just did, note that I just upgraded to Creator 4.0 - not sure if that matters)

author: newbrain
author_rank: Super Contributor
timestamp: October 16, 2016, 03:18:52 pm
content: Quote from: obiwanjacobi on October 16, 2016, 02:18:35 pmThanks! I expected as much.No problems with PSoC creator 4.0.

author: C
author_rank: Super Contributor
timestamp: October 22, 2016, 09:37:05 pm
content: For ports or interconnects you might want to look at anintel m8212 interfacing chipNo longer produced but the logic is the basics used for a good input or output port.As most IC's was created to remove need to create from many parts.A bunch of these blocks is in the 8255.

author: Doctorandus_P
author_rank: Super Contributor
timestamp: October 23, 2016, 10:00:54 pm
content: Don't use the yellow wires!Using laquered "enamel" / vero wire is much easier for prototypes.

author: obiwanjacobi
author_rank: Super Contributor
timestamp: October 24, 2016, 05:16:46 am
content: This is what I had (had bought it on eBay) and it worked very nice for me. I can strip it with my thumb nail and I can fit 3 wires into one hole. It just doesn't take a lot of current. I had a considerable voltage drop on the TIL311's so I had to route another voltage rail with thicker wire. Other than that, it does the job.

author: obiwanjacobi
author_rank: Super Contributor
timestamp: January 25, 2017, 11:06:34 am
content: Now working on implementing vectored-interrupts,debugging supportand accessingvirtual devices over usb.For those that want to know...

author: CJay
author_rank: Super Contributor
timestamp: January 25, 2017, 02:56:39 pm
content: Quote from: Andy Watson on October 14, 2016, 10:24:00 pmI feel the same way, 'vintage' or 'retro' systems using a single old CPU to connect to a pile of chips that come from companies that didn't even exist at the time the CPU was in production, it's not exactly difficult to interface an XT or even AT keyboard.However, a 16GB memory stick and a PIC is an acceptable cheat I feel, as long as you use the PIC to play back and record the original tones from audio files on the stick.

author: james_s
author_rank: Super Contributor
timestamp: January 27, 2017, 05:07:32 am
content: If you want some other retro SBC projects Grant has some interesting designs:http://searle.hostei.com/grant/I've built all the variations of the Multicomp on the small FPGA board like he uses but I've been tempted to build one of the systems with real hardware. I have a Wyse 60 CRT terminal that goes great with these.

author: obiwanjacobi
author_rank: Super Contributor
timestamp: January 27, 2017, 06:45:29 am
content: I've been tempted to build my own CPU....Go for it!