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 interpreter, CP/M 2.2 and 3, UCSD Pascal, Fuzix and more...

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, Collapse OS and Fuzix 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).

* NOTE TO THE READER *: Due to a text size limitation of the Hackaday. io site a few chapters have been moved to "Log files". In this case you have just to click on the link of the chapter's title to open a new tab and read it.





* * 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 used as auxiliary power connector when an add-on board (uCom or uTerm) is connected.

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 GPE OPTION (GPIO CONNECTOR)

It is possible to choose to populate on the PCB a GPIO port expander (U5) to add 16 bidirectional GPIO pins. The GPE option (see the schematic) can be used with the SPP Adapter board (see the paragraph: SPP (STANDARD PARALLEL PORT) ADAPTER BOARD).

The pinout of the GPIO (J7) connector is:


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  (if present).

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.

Please note that all the pin...

Read more »

Adobe Portable Document Format - 11.43 MB - 10/13/2023 at 11:16

Preview
Download

SD-S220718-R290823-v2.zip

The content of the microSD needed to run CP/M 2.2, CP/M 3.0, QP/M 2.71, UCSD Pascal, Collapse OS and Fuzix with IOS S220718-R290823 (More info in the Changelog.txt file inside)

Zip Archive - 5.81 MB - 10/06/2023 at 10:40

Download

S220718-R290823_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 Fuzix OS and the SPP Adapter board (more info in the changelog inside the .ino file).

Zip Archive - 43.75 kB - 09/24/2023 at 11:59

Download

S220718-R290823_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 - 59.90 kB - 09/24/2023 at 12:04

Download

SPP Adapter board - A240721-R270921.zip

All the documentation needed to build the SSP (Standard Parallel Port) Adapter board (A240721-R270921) including schematic, PCB assembling guide, Gerber files for PCB production. PCB is 55mm x 60mm 2-layers.

Zip Archive - 747.10 kB - 09/24/2023 at 15:10

Download

