ref: fd4f5b1a9a7f81825a5023b251a2e788e986e49c
dir: /dat.h/
typedef struct CPU CPU; typedef struct Insn Insn; typedef struct ISA ISA; typedef struct InsnType InsnType; struct CPU { u8int flg; u8int r[8]; u16int SP; u16int PC; u8int intr; }; enum{ B, C, D, E, H, L, M, /* dummy */ A, }; enum{ BC, DE, HL, }; enum{ Fcarry = 1<<0, Fparity = 1<<2, Fhcarry = 1<<4, Fzero = 1<<6, Fsign = 1<<7, }; enum{ Imask = 7<<0, Ienabled = 1<<3, Ipending = 7<<4, }; struct Insn { u16int pc; s8int op; u8int r1; u8int r2; u8int rp; u16int addr; u8int imm; u8int imm1; }; enum{ Oadc, Oadd, Oadi, Oana, Oani, Ocall, Ocm, Ocma, Ocmc, Ocmp, Ocnc, Ocpe, Ocpi, Ocz, Odaa, Odad, Odcr, Odcx, Odi, Oei, Oin, Oinr, Oinx, Ojc, Ojm, Ojmp, Ojnc, Ojnz, Ojp, Ojpe, Ojpo, Ojz, Olda, Oldax, Olxi, Omov, Omvi, Onop, Oora, Oori, Oout, Opchl, Opop, Opush, Orar, Orc, Oret, Orim, Orlc, Orm, Ornc, Ornz, Orp, Orpo, Orrc, Orst, Orz, Osbb, Osbi, Oshld, Osim, Osta, Ostax, Osub, Osui, Oxchg, Oxra, Oxri, Oxthl, }; enum { T0, Taddr, Timm, Tr012, Tr345, Trimm, Trp, Trpimm, Trr, }; struct ISA { char *opstr; int type; void (*exec)(CPU*, Insn*); }; struct InsnType { int len; int (*das)(Fmt*, Insn*); int (*dec)(Insn*, uchar*, long); }; enum{ ROMSZ = 8*1024, RAMSZ = 1*1024, VIDSZ = 7*1024, MEMSZ = ROMSZ+RAMSZ+VIDSZ, }; extern u8int mem[MEMSZ]; extern u8int *rom; extern u8int *ram; extern u8int *vid; enum { Tpush, Tpop, }; typedef struct TraceOp TraceOp; struct TraceOp { u16int addr; uchar op; }; typedef struct BrkPt BrkPt; struct BrkPt { u16int addr; uchar enabled; }; enum{ MAXBRKPTS = 10, MAXTRACEOPS = 10, }; extern CPU ocpu, cpu; extern Insn insn; extern int debug; extern int tracing; extern int ntraceops; extern TraceOp traceops[MAXTRACEOPS]; extern int nbrkpts; extern BrkPt brkpts[MAXBRKPTS]; extern jmp_buf trapjmp;