Subject: v09i027: Generic assembler for micro's, Part02/02 Newsgroups: mod.sources Approved: rs@mirror.TMC.COM Submitted by: cisden!lmc (Lyle McElhaney) Mod.sources: Volume 9, Issue 27 Archive-name: assem2/Part02 echo extracting - 6502_ops.h sed 's/^X//' > 6502_ops.h << '@FUNKY STUFF~' X#define BYTESPERLINE 3 /* # bytes per line on the listing */ X X#define SIGNED YES X#define SWAPPED YES X#define RELATIVE YES X Xopdclass o_immed = { 8, NO, NO, NO, 0}; Xopdclass o_zpage = { 8, NO, NO, NO, 0}; Xopdclass o_mem = { 16, NO, SWAPPED, NO, 0}; Xopdclass o_rel = { 8, SIGNED, NO, RELATIVE, -2}; X Xinsclass i_nomem = { 1, 0, &o_none, &o_none, 0, 0}; Xinsclass i_branch = { 2, 1, &o_rel, &o_none, 8, 0}; Xinsclass i_immed = { 2, 1, &o_immed, &o_none, 8, 0}; Xinsclass i_zpage = { 2, 1, &o_zpage, &o_none, 8, 0}; Xinsclass i_abs = { 3, 1, &o_mem, &o_none, 8, 0}; X Xopdef optab[] = { X { "adci", &i_immed, 0x69000000, geninstr}, X { "adcz", &i_zpage, 0x65000000, geninstr}, X { "adczx", &i_zpage, 0x75000000, geninstr}, X { "adca", &i_abs, 0x6d000000, geninstr}, X { "adcax", &i_abs, 0x7d000000, geninstr}, X { "adcay", &i_abs, 0x79000000, geninstr}, X { "adcix", &i_zpage, 0x61000000, geninstr}, X { "adciy", &i_zpage, 0x71000000, geninstr}, X { "andi", &i_immed, 0x29000000, geninstr}, X { "andz", &i_zpage, 0x25000000, geninstr}, X { "andzx", &i_zpage, 0x35000000, geninstr}, X { "anda", &i_abs, 0x2d000000, geninstr}, X { "andax", &i_abs, 0x3d000000, geninstr}, X { "anday", &i_abs, 0x39000000, geninstr}, X { "andix", &i_zpage, 0x21000000, geninstr}, X { "andiy", &i_zpage, 0x31000000, geninstr}, X { "aslac", &i_nomem, 0x0a000000, geninstr}, X { "aslz", &i_zpage, 0x06000000, geninstr}, X { "aslzx", &i_zpage, 0x16000000, geninstr}, X { "asla", &i_abs, 0x0e000000, geninstr}, X { "aslax", &i_abs, 0x1e000000, geninstr}, X { "bcc", &i_branch, 0x90000000, geninstr}, X { "bcs", &i_branch, 0xb0000000, geninstr}, X { "beq", &i_branch, 0xf0000000, geninstr}, X { "bitz", &i_zpage, 0x24000000, geninstr}, X { "bita", &i_abs, 0x2c000000, geninstr}, X { "bmi", &i_branch, 0x30000000, geninstr}, X { "bne", &i_branch, 0xd0000000, geninstr}, X { "bpl", &i_branch, 0x10000000, geninstr}, X { "brk", &i_nomem, 0x00000000, geninstr}, X { "bvc", &i_branch, 0x50000000, geninstr}, X { "bvs", &i_branch, 0x70000000, geninstr}, X { "clc", &i_nomem, 0x18000000, geninstr}, X { "cld", &i_nomem, 0xd8000000, geninstr}, X { "cli", &i_nomem, 0x58000000, geninstr}, X { "clv", &i_nomem, 0xb8000000, geninstr}, X { "cmpi", &i_immed, 0xc9000000, geninstr}, X { "cmpz", &i_zpage, 0xc5000000, geninstr}, X { "cmpzx", &i_zpage, 0xd5000000, geninstr}, X { "cmpa", &i_abs, 0xcd000000, geninstr}, X { "cmpax", &i_abs, 0xdd000000, geninstr}, X { "cmpay", &i_abs, 0xd9000000, geninstr}, X { "cmpix", &i_zpage, 0xc1000000, geninstr}, X { "cmpiy", &i_zpage, 0xd1000000, geninstr}, X { "cpxi", &i_immed, 0xe0000000, geninstr}, X { "cpxz", &i_zpage, 0xe4000000, geninstr}, X { "cpxa", &i_abs, 0xec000000, geninstr}, X { "cpyi", &i_immed, 0xc0000000, geninstr}, X { "cpyz", &i_zpage, 0xc4000000, geninstr}, X { "cpya", &i_abs, 0xcc000000, geninstr}, X { "decz", &i_zpage, 0xc6000000, geninstr}, X { "deczx", &i_zpage, 0xd6000000, geninstr}, X { "deca", &i_abs, 0xce000000, geninstr}, X { "decax", &i_abs, 0xde000000, geninstr}, X { "dex", &i_nomem, 0xca000000, geninstr}, X { "dey", &i_nomem, 0x88000000, geninstr}, X { "eori", &i_immed, 0x49000000, geninstr}, X { "eorz", &i_zpage, 0x45000000, geninstr}, X { "eorzx", &i_zpage, 0x55000000, geninstr}, X { "eora", &i_abs, 0x4d000000, geninstr}, X { "eorax", &i_abs, 0x5d000000, geninstr}, X { "eoray", &i_abs, 0x59000000, geninstr}, X { "eorix", &i_zpage, 0x41000000, geninstr}, X { "eoriy", &i_zpage, 0x51000000, geninstr}, X { "incz", &i_zpage, 0xe6000000, geninstr}, X { "inczx", &i_zpage, 0xf6000000, geninstr}, X { "inca", &i_abs, 0xee000000, geninstr}, X { "incax", &i_abs, 0xfe000000, geninstr}, X { "inx", &i_nomem, 0xe8000000, geninstr}, X { "iny", &i_nomem, 0xc8000000, geninstr}, X { "jmp", &i_abs, 0x4c000000, geninstr}, X { "jmpi", &i_abs, 0x6c000000, geninstr}, X { "jsr", &i_abs, 0x20000000, geninstr}, X { "ldai", &i_immed, 0xa9000000, geninstr}, X { "ldaz", &i_zpage, 0xa5000000, geninstr}, X { "ldazx", &i_zpage, 0xb5000000, geninstr}, X { "ldaa", &i_abs, 0xad000000, geninstr}, X { "ldaax", &i_abs, 0xbd000000, geninstr}, X { "ldaay", &i_abs, 0xb9000000, geninstr}, X { "ldaix", &i_zpage, 0xa1000000, geninstr}, X { "ldaiy", &i_zpage, 0xb1000000, geninstr}, X { "ldxi", &i_immed, 0xa2000000, geninstr}, X { "ldxz", &i_zpage, 0xa6000000, geninstr}, X { "ldxzy", &i_zpage, 0xb6000000, geninstr}, X { "ldxa", &i_abs, 0xae000000, geninstr}, X { "ldxay", &i_abs, 0xbe000000, geninstr}, X { "ldyi", &i_immed, 0xa0000000, geninstr}, X { "ldyz", &i_zpage, 0xa4000000, geninstr}, X { "ldyzx", &i_zpage, 0xb4000000, geninstr}, X { "ldya", &i_abs, 0xac000000, geninstr}, X { "ldyax", &i_abs, 0xbc000000, geninstr}, X { "lsrac", &i_nomem, 0x4a000000, geninstr}, X { "lsrz", &i_zpage, 0x46000000, geninstr}, X { "lsrzx", &i_zpage, 0x56000000, geninstr}, X { "lsra", &i_abs, 0x4e000000, geninstr}, X { "lsrax", &i_abs, 0x5e000000, geninstr}, X { "nop", &i_nomem, 0xea000000, geninstr}, X { "orai", &i_immed, 0x09000000, geninstr}, X { "oraz", &i_zpage, 0x05000000, geninstr}, X { "orazx", &i_zpage, 0x15000000, geninstr}, X { "oraa", &i_abs, 0x0d000000, geninstr}, X { "oraax", &i_abs, 0x1d000000, geninstr}, X { "oraay", &i_abs, 0x19000000, geninstr}, X { "oraix", &i_zpage, 0x01000000, geninstr}, X { "oraiy", &i_zpage, 0x11000000, geninstr}, X { "pha", &i_nomem, 0x48000000, geninstr}, X { "php", &i_nomem, 0x08000000, geninstr}, X { "pla", &i_nomem, 0x68000000, geninstr}, X { "plp", &i_nomem, 0x28000000, geninstr}, X { "rolac", &i_nomem, 0x2a000000, geninstr}, X { "rolz", &i_zpage, 0x26000000, geninstr}, X { "rolzx", &i_zpage, 0x36000000, geninstr}, X { "rola", &i_abs, 0x2e000000, geninstr}, X { "rolax", &i_abs, 0x3e000000, geninstr}, X { "rorac", &i_nomem, 0x6a000000, geninstr}, X { "rorz", &i_zpage, 0x66000000, geninstr}, X { "rorzx", &i_zpage, 0x76000000, geninstr}, X { "rora", &i_abs, 0x6e000000, geninstr}, X { "rorax", &i_abs, 0x7e000000, geninstr}, X { "rti", &i_nomem, 0x40000000, geninstr}, X { "rst", &i_nomem, 0x60000000, geninstr}, X { "sbci", &i_immed, 0xe9000000, geninstr}, X { "sbcz", &i_zpage, 0xe5000000, geninstr}, X { "sbczx", &i_zpage, 0xf5000000, geninstr}, X { "sbca", &i_abs, 0xed000000, geninstr}, X { "sbcax", &i_abs, 0xfd000000, geninstr}, X { "sbcay", &i_abs, 0xf9000000, geninstr}, X { "sbcix", &i_zpage, 0xe1000000, geninstr}, X { "sbciy", &i_zpage, 0xf1000000, geninstr}, X { "sec", &i_nomem, 0x38000000, geninstr}, X { "sed", &i_nomem, 0xf8000000, geninstr}, X { "sei", &i_nomem, 0x78000000, geninstr}, X { "staz", &i_zpage, 0x85000000, geninstr}, X { "stazx", &i_zpage, 0x95000000, geninstr}, X { "staa", &i_abs, 0x8d000000, geninstr}, X { "staax", &i_abs, 0x9d000000, geninstr}, X { "staay", &i_abs, 0x99000000, geninstr}, X { "staix", &i_zpage, 0x81000000, geninstr}, X { "staiy", &i_zpage, 0x91000000, geninstr}, X { "stxz", &i_zpage, 0x86000000, geninstr}, X { "stxzy", &i_zpage, 0x96000000, geninstr}, X { "stxa", &i_abs, 0x8e000000, geninstr}, X { "styz", &i_zpage, 0x84000000, geninstr}, X { "styzx", &i_zpage, 0x94000000, geninstr}, X { "stya", &i_abs, 0x8c000000, geninstr}, X { "tax", &i_nomem, 0xaa000000, geninstr}, X { "tay", &i_nomem, 0xa8000000, geninstr}, X { "tsx", &i_nomem, 0xba000000, geninstr}, X { "txa", &i_nomem, 0x8a000000, geninstr}, X { "txs", &i_nomem, 0x9a000000, geninstr}, X { "tya", &i_nomem, 0x98000000, geninstr}, X { "", &i_noopd, 0x00000000, geninstr} X}; X Xsymbol predef[] = { X { "acptr", 0xffa5, &o_mem, (segmnt *) 0 }, X { "chkin", 0xffc6, &o_mem, (segmnt *) 0 }, X { "chkout", 0xffc9, &o_mem, (segmnt *) 0 }, X { "chrin", 0xffcf, &o_mem, (segmnt *) 0 }, X { "chrout", 0xffd2, &o_mem, (segmnt *) 0 }, X { "ciout", 0xffa8, &o_mem, (segmnt *) 0 }, X { "cint", 0xff81, &o_mem, (segmnt *) 0 }, X { "clall", 0xffe7, &o_mem, (segmnt *) 0 }, X { "close", 0xffc3, &o_mem, (segmnt *) 0 }, X { "clrchn", 0xffcc, &o_mem, (segmnt *) 0 }, X { "getin", 0xffe4, &o_mem, (segmnt *) 0 }, X { "iobase", 0xfff3, &o_mem, (segmnt *) 0 }, X { "ioinit", 0xff84, &o_mem, (segmnt *) 0 }, X { "listen", 0xffb1, &o_mem, (segmnt *) 0 }, X { "load", 0xffd5, &o_mem, (segmnt *) 0 }, X { "membot", 0xff9c, &o_mem, (segmnt *) 0 }, X { "memtop", 0xff99, &o_mem, (segmnt *) 0 }, X { "open", 0xffc0, &o_mem, (segmnt *) 0 }, X { "plot", 0xfff0, &o_mem, (segmnt *) 0 }, X { "ramtas", 0xff87, &o_mem, (segmnt *) 0 }, X { "rdtim", 0xffde, &o_mem, (segmnt *) 0 }, X { "readst", 0xffb7, &o_mem, (segmnt *) 0 }, X { "restor", 0xff8a, &o_mem, (segmnt *) 0 }, X { "save", 0xffd8, &o_mem, (segmnt *) 0 }, X { "scnkey", 0xff9f, &o_mem, (segmnt *) 0 }, X { "screen", 0xffed, &o_mem, (segmnt *) 0 }, X { "second", 0xff93, &o_mem, (segmnt *) 0 }, X { "setlfs", 0xffba, &o_mem, (segmnt *) 0 }, X { "setmsg", 0xff90, &o_mem, (segmnt *) 0 }, X { "setnam", 0xffbd, &o_mem, (segmnt *) 0 }, X { "settim", 0xffdb, &o_mem, (segmnt *) 0 }, X { "settmo", 0xffa2, &o_mem, (segmnt *) 0 }, X { "stop", 0xffe1, &o_mem, (segmnt *) 0 }, X { "talk", 0xffb4, &o_mem, (segmnt *) 0 }, X { "tksa", 0xff96, &o_mem, (segmnt *) 0 }, X { "udtim", 0xffea, &o_mem, (segmnt *) 0 }, X { "unlsn", 0xffae, &o_mem, (segmnt *) 0 }, X { "untlk", 0xffab, &o_mem, (segmnt *) 0 }, X { "vector", 0xff8d, &o_mem, (segmnt *) 0 }, X { "", 0x0, &o_none, (segmnt *) 0 } X}; X Xvoid optional () {} @FUNKY STUFF~ echo extracting - 6803_ops.h sed 's/^X//' > 6803_ops.h << '@FUNKY STUFF~' X#define BYTESPERLINE 3 /* # bytes per line on the listing */ X X#define SIGNED YES X#define SWAPPED YES X#define RELATIVE YES X Xopdclass o_reg = { 1, NO , NO, NO , 0}; Xopdclass o_smem = { 8, NO , NO, NO , 0}; Xopdclass o_rmem = { 8, SIGNED, NO, RELATIVE, -2}; Xopdclass o_mem = {16, NO , NO, NO , 0}; Xopdclass o_off = { 8, SIGNED, NO, NO , 0}; Xopdclass o_data = { 8, SIGNED, NO, NO , 0}; Xopdclass o_data2 = {16, SIGNED, NO, NO , 0}; Xopdclass o_cond = { 4, NO , NO, NO , 0}; X Xinsclass i_reg = {1, 1, &o_reg , &o_none, -4, 0}; Xinsclass i_regp = {1, 1, &o_reg , &o_none, 0, 0}; Xinsclass i_rimed = {2, 2, &o_reg , &o_data, -6, 8}; Xinsclass i_rimd2 = {3, 2, &o_reg , &o_data2,-6, 16}; Xinsclass i_rdir = {2, 2, &o_reg , &o_smem, -6, 8}; Xinsclass i_rindx = {2, 2, &o_reg , &o_off , -6, 8}; Xinsclass i_rxtd = {3, 2, &o_reg , &o_mem , -6,16}; Xinsclass i_imed = {3, 1, &o_data2,&o_none, 16, 0}; Xinsclass i_dir = {2, 1, &o_smem, &o_none, 8, 0}; Xinsclass i_indx = {2, 1, &o_off , &o_none, 8, 0}; Xinsclass i_xtd = {3, 1, &o_mem , &o_none, 16, 0}; Xinsclass i_rel = {2, 1, &o_rmem, &o_none, 8, 0}; Xinsclass i_cond = {2, 2, &o_cond, &o_rmem, 0, 8}; X Xbeginpattern c_cx Xchoicedef c_~1 = {"~1s", "~1z", ~2, 0, 0xff, NO}; Xendpattern Xpattern c_cx,adc,2 Xpattern c_cx,add,2 Xpattern c_cx,and,2 Xpattern c_cx,bit,2 Xpattern c_cx,cmp,2 Xpattern c_cx,eor,2 Xpattern c_cx,lda,2 Xpattern c_cx,ldr,2 Xpattern c_cx,ora,2 Xpattern c_cx,sbc,2 Xpattern c_cx,sub,2 Xpattern c_cx,addd,1 Xpattern c_cx,ldd,1 Xpattern c_cx,std,1 Xpattern c_cx,sta,1 Xpattern c_cx,str,1 Xpattern c_cx,subd,1 Xpattern c_cx,jsr,1 Xpattern c_cx,cpx,1 X Xbeginpattern x_mem X "~1" , (insclass *)&c_~1, 0x00, choiceinstr, X "~1s" , &i_rdir , 0x90+0x~2, geninstr, X "~1i" , &i_rimed, 0x80+0x~2, geninstr, X "~1x" , &i_rindx, 0xa0+0x~2, geninstr, X "~1z" , &i_rxtd , 0xb0+0x~2, geninstr, Xendpattern X Xbeginpattern x_dou X "~1" , (insclass *)&c_~1, 0x00, choiceinstr, X "~1s" , &i_dir , 0x90+0x~2, geninstr, X "~1i" , &i_imed , 0x80+0x~2, geninstr, X "~1x" , &i_indx , 0xa0+0x~2, geninstr, X "~1z" , &i_xtd , 0xb0+0x~2, geninstr, Xendpattern X Xbeginpattern x_xreg X "~1" , (insclass *)&c_~1, 0x00, choiceinstr, X "~1s" , &i_rdir , 0x90+0x~2, geninstr, X "~1i" , &i_rimd2, 0x80+0x~2, geninstr, X "~1x" , &i_rindx, 0xa0+0x~2, geninstr, X "~1z" , &i_rxtd , 0xb0+0x~2, geninstr, Xendpattern X Xbeginpattern x_reg X "~1" , &i_xtd , 0x70+0x~2, geninstr, X "~1a" , &i_reg , 0x40+0x~2, geninstr, X "~1x" , &i_indx , 0x60+0x~2, geninstr, Xendpattern X Xopdef optab[] = { X "abx" , &i_noopd, 0x3a, geninstr, Xpattern x_mem,adc,9 Xpattern x_mem,add,b Xpattern x_dou,addd,43 Xpattern x_mem,and,4 Xpattern x_reg,asl,8 Xpattern x_reg,asr,7 X "bc" , &i_cond , 0x20, geninstr, Xpattern x_mem,bit,5 X "bra" , &i_rel , 0x20, geninstr, X "bsr" , &i_rel , 0x8d, geninstr, X "cli" , &i_noopd, 0x0e, geninstr, Xpattern x_reg,clr,f Xpattern x_mem,cmp,1 Xpattern x_reg,com,3 Xpattern x_dou,cpx,c X "daa" , &i_noopd, 0x19, geninstr, Xpattern x_reg,dec,a Xpattern x_mem,eor,8 Xpattern x_reg,inc,c X "jmpx" , &i_indx , 0x6e, geninstr, X "jmp" , &i_xtd , 0x7e, geninstr, Xpattern x_dou,jsr,d Xpattern x_mem,lda,6 Xpattern x_dou,ldd,4c Xpattern x_xreg,ldr,e Xpattern x_reg,lsl,5 Xpattern x_reg,lsr,4 X "mul" , &i_noopd, 0x3d, geninstr, Xpattern x_reg,neg,0 Xpattern x_mem,ora,a Xpattern x_reg,rol,9 Xpattern x_reg,ror,6 X "rti" , &i_noopd, 0x3b, geninstr, X "rts" , &i_noopd, 0x39, geninstr, Xpattern x_mem,sbc,2 X "sei" , &i_noopd, 0x0f, geninstr, Xpattern x_mem,sta,7 Xpattern x_dou,std,4d Xpattern x_xreg,str,f Xpattern x_mem,sub,0 Xpattern x_dou,subd,3 X "swi" , &i_noopd, 0x3f, geninstr, Xpattern x_reg,tst,d X "" , &i_noopd, 0x00, geninstr X}; X Xsymbol predef[] = { X {"ra" , 0x0, &o_reg , (segmnt *)0 }, X {"rb" , 0x1, &o_reg , (segmnt *)0 }, X {"rx" , 0x1, &o_reg , (segmnt *)0 }, X {"sp" , 0x0, &o_reg , (segmnt *)0 }, X {"nz" , 0x6, &o_cond, (segmnt *)0 }, X {"z" , 0x7, &o_cond, (segmnt *)0 }, X {"ne" , 0x6, &o_cond, (segmnt *)0 }, X {"eq" , 0x7, &o_cond, (segmnt *)0 }, X {"nc" , 0x4, &o_cond, (segmnt *)0 }, X {"c" , 0x5, &o_cond, (segmnt *)0 }, X {"gez", 0xc, &o_cond, (segmnt *)0 }, X {"gz" , 0xe, &o_cond, (segmnt *)0 }, X {"gt" , 0x2, &o_cond, (segmnt *)0 }, X {"lez", 0xf, &o_cond, (segmnt *)0 }, X {"le" , 0x3, &o_cond, (segmnt *)0 }, X {"lz" , 0xd, &o_cond, (segmnt *)0 }, X {"m" , 0xb, &o_cond, (segmnt *)0 }, X {"ov" , 0x9, &o_cond, (segmnt *)0 }, X {"nov", 0x8, &o_cond, (segmnt *)0 }, X {"p" , 0xa, &o_cond, (segmnt *)0 }, X {"ge" , 0x4, &o_cond, (segmnt *)0 }, X {"lt" , 0x5, &o_cond, (segmnt *)0 }, X {"" , 0x0, &o_none, (segmnt *)0 }, X}; X Xvoid optional () {} @FUNKY STUFF~ echo extracting - 6803reg.h sed 's/^X//' > 6803reg.h << '@FUNKY STUFF~' X X; control register & bit definition X; assumes operating mode 2 or 3 X Xp1ddr equ 0 ; port 1 data direction Xp2ddr equ 01 ; port 2 data direction Xp1dr equ 02 ; port 1 data Xp2dr equ 03 ; port 2 data X Xp2d_pc2 equ 080 Xp2d_pc1 equ 040 Xp2d_pc0 equ 020 Xp2d_p24 equ 010 Xscixmt equ p2d_p24 Xp2d_p23 equ 08 Xscircv equ p2d_p23 Xp2d_p22 equ 04 Xsciclock equ p2d_p22 Xp2d_p21 equ 02 Xtimerout equ p2d_p21 Xp2d_p20 equ 01 Xtimerin equ p2d_p20 X Xtcsr equ 08 ; timer control & status X Xtcs_icf equ 080 ; input capture flag Xtcs_ocf equ 040 ; output capture flag Xtcs_tof equ 020 ; timer overflow flag Xtcs_eici equ 010 ; enable input capture interrupt Xtcs_eoci equ 08 ; enable output capture flag Xtcs_etoi equ 04 ; enable timer overflow interrupt Xtcs_iedg equ 02 ; input edge Xtcs_olvl equ 01 ; output level X Xcounth equ 09 ; timer counter msb Xcountl equ 0a ; timer counter lsb Xoutcmh equ 0b ; timer output compare msb Xoutcml equ 0c ; timer output compare lsb Xincaph equ 0d ; input capture msb Xincapl equ 0e ; input capture lsb Xrmcr equ 010 ; SCI rate & mode control X Xrmc_cc1 equ 08 Xrmc_cc0 equ 04 Xrmc_cc equ 0c ; clock source and format Xrmc_ss1 equ 02 Xrmc_ss0 equ 01 Xrmc_ss equ 03 ; clock speed select 0-3, hi-lo X Xtrcsr equ 011 ; xmit/rcv control & status X Xtrc_rdf equ 080 ; rcv data reg full Xtrc_ofe equ 040 ; overrun or framing error Xtrc_tre equ 020 ; xmit data reg empty Xtrc_rie equ 010 ; rcv interrupt enable Xtrc_re equ 08 ; receiver enable Xtrc_tie equ 04 ; xmit interrupt enable Xtrc_te equ 02 ; transmitter enable Xtrc_wu equ 01 ; wakeup X Xscirdr equ 012 ; SCI rcv data Xscitdr equ 013 ; SCI xmit data Xramcr equ 014 ; RAM control X Xram_sb equ 080 ; stand-by power Xram_e equ 040 ; internal RAM enabled X Xstintram equ 080 Xenintram equ 0ff X X; interrupt vectors X Xvectors equ 0ff0 Xscivec equ vectors+0 Xtofvec equ vectors+02 Xtocvec equ vectors+04 Xticvec equ vectors+06 Xrq1vec equ vectors+08 Xswivec equ vectors+0a Xnmivec equ vectors+0c Xstartvec equ vectors+0e @FUNKY STUFF~ echo extracting - 6809_ops.h sed 's/^X//' > 6809_ops.h << '@FUNKY STUFF~' X#define BYTESPERLINE 5 /* # bytes per line on the listing */ X X#define SIGNED YES X#define SWAPPED YES X#define RELATIVE YES X Xopdclass o_reg = { 1, NO , NO , NO , 0}; Xopdclass o_smem = { 8, NO , NO , NO , 0}; Xopdclass o_rmem = { 8, SIGNED, NO , RELATIVE, -2}; Xopdclass o_mem = {16, NO , NO , NO , 0}; Xopdclass o_off = { 8, SIGNED, NO , NO , 0}; Xopdclass o_data = { 8, SIGNED, NO , NO , 0}; Xopdclass o_data2 = {16, SIGNED, NO , NO , 0}; Xopdclass o_cond = { 4, NO , NO , NO , 0}; Xopdclass o_rsp = { 4, NO , NO , NO , 0}; X Xinsclass i_reg = {1, 1, &o_reg , &o_none, -4, 0}; Xinsclass i_regp = {1, 1, &o_reg , &o_none, 0, 0}; Xinsclass i_rr = {2, 2, &o_rsp , &o_rsp , 4, 8}; Xinsclass i_rimed = {2, 2, &o_reg , &o_data, -6, 8}; Xinsclass i_rimd2 = {3, 2, &o_reg , &o_data2,-6, 16}; Xinsclass i_rdir = {2, 2, &o_reg , &o_smem, -6, 8}; Xinsclass i_rx0 = {2, 2, &o_reg , &o_off , -6, 8}; Xinsclass i_rx5 = {2, 2, &o_reg , &o_off , -6, 8}; Xinsclass i_rx8 = {2, 2, &o_reg , &o_off , -6, 16}; Xinsclass i_rx16 = {2, 2, &o_reg , &o_off , -6, 24}; Xinsclass i_rxtd = {3, 2, &o_reg , &o_mem , -6, 16}; Xinsclass i_imed = {2, 1, &o_data, &o_none, 8, 0}; Xinsclass i_imd2 = {3, 1, &o_data2,&o_none, 16, 0}; Xinsclass i_dir = {2, 1, &o_smem, &o_none, 8, 0}; Xinsclass i_x0 = {2, 1, &o_off , &o_none, 8, 0}; Xinsclass i_x5 = {2, 1, &o_off , &o_none, 8, 0}; Xinsclass i_x8 = {2, 1, &o_off , &o_none, 16, 0}; Xinsclass i_x16 = {2, 1, &o_off , &o_none, 24, 0}; Xinsclass i_xtd = {3, 1, &o_mem , &o_none, 16, 0}; Xinsclass i_imd22 = {4, 1, &o_data2,&o_none, 24, 0}; Xinsclass i_dir2 = {3, 1, &o_smem, &o_none, 16, 0}; Xinsclass i_x02 = {3, 1, &o_off , &o_none, 16, 0}; Xinsclass i_x52 = {3, 1, &o_off , &o_none, 16, 0}; Xinsclass i_x82 = {3, 1, &o_off , &o_none, 24, 0}; Xinsclass i_x162 = {3, 1, &o_off , &o_none, 32, 0}; Xinsclass i_xtd2 = {4, 1, &o_mem , &o_none, 24, 0}; Xinsclass i_rel = {2, 1, &o_rmem, &o_none, 8, 0}; Xinsclass i_cond = {2, 2, &o_cond, &o_rmem, 0, 8}; Xinsclass i_nopd2 = {2, 0, &o_none, &o_none, 0, 0}; X Xbeginpattern c_cx Xchoicedef c_~1 = {"~1s" , "~1z" , ~2, 0, 0xff, NO}; Xchoicedef c_~1x = {"~1x0", "~1xa" , ~2, 0, 0x00, NO}; Xchoicedef c_~1xa = {"~1x5", "~1xb" , ~2, 0, 0x1f, NO}; Xchoicedef c_~1xb = {"~1x8", "~1x16", ~2, 0, 0xff, NO}; Xendpattern X Xpattern c_cx,adc,2 Xpattern c_cx,add,2 Xpattern c_cx,and,2 Xpattern c_cx,bit,2 Xpattern c_cx,cma,2 Xpattern c_cx,eor,2 Xpattern c_cx,lda,2 Xpattern c_cx,ldr,2 Xpattern c_cx,ora,2 Xpattern c_cx,sbc,2 Xpattern c_cx,sub,2 Xpattern c_cx,addd,1 Xpattern c_cx,ldd,1 Xpattern c_cx,std,1 Xpattern c_cx,sta,1 Xpattern c_cx,str,1 Xpattern c_cx,subd,1 Xpattern c_cx,jsr,1 Xpattern c_cx,cpx,1 Xpattern c_cx,asl,1 Xpattern c_cx,asr,1 Xpattern c_cx,clr,1 Xpattern c_cx,com,1 Xpattern c_cx,dec,1 Xpattern c_cx,inc,1 Xpattern c_cx,lsl,1 Xpattern c_cx,lsr,1 Xpattern c_cx,neg,1 Xpattern c_cx,rol,1 Xpattern c_cx,ror,1 Xpattern c_cx,tst,1 Xpattern c_cx,jmp,1 Xpattern c_cx,cmpd,1 Xpattern c_cx,cmpy,1 Xpattern c_cx,ldy,1 Xpattern c_cx,sty,1 Xpattern c_cx,lds,1 Xpattern c_cx,sts,1 Xpattern c_cx,cmpu,1 Xpattern c_cx,cmps,1 X Xbeginpattern x_mem X "~1m" , (insclass *)&c_~1, 0, choiceinstr, X "~1" , (insclass *)&c_~1x, 0, choiceinstr, X "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, X "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, X "~1i" , &i_rimed, 0x~2000000|0x80000000, geninstr, X "~1s" , &i_rdir , 0x~2000000|0x90000000, geninstr, X "~1x0" , &i_rx0 , 0x~2000000|0xa0840000, geninstr, X "~1x5" , &i_rx5 , 0x~2000000|0xa0000000, geninstr, X "~1x8" , &i_rx8 , 0x~2000000|0xa0880000, geninstr, X "~1x16", &i_rx16 , 0x~2000000|0xa0890000, geninstr, X "~1z" , &i_rxtd , 0x~2000000|0xb0000000, geninstr, Xendpattern X Xbeginpattern x_xreg X "~1m" , (insclass *)&c_~1, 0, choiceinstr, X "~1" , (insclass *)&c_~1x, 0, choiceinstr, X "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, X "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, X "~1i" , &i_rimd2, 0x~2000000|0x80000000, geninstr, X "~1s" , &i_rdir , 0x~2000000|0x90000000, geninstr, X "~1x0" , &i_rx0 , 0x~2000000|0xa0840000, geninstr, X "~1x5" , &i_rx5 , 0x~2000000|0xa0000000, geninstr, X "~1x8" , &i_rx8 , 0x~2000000|0xa0880000, geninstr, X "~1x16", &i_rx16 , 0x~2000000|0xa0890000, geninstr, X "~1z" , &i_rxtd , 0x~2000000|0xb0000000, geninstr, Xendpattern X Xbeginpattern x_dou X "~1m" , (insclass *)&c_~1 , 0, choiceinstr, X "~1" , (insclass *)&c_~1x , 0, choiceinstr, X "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, X "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, X "~1i" , &i_imd2 , 0x~2000000|0x80000000, geninstr, X "~1s" , &i_dir , 0x~2000000|0x90000000, geninstr, X "~1x0" , &i_x0 , 0x~2000000|0xa0840000, geninstr, X "~1x5" , &i_x5 , 0x~2000000|0xa0000000, geninstr, X "~1x8" , &i_x8 , 0x~2000000|0xa0880000, geninstr, X "~1x16", &i_x16 , 0x~2000000|0xa0890000, geninstr, X "~1z" , &i_xtd , 0x~2000000|0xb0000000, geninstr, Xendpattern X Xbeginpattern x_reg X "~1m" , (insclass *)&c_~1 , 0, choiceinstr, X "~1" , (insclass *)&c_~1x , 0, choiceinstr, X "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, X "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, X "~1s" , &i_dir , 0x~2000000|0x00000000, geninstr, X "~1a" , &i_reg , 0x~2000000|0x40000000, geninstr, X "~1x0" , &i_x0 , 0x~2000000|0x60840000, geninstr, X "~1x5" , &i_x5 , 0x~2000000|0x60000000, geninstr, X "~1x8" , &i_x8 , 0x~2000000|0x60880000, geninstr, X "~1x16", &i_x16 , 0x~2000000|0x60890000, geninstr, X "~1z" , &i_xtd , 0x~2000000|0x70000000, geninstr, Xendpattern X Xbeginpattern x_reg2 X "~1m" , (insclass *)&c_~1 , 0, choiceinstr, X "~1" , (insclass *)&c_~1x , 0, choiceinstr, X "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, X "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, X "~1i" , &i_imd22, 0x~20000|0x10800000, geninstr, X "~1s" , &i_dir2 , 0x~20000|0x10900000, geninstr, X "~1x0" , &i_x02 , 0x~20000|0x10a08400, geninstr, X "~1x5" , &i_x52 , 0x~20000|0x10a00000, geninstr, X "~1x8" , &i_x82 , 0x~20000|0x10a08800, geninstr, X "~1x16" , &i_x162 , 0x~20000|0x10a08900, geninstr, X "~1z" , &i_xtd2 , 0x~20000|0x10b00000, geninstr, Xendpattern X Xopdef optab[] = { X "abx" , &i_noopd, 0x3a000000, geninstr, Xpattern x_mem,adc,9 Xpattern x_mem,add,b Xpattern x_dou,addd,43 Xpattern x_mem,and,4 X "andcc" , &i_imed , 0x1c000000, geninstr, Xpattern x_reg,asl,8 Xpattern x_reg,asr,7 X "bc" , &i_cond , 0x20000000, geninstr, Xpattern x_mem,bit,5 X "bra" , &i_rel , 0x20000000, geninstr, X "bsr" , &i_rel , 0x8d000000, geninstr, Xpattern x_reg,clr,f Xpattern x_mem,cma,1 Xpattern x_reg2,cmpd,3 Xpattern x_reg2,cmps,10c Xpattern x_reg2,cmpu,103 Xpattern x_reg2,cmpy,c Xpattern x_reg,com,3 Xpattern x_dou,cpx,c X "cwai" , &i_noopd, 0x3c000000, geninstr, X "daa" , &i_noopd, 0x19000000, geninstr, Xpattern x_reg,dec,a Xpattern x_mem,eor,8 X "exg" , &i_rr , 0x1e000000, geninstr, Xpattern x_reg,inc,c Xpattern x_reg,jmp,e Xpattern x_dou,jsr,d X "lbra" , &i_xtd , 0x16000000, geninstr, X "lbsr" , &i_xtd , 0x17000000, geninstr, Xpattern x_mem,lda,6 Xpattern x_dou,ldd,4c Xpattern x_xreg,ldr,e Xpattern x_reg2,lds,43 Xpattern x_reg2,ldy,e X "leax" , &i_xtd , 0x30000000, geninstr, X "leay" , &i_xtd , 0x31000000, geninstr, X "leas" , &i_xtd , 0x32000000, geninstr, X "leau" , &i_xtd , 0x33000000, geninstr, Xpattern x_reg,lsl,8 Xpattern x_reg,lsr,4 X "mul" , &i_noopd, 0x3d000000, geninstr, Xpattern x_reg,neg,0 X "nop" , &i_noopd, 0x12000000, geninstr, Xpattern x_mem,ora,a X "orcc" , &i_imed , 0x1a000000, geninstr, X "pshs" , &i_noopd, 0x34000000, geninstr, X "pshu" , &i_noopd, 0x36000000, geninstr, X "puls" , &i_noopd, 0x35000000, geninstr, X "pulu" , &i_noopd, 0x37000000, geninstr, Xpattern x_reg,rol,9 Xpattern x_reg,ror,6 X "rti" , &i_noopd, 0x3b000000, geninstr, X "rts" , &i_noopd, 0x39000000, geninstr, Xpattern x_mem,sbc,2 X "sei" , &i_noopd, 0x0f000000, geninstr, X "sex" , &i_rr , 0x1d000000, geninstr, Xpattern x_mem,sta,7 Xpattern x_dou,std,4d Xpattern x_xreg,str,f Xpattern x_reg2,sts,4f Xpattern x_reg2,sty,f Xpattern x_mem,sub,0 Xpattern x_dou,subd,3 X "swi" , &i_noopd, 0x3f000000, geninstr, X "swi2" , &i_nopd2, 0x10000000, geninstr, X "swi3" , &i_nopd2, 0x11000000, geninstr, X "sync" , &i_noopd, 0x13000000, geninstr, X "tfr" , &i_rr , 0x1f000000, geninstr, Xpattern x_reg,tst,d X "" , &i_noopd, 0L, geninstr X}; X Xsymbol predef[] = { X {"ra" , 0x0, &o_reg , (segmnt *)0 }, X {"rb" , 0x1, &o_reg , (segmnt *)0 }, X {"rx" , 0x1, &o_reg , (segmnt *)0 }, X {"sp" , 0x0, &o_reg , (segmnt *)0 }, X {"nz" , 0x6, &o_cond, (segmnt *)0 }, X {"z" , 0x7, &o_cond, (segmnt *)0 }, X {"ne" , 0x6, &o_cond, (segmnt *)0 }, X {"eq" , 0x7, &o_cond, (segmnt *)0 }, X {"nc" , 0x4, &o_cond, (segmnt *)0 }, X {"c" , 0x5, &o_cond, (segmnt *)0 }, X {"gez", 0xc, &o_cond, (segmnt *)0 }, X {"gz" , 0xe, &o_cond, (segmnt *)0 }, X {"gt" , 0x2, &o_cond, (segmnt *)0 }, X {"lez", 0xf, &o_cond, (segmnt *)0 }, X {"le" , 0x3, &o_cond, (segmnt *)0 }, X {"lz" , 0xd, &o_cond, (segmnt *)0 }, X {"m" , 0xb, &o_cond, (segmnt *)0 }, X {"ov" , 0x9, &o_cond, (segmnt *)0 }, X {"nov", 0x8, &o_cond, (segmnt *)0 }, X {"p" , 0xa, &o_cond, (segmnt *)0 }, X {"ge" , 0x4, &o_cond, (segmnt *)0 }, X {"lt" , 0x5, &o_cond, (segmnt *)0 }, X {"D" , 0x0, &o_rsp , (segmnt *)0 }, X {"X" , 0x1, &o_rsp , (segmnt *)0 }, X {"Y" , 0x2, &o_rsp , (segmnt *)0 }, X {"U" , 0x3, &o_rsp , (segmnt *)0 }, X {"S" , 0x4, &o_rsp , (segmnt *)0 }, X {"PC" , 0x5, &o_rsp , (segmnt *)0 }, X {"A" , 0x8, &o_rsp , (segmnt *)0 }, X {"B" , 0x9, &o_rsp , (segmnt *)0 }, X {"CC" , 0xa, &o_rsp , (segmnt *)0 }, X {"DPR", 0xb, &o_rsp , (segmnt *)0 }, X {"" , 0x0, &o_none, (segmnt *)0 }, X}; X X/* Partial decoding of the indexing occurs here. Differences in coding due X * to size of offset constants is ored in through extended opcode masks. X */ X X#define has(x) index(str,'x') X Xvoid optional (str, obuf) X char *str; X Word *obuf; X{ X static struct { X unsigned char value; X char *str; X } *xpt, stuff[] = { X 0x8c, "P" , 0x9c, "*P" , 0x9f, "*" , X 0x80, "+X" , 0x81, "#X" , 0x82, "-X" , X 0x83, "=X" , 0x84, "X" , 0x85, "BX" , X 0x86, "AX" , 0x8b, "DX" , 0x91, "#*X" , X 0x93, "*=X" , 0x94, "*X" , 0x95, "*BX" , X 0x96, "*AX" , 0x9b, "*DX" , X 0xa0, "+Y" , 0xa1, "#Y" , 0xa2, "-Y" , X 0xa3, "*=Y" , 0xa3, "=Y" , 0xa4, "Y" , X 0xa5, "BY" , 0xa6, "AY" , 0xab, "DY" , X 0xb1, "#*Y" , 0xb4, "*Y" , 0xb5, "*BY" , X 0xb6, "*AY" , 0xbb, "*DY" , X 0xc0, "+U" , 0xc1, "#U" , 0xc2, "-U" , X 0xc3, "=U" , 0xc4, "U" , 0xc5, "BU" , X 0xc6, "AU" , 0xcb, "DU" , 0xd1, "#*U" , X 0xd3, "*=U" , 0xd4, "*U" , 0xd5, "*BU" , X 0xd6, "*AU" , 0xdb, "*DU" , X 0xe0, "+S" , 0xe1, "#S" , 0xe2, "-S" , X 0xe3, "=S" , 0xe4, "S" , 0xe5, "BS" , X 0xe6, "AS" , 0xeb, "DS" , 0xf1, "#*S" , X 0xf3, "*=S" , 0xf4, "*S" , 0xf5, "*BS" , X 0xf6, "*AS" , 0xfb, "*DS" , X 0x00, "" , X }; X char t, *pt; X Xstart: for (pt = str; pt[1]; pt++) { /* sort the bytes into order */ X if (*(pt-1) > *pt) { X t = *(pt+1); X *(pt+1) = *pt; X *pt = t; X goto start; X } X } X for (xpt = stuff; xpt->value; xpt++) { /* then look 'em up. */ X if (strcmp (xpt->str, str) == 0) { X obuf[*obuf == 0x10 || *obuf == 0x11 ? 2 : 1] |= X xpt->value; X return; X } X } X reporterr (E_BADOPT); X return; X} @FUNKY STUFF~ echo extracting - 8085_ops.h sed 's/^X//' > 8085_ops.h << '@FUNKY STUFF~' X#define BYTESPERLINE 3 /* # bytes per line on the listing */ X X#define SIGNED YES X#define SWAPPED YES X#define RELATIVE YES X Xopdclass o_reg = { 3, NO , NO , NO , 0}; Xopdclass o_rp = { 2, NO , NO , NO , 0}; Xopdclass o_mem = {16, NO , SWAPPED, NO , 0}; Xopdclass o_data = { 8, SIGNED, NO , NO , 0}; Xopdclass o_data2 = {16, SIGNED, SWAPPED, NO , 0}; Xopdclass o_port = { 8, NO , NO , NO , 0}; Xopdclass o_rupt = { 3, NO , NO , NO , 0}; Xopdclass o_cond = { 3, NO , NO , NO , 0}; X Xinsclass i_reg1 = {1, 1, &o_reg , &o_none, -3, 0}; Xinsclass i_reg2 = {1, 1, &o_reg , &o_none, 0, 0}; Xinsclass i_rp = {1, 1, &o_rp , &o_none, -4, 0}; Xinsclass i_data = {2, 1, &o_data, &o_none, 8, 0}; Xinsclass i_rd = {2, 2, &o_reg , &o_data, -3, 8}; Xinsclass i_drd = {3, 2, &o_reg , &o_data2,-3, 16}; Xinsclass i_mem = {3, 1, &o_mem , &o_none, 8, 0}; Xinsclass i_rupt = {1, 1, &o_rupt, &o_none, -3, 0}; Xinsclass i_port = {2, 1, &o_port, &o_none, 8, 0}; Xinsclass i_rr = {1, 2, &o_reg , &o_reg , -3, 0}; Xinsclass i_cond = {1, 1, &o_cond, &o_none, -3, 0}; Xinsclass i_condm = {3, 2, &o_cond, &o_mem , -3, 16}; X Xopdef optab[] = { X "aci" , &i_data , 0xce, geninstr, X "adc" , &i_reg2 , 0x88, geninstr, X "adcm" , &i_noopd, 0x8e, geninstr, X "add" , &i_reg2 , 0x80, geninstr, X "addm" , &i_noopd, 0x86, geninstr, X "adi" , &i_data , 0xc6, geninstr, X "ana" , &i_reg2 , 0xa0, geninstr, X "anam" , &i_noopd, 0xa6, geninstr, X "ani" , &i_data , 0xe6, geninstr, X "call" , &i_mem , 0xcd, geninstr, X "cc" , &i_condm, 0xc4, geninstr, X "cma" , &i_noopd, 0x2f, geninstr, X "cmc" , &i_noopd, 0x3f, geninstr, X "cmp" , &i_reg2 , 0xb8, geninstr, X "cmpm" , &i_noopd, 0xbe, geninstr, X "cpi" , &i_data , 0xfe, geninstr, X "daa" , &i_noopd, 0x27, geninstr, X "dad" , &i_rp , 0x09, geninstr, X "dcr" , &i_reg1 , 0x05, geninstr, X "dcrm" , &i_noopd, 0x35, geninstr, X "dcx" , &i_rp , 0x0b, geninstr, X "di" , &i_noopd, 0xf3, geninstr, X "ei" , &i_noopd, 0xfd, geninstr, X "hlt" , &i_noopd, 0x76, geninstr, X "in" , &i_port , 0xdb, geninstr, X "inr" , &i_reg1 , 0x04, geninstr, X "inrm" , &i_noopd, 0x34, geninstr, X "inx" , &i_rp , 0x03, geninstr, X "jc" , &i_condm, 0xc2, geninstr, X "jmp" , &i_mem , 0xc3, geninstr, X "lda" , &i_mem , 0x3a, geninstr, X "ldax" , &i_rp , 0x0a, geninstr, X "ldi" , &i_rd , 0x06, geninstr, X "ldr" , &i_reg1 , 0x46, geninstr, X "lhld" , &i_mem , 0x2a, geninstr, X "lxi" , &i_drd , 0x01, geninstr, X "mrr" , &i_rr , 0x40, geninstr, X "mvim" , &i_data , 0x36, geninstr, X "nop" , &i_noopd, 0x00, geninstr, X "ora" , &i_reg2 , 0xb0, geninstr, X "oram" , &i_noopd, 0xb6, geninstr, X "ori" , &i_data , 0xf6, geninstr, X "out" , &i_port , 0xd3, geninstr, X "pchl" , &i_noopd, 0xe9, geninstr, X "pop" , &i_rp , 0xc1, geninstr, X "poppsw" , &i_noopd, 0xf1, geninstr, X "push" , &i_rp , 0xc5, geninstr, X "pushpsw", &i_noopd, 0xf5, geninstr, X "ral" , &i_noopd, 0x17, geninstr, X "rar" , &i_noopd, 0x1f, geninstr, X "rc" , &i_condm, 0xc0, geninstr, X "ret" , &i_noopd, 0xc9, geninstr, X "rim" , &i_noopd, 0x20, geninstr, X "rlc" , &i_noopd, 0x07, geninstr, X "rrc" , &i_noopd, 0x0f, geninstr, X "rst" , &i_rupt , 0xc7, geninstr, X "sbb" , &i_reg2 , 0x98, geninstr, X "sbbm" , &i_noopd, 0x9e, geninstr, X "sbi" , &i_data , 0xde, geninstr, X "shld" , &i_mem , 0x22, geninstr, X "sim" , &i_noopd, 0x30, geninstr, X "sphl" , &i_noopd, 0xf9, geninstr, X "sta" , &i_mem , 0x32, geninstr, X "stax" , &i_rp , 0x02, geninstr, X "stc" , &i_noopd, 0x37, geninstr, X "str" , &i_reg2 , 0x70, geninstr, X "sub" , &i_reg2 , 0x90, geninstr, X "subm" , &i_noopd, 0x96, geninstr, X "sui" , &i_data , 0xd6, geninstr, X "xchg" , &i_noopd, 0xeb, geninstr, X "xra" , &i_reg2 , 0xa8, geninstr, X "xram" , &i_noopd, 0xae, geninstr, X "xri" , &i_data , 0xee, geninstr, X "xthl" , &i_noopd, 0xe3, geninstr, X "" , &i_noopd, 0x00, geninstr X}; X Xsymbol predef[] = { X {"ra" , 7, &o_reg , (segmnt *)0 }, X {"rb" , 0, &o_reg , (segmnt *)0 }, X {"rc" , 1, &o_reg , (segmnt *)0 }, X {"rd" , 2, &o_reg , (segmnt *)0 }, X {"re" , 3, &o_reg , (segmnt *)0 }, X {"rh" , 4, &o_reg , (segmnt *)0 }, X {"rl" , 5, &o_reg , (segmnt *)0 }, X {"rbc" , 0, &o_rp , (segmnt *)0 }, X {"rde" , 1, &o_rp , (segmnt *)0 }, X {"rhl" , 2, &o_rp , (segmnt *)0 }, X {"sp" , 3, &o_rp , (segmnt *)0 }, X {"rupt0" , 0, &o_rupt, (segmnt *)0 }, X {"rupt1" , 1, &o_rupt, (segmnt *)0 }, X {"rupt2" , 2, &o_rupt, (segmnt *)0 }, X {"rupt3" , 3, &o_rupt, (segmnt *)0 }, X {"rupt4" , 4, &o_rupt, (segmnt *)0 }, X {"rupt5" , 5, &o_rupt, (segmnt *)0 }, X {"rupt6" , 6, &o_rupt, (segmnt *)0 }, X {"rupt7" , 7, &o_rupt, (segmnt *)0 }, X {"nz" , 0, &o_cond, (segmnt *)0 }, X {"z" , 1, &o_cond, (segmnt *)0 }, X {"nc" , 2, &o_cond, (segmnt *)0 }, X {"c" , 3, &o_cond, (segmnt *)0 }, X {"po" , 4, &o_cond, (segmnt *)0 }, X {"pe" , 5, &o_cond, (segmnt *)0 }, X {"p" , 6, &o_cond, (segmnt *)0 }, X {"m" , 7, &o_cond, (segmnt *)0 }, X {"ramstart" , 0, &o_mem , (segmnt *)0 }, X {"ramend" , 0, &o_mem , (segmnt *)0 }, X {"romstart" , 0, &o_mem , (segmnt *)0 }, X {"romend" , 0, &o_mem , (segmnt *)0 }, X {"" , 0, &o_none, (segmnt *)0 } X}; X Xvoid optional () {} @FUNKY STUFF~ echo extracting - asm.h sed 's/^X//' > asm.h << '@FUNKY STUFF~' X#include X#include X X#define YES 1 X#define NO 0 X X/* can't change these without changing all ops.h tables */ X#define MAXOPDS 2 /* max # of operands */ X X#define NORMBYTE /* normal bytes (Sun, etc); else bytes swapped (vax) */ X#define LINEBUFLEN 100 /* "card" input buffer size */ X#define NSYMS 253 /* symbol table size */ X#define INCLSTACK 10 /* max number of include nests */ X#define MAXBYTPERINS 5 /* maximum instruction size */ X#define BYTPERLONG 4 /* # bytes in long accumulator */ X#define MAXBYTES (MAXBYTPERINS>BYTPERLONG?MAXBYTPERINS:BYTPERLONG) X#define MINBYTES (MAXBYTPERINS" /* same order as definitions above */ X Xtypedef unsigned char Word; /* instruction word */ Xtypedef unsigned short DWord; /* double word */ Xtypedef unsigned long Acc; /* expression accumulator size */ Xtypedef short Long; /* Long, that is, on an 8085: 16 bit data */ Xtypedef char Short; /* 8 bit data */ Xtypedef unsigned Long Memad; Xtypedef char Flag; X Xtypedef union { X Word s[MAXBYTES]; X Acc l; X long ls; X} itemu; X Xtypedef struct opdclassitem { /* This defines an instruction field */ X int length; /* length in bits of field */ X Flag signed; /* else unsigned */ X Flag byteswapped; /* data has bytes backwards */ X Flag relative; /* field is relative to $ */ X int offset; /* fixed value added to field */ X} opdclass; X Xtypedef struct insclassitem { /* This defines an instruction type */ X int length; /* instruction length in bytes */ X int mopds; /* number of operands expected */ X opdclass *type[MAXOPDS]; /* each operand's field type */ X int offset[MAXOPDS]; /* each operand's bit offset, X from right end of first byte */ X} insclass; X Xtypedef struct chcitem { /* Defines the alternatives for instr choices */ X char *rname; /* restrictive mnemonic */ X char *nname; /* non-restrictive mnemonic */ X int field; /* operand that is restricted */ X int lorange, hirange; /* range of restriction inclusive */ X Flag relative; /* to current lc, else absolute value */ X} choicedef; X Xtypedef struct opdefitem { /* Defines an instruction */ X char *name; /* instruction mnemonic */ X insclass *class; /* instruction type */ X Acc mask; /* mask for two bytes of instruction */ X int (*action) (); /* action routine for assembly */ X} opdef; X Xtypedef struct seg { /* Defines a location counter segment */ X Memad lc, start; /* segment's lc and starting loc */ X char *name; /* segment name */ X struct seg *next; /* pointer to next segment */ X} segmnt; X Xtypedef struct ltitem { /* Defines a label table entry */ X char *name; /* symbol name */ X long value; /* symbol's current value */ X opdclass *type; /* symbol type (defines fields it can fill) */ X segmnt *segp; /* pointer to segment value's defined in */ X} symbol; X Xextern opdclass o_none; Xextern insclass i_noopd; Xextern opdef pseudotab[], optab[]; Xextern FILE *input[], *output, *list, *srcin, *binout; Xextern char *name, *label, *op, *opd, *optop; Xextern char buf[], linecopy[], *filename[]; Xextern int lineno[], ignerr, listlen, pseudolen, instrlen, end_found; Xextern int errorstat, currinput, pass, liston, listing, binary, xref; Xextern symbol predef[], *symtab; Xextern Memad lc; Xextern Word *dummy; Xextern segmnt segmain, *seghd, *curseg, *exprseg; X Xextern char *malloc(); Xextern char *strcpy(); Xextern char *strcat(); Xextern char *mktemp(); Xextern char *index(); Xextern int geninstr(); Xextern int choiceinstr(); Xextern int do_bss(); Xextern int do_data(); Xextern int do_data2(); Xextern int do_end(); Xextern int do_equ(); Xextern int do_seg(); Xextern int do_set(); Xextern int do_org(); Xextern int do_string(); Xextern int do_incl(); Xextern int do_loff(); Xextern int do_lon(); Xextern void getargs (); Xextern void init (); Xextern void init2 (); Xextern int process (); Xextern void listit (); Xextern void listint (); Xextern void insert (); Xextern void reporterr (); Xextern int hash (); Xextern long expr (); Xextern int getop (); Xextern long getval (); Xextern int lookup (); Xextern void putoutbin (); Xextern void crossref (); Xextern void sort (); Xextern void putout (); Xextern int xtod (); Xextern char escape (); Xextern void optional (); X @FUNKY STUFF~