Home‎ > ‎Sergey's Projects‎ > ‎

Minimal 8085 Single Board Computer - MiniMax8085


The MiniMax8085 project has been brewing for almost three years. Sometime in the spring of 2014 my kids and I visited local a surplus store, and my kids found some Intel 8000 series parts in the kids fill-your-bucket area. Among these ICs were there: an 8085 CPU, an 8155 RAM with I/O ports and timer, a couple of 8255 PPIs, an 8282 latch, and some 27C128 UV EPROMs. It looked like a good start for an 8085 based computer that can be used to teach my kids some computer design and programming basics.
I wanted the project to be simple to build, with a minimal number of components, but yet to be a fully functional single board computer (e.g. to include the memory and an input/output device, for example a UART) with an extension bus. I checked the Internet for existing homebrew 8085 computers and found Roman Fülek's NCB85 and NCB85v2 projects, and Glitch Works 8085 projects. While I liked these projects, they didn't quite meet my project design goals:
  • NCB85 was the closest, but it doesn't have an extension bus
  • NCB85v2 is a little bit too complicated for my needs
  • Glitch Works 8085 project didn't have an on-board UART
The resulting design includes 8085 CPU, 8251 USART, 32 KiB SRAM, 32 KiB or 16 KiB ROM. It uses a GAL16V8/ATF16V8 programmable logic device instead of discrete logic ICs for the address decode and the frequency divider for USART. It reduces the number of components, allows for tweaking the configuration by re-programming the PLD, and provides an introduction to the programmable logic devices.

Design Description


Test Programs

Minimal Test Code - Blink an LED 

The code below blinks an LED connected to 8085's SOD output.
The code is borrowed from Glitch Works 8085 SBC project: http://www.glitchwrks.com/2010/09/02/8085-sbc

;Assembly                                 Address    Opcode

;Flash a LED on SOD

;Load C000h to SP
START:          LXI     H,0C000h        ; 0000       21 00 C0
                SPHL                    ; 0003       F9

FLASH:          MVI     A,0C0h          ; 0004       3E C0
                SIM                     ; 0006       30
                CALL    DELAY           ; 0007       CD 13 00
                MVI     A,40h           ; 000A       3E 40
                SIM                     ; 000C       30
                CALL    DELAY           ; 000D       CD 13 00
                JMP     FLASH           ; 0010       C3 04 00

;Delay, return to HL when done.
DELAY:          MVI     A, 0FFh         ; 0013       3E FF
                MOV     B,A             ; 0015       47
PT1:            DCR     A               ; 0016       3D
PT2:            DCR     B               ; 0017       05
                JNZ     PT2             ; 0018       C2 17 00
                CPI     00h             ; 001B       FE 00
                JNZ     PT1             ; 001D       C2 16 00
                RET                     ; 0020       C9

USART Test Code

This code prints "8085" to the serial port, and then echoes received characters.

; USART registers
USART_DATA     EQU     08h
USART_CMD      EQU     09h

START:         LXI     H,0C000h
               CALL    USART_INIT

; write a banner
               MVI     A,38h           ; '8'
               MOV     C,A
               CALL    USART_OUT
               MVI     A,30h           ; '0'
               MOV     C,A
               CALL    USART_OUT
               MVI     A,38h           ; '8'
               MOV     C,A
               CALL    USART_OUT
               MVI     A,35h           ; '5'
               MOV     C,A
               CALL    USART_OUT
               MVI     A,0Dh           ; CR
               MOV     C,A
               CALL    USART_OUT
               MVI     A,0Ah           ; LF
               MOV     C,A
               CALL    USART_OUT

               CALL    USART_IN
               MOV     C,A
               CALL    USART_OUT
               JMP     LOOP

USART_INIT:    MVI     A,00h
; Set USART to command mode - configure sync operation, write two dummy sync characters
               OUT     USART_CMD
               OUT     USART_CMD
               OUT     USART_CMD
; Issue reset command
               MVI     A,40h
               OUT     USART_CMD
; Write mode instruction - 1 stop bit, no parity, 8 bits, divide clock by 16
               MVI     A,4Eh
               OUT     USART_CMD
; Write command instruction - activate RTS, reset error flags, enable RX, activate DTR, enable TX
               MVI     A,37h
               OUT     USART_CMD
; Clear the data register
               IN      USART_DATA

; Read character from USART
USART_IN:      IN      USART_CMD       ; Read USART status
               ANI     2               ; Test RxRdy bit
               JZ      USART_IN        ; Wait for the data
               IN      USART_DATA      ; Read character

; Write character to USART
               ANI     1               ; Test TxRdy
               JZ      USART_OUT       ; Wait until USART is ready to transmit
               MOV     A,C
               OUT     USART_DATA      ; Write character


Sergey Kiselev,
Mar 24, 2017, 10:23 AM
Sergey Kiselev,
Mar 24, 2017, 10:28 AM
Sergey Kiselev,
Mar 8, 2017, 1:50 PM
Sergey Kiselev,
Mar 7, 2017, 2:36 PM
Sergey Kiselev,
Mar 8, 2017, 1:50 PM
Mini8085 - KiCad - 1.0.zip
Sergey Kiselev,
Mar 7, 2017, 2:36 PM
Sergey Kiselev,
Mar 7, 2017, 2:36 PM