View all 13 files

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

  • * * ​USING THE TASM CROSS ASSEMBLER * *

    Just4Fun10/09/2023 at 14:07 0 comments

    * * USING THE TASM CROSS ASSEMBLER * *

    The TASM cross assembler (Windows CLI application) can be used for various CPU. It can be downloaded from here. The on-line manual is here.

    Using the TASM cross assembler it is possible setup a toolchain to program the Z80-MBC2, doing all the development on a PC and uploading the code with the serial port and then executing it on the target Z80-MBC2 with iLoad.

    After the download of the TASM zip file, unzip it into your working directory (it is the folder where your assembler source files are stored) and to assemble an user source give the command:

    tasm -s -h -c -g0 -80  <Your_source.asm> out.hex

    It will be created the out.hex file (Intel-hex formatted executable file).

    Now you can upload and execute out.hex using the iLoad boot mode of the Z80-MBC2.

    Remember that iLoad will take the first address of the Intel-Hex stream as the starting address of the program, and after the loading will jump to it.

    At this point you can follow the same steps to create an automated toolchain described in the paragraph "SDCC: SETTING UP AN AUTOMATED TOOLCHAIN (WINDOWS)".


    TASM: USING AUTOBOOT

    If you want create a binary file to use with the Autoboot boot mode you can generate it with the command:

    tasm -s -h -c -g3 -80   <Your_source.asm> out.bin

    It will be created a flat binary file out.bin. Then rename out.bin as autoboot.bin and copy it into the root of the SD used by the Z80-MBC2.

  • * * ​USING THE SDCC CROSS COMPILER * *

    Just4Fun10/05/2023 at 13:27 0 comments

    * * USING THE SDCC CROSS COMPILER * *

    Using the SDCC (Small Device C Compiler) cross-compiler it is possible setup a toolchain to program the Z80-MBC2 with the C language, doing all the development on a PC and uploading the code with the serial port and then executing it on the target Z80-MBC2 with iLoad

    SDCC can be found here: https://sdcc.sourceforge.net/.

    After installing it, SDCC needs to be in some way instructed about how to deal with the specific HW of the Z80-MBC2.

    For this reason in the SD image, inside the \SDCC folder, there are two support files: S190818-R011023_crt0.s and S290923_Z80-MBC2.c.

    All the steps needed to configure the toolchain are explained below (we will assume a Windows operating system here, but the steps are similar for Linux):


    STEP 1:

    Copy the two support files S190818-R011023_crt0.s and S290923_Z80-MBC2.c from the SD image (\SDCC folder) to your working directory (it is the folder where your C source files are stored) and compile the first file with the command (from your working directory):

    sdasz80 -plosgff -o S190818-R011023_crt0.s

    It will be created the S190818-R011023_crt0.rel file.


    STEP 2:

    Now it's time to compile the second support file (S290923_Z80-MBC2.c). Here things are a little more complex because this file can be compiled in two different ways which differ depending on whether interrupts are enabled or not.

    The  need to have interrupts enabled or not depends on whether your user program uses them or not.

    To enable the interrupts support compile with the command (from your working directory):

    sdcc -c -mz80 -DZ80MBC2IRQ S290923_Z80-MBC2.c

    Instead to disable the interrupts support compile with (from your working directory):

    sdcc -c -mz80 S290923_Z80-MBC2.c

    It will be created the S290923_Z80-MBC2.rel file.


    STEP 3:

    iLoad uses the first address as starting address for the execution, so the executable file (Intel-Hex formatted) must be in ascending address order. This is not guaranteed by SDCC, so you need to use the srec_cat utility to sort the file. You can download this utility from here: https://srecord.sourceforge.net/  and then you have to copy the srec_cat.exe file into your working directory.


    All done!

    To compile your source file the command is (from your working directory):

    sdcc -mz80 --no-std-crt0 S190818-R011023_crt0.rel <your_source.c> S290923_Z80-MBC2.rel -o temp.hex

    It will be created the temp.hex file (Intel-hex formatted executable file).

    Now to sort the file give the command (from your working directory):

    srec_cat -disable-sequence-warnings temp.hex -Intel -o out.hex -Intel

    This will create the sorted file ready to be loaded with iLoad: out.hex.

    Now you can upload and execute out.hex using the iLoad boot mode of the Z80-MBC2.


    SDCC: SETTING UP AN AUTOMATED TOOLCHAIN (WINDOWS)

    To create an automated toolchain you need another "ingredient", a terminal emulator supporting scripts. Here we will use Tera Term. You can download Tera Term from here: https://ttssh2.osdn.jp/index.html.en.

    After installing Tera Term, from the SD image inside the \SDCC folder, copy into the working directory the following batch files: SDC.BAT and L.BAT.

    Before using the L.BAT batch file you have to adapt two parameters according with the configuration of your PC. 

    Go at line 18 and verify the path where Tera Term (ttermpro.exe) is installed, and at line 19 the number of the COM port used to connect the Z80-MBC2 to your PC.

    You need also to copy the Tera Term script LoadZ80.ttl from the /SDCC folder (inside the SD image) to the directory where Tera Term (ttermpro.exe) is installed, and adapt the parameter at line 15 with the complete path of your working directory in your system.

    Now to compile your_source.c file give the command (from your working directory):

    SDC your_source.c

    and to upload and execute it on the Z80-MBC2 (from your working directory):

    L

    Remember to close the Tera Term window...

    Read more »

  • How use the ICSP port with the USBasp programmer under linux to burn the bootloader

    Just4Fun07/27/2018 at 15:57 0 comments

    A cheap and easy way to burn the Arduino bootloader is to use an USBasp programmer that is commonly available:

    The USBasp is also capable to give the power to the "target" using the VCC pin, but remember to check that the JP1 jumper is set to provide 5V to the target (as shown in the photo).

    Please note that the pinout of the USBasp is a little different from the "standard" ICSP (os ISP) pinout:


    In the previous picture it is possible see that pins 4 (TXD) and 6 (RXD) are not at GND as expected  by the standard ICSP port, and pin 3 is not NC.

    See the following picture showing the standard 10 pin ICSP pinout:


    So you must consider this when connecting the USBasp to the 6 pins ICSP port (J3) on the Z80-MBC2 (see the schematic):

    To avoid problems I suggest to use as GND pin 10 of the USBasp connector, and connect the other pins (VCC, MISO, MOSI,SCK, RST) accordingly.

    An handy way to connect the USBasp to the 6 pin ICSP port (J3) of the Z80-MBC2 could be to use a commonly available "10pin to 6pin" adapter like this:


    but I suggest not to use it "as is" because its internal connections are done for a "standard" ICSP port, and we have seen that the USBasp connector differs from the standard one.
    The schematic of the adapter shows that isn't compatible "as is" with the UABasp connector:


    To use it is a good idea isolate the pins 4, 5 and 6 cutting the trace on the PCB of the adapter that connects those pins together, and then check with a tester.
    In the following photo are shown the three cuts (thin red lines inside the green "circle") to do:


    BURNING THE BOOTLOADER FROM ARDUINO IDE:

    To easily burn the bootloader follow these "quick and dirty" steps (tested on a linux Mint OS with Arduino IDE 1.8.5):

    STEP 1: Connect the 10 pins connector of the USBasp programmer to the 6 pins ICSP port (J3) of the Z80-MBC2 (using wires or a modified adapter as discussed before);

    STEP 2: Verify carefully that any other connector of the Z80-MBC2 is not used, and verify that both the SD and RTC modules (if present) are removed from the board;.

    STEP 3: Only at this point connect the USB side of the USBasp programmer to an USB port of your workstation;

    STEP 4: Open a "terminal" window on your workstation and go to the directory where there are the Arduino IDE executables, and get the root privileges with the command:

    sudo su

    then run the Arduino IDE with the command:

    ./arduino

    STEP 5: Because Arduino IDE is running as the root user it is necessary re-install the "core" for the Atmega32. Open the Board Manager as you already did (anyway  the guide is here). Note that you must do this step only the first time you execute the Arduino IDE as root;

    STEP 6: Now from the Tools menu of Arduino IDE select "Atmega32" as "Board", "16 MHz external" as "Clock", and "USBasp" as "Programmer". Then you can burn the right bootloader (without playing with the FUSE setting) selecting "Burn Bootloader" from the same "Tools" menu.

    All done!

