8086 Microprocessor Kit

Wichit Sirichote, wichit.sirichote@gmail.com

New design with the 8086 16-bit microprocessor. Best for learning the x86 instructions and hardware.


The 8086 microprocessor kit is another kit suggested by Francesco from Italy. The kit uses 8086, real 16-bit microprocessor. This kit has 16-bit EPROM for the monitor program, two 628128 SRAM for application program, 8250 UART chip for serial port. The platform is similar to all of my designs with 10ms tick generator for timer interrupt testing. I used GAL22V10, 24-pin PLD for memory and I/O decoders. Some hardware was similar to 8088 kit. With the 16-bit data bus, all I/O devices are located in EVEN addresses. The size is a bit bigger than 8-bit kits.

The 8086 kit is the best tool for learning the low level CPU operations of the popular x86 based microcomputer. Kit is available on eBay for both DIY and prebuilt.


The kit draws much power compare to the 8-bit. I decided to put the 7805 on board the same as 8-bit kit. This kit will need heatsink on the 7805.

The 8250 UART, provides 9600 bit/s for Intel hex file downloading and serial monitor commands.
Hardware schematic (click to enlarge)

Hardware description: The 8086 CPU, U6 is minimum mode configuration. U7,U9,U10 74HC573 8-bit latch, demultiplexs 20-bit address bus.

The CPU clock is generated by U8, 8284 chip. The Xtal frequency is 14.7456MHz. CPU clock is 14.7456MHz/3 = 4.9152MHz. PCLK is 2.4576MHz for UART chip.


CPU clock measured at pin 8, 8284 chip (4:6).


Peripheral Clock, PCLK measured at pin 2, 8284 chip.

U1 is 16-bit 128kword EPROM, 27C1024. The address space for EPROM is decoded at 0xC0000-0xFFFFF. U2 is 128kB static RAM, 628128 for LOW BYTE and U3 is for HIGH BYTE. The RAM space is located at 0x00000-0x3FFFF.

With the 16-bit bus, A0 is not used for addressing. CPU will access 16-bit locations using even address only.

U11, memory and I/O spaces decoder chip is made with GAL22V10. It provides chip selected signals for memory and I/O chips.

U5, the 20-pin 89C2051 microcontroller chip produces 10ms tick. SW1 selects between 10ms tick or manual INTR button. The chip uses PCLK, 2.4576MHz from 8284 chip.

U15, 74HC541 is 8-bit input port (PORT0). PA7 is one bit for serial data RXD signal.

U13, 74HC573 is 8-bit output port (PORT2). The 8-bit output drives the 7-segment LED directly. No current limit resistor. U14 (PORT1) drives 6-digit common cathode pin. The brightness is controlled by PWM.

U16, 74HC175 is 4-bit output port (PORT3). Bit 3 is for TxD serial data stream. Bit 4 is for BEEP driver.

U17, 74HC573 is 8-bit output port for 8-bit binary number display. D15 lifts the forward biasing for proper brightness. JR1 is 16-pin socket for text LCD interface. U18, MAX232 converts TTL level to RS232 level.

Q1, KIA7042 is reset chip for power brownout.  

PLD equations : U11 is a PLD chip used to select the memory and I/O ports. The address and I/O spaces can be programmed using PLD equations. The source file of PLD equations is shown in Figure 4. The PLD compiler is ATMELWinCupl. The output file, JEDEC will be used to program the PLD chip by a PLD programmer.
Name     8086KIT ;
PartNo 22V10 ;
Date 21/4/2561 ;
Revision 01 ;
Designer Engineer ;
Company home ;
Assembly None ;
Location ;
Device P22V10 ;

/* *************** INPUT PINS *********************/
PIN 2 = A18;
PIN 3 = A19;
PIN 4 = IOM; /* 8086 M/IO* */
PIN 5 = RD;
PIN 6 = WR;
PIN 7 = A7;
PIN 8 = A8;
PIN 9 = A9;
PIN 10 = BHE;
PIN 11 = A0;
PIN 13 = A1;
PIN 1 = A10;

/* *************** OUTPUT PINS *********************/

PIN 14 = ROMCE;
PIN 15 = RAM_LOW;

