Wiring a Z80 to Arduino...

D0..D7 is the Z80 data bus, just as A0..A15 is the address bus

I think it is the thought of wiring all that lot up more than anything else turned me on to microcontrollers!
My FYP was a 6800 controlled rover, and I damn near sprained my wrist wire-wrapping it.

I don't get the D0-7

0..D7 is the Z80 data bus, just as A0..A15 is the address bus.

Doh, I must have written that before my first cup of coffee.

All the data lines should show 0v I would think, if that's not the case then the chip must be stuffed.


Rob

This project sounds prime for an FPGA

That would be cheating

Hello !
Sorry for the long delay (delayWeeks(), a new Arduino function... :)), but
I was waiting for my Z80 - and other electronic stuff - from Jameco (which costed me 44 € for shipping PLUS
44 € for customs... ouch... never again !), and then I became father for the second time... So I'm just beginning
to have a little spare time for me again, before going back to work tomorrow (ouch again).
While waiting for the Z80, I made some tests with a 6502, and it worked perfectly. So, I've done the same tests
with the new Z80, and it works great.

  • I've bought a 1Mhz oscillator, but it's too fast for the Arduino to keep up the pace, even with a basic test.
    So I'm still using the Arduino as the source of CLK.
  • The Arduino plays the role of an memory simulator (using the Arduino RAM for the Z80). For the time being,
    I write my Z80 code and compile it on PC, then insert it into a byte array in the Arduino code.
    (eg: char bytes[]={0x3E,0x20,0xD3,0,0x3C,0xC3,2,0};). Every time the Z80 requests a byte from memory, it is taken
    from this array. Thank you Rob for the suggestion.
  • It also serves as an I/O IC simulator : every time the Z80 outs a byte to 0, the Arduino sends it
    back to the PC via Serial and then I can display it on my PC screen. I will use the same mechanism, in
    the opposite direction, to provide a virtual keyboard to my Z80 computer.

