Close
0%
0%

Z80-MBC2: a 4 ICs homebrew Z80 computer

Homemade 8MHz Z80 SBC, 128kB banked RAM, RTC, SD (HD emulation), Basic and Forth interpreters, CP/M 2.2 and 3, cross Assembler and C (SDCC)

Similar projects worth following
The Z80-MBC2 is an easy to build Z80 SBC (Single Board Computer).It is the "evolution" of the Z80-MBC (https://hackaday.io/project/19000), with a SD as "disk emulator" and with a 128KB banked RAM for CP/M 3 (but it can run CP/M 2.2, QP/M 2.71, UCSD Pascal and Collapse OS too).

It has an optional on board 16x GPIO expander, and uses common cheap add-on modules for the SD and the RTC options. It has an "Arduino heart" using an Atmega32A as EEPROM and "universal" I/O emulator (so a "legacy" EPROM programmer is not needed).

It is a complete development "ecosystem", and using the iLoad boot mode it is possible cross-compile, load and execute on the target an Assembler or C program (using the SDCC compiler) with a single command (like in the Arduino IDE).





* * HARDWARE OVERVIEW * *

The needed ICs for the "base system" are:

  • Z80 CPU CMOS (Z84C00) 8Mhz or greater
  • Atmega32A
  • TC551001-70 (128kB RAM)
  • 74HC00

If you want the 16x GPIO expansion (GPE option) add a MCP23017 too.

The schematic and the BOM are attached in the Files section. The MCU Atmega32A is used as universal I/O subsystem, as Eeprom, and as reset and 4/8MHz clock generator for the Z80 CPU.
Inside the Atmega32A it is flashed an Arduino bootloader taken from here, and it is possible to use the Board Manager of the Arduino IDE to "import" it.

Flash the Arduino bootloader at first (with the method you prefer), next you can upload the IOS "sketch" (the I/O Subsystem that interacts with the Z80 bus and "virtualizes" the EEPROM and all the peripherals seen by the Z80 CPU) using Arduino IDE.

You can use the on board ICSP port J3 (also called ISP port) to write the bootloader, but remember to disconnect any other connector when using it. Also both SD and RTC modules (if present) must be removed from the board when the ICSP port is in use.

As clock source for the Z80 CPU it is used the 16MHz Atmega32A oscillator, so the "external 16MHZ osc." bootloader variant must be chosen when flashing the bootloader from the Arduino IDE!.

The 74HC00 is used as RS flipflop to stop the Z80 CPU during I/O operation, giving the needed time to the Atmega32A to interact with the Z80 bus, and as part of the MMU.

Note that only the CMOS version of the Z80 CPU can be used here. This because only CMOS version, under given condition that are respected in this schematic, has logical levels compatibles with Atmega32A and 74HC00.


NOTES ABOUT THE COMPONENTS:

You should use a  Z80 CMOS speed grade of at least 8MHz for full speed, but setting the clock speed at 4MHz you can use a 4MHz Z80 CMOS version too (or you can try to overclock it at 8MHz...). The 74HC00 can be substituted with a 74HCT00 if you already have one. The RAM chip TC551001-70 can be substituted with any suitable 128kB SRAM).

Please note that the USER led  * must * be blue or white (or pink... I've some pink leds that seems to have a Vf like blue one. May be I'll do a board with them...) just to be sure that V(forward) is >= 2.7V (otherwise the USER key may not work as expected).

The J4 connector (AUX_P) is not currently supported and is not populated by default.

The three solder jumpers (SJ1-3) on the bottom side are not currently supported and must  be left opened (as stated in the schematic).


THE SERIAL PORT:

The  SERIAL port (J2, see schematic) can be connected with a TTL-RS232 adapter, or with a serial-USB adapter.
I've used a serial-USB adapter that acts also as power source for the Z80-MBC, and has the DTR signal for the "autoreset" driven from the Arduino IDE. For a terminal that has a serial TTL port no adapter is needed.

Of course to upload a "sketch" from Arduino IDE you need to use a serial-USB adapter connected to the SERIAL port.