PIN 16 = RAM_HI;
PIN 17 = UART;
PIN 18 = GPIO1;
PIN 19 = PORT3;
PIN 20 = LCD_E;
PIN 21 = PORT0;
PIN 22 = PORT1;
PIN 23 = PORT2;

ROMCE = !IOM # !A18 # !A19;

RAM_LOW = !IOM # A18 # A19 # A0;

RAM_HI = !IOM # A18 # A19 # BHE;

!GPIO1 = WR # IOM # A10 # A9 # A8 # A7 # A0;

PORT0 = RD # IOM # A10 # A9 # !A8 # A7 # A0;

!PORT1 = WR # IOM # A10 # A9 # !A8 # !A7 # A0;

!PORT2 = WR # IOM # A10 # !A9 # A8 # A7 # A0;

PORT3 = WR # IOM # A10 # !A9 # A8 # !A7 # A0;

UART = IOM # A10 # !A9 # !A8 # A7 # A0;

!LCD_E = (RD & WR) # IOM # !A10 # A9 # !A8 # A7;

PLD equations for 8086 kit. 

10ms System Tick: U16, 8051 compatible microcontroller is used to generate 10ms tick. The circuit runs with TTL clock from 8284 chip. The frequency is 2.4576MHz. The tick signal is output at P3.7. TP1 is 50% duty cycle with frequency of tick/2. D1 is for indicating tick signal.

The source code was written in assembly code. The sample below produces a fixed frequency 100Hz or 10ms tick.

; 10ms systemTick TIMER CHIP FOR 8086 kit
; oscillator input 2.4576MHz
$mod52
 dseg at 30h
TICK: DS 1
 cseg at 0
   jmp main
       
 org 00bh
timer0_vector:
 JMP timer0_SERVICE
           
   org 100h
;-----initialize data-----------------------------
main: mov r7,#0
   djnz r7,$ 
 mov sp,#60h ; set stack pointer to 60h
 MOV P1,#0FFH
   MOV TICK,#0
 mov tmod,#1 ; set timer mode 1
   setb et0 ; enable timer0 interrupt
   setb ea ; enable all interrupt
   setb tr0 ; run timer0
 SJMP $
; RELOAD FA2CH FOR 10MS INTERRUPT
TIMER0_SERVICE: 
           
   PUSH ACC
   ORL TH0,#0F8H
   ; ORL TL0,#07DH ; COMUPTED VALUE IS F800H 
   
   ; CPL P3.7
   
   CLR P3.7 ; 
   NOP
   ; NOP
   ; NOP
   ; NOP
   SETB P3.7
 CPL P1.6 ; CHECK TICK FREQUENCY 
 INC TICK
 MOV A,TICK
   CJNE A,#100,SKIP
   
   MOV TICK,#0
   Clr P1.7
   MOV R7,#30
   DJNZ R7,$
   SETB P1.7
SKIP: 
 
READ_MORE: POP ACC
   RETI
 
 end
Source code listing of 10ms tick generator. 

Hardware Features:

-CPU: 8086 16-bit microprocessor
-Oscillator: 8284, clock generator XTAL 14.7456MHz
-Memory: 256kB RAM, 256kB EPROM
-Memory and I/O Decoder chip: Programmable Logic Device GAL22V10
-Display: high brightness 6-digit 7-segment LED
-Keyboard: 32 keys
-RS232 port: 8250 UART 9600 bit/s 8n1
-Debugging LED: 8-bit GPIO1 LED at location 00H
-Tick: 10ms tick produced by 89C2051 for time trigger experiment
-Text LCD interface: direct CPU bus interface text LCD
-Brownout reset: KIA7042 reset chip for power brownout reset
-Power consumption: 500mA @9.0VDC AC adapter
-Expansion header: 40-pin header
-Mechanical: 178x184 mm size, 250 Grams (fully assembled)

Monitor commands features:

-Enter 8086 instructions using hex code directly
-Test code running with single step or break point
-User registers for status capturing
-Insert/delete byte
-8/16 bit offset calculation
-Intel hex file downloading using 9600 bit/s RS232 port.

The kit is connected to terminal by hitting key ENTER the terminal automatically. Serial port format is 9600 bit/s 8n1. To download Intel hex file, type key "L". Then open Send the selected hex file.

