home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume9
/
assem2
/
part02
< prev
next >
Wrap
Text File
|
1987-03-11
|
43KB
|
1,122 lines
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~