home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2207 < prev    next >
Encoding:
Internet Message Format  |  1990-12-28  |  56.8 KB

  1. From: markz@ssc.UUCP (Mark Zenier)
  2. Newsgroups: alt.sources
  3. Subject: Frankenstein Cross Assemblers, Intel 8096 flavor, Part 2 of 2
  4. Message-ID: <607@ssc.UUCP>
  5. Date: 5 Dec 90 06:18:10 GMT
  6.  
  7. ---- Cut Here and feed the following to sh ----
  8. #!/bin/sh
  9. # This is part 02 of Frankasm/As8096
  10. # ============= as8096.y ==============
  11. if test -f 'as8096.y' -a X"$1" != X"-c"; then
  12.     echo 'x - skipping as8096.y (File already exists)'
  13. else
  14. echo 'x - extracting as8096.y (Text)'
  15. sed 's/^X//' << 'SHAR_EOF' > 'as8096.y' &&
  16. X%{
  17. X
  18. X/*
  19. XHEADER:     ;
  20. XTITLE:         Frankenstein Cross Assemblers;
  21. XVERSION:     2.0;
  22. XDESCRIPTION: "    Reconfigurable Cross-assembler producing Intel (TM)
  23. X        Hex format object records.  ";
  24. XKEYWORDS:     cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809, 
  25. X        6811, tms7000, 8048, 8051, 8096, z8, z80;
  26. XSYSTEM:     UNIX, MS-Dos ;
  27. XFILENAME:     as8096.y;
  28. XWARNINGS:     "This software is in the public domain.  
  29. X        Any prior copyright claims are relinquished.  
  30. X
  31. X        This software is distributed with no warranty whatever.  
  32. X        The author takes no responsibility for the consequences 
  33. X        of its use.
  34. X
  35. X        Yacc (or Bison) required to compile."  ;
  36. XSEE-ALSO:     as8096.doc,frasmain.c;    
  37. XAUTHORS:     Mark Zenier;
  38. XCOMPILERS:     Microport Sys V/AT, ATT Yacc, Turbo C V1.5, Bison (CUG disk 285)
  39. X        (previous versions Xenix, Unisoft 68000 Version 7, Sun 3);
  40. X*/
  41. X/* 8096 instruction generation file */
  42. X/* November 17, 1990 */
  43. X
  44. X/*
  45. X    description    frame work parser description for framework cross
  46. X            assemblers
  47. X    history        February 2, 1988
  48. X            September 11, 1990 - merge table definition
  49. X            September 12, 1990 - short file names
  50. X            September 14, 1990 - short variable names
  51. X            September 17, 1990 - use yylex as external
  52. X*/
  53. X#include <stdio.h>
  54. X#include "frasmdat.h"
  55. X#include "fragcon.h"
  56. X
  57. X#define yylex lexintercept
  58. X
  59. X/*    0000.0000.0000.00xx    short/long index selection */
  60. X#define    ADDR        0x3
  61. X#define    DIRECT        0x1
  62. X#define    EXTENDED    0x2
  63. X/*    0000.0000.0000.x000    80196 select */
  64. X#define    CPU196        0x8
  65. X#define    CPU96        0
  66. X#define ST_INH 0x1
  67. X#define ST_DIR1 0x2
  68. X#define ST_DIR2 0x4
  69. X#define ST_DIR3 0x8
  70. X#define ST_IMM1 0x10
  71. X#define ST_IMM2 0x20
  72. X#define ST_IMM3 0x40
  73. X#define ST_IND1 0x80
  74. X#define ST_INC1 0x100
  75. X#define ST_IND2 0x200
  76. X#define ST_INC2 0x400
  77. X#define ST_IND3 0x800
  78. X#define ST_INC3 0x1000
  79. X#define ST_INX1 0x2000
  80. X#define ST_INX2 0x4000
  81. X#define ST_INX3 0x8000
  82. X    
  83. X    int    cpuselect = CPU196;
  84. X    static char    genbdef[] = "[1=];";
  85. X    static char    genwdef[] = "[1=]y"; /* x for normal, y for byte rev */
  86. X    char ignosyn[] = "[Xinvalid syntax for instruction";
  87. X    char ignosel[] = "[Xinvalid operands/illegal instruction for cpu";
  88. X/*    constants for increment bit in indirect operand */
  89. X#define    AUTOINC        1
  90. X#define    NOINC        0
  91. X
  92. X    long    labelloc;
  93. X    static int satsub;
  94. X    int    ifstkpt = 0;
  95. X    int    fraifskip = FALSE;
  96. X
  97. X    struct symel * endsymbol = SYMNULL;
  98. X
  99. X%}
  100. X%union {
  101. X    int    intv;
  102. X    long     longv;
  103. X    char    *strng;
  104. X    struct symel *symb;
  105. X}
  106. X
  107. X%token <intv> KOC_WDEF
  108. X%token <intv> KOC_BDEF
  109. X%token <intv> KOC_ELSE
  110. X%token <intv> KOC_END
  111. X%token <intv> KOC_ENDI
  112. X%token <intv> KOC_EQU
  113. X%token <intv> KOC_IF
  114. X%token <intv> KOC_INCLUDE
  115. X%token <intv> KOC_ORG
  116. X%token <intv> KOC_RESM
  117. X%token <intv> KOC_SDEF
  118. X%token <intv> KOC_SET
  119. X%token <intv> KOC_CHSET
  120. X%token <intv> KOC_CHDEF
  121. X%token <intv> KOC_CHUSE
  122. X%token <intv> KOC_AWRESM
  123. X%token <intv> KOC_ALRESM
  124. X%token <intv> KOC_ALDEF
  125. X%token <intv> KOC_AWDEF
  126. X%token <intv> KOC_CPU
  127. X%token <intv> KOC_opcode
  128. X
  129. X%token <longv> CONSTANT
  130. X%token EOL
  131. X%token KEOP_AND
  132. X%token KEOP_DEFINED
  133. X%token KEOP_EQ
  134. X%token KEOP_GE
  135. X%token KEOP_GT
  136. X%token KEOP_HIGH
  137. X%token KEOP_LE
  138. X%token KEOP_LOW
  139. X%token KEOP_LT
  140. X%token KEOP_MOD
  141. X%token KEOP_MUN
  142. X%token KEOP_NE
  143. X%token KEOP_NOT
  144. X%token KEOP_OR
  145. X%token KEOP_SHL
  146. X%token KEOP_SHR
  147. X%token KEOP_XOR
  148. X%token KEOP_locctr
  149. X%token <symb> LABEL
  150. X%token <strng> STRING
  151. X%token <symb> SYMBOL
  152. X
  153. X%token KTK_invalid
  154. X
  155. X%right    KEOP_HIGH KEOP_LOW
  156. X%left    KEOP_OR KEOP_XOR
  157. X%left    KEOP_AND
  158. X%right    KEOP_NOT
  159. X%nonassoc    KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ
  160. X%left    '+' '-'
  161. X%left    '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR
  162. X%right    KEOP_MUN
  163. X
  164. X
  165. X%type <intv> expr exprlist stringlist
  166. X
  167. X%start file
  168. X
  169. X%%
  170. X
  171. Xfile    :    file allline
  172. X    |    allline
  173. X    ;
  174. X
  175. Xallline    :     line EOL
  176. X            {
  177. X                clrexpr();
  178. X            }
  179. X    |    EOL
  180. X    |    error EOL
  181. X            {
  182. X                clrexpr();
  183. X                yyerrok;
  184. X            }
  185. X    ;
  186. X
  187. Xline    :    LABEL KOC_END 
  188. X            {
  189. X                endsymbol = $1;
  190. X                nextreadact = Nra_end;
  191. X            }
  192. X    |          KOC_END 
  193. X            {
  194. X                nextreadact = Nra_end;
  195. X            }
  196. X    |    KOC_INCLUDE STRING
  197. X            {
  198. X        if(nextfstk >= FILESTKDPTH)
  199. X        {
  200. X            fraerror("include file nesting limit exceeded");
  201. X        }
  202. X        else
  203. X        {
  204. X            infilestk[nextfstk].fnm = savestring($2,strlen($2));
  205. X            if( (infilestk[nextfstk].fpt = fopen($2,"r"))
  206. X                ==(FILE *)NULL )
  207. X            {
  208. X                fraerror("cannot open include file");
  209. X            }
  210. X            else
  211. X            {
  212. X                nextreadact = Nra_new;
  213. X            }
  214. X        }
  215. X            }
  216. X    |    LABEL KOC_EQU expr 
  217. X            {
  218. X                if($1 -> seg == SSG_UNDEF)
  219. X                {
  220. X                    pevalexpr(0, $3);
  221. X                    if(evalr[0].seg == SSG_ABS)
  222. X                    {
  223. X                        $1 -> seg = SSG_EQU;
  224. X                        $1 -> value = evalr[0].value;
  225. X                        prtequvalue("C: 0x%lx\n",
  226. X                            evalr[0].value);
  227. X                    }
  228. X                    else
  229. X                    {
  230. X                        fraerror(
  231. X                    "noncomputable expression for EQU");
  232. X                    }
  233. X                }
  234. X                else
  235. X                {
  236. X                    fraerror(
  237. X                "cannot change symbol value with EQU");
  238. X                }
  239. X            }
  240. X    |    LABEL KOC_SET expr 
  241. X            {
  242. X                if($1 -> seg == SSG_UNDEF
  243. X                   || $1 -> seg == SSG_SET)
  244. X                {
  245. X                    pevalexpr(0, $3);
  246. X                    if(evalr[0].seg == SSG_ABS)
  247. X                    {
  248. X                        $1 -> seg = SSG_SET;
  249. X                        $1 -> value = evalr[0].value;
  250. X                        prtequvalue("C: 0x%lx\n",
  251. X                            evalr[0].value);
  252. X                    }
  253. X                    else
  254. X                    {
  255. X                        fraerror(
  256. X                    "noncomputable expression for SET");
  257. X                    }
  258. X                }
  259. X                else
  260. X                {
  261. X                    fraerror(
  262. X                "cannot change symbol value with SET");
  263. X                }
  264. X            }
  265. X    |    KOC_IF expr 
  266. X            {
  267. X        if((++ifstkpt) < IFSTKDEPTH)
  268. X        {
  269. X            pevalexpr(0, $2);
  270. X            if(evalr[0].seg == SSG_ABS)
  271. X            {
  272. X                if(evalr[0].value != 0)
  273. X                {
  274. X                    elseifstk[ifstkpt] = If_Skip;
  275. X                    endifstk[ifstkpt] = If_Active;
  276. X                }
  277. X                else
  278. X                {
  279. X                    fraifskip = TRUE;
  280. X                    elseifstk[ifstkpt] = If_Active;
  281. X                    endifstk[ifstkpt] = If_Active;
  282. X                }
  283. X            }
  284. X            else
  285. X            {
  286. X                fraifskip = TRUE;
  287. X                elseifstk[ifstkpt] = If_Active;
  288. X                endifstk[ifstkpt] = If_Active;
  289. X            }
  290. X        }
  291. X        else
  292. X        {
  293. X            fraerror("IF stack overflow");
  294. X        }
  295. X            }
  296. X                        
  297. X    |    KOC_IF 
  298. X            {
  299. X        if(fraifskip) 
  300. X        {
  301. X            if((++ifstkpt) < IFSTKDEPTH)
  302. X            {
  303. X                    elseifstk[ifstkpt] = If_Skip;
  304. X                    endifstk[ifstkpt] = If_Skip;
  305. X            }
  306. X            else
  307. X            {
  308. X                fraerror("IF stack overflow");
  309. X            }
  310. X        }
  311. X        else
  312. X        {
  313. X            yyerror("syntax error");
  314. X            YYERROR;
  315. X        }
  316. X                }
  317. X                        
  318. X    |    KOC_ELSE 
  319. X            {
  320. X                switch(elseifstk[ifstkpt])
  321. X                {
  322. X                case If_Active:
  323. X                    fraifskip = FALSE;
  324. X                    break;
  325. X                
  326. X                case If_Skip:
  327. X                    fraifskip = TRUE;
  328. X                    break;
  329. X                
  330. X                case If_Err:
  331. X                    fraerror("ELSE with no matching if");
  332. X                    break;
  333. X                }
  334. X            }
  335. X
  336. X    |    KOC_ENDI 
  337. X            {
  338. X                switch(endifstk[ifstkpt])
  339. X                {
  340. X                case If_Active:
  341. X                    fraifskip = FALSE;
  342. X                    ifstkpt--;
  343. X                    break;
  344. X                
  345. X                case If_Skip:
  346. X                    fraifskip = TRUE;
  347. X                    ifstkpt--;
  348. X                    break;
  349. X                
  350. X                case If_Err:
  351. X                    fraerror("ENDI with no matching if");
  352. X                    break;
  353. X                }
  354. X            }
  355. X    |    LABEL KOC_ORG expr 
  356. X            {
  357. X                pevalexpr(0, $3);
  358. X                if(evalr[0].seg == SSG_ABS)
  359. X                {
  360. X                    locctr = labelloc = evalr[0].value;
  361. X                    if($1 -> seg == SSG_UNDEF)
  362. X                    {
  363. X                        $1 -> seg = SSG_ABS;
  364. X                        $1 -> value = labelloc;
  365. X                    }
  366. X                    else
  367. X                        fraerror(
  368. X                        "multiple definition of label");
  369. X                    prtequvalue("C: 0x%lx\n",
  370. X                        evalr[0].value);
  371. X                }
  372. X                else
  373. X                {
  374. X                    fraerror(
  375. X                     "noncomputable expression for ORG");
  376. X                }
  377. X            }
  378. X    |          KOC_ORG expr 
  379. X            {
  380. X                pevalexpr(0, $2);
  381. X                if(evalr[0].seg == SSG_ABS)
  382. X                {
  383. X                    locctr = labelloc = evalr[0].value;
  384. X                    prtequvalue("C: 0x%lx\n",
  385. X                        evalr[0].value);
  386. X                }
  387. X                else
  388. X                {
  389. X                    fraerror(
  390. X                     "noncomputable expression for ORG");
  391. X                }
  392. X            }
  393. X    |    LABEL KOC_CHSET
  394. X            {
  395. X                if($1 -> seg == SSG_UNDEF)
  396. X                {
  397. X                    $1 -> seg = SSG_EQU;
  398. X                    if( ($1->value = chtcreate()) <= 0)
  399. X                    {
  400. X        fraerror( "cannot create character translation table");
  401. X                    }
  402. X                    prtequvalue("C: 0x%lx\n", $1 -> value);
  403. X                }
  404. X                else
  405. X                {
  406. X            fraerror( "multiple definition of label");
  407. X                }
  408. X            }
  409. X    |        KOC_CHUSE
  410. X            {
  411. X                chtcpoint = (int *) NULL;
  412. X                prtequvalue("C: 0x%lx\n", 0L);
  413. X            }
  414. X    |        KOC_CHUSE expr
  415. X            {
  416. X                pevalexpr(0, $2);
  417. X                if( evalr[0].seg == SSG_ABS)
  418. X                {
  419. X                    if( evalr[0].value == 0)
  420. X                    {
  421. X                        chtcpoint = (int *)NULL;
  422. X                        prtequvalue("C: 0x%lx\n", 0L);
  423. X                    }
  424. X                    else if(evalr[0].value < chtnxalph)
  425. X                    {
  426. X                chtcpoint = chtatab[evalr[0].value];
  427. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  428. X                    }
  429. X                    else
  430. X                    {
  431. X            fraerror("nonexistent character translation table");
  432. X                    }
  433. X                }
  434. X                else
  435. X                {
  436. X                    fraerror("noncomputable expression");
  437. X                }
  438. X            }
  439. X    |        KOC_CHDEF STRING ',' exprlist
  440. X            {
  441. X        int findrv, numret, *charaddr;
  442. X        char *sourcestr = $2, *before;
  443. X
  444. X        if(chtnpoint != (int *)NULL)
  445. X        {
  446. X            for(satsub = 0; satsub < $4; satsub++)
  447. X            {
  448. X                before = sourcestr;
  449. X
  450. X                pevalexpr(0, exprlist[satsub]);
  451. X                findrv = chtcfind(chtnpoint, &sourcestr,
  452. X                        &charaddr, &numret);
  453. X                if(findrv == CF_END)
  454. X                {
  455. X            fraerror("more expressions than characters");
  456. X                    break;
  457. X                }
  458. X
  459. X                if(evalr[0].seg == SSG_ABS)
  460. X                {
  461. X                    switch(findrv)
  462. X                    {
  463. X                    case CF_UNDEF:
  464. X                        {
  465. X                if(evalr[0].value < 0 ||
  466. X                    evalr[0].value > 255)
  467. X                {
  468. X            frawarn("character translation value truncated");
  469. X                }
  470. X                *charaddr = evalr[0].value & 0xff;
  471. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  472. X                        }
  473. X                        break;
  474. X
  475. X                    case CF_INVALID:
  476. X                    case CF_NUMBER:
  477. X                fracherror("invalid character to define", 
  478. X                    before, sourcestr);
  479. X                        break;
  480. X
  481. X                    case CF_CHAR:
  482. X                fracherror("character already defined", 
  483. X                    before, sourcestr);
  484. X                        break;
  485. X                    }
  486. X                }
  487. X                else
  488. X                {
  489. X                    fraerror("noncomputable expression");
  490. X                }
  491. X            }
  492. X
  493. X            if( *sourcestr != '\0')
  494. X            {
  495. X                fraerror("more characters than expressions");
  496. X            }
  497. X        }
  498. X        else
  499. X        {
  500. X            fraerror("no CHARSET statement active");
  501. X        }
  502. X            
  503. X            }
  504. X    |    LABEL 
  505. X            {
  506. X            if($1 -> seg == SSG_UNDEF)
  507. X            {
  508. X                $1 -> seg = SSG_ABS;
  509. X                $1 -> value = labelloc;
  510. X                prtequvalue("C: 0x%lx\n", labelloc);
  511. X
  512. X            }
  513. X            else
  514. X                fraerror(
  515. X                "multiple definition of label");
  516. X            }
  517. X    |    labeledline
  518. X    ;
  519. X
  520. Xlabeledline :    LABEL genline
  521. X            {
  522. X            if($1 -> seg == SSG_UNDEF)
  523. X            {
  524. X                $1 -> seg = SSG_ABS;
  525. X                $1 -> value = labelloc;
  526. X            }
  527. X            else
  528. X                fraerror(
  529. X                "multiple definition of label");
  530. X            labelloc = locctr;
  531. X            }
  532. X                
  533. X    |    genline
  534. X            {
  535. X                labelloc = locctr;
  536. X            }
  537. X    ;
  538. X
  539. Xgenline    :    KOC_BDEF    exprlist 
  540. X            {
  541. X                genlocrec(currseg, labelloc);
  542. X                for( satsub = 0; satsub < $2; satsub++)
  543. X                {
  544. X                    pevalexpr(1, exprlist[satsub]);
  545. X                    locctr += geninstr(genbdef);
  546. X                }
  547. X            }
  548. X    |    KOC_SDEF stringlist 
  549. X            {
  550. X                genlocrec(currseg, labelloc);
  551. X                for(satsub = 0; satsub < $2; satsub++)
  552. X                {
  553. X                    locctr += genstring(stringlist[satsub]);
  554. X                }
  555. X            }
  556. X    |    KOC_WDEF exprlist 
  557. X            {
  558. X                genlocrec(currseg, labelloc);
  559. X                for( satsub = 0; satsub < $2; satsub++)
  560. X                {
  561. X                    pevalexpr(1, exprlist[satsub]);
  562. X                    locctr += geninstr(genwdef);
  563. X                }
  564. X            }    
  565. X    |    KOC_RESM expr 
  566. X            {
  567. X                pevalexpr(0, $2);
  568. X                if(evalr[0].seg == SSG_ABS)
  569. X                {
  570. X                    locctr = labelloc + evalr[0].value;
  571. X                    prtequvalue("C: 0x%lx\n", labelloc);
  572. X                }
  573. X                else
  574. X                {
  575. X                    fraerror(
  576. X                 "noncomputable result for RMB expression");
  577. X                }
  578. X            }
  579. X    ;
  580. X
  581. Xexprlist :    exprlist ',' expr
  582. X            {
  583. X                exprlist[nextexprs ++ ] = $3;
  584. X                $$ = nextexprs;
  585. X            }
  586. X    |    expr
  587. X            {
  588. X                nextexprs = 0;
  589. X                exprlist[nextexprs ++ ] = $1;
  590. X                $$ = nextexprs;
  591. X            }
  592. X    ;
  593. X
  594. Xstringlist :    stringlist ',' STRING
  595. X            {
  596. X                stringlist[nextstrs ++ ] = $3;
  597. X                $$ = nextstrs;
  598. X            }
  599. X    |    STRING
  600. X            {
  601. X                nextstrs = 0;
  602. X                stringlist[nextstrs ++ ] = $1;
  603. X                $$ = nextstrs;
  604. X            }
  605. X    ;
  606. X
  607. X
  608. Xgenline :    KOC_AWRESM expr 
  609. X            {
  610. X                while(labelloc & 1)
  611. X                {
  612. X                    labelloc += 1;
  613. X                }
  614. X
  615. X                pevalexpr(0, $2);
  616. X                if(evalr[0].seg == SSG_ABS)
  617. X                {
  618. X                    locctr = labelloc + (2*evalr[0].value);
  619. X                    prtequvalue("C: 0x%lx\n", labelloc);
  620. X                }
  621. X                else
  622. X                {
  623. X                    fraerror(
  624. X                 "noncomputable result for RMB expression");
  625. X                }
  626. X            }
  627. X    ;
  628. Xgenline :    KOC_ALRESM expr 
  629. X            {
  630. X                while(labelloc & 3)
  631. X                {
  632. X                    labelloc += 1;
  633. X                }
  634. X
  635. X                pevalexpr(0, $2);
  636. X                if(evalr[0].seg == SSG_ABS)
  637. X                {
  638. X                    locctr = labelloc + (4*evalr[0].value);
  639. X                    prtequvalue("C: 0x%lx\n", labelloc);
  640. X                }
  641. X                else
  642. X                {
  643. X                    fraerror(
  644. X                 "noncomputable result for RMB expression");
  645. X                }
  646. X            }
  647. X    ;
  648. Xgenline :    KOC_ALDEF exprlist 
  649. X            {
  650. X                while(labelloc & 3)
  651. X                {
  652. X                    labelloc = (locctr += 1);
  653. X                }
  654. X
  655. X                genlocrec(currseg, labelloc);
  656. X                for( satsub = 0; satsub < $2; satsub++)
  657. X                {
  658. X                    pevalexpr(1, exprlist[satsub]);
  659. X                    locctr += geninstr(
  660. X                        "[1=]~.ffff&y!.10}y");
  661. X                }
  662. X            }    
  663. X    ;
  664. Xgenline :    KOC_AWDEF exprlist 
  665. X            {
  666. X                if(labelloc & 1)
  667. X                {
  668. X                    labelloc = (locctr += 1);
  669. X                }
  670. X
  671. X                genlocrec(currseg, labelloc);
  672. X                for( satsub = 0; satsub < $2; satsub++)
  673. X                {
  674. X                    pevalexpr(1, exprlist[satsub]);
  675. X                    locctr += geninstr(genwdef);
  676. X                }
  677. X            }    
  678. X    ;
  679. Xline    :    KOC_CPU STRING
  680. X            {
  681. X        if( ! cpumatch($2))
  682. X        {
  683. X            fraerror("unknown cpu type, 80196 assumed");
  684. X            cpuselect = CPU196;
  685. X        }
  686. X            }
  687. X    ;
  688. Xgenline : KOC_opcode 
  689. X            {
  690. X        genlocrec(currseg, labelloc);
  691. X        locctr += geninstr(findgen($1, ST_INH, cpuselect));
  692. X            }
  693. X    ;
  694. Xgenline : KOC_opcode  expr
  695. X            {
  696. X        genlocrec(currseg, labelloc);
  697. X        pevalexpr(1,$2);
  698. X        locctr += geninstr(findgen($1, ST_DIR1, cpuselect
  699. X                 + ( (evalr[1].seg == SSG_ABS 
  700. X                && evalr[1].value >= 0
  701. X                && evalr[1].value <= 255 )
  702. X                ? DIRECT : EXTENDED ) ) );
  703. X            }
  704. X    ;
  705. Xgenline : KOC_opcode  expr ',' expr
  706. X            {
  707. X        genlocrec(currseg, labelloc);
  708. X        pevalexpr(1,$2);
  709. X        pevalexpr(2,$4);
  710. X        locctr += geninstr(findgen($1, ST_DIR2, cpuselect
  711. X                 + ( (evalr[2].seg == SSG_ABS 
  712. X                && evalr[2].value >= 0
  713. X                && evalr[2].value <= 255 )
  714. X                ? DIRECT : EXTENDED ) ) );
  715. X            }
  716. X    ;
  717. Xgenline : KOC_opcode  expr ',' expr ',' expr
  718. X            {
  719. X        genlocrec(currseg, labelloc);
  720. X        pevalexpr(1,$2);
  721. X        pevalexpr(2,$4);
  722. X        pevalexpr(3,$6);
  723. X        locctr += geninstr(findgen($1, ST_DIR3, cpuselect
  724. X                 + ( (evalr[3].seg == SSG_ABS 
  725. X                && evalr[3].value >= 0
  726. X                && evalr[3].value <= 255 )
  727. X                ? DIRECT : EXTENDED ) ) );
  728. X            }
  729. X    ;
  730. Xgenline : KOC_opcode  '#' expr
  731. X            {
  732. X        genlocrec(currseg, labelloc);
  733. X        pevalexpr(1,$3);
  734. X        locctr += geninstr(findgen($1, ST_IMM1, cpuselect));
  735. X            }
  736. X    ;
  737. Xgenline : KOC_opcode  expr ',' '#' expr
  738. X            {
  739. X        genlocrec(currseg, labelloc);
  740. X        pevalexpr(1,$2);
  741. X        pevalexpr(2,$5);
  742. X        locctr += geninstr(findgen($1, ST_IMM2, cpuselect));
  743. X            }
  744. X    ;
  745. Xgenline : KOC_opcode  expr ',' expr ',' '#' expr
  746. X            {
  747. X        genlocrec(currseg, labelloc);
  748. X        pevalexpr(1,$2);
  749. X        pevalexpr(2,$4);
  750. X        pevalexpr(3,$7);
  751. X        locctr += geninstr(findgen($1, ST_IMM3, cpuselect));
  752. X            }
  753. X    ;
  754. Xgenline : KOC_opcode  '[' expr ']'
  755. X            {
  756. X        genlocrec(currseg, labelloc);
  757. X        pevalexpr(1,$3);
  758. X        evalr[2].value = NOINC;
  759. X        locctr += geninstr(findgen($1, ST_IND1, cpuselect));
  760. X            }
  761. X    ;
  762. Xgenline : KOC_opcode  '[' expr ']' '+'
  763. X            {
  764. X        genlocrec(currseg, labelloc);
  765. X        pevalexpr(1,$3);
  766. X        evalr[2].value = AUTOINC;
  767. X        locctr += geninstr(findgen($1, ST_IND1, cpuselect));
  768. X            }
  769. X    ;
  770. Xgenline : KOC_opcode  expr ',' '[' expr ']'
  771. X            {
  772. X        genlocrec(currseg, labelloc);
  773. X        pevalexpr(1,$2);
  774. X        pevalexpr(2,$5);
  775. X        evalr[3].value = NOINC;
  776. X        locctr += geninstr(findgen($1, ST_IND2, cpuselect));
  777. X            }
  778. X    ;
  779. Xgenline : KOC_opcode  expr ',' '[' expr ']' '+'
  780. X            {
  781. X        genlocrec(currseg, labelloc);
  782. X        pevalexpr(1,$2);
  783. X        pevalexpr(2,$5);
  784. X        evalr[3].value = AUTOINC;
  785. X        locctr += geninstr(findgen($1, ST_IND2, cpuselect));
  786. X            }
  787. X    ;
  788. Xgenline : KOC_opcode  expr ',' expr ',' '[' expr ']'
  789. X            {
  790. X        genlocrec(currseg, labelloc);
  791. X        pevalexpr(1,$2);
  792. X        pevalexpr(2,$4);
  793. X        pevalexpr(3,$7);
  794. X        evalr[4].value = NOINC;
  795. X        locctr += geninstr(findgen($1, ST_IND3, cpuselect));
  796. X            }
  797. X    ;
  798. Xgenline : KOC_opcode  expr ',' expr ',' '[' expr ']' '+'
  799. X            {
  800. X        genlocrec(currseg, labelloc);
  801. X        pevalexpr(1,$2);
  802. X        pevalexpr(2,$4);
  803. X        pevalexpr(3,$7);
  804. X        evalr[4].value = AUTOINC;
  805. X        locctr += geninstr(findgen($1, ST_IND3, cpuselect));
  806. X            }
  807. X    ;
  808. Xgenline : KOC_opcode  expr '[' expr ']'
  809. X            {
  810. X        genlocrec(currseg, labelloc);
  811. X        pevalexpr(1,$2);
  812. X        pevalexpr(2,$4);
  813. X        locctr += geninstr(findgen($1, ST_INX1, cpuselect
  814. X                 + ( (evalr[1].seg == SSG_ABS 
  815. X                && evalr[1].value >= -128
  816. X                && evalr[1].value <= 127 )
  817. X                ? DIRECT : EXTENDED ) ) );
  818. X            }
  819. X    ;
  820. Xgenline : KOC_opcode  expr ',' expr '[' expr ']'
  821. X            {
  822. X        genlocrec(currseg, labelloc);
  823. X        pevalexpr(1,$2);
  824. X        pevalexpr(2,$4);
  825. X        pevalexpr(3,$6);
  826. X        locctr += geninstr(findgen($1, ST_INX2, cpuselect
  827. X                 + ( (evalr[2].seg == SSG_ABS 
  828. X                && evalr[2].value >= -128
  829. X                && evalr[2].value <= 127 )
  830. X                ? DIRECT : EXTENDED ) ) );
  831. X            }
  832. X    ;
  833. Xgenline : KOC_opcode  expr ',' expr ',' expr '[' expr ']'
  834. X            {
  835. X        genlocrec(currseg, labelloc);
  836. X        pevalexpr(1,$2);
  837. X        pevalexpr(2,$4);
  838. X        pevalexpr(3,$6);
  839. X        pevalexpr(4,$8);
  840. X        locctr += geninstr(findgen($1, ST_INX3, cpuselect
  841. X                 + ( (evalr[3].seg == SSG_ABS 
  842. X                && evalr[3].value >= -128
  843. X                && evalr[3].value <= 127 )
  844. X                ? DIRECT : EXTENDED ) ) );
  845. X            }
  846. X    ;
  847. Xexpr    :    '+' expr %prec KEOP_MUN
  848. X            {
  849. X                $$ = $2;
  850. X            }
  851. X    |    '-' expr %prec KEOP_MUN
  852. X            {
  853. X                $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L,
  854. X                    SYMNULL);
  855. X            }
  856. X    |    KEOP_NOT expr
  857. X            {
  858. X                $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L,
  859. X                    SYMNULL);
  860. X            }
  861. X    |    KEOP_HIGH expr
  862. X            {
  863. X                $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L,
  864. X                    SYMNULL);
  865. X            }
  866. X    |    KEOP_LOW expr
  867. X            {
  868. X                $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L,
  869. X                    SYMNULL);
  870. X            }
  871. X    |    expr '*' expr
  872. X            {
  873. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L,
  874. X                    SYMNULL);
  875. X            }
  876. X    |    expr '/' expr
  877. X            {
  878. X                $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L,
  879. X                    SYMNULL);
  880. X            }
  881. X    |    expr '+' expr
  882. X            {
  883. X                $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L,
  884. X                    SYMNULL);
  885. X            }
  886. X    |    expr '-' expr
  887. X            {
  888. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L,
  889. X                    SYMNULL);
  890. X            }
  891. X    |    expr KEOP_MOD expr
  892. X            {
  893. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L,
  894. X                    SYMNULL);
  895. X            }
  896. X    |    expr KEOP_SHL expr
  897. X            {
  898. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L,
  899. X                    SYMNULL);
  900. X            }
  901. X    |    expr KEOP_SHR expr
  902. X            {
  903. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L,
  904. X                    SYMNULL);
  905. X            }
  906. X    |    expr KEOP_GT expr
  907. X            {
  908. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L,
  909. X                    SYMNULL);
  910. X            }
  911. X    |    expr KEOP_GE expr
  912. X            {
  913. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L,
  914. X                    SYMNULL);
  915. X            }
  916. X    |    expr KEOP_LT expr
  917. X            {
  918. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L,
  919. X                    SYMNULL);
  920. X            }
  921. X    |    expr KEOP_LE expr
  922. X            {
  923. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L,
  924. X                    SYMNULL);
  925. X            }
  926. X    |    expr KEOP_NE expr
  927. X            {
  928. X                $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L,
  929. X                    SYMNULL);
  930. X            }
  931. X    |    expr KEOP_EQ expr
  932. X            {
  933. X                $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L,
  934. X                    SYMNULL);
  935. X            }
  936. X    |    expr KEOP_AND expr
  937. X            {
  938. X                $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L,
  939. X                    SYMNULL);
  940. X            }
  941. X    |    expr KEOP_OR expr
  942. X            {
  943. X                $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L,
  944. X                    SYMNULL);
  945. X            }
  946. X    |    expr KEOP_XOR expr
  947. X            {
  948. X                $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L,
  949. X                    SYMNULL);
  950. X            }
  951. X    |    KEOP_DEFINED SYMBOL
  952. X            {
  953. X                $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2);
  954. X            }
  955. X    |    SYMBOL
  956. X            {
  957. X                $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1);
  958. X            }
  959. X    |    '*'
  960. X            {
  961. X                $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0,
  962. X                    labelloc, SYMNULL);
  963. X            }
  964. X    |    CONSTANT
  965. X            {
  966. X                $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1,
  967. X                    SYMNULL);
  968. X            }
  969. X    |    STRING
  970. X            {
  971. X                char *sourcestr = $1;
  972. X                long accval = 0;
  973. X
  974. X                if(strlen($1) > 0)
  975. X                {
  976. X                    accval = chtran(&sourcestr);
  977. X                    if(*sourcestr != '\0')
  978. X                    {
  979. X                        accval = (accval << 8) +
  980. X                            chtran(&sourcestr);
  981. X                    }
  982. X
  983. X                    if( *sourcestr != '\0')
  984. X                    {
  985. X    frawarn("string constant in expression more than 2 characters long");
  986. X                    }
  987. X                }
  988. X                $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0,
  989. X                    accval, SYMNULL);
  990. X            }
  991. X    |    '(' expr ')'
  992. X            {
  993. X                $$ = $2;
  994. X            }
  995. X    ;
  996. X
  997. X
  998. X
  999. X%%
  1000. X
  1001. Xlexintercept()
  1002. X/*
  1003. X    description    intercept the call to yylex (the lexical analyzer)
  1004. X            and filter out all unnecessary tokens when skipping
  1005. X            the input between a failed IF and its matching ENDI or
  1006. X            ELSE
  1007. X    globals     fraifskip    the enable flag
  1008. X*/
  1009. X{
  1010. X#undef yylex
  1011. X
  1012. X    int rv;
  1013. X
  1014. X    if(fraifskip)
  1015. X    {
  1016. X        for(;;)
  1017. X        {
  1018. X
  1019. X            switch(rv = yylex())
  1020. X
  1021. X            {
  1022. X            case 0:
  1023. X            case KOC_END:
  1024. X            case KOC_IF:
  1025. X            case KOC_ELSE:
  1026. X            case KOC_ENDI:
  1027. X            case EOL:
  1028. X                return rv;
  1029. X            default:
  1030. X                break;
  1031. X            }
  1032. X        }
  1033. X    }
  1034. X    else
  1035. X        return yylex();
  1036. X#define yylex lexintercept
  1037. X}
  1038. X
  1039. X
  1040. X
  1041. Xsetreserved()
  1042. X{
  1043. X
  1044. X    reservedsym("and", KEOP_AND, 0);
  1045. X    reservedsym("defined", KEOP_DEFINED,0);
  1046. X    reservedsym("eq", KEOP_EQ, 0);
  1047. X    reservedsym("ge", KEOP_GE, 0);
  1048. X    reservedsym("gt", KEOP_GT, 0);
  1049. X    reservedsym("high", KEOP_HIGH, 0);
  1050. X    reservedsym("le", KEOP_LE, 0);
  1051. X    reservedsym("low", KEOP_LOW, 0);
  1052. X    reservedsym("lt", KEOP_LT, 0);
  1053. X    reservedsym("mod", KEOP_MOD, 0);
  1054. X    reservedsym("ne", KEOP_NE, 0);
  1055. X    reservedsym("not", KEOP_NOT, 0);
  1056. X    reservedsym("or", KEOP_OR, 0);
  1057. X    reservedsym("shl", KEOP_SHL, 0);
  1058. X    reservedsym("shr", KEOP_SHR, 0);
  1059. X    reservedsym("xor", KEOP_XOR, 0);
  1060. X    reservedsym("AND", KEOP_AND, 0);
  1061. X    reservedsym("DEFINED", KEOP_DEFINED,0);
  1062. X    reservedsym("EQ", KEOP_EQ, 0);
  1063. X    reservedsym("GE", KEOP_GE, 0);
  1064. X    reservedsym("GT", KEOP_GT, 0);
  1065. X    reservedsym("HIGH", KEOP_HIGH, 0);
  1066. X    reservedsym("LE", KEOP_LE, 0);
  1067. X    reservedsym("LOW", KEOP_LOW, 0);
  1068. X    reservedsym("LT", KEOP_LT, 0);
  1069. X    reservedsym("MOD", KEOP_MOD, 0);
  1070. X    reservedsym("NE", KEOP_NE, 0);
  1071. X    reservedsym("NOT", KEOP_NOT, 0);
  1072. X    reservedsym("OR", KEOP_OR, 0);
  1073. X    reservedsym("SHL", KEOP_SHL, 0);
  1074. X    reservedsym("SHR", KEOP_SHR, 0);
  1075. X    reservedsym("XOR", KEOP_XOR, 0);
  1076. X
  1077. X}
  1078. Xcpumatch(str)
  1079. X    char * str;
  1080. X{
  1081. X    int msub;
  1082. X
  1083. X    static struct
  1084. X    {
  1085. X        char * mtch;
  1086. X        int   cpuv;
  1087. X    } matchtab[] =
  1088. X    {
  1089. X        {"19", CPU196 },
  1090. X        {"9", CPU96 },
  1091. X        {"", 0} 
  1092. X    };
  1093. X
  1094. X    for(msub = 0; matchtab[msub].mtch[0] != '\0'; msub++)
  1095. X    {
  1096. X        if(strcontains(str, matchtab[msub].mtch))
  1097. X        {
  1098. X            cpuselect = matchtab[msub].cpuv;
  1099. X            return TRUE;
  1100. X        }
  1101. X    }
  1102. X
  1103. X    return FALSE;
  1104. X}
  1105. X
  1106. X
  1107. Xstrcontains(s1, sm)
  1108. X    char * s1, *sm;
  1109. X{
  1110. X    int l1 = strlen(s1), lm = strlen(sm);
  1111. X
  1112. X    for(; l1 >= lm; l1--, s1++)
  1113. X    {
  1114. X        if(strncmp(s1, sm, lm) == 0)
  1115. X        {
  1116. X            return TRUE;
  1117. X        }
  1118. X    }
  1119. X    return FALSE;
  1120. X}
  1121. X
  1122. X/*
  1123. X    description    Opcode and Instruction generation tables
  1124. X    usage        Unix, framework crossassembler
  1125. X    history        September 25, 1987
  1126. X*/
  1127. X
  1128. X#define NUMOPCODE 125
  1129. X#define NUMSYNBLK 239
  1130. X#define NUMDIFFOP 323
  1131. X
  1132. Xint gnumopcode = NUMOPCODE;
  1133. X
  1134. Xint ophashlnk[NUMOPCODE];
  1135. X
  1136. Xstruct opsym optab[NUMOPCODE+1]
  1137. X    = {
  1138. X    {"invalid", KOC_opcode, 2, 0 },
  1139. X    {"ADD", KOC_opcode, 8, 2 },
  1140. X    {"ADDB", KOC_opcode, 8, 10 },
  1141. X    {"ADDC", KOC_opcode, 4, 18 },
  1142. X    {"ADDCB", KOC_opcode, 4, 22 },
  1143. X    {"AND", KOC_opcode, 8, 26 },
  1144. X    {"ANDB", KOC_opcode, 8, 34 },
  1145. X    {"BMOV", KOC_opcode, 1, 42 },
  1146. X    {"BR", KOC_opcode, 1, 43 },
  1147. X    {"BYTE", KOC_BDEF, 0, 0 },
  1148. X    {"CHARDEF", KOC_CHDEF, 0, 0 },
  1149. X    {"CHARSET", KOC_CHSET, 0, 0 },
  1150. X    {"CHARUSE", KOC_CHUSE, 0, 0 },
  1151. X    {"CHD", KOC_CHDEF, 0, 0 },
  1152. X    {"CLR", KOC_opcode, 1, 44 },
  1153. X    {"CLRB", KOC_opcode, 1, 45 },
  1154. X    {"CLRC", KOC_opcode, 1, 46 },
  1155. X    {"CLRVT", KOC_opcode, 1, 47 },
  1156. X    {"CMP", KOC_opcode, 4, 48 },
  1157. X    {"CMPB", KOC_opcode, 4, 52 },
  1158. X    {"CMPL", KOC_opcode, 1, 56 },
  1159. X    {"CPU", KOC_CPU, 0, 0 },
  1160. X    {"DCB", KOC_BDEF, 0, 0 },
  1161. X    {"DCL", KOC_ALDEF, 0, 0 },
  1162. X    {"DCW", KOC_AWDEF, 0, 0 },
  1163. X    {"DEC", KOC_opcode, 1, 57 },
  1164. X    {"DECB", KOC_opcode, 1, 58 },
  1165. X    {"DI", KOC_opcode, 1, 59 },
  1166. X    {"DIV", KOC_opcode, 4, 60 },
  1167. X    {"DIVB", KOC_opcode, 4, 64 },
  1168. X    {"DIVU", KOC_opcode, 4, 68 },
  1169. X    {"DIVUB", KOC_opcode, 4, 72 },
  1170. X    {"DJNZ", KOC_opcode, 1, 76 },
  1171. X    {"DJNZW", KOC_opcode, 1, 77 },
  1172. X    {"DSB", KOC_RESM, 0, 0 },
  1173. X    {"DSL", KOC_ALRESM, 0, 0 },
  1174. X    {"DSW", KOC_AWRESM, 0, 0 },
  1175. X    {"EI", KOC_opcode, 1, 78 },
  1176. X    {"ELSE", KOC_ELSE, 0, 0 },
  1177. X    {"END", KOC_END, 0, 0 },
  1178. X    {"ENDI", KOC_ENDI, 0, 0 },
  1179. X    {"EQU", KOC_EQU, 0, 0 },
  1180. X    {"EXT", KOC_opcode, 1, 79 },
  1181. X    {"EXTB", KOC_opcode, 1, 80 },
  1182. X    {"FCB", KOC_BDEF, 0, 0 },
  1183. X    {"FCC", KOC_SDEF, 0, 0 },
  1184. X    {"FDB", KOC_AWDEF, 0, 0 },
  1185. X    {"IDLPD", KOC_opcode, 1, 81 },
  1186. X    {"IF", KOC_IF, 0, 0 },
  1187. X    {"INC", KOC_opcode, 1, 82 },
  1188. X    {"INCB", KOC_opcode, 1, 83 },
  1189. X    {"INCL", KOC_INCLUDE, 0, 0 },
  1190. X    {"INCLUDE", KOC_INCLUDE, 0, 0 },
  1191. X    {"JBC", KOC_opcode, 1, 84 },
  1192. X    {"JBS", KOC_opcode, 1, 85 },
  1193. X    {"JC", KOC_opcode, 1, 86 },
  1194. X    {"JE", KOC_opcode, 1, 87 },
  1195. X    {"JGE", KOC_opcode, 1, 88 },
  1196. X    {"JGT", KOC_opcode, 1, 89 },
  1197. X    {"JH", KOC_opcode, 1, 90 },
  1198. X    {"JLE", KOC_opcode, 1, 91 },
  1199. X    {"JLT", KOC_opcode, 1, 92 },
  1200. X    {"JNC", KOC_opcode, 1, 93 },
  1201. X    {"JNE", KOC_opcode, 1, 94 },
  1202. X    {"JNH", KOC_opcode, 1, 95 },
  1203. X    {"JNST", KOC_opcode, 1, 96 },
  1204. X    {"JNV", KOC_opcode, 1, 97 },
  1205. X    {"JNVT", KOC_opcode, 1, 98 },
  1206. X    {"JST", KOC_opcode, 1, 99 },
  1207. X    {"JV", KOC_opcode, 1, 100 },
  1208. X    {"JVT", KOC_opcode, 1, 101 },
  1209. X    {"LCALL", KOC_opcode, 1, 102 },
  1210. X    {"LD", KOC_opcode, 4, 103 },
  1211. X    {"LDB", KOC_opcode, 4, 107 },
  1212. X    {"LDBSE", KOC_opcode, 4, 111 },
  1213. X    {"LDBZE", KOC_opcode, 4, 115 },
  1214. X    {"LJMP", KOC_opcode, 1, 119 },
  1215. X    {"LONG", KOC_ALDEF, 0, 0 },
  1216. X    {"MUL", KOC_opcode, 8, 120 },
  1217. X    {"MULB", KOC_opcode, 8, 128 },
  1218. X    {"MULU", KOC_opcode, 8, 136 },
  1219. X    {"MULUB", KOC_opcode, 8, 144 },
  1220. X    {"NEG", KOC_opcode, 1, 152 },
  1221. X    {"NEGB", KOC_opcode, 1, 153 },
  1222. X    {"NOP", KOC_opcode, 1, 154 },
  1223. X    {"NORML", KOC_opcode, 1, 155 },
  1224. X    {"NOT", KOC_opcode, 1, 156 },
  1225. X    {"NOTB", KOC_opcode, 1, 157 },
  1226. X    {"OR", KOC_opcode, 4, 158 },
  1227. X    {"ORB", KOC_opcode, 4, 162 },
  1228. X    {"ORG", KOC_ORG, 0, 0 },
  1229. X    {"POP", KOC_opcode, 3, 166 },
  1230. X    {"POPA", KOC_opcode, 1, 169 },
  1231. X    {"POPF", KOC_opcode, 1, 170 },
  1232. X    {"PUSH", KOC_opcode, 4, 171 },
  1233. X    {"PUSHA", KOC_opcode, 1, 175 },
  1234. X    {"PUSHF", KOC_opcode, 1, 176 },
  1235. X    {"RESERVE", KOC_RESM, 0, 0 },
  1236. X    {"RET", KOC_opcode, 1, 177 },
  1237. X    {"RMB", KOC_RESM, 0, 0 },
  1238. X    {"RST", KOC_opcode, 1, 178 },
  1239. X    {"SCALL", KOC_opcode, 1, 179 },
  1240. X    {"SET", KOC_SET, 0, 0 },
  1241. X    {"SETC", KOC_opcode, 1, 180 },
  1242. X    {"SHL", KOC_opcode, 2, 181 },
  1243. X    {"SHLB", KOC_opcode, 2, 183 },
  1244. X    {"SHLL", KOC_opcode, 2, 185 },
  1245. X    {"SHR", KOC_opcode, 2, 187 },
  1246. X    {"SHRA", KOC_opcode, 2, 189 },
  1247. X    {"SHRAB", KOC_opcode, 2, 191 },
  1248. X    {"SHRAL", KOC_opcode, 2, 193 },
  1249. X    {"SHRB", KOC_opcode, 2, 195 },
  1250. X    {"SHRL", KOC_opcode, 2, 197 },
  1251. X    {"SJMP", KOC_opcode, 1, 199 },
  1252. X    {"SKIP", KOC_opcode, 1, 200 },
  1253. X    {"ST", KOC_opcode, 3, 201 },
  1254. X    {"STB", KOC_opcode, 3, 204 },
  1255. X    {"STRING", KOC_SDEF, 0, 0 },
  1256. X    {"SUB", KOC_opcode, 8, 207 },
  1257. X    {"SUBB", KOC_opcode, 8, 215 },
  1258. X    {"SUBC", KOC_opcode, 4, 223 },
  1259. X    {"SUBCB", KOC_opcode, 4, 227 },
  1260. X    {"WORD", KOC_AWDEF, 0, 0 },
  1261. X    {"XOR", KOC_opcode, 4, 231 },
  1262. X    {"XORB", KOC_opcode, 4, 235 },
  1263. X    { "", 0, 0, 0 }};
  1264. X
  1265. Xstruct opsynt ostab[NUMSYNBLK+1]
  1266. X    = {
  1267. X/* invalid 0 */ { 0, 1, 0 },
  1268. X/* invalid 1 */ { 0xffff, 1, 1 },
  1269. X/* ADD 2 */ { ST_DIR2, 2, 2 },
  1270. X/* ADD 3 */ { ST_DIR3, 2, 4 },
  1271. X/* ADD 4 */ { ST_IMM2, 1, 6 },
  1272. X/* ADD 5 */ { ST_IMM3, 1, 7 },
  1273. X/* ADD 6 */ { ST_IND2, 1, 8 },
  1274. X/* ADD 7 */ { ST_IND3, 1, 9 },
  1275. X/* ADD 8 */ { ST_INX2, 2, 10 },
  1276. X/* ADD 9 */ { ST_INX3, 2, 12 },
  1277. X/* ADDB 10 */ { ST_DIR2, 2, 14 },
  1278. X/* ADDB 11 */ { ST_DIR3, 2, 16 },
  1279. X/* ADDB 12 */ { ST_IMM2, 1, 18 },
  1280. X/* ADDB 13 */ { ST_IMM3, 1, 19 },
  1281. X/* ADDB 14 */ { ST_IND2, 1, 20 },
  1282. X/* ADDB 15 */ { ST_IND3, 1, 21 },
  1283. X/* ADDB 16 */ { ST_INX2, 2, 22 },
  1284. X/* ADDB 17 */ { ST_INX3, 2, 24 },
  1285. X/* ADDC 18 */ { ST_DIR2, 2, 26 },
  1286. X/* ADDC 19 */ { ST_IMM2, 1, 28 },
  1287. X/* ADDC 20 */ { ST_IND2, 1, 29 },
  1288. X/* ADDC 21 */ { ST_INX2, 2, 30 },
  1289. X/* ADDCB 22 */ { ST_DIR2, 2, 32 },
  1290. X/* ADDCB 23 */ { ST_IMM2, 1, 34 },
  1291. X/* ADDCB 24 */ { ST_IND2, 1, 35 },
  1292. X/* ADDCB 25 */ { ST_INX2, 2, 36 },
  1293. X/* AND 26 */ { ST_DIR2, 2, 38 },
  1294. X/* AND 27 */ { ST_DIR3, 2, 40 },
  1295. X/* AND 28 */ { ST_IMM2, 1, 42 },
  1296. X/* AND 29 */ { ST_IMM3, 1, 43 },
  1297. X/* AND 30 */ { ST_IND2, 1, 44 },
  1298. X/* AND 31 */ { ST_IND3, 1, 45 },
  1299. X/* AND 32 */ { ST_INX2, 2, 46 },
  1300. X/* AND 33 */ { ST_INX3, 2, 48 },
  1301. X/* ANDB 34 */ { ST_DIR2, 2, 50 },
  1302. X/* ANDB 35 */ { ST_DIR3, 2, 52 },
  1303. X/* ANDB 36 */ { ST_IMM2, 1, 54 },
  1304. X/* ANDB 37 */ { ST_IMM3, 1, 55 },
  1305. X/* ANDB 38 */ { ST_IND2, 1, 56 },
  1306. X/* ANDB 39 */ { ST_IND3, 1, 57 },
  1307. X/* ANDB 40 */ { ST_INX2, 2, 58 },
  1308. X/* ANDB 41 */ { ST_INX3, 2, 60 },
  1309. X/* BMOV 42 */ { ST_DIR2, 1, 62 },
  1310. X/* BR 43 */ { ST_IND1, 1, 63 },
  1311. X/* CLR 44 */ { ST_DIR1, 1, 64 },
  1312. X/* CLRB 45 */ { ST_DIR1, 1, 65 },
  1313. X/* CLRC 46 */ { ST_INH, 1, 66 },
  1314. X/* CLRVT 47 */ { ST_INH, 1, 67 },
  1315. X/* CMP 48 */ { ST_DIR2, 2, 68 },
  1316. X/* CMP 49 */ { ST_IMM2, 1, 70 },
  1317. X/* CMP 50 */ { ST_IND2, 1, 71 },
  1318. X/* CMP 51 */ { ST_INX2, 2, 72 },
  1319. X/* CMPB 52 */ { ST_DIR2, 2, 74 },
  1320. X/* CMPB 53 */ { ST_IMM2, 1, 76 },
  1321. X/* CMPB 54 */ { ST_IND2, 1, 77 },
  1322. X/* CMPB 55 */ { ST_INX2, 2, 78 },
  1323. X/* CMPL 56 */ { ST_DIR2, 1, 80 },
  1324. X/* DEC 57 */ { ST_DIR1, 1, 81 },
  1325. X/* DECB 58 */ { ST_DIR1, 1, 82 },
  1326. X/* DI 59 */ { ST_INH, 1, 83 },
  1327. X/* DIV 60 */ { ST_DIR2, 2, 84 },
  1328. X/* DIV 61 */ { ST_IMM2, 1, 86 },
  1329. X/* DIV 62 */ { ST_IND2, 1, 87 },
  1330. X/* DIV 63 */ { ST_INX2, 2, 88 },
  1331. X/* DIVB 64 */ { ST_DIR2, 2, 90 },
  1332. X/* DIVB 65 */ { ST_IMM2, 1, 92 },
  1333. X/* DIVB 66 */ { ST_IND2, 1, 93 },
  1334. X/* DIVB 67 */ { ST_INX2, 2, 94 },
  1335. X/* DIVU 68 */ { ST_DIR2, 2, 96 },
  1336. X/* DIVU 69 */ { ST_IMM2, 1, 98 },
  1337. X/* DIVU 70 */ { ST_IND2, 1, 99 },
  1338. X/* DIVU 71 */ { ST_INX2, 2, 100 },
  1339. X/* DIVUB 72 */ { ST_DIR2, 2, 102 },
  1340. X/* DIVUB 73 */ { ST_IMM2, 1, 104 },
  1341. X/* DIVUB 74 */ { ST_IND2, 1, 105 },
  1342. X/* DIVUB 75 */ { ST_INX2, 2, 106 },
  1343. X/* DJNZ 76 */ { ST_DIR2, 1, 108 },
  1344. X/* DJNZW 77 */ { ST_DIR2, 1, 109 },
  1345. X/* EI 78 */ { ST_INH, 1, 110 },
  1346. X/* EXT 79 */ { ST_DIR1, 1, 111 },
  1347. X/* EXTB 80 */ { ST_DIR1, 1, 112 },
  1348. X/* IDLPD 81 */ { ST_IMM1, 1, 113 },
  1349. X/* INC 82 */ { ST_DIR1, 1, 114 },
  1350. X/* INCB 83 */ { ST_DIR1, 1, 115 },
  1351. X/* JBC 84 */ { ST_DIR3, 1, 116 },
  1352. X/* JBS 85 */ { ST_DIR3, 1, 117 },
  1353. X/* JC 86 */ { ST_DIR1, 1, 118 },
  1354. X/* JE 87 */ { ST_DIR1, 1, 119 },
  1355. X/* JGE 88 */ { ST_DIR1, 1, 120 },
  1356. X/* JGT 89 */ { ST_DIR1, 1, 121 },
  1357. X/* JH 90 */ { ST_DIR1, 1, 122 },
  1358. X/* JLE 91 */ { ST_DIR1, 1, 123 },
  1359. X/* JLT 92 */ { ST_DIR1, 1, 124 },
  1360. X/* JNC 93 */ { ST_DIR1, 1, 125 },
  1361. X/* JNE 94 */ { ST_DIR1, 1, 126 },
  1362. X/* JNH 95 */ { ST_DIR1, 1, 127 },
  1363. X/* JNST 96 */ { ST_DIR1, 1, 128 },
  1364. X/* JNV 97 */ { ST_DIR1, 1, 129 },
  1365. X/* JNVT 98 */ { ST_DIR1, 1, 130 },
  1366. X/* JST 99 */ { ST_DIR1, 1, 131 },
  1367. X/* JV 100 */ { ST_DIR1, 1, 132 },
  1368. X/* JVT 101 */ { ST_DIR1, 1, 133 },
  1369. X/* LCALL 102 */ { ST_DIR1, 1, 134 },
  1370. X/* LD 103 */ { ST_DIR2, 2, 135 },
  1371. X/* LD 104 */ { ST_IMM2, 1, 137 },
  1372. X/* LD 105 */ { ST_IND2, 1, 138 },
  1373. X/* LD 106 */ { ST_INX2, 2, 139 },
  1374. X/* LDB 107 */ { ST_DIR2, 2, 141 },
  1375. X/* LDB 108 */ { ST_IMM2, 1, 143 },
  1376. X/* LDB 109 */ { ST_IND2, 1, 144 },
  1377. X/* LDB 110 */ { ST_INX2, 2, 145 },
  1378. X/* LDBSE 111 */ { ST_DIR2, 2, 147 },
  1379. X/* LDBSE 112 */ { ST_IMM2, 1, 149 },
  1380. X/* LDBSE 113 */ { ST_IND2, 1, 150 },
  1381. X/* LDBSE 114 */ { ST_INX2, 2, 151 },
  1382. X/* LDBZE 115 */ { ST_DIR2, 2, 153 },
  1383. X/* LDBZE 116 */ { ST_IMM2, 1, 155 },
  1384. X/* LDBZE 117 */ { ST_IND2, 1, 156 },
  1385. X/* LDBZE 118 */ { ST_INX2, 2, 157 },
  1386. X/* LJMP 119 */ { ST_DIR1, 1, 159 },
  1387. X/* MUL 120 */ { ST_DIR2, 2, 160 },
  1388. X/* MUL 121 */ { ST_DIR3, 2, 162 },
  1389. X/* MUL 122 */ { ST_IMM2, 1, 164 },
  1390. X/* MUL 123 */ { ST_IMM3, 1, 165 },
  1391. X/* MUL 124 */ { ST_IND2, 1, 166 },
  1392. X/* MUL 125 */ { ST_IND3, 1, 167 },
  1393. X/* MUL 126 */ { ST_INX2, 2, 168 },
  1394. X/* MUL 127 */ { ST_INX3, 2, 170 },
  1395. X/* MULB 128 */ { ST_DIR2, 2, 172 },
  1396. X/* MULB 129 */ { ST_DIR3, 2, 174 },
  1397. X/* MULB 130 */ { ST_IMM2, 1, 176 },
  1398. X/* MULB 131 */ { ST_IMM3, 1, 177 },
  1399. X/* MULB 132 */ { ST_IND2, 1, 178 },
  1400. X/* MULB 133 */ { ST_IND3, 1, 179 },
  1401. X/* MULB 134 */ { ST_INX2, 2, 180 },
  1402. X/* MULB 135 */ { ST_INX3, 2, 182 },
  1403. X/* MULU 136 */ { ST_DIR2, 2, 184 },
  1404. X/* MULU 137 */ { ST_DIR3, 2, 186 },
  1405. X/* MULU 138 */ { ST_IMM2, 1, 188 },
  1406. X/* MULU 139 */ { ST_IMM3, 1, 189 },
  1407. X/* MULU 140 */ { ST_IND2, 1, 190 },
  1408. X/* MULU 141 */ { ST_IND3, 1, 191 },
  1409. X/* MULU 142 */ { ST_INX2, 2, 192 },
  1410. X/* MULU 143 */ { ST_INX3, 2, 194 },
  1411. X/* MULUB 144 */ { ST_DIR2, 2, 196 },
  1412. X/* MULUB 145 */ { ST_DIR3, 2, 198 },
  1413. X/* MULUB 146 */ { ST_IMM2, 1, 200 },
  1414. X/* MULUB 147 */ { ST_IMM3, 1, 201 },
  1415. X/* MULUB 148 */ { ST_IND2, 1, 202 },
  1416. X/* MULUB 149 */ { ST_IND3, 1, 203 },
  1417. X/* MULUB 150 */ { ST_INX2, 2, 204 },
  1418. X/* MULUB 151 */ { ST_INX3, 2, 206 },
  1419. X/* NEG 152 */ { ST_DIR1, 1, 208 },
  1420. X/* NEGB 153 */ { ST_DIR1, 1, 209 },
  1421. X/* NOP 154 */ { ST_INH, 1, 210 },
  1422. X/* NORML 155 */ { ST_DIR2, 1, 211 },
  1423. X/* NOT 156 */ { ST_DIR1, 1, 212 },
  1424. X/* NOTB 157 */ { ST_DIR1, 1, 213 },
  1425. X/* OR 158 */ { ST_DIR2, 2, 214 },
  1426. X/* OR 159 */ { ST_IMM2, 1, 216 },
  1427. X/* OR 160 */ { ST_IND2, 1, 217 },
  1428. X/* OR 161 */ { ST_INX2, 2, 218 },
  1429. X/* ORB 162 */ { ST_DIR2, 2, 220 },
  1430. X/* ORB 163 */ { ST_IMM2, 1, 222 },
  1431. X/* ORB 164 */ { ST_IND2, 1, 223 },
  1432. X/* ORB 165 */ { ST_INX2, 2, 224 },
  1433. X/* POP 166 */ { ST_DIR1, 2, 226 },
  1434. X/* POP 167 */ { ST_IND1, 1, 228 },
  1435. X/* POP 168 */ { ST_INX1, 2, 229 },
  1436. X/* POPA 169 */ { ST_INH, 1, 231 },
  1437. X/* POPF 170 */ { ST_INH, 1, 232 },
  1438. X/* PUSH 171 */ { ST_DIR1, 2, 233 },
  1439. X/* PUSH 172 */ { ST_IMM1, 1, 235 },
  1440. X/* PUSH 173 */ { ST_IND1, 1, 236 },
  1441. X/* PUSH 174 */ { ST_INX1, 2, 237 },
  1442. X/* PUSHA 175 */ { ST_INH, 1, 239 },
  1443. X/* PUSHF 176 */ { ST_INH, 1, 240 },
  1444. X/* RET 177 */ { ST_INH, 1, 241 },
  1445. X/* RST 178 */ { ST_INH, 1, 242 },
  1446. X/* SCALL 179 */ { ST_DIR1, 1, 243 },
  1447. X/* SETC 180 */ { ST_INH, 1, 244 },
  1448. X/* SHL 181 */ { ST_DIR2, 1, 245 },
  1449. X/* SHL 182 */ { ST_IMM2, 1, 246 },
  1450. X/* SHLB 183 */ { ST_DIR2, 1, 247 },
  1451. X/* SHLB 184 */ { ST_IMM2, 1, 248 },
  1452. X/* SHLL 185 */ { ST_DIR2, 1, 249 },
  1453. X/* SHLL 186 */ { ST_IMM2, 1, 250 },
  1454. X/* SHR 187 */ { ST_DIR2, 1, 251 },
  1455. X/* SHR 188 */ { ST_IMM2, 1, 252 },
  1456. X/* SHRA 189 */ { ST_DIR2, 1, 253 },
  1457. X/* SHRA 190 */ { ST_IMM2, 1, 254 },
  1458. X/* SHRAB 191 */ { ST_DIR2, 1, 255 },
  1459. X/* SHRAB 192 */ { ST_IMM2, 1, 256 },
  1460. X/* SHRAL 193 */ { ST_DIR2, 1, 257 },
  1461. X/* SHRAL 194 */ { ST_IMM2, 1, 258 },
  1462. X/* SHRB 195 */ { ST_DIR2, 1, 259 },
  1463. X/* SHRB 196 */ { ST_IMM2, 1, 260 },
  1464. X/* SHRL 197 */ { ST_DIR2, 1, 261 },
  1465. X/* SHRL 198 */ { ST_IMM2, 1, 262 },
  1466. X/* SJMP 199 */ { ST_DIR1, 1, 263 },
  1467. X/* SKIP 200 */ { ST_DIR1, 1, 264 },
  1468. X/* ST 201 */ { ST_DIR2, 2, 265 },
  1469. X/* ST 202 */ { ST_IND2, 1, 267 },
  1470. X/* ST 203 */ { ST_INX2, 2, 268 },
  1471. X/* STB 204 */ { ST_DIR2, 2, 270 },
  1472. X/* STB 205 */ { ST_IND2, 1, 272 },
  1473. X/* STB 206 */ { ST_INX2, 2, 273 },
  1474. X/* SUB 207 */ { ST_DIR2, 2, 275 },
  1475. X/* SUB 208 */ { ST_DIR3, 2, 277 },
  1476. X/* SUB 209 */ { ST_IMM2, 1, 279 },
  1477. X/* SUB 210 */ { ST_IMM3, 1, 280 },
  1478. X/* SUB 211 */ { ST_IND2, 1, 281 },
  1479. X/* SUB 212 */ { ST_IND3, 1, 282 },
  1480. X/* SUB 213 */ { ST_INX2, 2, 283 },
  1481. X/* SUB 214 */ { ST_INX3, 2, 285 },
  1482. X/* SUBB 215 */ { ST_DIR2, 2, 287 },
  1483. X/* SUBB 216 */ { ST_DIR3, 2, 289 },
  1484. X/* SUBB 217 */ { ST_IMM2, 1, 291 },
  1485. X/* SUBB 218 */ { ST_IMM3, 1, 292 },
  1486. X/* SUBB 219 */ { ST_IND2, 1, 293 },
  1487. X/* SUBB 220 */ { ST_IND3, 1, 294 },
  1488. X/* SUBB 221 */ { ST_INX2, 2, 295 },
  1489. X/* SUBB 222 */ { ST_INX3, 2, 297 },
  1490. X/* SUBC 223 */ { ST_DIR2, 2, 299 },
  1491. X/* SUBC 224 */ { ST_IMM2, 1, 301 },
  1492. X/* SUBC 225 */ { ST_IND2, 1, 302 },
  1493. X/* SUBC 226 */ { ST_INX2, 2, 303 },
  1494. X/* SUBCB 227 */ { ST_DIR2, 2, 305 },
  1495. X/* SUBCB 228 */ { ST_IMM2, 1, 307 },
  1496. X/* SUBCB 229 */ { ST_IND2, 1, 308 },
  1497. X/* SUBCB 230 */ { ST_INX2, 2, 309 },
  1498. X/* XOR 231 */ { ST_DIR2, 2, 311 },
  1499. X/* XOR 232 */ { ST_IMM2, 1, 313 },
  1500. X/* XOR 233 */ { ST_IND2, 1, 314 },
  1501. X/* XOR 234 */ { ST_INX2, 2, 315 },
  1502. X/* XORB 235 */ { ST_DIR2, 2, 317 },
  1503. X/* XORB 236 */ { ST_IMM2, 1, 319 },
  1504. X/* XORB 237 */ { ST_IND2, 1, 320 },
  1505. X/* XORB 238 */ { ST_INX2, 2, 321 },
  1506. X    { 0, 0, 0 } };
  1507. X
  1508. Xstruct igel igtab[NUMDIFFOP+1]
  1509. X    = {
  1510. X/* invalid 0 */   { 0 , 0, 
  1511. X        "[Xnullentry" },
  1512. X/* invalid 1 */   { 0 , 0, 
  1513. X        "[Xinvalid opcode" },
  1514. X/* ADD 2 */   { ADDR , DIRECT, 
  1515. X        "64;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1516. X/* ADD 3 */   { ADDR , EXTENDED, 
  1517. X        "67;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1518. X/* ADD 4 */   { ADDR , DIRECT, 
  1519. X        "44;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1520. X/* ADD 5 */   { ADDR , EXTENDED, 
  1521. X        "47;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1522. X/* ADD 6 */   { 0 , 0, 
  1523. X        "65;[2=]y[1=]~.1&T!.8I;" },
  1524. X/* ADD 7 */   { 0 , 0, 
  1525. X        "45;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1526. X/* ADD 8 */   { 0 , 0, 
  1527. X        "66;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1528. X/* ADD 9 */   { 0 , 0, 
  1529. X        "46;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1530. X/* ADD 10 */   { ADDR , DIRECT, 
  1531. X        "67;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1532. X/* ADD 11 */   { ADDR , EXTENDED, 
  1533. X        "67;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1534. X/* ADD 12 */   { ADDR , DIRECT, 
  1535. X        "47;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1536. X/* ADD 13 */   { ADDR , EXTENDED, 
  1537. X        "47;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1538. X/* ADDB 14 */   { ADDR , DIRECT, 
  1539. X        "74;[2=].8I;[1=].8I;" },
  1540. X/* ADDB 15 */   { ADDR , EXTENDED, 
  1541. X        "77;01;[2=]y[1=].8I;" },
  1542. X/* ADDB 16 */   { ADDR , DIRECT, 
  1543. X        "54;[3=].8I;[2=].8I;[1=].8I;" },
  1544. X/* ADDB 17 */   { ADDR , EXTENDED, 
  1545. X        "57;01;[3=]y[2=].8I;[1=].8I;" },
  1546. X/* ADDB 18 */   { 0 , 0, 
  1547. X        "75;[2=];[1=].8I;" },
  1548. X/* ADDB 19 */   { 0 , 0, 
  1549. X        "55;[3=];[2=].8I;[1=].8I;" },
  1550. X/* ADDB 20 */   { 0 , 0, 
  1551. X        "76;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1552. X/* ADDB 21 */   { 0 , 0, 
  1553. X        "56;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=].8I;" },
  1554. X/* ADDB 22 */   { ADDR , DIRECT, 
  1555. X        "77;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1556. X/* ADDB 23 */   { ADDR , EXTENDED, 
  1557. X        "77;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1558. X/* ADDB 24 */   { ADDR , DIRECT, 
  1559. X        "57;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=].8I;" },
  1560. X/* ADDB 25 */   { ADDR , EXTENDED, 
  1561. X        "57;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=].8I;" },
  1562. X/* ADDC 26 */   { ADDR , DIRECT, 
  1563. X        "a4;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1564. X/* ADDC 27 */   { ADDR , EXTENDED, 
  1565. X        "a7;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1566. X/* ADDC 28 */   { 0 , 0, 
  1567. X        "a5;[2=]y[1=]~.1&T!.8I;" },
  1568. X/* ADDC 29 */   { 0 , 0, 
  1569. X        "a6;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1570. X/* ADDC 30 */   { ADDR , DIRECT, 
  1571. X        "a7;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1572. X/* ADDC 31 */   { ADDR , EXTENDED, 
  1573. X        "a7;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1574. X/* ADDCB 32 */   { ADDR , DIRECT, 
  1575. X        "b4;[2=].8I;[1=].8I;" },
  1576. X/* ADDCB 33 */   { ADDR , EXTENDED, 
  1577. X        "b7;01;[2=]y[1=].8I;" },
  1578. X/* ADDCB 34 */   { 0 , 0, 
  1579. X        "b5;[2=];[1=].8I;" },
  1580. X/* ADDCB 35 */   { 0 , 0, 
  1581. X        "b6;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1582. X/* ADDCB 36 */   { ADDR , DIRECT, 
  1583. X        "b7;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1584. X/* ADDCB 37 */   { ADDR , EXTENDED, 
  1585. X        "b7;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1586. X/* AND 38 */   { ADDR , DIRECT, 
  1587. X        "60;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1588. X/* AND 39 */   { ADDR , EXTENDED, 
  1589. X        "63;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1590. X/* AND 40 */   { ADDR , DIRECT, 
  1591. X        "40;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1592. X/* AND 41 */   { ADDR , EXTENDED, 
  1593. X        "43;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1594. X/* AND 42 */   { 0 , 0, 
  1595. X        "61;[2=]y[1=]~.1&T!.8I;" },
  1596. X/* AND 43 */   { 0 , 0, 
  1597. X        "41;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1598. X/* AND 44 */   { 0 , 0, 
  1599. X        "62;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1600. X/* AND 45 */   { 0 , 0, 
  1601. X        "42;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1602. X/* AND 46 */   { ADDR , DIRECT, 
  1603. X        "63;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1604. X/* AND 47 */   { ADDR , EXTENDED, 
  1605. X        "63;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1606. X/* AND 48 */   { ADDR , DIRECT, 
  1607. X        "43;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1608. X/* AND 49 */   { ADDR , EXTENDED, 
  1609. X        "43;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1610. X/* ANDB 50 */   { ADDR , DIRECT, 
  1611. X        "70;[2=].8I;[1=].8I;" },
  1612. X/* ANDB 51 */   { ADDR , EXTENDED, 
  1613. X        "73;01;[2=]y[1=].8I;" },
  1614. X/* ANDB 52 */   { ADDR , DIRECT, 
  1615. X        "50;[3=].8I;[2=].8I;[1=].8I;" },
  1616. X/* ANDB 53 */   { ADDR , EXTENDED, 
  1617. X        "53;01;[3=]y[2=].8I;[1=].8I;" },
  1618. X/* ANDB 54 */   { 0 , 0, 
  1619. X        "71;[2=];[1=].8I;" },
  1620. X/* ANDB 55 */   { 0 , 0, 
  1621. X        "51;[3=];[2=].8I;[1=].8I;" },
  1622. X/* ANDB 56 */   { 0 , 0, 
  1623. X        "72;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1624. X/* ANDB 57 */   { 0 , 0, 
  1625. X        "52;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=].8I;" },
  1626. X/* ANDB 58 */   { ADDR , DIRECT, 
  1627. X        "73;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1628. X/* ANDB 59 */   { ADDR , EXTENDED, 
  1629. X        "73;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1630. X/* ANDB 60 */   { ADDR , DIRECT, 
  1631. X        "53;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=].8I;" },
  1632. X/* ANDB 61 */   { ADDR , EXTENDED, 
  1633. X        "53;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=].8I;" },
  1634. X/* BMOV 62 */   { CPU196 , CPU196, 
  1635. X        "c1;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1636. X/* BR 63 */   { 0 , 0, 
  1637. X        "e3;[1=]~.1&T!.8I;" },
  1638. X/* CLR 64 */   { 0 , 0, 
  1639. X        "01;[1=]~.1&T!.8I;" },
  1640. X/* CLRB 65 */   { 0 , 0, 
  1641. X        "11;[1=].8I;" },
  1642. X/* CLRC 66 */   { 0 , 0, 
  1643. X        "f8;" },
  1644. X/* CLRVT 67 */   { 0 , 0, 
  1645. X        "fc;" },
  1646. X/* CMP 68 */   { ADDR , DIRECT, 
  1647. X        "88;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1648. X/* CMP 69 */   { ADDR , EXTENDED, 
  1649. X        "8b;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1650. X/* CMP 70 */   { 0 , 0, 
  1651. X        "89;[2=]y[1=]~.1&T!.8I;" },
  1652. X/* CMP 71 */   { 0 , 0, 
  1653. X        "8a;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1654. X/* CMP 72 */   { ADDR , DIRECT, 
  1655. X        "8b;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1656. X/* CMP 73 */   { ADDR , EXTENDED, 
  1657. X        "8b;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1658. X/* CMPB 74 */   { ADDR , DIRECT, 
  1659. X        "98;[2=].8I;[1=].8I;" },
  1660. X/* CMPB 75 */   { ADDR , EXTENDED, 
  1661. X        "9b;01;[2=]y[1=].8I;" },
  1662. X/* CMPB 76 */   { 0 , 0, 
  1663. X        "99;[2=];[1=].8I;" },
  1664. X/* CMPB 77 */   { 0 , 0, 
  1665. X        "9a;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1666. X/* CMPB 78 */   { ADDR , DIRECT, 
  1667. X        "9b;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1668. X/* CMPB 79 */   { ADDR , EXTENDED, 
  1669. X        "9b;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1670. X/* CMPL 80 */   { CPU196 , CPU196, 
  1671. X        "c5;[2=]~.3&T!.8I;[1=]~.3&T!.8I;" },
  1672. X/* DEC 81 */   { 0 , 0, 
  1673. X        "05;[1=]~.1&T!.8I;" },
  1674. X/* DECB 82 */   { 0 , 0, 
  1675. X        "15;[1=].8I;" },
  1676. X/* DI 83 */   { 0 , 0, 
  1677. X        "fa;" },
  1678. X/* DIV 84 */   { ADDR , DIRECT, 
  1679. X        "fe;8c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1680. X/* DIV 85 */   { ADDR , EXTENDED, 
  1681. X        "fe;8f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1682. X/* DIV 86 */   { 0 , 0, 
  1683. X        "fe;8d;[2=]y[1=]~.3&T!.8I;" },
  1684. X/* DIV 87 */   { 0 , 0, 
  1685. X        "fe;8e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1686. X/* DIV 88 */   { ADDR , DIRECT, 
  1687. X        "fe;8f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1688. X/* DIV 89 */   { ADDR , EXTENDED, 
  1689. X        "fe;8f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1690. X/* DIVB 90 */   { ADDR , DIRECT, 
  1691. X        "fe;9c;[2=].8I;[1=]~.1&T!.8I;" },
  1692. X/* DIVB 91 */   { ADDR , EXTENDED, 
  1693. X        "fe;9f;01;[2=]y[1=]~.1&T!.8I;" },
  1694. X/* DIVB 92 */   { 0 , 0, 
  1695. X        "fe;9d;[2=];[1=]~.1&T!.8I;" },
  1696. X/* DIVB 93 */   { 0 , 0, 
  1697. X        "fe;9e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1698. X/* DIVB 94 */   { ADDR , DIRECT, 
  1699. X        "fe;9f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1700. X/* DIVB 95 */   { ADDR , EXTENDED, 
  1701. X        "fe;9f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1702. X/* DIVU 96 */   { ADDR , DIRECT, 
  1703. X        "8c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1704. X/* DIVU 97 */   { ADDR , EXTENDED, 
  1705. X        "8f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1706. X/* DIVU 98 */   { 0 , 0, 
  1707. X        "8d;[2=]y[1=]~.3&T!.8I;" },
  1708. X/* DIVU 99 */   { 0 , 0, 
  1709. X        "8e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1710. X/* DIVU 100 */   { ADDR , DIRECT, 
  1711. X        "8f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1712. X/* DIVU 101 */   { ADDR , EXTENDED, 
  1713. X        "8f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1714. X/* DIVUB 102 */   { ADDR , DIRECT, 
  1715. X        "9c;[2=].8I;[1=]~.1&T!.8I;" },
  1716. X/* DIVUB 103 */   { ADDR , EXTENDED, 
  1717. X        "9f;01;[2=]y[1=]~.1&T!.8I;" },
  1718. X/* DIVUB 104 */   { 0 , 0, 
  1719. X        "9d;[2=];[1=]~.1&T!.8I;" },
  1720. X/* DIVUB 105 */   { 0 , 0, 
  1721. X        "9e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1722. X/* DIVUB 106 */   { ADDR , DIRECT, 
  1723. X        "9f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1724. X/* DIVUB 107 */   { ADDR , EXTENDED, 
  1725. X        "9f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1726. X/* DJNZ 108 */   { 0 , 0, 
  1727. X        "e0;[1=].8I;[2=].Q.1+-r" },
  1728. X/* DJNZW 109 */   { CPU196 , CPU196, 
  1729. X        "e1;[1=]~.1&T!.8I;[2=].Q.1+-r" },
  1730. X/* EI 110 */   { 0 , 0, 
  1731. X        "fb;" },
  1732. X/* EXT 111 */   { 0 , 0, 
  1733. X        "06;[1=]~.3&T!.8I;" },
  1734. X/* EXTB 112 */   { 0 , 0, 
  1735. X        "16;[1=]~.1&T!.8I;" },
  1736. X/* IDLPD 113 */   { CPU196 , CPU196, 
  1737. X        "f6;[1=];" },
  1738. X/* INC 114 */   { 0 , 0, 
  1739. X        "07;[1=]~.1&T!.8I;" },
  1740. X/* INCB 115 */   { 0 , 0, 
  1741. X        "17;[1=].8I;" },
  1742. X/* JBC 116 */   { 0 , 0, 
  1743. X        "[2=].3I.30|;[1=].8I;[3=].Q.1+-r" },
  1744. X/* JBS 117 */   { 0 , 0, 
  1745. X        "[2=].3I.38|;[1=].8I;[3=].Q.1+-r" },
  1746. X/* JC 118 */   { 0 , 0, 
  1747. X        "db;[1=].Q.1+-r" },
  1748. X/* JE 119 */   { 0 , 0, 
  1749. X        "df;[1=].Q.1+-r" },
  1750. X/* JGE 120 */   { 0 , 0, 
  1751. X        "d6;[1=].Q.1+-r" },
  1752. X/* JGT 121 */   { 0 , 0, 
  1753. X        "d2;[1=].Q.1+-r" },
  1754. X/* JH 122 */   { 0 , 0, 
  1755. X        "d9;[1=].Q.1+-r" },
  1756. X/* JLE 123 */   { 0 , 0, 
  1757. X        "da;[1=].Q.1+-r" },
  1758. X/* JLT 124 */   { 0 , 0, 
  1759. X        "de;[1=].Q.1+-r" },
  1760. X/* JNC 125 */   { 0 , 0, 
  1761. X        "d3;[1=].Q.1+-r" },
  1762. X/* JNE 126 */   { 0 , 0, 
  1763. X        "d7;[1=].Q.1+-r" },
  1764. X/* JNH 127 */   { 0 , 0, 
  1765. X        "d1;[1=].Q.1+-r" },
  1766. X/* JNST 128 */   { 0 , 0, 
  1767. X        "d0;[1=].Q.1+-r" },
  1768. X/* JNV 129 */   { 0 , 0, 
  1769. X        "d5;[1=].Q.1+-r" },
  1770. X/* JNVT 130 */   { 0 , 0, 
  1771. X        "d4;[1=].Q.1+-r" },
  1772. X/* JST 131 */   { 0 , 0, 
  1773. X        "d8;[1=].Q.1+-r" },
  1774. X/* JV 132 */   { 0 , 0, 
  1775. X        "dd;[1=].Q.1+-r" },
  1776. X/* JVT 133 */   { 0 , 0, 
  1777. X        "dc;[1=].Q.1+-r" },
  1778. X/* LCALL 134 */   { 0 , 0, 
  1779. X        "ef;[1=].Q.2+-.ffff&y" },
  1780. X/* LD 135 */   { ADDR , DIRECT, 
  1781. X        "a0;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1782. X/* LD 136 */   { ADDR , EXTENDED, 
  1783. X        "a3;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1784. X/* LD 137 */   { 0 , 0, 
  1785. X        "a1;[2=]y[1=]~.1&T!.8I;" },
  1786. X/* LD 138 */   { 0 , 0, 
  1787. X        "a2;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1788. X/* LD 139 */   { ADDR , DIRECT, 
  1789. X        "a3;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1790. X/* LD 140 */   { ADDR , EXTENDED, 
  1791. X        "a3;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1792. X/* LDB 141 */   { ADDR , DIRECT, 
  1793. X        "b0;[2=].8I;[1=].8I;" },
  1794. X/* LDB 142 */   { ADDR , EXTENDED, 
  1795. X        "b3;01;[2=]y[1=].8I;" },
  1796. X/* LDB 143 */   { 0 , 0, 
  1797. X        "b1;[2=];[1=].8I;" },
  1798. X/* LDB 144 */   { 0 , 0, 
  1799. X        "b2;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1800. X/* LDB 145 */   { ADDR , DIRECT, 
  1801. X        "b3;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1802. X/* LDB 146 */   { ADDR , EXTENDED, 
  1803. X        "b3;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1804. X/* LDBSE 147 */   { ADDR , DIRECT, 
  1805. X        "bc;[2=].8I;[1=]~.1&T!.8I;" },
  1806. X/* LDBSE 148 */   { ADDR , EXTENDED, 
  1807. X        "bf;01;[2=]y[1=]~.1&T!.8I;" },
  1808. X/* LDBSE 149 */   { 0 , 0, 
  1809. X        "bd;[2=];[1=]~.1&T!.8I;" },
  1810. X/* LDBSE 150 */   { 0 , 0, 
  1811. X        "be;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1812. X/* LDBSE 151 */   { ADDR , DIRECT, 
  1813. X        "bf;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1814. X/* LDBSE 152 */   { ADDR , EXTENDED, 
  1815. X        "bf;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1816. X/* LDBZE 153 */   { ADDR , DIRECT, 
  1817. X        "ac;[2=].8I;[1=]~.1&T!.8I;" },
  1818. X/* LDBZE 154 */   { ADDR , EXTENDED, 
  1819. X        "af;01;[2=]y[1=]~.1&T!.8I;" },
  1820. X/* LDBZE 155 */   { 0 , 0, 
  1821. X        "ad;[2=];[1=]~.1&T!.8I;" },
  1822. X/* LDBZE 156 */   { 0 , 0, 
  1823. X        "ae;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1824. X/* LDBZE 157 */   { ADDR , DIRECT, 
  1825. X        "af;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1826. X/* LDBZE 158 */   { ADDR , EXTENDED, 
  1827. X        "af;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1828. X/* LJMP 159 */   { 0 , 0, 
  1829. X        "e7;[1=].Q.2+-.ffff&y" },
  1830. X/* MUL 160 */   { ADDR , DIRECT, 
  1831. X        "fe;6c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1832. X/* MUL 161 */   { ADDR , EXTENDED, 
  1833. X        "fe;6f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1834. X/* MUL 162 */   { ADDR , DIRECT, 
  1835. X        "fe;4c;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1836. X/* MUL 163 */   { ADDR , EXTENDED, 
  1837. X        "fe;4f;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1838. X/* MUL 164 */   { 0 , 0, 
  1839. X        "fe;6d;[2=]y[1=]~.3&T!.8I;" },
  1840. X/* MUL 165 */   { 0 , 0, 
  1841. X        "fe;4d;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1842. X/* MUL 166 */   { 0 , 0, 
  1843. X        "fe;6e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1844. X/* MUL 167 */   { 0 , 0, 
  1845. X        "fe;4e;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1846. X/* MUL 168 */   { ADDR , DIRECT, 
  1847. X        "fe;6f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1848. X/* MUL 169 */   { ADDR , EXTENDED, 
  1849. X        "fe;6f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1850. X/* MUL 170 */   { ADDR , DIRECT, 
  1851. X        "fe;4f;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1852. X/* MUL 171 */   { ADDR , EXTENDED, 
  1853. X        "fe;4f;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1854. X/* MULB 172 */   { ADDR , DIRECT, 
  1855. X        "fe;7c;[2=].8I;[1=]~.1&T!.8I;" },
  1856. X/* MULB 173 */   { ADDR , EXTENDED, 
  1857. X        "fe;7f;01;[2=]y[1=]~.1&T!.8I;" },
  1858. X/* MULB 174 */   { ADDR , DIRECT, 
  1859. X        "fe;5c;[3=].8I;[2=].8I;[1=]~.1&T!.8I;" },
  1860. X/* MULB 175 */   { ADDR , EXTENDED, 
  1861. X        "fe;5f;01;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1862. X/* MULB 176 */   { 0 , 0, 
  1863. X        "fe;7d;[2=];[1=]~.1&T!.8I;" },
  1864. X/* MULB 177 */   { 0 , 0, 
  1865. X        "fe;5d;[3=];[2=].8I;[1=]~.1&T!.8I;" },
  1866. X/* MULB 178 */   { 0 , 0, 
  1867. X        "fe;7e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1868. X/* MULB 179 */   { 0 , 0, 
  1869. X        "fe;5e;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=]~.1&T!.8I;" },
  1870. X/* MULB 180 */   { ADDR , DIRECT, 
  1871. X        "fe;7f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1872. X/* MULB 181 */   { ADDR , EXTENDED, 
  1873. X        "fe;7f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1874. X/* MULB 182 */   { ADDR , DIRECT, 
  1875. X        "fe;5f;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=]~.1&T!.8I;" },
  1876. X/* MULB 183 */   { ADDR , EXTENDED, 
  1877. X        "fe;5f;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1878. X/* MULU 184 */   { ADDR , DIRECT, 
  1879. X        "6c;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1880. X/* MULU 185 */   { ADDR , EXTENDED, 
  1881. X        "6f;01;[2=]~.1&T!y[1=]~.3&T!.8I;" },
  1882. X/* MULU 186 */   { ADDR , DIRECT, 
  1883. X        "4c;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1884. X/* MULU 187 */   { ADDR , EXTENDED, 
  1885. X        "4f;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1886. X/* MULU 188 */   { 0 , 0, 
  1887. X        "6d;[2=]y[1=]~.3&T!.8I;" },
  1888. X/* MULU 189 */   { 0 , 0, 
  1889. X        "4d;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1890. X/* MULU 190 */   { 0 , 0, 
  1891. X        "6e;[2=]~.1&T!.8I.[3#]|;[1=]~.3&T!.8I;" },
  1892. X/* MULU 191 */   { 0 , 0, 
  1893. X        "4e;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1894. X/* MULU 192 */   { ADDR , DIRECT, 
  1895. X        "6f;[3=]~.1&T!.8I;[2=]r[1=]~.3&T!.8I;" },
  1896. X/* MULU 193 */   { ADDR , EXTENDED, 
  1897. X        "6f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.3&T!.8I;" },
  1898. X/* MULU 194 */   { ADDR , DIRECT, 
  1899. X        "4f;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1900. X/* MULU 195 */   { ADDR , EXTENDED, 
  1901. X        "4f;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.3&T!.8I;" },
  1902. X/* MULUB 196 */   { ADDR , DIRECT, 
  1903. X        "7c;[2=].8I;[1=]~.1&T!.8I;" },
  1904. X/* MULUB 197 */   { ADDR , EXTENDED, 
  1905. X        "7f;01;[2=]y[1=]~.1&T!.8I;" },
  1906. X/* MULUB 198 */   { ADDR , DIRECT, 
  1907. X        "5c;[3=].8I;[2=].8I;[1=]~.1&T!.8I;" },
  1908. X/* MULUB 199 */   { ADDR , EXTENDED, 
  1909. X        "5f;01;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1910. X/* MULUB 200 */   { 0 , 0, 
  1911. X        "7d;[2=];[1=]~.1&T!.8I;" },
  1912. X/* MULUB 201 */   { 0 , 0, 
  1913. X        "5d;[3=];[2=].8I;[1=]~.1&T!.8I;" },
  1914. X/* MULUB 202 */   { 0 , 0, 
  1915. X        "7e;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1916. X/* MULUB 203 */   { 0 , 0, 
  1917. X        "5e;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=]~.1&T!.8I;" },
  1918. X/* MULUB 204 */   { ADDR , DIRECT, 
  1919. X        "7f;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1920. X/* MULUB 205 */   { ADDR , EXTENDED, 
  1921. X        "7f;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1922. X/* MULUB 206 */   { ADDR , DIRECT, 
  1923. X        "5f;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=]~.1&T!.8I;" },
  1924. X/* MULUB 207 */   { ADDR , EXTENDED, 
  1925. X        "5f;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=]~.1&T!.8I;" },
  1926. X/* NEG 208 */   { 0 , 0, 
  1927. X        "03;[1=]~.1&T!.8I;" },
  1928. X/* NEGB 209 */   { 0 , 0, 
  1929. X        "13;[1=].8I;" },
  1930. X/* NOP 210 */   { 0 , 0, 
  1931. X        "fd;" },
  1932. X/* NORML 211 */   { 0 , 0, 
  1933. X        "0f;[2=].8I;[1=]~.3&T!.8I;" },
  1934. X/* NOT 212 */   { 0 , 0, 
  1935. X        "02;[1=]~.1&T!.8I;" },
  1936. X/* NOTB 213 */   { 0 , 0, 
  1937. X        "12;[1=].8I;" },
  1938. X/* OR 214 */   { ADDR , DIRECT, 
  1939. X        "80;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  1940. X/* OR 215 */   { ADDR , EXTENDED, 
  1941. X        "83;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  1942. X/* OR 216 */   { 0 , 0, 
  1943. X        "81;[2=]y[1=]~.1&T!.8I;" },
  1944. X/* OR 217 */   { 0 , 0, 
  1945. X        "82;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  1946. X/* OR 218 */   { ADDR , DIRECT, 
  1947. X        "83;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  1948. X/* OR 219 */   { ADDR , EXTENDED, 
  1949. X        "83;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  1950. X/* ORB 220 */   { ADDR , DIRECT, 
  1951. X        "90;[2=].8I;[1=].8I;" },
  1952. X/* ORB 221 */   { ADDR , EXTENDED, 
  1953. X        "93;01;[2=]y[1=].8I;" },
  1954. X/* ORB 222 */   { 0 , 0, 
  1955. X        "91;[2=];[1=].8I;" },
  1956. X/* ORB 223 */   { 0 , 0, 
  1957. X        "92;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  1958. X/* ORB 224 */   { ADDR , DIRECT, 
  1959. X        "93;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  1960. X/* ORB 225 */   { ADDR , EXTENDED, 
  1961. X        "93;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  1962. X/* POP 226 */   { ADDR , DIRECT, 
  1963. X        "cc;[1=]~.1&T!.8I;" },
  1964. X/* POP 227 */   { ADDR , EXTENDED, 
  1965. X        "cf;01;[1=]~.1&T!y" },
  1966. X/* POP 228 */   { 0 , 0, 
  1967. X        "ce;[1=]~.1&T!.8I.[2#]|;" },
  1968. X/* POP 229 */   { ADDR , DIRECT, 
  1969. X        "cf;[2=]~.1&T!.8I;[1=]r" },
  1970. X/* POP 230 */   { ADDR , EXTENDED, 
  1971. X        "cf;[2=]~.1&T!.8I.1|;[1=]y" },
  1972. X/* POPA 231 */   { CPU196 , CPU196, 
  1973. X        "f5;" },
  1974. X/* POPF 232 */   { 0 , 0, 
  1975. X        "f3;" },
  1976. X/* PUSH 233 */   { ADDR , DIRECT, 
  1977. X        "c8;[1=]~.1&T!.8I;" },
  1978. X/* PUSH 234 */   { ADDR , EXTENDED, 
  1979. X        "cb;01;[1=]~.1&T!y" },
  1980. X/* PUSH 235 */   { 0 , 0, 
  1981. X        "c9;[1=]y" },
  1982. X/* PUSH 236 */   { 0 , 0, 
  1983. X        "ca;[1=]~.1&T!.8I.[2#]|;" },
  1984. X/* PUSH 237 */   { ADDR , DIRECT, 
  1985. X        "cb;[2=]~.1&T!.8I;[1=]r" },
  1986. X/* PUSH 238 */   { ADDR , EXTENDED, 
  1987. X        "cb;[2=]~.1&T!.8I.1|;[1=]y" },
  1988. X/* PUSHA 239 */   { CPU196 , CPU196, 
  1989. X        "f4;" },
  1990. X/* PUSHF 240 */   { 0 , 0, 
  1991. X        "f2;" },
  1992. X/* RET 241 */   { 0 , 0, 
  1993. X        "f0;" },
  1994. X/* RST 242 */   { 0 , 0, 
  1995. X        "ff;" },
  1996. X/* SCALL 243 */   { 0 , 0, 
  1997. X        "[1=].Q.2+-.bR.2800|x" },
  1998. X/* SETC 244 */   { 0 , 0, 
  1999. X        "f9;" },
  2000. X/* SHL 245 */   { 0 , 0, 
  2001. X        "09;[2=].8I~.24<T!;[1=]~.1&T!.8I;" },
  2002. X/* SHL 246 */   { 0 , 0, 
  2003. X        "09;[2=].4I;[1=]~.1&T!.8I;" },
  2004. X/* SHLB 247 */   { 0 , 0, 
  2005. X        "19;[2=].8I~.24<T!;[1=].8I;" },
  2006. X/* SHLB 248 */   { 0 , 0, 
  2007. X        "19;[2=].4I;[1=].8I;" },
  2008. X/* SHLL 249 */   { 0 , 0, 
  2009. X        "0d;[2=].8I~.24<T!;[1=]~.3&T!.8I;" },
  2010. X/* SHLL 250 */   { 0 , 0, 
  2011. X        "0d;[2=].4I;[1=]~.3&T!.8I;" },
  2012. X/* SHR 251 */   { 0 , 0, 
  2013. X        "08;[2=].8I~.24<T!;[1=]~.1&T!.8I;" },
  2014. X/* SHR 252 */   { 0 , 0, 
  2015. X        "08;[2=].4I;[1=]~.1&T!.8I;" },
  2016. X/* SHRA 253 */   { 0 , 0, 
  2017. X        "0a;[2=].8I~.24<T!;[1=]~.1&T!.8I;" },
  2018. X/* SHRA 254 */   { 0 , 0, 
  2019. X        "0a;[2=].4I;[1=]~.1&T!.8I;" },
  2020. X/* SHRAB 255 */   { 0 , 0, 
  2021. X        "1a;[2=].8I~.24<T!;[1=].8I;" },
  2022. X/* SHRAB 256 */   { 0 , 0, 
  2023. X        "1a;[2=].4I;[1=].8I;" },
  2024. X/* SHRAL 257 */   { 0 , 0, 
  2025. X        "0e;[2=].8I~.24<T!;[1=]~.3&T!.8I;" },
  2026. X/* SHRAL 258 */   { 0 , 0, 
  2027. X        "0e;[2=].4I;[1=]~.3&T!.8I;" },
  2028. X/* SHRB 259 */   { 0 , 0, 
  2029. X        "18;[2=].8I~.24<T!;[1=].8I;" },
  2030. X/* SHRB 260 */   { 0 , 0, 
  2031. X        "18;[2=].4I;[1=].8I;" },
  2032. X/* SHRL 261 */   { 0 , 0, 
  2033. X        "0c;[2=].8I~.24<T!;[1=]~.3&T!.8I;" },
  2034. X/* SHRL 262 */   { 0 , 0, 
  2035. X        "0c;[2=].4I;[1=]~.3&T!.8I;" },
  2036. X/* SJMP 263 */   { 0 , 0, 
  2037. X        "[1=].Q.2+-.bR.2000|x" },
  2038. X/* SKIP 264 */   { 0 , 0, 
  2039. X        "00;[1=];" },
  2040. X/* ST 265 */   { ADDR , DIRECT, 
  2041. X        "c0;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2042. X/* ST 266 */   { ADDR , EXTENDED, 
  2043. X        "c3;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2044. X/* ST 267 */   { 0 , 0, 
  2045. X        "c2;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2046. X/* ST 268 */   { ADDR , DIRECT, 
  2047. X        "c3;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2048. X/* ST 269 */   { ADDR , EXTENDED, 
  2049. X        "c3;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2050. X/* STB 270 */   { ADDR , DIRECT, 
  2051. X        "c4;[2=].8I;[1=].8I;" },
  2052. X/* STB 271 */   { ADDR , EXTENDED, 
  2053. X        "c7;01;[2=]y[1=].8I;" },
  2054. X/* STB 272 */   { 0 , 0, 
  2055. X        "c6;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2056. X/* STB 273 */   { ADDR , DIRECT, 
  2057. X        "c7;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2058. X/* STB 274 */   { ADDR , EXTENDED, 
  2059. X        "c7;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2060. X/* SUB 275 */   { ADDR , DIRECT, 
  2061. X        "68;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2062. X/* SUB 276 */   { ADDR , EXTENDED, 
  2063. X        "6b;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2064. X/* SUB 277 */   { ADDR , DIRECT, 
  2065. X        "48;[3=]~.1&T!.8I;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2066. X/* SUB 278 */   { ADDR , EXTENDED, 
  2067. X        "4b;01;[3=]~.1&T!y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2068. X/* SUB 279 */   { 0 , 0, 
  2069. X        "69;[2=]y[1=]~.1&T!.8I;" },
  2070. X/* SUB 280 */   { 0 , 0, 
  2071. X        "49;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2072. X/* SUB 281 */   { 0 , 0, 
  2073. X        "6a;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2074. X/* SUB 282 */   { 0 , 0, 
  2075. X        "4a;[3=]~.1&T!.8I.[4#]|;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2076. X/* SUB 283 */   { ADDR , DIRECT, 
  2077. X        "6b;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2078. X/* SUB 284 */   { ADDR , EXTENDED, 
  2079. X        "6b;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2080. X/* SUB 285 */   { ADDR , DIRECT, 
  2081. X        "4b;[4=]~.1&T!.8I;[3=]r[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2082. X/* SUB 286 */   { ADDR , EXTENDED, 
  2083. X        "4b;[4=]~.1&T!.8I.1|;[3=]y[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2084. X/* SUBB 287 */   { ADDR , DIRECT, 
  2085. X        "78;[2=].8I;[1=].8I;" },
  2086. X/* SUBB 288 */   { ADDR , EXTENDED, 
  2087. X        "7b;01;[2=]y[1=].8I;" },
  2088. X/* SUBB 289 */   { ADDR , DIRECT, 
  2089. X        "58;[3=].8I;[2=].8I;[1=].8I;" },
  2090. X/* SUBB 290 */   { ADDR , EXTENDED, 
  2091. X        "5b;01;[3=]y[2=].8I;[1=].8I;" },
  2092. X/* SUBB 291 */   { 0 , 0, 
  2093. X        "79;[2=];[1=].8I;" },
  2094. X/* SUBB 292 */   { 0 , 0, 
  2095. X        "59;[3=];[2=].8I;[1=].8I;" },
  2096. X/* SUBB 293 */   { 0 , 0, 
  2097. X        "7a;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2098. X/* SUBB 294 */   { 0 , 0, 
  2099. X        "5a;[3=]~.1&T!.8I.[4#]|;[2=].8I;[1=].8I;" },
  2100. X/* SUBB 295 */   { ADDR , DIRECT, 
  2101. X        "7b;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2102. X/* SUBB 296 */   { ADDR , EXTENDED, 
  2103. X        "7b;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2104. X/* SUBB 297 */   { ADDR , DIRECT, 
  2105. X        "5b;[4=]~.1&T!.8I;[3=]r[2=].8I;[1=].8I;" },
  2106. X/* SUBB 298 */   { ADDR , EXTENDED, 
  2107. X        "5b;[4=]~.1&T!.8I.1|;[3=]y[2=].8I;[1=].8I;" },
  2108. X/* SUBC 299 */   { ADDR , DIRECT, 
  2109. X        "a8;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2110. X/* SUBC 300 */   { ADDR , EXTENDED, 
  2111. X        "ab;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2112. X/* SUBC 301 */   { 0 , 0, 
  2113. X        "a9;[2=]y[1=]~.1&T!.8I;" },
  2114. X/* SUBC 302 */   { 0 , 0, 
  2115. X        "aa;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2116. X/* SUBC 303 */   { ADDR , DIRECT, 
  2117. X        "ab;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2118. X/* SUBC 304 */   { ADDR , EXTENDED, 
  2119. X        "ab;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2120. X/* SUBCB 305 */   { ADDR , DIRECT, 
  2121. X        "b8;[2=].8I;[1=].8I;" },
  2122. X/* SUBCB 306 */   { ADDR , EXTENDED, 
  2123. X        "bb;01;[2=]y[1=].8I;" },
  2124. X/* SUBCB 307 */   { 0 , 0, 
  2125. X        "b9;[2=];[1=].8I;" },
  2126. X/* SUBCB 308 */   { 0 , 0, 
  2127. X        "ba;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2128. X/* SUBCB 309 */   { ADDR , DIRECT, 
  2129. X        "bb;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2130. X/* SUBCB 310 */   { ADDR , EXTENDED, 
  2131. X        "bb;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2132. X/* XOR 311 */   { ADDR , DIRECT, 
  2133. X        "84;[2=]~.1&T!.8I;[1=]~.1&T!.8I;" },
  2134. X/* XOR 312 */   { ADDR , EXTENDED, 
  2135. X        "87;01;[2=]~.1&T!y[1=]~.1&T!.8I;" },
  2136. X/* XOR 313 */   { 0 , 0, 
  2137. X        "85;[2=]y[1=]~.1&T!.8I;" },
  2138. X/* XOR 314 */   { 0 , 0, 
  2139. X        "86;[2=]~.1&T!.8I.[3#]|;[1=]~.1&T!.8I;" },
  2140. X/* XOR 315 */   { ADDR , DIRECT, 
  2141. X        "87;[3=]~.1&T!.8I;[2=]r[1=]~.1&T!.8I;" },
  2142. X/* XOR 316 */   { ADDR , EXTENDED, 
  2143. X        "87;[3=]~.1&T!.8I.1|;[2=]y[1=]~.1&T!.8I;" },
  2144. X/* XORB 317 */   { ADDR , DIRECT, 
  2145. X        "94;[2=].8I;[1=].8I;" },
  2146. X/* XORB 318 */   { ADDR , EXTENDED, 
  2147. X        "97;01;[2=]y[1=].8I;" },
  2148. X/* XORB 319 */   { 0 , 0, 
  2149. X        "95;[2=];[1=].8I;" },
  2150. X/* XORB 320 */   { 0 , 0, 
  2151. X        "96;[2=]~.1&T!.8I.[3#]|;[1=].8I;" },
  2152. X/* XORB 321 */   { ADDR , DIRECT, 
  2153. X        "97;[3=]~.1&T!.8I;[2=]r[1=].8I;" },
  2154. X/* XORB 322 */   { ADDR , EXTENDED, 
  2155. X        "97;[3=]~.1&T!.8I.1|;[2=]y[1=].8I;" },
  2156. X    { 0,0,""} };
  2157. X/* end fraptabdef.c */
  2158. SHAR_EOF
  2159. true || echo 'restore of as8096.y failed'
  2160. fi
  2161. exit 0
  2162.