View all 3 project logs

Enjoy this project?

Share

Discussions

SupraJames wrote 11/01/2018 at 21:57 point

Got bored of waiting for my PCBs so got it all up and running on breadboard. It booted first time which was unexpected! CP/M 3 also works. Really happy I found this project! https://imgur.com/gallery/kduyfE3 Next step, an LCD display module!

  Are you sure? yes | no

Just4Fun wrote 11/02/2018 at 08:31 point

Wow... That remembers me the first previous version (Z80-MBC) I made on breadboard (now destroyed... sigh...) .

Great!

  Are you sure? yes | no

SupraJames wrote 11/02/2018 at 10:50 point

I'm finding it a little hard to get started with 'bare bones' development. I want to try writing assembler and then presumably load it with iLoad. I've tried running TASM but it refuses to work on 64 bit windows, so I compiled z80-asm from http://wwwhomes.uni-bielefeld.de/achim/z80-asm.html on Linux, but it seems not to like your example .asm files.

Can you advise what I should be using as my toolchain here please? :)

  Are you sure? yes | no

Just4Fun wrote 11/02/2018 at 13:23 point

Give a look here: https://hackaday.io/project/19000-a-4-4ics-z80-homemade-computer-on-breadboard/log/52682-new-iload-boot-mode-and-an-automated-assembler-toolchain

It was for the Z80-MBC, but will work with the MBC2 too. I use a VM with WinXP to run TASM... (on a linux host)

  Are you sure? yes | no

SupraJames wrote 11/02/2018 at 14:55 point

