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.
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
;Flash a LED on SOD
;Load C000h to SP
21 00 C0
CD 13 00
CD 13 00
C3 04 00
;Delay, return to HL when done.
MVI A, 0FFh
C2 17 00
C2 16 00
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
; write a banner
MVI A,30h ; '0'
MVI A,38h ; '8'
MVI A,35h ; '5'
MVI A,0Dh ; CR
MVI A,0Ah ; LF
USART_INIT: MVI A,00h
to command mode - configure sync operation, write two dummy sync characters
; Issue reset command
; Write mode instruction - 1 stop bit, no parity, 8 bits, divide clock by 16
; Write command instruction - activate RTS, reset error flags, enable RX, activate DTR, enable TX
; Clear the data register
; Read character from USART
USART_IN: IN USART_CMD ; Read USART status
ANI 2 ; Test RxRdy bit
; Wait for the data
; Read character
; Write character to USART
USART_OUT: IN USART_CMD
ANI 1 ; Test TxRdy
; Wait until USART is ready to transmit
; Write character