Note that the RTS and CTS pins of the SERIAL port are not currently supported and must be left not connected (as the NC pin!).

The 3V3 pin of the serial-USB adapter must be left disconnected.

You should use those Serial-USB adapters that have the DTR pin on the connector. It is suggested to have also the CTS/RTS signals available for future upgrades:


THE OPTIONAL RTC MODULE:

The RTC is a common module based on a DS3231  RTC  like this one:

This cheap modules have a trickle charging circuit that may cause the "explosion" of the battery if you use a standard CR2032 cell. More, it can damage also a rechargeable LIR2032 cell. For more information and how to fix it see here.

The RTC module has it's own pullup resistors on SDA and SCL. Because the value is 4k7 (the same value used inside the Z80-MBC2 board), the resulting value will be:

4k7 // 4k7 = 2k3

Because this value is fine there is no need to take away the pullup on the RTC module....

Read more »

SD-S220718-R240620-v1.zip

The content of the microSD needed to run CP/M 2.2, CP/M 3.0, QP/M 2.71, UCSD Pascal and Collapse OS with IOS S220718-R240620. Adds Collapse OS.

Zip Archive - 3.69 MB - 06/25/2020 at 10:41

Download

S220718-R240620_IOS-Z80-MBC2.zip

The sketch for the IOS (with the needed libraries). Unzip into a folder and open the .ino file (with Arduino IDE). IOS must be uploaded into the Atmega32A flash. Adds support for Collapse OS.

Zip Archive - 37.34 kB - 06/25/2020 at 10:40

Download

S220718-R240620_IOS-Z80-MBC2.ino.with_bootloader_atmega32_16000000L.hex

The sketch for the IOS in executable format (.HEX) with the bootloader. This executable file is intended for use with a programmer as the Atmel Ice or AVRISPmkII or others (Fuse bits: High Byte 0xD6, Low Byte 0xAF, Lock Byte 0xCF)

x-hex - 55.76 kB - 06/25/2020 at 10:39

Download

STARTREKV2.BAS

The famous game Super Startrek kindly debugged by a RetroBrew Computer Forum user. Play with Caps-Lock activated! Now the animation works...

bas - 20.18 kB - 08/07/2018 at 16:32

Download

TREKINST.BAS

Instructions for STARTREKV2.BAS

bas - 6.80 kB - 08/04/2018 at 21:48

Download

