OpenCores
URL https://opencores.org/ocsvn/cpu8080/cpu8080/trunk

Subversion Repositories cpu8080

[/] [cpu8080/] [trunk/] [project/] [cpu8080.txt] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 samiam9512
Intel 8080 CPU Verilog core
2
 
3
2006/9/12
4
 
5
PROJECT:  8080 CPU
6
LANGUAGE: VERILOG
7
TARGET:   Xilinx xc3s1000-4
8
 
9
This core was implemented as a first project in Verilog by an old schematic
10
design engineer. There were a few reasons for implementing an 8080 processor.
11
First, it was the first true general purpose processor available. Second, it
12
was, by nature, designed to be compact in instruction set and implementation.
13
Third, it has a rich set of software applications, including assemblers,
14
compilers and operating systems.
15
 
16
More often, A Z80 target is used in Verilog or VHDL, with the idea that the
17
Z80 is the superset of the 8080. However, the Z80 is significantly more
18
complex than the 8080. The 8080 can make a useful maintainence processor for
19
SOC systems, since it consumes a small amount of resources. The 8080 has a
20
significant body of support, since it was a primary 8 bit processor before
21
the Z80, and coding for the 8080 instruction set often continued even after
22
general Z80 use, because that was the universal subset of both processors.
23
 
24
My own experience with 8080 coding lasted perhaps a year, then I switched
25
to the Z80. Although he Z80 was a significantly more usable processor to
26
code for than a 8080, it made a mildly non-orthogonal instruction set much
27
more so. I have worked on several processors through the series, including
28
working on the design for the Z280, a Z80 16 bit replacement at Zilog
29
Corporation, so hopefully nobody can accuse me of bias against the Z80 :-)
30
 
31
The core presented is completely compatible with the original 8080 instruction
32
set, although the exact handling of the two undefined bits in the status (flags)
33
register have not been verified to be identical to the original. This only
34
matters for "trick" code that expects a value which is pop'ed into the PSW
35
to be preserved when subsequently pushed. This core preserves all bits,
36
including the undefined bits, which means such code would function correctly.
37
Also needing verification to the original are the illegal opcodes, which on
38
this core are treated as nops.
39
 
40
The pinout is decidedly not compatible with the original pinout. The original
41
8080 pinout was a multiplexed nightmare that was never really designed to be
42
directly used. Intel was attempting to save on pins, and much of the CPU status
43
was sent out on every cycle via the data pins. Intel subsequently came out with
44
"demultiplexor" chips to result in simple signals.
45
 
46
The cpu8080 signals are a simple unmultiplexed 16 bit address, and a
47
bidirectional, separate 8 bit data bus. The read and write for each of memory
48
and I/O spaces are all separately decoded. An interrupt request and acknowledge
49
is implemented sufficient to allow an external interrupt controller to be
50
connected. A readint signal is implemented that is true for the entire time that
51
an interrupt fetch is occuring. This allows simple implementation of full
52
vectoring mode.
53
 
54
There were two vectoring modes on the 8080. The most famous one was the use of
55
a single instruction byte that was forced onto the data lines during an
56
interrupt acknowledge cycle. This instruction could be any valid instruction,
57
but was most likely a restart, which gave 8 possible vector locations for the
58
interrupt.
59
 
60
It was not as well known, but the original 8080 could accept a full 2 or 3 byte
61
instruction via the interrupt acknowledge cycle. This was used by advanced
62
Intel interrupt controllers to place a full CALL instruction on the data lines,
63
and thus achieve full arbitrary address vectoring. I have included such an
64
advanced interrupt controller as an accessory to the cpu8080 core, also in
65
verilog.
66
 
67
cpu8080 was implemented in Xilinx ISE, simulated, and then carried out to an
68
XESS XSA-3S1000 board with a Spartan-3 XC3S1000 FPGA. This board can download
69
the test design and run it with a standard PC keyboard and VGA monitor. To drive
70
the onboard pheriperhals, the total package includes a VGA/Keyboard driver that
71
emulates the original Altair serial port card, addressing for the flash, and
72
addressing for 64kb of the SDRAM.
73
 
74
The software provided includes a BIOS image sufficient to run CP/M 3.1 from the
75
onboard flash. The flash contains a short bootstrap, then the BIOS treats the
76
flash as partitioned disk drive. Also included are utilities to get the flash
77
images and programs on and off the board. The resulting software/hardware
78
combination emulates a minimal video terminal connected to a Altair or similar
79
Home Computer running CP/M. Several simulators can be found for the PC that
80
run this same combination.
81
 
82
Scott Moore
83
 

powered by: WebSVN 2.1.0

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