|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ 6 T ┃
Length: 11298 (0x2c22) Types: TextFile Names: »6809_ops.h«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/asm/6809_ops.h«
#define BYTESPERLINE 5 /* # bytes per line on the listing */ #define SIGNED YES #define SWAPPED YES #define RELATIVE YES opdclass o_reg = { 1, NO , NO , NO , 0}; opdclass o_smem = { 8, NO , NO , NO , 0}; opdclass o_rmem = { 8, SIGNED, NO , RELATIVE, -2}; opdclass o_mem = {16, NO , NO , NO , 0}; opdclass o_off = { 8, SIGNED, NO , NO , 0}; opdclass o_data = { 8, SIGNED, NO , NO , 0}; opdclass o_data2 = {16, SIGNED, NO , NO , 0}; opdclass o_cond = { 4, NO , NO , NO , 0}; opdclass o_rsp = { 4, NO , NO , NO , 0}; insclass i_reg = {1, 1, &o_reg , &o_none, -4, 0}; insclass i_regp = {1, 1, &o_reg , &o_none, 0, 0}; insclass i_rr = {2, 2, &o_rsp , &o_rsp , 4, 8}; insclass i_rimed = {2, 2, &o_reg , &o_data, -6, 8}; insclass i_rimd2 = {3, 2, &o_reg , &o_data2,-6, 16}; insclass i_rdir = {2, 2, &o_reg , &o_smem, -6, 8}; insclass i_rx0 = {2, 2, &o_reg , &o_off , -6, 8}; insclass i_rx5 = {2, 2, &o_reg , &o_off , -6, 8}; insclass i_rx8 = {2, 2, &o_reg , &o_off , -6, 16}; insclass i_rx16 = {2, 2, &o_reg , &o_off , -6, 24}; insclass i_rxtd = {3, 2, &o_reg , &o_mem , -6, 16}; insclass i_imed = {2, 1, &o_data, &o_none, 8, 0}; insclass i_imd2 = {3, 1, &o_data2,&o_none, 16, 0}; insclass i_dir = {2, 1, &o_smem, &o_none, 8, 0}; insclass i_x0 = {2, 1, &o_off , &o_none, 8, 0}; insclass i_x5 = {2, 1, &o_off , &o_none, 8, 0}; insclass i_x8 = {2, 1, &o_off , &o_none, 16, 0}; insclass i_x16 = {2, 1, &o_off , &o_none, 24, 0}; insclass i_xtd = {3, 1, &o_mem , &o_none, 16, 0}; insclass i_imd22 = {4, 1, &o_data2,&o_none, 24, 0}; insclass i_dir2 = {3, 1, &o_smem, &o_none, 16, 0}; insclass i_x02 = {3, 1, &o_off , &o_none, 16, 0}; insclass i_x52 = {3, 1, &o_off , &o_none, 16, 0}; insclass i_x82 = {3, 1, &o_off , &o_none, 24, 0}; insclass i_x162 = {3, 1, &o_off , &o_none, 32, 0}; insclass i_xtd2 = {4, 1, &o_mem , &o_none, 24, 0}; insclass i_rel = {2, 1, &o_rmem, &o_none, 8, 0}; insclass i_cond = {2, 2, &o_cond, &o_rmem, 0, 8}; insclass i_nopd2 = {2, 0, &o_none, &o_none, 0, 0}; beginpattern c_cx choicedef c_~1 = {"~1s" , "~1z" , ~2, 0, 0xff, NO}; choicedef c_~1x = {"~1x0", "~1xa" , ~2, 0, 0x00, NO}; choicedef c_~1xa = {"~1x5", "~1xb" , ~2, 0, 0x1f, NO}; choicedef c_~1xb = {"~1x8", "~1x16", ~2, 0, 0xff, NO}; endpattern pattern c_cx,adc,2 pattern c_cx,add,2 pattern c_cx,and,2 pattern c_cx,bit,2 pattern c_cx,cma,2 pattern c_cx,eor,2 pattern c_cx,lda,2 pattern c_cx,ldr,2 pattern c_cx,ora,2 pattern c_cx,sbc,2 pattern c_cx,sub,2 pattern c_cx,addd,1 pattern c_cx,ldd,1 pattern c_cx,std,1 pattern c_cx,sta,1 pattern c_cx,str,1 pattern c_cx,subd,1 pattern c_cx,jsr,1 pattern c_cx,cpx,1 pattern c_cx,asl,1 pattern c_cx,asr,1 pattern c_cx,clr,1 pattern c_cx,com,1 pattern c_cx,dec,1 pattern c_cx,inc,1 pattern c_cx,lsl,1 pattern c_cx,lsr,1 pattern c_cx,neg,1 pattern c_cx,rol,1 pattern c_cx,ror,1 pattern c_cx,tst,1 pattern c_cx,jmp,1 pattern c_cx,cmpd,1 pattern c_cx,cmpy,1 pattern c_cx,ldy,1 pattern c_cx,sty,1 pattern c_cx,lds,1 pattern c_cx,sts,1 pattern c_cx,cmpu,1 pattern c_cx,cmps,1 beginpattern x_mem "~1m" , (insclass *)&c_~1, 0, choiceinstr, "~1" , (insclass *)&c_~1x, 0, choiceinstr, "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, "~1i" , &i_rimed, 0x~2000000|0x80000000, geninstr, "~1s" , &i_rdir , 0x~2000000|0x90000000, geninstr, "~1x0" , &i_rx0 , 0x~2000000|0xa0840000, geninstr, "~1x5" , &i_rx5 , 0x~2000000|0xa0000000, geninstr, "~1x8" , &i_rx8 , 0x~2000000|0xa0880000, geninstr, "~1x16", &i_rx16 , 0x~2000000|0xa0890000, geninstr, "~1z" , &i_rxtd , 0x~2000000|0xb0000000, geninstr, endpattern beginpattern x_xreg "~1m" , (insclass *)&c_~1, 0, choiceinstr, "~1" , (insclass *)&c_~1x, 0, choiceinstr, "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, "~1i" , &i_rimd2, 0x~2000000|0x80000000, geninstr, "~1s" , &i_rdir , 0x~2000000|0x90000000, geninstr, "~1x0" , &i_rx0 , 0x~2000000|0xa0840000, geninstr, "~1x5" , &i_rx5 , 0x~2000000|0xa0000000, geninstr, "~1x8" , &i_rx8 , 0x~2000000|0xa0880000, geninstr, "~1x16", &i_rx16 , 0x~2000000|0xa0890000, geninstr, "~1z" , &i_rxtd , 0x~2000000|0xb0000000, geninstr, endpattern beginpattern x_dou "~1m" , (insclass *)&c_~1 , 0, choiceinstr, "~1" , (insclass *)&c_~1x , 0, choiceinstr, "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, "~1i" , &i_imd2 , 0x~2000000|0x80000000, geninstr, "~1s" , &i_dir , 0x~2000000|0x90000000, geninstr, "~1x0" , &i_x0 , 0x~2000000|0xa0840000, geninstr, "~1x5" , &i_x5 , 0x~2000000|0xa0000000, geninstr, "~1x8" , &i_x8 , 0x~2000000|0xa0880000, geninstr, "~1x16", &i_x16 , 0x~2000000|0xa0890000, geninstr, "~1z" , &i_xtd , 0x~2000000|0xb0000000, geninstr, endpattern beginpattern x_reg "~1m" , (insclass *)&c_~1 , 0, choiceinstr, "~1" , (insclass *)&c_~1x , 0, choiceinstr, "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, "~1s" , &i_dir , 0x~2000000|0x00000000, geninstr, "~1a" , &i_reg , 0x~2000000|0x40000000, geninstr, "~1x0" , &i_x0 , 0x~2000000|0x60840000, geninstr, "~1x5" , &i_x5 , 0x~2000000|0x60000000, geninstr, "~1x8" , &i_x8 , 0x~2000000|0x60880000, geninstr, "~1x16", &i_x16 , 0x~2000000|0x60890000, geninstr, "~1z" , &i_xtd , 0x~2000000|0x70000000, geninstr, endpattern beginpattern x_reg2 "~1m" , (insclass *)&c_~1 , 0, choiceinstr, "~1" , (insclass *)&c_~1x , 0, choiceinstr, "~1xa" , (insclass *)&c_~1xa, 0, choiceinstr, "~1xb" , (insclass *)&c_~1xb, 0, choiceinstr, "~1i" , &i_imd22, 0x~20000|0x10800000, geninstr, "~1s" , &i_dir2 , 0x~20000|0x10900000, geninstr, "~1x0" , &i_x02 , 0x~20000|0x10a08400, geninstr, "~1x5" , &i_x52 , 0x~20000|0x10a00000, geninstr, "~1x8" , &i_x82 , 0x~20000|0x10a08800, geninstr, "~1x16" , &i_x162 , 0x~20000|0x10a08900, geninstr, "~1z" , &i_xtd2 , 0x~20000|0x10b00000, geninstr, endpattern opdef optab[] = { "abx" , &i_noopd, 0x3a000000, geninstr, pattern x_mem,adc,9 pattern x_mem,add,b pattern x_dou,addd,43 pattern x_mem,and,4 "andcc" , &i_imed , 0x1c000000, geninstr, pattern x_reg,asl,8 pattern x_reg,asr,7 "bc" , &i_cond , 0x20000000, geninstr, pattern x_mem,bit,5 "bra" , &i_rel , 0x20000000, geninstr, "bsr" , &i_rel , 0x8d000000, geninstr, pattern x_reg,clr,f pattern x_mem,cma,1 pattern x_reg2,cmpd,3 pattern x_reg2,cmps,10c pattern x_reg2,cmpu,103 pattern x_reg2,cmpy,c pattern x_reg,com,3 pattern x_dou,cpx,c "cwai" , &i_noopd, 0x3c000000, geninstr, "daa" , &i_noopd, 0x19000000, geninstr, pattern x_reg,dec,a pattern x_mem,eor,8 "exg" , &i_rr , 0x1e000000, geninstr, pattern x_reg,inc,c pattern x_reg,jmp,e pattern x_dou,jsr,d "lbra" , &i_xtd , 0x16000000, geninstr, "lbsr" , &i_xtd , 0x17000000, geninstr, pattern x_mem,lda,6 pattern x_dou,ldd,4c pattern x_xreg,ldr,e pattern x_reg2,lds,43 pattern x_reg2,ldy,e "leax" , &i_xtd , 0x30000000, geninstr, "leay" , &i_xtd , 0x31000000, geninstr, "leas" , &i_xtd , 0x32000000, geninstr, "leau" , &i_xtd , 0x33000000, geninstr, pattern x_reg,lsl,8 pattern x_reg,lsr,4 "mul" , &i_noopd, 0x3d000000, geninstr, pattern x_reg,neg,0 "nop" , &i_noopd, 0x12000000, geninstr, pattern x_mem,ora,a "orcc" , &i_imed , 0x1a000000, geninstr, "pshs" , &i_noopd, 0x34000000, geninstr, "pshu" , &i_noopd, 0x36000000, geninstr, "puls" , &i_noopd, 0x35000000, geninstr, "pulu" , &i_noopd, 0x37000000, geninstr, pattern x_reg,rol,9 pattern x_reg,ror,6 "rti" , &i_noopd, 0x3b000000, geninstr, "rts" , &i_noopd, 0x39000000, geninstr, pattern x_mem,sbc,2 "sei" , &i_noopd, 0x0f000000, geninstr, "sex" , &i_rr , 0x1d000000, geninstr, pattern x_mem,sta,7 pattern x_dou,std,4d pattern x_xreg,str,f pattern x_reg2,sts,4f pattern x_reg2,sty,f pattern x_mem,sub,0 pattern x_dou,subd,3 "swi" , &i_noopd, 0x3f000000, geninstr, "swi2" , &i_nopd2, 0x10000000, geninstr, "swi3" , &i_nopd2, 0x11000000, geninstr, "sync" , &i_noopd, 0x13000000, geninstr, "tfr" , &i_rr , 0x1f000000, geninstr, pattern x_reg,tst,d "" , &i_noopd, 0L, geninstr }; symbol predef[] = { {"ra" , 0x0, &o_reg , (segmnt *)0 }, {"rb" , 0x1, &o_reg , (segmnt *)0 }, {"rx" , 0x1, &o_reg , (segmnt *)0 }, {"sp" , 0x0, &o_reg , (segmnt *)0 }, {"nz" , 0x6, &o_cond, (segmnt *)0 }, {"z" , 0x7, &o_cond, (segmnt *)0 }, {"ne" , 0x6, &o_cond, (segmnt *)0 }, {"eq" , 0x7, &o_cond, (segmnt *)0 }, {"nc" , 0x4, &o_cond, (segmnt *)0 }, {"c" , 0x5, &o_cond, (segmnt *)0 }, {"gez", 0xc, &o_cond, (segmnt *)0 }, {"gz" , 0xe, &o_cond, (segmnt *)0 }, {"gt" , 0x2, &o_cond, (segmnt *)0 }, {"lez", 0xf, &o_cond, (segmnt *)0 }, {"le" , 0x3, &o_cond, (segmnt *)0 }, {"lz" , 0xd, &o_cond, (segmnt *)0 }, {"m" , 0xb, &o_cond, (segmnt *)0 }, {"ov" , 0x9, &o_cond, (segmnt *)0 }, {"nov", 0x8, &o_cond, (segmnt *)0 }, {"p" , 0xa, &o_cond, (segmnt *)0 }, {"ge" , 0x4, &o_cond, (segmnt *)0 }, {"lt" , 0x5, &o_cond, (segmnt *)0 }, {"D" , 0x0, &o_rsp , (segmnt *)0 }, {"X" , 0x1, &o_rsp , (segmnt *)0 }, {"Y" , 0x2, &o_rsp , (segmnt *)0 }, {"U" , 0x3, &o_rsp , (segmnt *)0 }, {"S" , 0x4, &o_rsp , (segmnt *)0 }, {"PC" , 0x5, &o_rsp , (segmnt *)0 }, {"A" , 0x8, &o_rsp , (segmnt *)0 }, {"B" , 0x9, &o_rsp , (segmnt *)0 }, {"CC" , 0xa, &o_rsp , (segmnt *)0 }, {"DPR", 0xb, &o_rsp , (segmnt *)0 }, {"" , 0x0, &o_none, (segmnt *)0 }, }; /* Partial decoding of the indexing occurs here. Differences in coding due * to size of offset constants is ored in through extended opcode masks. */ #define has(x) index(str,'x') void optional (str, obuf) char *str; Word *obuf; { static struct { unsigned char value; char *str; } *xpt, stuff[] = { 0x8c, "P" , 0x9c, "*P" , 0x9f, "*" , 0x80, "+X" , 0x81, "#X" , 0x82, "-X" , 0x83, "=X" , 0x84, "X" , 0x85, "BX" , 0x86, "AX" , 0x8b, "DX" , 0x91, "#*X" , 0x93, "*=X" , 0x94, "*X" , 0x95, "*BX" , 0x96, "*AX" , 0x9b, "*DX" , 0xa0, "+Y" , 0xa1, "#Y" , 0xa2, "-Y" , 0xa3, "*=Y" , 0xa3, "=Y" , 0xa4, "Y" , 0xa5, "BY" , 0xa6, "AY" , 0xab, "DY" , 0xb1, "#*Y" , 0xb4, "*Y" , 0xb5, "*BY" , 0xb6, "*AY" , 0xbb, "*DY" , 0xc0, "+U" , 0xc1, "#U" , 0xc2, "-U" , 0xc3, "=U" , 0xc4, "U" , 0xc5, "BU" , 0xc6, "AU" , 0xcb, "DU" , 0xd1, "#*U" , 0xd3, "*=U" , 0xd4, "*U" , 0xd5, "*BU" , 0xd6, "*AU" , 0xdb, "*DU" , 0xe0, "+S" , 0xe1, "#S" , 0xe2, "-S" , 0xe3, "=S" , 0xe4, "S" , 0xe5, "BS" , 0xe6, "AS" , 0xeb, "DS" , 0xf1, "#*S" , 0xf3, "*=S" , 0xf4, "*S" , 0xf5, "*BS" , 0xf6, "*AS" , 0xfb, "*DS" , 0x00, "" , }; char t, *pt; start: for (pt = str; pt[1]; pt++) { /* sort the bytes into order */ if (*(pt-1) > *pt) { t = *(pt+1); *(pt+1) = *pt; *pt = t; goto start; } } for (xpt = stuff; xpt->value; xpt++) { /* then look 'em up. */ if (strcmp (xpt->str, str) == 0) { obuf[*obuf == 0x10 || *obuf == 0x11 ? 2 : 1] |= xpt->value; return; } } reporterr (E_BADOPT); return; }