Nice one. Well I actually found my own solution. zasm (https://k1.spdns.de/Develop/Projects/zasm/) generates .hex files perfectly for iLoad. So that's another way to do it.

Would be cool also if we had an assembler under CP/M too!

  Are you sure? yes | no

villaromba wrote 11/02/2018 at 16:23 point

I still have my v1 breadboard (something to pass on to the grandchildren!!!) but I love v2. Have added an LCD display and LED backback (4digit) onto the i2c buss by adding some new OPCODEs .  Big learning curve for me on the programming side. Also added a relay board on to the GPIO - just because!!!

  Are you sure? yes | no

SupraJames wrote 11/02/2018 at 18:11 point

@villaromba are you me? I just came here to say the same thing! Took an hour or so to get my head around the opcodes business, but I can write to my LCD from BASIC and assembler, so I'm well happy. THIS is how you learn how a computer works. https://imgur.com/gallery/d7qgD2P

  Are you sure? yes | no

Jeff Davis wrote 10/31/2018 at 04:56 point

I've build my board and after fixing a bad solder joint on the sd card slot it boot up and runs, but my leds are not working as expected. 

Since I plan to put my board in a case, I soldered in 0 ohm resistors for the 6 leds, and soldered in jumper pins where the leds would go. 

I now have a breadboard with resistors and leds hooked up, and after the board boots the IOS, DMA, and IO_OP leds stay lit all the time. In fact it seems like they are acting logically backwards - when I do "stat a:" the DMA and IO_OP leds flash, like the led is indicating work happening by going to 0 volts and not lighting the leds, then when work is done they go back to on again. Anyone have any ideas?  

Here's my breadboard for context: https://drive.google.com/file/d/1kBfibaxGbCGJAtdZY2VeKpLQNkp1D6As/view?usp=sharing

  Are you sure? yes | no

Just4Fun wrote 10/31/2018 at 12:57 point

That seems normal (see the video)...

  Are you sure? yes | no

Jeff Davis wrote 11/01/2018 at 08:09 point

Ah I see, most of the leds are connected to active low pins. I modified your cpu test program that used HALT to test most of the leds; I couldn't figure out how to get the z80 to assert BUSACK so the DMA led is skipped. See https://drive.google.com/open?id=1uFqvNtlX2qfkbOiuGQzfBF28c3NXDE-Y

  Are you sure? yes | no

Bartosz Makara wrote 10/29/2018 at 09:54 point

Hey this is an awesome project. I've never used CP/M before but I love old computers and related matters. I've ordered 10 PCBs at pcbways.com and all needed parts in China. Now I have to be patient. ;)

I'm not very good in these things so probably this is a stupid question: Is there any possibility to access the GPIO with BASIC somehow? Or differnetly asked: How can I interact with the GPIO and the system?

  Are you sure? yes | no

SupraJames wrote 10/29/2018 at 13:02 point

Look at Examples with Basic.txt in the Files section - it shows how you can access the I/O ports from Basic.

  Are you sure? yes | no

Bartosz Makara wrote 10/29/2018 at 14:28 point

Oh yes, that's it! Thank you very much! :)

  Are you sure? yes | no

SupraJames wrote 10/26/2018 at 20:13 point

Hi! I'm going to build this and my PCBs are being fabricated. Yay!

I actually have an RTC module and an SD module already from playing with Arduino and wonder if they are suitable.

The SD module is https://imgur.com/gallery/Rzh1O1i and seems to be fairly generic, but not sure how to map the pins.

The RTC module is https://imgur.com/gallery/VnwoS8V and based on a DS1307 chip.

Would these work at all? Pin layout aside?

  Are you sure? yes | no

SupraJames wrote 10/26/2018 at 20:57 point

OK so I might have at least answered my own question regarding the RTC module. It looks like it will not work out-of-the-box but I could probably modify the IOS sketch to support it, which sounds like fun.

According the data sheets, the I2C address is the same, but the DS1307 is less accurate and does not have a status register, so no Oscillator Stop Flag. Also no temperature sensor to read.

It might need initialising in a different way - there's a CH flag in register 0 which needs to be set on power up.

Apart from that I think the time registers are the same.

  Are you sure? yes | no

Just4Fun wrote 10/26/2018 at 21:22 point

Hi, that SD module seems have an on board 3.3V regulator and level adapter, so just pay attention to use the right pins...

About the RTC, as you said you should tweak the code just a little... (no temperature sensor, but I think you can live happily without that one too...)

  Are you sure? yes | no

SupraJames wrote 10/26/2018 at 21:42 point