View all 11 files

  • 1 × See the file "A040618 BOM v2.ods" in the FILES section.

  • Collapse OS on the Z80-MBC2!

    Just4Fun06/25/2020 at 10:54 0 comments

    Collapse OS is now supported on the Z80-MBC2:


    Update both the IOS firmware and the SD image.
    For more info the Collapse OS site is here.

  • UCSD Pascal for the Z80-MBC2!

    Just4Fun09/01/2019 at 15:45 3 comments

    Thanks to Michel Bernard (a member of the Z80-MBC2 User Group on FB) who did the porting, now UCSD Pascal is running on the Z80-MBC2!

    Michel Bernard originally used the trick to create a custom autoboot.bin file to be used with the "Autoboot" boot selection to load the OS.

    Because this porting is so cool, I've done a new IOS version and a new SD image to support UCSD Pascal in the same way as the others previous OS, adding a new "Disk Set" selection:


    To run UCSD Pascal you just need to update the new IOS and the new SD image (in the Files section) and select it from the usual "Select boot mode or system parameter" menu:



    In the new SD image there are two volumes (disks) SYS1: and SYS2:


    Here the execution of an example (SINE.CODE) already compiled on the SYS2: disk:


    In the folder "UCSD Pascal" inside the SD there are the original files and sources provided by Michel Bernard.
    A lot of documentation and books about UCSD Pascal can be found here.

  • uCom is out!

    Just4Fun05/29/2019 at 09:20 0 comments

    I've done a separate "project page" for uCom (RS232 add-on card for the Z80-MBC2) here.

    The uCom board, as the uTerm VT100 board, has a "transparent" USB-serial adapter connector, so you can upload firmware to the Z80-MBC2 (using Arduino IDE) or load an Intel-Hex file (with iLoad) or use XMODEM to exchange files with a PC (running a terminal emulator that supports XMODEM file transfer) while the uCom is in use.

    Both the "mixed" power supply scenarios (USB-serial adapter not powered from USB but Z80-MBC2 powered and vice-versa) are managed by the HW, so you don't need to worry about it.

    uCorm can be mounted horizontally or vertically to the Z80-MBC2.

    The 3D printed custom angled brackets .STL files are the same of the uTerm.






    Here connected with a "vintage" RS232 terminal (Ampex 210 relabeled Kyber):

  • FuzixOS preview: Unix for Z80!...

    Just4Fun05/21/2019 at 17:14 1 comment

    First test with FuzixOS on the Z80-MBC2 (many many thanks to Alan Cox...)!:

    Stay tuned...

  • uTerm is out!

    Just4Fun05/14/2019 at 07:40 0 comments

    I've done a separate "project page" for uTerm here.

    uTerm can be mounted horizontally or vertically to the Z80-MBC2.

    All the details including the 3D printed custom angled brackets .STL files are there.

    uTerm is a VT100 terminal with VGA out and  PS/2 keyboard with a power supply (for the Z80-MBC2 too). It has a "transparent" USB-TTL adapter connector, so you can upload firmware or load an Intel-Hex file (with iLoad) while the card is inserted. Both the "mixed" power supply scenarios (USB-TTL adapter not powered from USB but Z80-MBC2 powered and vice-versa) are managed. The video terminal is based on the ChibiTerm (https://hw-by-design.blogspot.com/2018/07/low-cost-vga-terminal-module-project.html).








  • uCom preview: a RS232 adapter for the Z80-MBC2...

    Just4Fun04/05/2019 at 17:00 0 comments

    Currently working on a RS232 add-on card for the Z80-MBC2.

    As the uTerm board, it has a power supply for the Z80-MBC2 and a "transparent" USB-TTL adapter connector, so you can upload firmware or load an Intel-Hex file (with iLoad) while the card is inserted. Both the "mixed" power supply scenarios (USB-TTL adapter not powered from USB but Z80-MBC2 powered and vice-versa) are managed.


    Here connected to an Ampex 210 terminal (sold and relabeled by Kyber):


    Stay tuned...

  • New IOS for XMODEM support

    Just4Fun03/10/2019 at 10:54 5 comments

    Because some people requested to use the XMODEM protocol to exchange files through the serial port, I've added the support for this protocol into CP/M 2.2 and CP/M 3 (banked only).

    XMODEM needs a full 8 bit binary data transfer, and this is not possible with the CON port (the CP/M port used for the console) with a "legacy" CP/M system installation because the CP/M Alteration Guide says to strip the eight parity bit when reading a byte from the console input.

    More, because the Z80-MBC2 uses a virtual serial port without handshaking there is also a timing problem when dealing with the 128 bytes packets used by the XMODEM protocol.

    So the support to the XMODEM protocol has requested changes in the IOS and  in the CP/M BIOS, and also in the Arduino core to extend the serial input buffer.

    Please note that with the new IOS the default speed of the serial port is now 115200 bps.

    To have the XMODEM support active, before the update of the new IOS firmware and the new SD image (see in the Files section),  you have to manually create a new "board variant" in the Arduino IDE and then change the default Rx input buffer size to 128 bytes in the "core" of this new variant.

    If you aren't interested into the XMODEM support, you can simply update the IOS and the new SD image as usual  without the need to create the new board variant. In this case the XMODEM will not work in the receive direction, but only in the send direction (from the Z80-MBC2 to a PC with a terminal emulator).



    HOW MANUALLY CREATE A NEW BOARD VARIANT (LINUX)

    In the following I'll assume an Arduino IDE 1.8.5 installation on a linux host and the MightyCore ver. 1.0.8. Anyway I've tried to make the procedure enough general to be used for other versions too.

    The first thing is find the directory where the MightyCore is located.

    If you have installed Arduino IDE 1.8.5 and then installed the MighyCore with the Board Manager with the usual .json "pointer", the MightyCore is located in the "~/.arduino15/packages/MightyCore" directory:

    Now you must locate the "~/.arduino15/packages/MightyCore/hardware/avr/1.0.8/cores" directory (note that the "1.0.8" part of the directory name depends on the MightyCore version, and so can be a different number if you have a different version of the MighyCore):

    ... Read more »

  • uTerm preview: a VT100 terminal for the Z80-MBC2...

    Just4Fun12/28/2018 at 10:16 2 comments

    Currently working on a VT100 terminal with VGA out and  PS/2 keyboard with a power supply (for the Z80-MBC2 too). It has a "transparent" USB-TTL adapter connector, so you can upload firmware or load an Intel-Hex file (with iLoad) while the card is inserted. Both the "mixed" power supply scenarios (USB-TTL adapter not powered from USB but Z80-MBC2 powered and vice-versa) are managed. The video terminal is based on the ChibiTerm (https://hw-by-design.blogspot.com/2018/07/low-cost-vga-terminal-module-project.html).

    Stay tuned...


    Working on a new revision (A071218-R250119):


    Waiting the new PCB, I'm playing with the current PCB "patched" to perform like the new one.
    Here a session with Wordstar 4 configured to use all the 30 rows of uTerm:

    In the photo you can see that also the serial-USB adapter is attached to the uTerm using the "transparent" port. This allows to use two keyboards and two monitors in the "same" time (one keyb and monitor attached directly to the uTerm, and another keyb and monitor of the terminal emulator on a PC connected with the serial-USB). This allows also to use XMODEM (e.g. between the Z80-MBC2 and a PC) or to flash the Atmega firmware with the uTerm connected.

    Or you can use the monitor attached to the uTerm and the keyboard of the terminal emulator on a PC. This is exactly the "configuration" I used in the photo to make the test (as you can see, there isn't any keyb attached to the uTerm).


    Catchum demo with uTerm (a sort of Pacman...). Leaving the game alone, after a while the "demo mode" starts:

    Here last version assembled horizontally with the Z80-MBC2:


    Currently making custom 3D printed mounting brackets for a solid vertical assembling:

  • Overclocking the Z80-MBC2...

    Just4Fun11/02/2018 at 09:51 4 comments

    Because the Mighty Core gives the chance to choice a 20MHz bootloader, I've decided to try to "overclock" the Atmega32A using a 20MHz quartz:

    You don't need others HW changes, just use a 20MHz quartz instead of a 16MHz one. The Z80 clock speed will be at 10MHz.

    You have to select the "20MHz external" option in the "Toos" menu of Arduino IDE before flashing the 20MHz bootloader:


    Of course you need to load the sketch again (using the "20MHz external" option). IOS will display the new clock speed:


    Remember that using a 20MHz quartz you are out of the Atmega32a specifications (the Atmega32a is rated at 16MHz max.), so you are in a "grey area" where things "may works"...

  • CP/M 3 up and running on the Z80-MBC2!

    Just4Fun10/11/2018 at 06:58 0 comments

    With the latest IOS revision and the corresponding new SD image (see the Files section) there is one more option: the CP/M 3.0!

    With CP/M 3.0 it is possible use the 128KB banked RAM to have a wider user area (TPA) for programs and a more "evoluted" OS.


    TWO VERSIONS

    Just as example of how it is easy with CP/M 3.0 manage multiple configurations, I've done also a "non-banked" 64KB version. The switch from one version to the other can be done simply running a batch from the console itself.

    I've prepared two simple batch files to do that. From drive A: the command:

    submit sys64

    will set the 64KB "non-banked" version and then reboot the system.

    To activate again the 128KB "banked" version give the command (from drive A:):

    submit sys128

    NEW DISKDEFS FILE

    To use cpmtools or cpmtoolsGUI with the virtual disks of the CP/M 3.0 environment, you must update the DISKDEFS definition file (from the SD in the folder <SD>/cpmtools/) and use the "z80mbc2-cpm3" entry for all the 16 disks:

    Please note that for the CP/M 3.0 environment all the 16 virtual disks have the same structure and for this there is only one entry for all the CP/M 3.0 virtual disks.


    AUTOEXEC

    The AUTOEXEC switch for CP/M 3.0 works in a different way from the CP/M 2.2 and QP/M 2.71 implementations.

    Now there is a custom utility (AUTOEXEC) that checks the IOS flag and sets the exit code accordingly (using the BDOS function 108). This allow to use the CP/M 3.0 batch conditional execution (see the CP/M 3 Programmer Guide par. 1.6.3) to run any wanted command or program based on the status of the IOS AUTOEXEC flag.

    I've prepared an example using an other CP/M 3.0 feature, the "PROFILE.SUB" batch that is automatically executed at cold boot (if it exists). To activate it (in the drive A:) rename the file PROFILE.SU as PROFILE.SUB with the command:

    ren profile.sub=profile.su

    Now you can see how it works setting the AUTOEXEC flag on or off with the IOS "Select boot mode or system parameters" menu.

View all 13 project logs

Enjoy this project?

Share

Discussions

Sigmar Roßmann wrote 6 days ago point

Hello everybody,


can someone explain to me what in the Arduino * ino
the 

"void serialEvent ()
// Set INT_ to ACTIVE if there are received chars from serial to read and if the interrupt generation is enabled
{ if ((Serial.available ()) && Z80IntEnFlag) digitalWrite (INT_, LOW);
} "

Interupt on Z80 is triggered?

greeting

Sigmar

  Are you sure? yes | no

Just4Fun wrote 5 days ago point

As explained in the comment it triggers the INT line when a char is ready to be read by the Z80 CPU and the INT trigger flag is enabled in the IOS firmware.

This mode is used only by the stand-alone ROM Basic.

(Not sure to have understood the question...)

  Are you sure? yes | no

Sigmar Roßmann wrote a day ago point

Thanks that was exactly the right answer.

  Are you sure? yes | no

ermanno wrote 06/15/2020 at 20:12 point

just4fun you're right I confused it with the pinout of the bc 557 which is inverted.

  Are you sure? yes | no

ermanno wrote 06/15/2020 at 17:20 point

The transistors 2n2907 if inserted as in the serigraphy would have the collector connected to vcc, instead it is the emitter that must be connected to vcc, therefore the flat part of the transistor goes towards the Z80 and not towards the LEDs. However inserted in one way or another they work equally. How should these transistors be inserted ...

  Are you sure? yes | no

Just4Fun wrote 06/15/2020 at 17:38 point

  Are you sure? yes | no

Stephan Kraus wrote 04/12/2020 at 20:57 point

Hi!

Thanks for the great project!

I am wondering if there is the chance to add a second serial port to hook up a printer or paper tape reader?

Best regards

Stephan

  Are you sure? yes | no

Sebastiano Grimaldi wrote 03/29/2020 at 17:51 point

I've just checked the SD card board with an Arduino uno board. I've correctly write and read file in the SD. I understand that the SD card board is working! Thanks a lot to give me some idea for additional debug. 

  Are you sure? yes | no

Just4Fun wrote 03/29/2020 at 18:38 point

If you press and release the RESET key, D11 must do a single very fast blink (also if the SD module is not present) just before the IOS SD error is "printed" on the serial port. If you don't see it there must be an assembling error/fault.

  Are you sure? yes | no

Sebastiano Grimaldi wrote 03/31/2020 at 18:17 point

Thanks for the suggestion, I've fixed the problem. Now my MBC2 is perfectly running! Best regards, Sebastiano 

  Are you sure? yes | no

Sebastiano Grimaldi wrote 03/29/2020 at 13:43 point

Very compliment for this fantastic project!

I build MBC2 everything it's working fine except the SD card!

Using the lite IOS I run BASIC and FORTRAN then the system is working.

Loading on the ATMEGA32 the IOS with SD management I got the following error:

Z80-MBC2 - A040618
IOS - I/O Subsystem - S220718-R280819

IOS: Z80 clock set at 8MHz
IOS: Found RTC DS3231 Module (29/03/20 15:34:36)
IOS: RTC DS3231 temperature sensor: 19C
IOS: CP/M Autoexec is OFF

IOS: Select boot mode or system parameters:

 0: No change (3)
 1: Basic
 2: Forth
 3: Load OS from Disk Set 1
 4: Autoboot
 5: iLoad
 6: Change Z80 clock speed (->4MHz)
 7: Toggle CP/M Autoexec (->ON)
 8: Change Disk Set 1
 9: Change RTC time/date

Enter your choice >1  Ok

IOS: SD error 2 (NOT_READY on MOUNT operation)
IOS: Check SD and press a key to repeat

There is not any activity on the LED D11, I've cheched all the route trace, no error.

Any help, please?


  Are you sure? yes | no

Just4Fun wrote 03/29/2020 at 14:21 point

That error says that there isn't any SD card inserted into the SD module...

BTW: Are you sure to have inserted the SD card module correctly (as shown in the photos)?

  Are you sure? yes | no

Sebastiano Grimaldi wrote 03/29/2020 at 17:05 point

Thanks for fast response! The sd card is correctly installed with the proper contents as per your zip archive. Best regards, Sebastiano

  Are you sure? yes | no

m.uhlmann.zwickau wrote 06/10/2020 at 06:18 point

I have also this error some times. After reconnect the sd-card or the board it works.

  Are you sure? yes | no

mikeh32217 wrote 03/25/2020 at 07:02 point

Awesome project, great fun and perfect for the era of the shutin!

Thanks for the effort!

  Are you sure? yes | no

m.uhlmann.zwickau wrote 03/17/2020 at 17:39 point

Hallo, I want to build this item. At first I have ordered the PCBs (5 pc.) There are 4pc. left.

I have also ordered the IC´s. Let´s wait.

Michael

  Are you sure? yes | no

m.uhlmann.zwickau wrote 05/07/2020 at 06:56 point

The PCB´s from China don't arrive, so I bought an item from a tindie seller.

  Are you sure? yes | no

m.uhlmann.zwickau wrote 05/19/2020 at 15:28 point

Now I got all items and could build the computer. All is working!

  Are you sure? yes | no

Edgar Salgado wrote 06/09/2020 at 19:32 point

Hello! Any chance you are willing to sell me a spare PCB? :)

  Are you sure? yes | no

O.E wrote 02/16/2020 at 17:47 point

Hi,

After i setud circuit i connected to computer using FTDI programmer leds blinking correctly but terminal is not  open in computer when  pressing buttons.

  Are you sure? yes | no

Just4Fun wrote 02/17/2020 at 11:18 point

Hi,

have you set the sw terminal at 115200 8N1 (No HW handshaking)...? Are you sure to have connected RX/TX correctly...? An other "source" of common problems is a wrong fuse setting when flashing the bootloader first time...

  Are you sure? yes | no

wojtek.p wrote 01/13/2020 at 12:20 point

Hi,

Does anyone have 3D models (step format) for Z80-MBC2, uCom and UTerm? I want to design a 3D printing case and it would be helpful. If anyone has, please send to wojtek.p@onet.pl

Thanks

Wojtek

  Are you sure? yes | no

wenij wrote 01/12/2020 at 09:55 point

hi,

have any one knows how to build the Z80-MBC2_figforth130.asm source code?  which tools set to build?


thanks.

wenij

  Are you sure? yes | no

WestfW wrote 01/16/2020 at 23:41 point

For the MBC1, I used the TASM3.2 cross assembler for DOS/Win, which you can apparently download from: https://www.ticalc.org/archives/files/fileinfo/250/25051.html

  Are you sure? yes | no

Tony Nicholson wrote 10/12/2019 at 11:32 point

This is a fantastic little board.  I'm now starting to tinker with things a bit and I'll be attempting to combine the CP/M 3 bios modules with Simeon Cran's ZPR3 replacement BDOS routines (obtainable from the Tesseract RCPM+ archives - volume 93 at http://www.classiccmp.org/cpmarchives/cpm/mirrors/www.triton.vg/TesseractRCPM+Catalog.html#vol93 ).

Before doing this I thought I'd attempt to reconstruct the supplied CPM3-128.SYS system from sources and I'm not having much success - in particular with all the choices when running GENCPM.  Would you be able to share the build procedure and corresponding GENCPM.DAT file?  Thanks.

  Are you sure? yes | no

HerveGZ wrote 07/12/2019 at 17:08 point

Dear All

Thanks again for this wonderfull Z80 board. And sorry to start a question as beginner, but

Is there a link to a startup guide global of this board? (something detailled explain)

Even I use it yet, I  have some problems to understand the I2C (protocol I know):
In examples there are out 1,opcode and out 1, value in general is so. But as I want to add my own I2C systems (from Grove or Seeed firms) I do not understand the relation between those out 0,xxx and out 1,yyy and the I2C address (Each item has a unique one ) of my own components I2C.

Can someone thanks  to enligh me on I2C how to mbasic can i drive any component I2C added please?

Sincerely

Hervé

  Are you sure? yes | no

Just4Fun wrote 07/12/2019 at 17:31 point

Hi, opcodes are used to access to the virtual I/O devices. Read the comments in the .ino sketch about the virtual I/O engine to understand how they work (there are large comment parts in the code that are a sort of manual).

About  accessing your I2C device, this requires  changes in the FW. Some users in the FB users group have already done this to access an I2C LCD module.

You have to create new opcodes to access new I2C HW.

  Are you sure? yes | no

freefuel wrote 07/12/2019 at 07:46 point

I think the RTS and CTS labels are reversed on Serial header J2 on page 2 of 3 on the circuit diagram. the pins they are connected to on the AVR chip do not match. 

  Are you sure? yes | no

Just4Fun wrote 07/12/2019 at 17:34 point

RTS and CTS are connected to two GPIO. There is nothing to "match". More they are not currently supported.

  Are you sure? yes | no

freefuel wrote 07/12/2019 at 22:12 point

OK the documentation is confusing in it's current state.

  Are you sure? yes | no

freefuel wrote 07/12/2019 at 06:22 point

could PD2 pin 16 on the AVR be used to drive a latch for PC0, PC1 respectively pins 22 and 23 for the I2C interface to drive two additional SRAM address bits? I ask as I noted there is a pin compatible SRAM on digikey with a stated 4 Megabit/512K Byte capacity. (My other thought was to borrow a GPIO pin from the IO expander if you were only interested in warm booting between the banks.)   

  Are you sure? yes | no

Just4Fun wrote 07/12/2019 at 17:36 point

The bank switching HW is tailored to a 128KB SRAM.

  Are you sure? yes | no

freefuel wrote 07/12/2019 at 22:13 point

what harm would there be in wiring the currently unused GPIO to A17?

  Are you sure? yes | no

Adrian Wallaschek wrote 06/26/2019 at 00:50 point

Hi again, I have been hypnotizing the sheet for more than an hour now. Really? For the bootstrap the AVR serves as RAM? I guess the ce2 is used to shut up the SRAM, from then on, the AVR serves the reads. The bootstrap code works unrelated of the Z80s current PC: LD HL,something, then for each byte LD (HL),byte ; inc HL. There is no loop needed, just pump the bytes by repeating the last two. This will even work if the bootstrap target and the current PC overlap. Guys, I assume I guessed right +- some detail. This is really nice! From there on everything is IO and not memory. So my remaining question is: how do you terminate the data-provisioning on an IN-command? The WAIT triggers, the AVR puts the byte on the databus and resets the flipflop, the Z80 will read, but what makes the AVR then pull the D-bus on the AVR high? Is that hardcoded like several nop commands on the AVR and then pull high? assuming a nop is a single cycle and the relations of the frequencies are known. That easy?

Why am I asking: I try to do something like this with an Arduino-Mega, just with a bit more luxury. I thought to make the IN-command completely async, so the Arduino feeds a databus latch that is reset by a flipflop in reaction to IORQ going 1. But this turns the shield into a TTL-graveyard. If the nop-timing proves to be stable, it would easy my schema a lot.

For those interested: the Arduino Mega with its XMEM interface would offer real DMA. All I need now is a reliable IO-protocol.

Any confirmation to my guesses (I am too lazy to try to locate the right place in the code, to be honest ;-) shame on me) would be welcome.

  Are you sure? yes | no

Just4Fun wrote 07/12/2019 at 17:45 point

The Z80-AVR interaction schema uses a Wait-Bus_Hold sequence and was designed to be time-independent.

  Are you sure? yes | no

Adrian Wallaschek wrote 06/25/2019 at 23:22 point

I feel like a rookie. I do not understand the world anymore. First I was so stupid to look into the MBC schema instead of the MBC2. (Thanks to the one who pointed me to the right direction!) Now I believe I have the right schema, but I have no clue how this could work.

Why? For the MBC2 the only direct address-line connected to the AVR is A0. Now in order to boot the sketch would have to copy the bootstrap into the RAM before resetting the Z80, right? The MBC had more lines connected and that I understood, but with one address-line? Does the RAM have a boot-functionality so content can be clocked in just based on A0?  

So how does the bootstrap get into the RAM? Or is the sketch A040618 missing some connections? Honestly I believe my brain does. I do understand the wait logic and the GPIO is pretty straightforward, but how the bootstrap would work or how the bankswitching works escapes me ... completely. I feel old and tired.

Is there a kind of documentation with an explanation how these parts work? Or could anybody hint me where to find the related code?

Thanks in advance.

  Are you sure? yes | no

WestfW wrote 07/19/2019 at 07:57 point

The way that IO worked on the V1 board is that accesses to IO space would trigger the flipflop that would put the Z80 into "wait" state, essentially halting it.  Then the AVR would figure out what was going on, put stuff on or take stuff off of the bus, and un-flip the flipflop, allowing the Z80 instruction to continue.  Essentially, a really SLOW memory access, with the stuff that normally happens in memory or IO hardware implemented in AVR firmware instead.   I haven't looked at the V2 at all (I ad assumed it worked the same, until your message), but there's no reason that the same scheme couldn't work for Z80 memory accesses as well.  The V1 seems simpler to me - it's easier (?) to make the RAM access be full-speed, but it takes more pins.

  Are you sure? yes | no

Jim Bailey wrote 06/21/2019 at 07:02 point

Is it possible to build this system with a z80 rated for and running at 20mhz?

  Are you sure? yes | no

Just4Fun wrote 06/22/2019 at 17:25 point

The Z80 clock is generated by the Atmega32 and can't be greater than the half of the Atmega clock.

  Are you sure? yes | no

freefuel wrote 07/12/2019 at 06:06 point

so you could do 10MHz if you installed a 20MHz crystal on the AVR?

  Are you sure? yes | no

psmart wrote 06/18/2019 at 22:26 point

Hi,

Please ignore below, the fuses were set incorrectly, CKSEL3:0 were set as 0001!!

  Are you sure? yes | no

psmart wrote 06/18/2019 at 21:48 point

Hi,

Firstly, excellent project Just4Fun, a hark back to hard but fun computer times, nice professional work, thank-you.

Unfortunately Im having issues, I took to building two boards and both exhibit an identical issue so I was wondering if you have come across it. They are both programmed with the HEX file on your file list.

Basically, the IOS light blinks very slowly (every 2 seconds) and there is serial output (either after a plain reset or User+Reset) but not to a baud rate minicom can handle. The SD LED also flashes around the same time serial output occurs. Probing with a scope I noticed that the Crystal wasn't oscillating, I removed the crystal and caps and I still get exactly the same behaviour, it powers up, IOS light blinks slowly and serial output occurs but at a non-standard baud rate. There is also no activity on the Z80 side (ie. reset, D0-D7 are all idle).

First guess I would think the ATMEGA is using an internal oscillator ignoring the external crystal but without delving into the Sketch used to build the HEX file I can't be sure.

The only part Ive deviated from vs the schematic is a 1K resistor for R19 (should be 1K2) as I didn't have any in my parts box otherwise all is per the schematic.

Hence have you any ideas? Is there an issue with the HEX sketch?

Many thanks in advance for any help you can provide.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates