Close
0%
0%

OMEN Alpha

As-simple-as-possible computer with the 8085 CPU

Similar projects worth following
As-simple-as-possible computer with the 8085 CPU

I write a book about old computers. Oh, sorry: I mean "vintage computers" from 80's. My primary goal is to show how one can build a 8bit computer from scratch. It means: how to set up a CPU, how to connect memories, how to connect peripheral chips, and why to connect...

This computer is a "demo construction": A computer, based on 8085 CPU, with 32 kB of (EEP)ROM and 32 kB of RAM, serial connection and parallel ports. All should be as simple as possible. And here is a result.

Wait a moment - why OMEN?

It is simple. OMEN is an abbreviation (of course) of Czech expression "Osmibitový Mikropočítač pro Elektronické Nadšence", which means "an 8bit Microcomputer for Electro Enthusiasts".

Of course - when I have connected the speaker and played a tune, the first tune I have implemented was... right, "The Omen" by Prodigy!

Monitor

Monitor has four commands:

D is for memory dump

M is for memory change

G is for Go

: is for load a HEX file

EEPROM contains TINY BASIC at address 1000h, so enter G1000 to start BASIC.

Programming

As easy, just write a program in assembly language, compile it to the HEX and copy/paste to serial monitor. Then use G command (as GO) to run.

See this video:

LED display and a hexadecimal keyboard 

Here is the classic peripheral device for a single board computer: LED 7segment display and a hexadecimal keyboard. 

Of course I can use the classic keyboard matrix and some 7segment displays, a bunch of resistors 

and transistors and solder a vintage one. Yes, I can, and it's easy. Instead I have used the cheap LED+key module from China. Its type is QYF-TM1638. 

This is it:

You can buy it on eBay or AliExpress for about 3 USD.

It provides the modern LED display driver and keyboard scanner. It has a serial interface - not an UART, but some kind of SPI with bidirectional data line.

You need three pins to connect this module: strobe pin (output from CPU), clock pin (output from CPU) and data (bidir). So there was a problem: How to achieve a bidir interface in the OMEN Alpha?

I have used the 82C55 parallel interface, port C. Port C can be split into two groups (higher and lower half, PC7-PC4 and PC3-PC0), which can be configured as input or output independently. Ports A and B has the same direction for the whole port.

So I have set the lower half of port C as output for STB and CLK, and the upper one I can switch between input and output. Data pin DIO is connected to port C pin 7.

Here is a source code for the driver. It is not optimized, straightforward and rather ugly, but it works!

OMEN Alpha, issue 2 

The second version of PCB has some new features: 

  • System connector (24 pins) with data bus, A0-A2, /RD and /WR, seven /CS (decoded), system clock and an interrupt 
  • Selectable IRQ (RST7.5) for external interrupt request 
  • Switchable /WE for EEPROM to enable in-place programming 

PCB - Issue 4

My Tindie shop is out of stock, so I decided to fabricate a new batch of PCBs. I have skipped the Issue 3 (backplane version) and made a new, slightly improved version, Issue 4. The improvements are:

  • Signals RESET and READY are added to the application / system bus
  • 10k pull-up resistor between READY and Vcc to drive this line with open collector drivers
  • Removed the LED and 330R resistor. Three pins are added: SID, SOD and GND to enjoy a serial port.
  • One place for 22pF capacitor was removed.

Parts placing on PCB 

Here is parts placing image: 

