[mod.sources] v09i027: Generic assembler for micro's, Part02/02

sources-request@mirror.UUCP (03/13/87)

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~