Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| boards:sbc:minimax8085:start [2022/09/17 13:28] – Revision from 2022-09-17 | boards:sbc:minimax8085:start [2026/06/15 12:32] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | /* Imported from Wayback Machine | ||
| + | | ||
| + | | ||
| + | | ||
| + | */ | ||
| + | |||
| + | ====== Introduction ====== | ||
| + | |||
| + | {{boards: | ||
| + | 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/ | ||
| + | |||
| + | NCB85 was the closest, but it doesn' | ||
| + | |||
| + | 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/ | ||
| + | |||
| + | ====== Specifications ====== | ||
| + | |||
| + | 80C85A or 8085A CPU, 3.072 MHz or 4.9152 MHz CPU clock frequency | ||
| + | |||
| + | 82C51A or 8251A USART for console connection | ||
| + | |||
| + | 32 KiB of battery backed SRAM | ||
| + | |||
| + | Up to 32 KiB of ROM. EEPROM, UV EPROM or Flash ROM memory is supported | ||
| + | |||
| + | 40-pin extension bus connector, including most of 8085 signals and demultiplexed data and address buses | ||
| + | |||
| + | ====== Hardware Documentation ====== | ||
| + | |||
| + | ===== Design Files ===== | ||
| + | |||
| + | [[https:// | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | |||
| + | ===== Design Description ===== | ||
| + | |||
| + | The MiniMax8085 is based on the Intel 8085A CPU (U1). The 74*573 octal latch (U6) is used to demultiplex the lower 8-bit of address and data bus.\\ | ||
| + | The board uses the Intel 8251A USART (U2) for serial input / output, for example for connecting a console. The MAX232A RS-232 driver/ | ||
| + | The 62256 32 KiB SRAM (U4) is used for the system RAM. The RAM is battery backed using the DS1210 NVRAM controller (U8).\\ | ||
| + | The board supports a variety of ROM options (U3): The 28C256 EEPROM; UV EPROMs, such as 27C256 (32 KiB), 27C128 (16 KiB), and 27C64 (8 KiB); or The 29C256 Flash ROM ICs. Normally the ROM is mapped to the CPU memory beginning from the address **// | ||
| + | The GAL16V8 simple programmable logic device (U5) implements all the required “glue” logic functions: | ||
| + | |||
| + | Address decode and chip select for the USART. The default USART I/O address is **// | ||
| + | |||
| + | Clock divider that divides the CPU clock to obtain USART transmit and receive clock. The divisor value depends on the CPU speed. Fuse maps with divide by 10 and 20, divide by 13 and 26, and divide by 16 and 32 ratios are provided to support common 8085A CPU clocks: 3.072 MHz, 4 MHz, 4.9152 MHz, 6.144 MHz, and 8 MHz. | ||
| + | |||
| + | Address decode and chip select for the ROM and SRAM. The address decode logic include additional /SWAP_MEM input, which by default is configured to swap address mapping of ROM and RAM. | ||
| + | |||
| + | Please refer to the **Simple Programmable Logic Device** section below for more details regarding the SPLD configuration and programming.\\ | ||
| + | The MiniMax8085 includes a 40-pin extension connector (P4), that features the 8085A address and data buses, and control signals. Please refer to the Jumpers and Connectors section below for the connector pinout and signals description. | ||
| + | |||
| + | ===== Jumpers and Connectors ===== | ||
| + | |||
| + | ==== Jumpers JP1 and JP2 - ROM Configuration ==== | ||
| + | |||
| + | These jumpers configure how pins 1 and 27 of the ROM IC (U3) are connected. The jumper settings are printed on the bottom side of the PCB. | ||
| + | |||
| + | ^ROM Type ^Jumper JP1 Position - ROM Pin 1 Connection | ||
| + | |27C128, 27C64, 27128, 2764|2-3 - pin 1 connected to VCC |1-2 - pin 27 connected to VCC | | ||
| + | |27C256 | ||
| + | |28C256 | ||
| + | |29C256 | ||
| + | |||
| + | ==== Jumper JP3 - USART Clock Frequency ==== | ||
| + | |||
| + | JP3 sets the USART input clock frequency | ||
| + | |||
| + | ^Jumper Position^Description | ||
| + | |1-2 |\\ 307.2 kHz - 19200 bps (default) or 2400 bps, depending on USART configuration\\ 614.4 kHz - (For 6.144 MHz and 8 MHz CPUs) 38400 bps (default) or 4800 bps, depending on USART configuration| | ||
| + | |2-3 |\\ 153.6 kHz - 9600 bps (default) or 1200 bps, depending on USART configuration\\ 307.2 kHz - (For 6.144 MHz and 8 MHz CPUs) 19200 bps (default) or 2400 bps, depending on USART configuration | | ||
| + | |||
| + | ==== Connector P1 - POWER ==== | ||
| + | |||
| + | Connect regulated +5V power supply to this connector. | ||
| + | |||
| + | ^Pin ^Description | ||
| + | |Tip (the inner contact)|Positive terminal - +5V | | ||
| + | |Barrel / Sleeve | ||
| + | |||
| + | ==== Connector P2 - SIO ==== | ||
| + | |||
| + | P2 exposes the 8085A CPU serial input and output lines. | ||
| + | |||
| + | ^Pin^Description | ||
| + | |1 |Ground | ||
| + | |2 |SOD / Serial Output Data| | ||
| + | |3 |SID / Serial Input Data | | ||
| + | |||
| + | ==== Connector P3 - SERIAL ==== | ||
| + | |||
| + | P3 is the serial port connector. It is normally used for connecting a console or terminal. P3 uses pinout similar to that of IBM AT serial port (with some signals missing). Use a null modem cable to connect to a PC. | ||
| + | |||
| + | ^Pin Number^Signal Name ^Description and Notes ^ | ||
| + | |1 | ||
| + | |2 | ||
| + | |3 | ||
| + | |4 | ||
| + | |5 | ||
| + | |6 | ||
| + | |7 | ||
| + | |8 | ||
| + | |9 | ||
| + | |Shield | ||
| + | |||
| + | ==== Connector P4 - EXTENSION ==== | ||
| + | |||
| + | P4 exposes the 8085A CPU address and data buses, and control signals. | ||
| + | |||
| + | ^Pin | ||
| + | |1 | ||
| + | |2 | ||
| + | |3 | ||
| + | |4 | ||
| + | |5 | ||
| + | |6 | ||
| + | |7 | ||
| + | |8 | ||
| + | |9 | ||
| + | |10 |A8 | ||
| + | |11 |A11 |Address bus - bit 11 output | ||
| + | |12 |A10 |Address bus - bit 10 output | ||
| + | |13 |A13 |Address bus - bit 13 output | ||
| + | |14 |A12 |Address bus - bit 12 output | ||
| + | |15 |A15 |Address bus - bit 15 output | ||
| + | |16 |A14 |Address bus - bit 14 output | ||
| + | |17 |AD1 |Address/ | ||
| + | |18 |AD0 |Address/ | ||
| + | |19 |AD3 |Address/ | ||
| + | |20 |AD2 |Address/ | ||
| + | |21 |AD5 |Address/ | ||
| + | |22 |AD4 |Address/ | ||
| + | |23 |AD7 |Address/ | ||
| + | |24 |AD6 |Address/ | ||
| + | |25 |/RD |Read control output | ||
| + | |26 |IO/M |I/O / memory cycle status output | ||
| + | |27 |/WR |Write control output | ||
| + | |28 |RESET | ||
| + | |29 |A1 | ||
| + | |30 |A0 | ||
| + | |31 |A3 | ||
| + | |32 |A2 | ||
| + | |33 |A5 | ||
| + | |34 |A4 | ||
| + | |35 |A7 | ||
| + | |36 |A6 | ||
| + | |37, 38|VCC | ||
| + | |39, 40|GND | ||
| + | |||
| + | Connector P5 -VBAT | ||
| + | |||
| + | P5 is used to connect the battery for the SRAM backup. A 3-volt lithium cell, or 2-3 alkaline batteries connected in series can be used for this purpose. | ||
| + | |||
| + | ^Pin^Description | ||
| + | |1 |Battery voltage, 3V - 5V| | ||
| + | |2 |Ground | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Simple Programmable Logic Device ===== | ||
| + | |||
| + | ==== SPLD Files and Programming ==== | ||
| + | |||
| + | As described above, the MiniMax8085 SBC uses a GAL16V8 simple programmable logic device (SPLD) to implement all the necessary glue logic. The SLPD images are available in [[https:// | ||
| + | Mini8085-3.072MHz.pld - SPLD source code for a system with CPU running on 3.072 MHz or 6.144 MHz* clock frequency\\ | ||
| + | Mini8085-3.9936MHz.pld - SPLD source code for a system with CPU running on 3.9936 MHz (4 MHz) or 8 MHz clock frequency\\ | ||
| + | Mini8085-4.9152MHz.pld - SPLD source code for a system with CPU running on 4.9152 MHz clock frequency\\ | ||
| + | Mini8085-3.072MHz.jed - SPLD fuse map for a system with CPU running on 3.072 MHz or 6.144 MHz* clock frequency\\ | ||
| + | Mini8085-3.9936MHz.jed - SPLD fuse map for a system with CPU running on 3.9936 MHz (4 MHz) or 8 MHz clock frequency\\ | ||
| + | Mini8085-4.9152MHz.jed - SPLD fuse map for a system with CPU running on 3.072 MHz clock frequency\\ | ||
| + | * When used with 6.144 MHz or 8 MHz CPU clock frequency, the USART clock will be doubled. So that it will work on 19200 bps instead of 9600 bps, or 38400 bps instead of 19200 bps. | ||
| + | |||
| + | The SPLD IC has to be programmed using an EPROM programmer, such as a popular MiniPro TL866CS programmer. The process is very similar to programming regular EPROM ICs: | ||
| + | |||
| + | Select IC manufacturer: | ||
| + | |||
| + | Select the SPLD type: GAL16V8 or ATF16V8 | ||
| + | |||
| + | Load the SPLD fuse map - pick either Mini8085-3.072MHz.jed or Mini8085-4.9152MHz.jed file, depending on the CPU frequency (or the crystal resonator you are using). | ||
| + | |||
| + | Program the SPLD. You might want to disable “lock” option, so that SPLD will remain readable after the programming. | ||
| + | |||
| + | ==== SPLD Implementation ==== | ||
| + | |||
| + | The Mini8085-3.072MHz.pld and Mini8085-4.9152MHz.pld files contain the SPLD source code, that describes the logic equations defining the desired SPLD functionality. The source code can be divided into the following sections: | ||
| + | |||
| + | === Header === | ||
| + | |||
| + | This part contains the name of the SPLD and the project name: | ||
| + | |||
| + | <code code> | ||
| + | GAL16V8 | ||
| + | 8085Mini | ||
| + | </ | ||
| + | |||
| + | === Pin Names Definition === | ||
| + | |||
| + | This part assigns names to the SPLD pins. The names order corresponds to the pin numbers: the first line assigns names to the pins 1 - 10, and the second line to the pins 11 - 20. Note that several pins have fixed functions: pin 1 - Clock, pin 10 - GND, pin 11 - /OE, and pin 20 - VCC. Also pins 2 - 9 can be used as inputs only, while pins 12 - 19 can be used as either inputs or outputs. | ||
| + | |||
| + | <code code> | ||
| + | Clock IOM A15 SWAPMEM A7 A6 A5 A4 A3 GND | ||
| + | /OE | ||
| + | </ | ||
| + | |||
| + | === Logic Equations - USART Clock Frequency Divider === | ||
| + | |||
| + | The frequency divider is implemented as a synchronous counter, where all the outputs change their state simultaneously with the rising edge of the Clock signal. To achieve this, the SPLD is configured in registered mode (this is done automatically, | ||
| + | |||
| + | Mini8085-4.9152MHz.pld: | ||
| + | |||
| + | <code code> | ||
| + | Q0.R = /Q0 | ||
| + | |||
| + | Q1.R = Q1 * /Q0 | ||
| + | + /Q1 * Q0 | ||
| + | |||
| + | Q2.R = Q2 * /Q1 | ||
| + | | ||
| + | + /Q2 * Q1 * Q0 | ||
| + | |||
| + | Q3.R = Q3 * /Q2 | ||
| + | | ||
| + | | ||
| + | + /Q3 * Q2 * Q1 * Q0 | ||
| + | |||
| + | Q4.R = Q4 * /Q3 | ||
| + | | ||
| + | | ||
| + | | ||
| + | + /Q4 * Q3 * Q2 * Q1 * Q0 | ||
| + | </ | ||
| + | |||
| + | Mini8085-3.072MHz.pld: | ||
| + | |||
| + | <code code> | ||
| + | Q0.R = /Q2 * /Q0 | ||
| + | |||
| + | Q1.R = /Q2 * /Q1 * Q0 | ||
| + | + /Q2 * Q1 * /Q0 | ||
| + | |||
| + | Q2.R = /Q2 * Q1 * Q0 | ||
| + | |||
| + | Q3.R = Q3 * /Q2 | ||
| + | + /Q3 * Q2 | ||
| + | |||
| + | Q4.R = Q4 * /Q3 | ||
| + | | ||
| + | + /Q4 * Q3 * Q2 | ||
| + | </ | ||
| + | |||
| + | === Logic Equations - Memory Chip Select === | ||
| + | |||
| + | These equations activate /ROMCS and /RAMCS signals:\\ | ||
| + | The /ROMCS is active (LOW) when 8085 IO/M signal is LOW, indicating a memory access, and either A15 is LOW (lower 32 KiB of memory address space) and SWAPMEM is inactive (HIGH), or then A15 is HIGH (upper 32 KiB of memory address space), and SWAPMEM is active (LOW).\\ | ||
| + | The /RAMCS is active (LOW) when 8085 IO/M is LOW, indicating a memory access, and either A15 is HIGH (upper 32 KiB of memory address space) and SWAPMEM is inactive (HIGH), or then A15 is LOW (lower 32 KiB of memory address space), and SWAPMEM is active (LOW). | ||
| + | |||
| + | <code code> | ||
| + | /ROMCS = /IOM * SWAPMEM * /A15 | ||
| + | + /IOM * /SWAPMEM * A15 | ||
| + | |||
| + | /RAMCS = /IOM * SWAPMEM * A15 | ||
| + | + /IOM * /SWAPMEM * /A15 | ||
| + | </ | ||
| + | |||
| + | === Logic Equations - USART Chip Select === | ||
| + | |||
| + | This equation activates the /USARTCS signal. It is active (LOW) when 8085 IO/M signal is HIGH, indicating an I/O port access, address lines A7-A4 are LOW, and address line A3 is high. So that USART is selected using 00001xxxb addresses (8h-0Fh). | ||
| + | |||
| + | <code code> | ||
| + | /USARTCS = IOM * /A7 * /A6 * /A5 * /A4 * A3 | ||
| + | </ | ||
| + | |||
| + | ===== Bill of Materials ===== | ||
| + | |||
| + | Link to the project on Mouser.com - View and order all components except of the 8085A CPU, the 8251A USART, and the PCB.\\ | ||
| + | Link to the project on OSHPark.com - View and order the MiniMax8085 PCB. | ||
| + | |||
| + | ^Component Type^Reference | ||
| + | |PCB | ||
| + | |Capacitor | ||
| + | | |C12 |1 uF ceramic, 5.08 mm lead spacing | ||
| + | | |C13 |10 uF ceramic, 5.08 mm lead spacing | ||
| + | | |C14, C15 |33 pF ceramic, 5.08 mm lead spacing | ||
| + | |Connector | ||
| + | | |P2, JP1 - JP3|3×1 pin header | ||
| + | | |P3 | ||
| + | | |P4 | ||
| + | | |P5 |2 pin header with friction lock |1 | ||
| + | |Diode | ||
| + | |LED | ||
| + | |Resistor | ||
| + | | |R2 |470 Ohm, 1/4 W | ||
| + | | |R3 |100 kOhm, 1/4 W |1 | ||
| + | |Resistor Array|RR1, RR2 |4.7 kOhm, 6 pin, bussed resistor array | ||
| + | |Switch | ||
| + | |Crystal | ||
| + | |IC |U1 | ||
| + | | |U2 | ||
| + | | |U3 | ||
| + | | |U4 | ||
| + | | |U5 | ||
| + | | |U6 | ||
| + | | |U7 | ||
| + | | |U8 | ||
| + | |IC Socket | ||
| + | | |U2 - U4 |28 pin 600 mil DIP socket | ||
| + | | |U5, U6 |20 pin 300 mil DIP socket | ||
| + | | |U7 |16 pin 300 mil DIP socket | ||
| + | | |U8 |8 pin 300 mil DIP socket | ||
| + | |||
| + | ==== Replacement Notes ==== | ||
| + | |||
| + | CMOS parts are preferred for lower power consumption. | ||
| + | |||
| + | 80C85 (CPU) - Any type in DIP-40 package will do. Use 6.144 MHz crystal for 3 MHz parts. Such parts usually don't have any numeric suffix in the part name. For example Intel P8085AH is a 3 MHz part, while Intel P8085AH-2 is a 5 MHz part. | ||
| + | |||
| + | CMOS parts: MSM80C85A or M80C85A (OKI), CA80C85B (Calmos, Tundra), IM1821VM85A (Soviet/ | ||
| + | |||
| + | NMOS parts: P8085A (Intel, AMD), P8085AH, P8085AH-2, P8085AH-1 (Intel, newer HMOS process, 3 MHz, 5 MHz, and 6 MHz parts respectively), | ||
| + | |||
| + | 80C51A (USART) - Any type in DIP-28 package. | ||
| + | |||
| + | 28C256 (EEPROM, EPROM) - The board support a wide variety of ROMs. Note that JP1 and JP2 jumpers need to be set according to the ROM type. | ||
| + | |||
| + | 28C256 EEPROM: Atmel/ | ||
| + | |||
| + | CMOS UV EPROMs: 27C256 UV EPROMs (32 KiB), 27C128 UV EPROMs (16 KiB), 27C64 UV EPROMs (8 KiB) | ||
| + | |||
| + | NMOS UV EPROMs: 27256 UV EPROMs (32 KiB), 27128 UV EPROMs (16 KiB), 2764 UV EPROMs (8 KiB) | ||
| + | |||
| + | 62256-like NVRAM (32 KiB) | ||
| + | |||
| + | AT29C256 Flash ROM | ||
| + | |||
| + | 62256 (SRAM) - A low-power CMOS SRAM 32KiB, in DIP-28 wide (600 mils) packages. Here are some common parts: | ||
| + | |||
| + | In production: AS6C62256 (Alliance Memory), CY62256N (Cypress) | ||
| + | |||
| + | Old stock: HM62256LP (Hitachi), HY62256 (Hyundai), KM62256 (Samsung), UM62256 (UMC) | ||
| + | |||
| + | GAL16V8 (SPLD): Needs to be in DIP-20 package | ||
| + | |||
| + | In production: Atmel/ | ||
| + | |||
| + | Old stock: Lattice GAL16V8 (any modification) | ||
| + | |||
| + | iCT PEEL16V8 might work, but it is not supported by common MiniPro TL866CS programmer | ||
| + | |||
| + | 74HC573 (Octal D Latch with 3-STATE Outputs) - Can be replaced with any 74-series family that works with 5V power supply voltage. | ||
| + | |||
| + | CMOS parts: 74HC573, 74ACT573, 74HCT573, 74AHCT573, 74AC573, 74ACT573 | ||
| + | |||
| + | TTL parts: 74ALS573, 74F573, 74LS573 | ||
| + | |||
| + | MAX232A (RS-232 Drivers/ | ||
| + | |||
| + | Maxim: MAX232A, MAX202, MAX232 | ||
| + | |||
| + | Texas Instruments: | ||
| + | |||
| + | Exar: SP232 | ||
| + | |||
| + | Analog Devices: ADM202, ADM232 | ||
| + | |||
| + | Intersil: HIN202, HIN232 | ||
| + | |||
| + | LED D2 - Can be replaced by a 3 mm LED with pins bent at 90 degrees. | ||
| + | |||
| + | ===== Firmware and Software ===== | ||
| + | |||
| + | ==== Monitor ==== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== Tiny BASIC ==== | ||
| + | |||
| + | The famous Tiny BASIC 2.0 written by Li-Chen Wang and modified by Roger Rauskolb, runs on MiniMax8085 with very little modifications: | ||
| + | For your enjoyment the original Tiny BASIC article from the December 1976 issue of Interface Age magazine - [[https:// | ||
| + | |||
| + | ====== Frequently Asked Questions and Troubleshooting ====== | ||
| + | |||
| + | Q: Board doesn' | ||
| + | |||
| + | A1: Make sure that the ROM type is configured properly using JP1 and JP2 jumpers. | ||
| + | |||
| + | A2: The firmware configures USART with RTS/CTS flow control enabled. Check that your terminal emulation software has RTC/CTS flow control enabled, and that you're using a null-modem cable with RTS and CTS signals on one side connected to CTS and RTS signals on the other side. Alternatively you can connect pin 7 (RTS) and pin 8 (CTS) on the P3 connector, and use a three wire serial cable with TX, RX, GND signals only. | ||
| + | |||
| + | Q: Board works unreliably, gets randomly stuck when board is touched, requires reset every so often. | ||
| + | |||
| + | A: Assuming that DS1210 is installed, make sure you have 3V-4.5V battery connected to connector P5 (observe polarity). Alternatively you can put a jumper across P5, or remove DS1210 and install jumpers instead as indicated on the PCB. | ||
| + | |||
| + | ====== References ====== | ||
| + | |||
| + | Roman Fülek' | ||
| + | |||
| + | GitHub: https:// | ||
| + | |||
| + | Roman' | ||
| + | |||
| + | Martin' | ||
| + | |||
| + | Write-up: http:// | ||
| + | |||
| + | Roman' | ||
| + | |||
| + | MON85 updated by Roman Borik: http:// | ||
| + | |||
| + | Glitch Works 8085 SBC | ||
| + | |||
| + | 8085 Microprocessor Projects: http:// | ||
| + | |||
| + | GitHub: https:// | ||
| + | |||
| + | Coffee, bits and bikes | ||
| + | |||
| + | Mini85v2: http:// | ||
| + | |||
| + | Ken Shirriff' | ||
| + | |||
| + | Inside the ALU of the 8085 microprocessor: | ||
| + | |||
| + | Notes on the PLA on the 8085 chip: http:// | ||
| + | |||
| + | 8085 instruction set: the octal table: http:// | ||
| + | |||
| + | Silicon reverse engineering: | ||
| + | |||
| + | The 8085's register file reverse engineered: http:// | ||
| + | |||
| + | Reverse-engineering the 8085's ALU and its hidden registers: http:// | ||
| + | |||
| + | Reverse-engineering the flag circuits in the 8085 processor: http:// | ||
| + | |||
| + | Reverse-engineering the 8085's decimal adjust circuitry: http:// | ||
| + | |||
| + | 8080 Opcodes: http:// | ||
| + | |||
| + | The Macroassembler AS - A macroassembler supporting Intel 8085: http:// | ||
| + | |||
| + | GALasm 2.1 - Portable GAL Assembler: https:// | ||
| + | |||
| + | \\ | ||