Jumpers etc. 

  • JP1 is a serial port. Pins are (from bottom to up): GND, TxD, RxD (next to "JP1" label) 
  • JP2, JP3, JP4: Parallel ports from 8255. A square marks pin 1, see below to schematics. JP2 is port PA, JP3 is for PB, JP4 is for PC 
  • JP5 is a EEPROM write enable. Connect pins 1-2 to disable writing, connect 2-3 to enable (pin 1 is the leftmost,...
Read more »

manual.pdf

THE Manual

Adobe Portable Document Format - 249.34 kB - 08/18/2018 at 14:44

Preview
Download

alpha85-places.png

Issue 2 component placing

Portable Network Graphics (PNG) - 52.16 kB - 06/17/2018 at 15:58

Preview
Download

alpha85-r23-full.png

Issue 2 full schematics

Portable Network Graphics (PNG) - 237.90 kB - 06/17/2018 at 15:58

Preview
Download

alpha85-full-10.png

Full schematics

Portable Network Graphics (PNG) - 111.71 kB - 05/07/2018 at 15:49

Preview
Download

Portable Network Graphics (PNG) - 178.73 kB - 05/07/2018 at 15:51

Preview
Download

View all 8 files

  • 1 × M5L8085AP Microprocessors, Microcontrollers, DSPs / Microprocessors (MPUs)
  • 1 × 74HC245 Electronic Components / Misc. Electronic Components
  • 1 × 74HC00 Electronic Components / Misc. Electronic Components
  • 1 × 74HC573 Electronic Components / Misc. Electronic Components
  • 1 × 62256

View all 10 components

  • Backplane and a Serial Ports

    Martin Maly08/25/2018 at 15:04 4 comments

    My goal is to make a computer you can extend with some peripherals devices. Of course, the modern ones, no vintage cassette tape or light pen. But there is a problem: a lot of them has a SPI or I2C interface.

    Of course you can simulate SPI and / or I2C by bit banging on 8255, but it is pretty slow.

    Of course you can use a few 74's to make a shift register and a glue logic to send and receive data on the full speed.

    You can use a buffer and a driver to bit-banged-but-faster solution.

    OR

    You can use a coprocessor.

    In my case the second processor is an ATMega88. Yes, it has more power than the whole OMEN Alpha, but never mind.

    I have used the ATMega as an peripheral. It is connect to the system bus as a regular peripheral device. Chip select makes ATMega interrupt, read data from data bus and let the firmware work. The firmware decide if it's data or controll byte, and make all necessary operations for SPI or TWI bus.

    Because there are no synchronization, I have to use simple "halt" mechanism by a simple R-S FF (1/2 of a 7400). Chip select set R-S to HALT (and drive the 8085's READY signal to low). ATMega can take its own time to read data from bus or write them back (regarding the /RD and /WR signals).

    When ready, ATmega sets R-S back to READY (and drive READY high). The 8085 CPU now can work...

    I will see if it works... It should...

  • PCB - Issue 4

    Martin Maly08/12/2018 at 14:29 0 comments

    My Tindie shop is out of stock, so I decided to fabricate a new batch of PCBs. I have skipped the Issue 3 (backplane version) and made a new, slightly improved version, Issue 4. The improvements are:

    • Signals RESET and READY are added to the application / system bus
    • 10k pull-up resistor between READY and Vcc to drive this line with open collector drivers
    • Removed the LED and 330R resistor. Three pins are added: SID, SOD and GND to enjoy a serial port.
    • One place for 22pF capacitor was removed.

  • Alpha kit is available on the Tindie now

    Martin Maly07/28/2018 at 11:46 0 comments

    Unfortunatelly sold out right now...

    You can select three kit variants: PCB only, PCB + parts or fully assembled.

    You can select no EEPROM, empty EEPROM or programmed EEPROM too.

  • LED display and a hexadecimal keyboard

    Martin Maly07/08/2018 at 17:30 0 comments

    Here is the classic peripheral device for a single board computer: LED 7segment display and a hexadecimal keyboard.

    Of course I can use the classic keyboard matrix and some 7segment displays, a bunch of resistors and transistors and solder a vintage one. Yes, I can, and it's easy. Instead I have used the cheap LED+key module from China. Its type is QYF-TM1638. This is it:

    You can buy it on eBay or AliExpress for about 3 USD.

    It provides the modern LED display driver and keyboard scanner. It has a serial interface - not an UART, but some kind of SPI with bidirectional data line.

    You need three pins to connect this module: strobe pin (output from CPU), clock pin (output from CPU) and data (bidir). So there was a problem: How to achieve a bidir interface in the OMEN Alpha?

    I have used the 82C55 parallel interface, port C. Port C can be split into two groups (higher and lower half, PC7-PC4 and PC3-PC0), which can be configured as input or output independently. Ports A and B has the same direction for the whole port.

    So I have set the lower half of port C as output for STB and CLK, and the upper one I can switch between input and output. Data pin DIO is connected to port C pin 7.

    Here is a source code for the driver. It is not optimized, straightforward and rather ugly, but it works!

  • "Sneak peek" - what's coming on?

    Martin Maly07/06/2018 at 13:39 0 comments

    Yes, this time it's compiled! 

    (I write this compiler from this Monday, so its output and the expression evaluation is not optimized at all...)

  • The first Alpha issue 2 assembled!

    Martin Maly06/17/2018 at 15:55 0 comments

    The second version of PCB has some new features:

    • System connector (24 pins) with data bus, A0-A2, /RD and /WR, seven /CS (decoded), system clock and an interrupt
    • Selectable IRQ (RST7.5) for external interrupt request
    • Switchable /WE for EEPROM to enable in-place programming...

    Here are some photos:

  • 7segment display module and the Alpha

    Martin Maly06/02/2018 at 18:16 2 comments

    Just take the MAX7218 module and connect it to port C of 8255.  Of course, I could do it more "retro way", and maybe one day I will. But for now it's simple and working.

    Step 2: I try to use TM1638 module to control the Alpha in the SBC way. This module has 16 buttons only, so there is no extra buttons for "action keys". But Heathkit ET-3400 has 16 keys too...

  • A new PCB is on its way

    Martin Maly05/30/2018 at 16:29 1 comment

    I have reworked the Alpha PCB - some errors are fixed, the system bus connector is added. The batch of 10 pieces should arrive next week...

  • New monitor for Alpha

    Martin Maly05/26/2018 at 09:55 0 comments

    Today I have added the MON85 monitor by Dave Dunfield. Not the original one, but the improved version by Roman Borik.

    You can find all of the source codes and ready made images on GitHub.

    MON85 improvements:

    • Support for undocumented 8085 instructions DSUB B, ARHL, RDEL, LDHI d8, LDSI d8, LHLX D, SHLX D, JNK a16, JK a16, RSTV
    • Command R displays all flags of F register (SZKA3PVC). If flag is not set dash '-' is displayed.
    • Added restart vector RST 8 (0040h) for possibility to handle RSTV call.
    • Changed TRACE mode. After entering TRACE mode, instruction on actual PC and content of registers (if it is switched on) are displayed. Entering a space ' ' executes this instruction, and returns to the 'T>' prompt with the next instruction.
    • Instructions LXI, DAD, INX, DCX displays argument 'SP' rather than 'S'.
    • Commands that requires 1 byte parameter raises error if entered value not fit to 1 byte.
    • Command 'C' checks overlap of source and destination block and for copying uses appropriate direction.
    • Command 'F' checks <start> and <end> parameters and raises error,  if <end> is lower than <start>.
    • Added command 'H' to send out memory content in Intel HEX format.
    • Sending of LF and CR characters were reversed and are sent in the usual order - CR first and followed by LF.

  • Monitor v3

    Martin Maly05/19/2018 at 08:52 0 comments

    I have added the next version of monitor (v3).

    This version has a big feature: you can debug your software via breakpoints and register alteration.

    The whole breakpoint magic is done by RST 4 instruction. Monitor command X takes an address, save the value from this address and replace the original instruction by RST 4.

    RST 4 led to breakpoint routine, which save all registers, including SP and PC, and returns to the monitor. You can see or alter values of all registers using the command R. After all, press C to continue program...

    You can download Monitor v3 from GitHub. There is the source code as well as the bundled version with Tiny Basic (HEX or BIN). Enjoy.

View all 11 project logs

Enjoy this project?

Share

Discussions

[deleted]

[this comment has been deleted]

Martin Maly wrote 05/12/2018 at 12:12 point

I understand. I was a child in 1984 (11 years old) and I desperatedly wanted a computer, but I lived in Eastern Europe, so it was totally impossible for young boy to get one. I read all articles about computers, all schematics published in local magazines, all constructions (mostly based on 8080 back in those times) and I had a dream that someday in future I will make my own computer and write my first program and develop my very own OS... So as I wrote: I understand!

  Are you sure? yes | no

Mike Szczys wrote 05/08/2018 at 15:13 point

I opened the schematic and expected a lot more complexity. This is so clean and easy to work your way through. Great job Martin.

PS- Martin's written a couple of awesome Hackaday articles you should check out: https://hackaday.com/author/martin-maly/

  Are you sure? yes | no

Martin Maly wrote 05/08/2018 at 16:42 point

Thanks, Mike. It is a construction from my new book ("How to construct an 8bit computer in the spirit of 80's") and my goal is: "Keep it as simple as possible, but it have to work!" I want to show some basic techniques, like data bus driving, memory connection, basic address decoding, how to connect peripherals etc.  and teach readers of my book how to make a such computer, based on their own dreams.

The second computer (OMEN Bravo) uses 6502 CPU, the third (OMEN Charlie) emulates CPU in the Atmel AVR (and works a little bit like Jupiter Ace or ZX-80)...

And of course I show how to connect a simple keyboard (SBC-like, 20 keys or so), 7segment LED display or LCD display, CF card, SD card, ... Everything will be under the MIT / CC / CERN license, so I will publish it here.

  Are you sure? yes | no

Mike Szczys wrote 05/08/2018 at 16:45 point

Nice! I'm excited to see the AVR-based emulator.

  Are you sure? yes | no

Martin Maly wrote 05/08/2018 at 16:54 point

Here is my first attempt made a few months ago: https://github.com/maly/arduino8080basic - it's just an 8080 CPU emulator, TINY BASIC image in FLASH and 1.5 kB RAM for BASIC program. Easy and straightforward, just download it, compile for your Arduino and program via serial terminal... 

(Charlie is based on this construction, but it comes with TV Out, SD Card, PS/2 keyboard, ...)

  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