OpenCores
URL https://opencores.org/ocsvn/am9080_cpu_based_on_microcoded_am29xx_bit-slices/am9080_cpu_based_on_microcoded_am29xx_bit-slices/trunk

Subversion Repositories am9080_cpu_based_on_microcoded_am29xx_bit-slices

[/] [am9080_cpu_based_on_microcoded_am29xx_bit-slices/] [trunk/] [readme.txt] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 zpekic
Goal:
2
 
3
Implement i8080 compatible processor code in VHDL, using bit-slice technology and microcoding.
4
 
5
Background:
6
 
7
Retro-computing is fun and rich in learning. One fascinating aspect is bit-slice technology popular in 1970-ies, which was naturally combined with microcoded processor architectures. In some ways, it was another take on the idea of "programmable" logic, within the limits of the day. Researching the era, I stumbled upon following article:
8
 
9
https://en.wikichip.org/w/images/7/76/An_Emulation_of_the_Am9080A.pdf
10
 
11
AMD engineers describe building an "Am9080" CPU (i8080 second-sourced) using popular Amd29XX bit-slice product. The description was very detailed, including circuit schemas and microcode, and it seemed like a fun project to "reverse-engineer" (given that the article was written 30+ years ago, hoping not to run into any copyright issues...) and re-implement in VHDL.
12
 
13
Debugging:
14
 
15
Very simple hardware debugging was used - a single step circuit combined with key signals from the guts of the processor (such as microinstruction address and data word, macro instruction register, register contents etc.) being exposed through 16-bit "debug" bus to LED display. Simple "test" assembler programs executed allowed instruction execution to be observed clock by clock cycle and fixed. The original microcode listing contained a few bugs that prevented for example RST n to function well when presented at INTA cycle.
16
 
17
Testing:
18
 
19
Instead of boring test bench, I decided to write an equivalent of once popular "evaluation system" boards, containing:
20
 
21
-2 kB ROM
22
-256 bytes RAM
23
-2 ACIA (UART)
24
-parallel I/O port
25
-interrupt controller
26
-varible clock circuitry (from 1Hz to 25MHz)
27
 
28
Such system boards came with basic bootstrap loaders and monitors. The fact that the system can run and execute (most) commands of Altair monitor is encouraging, and sufficient to merit "beta" status. This is how it looks in "action": https://imgur.com/a/yNfA8
29
 
30
 
31
Hardware used:
32
 
33
* Micronova Mercury FPGA development board https://www.micro-nova.com/mercury/
34
* Mercury baseboard https://www.micro-nova.com/mercury-baseboard/
35
* Parallax USB2SER development board https://www.parallax.com/product/28024
36
 
37
Development tools:
38
 
39
* Xilinx ISE 14.7 (nt) - free version
40
 
41
* Zmac 8080/Z80 assembler for PC http://48k.ca/zmac.html
42
Used to assemble the boot.asm and slighly changed AltMon.asm into *.hex files which are then loaded to 2 ROMs during VHDL compile
43
 
44
* Parallax Propeller IDE serial terminal
45
Probably most other generic serial terminal window programs can be used
46
 
47
Software and code (re)used:
48
 
49
* Altair monitor program by Mike Douglas http://altairclone.com/downloads/roms/Altair%20Monitor/
50
Minimal changes to assemble to address 0x0400 etc.
51
 
52
* VHDL uart-for-fpga by Jakub Cabal (https://github.com/jakubcabal/uart-for-fpga)
53
The "ACIA" component wraps it to expose to CPU a "device" somewhat similar to classic MC6850 ACIA
54
 
55
* VHDL Am2901 by Amr Nasr (https://github.com/Amrnasr/AM2901)
56
In current iteration this is replaced by my own simpler VHDL Am2901c, but this was the inspiration
57
 
58
* VHDL Am2909 by Stanislaw Deniziak (http://achilles.tu.kielce.pl/Members/sdeniziak/studia-magisterskie/mikroprogramowanie-ii/materia142y-pomocnicze/am2909.vhd/view)
59
 
60
Possible next steps:
61
 
62
- run 8080 instruction verification program
63
- use audio in/out ports on baseboard for casette tape "mass storage" :-)
64
- port to other FPGA boards with more resources, possibly creating a CP/M microcomputer
65
- implement 8085 instruction set
66
- use in other projects
67
 
68
Known problems:
69
 
70
- interrupt ack only works for RST n instructions, not CALL. However, few if any 8080 systems used the latter
71
- the processor implementation is clunky - clean "RTL" state machine would be much more optimized and smaller / faster than many components and subcomponents I had to write to replicate 74XX-type logic as individual "ICs". However it is fun to see "guts" of processors as they used to be in that era.
72
 
73
It would be exciting to see if somebody could use this core in their own projects. If so, shoot me an email to zpekic@hotmail.com.
74
 
75
Latest version of the source code (under appropriate license) is available at https://github.com/zpekic/sys9080

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.