Write your own monitor program:

Monitor program was developed with Micro-C for 8086. The memory model was special ROM model. All initialized data are copied from ROM to RAM. Start location is $A000 with CS = $F000. Physical location is $FC000.
Monitor source code is available for learning and customizing. User can modify the source code and reprogram the EPROM.

The monitor EPROM is 16-bit version, 40 pins ceramic DIP. I used MiniproTL866CS programmer.

The hex file is 8-bit version but for 16-bit EPROM, we must relocate it to location 10000.

With Big letter LCD, 20x2 lines.

Sample code for testing interrupt with simple vector byte FF on the data bus using 8-bit pull up resistor. Select SW1 to 10ms tick position.

 0000                      CPU     "8086.TBL"      ; CPU TABLE
0000 HOF "INT8" ; HEX OUTPUT FORMAT

03FC org 3fch

03FC 00 dfb service_timer&0ffh ; IP = 0500
03FD 05 dfb service_timer>>8

03FE 00 dfb 0 ; CS = 0000
03FF 00 dfb 0

0400 org 400h

0400 FB sti ; enable interrupt
0401 EBFE jmp $ ; jmp here

0500 org 500h

0500 service_timer

0500 FEC4 inc ah
0502 80FC64 cmp ah,100
0505 7506 jnz skip
0507 B400 mov ah,0
0509 FEC0 inc al
050B E600 out 0,al

050D skip
050D CF iret

0000 end

PARTS LIST

Semiconductors

U1 AM27C1024, 16-bit 256kB EPROM
U3,U2 HM628128A, 128kB SRAM
U4 74HC14
U5 AT89C2051, 8-bit preprogrammed microcontroller
U6 80C86MIN, 16-bit Microprocessor
U7,U9,U10,U14,U15,U18 74HC573, 8-bit Latch
U8 8284, clock generator
U11 GAL22V10B, programmable logic device
U13,U12 LTC-4727JR, 7-segment LED
U16 74HC541, 8-bit tristate buffer
U17 74LS175, 4-bit latch
U19 8250, UART
U20 MAX232A, RS232 voltage converter
U22 LM7805/TO_5, +5V voltage regulator

D1,D2,D3,D4,D5,D6,D7,D8, LED
D9
D10 1N5227A
D11 POWER
D13 TVS15V

Q1 KIA7042
Q2 BC557

Resistors (all resistors are 1/8W +/-5%)

R1 RESISTOR SIP 9
R2 680
R3,R6,R7,R8,R9,R16 10K
R4,R5 510
R10 100
R14,R11 10k RESISTOR SIP 9
R12 4.7k
R13 20
R15 5
R17 1k

Capacitors

C1,C24,C25 100uF
C2,C4,C5,C8,C9,C10 10uF
C3,C6,C11 100nF
C7 10uF 10V
C12,C13,C14,C17,C18,C19, 0.1uF
C20,C21
C15 10uF 16V
C16 1000uF25V
C23,C22 0.1uF

Additional parts

JP1 HEADER 20X2
JR1 CONN RECT 16
J1 DC Input
LS1 SPEAKER

SW1 SW MAG-SPDT
SW2 RESET
S1 INTR
S2,S3,S4,S5,S6,S7,S8,S9, SW PUSHBUTTON
S10,S11,S12,S13,S14,S15,
S16,S17,S18,S19,S20,S21,
S22,S23,S24,S25,S26,S27,
S28,S29,S30,S31
TP1 +5V
TP2 GND

VB1 SUB-D 9, Male (cross cable)
Y1 14.7456MHz

PCB double side plate through hole
LED cover Clear RED color acrylic plastic
Keyboard sticker printable SVG file

 

Kit information, PayPal and Bitcoin are welcome, please contact Wichit Sirichote

Download Hardware schematic, Quick Start , PLD files, monitor source code and hex file.


8086 User's manual rev 1.0 January 2020

What's New?

July, 2023, updated monitor program hex file and source code, x86d.hex, mon86b.c restored user flag for single stepping.

December 6, 2021 Program examples for 8086 kit, Perfect number and LED rolling by Jason M. Zinserling


<

Last updated January, 2022
June, 2018