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

  1. From: markz@ssc.UUCP (Mark Zenier)
  2. Newsgroups: alt.sources
  3. Subject: Frankenstein Cross Assemblers, Phillips/Signetics 2650, Part 2 of 2
  4. Message-ID: <625@ssc.UUCP>
  5. Date: 7 Dec 90 00:16:14 GMT
  6.  
  7. ---- Cut Here and feed the following to sh ----
  8. #!/bin/sh
  9. # This is part 02 of Frankasm/As2650
  10. # ============= as2650.y ==============
  11. if test -f 'as2650.y' -a X"$1" != X"-c"; then
  12.     echo 'x - skipping as2650.y (File already exists)'
  13. else
  14. echo 'x - extracting as2650.y (Text)'
  15. sed 's/^X//' << 'SHAR_EOF' > 'as2650.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:     as2650.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:     as2650.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/* 2650 instruction generation file, standard syntax */
  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    /* selectors for register */
  60. X    /* 0000 0000 0000 xxxx */
  61. X#define REGMASK    0xf 
  62. X#define REG0    0x1
  63. X#define REG1    0x2
  64. X#define REG2    0x4
  65. X#define REG3    0x8
  66. X    /* selectors for conditions */
  67. X    /* 0000 0000 xxxx 0000 */
  68. X#define CONDMASK    0xf0
  69. X#define COND0    0x10
  70. X#define COND1    0x20
  71. X#define COND2    0x40
  72. X#define COND3 0x80
  73. X
  74. X#define PAGEBITS 0x6000
  75. X#define ST_INH 0x1
  76. X#define ST_EXP 0x2
  77. X#define ST_INDIR 0x4
  78. X#define ST_REG 0x8
  79. X#define ST_REGCOMMA 0x10
  80. X#define ST_REGEXP 0x20
  81. X#define ST_REGINDIR 0x40
  82. X#define ST_COND 0x80
  83. X#define ST_CONDEXP 0x100
  84. X#define ST_CONDINDIR 0x200
  85. X#define ST_BINDEX 0x400
  86. X#define ST_BINDIRX 0x800
  87. X#define    API_ABS    0
  88. X#define    API_INC    2
  89. X#define    API_DEC    4
  90. X#define    API_IND    6
  91. X#define    API_IABS    8
  92. X#define    API_IINC    0xa
  93. X#define    API_IDEC    0xc
  94. X#define    API_IIND    0xe
  95. X#define ST_ABSOLUTE 0x1
  96. X#define ST_INDEX 0x2
  97. X#define ST_INCINDEX 0x4
  98. X#define ST_DECINDEX 0x8
  99. X#define ST_AREGINDIR 0x10
  100. X#define ST_INDIRX 0x20
  101. X#define ST_INCINDIRX 0x40
  102. X#define ST_DECINDIRX 0x80
  103. X    
  104. X    static int    regsel[4] = {REG0, REG1, REG2, REG3};
  105. X    static int    condsel[4] = {COND0, COND1, COND2, COND3};
  106. X    static int    prevpage;
  107. X    static char    genbdef[] = "[1=];";
  108. X    static char    genwdef[] = "[1=]x"; /* x for normal, y for byte rev */
  109. X    char ignosyn[] = "[Xinvalid syntax for instruction";
  110. X    char ignosel[] = "[Xinvalid operands";
  111. X
  112. X    long    labelloc;
  113. X    static int satsub;
  114. X    int    ifstkpt = 0;
  115. X    int    fraifskip = FALSE;
  116. X
  117. X    struct symel * endsymbol = SYMNULL;
  118. X
  119. X%}
  120. X%union {
  121. X    int    intv;
  122. X    long     longv;
  123. X    char    *strng;
  124. X    struct symel *symb;
  125. X}
  126. X
  127. X%token <intv> REGISTER 
  128. X%token <intv> CONDITION 
  129. X%token <intv> KOC_BDEF
  130. X%token <intv> KOC_ELSE
  131. X%token <intv> KOC_END
  132. X%token <intv> KOC_ENDI
  133. X%token <intv> KOC_EQU
  134. X%token <intv> KOC_IF
  135. X%token <intv> KOC_INCLUDE
  136. X%token <intv> KOC_ORG
  137. X%token <intv> KOC_RESM
  138. X%token <intv> KOC_SDEF
  139. X%token <intv> KOC_SET
  140. X%token <intv> KOC_WDEF
  141. X%token <intv> KOC_CHSET
  142. X%token <intv> KOC_CHDEF
  143. X%token <intv> KOC_CHUSE
  144. X%token <intv> KOC_ACON
  145. X%token <intv> KOC_opcode
  146. X%token <intv> KOC_indexabs
  147. X
  148. X%token <longv> CONSTANT
  149. X%token EOL
  150. X%token KEOP_AND
  151. X%token KEOP_DEFINED
  152. X%token KEOP_EQ
  153. X%token KEOP_GE
  154. X%token KEOP_GT
  155. X%token KEOP_HIGH
  156. X%token KEOP_LE
  157. X%token KEOP_LOW
  158. X%token KEOP_LT
  159. X%token KEOP_MOD
  160. X%token KEOP_MUN
  161. X%token KEOP_NE
  162. X%token KEOP_NOT
  163. X%token KEOP_OR
  164. X%token KEOP_SHL
  165. X%token KEOP_SHR
  166. X%token KEOP_XOR
  167. X%token KEOP_locctr
  168. X%token <symb> LABEL
  169. X%token <strng> STRING
  170. X%token <symb> SYMBOL
  171. X
  172. X%token KTK_invalid
  173. X
  174. X%right    KEOP_HIGH KEOP_LOW
  175. X%left    KEOP_OR KEOP_XOR
  176. X%left    KEOP_AND
  177. X%right    KEOP_NOT
  178. X%nonassoc    KEOP_GT KEOP_GE KEOP_LE KEOP_LT KEOP_NE KEOP_EQ
  179. X%left    '+' '-'
  180. X%left    '*' '/' KEOP_MOD KEOP_SHL KEOP_SHR
  181. X%right    KEOP_MUN
  182. X
  183. X
  184. X%type <intv> expr exprlist stringlist
  185. X
  186. X%start file
  187. X
  188. X%%
  189. X
  190. Xfile    :    file allline
  191. X    |    allline
  192. X    ;
  193. X
  194. Xallline    :     line EOL
  195. X            {
  196. X                clrexpr();
  197. X            }
  198. X    |    EOL
  199. X    |    error EOL
  200. X            {
  201. X                clrexpr();
  202. X                yyerrok;
  203. X            }
  204. X    ;
  205. X
  206. Xline    :    LABEL KOC_END 
  207. X            {
  208. X                endsymbol = $1;
  209. X                nextreadact = Nra_end;
  210. X            }
  211. X    |          KOC_END 
  212. X            {
  213. X                nextreadact = Nra_end;
  214. X            }
  215. X    |    KOC_INCLUDE STRING
  216. X            {
  217. X        if(nextfstk >= FILESTKDPTH)
  218. X        {
  219. X            fraerror("include file nesting limit exceeded");
  220. X        }
  221. X        else
  222. X        {
  223. X            infilestk[nextfstk].fnm = savestring($2,strlen($2));
  224. X            if( (infilestk[nextfstk].fpt = fopen($2,"r"))
  225. X                ==(FILE *)NULL )
  226. X            {
  227. X                fraerror("cannot open include file");
  228. X            }
  229. X            else
  230. X            {
  231. X                nextreadact = Nra_new;
  232. X            }
  233. X        }
  234. X            }
  235. X    |    LABEL KOC_EQU expr 
  236. X            {
  237. X                if($1 -> seg == SSG_UNDEF)
  238. X                {
  239. X                    pevalexpr(0, $3);
  240. X                    if(evalr[0].seg == SSG_ABS)
  241. X                    {
  242. X                        $1 -> seg = SSG_EQU;
  243. X                        $1 -> value = evalr[0].value;
  244. X                        prtequvalue("C: 0x%lx\n",
  245. X                            evalr[0].value);
  246. X                    }
  247. X                    else
  248. X                    {
  249. X                        fraerror(
  250. X                    "noncomputable expression for EQU");
  251. X                    }
  252. X                }
  253. X                else
  254. X                {
  255. X                    fraerror(
  256. X                "cannot change symbol value with EQU");
  257. X                }
  258. X            }
  259. X    |    LABEL KOC_SET expr 
  260. X            {
  261. X                if($1 -> seg == SSG_UNDEF
  262. X                   || $1 -> seg == SSG_SET)
  263. X                {
  264. X                    pevalexpr(0, $3);
  265. X                    if(evalr[0].seg == SSG_ABS)
  266. X                    {
  267. X                        $1 -> seg = SSG_SET;
  268. X                        $1 -> value = evalr[0].value;
  269. X                        prtequvalue("C: 0x%lx\n",
  270. X                            evalr[0].value);
  271. X                    }
  272. X                    else
  273. X                    {
  274. X                        fraerror(
  275. X                    "noncomputable expression for SET");
  276. X                    }
  277. X                }
  278. X                else
  279. X                {
  280. X                    fraerror(
  281. X                "cannot change symbol value with SET");
  282. X                }
  283. X            }
  284. X    |    KOC_IF expr 
  285. X            {
  286. X        if((++ifstkpt) < IFSTKDEPTH)
  287. X        {
  288. X            pevalexpr(0, $2);
  289. X            if(evalr[0].seg == SSG_ABS)
  290. X            {
  291. X                if(evalr[0].value != 0)
  292. X                {
  293. X                    elseifstk[ifstkpt] = If_Skip;
  294. X                    endifstk[ifstkpt] = If_Active;
  295. X                }
  296. X                else
  297. X                {
  298. X                    fraifskip = TRUE;
  299. X                    elseifstk[ifstkpt] = If_Active;
  300. X                    endifstk[ifstkpt] = If_Active;
  301. X                }
  302. X            }
  303. X            else
  304. X            {
  305. X                fraifskip = TRUE;
  306. X                elseifstk[ifstkpt] = If_Active;
  307. X                endifstk[ifstkpt] = If_Active;
  308. X            }
  309. X        }
  310. X        else
  311. X        {
  312. X            fraerror("IF stack overflow");
  313. X        }
  314. X            }
  315. X                        
  316. X    |    KOC_IF 
  317. X            {
  318. X        if(fraifskip) 
  319. X        {
  320. X            if((++ifstkpt) < IFSTKDEPTH)
  321. X            {
  322. X                    elseifstk[ifstkpt] = If_Skip;
  323. X                    endifstk[ifstkpt] = If_Skip;
  324. X            }
  325. X            else
  326. X            {
  327. X                fraerror("IF stack overflow");
  328. X            }
  329. X        }
  330. X        else
  331. X        {
  332. X            yyerror("syntax error");
  333. X            YYERROR;
  334. X        }
  335. X                }
  336. X                        
  337. X    |    KOC_ELSE 
  338. X            {
  339. X                switch(elseifstk[ifstkpt])
  340. X                {
  341. X                case If_Active:
  342. X                    fraifskip = FALSE;
  343. X                    break;
  344. X                
  345. X                case If_Skip:
  346. X                    fraifskip = TRUE;
  347. X                    break;
  348. X                
  349. X                case If_Err:
  350. X                    fraerror("ELSE with no matching if");
  351. X                    break;
  352. X                }
  353. X            }
  354. X
  355. X    |    KOC_ENDI 
  356. X            {
  357. X                switch(endifstk[ifstkpt])
  358. X                {
  359. X                case If_Active:
  360. X                    fraifskip = FALSE;
  361. X                    ifstkpt--;
  362. X                    break;
  363. X                
  364. X                case If_Skip:
  365. X                    fraifskip = TRUE;
  366. X                    ifstkpt--;
  367. X                    break;
  368. X                
  369. X                case If_Err:
  370. X                    fraerror("ENDI with no matching if");
  371. X                    break;
  372. X                }
  373. X            }
  374. X    |    LABEL KOC_ORG expr 
  375. X            {
  376. X                pevalexpr(0, $3);
  377. X                if(evalr[0].seg == SSG_ABS)
  378. X                {
  379. X                    locctr = labelloc = evalr[0].value;
  380. X                    if($1 -> seg == SSG_UNDEF)
  381. X                    {
  382. X                        $1 -> seg = SSG_ABS;
  383. X                        $1 -> value = labelloc;
  384. X                    }
  385. X                    else
  386. X                        fraerror(
  387. X                        "multiple definition of label");
  388. X                    prtequvalue("C: 0x%lx\n",
  389. X                        evalr[0].value);
  390. X                }
  391. X                else
  392. X                {
  393. X                    fraerror(
  394. X                     "noncomputable expression for ORG");
  395. X                }
  396. X            }
  397. X    |          KOC_ORG expr 
  398. X            {
  399. X                pevalexpr(0, $2);
  400. X                if(evalr[0].seg == SSG_ABS)
  401. X                {
  402. X                    locctr = labelloc = evalr[0].value;
  403. X                    prtequvalue("C: 0x%lx\n",
  404. X                        evalr[0].value);
  405. X                }
  406. X                else
  407. X                {
  408. X                    fraerror(
  409. X                     "noncomputable expression for ORG");
  410. X                }
  411. X            }
  412. X    |    LABEL KOC_CHSET
  413. X            {
  414. X                if($1 -> seg == SSG_UNDEF)
  415. X                {
  416. X                    $1 -> seg = SSG_EQU;
  417. X                    if( ($1->value = chtcreate()) <= 0)
  418. X                    {
  419. X        fraerror( "cannot create character translation table");
  420. X                    }
  421. X                    prtequvalue("C: 0x%lx\n", $1 -> value);
  422. X                }
  423. X                else
  424. X                {
  425. X            fraerror( "multiple definition of label");
  426. X                }
  427. X            }
  428. X    |        KOC_CHUSE
  429. X            {
  430. X                chtcpoint = (int *) NULL;
  431. X                prtequvalue("C: 0x%lx\n", 0L);
  432. X            }
  433. X    |        KOC_CHUSE expr
  434. X            {
  435. X                pevalexpr(0, $2);
  436. X                if( evalr[0].seg == SSG_ABS)
  437. X                {
  438. X                    if( evalr[0].value == 0)
  439. X                    {
  440. X                        chtcpoint = (int *)NULL;
  441. X                        prtequvalue("C: 0x%lx\n", 0L);
  442. X                    }
  443. X                    else if(evalr[0].value < chtnxalph)
  444. X                    {
  445. X                chtcpoint = chtatab[evalr[0].value];
  446. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  447. X                    }
  448. X                    else
  449. X                    {
  450. X            fraerror("nonexistent character translation table");
  451. X                    }
  452. X                }
  453. X                else
  454. X                {
  455. X                    fraerror("noncomputable expression");
  456. X                }
  457. X            }
  458. X    |        KOC_CHDEF STRING ',' exprlist
  459. X            {
  460. X        int findrv, numret, *charaddr;
  461. X        char *sourcestr = $2, *before;
  462. X
  463. X        if(chtnpoint != (int *)NULL)
  464. X        {
  465. X            for(satsub = 0; satsub < $4; satsub++)
  466. X            {
  467. X                before = sourcestr;
  468. X
  469. X                pevalexpr(0, exprlist[satsub]);
  470. X                findrv = chtcfind(chtnpoint, &sourcestr,
  471. X                        &charaddr, &numret);
  472. X                if(findrv == CF_END)
  473. X                {
  474. X            fraerror("more expressions than characters");
  475. X                    break;
  476. X                }
  477. X
  478. X                if(evalr[0].seg == SSG_ABS)
  479. X                {
  480. X                    switch(findrv)
  481. X                    {
  482. X                    case CF_UNDEF:
  483. X                        {
  484. X                if(evalr[0].value < 0 ||
  485. X                    evalr[0].value > 255)
  486. X                {
  487. X            frawarn("character translation value truncated");
  488. X                }
  489. X                *charaddr = evalr[0].value & 0xff;
  490. X                prtequvalue("C: 0x%lx\n", evalr[0].value);
  491. X                        }
  492. X                        break;
  493. X
  494. X                    case CF_INVALID:
  495. X                    case CF_NUMBER:
  496. X                fracherror("invalid character to define", 
  497. X                    before, sourcestr);
  498. X                        break;
  499. X
  500. X                    case CF_CHAR:
  501. X                fracherror("character already defined", 
  502. X                    before, sourcestr);
  503. X                        break;
  504. X                    }
  505. X                }
  506. X                else
  507. X                {
  508. X                    fraerror("noncomputable expression");
  509. X                }
  510. X            }
  511. X
  512. X            if( *sourcestr != '\0')
  513. X            {
  514. X                fraerror("more characters than expressions");
  515. X            }
  516. X        }
  517. X        else
  518. X        {
  519. X            fraerror("no CHARSET statement active");
  520. X        }
  521. X            
  522. X            }
  523. X    |    LABEL 
  524. X            {
  525. X            if($1 -> seg == SSG_UNDEF)
  526. X            {
  527. X                $1 -> seg = SSG_ABS;
  528. X                $1 -> value = labelloc;
  529. X                prtequvalue("C: 0x%lx\n", labelloc);
  530. X
  531. X            }
  532. X            else
  533. X                fraerror(
  534. X                "multiple definition of label");
  535. X            }
  536. X    |    labeledline
  537. X    ;
  538. X
  539. Xlabeledline :    LABEL genline
  540. X            {
  541. X            if($1 -> seg == SSG_UNDEF)
  542. X            {
  543. X                $1 -> seg = SSG_ABS;
  544. X                $1 -> value = labelloc;
  545. X            }
  546. X            else
  547. X                fraerror(
  548. X                "multiple definition of label");
  549. X            labelloc = locctr;
  550. X            }
  551. X                
  552. X    |    genline
  553. X            {
  554. X                labelloc = locctr;
  555. X            }
  556. X    ;
  557. X
  558. Xgenline    :    KOC_BDEF    exprlist 
  559. X            {
  560. X                genlocrec(currseg, labelloc);
  561. X                for( satsub = 0; satsub < $2; satsub++)
  562. X                {
  563. X                    pevalexpr(1, exprlist[satsub]);
  564. X                    locctr += geninstr(genbdef);
  565. X                }
  566. X            }
  567. X    |    KOC_SDEF stringlist 
  568. X            {
  569. X                genlocrec(currseg, labelloc);
  570. X                for(satsub = 0; satsub < $2; satsub++)
  571. X                {
  572. X                    locctr += genstring(stringlist[satsub]);
  573. X                }
  574. X            }
  575. X    |    KOC_WDEF exprlist 
  576. X            {
  577. X                genlocrec(currseg, labelloc);
  578. X                for( satsub = 0; satsub < $2; satsub++)
  579. X                {
  580. X                    pevalexpr(1, exprlist[satsub]);
  581. X                    locctr += geninstr(genwdef);
  582. X                }
  583. X            }    
  584. X    |    KOC_RESM expr 
  585. X            {
  586. X                pevalexpr(0, $2);
  587. X                if(evalr[0].seg == SSG_ABS)
  588. X                {
  589. X                    locctr = labelloc + evalr[0].value;
  590. X                    prtequvalue("C: 0x%lx\n", labelloc);
  591. X                }
  592. X                else
  593. X                {
  594. X                    fraerror(
  595. X                 "noncomputable result for RMB expression");
  596. X                }
  597. X            }
  598. X    ;
  599. X
  600. Xexprlist :    exprlist ',' expr
  601. X            {
  602. X                exprlist[nextexprs ++ ] = $3;
  603. X                $$ = nextexprs;
  604. X            }
  605. X    |    expr
  606. X            {
  607. X                nextexprs = 0;
  608. X                exprlist[nextexprs ++ ] = $1;
  609. X                $$ = nextexprs;
  610. X            }
  611. X    ;
  612. X
  613. Xstringlist :    stringlist ',' STRING
  614. X            {
  615. X                stringlist[nextstrs ++ ] = $3;
  616. X                $$ = nextstrs;
  617. X            }
  618. X    |    STRING
  619. X            {
  620. X                nextstrs = 0;
  621. X                stringlist[nextstrs ++ ] = $1;
  622. X                $$ = nextstrs;
  623. X            }
  624. X    ;
  625. X
  626. X
  627. Xgenline :    KOC_ACON exprlist
  628. X        {
  629. X            genlocrec(currseg, labelloc);
  630. X            for( satsub = 0; satsub < $2; satsub++)
  631. X            {
  632. X                pevalexpr(1, exprlist[satsub]);
  633. X                locctr += geninstr("[1=].fIx");
  634. X            }
  635. X        }    
  636. Xgenline : KOC_opcode 
  637. X        {
  638. X        genlocrec(currseg, labelloc);
  639. X        prevpage = (locctr & PAGEBITS);
  640. X        if(prevpage == locctr)
  641. X            frawarn("Page Boundary");
  642. X        locctr += geninstr(findgen($1, ST_INH, 0));
  643. X        }
  644. X    ;
  645. Xgenline : KOC_opcode  expr
  646. X        {
  647. X        genlocrec(currseg, labelloc);
  648. X        prevpage = (locctr & PAGEBITS);
  649. X        if(prevpage == locctr)
  650. X            frawarn("Page Boundary");
  651. X        pevalexpr(1, $2);
  652. X        locctr += geninstr(findgen($1, ST_EXP, 0));
  653. X        if(((locctr -1) & PAGEBITS) != prevpage)
  654. X            fraerror("instruction crosses page boundry");
  655. X        }
  656. X    ;
  657. Xgenline : KOC_opcode  '*' expr 
  658. X        {
  659. X        genlocrec(currseg, labelloc);
  660. X        prevpage = (locctr & PAGEBITS);
  661. X        if(prevpage == locctr)
  662. X            frawarn("Page Boundary");
  663. X        pevalexpr(1, $3);
  664. X        locctr += geninstr(findgen($1, ST_INDIR, 0));
  665. X        if(((locctr -1) & PAGEBITS) != prevpage)
  666. X            fraerror("instruction crosses page boundry");
  667. X        }
  668. X    ;
  669. Xgenline : KOC_opcode  REGISTER
  670. X        {
  671. X        genlocrec(currseg, labelloc);
  672. X        prevpage = (locctr & PAGEBITS);
  673. X        if(prevpage == locctr)
  674. X            frawarn("Page Boundary");
  675. X        evalr[1].value = $2;
  676. X        locctr += geninstr(findgen($1, ST_REG, regsel[$2] ));
  677. X        }
  678. X    ;
  679. Xgenline : KOC_opcode  ',' REGISTER
  680. X        {
  681. X        genlocrec(currseg, labelloc);
  682. X        prevpage = (locctr & PAGEBITS);
  683. X        if(prevpage == locctr)
  684. X            frawarn("Page Boundary");
  685. X        evalr[1].value = $3;
  686. X        locctr += geninstr(findgen($1, ST_REGCOMMA, regsel[$3] ));
  687. X        }
  688. X    ;
  689. Xgenline : KOC_opcode  ',' REGISTER expr
  690. X        {
  691. X        genlocrec(currseg, labelloc);
  692. X        prevpage = (locctr & PAGEBITS);
  693. X        if(prevpage == locctr)
  694. X            frawarn("Page Boundary");
  695. X        evalr[1].value = $3;
  696. X        pevalexpr(2, $4);
  697. X        locctr += geninstr(findgen($1, ST_REGEXP, regsel[$3] ));
  698. X        if(((locctr -1) & PAGEBITS) != prevpage)
  699. X            fraerror("instruction crosses page boundry");
  700. X        }
  701. X    ;
  702. Xgenline : KOC_opcode  ',' REGISTER '*' expr 
  703. X        {
  704. X        genlocrec(currseg, labelloc);
  705. X        prevpage = (locctr & PAGEBITS);
  706. X        if(prevpage == locctr)
  707. X            frawarn("Page Boundary");
  708. X        evalr[1].value = $3;
  709. X        pevalexpr(2, $5);
  710. X        locctr += geninstr(findgen($1, ST_REGINDIR, regsel[$3] ));
  711. X        if(((locctr -1) & PAGEBITS) != prevpage)
  712. X            fraerror("instruction crosses page boundry");
  713. X        }
  714. X    ;
  715. Xgenline : KOC_opcode  ',' CONDITION
  716. X        {
  717. X        genlocrec(currseg, labelloc);
  718. X        prevpage = (locctr & PAGEBITS);
  719. X        if(prevpage == locctr)
  720. X            frawarn("Page Boundary");
  721. X        evalr[1].value = $3;
  722. X        locctr += geninstr(findgen($1, ST_COND, condsel[$3] ));
  723. X        }
  724. X    ;
  725. Xgenline : KOC_opcode  ',' CONDITION expr
  726. X        {
  727. X        genlocrec(currseg, labelloc);
  728. X        prevpage = (locctr & PAGEBITS);
  729. X        if(prevpage == locctr)
  730. X            frawarn("Page Boundary");
  731. X        evalr[1].value = $3;
  732. X        pevalexpr(2, $4);
  733. X        locctr += geninstr(findgen($1, ST_CONDEXP, condsel[$3] ));
  734. X        if(((locctr -1) & PAGEBITS) != prevpage)
  735. X            fraerror("instruction crosses page boundry");
  736. X        }
  737. X    ;
  738. Xgenline : KOC_opcode  ',' CONDITION '*' expr 
  739. X        {
  740. X        genlocrec(currseg, labelloc);
  741. X        prevpage = (locctr & PAGEBITS);
  742. X        if(prevpage == locctr)
  743. X            frawarn("Page Boundary");
  744. X        evalr[1].value = $3;
  745. X        pevalexpr(2, $5);
  746. X        locctr += geninstr(findgen($1, ST_CONDINDIR, condsel[$3] ));
  747. X        if(((locctr -1) & PAGEBITS) != prevpage)
  748. X            fraerror("instruction crosses page boundry");
  749. X        }
  750. X    ;
  751. Xgenline : KOC_opcode  expr ',' REGISTER
  752. X        {
  753. X        genlocrec(currseg, labelloc);
  754. X        prevpage = (locctr & PAGEBITS);
  755. X        if(prevpage == locctr)
  756. X            frawarn("Page Boundary");
  757. X        evalr[1].value = $4;
  758. X        pevalexpr(2, $2);
  759. X        locctr += geninstr(findgen($1, ST_BINDEX, regsel[$4] ));
  760. X        if(((locctr -1) & PAGEBITS) != prevpage)
  761. X            fraerror("instruction crosses page boundry");
  762. X        }
  763. X    ;
  764. Xgenline : KOC_opcode  '*' expr ',' REGISTER
  765. X        {
  766. X        genlocrec(currseg, labelloc);
  767. X        prevpage = (locctr & PAGEBITS);
  768. X        if(prevpage == locctr)
  769. X            frawarn("Page Boundary");
  770. X        evalr[1].value = $5;
  771. X        pevalexpr(2, $3);
  772. X        locctr += geninstr(findgen($1, ST_BINDIRX, regsel[$5] ));
  773. X        if(((locctr -1) & PAGEBITS) != prevpage)
  774. X            fraerror("instruction crosses page boundry");
  775. X        }
  776. X    ;
  777. Xgenline : KOC_indexabs  ',' REGISTER  expr
  778. X        {
  779. X        genlocrec(currseg, labelloc);
  780. X        prevpage = (locctr & PAGEBITS);
  781. X        if(prevpage == locctr)
  782. X            frawarn("Page Boundary");
  783. X        evalr[1].value = $3;
  784. X        pevalexpr(2, $4);
  785. X        evalr[3].value = API_ABS;
  786. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$3] ));
  787. X        if(((locctr -1) & PAGEBITS) != prevpage)
  788. X            fraerror("instruction crosses page boundry");
  789. X        }
  790. X    ;
  791. Xgenline : KOC_indexabs  ',' REGISTER expr ',' REGISTER
  792. X        {
  793. X        genlocrec(currseg, labelloc);
  794. X        prevpage = (locctr & PAGEBITS);
  795. X        if(prevpage == locctr)
  796. X            frawarn("Page Boundary");
  797. X        if($3 != 0)
  798. X            fraerror("destination register must be R0");
  799. X        evalr[1].value = $6;
  800. X        pevalexpr(2, $4);
  801. X        evalr[3].value = API_IND;
  802. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$6] ));
  803. X        if(((locctr -1) & PAGEBITS) != prevpage)
  804. X            fraerror("instruction crosses page boundry");
  805. X        }
  806. X    ;
  807. Xgenline : KOC_indexabs  ',' REGISTER expr ',' REGISTER ',' '+'
  808. X        {
  809. X        genlocrec(currseg, labelloc);
  810. X        prevpage = (locctr & PAGEBITS);
  811. X        if(prevpage == locctr)
  812. X            frawarn("Page Boundary");
  813. X        if($3 != 0)
  814. X            fraerror("destination register must be R0");
  815. X        evalr[1].value = $6;
  816. X        pevalexpr(2, $4);
  817. X        evalr[3].value = API_INC;
  818. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$6] ));
  819. X        if(((locctr -1) & PAGEBITS) != prevpage)
  820. X            fraerror("instruction crosses page boundry");
  821. X        }
  822. X    ;
  823. Xgenline : KOC_indexabs  ',' REGISTER expr ',' REGISTER ',' '-' 
  824. X        {
  825. X        genlocrec(currseg, labelloc);
  826. X        prevpage = (locctr & PAGEBITS);
  827. X        if(prevpage == locctr)
  828. X            frawarn("Page Boundary");
  829. X        if($3 != 0)
  830. X            fraerror("destination register must be R0");
  831. X        evalr[1].value = $6;
  832. X        pevalexpr(2, $4);
  833. X        evalr[3].value = API_DEC;
  834. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$6] ));
  835. X        if(((locctr -1) & PAGEBITS) != prevpage)
  836. X            fraerror("instruction crosses page boundry");
  837. X        }
  838. X    ;
  839. Xgenline : KOC_indexabs  ',' REGISTER '*' expr 
  840. X        {
  841. X        genlocrec(currseg, labelloc);
  842. X        prevpage = (locctr & PAGEBITS);
  843. X        if(prevpage == locctr)
  844. X            frawarn("Page Boundary");
  845. X        evalr[1].value = $3;
  846. X        pevalexpr(2, $5);
  847. X        evalr[3].value = API_IABS;
  848. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$3] ));
  849. X        if(((locctr -1) & PAGEBITS) != prevpage)
  850. X            fraerror("instruction crosses page boundry");
  851. X        }
  852. X    ;
  853. Xgenline : KOC_indexabs  ',' REGISTER '*' expr ',' REGISTER
  854. X        {
  855. X        genlocrec(currseg, labelloc);
  856. X        prevpage = (locctr & PAGEBITS);
  857. X        if(prevpage == locctr)
  858. X            frawarn("Page Boundary");
  859. X        if($3 != 0)
  860. X            fraerror("destination register must be R0");
  861. X        evalr[1].value = $7;
  862. X        pevalexpr(2, $5);
  863. X        evalr[3].value = API_IIND;
  864. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$7] ));
  865. X        if(((locctr -1) & PAGEBITS) != prevpage)
  866. X            fraerror("instruction crosses page boundry");
  867. X        }
  868. X    ;
  869. Xgenline : KOC_indexabs  ',' REGISTER '*' expr ',' REGISTER ',' '+' 
  870. X        {
  871. X        genlocrec(currseg, labelloc);
  872. X        prevpage = (locctr & PAGEBITS);
  873. X        if(prevpage == locctr)
  874. X            frawarn("Page Boundary");
  875. X        if($3 != 0)
  876. X            fraerror("destination register must be R0");
  877. X        evalr[1].value = $7;
  878. X        pevalexpr(2, $5);
  879. X        evalr[3].value = API_IINC;
  880. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$7] ));
  881. X        if(((locctr -1) & PAGEBITS) != prevpage)
  882. X            fraerror("instruction crosses page boundry");
  883. X        }
  884. X    ;
  885. Xgenline : KOC_indexabs  ',' REGISTER '*' expr ',' REGISTER ',' '-' 
  886. X        {
  887. X        genlocrec(currseg, labelloc);
  888. X        prevpage = (locctr & PAGEBITS);
  889. X        if(prevpage == locctr)
  890. X            frawarn("Page Boundary");
  891. X        if($3 != 0)
  892. X            fraerror("destination register must be R0");
  893. X        evalr[1].value = $7;
  894. X        pevalexpr(2, $5);
  895. X        evalr[3].value = API_IDEC;
  896. X        locctr += geninstr(findgen($1, ST_ABSOLUTE, regsel[$7] ));
  897. X        if(((locctr -1) & PAGEBITS) != prevpage)
  898. X            fraerror("instruction crosses page boundry");
  899. X        }
  900. X    ;
  901. Xexpr    :    '+' expr %prec KEOP_MUN
  902. X            {
  903. X                $$ = $2;
  904. X            }
  905. X    |    '-' expr %prec KEOP_MUN
  906. X            {
  907. X                $$ = exprnode(PCCASE_UN,$2,IFC_NEG,0,0L,
  908. X                    SYMNULL);
  909. X            }
  910. X    |    KEOP_NOT expr
  911. X            {
  912. X                $$ = exprnode(PCCASE_UN,$2,IFC_NOT,0,0L,
  913. X                    SYMNULL);
  914. X            }
  915. X    |    KEOP_HIGH expr
  916. X            {
  917. X                $$ = exprnode(PCCASE_UN,$2,IFC_HIGH,0,0L,
  918. X                    SYMNULL);
  919. X            }
  920. X    |    KEOP_LOW expr
  921. X            {
  922. X                $$ = exprnode(PCCASE_UN,$2,IFC_LOW,0,0L,
  923. X                    SYMNULL);
  924. X            }
  925. X    |    expr '*' expr
  926. X            {
  927. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MUL,$3,0L,
  928. X                    SYMNULL);
  929. X            }
  930. X    |    expr '/' expr
  931. X            {
  932. X                $$ = exprnode(PCCASE_BIN,$1,IFC_DIV,$3,0L,
  933. X                    SYMNULL);
  934. X            }
  935. X    |    expr '+' expr
  936. X            {
  937. X                $$ = exprnode(PCCASE_BIN,$1,IFC_ADD,$3,0L,
  938. X                    SYMNULL);
  939. X            }
  940. X    |    expr '-' expr
  941. X            {
  942. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SUB,$3,0L,
  943. X                    SYMNULL);
  944. X            }
  945. X    |    expr KEOP_MOD expr
  946. X            {
  947. X                $$ = exprnode(PCCASE_BIN,$1,IFC_MOD,$3,0L,
  948. X                    SYMNULL);
  949. X            }
  950. X    |    expr KEOP_SHL expr
  951. X            {
  952. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHL,$3,0L,
  953. X                    SYMNULL);
  954. X            }
  955. X    |    expr KEOP_SHR expr
  956. X            {
  957. X                $$ = exprnode(PCCASE_BIN,$1,IFC_SHR,$3,0L,
  958. X                    SYMNULL);
  959. X            }
  960. X    |    expr KEOP_GT expr
  961. X            {
  962. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GT,$3,0L,
  963. X                    SYMNULL);
  964. X            }
  965. X    |    expr KEOP_GE expr
  966. X            {
  967. X                $$ = exprnode(PCCASE_BIN,$1,IFC_GE,$3,0L,
  968. X                    SYMNULL);
  969. X            }
  970. X    |    expr KEOP_LT expr
  971. X            {
  972. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LT,$3,0L,
  973. X                    SYMNULL);
  974. X            }
  975. X    |    expr KEOP_LE expr
  976. X            {
  977. X                $$ = exprnode(PCCASE_BIN,$1,IFC_LE,$3,0L,
  978. X                    SYMNULL);
  979. X            }
  980. X    |    expr KEOP_NE expr
  981. X            {
  982. X                $$ = exprnode(PCCASE_BIN,$1,IFC_NE,$3,0L,
  983. X                    SYMNULL);
  984. X            }
  985. X    |    expr KEOP_EQ expr
  986. X            {
  987. X                $$ = exprnode(PCCASE_BIN,$1,IFC_EQ,$3,0L,
  988. X                    SYMNULL);
  989. X            }
  990. X    |    expr KEOP_AND expr
  991. X            {
  992. X                $$ = exprnode(PCCASE_BIN,$1,IFC_AND,$3,0L,
  993. X                    SYMNULL);
  994. X            }
  995. X    |    expr KEOP_OR expr
  996. X            {
  997. X                $$ = exprnode(PCCASE_BIN,$1,IFC_OR,$3,0L,
  998. X                    SYMNULL);
  999. X            }
  1000. X    |    expr KEOP_XOR expr
  1001. X            {
  1002. X                $$ = exprnode(PCCASE_BIN,$1,IFC_XOR,$3,0L,
  1003. X                    SYMNULL);
  1004. X            }
  1005. X    |    KEOP_DEFINED SYMBOL
  1006. X            {
  1007. X                $$ = exprnode(PCCASE_DEF,0,IGP_DEFINED,0,0L,$2);
  1008. X            }
  1009. X    |    SYMBOL
  1010. X            {
  1011. X                $$ = exprnode(PCCASE_SYMB,0,IFC_SYMB,0,0L,$1);
  1012. X            }
  1013. X    |    '$'
  1014. X            {
  1015. X                $$ = exprnode(PCCASE_PROGC,0,IFC_PROGCTR,0,
  1016. X                    labelloc, SYMNULL);
  1017. X            }
  1018. X    |    CONSTANT
  1019. X            {
  1020. X                $$ = exprnode(PCCASE_CONS,0,IGP_CONSTANT,0,$1,
  1021. X                    SYMNULL);
  1022. X            }
  1023. X    |    STRING
  1024. X            {
  1025. X                char *sourcestr = $1;
  1026. X                long accval = 0;
  1027. X
  1028. X                if(strlen($1) > 0)
  1029. X                {
  1030. X                    accval = chtran(&sourcestr);
  1031. X                    if(*sourcestr != '\0')
  1032. X                    {
  1033. X                        accval = (accval << 8) +
  1034. X                            chtran(&sourcestr);
  1035. X                    }
  1036. X
  1037. X                    if( *sourcestr != '\0')
  1038. X                    {
  1039. X    frawarn("string constant in expression more than 2 characters long");
  1040. X                    }
  1041. X                }
  1042. X                $$ = exprnode(PCCASE_CONS, 0, IGP_CONSTANT, 0,
  1043. X                    accval, SYMNULL);
  1044. X            }
  1045. X    |    '(' expr ')'
  1046. X            {
  1047. X                $$ = $2;
  1048. X            }
  1049. X    ;
  1050. X
  1051. X
  1052. X
  1053. X%%
  1054. X
  1055. Xlexintercept()
  1056. X/*
  1057. X    description    intercept the call to yylex (the lexical analyzer)
  1058. X            and filter out all unnecessary tokens when skipping
  1059. X            the input between a failed IF and its matching ENDI or
  1060. X            ELSE
  1061. X    globals     fraifskip    the enable flag
  1062. X*/
  1063. X{
  1064. X#undef yylex
  1065. X
  1066. X    int rv;
  1067. X
  1068. X    if(fraifskip)
  1069. X    {
  1070. X        for(;;)
  1071. X        {
  1072. X
  1073. X            switch(rv = yylex())
  1074. X
  1075. X            {
  1076. X            case 0:
  1077. X            case KOC_END:
  1078. X            case KOC_IF:
  1079. X            case KOC_ELSE:
  1080. X            case KOC_ENDI:
  1081. X            case EOL:
  1082. X                return rv;
  1083. X            default:
  1084. X                break;
  1085. X            }
  1086. X        }
  1087. X    }
  1088. X    else
  1089. X        return yylex();
  1090. X#define yylex lexintercept
  1091. X}
  1092. X
  1093. X
  1094. X
  1095. Xsetreserved()
  1096. X{
  1097. X
  1098. X    reservedsym("and", KEOP_AND, 0);
  1099. X    reservedsym("defined", KEOP_DEFINED,0);
  1100. X    reservedsym("ge", KEOP_GE, 0);
  1101. X    reservedsym("high", KEOP_HIGH, 0);
  1102. X    reservedsym("le", KEOP_LE, 0);
  1103. X    reservedsym("low", KEOP_LOW, 0);
  1104. X    reservedsym("mod", KEOP_MOD, 0);
  1105. X    reservedsym("ne", KEOP_NE, 0);
  1106. X    reservedsym("not", KEOP_NOT, 0);
  1107. X    reservedsym("or", KEOP_OR, 0);
  1108. X    reservedsym("shl", KEOP_SHL, 0);
  1109. X    reservedsym("shr", KEOP_SHR, 0);
  1110. X    reservedsym("xor", KEOP_XOR, 0);
  1111. X    reservedsym("AND", KEOP_AND, 0);
  1112. X    reservedsym("DEFINED", KEOP_DEFINED,0);
  1113. X    reservedsym("GE", KEOP_GE, 0);
  1114. X    reservedsym("HIGH", KEOP_HIGH, 0);
  1115. X    reservedsym("LE", KEOP_LE, 0);
  1116. X    reservedsym("LOW", KEOP_LOW, 0);
  1117. X    reservedsym("MOD", KEOP_MOD, 0);
  1118. X    reservedsym("NE", KEOP_NE, 0);
  1119. X    reservedsym("NOT", KEOP_NOT, 0);
  1120. X    reservedsym("OR", KEOP_OR, 0);
  1121. X    reservedsym("SHL", KEOP_SHL, 0);
  1122. X    reservedsym("SHR", KEOP_SHR, 0);
  1123. X    reservedsym("XOR", KEOP_XOR, 0);
  1124. X
  1125. X    /* machine specific token definitions */
  1126. X    reservedsym("r0", REGISTER, 0);
  1127. X    reservedsym("r1", REGISTER, 1);
  1128. X    reservedsym("r2", REGISTER, 2);
  1129. X    reservedsym("r3", REGISTER, 3);
  1130. X    reservedsym("R0", REGISTER, 0);
  1131. X    reservedsym("R1", REGISTER, 1);
  1132. X    reservedsym("R2", REGISTER, 2);
  1133. X    reservedsym("R3", REGISTER, 3);
  1134. X    reservedsym("PLUS", CONDITION, 1);
  1135. X    reservedsym("ZERO", CONDITION, 0); 
  1136. X    reservedsym("MINUS", CONDITION, 2);
  1137. X    reservedsym("GT", CONDITION, 1);
  1138. X    reservedsym("EQ", CONDITION, 0); 
  1139. X    reservedsym("LT", CONDITION, 2);
  1140. X    reservedsym("UN", CONDITION, 3);
  1141. X    reservedsym("ALWAYS", CONDITION, 3);
  1142. X    reservedsym("plus", CONDITION, 1);
  1143. X    reservedsym("zero", CONDITION, 0); 
  1144. X    reservedsym("minus", CONDITION, 2);
  1145. X    reservedsym("gt", CONDITION, 1);
  1146. X    reservedsym("eq", CONDITION, 0); 
  1147. X    reservedsym("lt", CONDITION, 2);
  1148. X    reservedsym("un", CONDITION, 3);
  1149. X    reservedsym("always", CONDITION, 3);
  1150. X
  1151. X}
  1152. X
  1153. Xcpumatch(str)
  1154. X    char *str;
  1155. X{
  1156. X    return TRUE;
  1157. X}
  1158. X
  1159. X
  1160. X/*
  1161. X    description    Opcode and Instruction generation tables
  1162. X    usage        Unix, framework crossassembler
  1163. X    history        September 25, 1987
  1164. X*/
  1165. X
  1166. X#define NUMOPCODE 102
  1167. X#define NUMSYNBLK 105
  1168. X#define NUMDIFFOP 128
  1169. X
  1170. Xint gnumopcode = NUMOPCODE;
  1171. X
  1172. Xint ophashlnk[NUMOPCODE];
  1173. X
  1174. Xstruct opsym optab[NUMOPCODE+1]
  1175. X    = {
  1176. X    {"invalid", KOC_opcode, 2, 0 },
  1177. X    {"ACON", KOC_ACON, 0, 0 },
  1178. X    {"ADDA", KOC_indexabs, 1, 2 },
  1179. X    {"ADDI", KOC_opcode, 1, 3 },
  1180. X    {"ADDR", KOC_opcode, 2, 4 },
  1181. X    {"ADDZ", KOC_opcode, 1, 6 },
  1182. X    {"ANDA", KOC_indexabs, 1, 7 },
  1183. X    {"ANDI", KOC_opcode, 1, 8 },
  1184. X    {"ANDR", KOC_opcode, 2, 9 },
  1185. X    {"ANDZ", KOC_opcode, 1, 11 },
  1186. X    {"BCFA", KOC_opcode, 2, 12 },
  1187. X    {"BCFR", KOC_opcode, 2, 14 },
  1188. X    {"BCTA", KOC_opcode, 2, 16 },
  1189. X    {"BCTR", KOC_opcode, 2, 18 },
  1190. X    {"BDRA", KOC_opcode, 2, 20 },
  1191. X    {"BDRR", KOC_opcode, 2, 22 },
  1192. X    {"BIRA", KOC_opcode, 2, 24 },
  1193. X    {"BIRR", KOC_opcode, 2, 26 },
  1194. X    {"BRNA", KOC_opcode, 2, 28 },
  1195. X    {"BRNR", KOC_opcode, 2, 30 },
  1196. X    {"BSFA", KOC_opcode, 2, 32 },
  1197. X    {"BSFR", KOC_opcode, 2, 34 },
  1198. X    {"BSNA", KOC_opcode, 2, 36 },
  1199. X    {"BSNR", KOC_opcode, 2, 38 },
  1200. X    {"BSTA", KOC_opcode, 2, 40 },
  1201. X    {"BSTR", KOC_opcode, 2, 42 },
  1202. X    {"BSXA", KOC_opcode, 2, 44 },
  1203. X    {"BXA", KOC_opcode, 2, 46 },
  1204. X    {"BYTE", KOC_BDEF, 0, 0 },
  1205. X    {"CHARDEF", KOC_CHDEF, 0, 0 },
  1206. X    {"CHARSET", KOC_CHSET, 0, 0 },
  1207. X    {"CHARUSE", KOC_CHUSE, 0, 0 },
  1208. X    {"CHD", KOC_CHDEF, 0, 0 },
  1209. X    {"COMA", KOC_indexabs, 1, 48 },
  1210. X    {"COMI", KOC_opcode, 1, 49 },
  1211. X    {"COMR", KOC_opcode, 2, 50 },
  1212. X    {"COMZ", KOC_opcode, 1, 52 },
  1213. X    {"CPSL", KOC_opcode, 1, 53 },
  1214. X    {"CPSU", KOC_opcode, 1, 54 },
  1215. X    {"DAR", KOC_opcode, 1, 55 },
  1216. X    {"DATA", KOC_BDEF, 0, 0 },
  1217. X    {"DB", KOC_BDEF, 0, 0 },
  1218. X    {"DW", KOC_WDEF, 0, 0 },
  1219. X    {"ELSE", KOC_ELSE, 0, 0 },
  1220. X    {"END", KOC_END, 0, 0 },
  1221. X    {"ENDI", KOC_ENDI, 0, 0 },
  1222. X    {"EORA", KOC_indexabs, 1, 56 },
  1223. X    {"EORI", KOC_opcode, 1, 57 },
  1224. X    {"EORR", KOC_opcode, 2, 58 },
  1225. X    {"EORZ", KOC_opcode, 1, 60 },
  1226. X    {"EQU", KOC_EQU, 0, 0 },
  1227. X    {"FCB", KOC_BDEF, 0, 0 },
  1228. X    {"FCC", KOC_SDEF, 0, 0 },
  1229. X    {"FDB", KOC_WDEF, 0, 0 },
  1230. X    {"HALT", KOC_opcode, 1, 61 },
  1231. X    {"IF", KOC_IF, 0, 0 },
  1232. X    {"INCL", KOC_INCLUDE, 0, 0 },
  1233. X    {"INCLUDE", KOC_INCLUDE, 0, 0 },
  1234. X    {"IORA", KOC_indexabs, 1, 62 },
  1235. X    {"IORI", KOC_opcode, 1, 63 },
  1236. X    {"IORR", KOC_opcode, 2, 64 },
  1237. X    {"IORZ", KOC_opcode, 1, 66 },
  1238. X    {"LODA", KOC_indexabs, 1, 67 },
  1239. X    {"LODI", KOC_opcode, 1, 68 },
  1240. X    {"LODR", KOC_opcode, 2, 69 },
  1241. X    {"LODZ", KOC_opcode, 1, 71 },
  1242. X    {"LPSL", KOC_opcode, 1, 72 },
  1243. X    {"LPSU", KOC_opcode, 1, 73 },
  1244. X    {"NOP", KOC_opcode, 1, 74 },
  1245. X    {"ORG", KOC_ORG, 0, 0 },
  1246. X    {"PPSL", KOC_opcode, 1, 75 },
  1247. X    {"PPSU", KOC_opcode, 1, 76 },
  1248. X    {"REDC", KOC_opcode, 1, 77 },
  1249. X    {"REDD", KOC_opcode, 1, 78 },
  1250. X    {"REDE", KOC_opcode, 1, 79 },
  1251. X    {"RES", KOC_RESM, 0, 0 },
  1252. X    {"RESERVE", KOC_RESM, 0, 0 },
  1253. X    {"RETC", KOC_opcode, 1, 80 },
  1254. X    {"RETE", KOC_opcode, 1, 81 },
  1255. X    {"RMB", KOC_RESM, 0, 0 },
  1256. X    {"RRL", KOC_opcode, 1, 82 },
  1257. X    {"RRR", KOC_opcode, 1, 83 },
  1258. X    {"SET", KOC_SET, 0, 0 },
  1259. X    {"SPSL", KOC_opcode, 1, 84 },
  1260. X    {"SPSU", KOC_opcode, 1, 85 },
  1261. X    {"STRA", KOC_indexabs, 1, 86 },
  1262. X    {"STRING", KOC_SDEF, 0, 0 },
  1263. X    {"STRR", KOC_opcode, 2, 87 },
  1264. X    {"STRZ", KOC_opcode, 1, 89 },
  1265. X    {"SUBA", KOC_indexabs, 1, 90 },
  1266. X    {"SUBI", KOC_opcode, 1, 91 },
  1267. X    {"SUBR", KOC_opcode, 2, 92 },
  1268. X    {"SUBZ", KOC_opcode, 1, 94 },
  1269. X    {"TMI", KOC_opcode, 1, 95 },
  1270. X    {"TPSL", KOC_opcode, 1, 96 },
  1271. X    {"TPSU", KOC_opcode, 1, 97 },
  1272. X    {"WORD", KOC_WDEF, 0, 0 },
  1273. X    {"WRTC", KOC_opcode, 1, 98 },
  1274. X    {"WRTD", KOC_opcode, 1, 99 },
  1275. X    {"WRTE", KOC_opcode, 1, 100 },
  1276. X    {"ZBRR", KOC_opcode, 2, 101 },
  1277. X    {"ZBSR", KOC_opcode, 2, 103 },
  1278. X    { "", 0, 0, 0 }};
  1279. X
  1280. Xstruct opsynt ostab[NUMSYNBLK+1]
  1281. X    = {
  1282. X/* invalid 0 */ { 0, 1, 0 },
  1283. X/* invalid 1 */ { 0xffff, 1, 1 },
  1284. X/* ADDA 2 */ { ST_ABSOLUTE, 1, 2 },
  1285. X/* ADDI 3 */ { ST_REGEXP, 1, 3 },
  1286. X/* ADDR 4 */ { ST_REGEXP, 1, 4 },
  1287. X/* ADDR 5 */ { ST_REGINDIR, 1, 5 },
  1288. X/* ADDZ 6 */ { ST_REG, 1, 6 },
  1289. X/* ANDA 7 */ { ST_ABSOLUTE, 1, 7 },
  1290. X/* ANDI 8 */ { ST_REGEXP, 1, 8 },
  1291. X/* ANDR 9 */ { ST_REGEXP, 1, 9 },
  1292. X/* ANDR 10 */ { ST_REGINDIR, 1, 10 },
  1293. X/* ANDZ 11 */ { ST_REG, 3, 11 },
  1294. X/* BCFA 12 */ { ST_CONDEXP, 3, 14 },
  1295. X/* BCFA 13 */ { ST_CONDINDIR, 3, 17 },
  1296. X/* BCFR 14 */ { ST_CONDEXP, 3, 20 },
  1297. X/* BCFR 15 */ { ST_CONDINDIR, 3, 23 },
  1298. X/* BCTA 16 */ { ST_CONDEXP, 1, 26 },
  1299. X/* BCTA 17 */ { ST_CONDINDIR, 1, 27 },
  1300. X/* BCTR 18 */ { ST_CONDEXP, 1, 28 },
  1301. X/* BCTR 19 */ { ST_CONDINDIR, 1, 29 },
  1302. X/* BDRA 20 */ { ST_REGEXP, 1, 30 },
  1303. X/* BDRA 21 */ { ST_REGINDIR, 1, 31 },
  1304. X/* BDRR 22 */ { ST_REGEXP, 1, 32 },
  1305. X/* BDRR 23 */ { ST_REGINDIR, 1, 33 },
  1306. X/* BIRA 24 */ { ST_REGEXP, 1, 34 },
  1307. X/* BIRA 25 */ { ST_REGINDIR, 1, 35 },
  1308. X/* BIRR 26 */ { ST_REGEXP, 1, 36 },
  1309. X/* BIRR 27 */ { ST_REGINDIR, 1, 37 },
  1310. X/* BRNA 28 */ { ST_REGEXP, 1, 38 },
  1311. X/* BRNA 29 */ { ST_REGINDIR, 1, 39 },
  1312. X/* BRNR 30 */ { ST_REGEXP, 1, 40 },
  1313. X/* BRNR 31 */ { ST_REGINDIR, 1, 41 },
  1314. X/* BSFA 32 */ { ST_CONDEXP, 3, 42 },
  1315. X/* BSFA 33 */ { ST_CONDINDIR, 3, 45 },
  1316. X/* BSFR 34 */ { ST_CONDEXP, 3, 48 },
  1317. X/* BSFR 35 */ { ST_CONDINDIR, 3, 51 },
  1318. X/* BSNA 36 */ { ST_REGEXP, 1, 54 },
  1319. X/* BSNA 37 */ { ST_REGINDIR, 1, 55 },
  1320. X/* BSNR 38 */ { ST_REGEXP, 1, 56 },
  1321. X/* BSNR 39 */ { ST_REGINDIR, 1, 57 },
  1322. X/* BSTA 40 */ { ST_CONDEXP, 1, 58 },
  1323. X/* BSTA 41 */ { ST_CONDINDIR, 1, 59 },
  1324. X/* BSTR 42 */ { ST_CONDEXP, 1, 60 },
  1325. X/* BSTR 43 */ { ST_CONDINDIR, 1, 61 },
  1326. X/* BSXA 44 */ { ST_BINDEX, 1, 62 },
  1327. X/* BSXA 45 */ { ST_BINDIRX, 1, 63 },
  1328. X/* BXA 46 */ { ST_BINDEX, 1, 64 },
  1329. X/* BXA 47 */ { ST_BINDIRX, 1, 65 },
  1330. X/* COMA 48 */ { ST_ABSOLUTE, 1, 66 },
  1331. X/* COMI 49 */ { ST_REGEXP, 1, 67 },
  1332. X/* COMR 50 */ { ST_REGEXP, 1, 68 },
  1333. X/* COMR 51 */ { ST_REGINDIR, 1, 69 },
  1334. X/* COMZ 52 */ { ST_REG, 1, 70 },
  1335. X/* CPSL 53 */ { ST_EXP, 1, 71 },
  1336. X/* CPSU 54 */ { ST_EXP, 1, 72 },
  1337. X/* DAR 55 */ { ST_REGCOMMA, 1, 73 },
  1338. X/* EORA 56 */ { ST_ABSOLUTE, 1, 74 },
  1339. X/* EORI 57 */ { ST_REGEXP, 1, 75 },
  1340. X/* EORR 58 */ { ST_REGEXP, 1, 76 },
  1341. X/* EORR 59 */ { ST_REGINDIR, 1, 77 },
  1342. X/* EORZ 60 */ { ST_REG, 1, 78 },
  1343. X/* HALT 61 */ { ST_INH, 1, 79 },
  1344. X/* IORA 62 */ { ST_ABSOLUTE, 1, 80 },
  1345. X/* IORI 63 */ { ST_REGEXP, 1, 81 },
  1346. X/* IORR 64 */ { ST_REGEXP, 1, 82 },
  1347. X/* IORR 65 */ { ST_REGINDIR, 1, 83 },
  1348. X/* IORZ 66 */ { ST_REG, 1, 84 },
  1349. X/* LODA 67 */ { ST_ABSOLUTE, 1, 85 },
  1350. X/* LODI 68 */ { ST_REGEXP, 1, 86 },
  1351. X/* LODR 69 */ { ST_REGEXP, 1, 87 },
  1352. X/* LODR 70 */ { ST_REGINDIR, 1, 88 },
  1353. X/* LODZ 71 */ { ST_REG, 4, 89 },
  1354. X/* LPSL 72 */ { ST_INH, 1, 93 },
  1355. X/* LPSU 73 */ { ST_INH, 1, 94 },
  1356. X/* NOP 74 */ { ST_INH, 1, 95 },
  1357. X/* PPSL 75 */ { ST_EXP, 1, 96 },
  1358. X/* PPSU 76 */ { ST_EXP, 1, 97 },
  1359. X/* REDC 77 */ { ST_REGCOMMA, 1, 98 },
  1360. X/* REDD 78 */ { ST_REGCOMMA, 1, 99 },
  1361. X/* REDE 79 */ { ST_REGEXP, 1, 100 },
  1362. X/* RETC 80 */ { ST_COND, 1, 101 },
  1363. X/* RETE 81 */ { ST_COND, 1, 102 },
  1364. X/* RRL 82 */ { ST_REGCOMMA, 1, 103 },
  1365. X/* RRR 83 */ { ST_REGCOMMA, 1, 104 },
  1366. X/* SPSL 84 */ { ST_INH, 1, 105 },
  1367. X/* SPSU 85 */ { ST_INH, 1, 106 },
  1368. X/* STRA 86 */ { ST_ABSOLUTE, 1, 107 },
  1369. X/* STRR 87 */ { ST_REGEXP, 1, 108 },
  1370. X/* STRR 88 */ { ST_REGINDIR, 1, 109 },
  1371. X/* STRZ 89 */ { ST_REG, 3, 110 },
  1372. X/* SUBA 90 */ { ST_ABSOLUTE, 1, 113 },
  1373. X/* SUBI 91 */ { ST_REGEXP, 1, 114 },
  1374. X/* SUBR 92 */ { ST_REGEXP, 1, 115 },
  1375. X/* SUBR 93 */ { ST_REGINDIR, 1, 116 },
  1376. X/* SUBZ 94 */ { ST_REG, 1, 117 },
  1377. X/* TMI 95 */ { ST_REGEXP, 1, 118 },
  1378. X/* TPSL 96 */ { ST_EXP, 1, 119 },
  1379. X/* TPSU 97 */ { ST_EXP, 1, 120 },
  1380. X/* WRTC 98 */ { ST_REGCOMMA, 1, 121 },
  1381. X/* WRTD 99 */ { ST_REGCOMMA, 1, 122 },
  1382. X/* WRTE 100 */ { ST_REGEXP, 1, 123 },
  1383. X/* ZBRR 101 */ { ST_EXP, 1, 124 },
  1384. X/* ZBRR 102 */ { ST_INDIR, 1, 125 },
  1385. X/* ZBSR 103 */ { ST_EXP, 1, 126 },
  1386. X/* ZBSR 104 */ { ST_INDIR, 1, 127 },
  1387. X    { 0, 0, 0 } };
  1388. X
  1389. Xstruct igel igtab[NUMDIFFOP+1]
  1390. X    = {
  1391. X/* invalid 0 */   { 0 , 0, 
  1392. X        "[Xnullentry" },
  1393. X/* invalid 1 */   { 0 , 0, 
  1394. X        "[Xinvalid opcode" },
  1395. X/* ADDA 2 */   { 0 , 0, 
  1396. X        "8c.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1397. X/* ADDI 3 */   { 0 , 0, 
  1398. X        "84.[1#]|;[2=];" },
  1399. X/* ADDR 4 */   { 0 , 0, 
  1400. X        "88.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1401. X/* ADDR 5 */   { 0 , 0, 
  1402. X        "88.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1403. X/* ADDZ 6 */   { 0 , 0, 
  1404. X        "80.[1#]|;" },
  1405. X/* ANDA 7 */   { 0 , 0, 
  1406. X        "4c.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1407. X/* ANDI 8 */   { 0 , 0, 
  1408. X        "44.[1#]|;[2=];" },
  1409. X/* ANDR 9 */   { 0 , 0, 
  1410. X        "48.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1411. X/* ANDR 10 */   { 0 , 0, 
  1412. X        "48.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1413. X/* ANDZ 11 */   { REGMASK , REG1, 
  1414. X        "41;" },
  1415. X/* ANDZ 12 */   { REGMASK , REG2, 
  1416. X        "42;" },
  1417. X/* ANDZ 13 */   { REGMASK , REG3, 
  1418. X        "43;" },
  1419. X/* BCFA 14 */   { CONDMASK , COND0, 
  1420. X        "9c.[1#]|;[2=].fIx" },
  1421. X/* BCFA 15 */   { CONDMASK , COND1, 
  1422. X        "9c.[1#]|;[2=].fIx" },
  1423. X/* BCFA 16 */   { CONDMASK , COND2, 
  1424. X        "9c.[1#]|;[2=].fIx" },
  1425. X/* BCFA 17 */   { CONDMASK , COND0, 
  1426. X        "9c.[1#]|;[2=].fI.8000|x" },
  1427. X/* BCFA 18 */   { CONDMASK , COND1, 
  1428. X        "9c.[1#]|;[2=].fI.8000|x" },
  1429. X/* BCFA 19 */   { CONDMASK , COND2, 
  1430. X        "9c.[1#]|;[2=].fI.8000|x" },
  1431. X/* BCFR 20 */   { CONDMASK , COND0, 
  1432. X        "98.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1433. X/* BCFR 21 */   { CONDMASK , COND1, 
  1434. X        "98.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1435. X/* BCFR 22 */   { CONDMASK , COND2, 
  1436. X        "98.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1437. X/* BCFR 23 */   { CONDMASK , COND0, 
  1438. X        "98.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1439. X/* BCFR 24 */   { CONDMASK , COND1, 
  1440. X        "98.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1441. X/* BCFR 25 */   { CONDMASK , COND2, 
  1442. X        "98.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1443. X/* BCTA 26 */   { 0 , 0, 
  1444. X        "1c.[1#]|;[2=].fIx" },
  1445. X/* BCTA 27 */   { 0 , 0, 
  1446. X        "1c.[1#]|;[2=].fI.8000|x" },
  1447. X/* BCTR 28 */   { 0 , 0, 
  1448. X        "18.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1449. X/* BCTR 29 */   { 0 , 0, 
  1450. X        "18.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1451. X/* BDRA 30 */   { 0 , 0, 
  1452. X        "fc.[1#]|;[2=].fIx" },
  1453. X/* BDRA 31 */   { 0 , 0, 
  1454. X        "fc.[1#]|;[2=].fI.8000|x" },
  1455. X/* BDRR 32 */   { 0 , 0, 
  1456. X        "f8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1457. X/* BDRR 33 */   { 0 , 0, 
  1458. X        "f8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1459. X/* BIRA 34 */   { 0 , 0, 
  1460. X        "dc.[1#]|;[2=].fIx" },
  1461. X/* BIRA 35 */   { 0 , 0, 
  1462. X        "dc.[1#]|;[2=].fI.8000|x" },
  1463. X/* BIRR 36 */   { 0 , 0, 
  1464. X        "d8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1465. X/* BIRR 37 */   { 0 , 0, 
  1466. X        "d8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1467. X/* BRNA 38 */   { 0 , 0, 
  1468. X        "5c.[1#]|;[2=].fIx" },
  1469. X/* BRNA 39 */   { 0 , 0, 
  1470. X        "5c.[1#]|;[2=].fI.8000|x" },
  1471. X/* BRNR 40 */   { 0 , 0, 
  1472. X        "58.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1473. X/* BRNR 41 */   { 0 , 0, 
  1474. X        "58.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1475. X/* BSFA 42 */   { CONDMASK , COND0, 
  1476. X        "bc.[1#]|;[2=].fIx" },
  1477. X/* BSFA 43 */   { CONDMASK , COND1, 
  1478. X        "bc.[1#]|;[2=].fIx" },
  1479. X/* BSFA 44 */   { CONDMASK , COND2, 
  1480. X        "bc.[1#]|;[2=].fIx" },
  1481. X/* BSFA 45 */   { CONDMASK , COND0, 
  1482. X        "bc.[1#]|;[2=].fI.8000|x" },
  1483. X/* BSFA 46 */   { CONDMASK , COND1, 
  1484. X        "bc.[1#]|;[2=].fI.8000|x" },
  1485. X/* BSFA 47 */   { CONDMASK , COND2, 
  1486. X        "bc.[1#]|;[2=].fI.8000|x" },
  1487. X/* BSFR 48 */   { CONDMASK , COND0, 
  1488. X        "b8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1489. X/* BSFR 49 */   { CONDMASK , COND1, 
  1490. X        "b8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1491. X/* BSFR 50 */   { CONDMASK , COND2, 
  1492. X        "b8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1493. X/* BSFR 51 */   { CONDMASK , COND0, 
  1494. X        "b8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1495. X/* BSFR 52 */   { CONDMASK , COND1, 
  1496. X        "b8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1497. X/* BSFR 53 */   { CONDMASK , COND2, 
  1498. X        "b8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1499. X/* BSNA 54 */   { 0 , 0, 
  1500. X        "7c.[1#]|;[2=].fIx" },
  1501. X/* BSNA 55 */   { 0 , 0, 
  1502. X        "7c.[1#]|;[2=].fI.8000|x" },
  1503. X/* BSNR 56 */   { 0 , 0, 
  1504. X        "78.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1505. X/* BSNR 57 */   { 0 , 0, 
  1506. X        "78.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1507. X/* BSTA 58 */   { 0 , 0, 
  1508. X        "3c.[1#]|;[2=].fIx" },
  1509. X/* BSTA 59 */   { 0 , 0, 
  1510. X        "3c.[1#]|;[2=].fI.8000|x" },
  1511. X/* BSTR 60 */   { 0 , 0, 
  1512. X        "38.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1513. X/* BSTR 61 */   { 0 , 0, 
  1514. X        "38.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1515. X/* BSXA 62 */   { REGMASK , REG3, 
  1516. X        "bf;[2=].fIx" },
  1517. X/* BSXA 63 */   { REGMASK , REG3, 
  1518. X        "bf;[2=].fI.8000|x" },
  1519. X/* BXA 64 */   { REGMASK , REG3, 
  1520. X        "9f;[2=].fIx" },
  1521. X/* BXA 65 */   { REGMASK , REG3, 
  1522. X        "9f;[2=].fI.8000|x" },
  1523. X/* COMA 66 */   { 0 , 0, 
  1524. X        "ec.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1525. X/* COMI 67 */   { 0 , 0, 
  1526. X        "e4.[1#]|;[2=];" },
  1527. X/* COMR 68 */   { 0 , 0, 
  1528. X        "e8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1529. X/* COMR 69 */   { 0 , 0, 
  1530. X        "e8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1531. X/* COMZ 70 */   { 0 , 0, 
  1532. X        "e0.[1#]|;" },
  1533. X/* CPSL 71 */   { 0 , 0, 
  1534. X        "75;[1=];" },
  1535. X/* CPSU 72 */   { 0 , 0, 
  1536. X        "74;[1=];" },
  1537. X/* DAR 73 */   { 0 , 0, 
  1538. X        "94.[1#]|;" },
  1539. X/* EORA 74 */   { 0 , 0, 
  1540. X        "2c.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1541. X/* EORI 75 */   { 0 , 0, 
  1542. X        "24.[1#]|;[2=];" },
  1543. X/* EORR 76 */   { 0 , 0, 
  1544. X        "28.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1545. X/* EORR 77 */   { 0 , 0, 
  1546. X        "28.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1547. X/* EORZ 78 */   { 0 , 0, 
  1548. X        "20.[1#]|;" },
  1549. X/* HALT 79 */   { 0 , 0, 
  1550. X        "40;" },
  1551. X/* IORA 80 */   { 0 , 0, 
  1552. X        "6c.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1553. X/* IORI 81 */   { 0 , 0, 
  1554. X        "64.[1#]|;[2=];" },
  1555. X/* IORR 82 */   { 0 , 0, 
  1556. X        "68.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1557. X/* IORR 83 */   { 0 , 0, 
  1558. X        "68.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1559. X/* IORZ 84 */   { 0 , 0, 
  1560. X        "60.[1#]|;" },
  1561. X/* LODA 85 */   { 0 , 0, 
  1562. X        "0c.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1563. X/* LODI 86 */   { 0 , 0, 
  1564. X        "04.[1#]|;[2=];" },
  1565. X/* LODR 87 */   { 0 , 0, 
  1566. X        "08.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1567. X/* LODR 88 */   { 0 , 0, 
  1568. X        "08.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1569. X/* LODZ 89 */   { REGMASK , REG0, 
  1570. X        "60;" },
  1571. X/* LODZ 90 */   { REGMASK , REG1, 
  1572. X        "01;" },
  1573. X/* LODZ 91 */   { REGMASK , REG2, 
  1574. X        "02;" },
  1575. X/* LODZ 92 */   { REGMASK , REG3, 
  1576. X        "03;" },
  1577. X/* LPSL 93 */   { 0 , 0, 
  1578. X        "93;" },
  1579. X/* LPSU 94 */   { 0 , 0, 
  1580. X        "92;" },
  1581. X/* NOP 95 */   { 0 , 0, 
  1582. X        "c0;" },
  1583. X/* PPSL 96 */   { 0 , 0, 
  1584. X        "77;[1=];" },
  1585. X/* PPSU 97 */   { 0 , 0, 
  1586. X        "76;[1=];" },
  1587. X/* REDC 98 */   { 0 , 0, 
  1588. X        "30.[1#]|;" },
  1589. X/* REDD 99 */   { 0 , 0, 
  1590. X        "70.[1#]|;" },
  1591. X/* REDE 100 */   { 0 , 0, 
  1592. X        "54.[1#]|;[2=];" },
  1593. X/* RETC 101 */   { 0 , 0, 
  1594. X        "14.[1#]|;" },
  1595. X/* RETE 102 */   { 0 , 0, 
  1596. X        "34.[1#]|;" },
  1597. X/* RRL 103 */   { 0 , 0, 
  1598. X        "d0.[1#]|;" },
  1599. X/* RRR 104 */   { 0 , 0, 
  1600. X        "50.[1#]|;" },
  1601. X/* SPSL 105 */   { 0 , 0, 
  1602. X        "13;" },
  1603. X/* SPSU 106 */   { 0 , 0, 
  1604. X        "12;" },
  1605. X/* STRA 107 */   { 0 , 0, 
  1606. X        "cc.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1607. X/* STRR 108 */   { 0 , 0, 
  1608. X        "c8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1609. X/* STRR 109 */   { 0 , 0, 
  1610. X        "c8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1611. X/* STRZ 110 */   { REGMASK , REG1, 
  1612. X        "c1;" },
  1613. X/* STRZ 111 */   { REGMASK , REG2, 
  1614. X        "c2;" },
  1615. X/* STRZ 112 */   { REGMASK , REG3, 
  1616. X        "c3;" },
  1617. X/* SUBA 113 */   { 0 , 0, 
  1618. X        "ac.[1#]|;[2=].P.6000&-.dI.[3#]000|x" },
  1619. X/* SUBI 114 */   { 0 , 0, 
  1620. X        "a4.[1#]|;[2=];" },
  1621. X/* SUBR 115 */   { 0 , 0, 
  1622. X        "a8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R;" },
  1623. X/* SUBR 116 */   { 0 , 0, 
  1624. X        "a8.[1#]|;[2=]~.P.6000&-.dIQ.1+-.7R.80|;" },
  1625. X/* SUBZ 117 */   { 0 , 0, 
  1626. X        "a0.[1#]|;" },
  1627. X/* TMI 118 */   { 0 , 0, 
  1628. X        "f4.[1#]|;[2=];" },
  1629. X/* TPSL 119 */   { 0 , 0, 
  1630. X        "b5;[1=];" },
  1631. X/* TPSU 120 */   { 0 , 0, 
  1632. X        "b4;[1=];" },
  1633. X/* WRTC 121 */   { 0 , 0, 
  1634. X        "b0.[1#]|;" },
  1635. X/* WRTD 122 */   { 0 , 0, 
  1636. X        "f0.[1#]|;" },
  1637. X/* WRTE 123 */   { 0 , 0, 
  1638. X        "d4.[1#]|;[2=];" },
  1639. X/* ZBRR 124 */   { 0 , 0, 
  1640. X        "9b;[1=].dI~.fff>.2000_*|.7R;" },
  1641. X/* ZBRR 125 */   { 0 , 0, 
  1642. X        "9b;[1=].dI~.fff>.2000_*|.7R.80|;" },
  1643. X/* ZBSR 126 */   { 0 , 0, 
  1644. X        "bb;[1=].dI~.fff>.2000_*|.7R;" },
  1645. X/* ZBSR 127 */   { 0 , 0, 
  1646. X        "bb;[1=].dI~.fff>.2000_*|.7R.80|;" },
  1647. X    { 0,0,""} };
  1648. X/* end fraptabdef.c */
  1649. SHAR_EOF
  1650. true || echo 'restore of as2650.y failed'
  1651. fi
  1652. exit 0
  1653.