Great, thanks! Looking forward to getting started. The only other deviation from the design I am planning is the use of a different memory chip. It's an Alliance AS6C1008-55PCN - https://uk.farnell.com/alliance-memory/as6c1008-55pcn/sram-1mb-2-7v-5-5v-128kx8-pdip32/dp/1562896

Pinout is the same, it's just a faster chip. You think I'll be OK?

  Are you sure? yes | no

Just4Fun wrote 10/27/2018 at 06:41 point

Yes, it is ok!

  Are you sure? yes | no

SupraJames wrote 10/28/2018 at 20:17 point

Well I'm rather confused about the SD reader. I have mocked up the Arduino parts of the MBC2 on breadboard (No Z80 and no SRAM) as per your schematic. The built-in SD library from Arduino works fine, and I can list all the files on the FAT32 formatted SD card I have using the CardInfo example sketch, so I know the wiring and hardware is good.

However, when I flash the IOS, I get a brief flash of the SD LED and:

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

Get the same with two different cards. Any ideas?

  Are you sure? yes | no

Just4Fun wrote 10/31/2018 at 13:05 point

The error means that is not possible initialize the SD due to a hard error or no medium...

Try to power off the Z80-MBC2 and power on it again (after a few seconds) with the SD adapter connected and the SD into it.

  Are you sure? yes | no

SupraJames wrote 11/01/2018 at 15:37 point

Update with the SD card module, I actually ordered a new module similar to the ones you suggested, mainly to get the correct order of pins for the PCB, and the new module works fine. So there must have been something odd about my one which meant it worked OK with the arduino SD library but not with picofat.

  Are you sure? yes | no

George Warner wrote 10/23/2018 at 11:33 point

I’m working on bringing up CP/M 3.0 banked on Bill Shen’s z280rc board… but could use some clues… is your banked BIOS sources available anywhere?

  Are you sure? yes | no

Just4Fun wrote 10/23/2018 at 11:43 point

All the custom BIOS sources are in the SD zip file under "/src".

  Are you sure? yes | no

George Warner wrote 10/23/2018 at 11:45 point

Thank you. Much appreciated.

  Are you sure? yes | no

villaromba wrote 10/13/2018 at 08:52 point

If you do need to use the TL866 direct, the only fuse settings you need to select are :-  SUT0, SUT1, SPIEN, BOOTSZ1, BOOTSZ0 - (this gives CF & D9) - make sure everything else is not selected. I've used these settings every time - and every time a success!!!

  Are you sure? yes | no

scottie4442 wrote 10/12/2018 at 13:56 point

OK, just got the new IOS for cp/m 3 uploaded and copied the sd image to a blank fat32 formated sd card.  when I boot the z80-mbc2 I get the menu. I set the rtc to the correct time and change diskset to 2, the CP/M 3 set. when I try to boot the os I get Z80 is running from now I either get the prompt again and cannot type or I get nothing, it looks like it just hangs. I have run down the menu and I get this same behavior from basic, forth, CP/M 2.2, QP/M 2.71 and CP/M 3.0. not sure what to do now.

  Are you sure? yes | no

Just4Fun wrote 10/12/2018 at 14:20 point

Try to flash IOS-LITE ( https://cdn.hackaday.io/files/1599736844284832/S220618_IOS-LITE-Z80-MBC2.ino ) and tell me if the various options work...

PS: this is the first time you run the board...?

  Are you sure? yes | no

scottie4442 wrote 10/12/2018 at 15:43 point

OK, I uploaded the IOS-LITE and I get the same thing, when I try to load basic, forth or the iload, I get Z80 is running from now and then nothing it just sits there and I get nothing else.  I tried to reset and the menu come back but when I make a selection it does the same thing.  I have check that my soldering is ok and that the chips are seated properly.

  Are you sure? yes | no

Just4Fun wrote 10/12/2018 at 16:11 point

An other user had exactly the same issue... it was a faulty SRAM (it could be a faulty Z80 or 74HC00 too, but the SRAM is at first place).

The Atmega seems work properly.

PS: Are you sure to have a CMOS Z80...?

  Are you sure? yes | no

scottie4442 wrote 10/12/2018 at 16:47 point

chips are :

Zilog z84c0008PEG

Alliance AS6C1008-55PCN

Atmel ATMEGA32A

TI SN74HCT00N

MCP23017-E/SP

All these are brand new chips from Mouser

  Are you sure? yes | no

Just4Fun wrote 10/12/2018 at 16:54 point

Chips numbers seem ok.

Which method have you used to flash the bootloader?

  Are you sure? yes | no

scottie4442 wrote 10/12/2018 at 21:57 point

with usbasp and arduino ide. I did remove the rtc and sd card reader as suggested and plugged the usbasp in according to the info above.  I also have a tl866 programmer that I can program the atmega32a with but I was not sure of the fuse settings.

  Are you sure? yes | no

Just4Fun wrote 10/13/2018 at 09:36 point

Ok, given that all seems as expected and excluding ghosts and black magic, the suspects are on the SRAM and CPU again...

I've prepared a IOS-LITE modified test version to test the CPU only. This simple test will force the Z80 into HALT, so the HALT led will turn on. The SRAM is not used, so this test can be run also without any SRAM chip installed.

The sketch is downloadable from here: https://drive.google.com/open?id=1irVxE3IF_Ilte1c547ZSuzLTaaWIfeeC

If you press RESET, the HALT led will turn off for about one second, then it will turn on again.

  Are you sure? yes | no

scottie4442 wrote 10/13/2018 at 13:32 point

OK, I think I found part of the problem (I am an idiot sometimes).  I went back to start fresh and  when I did the boot loader step I realized there is a USBasp and a USBasp(MightCore). I chose the USBasp(MightCore) this time and it is getting further seem like, but now when I try to load Basic, Forth or iLoad, the IOS and Halt led's are solid and the DMA is blinking occasionally the goes out. Hopefully this is progress. Oh I used IOS again for this not IOS-LITE

  Are you sure? yes | no

Just4Fun wrote 10/05/2018 at 22:00 point

  Are you sure? yes | no

Jay Sissom wrote 10/05/2018 at 18:58 point

Hello, I can't find the vendor and model number of the RTC and SD card adapters.  Can you  please provide that?  Thanks.

  Are you sure? yes | no

scottie4442 wrote 09/30/2018 at 18:26 point

I see an your info that you say to use cpmtools or cpmtoolGUI to make the sd cards to run cpm 2.2 and/or qpm 2.71. is there some place that shows the steps by step to create the d card from empty, I have a 32gb sd card formatted with fat32 and not sure what to do to start the process.

  Are you sure? yes | no

Just4Fun wrote 09/30/2018 at 18:37 point

Hi, to run CP/M or QP/M you only need to unzip the SD zipped file into the SD with your PC.

Cpmtools or cpmtoolGUI are only needed to add, extract or delete a file  * inside * a CP/M or QP/M virtual disk.

  Are you sure? yes | no

scottie4442 wrote 09/30/2018 at 20:07 point

ok, that lets me know what I needed.  I have worked on trs-80, apples, etc, been in computer for 40 years, just not worked with cp/m in 30 years so having ro recall with my OLD brain how this works.

  Are you sure? yes | no

Just4Fun wrote 09/30/2018 at 21:09 point

Great! If you want a "preview" of CP/M 3 you can try this too: https://twitter.com/Just4Fun_J4Fun/status/1045730075398803456

  Are you sure? yes | no

Boris wrote 09/26/2018 at 10:17 point

I built mine and after a lot of debugging with a scope, something is very strange.  For debugging purposes I wrote a sketch to ask for pin number and 1/0 value to place on any pin, and exercising it shows that all the correct signals propagate properly from the ATMEGA to everywhere they should.  But during this, something really unusual is happening: the IOREQ pin of the Z80 activates low for no apparent reason.  I mean, it just received the "single-pulses reset".  There is no clock coming -- pin 6 is sitting at 0.  Nothing is happening, and the ATMEGA is just waiting for console input, yet somehow, spontaneously, after a few seconds Z80's pin 20 pulls to 0.  I am at the end of my wit...

  Are you sure? yes | no

Just4Fun wrote 09/26/2018 at 11:33 point

I have no idea about your test, but reading your note it seems that you have some Atmega GPIO pins left in HiZ.... (I mean as INPUT without PULLUP).

  Are you sure? yes | no

villaromba wrote 09/17/2018 at 22:09 point

QP/M  - Love the progression of this project., particularly the ease of getting software onto the SD card via CPMTOOLS guii - a good find!!!

  Are you sure? yes | no

john wrote 09/11/2018 at 23:54 point

What are you guys using for terminal emulation settings?  Specifically, have you gotten backspace to work?  

  Are you sure? yes | no

Just4Fun wrote 09/12/2018 at 09:48 point

Using Tera Term it works out of the box (if I remember well)...

  Are you sure? yes | no

john wrote 09/12/2018 at 23:38 point

Thanks - I tried TeraTerm and it works fine.  Was using Putty and had to change the keyboard to send ctrl-H instead of ctrl-? under keyboard settings.  That makes things much easier!

  Are you sure? yes | no

Jeff Davis wrote 09/09/2018 at 08:37 point

Just4Fun: On the BOM sheet, RN1 and RN2 are listed as a SIP8 (8 pins), but the board has 9 pins (8 resistor + 1 common 5v). Should the sheet say SIP9 (which has 9 pins, 8 resistors and 1 common)?

  Are you sure? yes | no

Just4Fun wrote 09/09/2018 at 10:44 point

Yes is SIP9 (which has 9 pins, 8 resistors and 1 common). I'll change it in the BOM...

  Are you sure? yes | no

Jeff Davis wrote 09/05/2018 at 06:48 point

Just4Fun: I just ordered 10 PCBs (in black) from pcbway, thanks for setting up that shared project to make it easy to order. When I ordered, buying 10 boards was the same price as 5, with a little extra shipping cost.

I'm looking at ordering parts now, and I see on the BOM that C1,C2,C5,C6,C8,C9,C12 are all ".1uF", while C10 is "0.1uF". Are those all 0.1uF, or is one of the values listed wrong?

  Are you sure? yes | no

Just4Fun wrote 09/05/2018 at 07:36 point

No, it's the same value... (.1uF = 0.1uF). Because it is on an other sheet, I've forgotten to follow the same "convention" of the other sheet.... :)

