DM-02 8-bit Computer

The DM-02 is an 8-bit computer built (almost) entirely out of 7400-series (TTL) logic chips.

Similar projects worth following

The DM-02 (pronounced: “Dee Em Zero Two”) is an 8-bit computer built (almost) entirely out of 7400-series (TTL) logic chips. It is the successor to my 74xx Computer which from now on shall be refered to as DM-01.

Why is there a successor to the DM-01? Well, the main reason is that the DM-01 never got to be a fully functional computer. It worked in Logisim, but due to poor design from my end the actual electronics failed to function properly.

The DM-01 was the first computer I designed all by myself and I was learning how to do it while I was doing it. So naturally, mistakes have been made!

I’ve done quite a bit of research since then and decided to give it another go.
Instead of trying to fix the DM-01, I’ve taking all the lessons learned from my first attempt and start from the ground up.

Please refer to the GitHub repository for all the details and the latest updates.

Status as of May 12th, 2020:

  • The computer is fully functional in Logisim.
  • Microcode language specified and all microcode has been written.
  • Microcode compiler is fully functonal.
  • Assembly language specified.
  • Assembler is fully functional.
  • Emulator is fully functional.
  • Basic documentation is in place (work in progress).
  • Electronics design is in progress (first couple of PCB's have arrived).

Overall specifications:

  • Aiming for a 1 MHz minimum clock speed
  • Microcoded control unit
  • 8-bit data bus
  • 16-bit address bus, allowing for 64 Kb of addressable memory
    • 16 Kb reserved for ROM
    • 48 Kb reserved for RAM (a 64 Kb RAM chip is used, but only the last 48 Kb can be addressed)
  • 16-bit stack pointer (entire RAM may be used as stack space)
  • 16-bit program counter
  • Register configuration:
    • 1x 8-bit accumulator (A)
    • 4x 8-bit general purpose registers (B, C, H, L)
    • BC and HL may be used as pair for 16-bit operations
  • The ALU is based around an EPROM
  • Supported flags: Zero, Carry, Negative, Overflow
  • Flags can be pushed onto the stack for use with JMP/CALL/RET instructions and for future interrupt support.
  • I/O is addressable through memory and there are 256 addresses reserved for this
  • Planned I/O modules:
    • Program loader (e.g., from SD card)
    • Graphics card
    • Keyboard support
  • Modular design based on stackable PCBs
  • One of these modules is the Debugger. This board attaches an Arduino Mega to the DM-02 and allows for:
    • Running hardware tests against each individual module.
    • Simulating the controller module and thus test the interaction between modules.
    • Debug the computer while it’s running programs.

High-level architecture overview

Green lines are 8-bit data bus connections.
Red lines are pairs of 8-bit connections to form a 16-bit value.
Orange lines are 16-bit address lines.
Black lines are internal bus connections.

Read more

For further reading, please refer to the GitHub repository.

  • Progress is slow

    Ruud van Falier07/30/2020 at 12:53 0 comments

    Progress is slow, but the project is not dead!

    I just have very little time in the past months because of a little addition to our family.
    This project requires me to be able to work on it for periods of several hours straight and that's just not happening right now.

    I did come to the realization that the pin headers that I'm using to interconnect all the PCB were not sufficient; it did not have enough pins.
    That forced me to redo some of the work I had previously done on the circuit designs.
    There are now two 64-pin headers in place which should be enough.
    Just to be sure I will not do any PCB design until all the circuit schematics are done.

    To be continued some day...

  • DM-02 emulator

    Ruud van Falier05/12/2020 at 15:36 0 comments

    Because running programs in the Logisim circuit is incredibly slow, I decided to write an emulator for the DM-02.

    It's written in JavaScript and runs from the browser that also provides a not half-bad looking UI for the computer.

    The emulator features a (separate) text and video display, just like the Logisim circuit does. The only difference is that this video display supports 240x200 pixels instead of the puny 128x128 from Logisim.

    Programs need to be assembled first before they can be loaded into the emulator to run. There is currently no option for editing programs from inside the emulator.

    If you'd like to give it a go, the emulator is available online:

    Code can be found in the GitHub repo.

  • Video display experiment (Logisim)

    Ruud van Falier05/03/2020 at 12:52 0 comments

    Added an LCD to the Logisim circuit and wrote a program that outputs a 64x64 black and white bitmap image on it. 
    Although the LCD has a 128x128 resolution and supports 16 bits colors, filling the entire screen would be painfully slow and color was ditched as well for that reason.

    It was a good chance to test some more of the assembler and got a few bugs squashed in the process.
    It also allowed me to test the general idea I had for a simple video card, which now looks very do-able.

    I also received the first couple of PCB so the actual machine will now slowly start to be built.

    The computer will consist of several stacked modules that are interconnected by pin socket with long pins, as such:

    Not sure how many modules I'll end up with yet. The only one designed so far are the debugger (which is not more than a few sockets that hold an Arduino Mega that is connected to all the interconnected pin sockets) and the power & clock circuit that I still need to assemble. The bottom plate is empty and only meant as, well, bottom..

    I'll try to publish some more updates as they happen in the coming time.

View all 3 project logs

Enjoy this project?



zpekic wrote 10/30/2021 at 03:56 point

Really impressive to see so many quality component and software produced for this project! Especially fascinating is to see another approach at microcode language definition and compiler for it. I written my own and created a number of CPUs/controllers using it:

  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