home *** CD-ROM | disk | FTP | other *** search
- 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 <ctype.h>
- X#include <stdio.h>
- 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<BYTPERLONG?MAXBYTPERINS:BYTPERLONG)
- X#define LONGLEN 32 /* length of acc in bits */
- X#define BINBUFLEN 250 /* max bytes of data in output record */
- X
- X#define iswhite(c) (c==' '||c=='\t')
- X#define iseol(c) (c=='\0'||c==';'||c=='\n')
- X#define isdelim(c) (c==','||c==':'||iseol(c)||iswhite(c))
- X#define islabel(c) (isalnum(c)||c=='_')
- X
- X#define A_MAX 6 /* highest error code causing immediate abort */
- X#define E_PASS1 1 /* error codes */
- X#define E_PASS2 2
- X#define E_STOFLO 3
- X#define E_INPUT 4
- X#define E_INCL 5
- X#define E_INCLSYN 6
- X#define E_EXPR 7
- X#define E_UNDEF 8
- X#define E_ILLOP 9
- X#define E_MULT 10
- X#define E_NOPS 11
- X#define E_TOOBIG 12
- X#define E_NEG 13
- X#define E_SEG 14
- X#define E_BADOPT 15
- X#define E_NOEND 16
- X
- X#define NOOP -1 /* expression operators */
- X#define PLUS 0
- X#define MINUS 1
- X#define MULT 2
- X#define DIV 3
- X#define MOD 4
- X#define OR 5
- X#define AND 6
- X#define EXOR 7
- X#define SHLF 8
- X#define SHRT 9
- X#define OPSTRING "+-*/%|&^<>" /* 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~
-
-