Don't miss the Twitter "channel" with "some" preview and "spoilers": https://twitter.com/Just4Fun_J4Fun

  Are you sure? yes | no

Norihiro Kumagai wrote 08/30/2018 at 02:54 point

Just for your information,  in Japan, building Z80-MBC2 becomes quite popular (among oldboys, like me:-),  a kind vendor "orangepico" in Japan start to provide  PCB's, so barriar on getting PCB in Japan becomes quite low.  I am quite sorry all of the tweets are written in Japanese, but almost all tweets includes their pictures with short messages, I hope you could feel our delightful moments.

  Are you sure? yes | no

Just4Fun wrote 08/30/2018 at 18:58 point

Thanks you very much for you kind message... :)

  Are you sure? yes | no

Cyril V. wrote 08/30/2018 at 00:16 point

I just got my PCBs, they look really good (the solder mask is black).

I got couple to spare. I think selling 2 for $5 plus shipping, PM if interested.

  Are you sure? yes | no

villaromba wrote 08/28/2018 at 13:38 point

The message you get - is that after selecting it or does it just default to that?  OR Do you get full menu if you hold user key dow, then hold reset for a moment - release it and then release user key? If so can you select anything at all from keyboard?

  Are you sure? yes | no

Peabody1929 wrote 08/28/2018 at 19:21 point

After pressing just reset I get:

Z80-MBC2 - A040618
IOS-LITE - I/O Subsystem - S220618

IOS: Z80 clock set at 4MHz

IOS: Loading boot program... Done
IOS: Z80 is running from now


After pressing reset and user and release I get:

Z80-MBC2 - A040618
IOS-LITE - I/O Subsystem - S220618

IOS: Z80 clock set at 4MHz

IOS: Select boot mode or system parameters:

 0: No change (->1)
 1: Basic
 2: Forth
 3: iLoad
 4: Change Z80 clock speed (4/8MHz)

Enter your choice >

After pressing "1" at the prompt I get:

Enter your choice >1  Ok
DEBUG: BootImageSize = 7603
DEBUG: BootStrAddr = 0
IOS: Loading boot program... Done
IOS: Z80 is running from now

  Are you sure? yes | no