Things I'd like to do now:

  • use a real memory instead of the Arduino. Since I don't have an EEPROM programmer, I'm trying to use a NVRAM
    but for now, it doesn't work (whenever I reset my circuit, some bytes - sometimes a lot- from the NVRAM get corrupted, don't know
    why. Maybe a write occurs during the RESET with the WriteEnabled pin unstable ?). When it will work, I will set up a assembly chain,
    so that I can write code on my pc, then assemble and download it into the NVRAM, with some kind of bootloader at the start of the
    NVRAM (the Arduino will "listen" to IORQ queries on address X, and provide the data to the bootloader so it can write it into RAM - don't
    know if I'm clear !?)
  • use latches to provide more than 64 kbytes of memory (switching banks)
  • connect a parallel 40x2 LCD display directly to the Z80, so it can output text by itself
  • build or connect some kind of keyboard.
  • connect some kind of mass storage. I've only a few ideas right now, like using the SPI interface of an SD-card.
  • connect it to a VGA monitor. The tricky part for me, right now.
    then...
  • write an O/S (multitask would be great, but is it possible without hardware NMI ?) and maybe a compiler before (or use some kind of C compiler for Z80,
    like SDCC)
  • make it multi-processor
  • etc, etc...

Well, that's a lot to do ! It will eventually require a few years...
Thank you again for your advices and help !

cr0sh : sorry, I did'nt have enough time to explain why I'm doing this.

  • first, I didn't know you could still find DIP40 Z80 (I knew of the Rabbit one, but where's the fun ?)
  • I'm not interested in repairing it to have it work (I've had a 6128 CPC Amstrad, in the 80's, and emulators are enough for me)
  • it's really for the sake of the educational value : I've always wanted to design and build my own computer,
    but I work in the software businness, which is a really separate world (when you don't work with embedded devices).
  • I was sure the Amstrad was in bad condition. When people sell you this kind of stuff, at a very low price, and without
    the power cord (because they "could'nt find it"), 99 % of the time it's because it's not working anymore.

Boz

OK I know this thread is as old as my granddad.

If you're still there Boz, did you do any more with this?


Rob

Really enjoyed reading this thread and remembered having some old books lurking about some where.

graynomad said "I had a Microprofessor development board once"

Me too, left it at the office, went on annual leave (late 1983 iirc?... shit, exactly 30 years ago...), and some bar-steward stole it. I was not best pleased.....

Hi, I still have mine...

Tom... :slight_smile:

I still have mine...

I bet you don't use it much :slight_smile:


Rob

I bet you don't use it much smiley

No not much. lol.

Tom... :slight_smile:

Z80s as microcontrollers now exist, if that matters to you. Zilog makes "eZ80", Z8 "Neo", and "Z16" (16 bit architecture) as well as 8051 microcontrollers. You may be able to sample them. They also provide a free compiler and a very cheap programmer.

http://www.digikey.com/product-search/en/integrated-circuits-ics/embedded-microcontrollers/2556109?k=ez80

Compiler/IDE: Search for "ZDS II – eZ80Acclaim! version 5.2.1 with RZK and TCP/IP Object Code" on Google (it's at the Zilog Store but there is no direct link).

I was able to get simple projects running with the Z8 Encore, eZ80, and the Z16 microcontrollers using the linked programmer and the free software.

Hi bozgrul35 ,
The Z80 I remember that, did a lot of work on that, in fact learnt most of my stuff on it back in the 80's.
Take a look here: http://melsaunders.x10.bz/

Regards

Mel.

Love that stuff Mel, do you still use it?

Last I looked (maybe a year ago) you could still buy all the Z80 chips, SIO, PIO, CTC, etc etc. Over that period I have designed several modern boards with LPCs/SAMs etc but they all get too complicated for a one-man band to develop and produce in a reasonable time frame, and of course they are out of date two weeks later and also there are so many great 32-bit boards around now for about $1.50 I see little point in producing yet another one.

So, maybe the answer is to go retro, after all there won't be any competition :slight_smile:

A Z80 board with an AVR co-processor that acts as an EPROM emulator would be a simple and fun project, but the question is what the heck would you do with it? Once you get it working and flashing a few LEDs what's next?

If I could think of an answer it might be worth doing.

@Joe, that $29 dev kit is "Z8 Encore! XP F08xA Series Dev Kit" but lower down it also says "For Use With/Related Products Z8 Encore!®, Z8 Encore! XP®, eZ80Acclaim!®, ZNEO™ Dev Boards" so I guess that's the compiler/assembler one could use for the Z80.

Is that correct?

So for the Z80 you would not use the hardware in that kit, just the IDE/compiler?


Rob

Interesting using C on a Z80, twas all ASM in my Z80 days.

So you are using the flash-based units. If one was to go retro and use an standard Z80 you'd ditch the hardware and use the compiler/IDE to get a HEX file, then get that into an EPROM.

Why did you do these? Was there a need to evaluate the Zilog products? Miss the old days?


Rob

Graynomad:
Interesting using C on a Z80, twas all ASM in my Z80 days.

So you are using the flash-based units. If one was to go retro and use an standard Z80 you'd ditch the hardware and use the compiler/IDE to get a HEX file, then get that into an EPROM.

Why did you do these? Was there a need to evaluate the Zilog products? Miss the old days?


Rob

No need. I just wanted a new toy to play with. It doesn't matter if it isn't as shiny as some of the others. I have no anticipated applications for it and as far as 8-bits go. I do feel a lot more familiar with the AVR architecture.

Oh yes, I know that this post it's very old .... as I am.

At the speed of 1 or 2 MHz of clock for the CPU Z80, Arduino could became a kind of EPROM because when the CPU place the address, Arduino could put the "CODE" of this address lines and then wait for the Fetch. After this, Arduino can wait the next address, and behave as before.
It's a non sense task, but it can be interesting, because you could write a small program code in Arduino.

A strange idea.

As long as this thread has been resurrected from the dead, I'll point out this recent project that implements a Z80 system in 4 chips - the Z80 itself, a 64k RAM chip, an ATmega32a running Arduino SW that does the boot processing and all the I/O, and a 7400 as some higher-speed glue logic.
The ATmega32a is a 40-pin DIP, so it has enough signals to fully control nearly all of the Z80 signals, and can DMA to enough of the memory to load a bootloader, which can then load other SW, including CP/M.
It's got a bunch of clever design elements; IO reads and writes put the Z80 into wait states and wake up the AVR, which manipulates the bus and then lets the Z80 run again...

If you want to interface directly to an old microprocessor then the Parallel Propeller chip is a much
closer fit to what's needed, as it has lots of PLLs to generate clock signals, is fast enough, has cycle
perfect timing and 8 cores to parcel the work out to - but a standard Arduino with 8-bit processor
is going to struggle. You would need to underclock the Z80 by a fair bit I suspect, send it clock edges and
check for Z80 bus control pin changes and service then (memory read/write, refresh, I/O, halt), emulating
the RAM/ROM for the thing. To my mind that requires about 36 pins I think, so Uno and so on are out
without some clever interfacing circuitry for the busses