mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 08:24:18 +00:00
146 lines
4.3 KiB
C
146 lines
4.3 KiB
C
|
|
/*
|
|
******** Z800 opcode table (from z800.c)
|
|
*/
|
|
|
|
#define OFFSET 0x000F
|
|
|
|
/* standard data types */
|
|
#define B1 0x0100 /* bit */
|
|
#define B2 0x0200 /* nib */
|
|
#define B3 0x0300 /* oct */
|
|
#define B4 0x0400 /* nibble */
|
|
#define B5 0x0500 /* 5-bit (used for bitL) */
|
|
|
|
#define X1 0x1100 /* byte */
|
|
#define X2 0x1200 /* word */
|
|
#define X3 0x1300 /* triple-byte? */
|
|
#define X4 0x1400 /* long */
|
|
#define X5 0x1500 /* quad */
|
|
#define X6 0x1600 /* float */
|
|
#define X7 0x1700 /* double */
|
|
|
|
#define AA 0x2100 /* address */
|
|
#define AL 0x2200 /* long address */
|
|
|
|
#define RB 0x3100 /* byte register */
|
|
#define RR 0x3200 /* register */
|
|
#define RL 0x3300 /* long register */
|
|
#define RQ 0x3400 /* quad register */
|
|
|
|
#define II 0x4100 /* indirect register either long or short, but not 0 */
|
|
#define I0 0x4200 /* indirect register either long or short, incl 0 */
|
|
#define IR 0x4300 /* indirect register, but not r0 */
|
|
#define IS 0x4400 /* indirect register including r0 */
|
|
#define IL 0x4500 /* indirect long register, but not rr0 */
|
|
#define L0 0x4600 /* indirect long register including rr0 */
|
|
#define PP 0x4800 /* parenthesized register, either long or short, not 0*/
|
|
#define PR 0x4900 /* parenthesized register, but not (R0) */
|
|
#define P0 0x4A00 /* parenthesized register, but not rr0 */
|
|
#define PL 0x4B00 /* parenthesized long register */
|
|
#define BB 0x4C00 /* base register (an RR or RL but not R0 or RR0) */
|
|
#define BR 0x4D00 /* base register (an RR but not RR), not R0 */
|
|
#define BL 0x4E00 /* long base register (an RL but not RR), not RR0 */
|
|
|
|
#define CC 0x5100 /* condition code */
|
|
#define CF 0x5200 /* conditional flag for comflg,resflg,setflg */
|
|
|
|
#define D1 0x6100 /* 7-bit displacement (for djnz,dbjnz) */
|
|
#define D2 0x6200 /* 8-bit displacement (for jr) */
|
|
#define D3 0x6300 /* 12-bit displacement (for calr) */
|
|
#define D4 0x6400 /* 16-bit displacement (for ld BA) */
|
|
#define D5 0x6500 /* 16-bit displacement (for ldr) */
|
|
|
|
#define SR 0x7100 /* special (control) register */
|
|
#define UR 0x7200 /* user special (control) register */
|
|
#define VI 0x7400 /* interrupts (vi,nvi) */
|
|
#define NI 0x7500 /* interrupts (vi,nvi) */
|
|
#define BN 0x7600 /* 1,2 bit field for rl,rlc,rr,rrc */
|
|
#define ID 0x7700 /* increment and decrement fields (to be bumped) */
|
|
#define P1 0x7800 /* +b field for sla,sll */
|
|
#define P2 0x7900 /* +b field for slab,sllb */
|
|
#define P3 0x7A00 /* +b field for slal,slll */
|
|
#define N1 0x7B00 /* -b field for sra,srl */
|
|
#define N2 0x7C00 /* -b field for srab,srlb */
|
|
#define N3 0x7D00 /* -b field for sral,srll */
|
|
#define SL 0x7E00 /* long special (control) register */
|
|
|
|
/* bizarre data types */
|
|
#define XRST 0x8100
|
|
#define XBOF 0x8200
|
|
#define XBWD 0x8300
|
|
|
|
/* register data types */
|
|
#define RNS1 0x8400 /* normal single reg(b, c, d, e, h, l, m ) */
|
|
#define RNS2 0x8500 /* normal single reg(b, c, d, e, h, l, m ) */
|
|
#define XPSR 0x8600 /* prime single reg(b',c',d',e',h',l',m') */
|
|
#define XIXY 0x8700 /* XY single reg(ixh, ixl, iyh, iyl) */
|
|
#define XISR 0x8800 /* indexed single reg(@(c)) */
|
|
#define XNDR 0x8900 /* normal double reg(bc, de, hl, pc, sp) */
|
|
#define XPDR 0x8a00 /* prime double reg(bc',de',hl') */
|
|
#define XIDR 0x8b00 /* indexed double reg(@(bc,de,hl,sp,ix,iy)) */
|
|
#define XIRR 0x8c00 /* indexed registr reg(@(hl+ix,hl+iy,ix+iy))*/
|
|
#define XIII 0x8d00 /* i register */
|
|
#define XRRR 0x8e00 /* r register */
|
|
#define XTXR 0x8f00 /* TX register */
|
|
#define DREG 0xA000
|
|
#define PSRG 0xA100
|
|
#define PDRG 0xA200
|
|
|
|
#define XOPC 0xA300
|
|
|
|
#define EM 0xB000
|
|
#define BP 0xB100
|
|
#define BS 0xB200
|
|
|
|
struct op {
|
|
BYTE opc;
|
|
BYTE opb[4];
|
|
WORD opa[4];
|
|
};
|
|
extern struct op ops[];
|
|
|
|
/*
|
|
******** reserved symbol table (from z800.c)
|
|
*/
|
|
|
|
extern char *opcodes[];
|
|
extern struct symbol oprands[];
|
|
/*
|
|
** struct rsym {
|
|
** int ltype;
|
|
** int lvalu;
|
|
** char *label;
|
|
** };
|
|
**
|
|
** extern struct rsym oprands[];
|
|
*/
|
|
|
|
/*
|
|
******** globals for assembler / disassembler
|
|
**
|
|
** int types[MAXARGS] - array for all of the fields
|
|
** int fields[MAXARGS] - pointers to start of fields in formatted str2.
|
|
** long values[MAXARGS] - array of numeric decode
|
|
**
|
|
*/
|
|
|
|
/* maxargs (including comment field) */
|
|
#define MAXA 4
|
|
#define MAXB 4
|
|
#define MAXF 10
|
|
|
|
extern int args,opcode;
|
|
extern int types[];
|
|
extern long values[];
|
|
extern char *fields[];
|
|
extern char tline[];
|
|
|
|
|
|
extern int opsa,opsb;
|
|
extern int ttype,fldtype,bitoff,offset,bitnum;
|
|
extern int ivalue;
|
|
extern long tvalue;
|
|
extern int z12,segmode;
|
|
extern POINTER slide; /* relative pc offset for assembler */
|