Just4Fun wrote 08/28/2018 at 20:46 point

Which method have you followed to flash the bootloader?

  Are you sure? yes | no

Peabody1929 wrote 08/27/2018 at 18:30 point

I finished building my board.  It starts up, outputs messages to the serial monitor but seems to stop after the message: 

"IOS: Z80 is running from now".  

The Z80 clock is set at 4MHz

The boot mode is 1: Basic.

What should I do next to debug the issue?  

  Are you sure? yes | no

Just4Fun wrote 08/27/2018 at 19:49 point

Which method have you followed to flash the bootloader?

  Are you sure? yes | no

Peabody1929 wrote 08/31/2018 at 02:54 point

I have tried two methods of flashing the bootloader.  Each time used a different ATmega 32 part.  Both times the USB interface was a USBTinyISP V2.0.  First time it was connected via a 10 pin cable to a ATmega32 dev board with a 40 pin ZIF, a 10 pin socket and all the pins brought out to headers.  The second time was using a 6 pin cable connected to the ISP connector on the MBC2 board.  In the Arduino IDE v1.8.5 selected the programmer as USBTinyISP (MIghty Core) and click Burn Bootloader.  There were no error messages and the flash was successful.

Unfortunately this made no difference in behavior.

One difference is that I am using a Z84C00020PEC.  This is a 20MHz Z80.  Is there a possibility of a narrow clock pulse glitch that a 8MHz part would never see?

Finally, I think the ATmega32 is operating correctly.  I plugged in a MCP23017 and a new message appeared: "IOS: Found GPE Option".

  Are you sure? yes | no

Just4Fun wrote 08/31/2018 at 07:31 point

I'm using the same Z80 (Z84C00020PEC) on Z80-MBCs and Z80-MBC2s without problems...

And the method you use to flash the bootloader seems correct to me (I use the USBasp, but the USBTinyISP should be ok because you are using the Arduino IDE "facility" to burn the bootloader, so should be not possible to have fuse bits configuration errors because they are managed by the IDE...).

Try to change a different Atmega32A, just to be sure that your part is not faulty.

After that it seems that the problem can be the CPU or the SRAM, because you arrive at the point when the program should be loaded into SRAM and the Z80 starts to execute it.

  Are you sure? yes | no

Peabody1929 wrote 09/01/2018 at 01:02 point

IT WORKS!!!!  I replaced every chip except the SRAM.  Following your suggestion, I replaced the SRAM.  The board now works perfectly; BASIC comes up and runs.   I am a happy camper.  Thank you for the help!

Tom

  Are you sure? yes | no

Just4Fun wrote 09/01/2018 at 07:47 point

Great! Can you tell me the exact part name  of the faulty SRAM?

BTW: Thinking to add a SRAM test....

  Are you sure? yes | no

Peabody1929 wrote 09/01/2018 at 18:32 point

The faulty SRAM part number is: HM628128ALP-7  The replacement part is: HM628128LP-12.  The replacement part is an older generation and slower part.

If you like, I can send you the failing part by mail.

P.S.  I have some HM628128BLP-7 parts as well.  Perhaps in the next build I will give these a try.

  Are you sure? yes | no

Just4Fun wrote 09/03/2018 at 09:40 point

Thanks, but it is enough if you could just keep it. So if I have the time to write a memory test it is possible to use the faulty SRAM for testing...

BTW: may be that this can interest you: https://twitter.com/Just4Fun_J4Fun/status/1036289202265247745 :)

  Are you sure? yes | no

Julian wrote 08/26/2018 at 20:24 point

Thinking of using this design as a basis for experimentation -- do you know if it's likely to run OK on breadboard, or is the PCB essential?

  Are you sure? yes | no

Just4Fun wrote 08/27/2018 at 15:44 point

Yes it can be done. Just the quartz oscillator could be "critical" on the breadboard, but if you use the internal oscillator (8MHz) you shouldn't find any problem.

You can give a look to the previous Z80-MBC on breadboard too (https://hackaday.io/project/19000-a-4-4ics-z80-homemade-computer-on-breadboard).

  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