a80.i80

Intel 8080 assembler.

Members

Classes

i80
class i80

Intel 8080 assembler instruction.

Functions

assemble
void assemble(string[] s, string name)

Top-level assembly function. Everything cascades downward from here. Repeat the parsing twice. Pass 1 gathers symbols and their addresses/values. Pass 2 emits code.

Manifest constants

IMM16
enum IMM16;
Undocumented in source.
IMM8
enum IMM8;

8 and 16 bit immediates

Static functions

a16
void a16(i80 insn)

Get a 16-bit address.

aci
void aci(i80 insn)

aci (0xce)

adc
void adc(i80 insn)

adc (0x88 + 8-bit register offset)

add
void add(i80 insn)

add (0x80 + 8-bit register offset)

addsym
void addsym(string lab, ushort a)

Add a symbol to the symbol table.

adi
void adi(i80 insn)

adi (0xc6)

ana
void ana(i80 insn)

ana (0xa0 + 8-bit register offset)

ani
void ani(i80 insn)

ani (0xe6)

argcheck
void argcheck(bool passed)

Check arguments.

call
void call(i80 insn)

call (0xcd)

cc
void cc(i80 insn)

cc (0xdc)

cm
void cm(i80 insn)

cm (0xfc)

cma
void cma(i80 insn)

cma (0x2f)

cmc
void cmc(i80 insn)

cmc (0x3f)

cmp
void cmp(i80 insn)

cmp (0xb8 + 8-bit register offset)

cnc
void cnc(i80 insn)

cnc (0xd4)

cnz
void cnz(i80 insn)

cnz (0xc4)

cp
void cp(i80 insn)

cp (0xf4)

cpe
void cpe(i80 insn)

cpe (0xec)

cpi
void cpi(i80 insn)

cpi (0xfe)

cpo
void cpo(i80 insn)

cpo (0xe4)

cz
void cz(i80 insn)

cz (0xcc)

daa
void daa(i80 insn)

daa (0x27)

dad
void dad(i80 insn)

dad (0x09 + 16 bit register offset)

db
void db(i80 insn)

Place a byte.

dcr
void dcr(i80 insn)

dcr (0x05 + 8 bit register offset)

dcx
void dcx(i80 insn)

dcx (0x0b + 16 bit register offset)

di
void di(i80 insn)

di (0xf3)

ei
void ei(i80 insn)

ei (0xfb)

equ
void equ(i80 insn)

Define a constant.

err
void err(string msg)

Nice error messages.

fileWrite
void fileWrite(string name)

After all code is emitted, write it out to a file.

hlt
void hlt(i80 insn)

hlt (0x76)

i80_in
void i80_in(i80 insn)

in (0xdb)

i80_out
void i80_out(i80 insn)

out (0xd3)

imm
void imm(i80 insn, int immtype)

Get an 8 or 16 bit immediate.

inr
void inr(i80 insn)

inr (0x04 + 8 bit register offset)

inx
void inx(i80 insn)

inx (0x03 + 16 bit register offset)

jc
void jc(i80 insn)

jc (0xda)

jm
void jm(i80 insn)

jm (0xfa)

jmp
void jmp(i80 insn)

jmp (0xc3)

jnc
void jnc(i80 insn)

jnc (0xd2)

jnz
void jnz(i80 insn)

jnz (0xc2)

jp
void jp(i80 insn)

jp (0xf2)

jpe
void jpe(i80 insn)

jpe (0xea)

jpo
void jpo(i80 insn)

jpo (0xe2)

jz
void jz(i80 insn)

jz (0xca)

lda
void lda(i80 insn)

lda (0x3a)

ldax
void ldax(i80 insn)

ldax (0x0a + 16 bit register offset)

lhld
void lhld(i80 insn)

lhld (0x2a)

lxi
void lxi(i80 insn)

lxi (0x01 + 16 bit register offset)

mov
void mov(i80 insn)

mov (0x40 + (8-bit register offset << 3) + 8-bit register offset We allow mov m, m (0x76) But that will result in HLT.

mvi
void mvi(i80 insn)

mvi (0x06 + (8 bit register offset << 3))

nop
void nop(i80 insn)

nop (0x00)

ora
void ora(i80 insn)

ora (0xb0 + 8-bit register offset)

org
void org(i80 insn)

Force updated the address counter.

ori
void ori(i80 insn)

ori (0xf6)

passAct
void passAct(ushort a, int b, i80 insn)

Take action depending on which pass this is.

pchl
void pchl(i80 insn)

pchl (0xe9)

pop
void pop(i80 insn)

pop (0xc1 + 16 bit register offset)

process
void process(i80 insn)

Figure out which op we have.

push
void push(i80 insn)

push (0xc5 + 16 bit register offset)

ral
void ral(i80 insn)

ral (0x17)

rar
void rar(i80 insn)

rar (0x1f)

rc
void rc(i80 insn)

rc (0xd8)

regMod16
int regMod16(i80 insn)

Return the 16 bit register offset.

regMod8
int regMod8(string reg)

Return the 8 bit register offset.

rlc
void rlc(i80 insn)

rcl (0x07)

rm
void rm(i80 insn)

rm (0xf8)

rnc
void rnc(i80 insn)

rnc (0xd0)

rnz
void rnz(i80 insn)

rnz (0xc0)

rp
void rp(i80 insn)

rp (0xf0)

rpe
void rpe(i80 insn)

rpe (0xe8)

rpo
void rpo(i80 insn)

rpo (0xe0)

rrc
void rrc(i80 insn)

rrc (0x0f)

rst
void rst(i80 insn)

rst (0xc7 + offset)

rz
void rz(i80 insn)

rz (0xc8)

sbb
void sbb(i80 insn)

sbb (0x98 + 8-bit register offset)

sbi
void sbi(i80 insn)

sbi (0xde)

shld
void shld(i80 insn)

shld (0x22)

sphl
void sphl(i80 insn)

sphl (0xf9)

sta
void sta(i80 insn)

sta (0x32)

stax
void stax(i80 insn)

stax (0x02 + 16 bit register offset)

stc
void stc(i80 insn)

stc (0x37)

sub
void sub(i80 insn)

sub (0x90 + 8-bit register offset)

sui
void sui(i80 insn)

sui (0xd6)

xchg
void xchg(i80 insn)

xchg (0xeb)

xra
void xra(i80 insn)

xra (0xa8 + 8-bit register offset)

xri
void xri(i80 insn)

xri (0xee)

xthl
void xthl(i80 insn)

xthl (0xe3)

Static variables

addr
ushort addr;

Address for labels.

line
size_t line;

Line number.

output
ubyte[] output;

Output stored in memory until we're finished.

pass
int pass;

Pass.

stab
symtab[] stab;

Symbol table is an array of entries.

Structs

symtab
struct symtab

Symbol table.

Meta