home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 363_01 / insttabl.c < prev    next >
C/C++ Source or Header  |  1991-12-17  |  36KB  |  1,080 lines

  1. /***********************************************************************
  2.  *
  3.  *      INSTTABLE.C
  4.  *      Instruction Table for 68020 Assembler
  5.  *
  6.  * Description: This file contains two kinds of data structure declarations: 
  7.  *      "variant lists" and the instruction table. First in the file are 
  8.  *      "variant lists," one for each different instruction. Then comes the 
  9.  *      instruction table, which contains the mnemonics of the various 
  10.  *      instructions, a pointer to the variant list for each instruction, and
  11.  *      other data. Finally, the variable tableSize is initialized to contain 
  12.  *      the number of instructions in the instruction table.
  13.  *
  14.  *      Author: Paul McKee
  15.  *      ECE492    North Carolina State University, 12/13/86
  16.  *
  17.  *      Modified A.E. Romer, Version 1.0     16 March 1991
  18.  *          5 October 1991 - TRAP instruction got lost somehow, restored
  19.  ************************************************************************/
  20.  
  21. /*********************************************************************
  22.  
  23.           HOW THE INSTRUCTION TABLE AND VARIANT LISTS ARE USED
  24.  
  25.      The procedure which instLookup() and assemble() use to look up
  26. and verify an instruction (or directive) is as follows. Once the
  27. mnemonic of the instruction has been parsed and stripped of its size
  28. code and trailing spaces, the instLookup() does a binary search on the
  29. instruction table to determine if the mnemonic is present. If it is
  30. not found, then the INV_OPCODE error results. If the mnemonic is
  31. found, then assemble() examines the field parseFlag for that entry.
  32. This flag is TRUE if the mnemonic represents a normal instruction that
  33. can be parsed by assemble(); it is FALSE if the instruction's operands
  34. have an unusual format (as is the case for MOVEM and DC).
  35.  
  36.       If the parseFlag is TRUE, then assemble will parse the
  37. instruction's operands, check them for validity, and then pass the
  38. data to the proper routine which will build the instruction. To do
  39. this it uses the pointer in the instruction table to the instruction's
  40. "variant list" and scans through the list until it finds an particular
  41. "variant" of the instruction which matches the addressing mode(s)
  42. specified.  If it finds such a variant, it checks the instruction's
  43. size code and passes the instruction mask for the appropriate size
  44. (there are three masks for each variant) to the building routine
  45. through a pointer in the variant list for that variant.
  46.  
  47. *********************************************************************/
  48.  
  49.  
  50. #include <stdio.h>
  51. #include "asm.h"
  52.  
  53. /* Define size code masks for instructions that allow more than one size */
  54.  
  55. #define BW  (BYTE | WORD)
  56. #define WL  (WORD | LONG)
  57. #define BWL (BYTE | WORD | LONG)
  58. #define BL  (BYTE | LONG)
  59.  
  60.  
  61. /* Define the "variant lists" for each different instruction */
  62.  
  63. /* NOTE: in the following variant lists it is essential that variants that do
  64.  * not require destination (for instance 'asl' MemAlt variant) precede variants
  65.  * that do. The reason is that 'assemble' parses variants in the order of this
  66.  * listing, so if the variant in the code parsed were one that does not require
  67.  * destination, 'assemble' would try to parse the destination if the variants
  68.  * were listed in the wrong order, and fail.
  69.  */
  70.  
  71. variant abcdva[] =
  72.     {
  73.         { DnDirect, DnDirect, BYTE, twoReg, 0xC100, 0xC100, 0 },
  74.         { AnIndPre, AnIndPre, BYTE, twoReg, 0xC108, 0xC108, 0 }
  75.     };
  76.  
  77. variant addva[] =
  78.     {
  79.         { Immediate, DataAlt,  BWL, immedInst, 0x0600, 0x0640, 0x0680 },
  80.         { Immediate, AnDirect, WL,  quickMath, 0,      0x5040, 0x5080 },
  81.         { All,       DnDirect, BWL, arithReg,  0xD000, 0xD040, 0xD080 },
  82.         { DnDirect,  MemAlt,   BWL, arithAddr, 0xD100, 0xD140, 0xD180 },
  83.         { All,       AnDirect, WL,  arithReg,  0,      0xD0C0, 0xD1C0 },
  84.     };
  85.  
  86. variant addava[] =
  87.     {
  88.         { All, AnDirect, WL, arithReg, 0, 0xD0C0, 0xD1C0 },
  89.     };
  90.  
  91. variant addiva[] =
  92.     {
  93.         { Immediate, DataAlt, BWL, immedInst, 0x0600, 0x0640, 0x0680 }
  94.     };
  95.  
  96. variant addqva[] =
  97.     {
  98.         { Immediate, DataAlt, BWL, quickMath, 0x5000, 0x5040, 0x5080 },
  99.         { Immediate, AnDirect, WL, quickMath, 0,      0x5040, 0x5080 }
  100.     };
  101.  
  102. variant addxva[] =
  103.     {
  104.         { DnDirect, DnDirect, BWL, twoReg, 0xD100, 0xD140, 0xD180 },
  105.         { AnIndPre, AnIndPre, BWL, twoReg, 0xD108, 0xD148, 0xD188 }
  106.     };
  107.  
  108. variant andva[] =
  109.     {
  110.         { Data,      DnDirect, BWL, arithReg,  0xC000, 0xC040, 0xC080 },
  111.         { DnDirect,  MemAlt,   BWL, arithAddr, 0xC100, 0xC140, 0xC180 },
  112.         { Immediate, DataAlt,  BWL, immedInst, 0x0200, 0x0240, 0x0280 }
  113.     };
  114.  
  115. variant andiva[] =
  116.     {
  117.         { Immediate, DataAlt,   BWL,  immedInst,  0x0200, 0x0240, 0x0280 },
  118.         { Immediate, CCRDirect, BYTE, immedToCCR, 0x023C, 0x023C, 0 },
  119.         { Immediate, SRDirect,  WORD, immedWord,  0,      0x027C, 0 }
  120.     };
  121.  
  122. variant aslva[] =
  123.     {
  124.         { MemAlt,    0,        WORD, oneOp,    0,      0xE1C0, 0 },
  125.         { DnDirect,  DnDirect, BWL,  shiftReg, 0xE120, 0xE160, 0xE1A0 },
  126.         { Immediate, DnDirect, BWL,  shiftReg, 0xE100, 0xE140, 0xE180 }
  127.     };
  128.  
  129. variant asrva[] =
  130.     {
  131.         { MemAlt,    0,        WORD, oneOp,    0,      0xE0C0, 0 },
  132.         { DnDirect,  DnDirect, BWL,  shiftReg, 0xE020, 0xE060, 0xE0A0 },
  133.         { Immediate, DnDirect, BWL,  shiftReg, 0xE000, 0xE040, 0xE080 }
  134.     };
  135.  
  136. variant bccva[] =
  137.     {
  138.         { Absolute, 0, SHORT | LONG, branch, 0x6400, 0x6400, 0x6400 }
  139.     };
  140.  
  141. variant bchgva[] =
  142.     {
  143.         { DnDirect,  MemAlt,   BYTE, arithAddr, 0x0140, 0x0140, 0 },
  144.         { DnDirect,  DnDirect, LONG, arithAddr, 0,      0x0140, 0x0140 },
  145.         { Immediate, MemAlt,   BYTE, staticBit, 0x0840, 0x0840, 0 },
  146.         { Immediate, DnDirect, LONG, staticBit, 0,      0x0840, 0x0840 }
  147.     };
  148.  
  149. variant bclrva[] =
  150.     {
  151.         { DnDirect, MemAlt, BYTE, arithAddr, 0x0180, 0x0180, 0 },
  152.         { DnDirect, DnDirect, LONG, arithAddr, 0, 0x0180, 0x0180 },
  153.         { Immediate, MemAlt, BYTE, staticBit, 0x0880, 0x0880, 0 },
  154.         { Immediate, DnDirect, LONG, staticBit, 0, 0x0880, 0x0880 }
  155.     };
  156.  
  157. variant bcsva[] =
  158.     {
  159.         { Absolute, 0, SHORT | LONG, branch, 0x6500, 0x6500, 0x6500 }
  160.     };
  161.  
  162. variant beqva[] =
  163.     {
  164.         { Absolute, 0, SHORT | LONG, branch, 0x6700, 0x6700, 0x6700 }
  165.     };
  166.  
  167. variant bfchgva[] =
  168.     {
  169.         { DnDirect | CtrAlt, 0, 0, NULL, 0x0, 0xEAC0, 0x0 }
  170.     };
  171.  
  172. variant bfclrva[] =
  173.     {
  174.         { DnDirect | CtrAlt, 0, 0, NULL, 0x0, 0xECC0, 0x0 }
  175.     };
  176.  
  177. variant bfextsva[] =
  178.     {
  179.         { DnDirect | Control, DnDirect, 0, NULL, 0x0, 0xEBC0, 0x0 }
  180.     };
  181.  
  182. variant bfextuva[] =
  183.     {
  184.         { DnDirect | Control, DnDirect, 0, NULL, 0x0, 0xE9C0, 0x0 }
  185.     };
  186.  
  187. variant bfffova[] =
  188.     {
  189.         { DnDirect | Control, DnDirect, 0, NULL, 0x0, 0xEDC0, 0x0 }
  190.     };
  191.  
  192. variant bfinsva[] =
  193.     {
  194.         { DnDirect, DnDirect | Control, 0, NULL, 0x0, 0xEFC0, 0x0 }
  195.     };
  196.  
  197. variant bfsetva[] =
  198.     {
  199.         { DnDirect | CtrAlt, 0, 0, NULL, 0x0, 0xEEC0, 0x0 }
  200.     };
  201.  
  202. variant bftstva[] =
  203.     {
  204.         { DnDirect | CtrAlt, 0, 0, NULL, 0x0, 0xE8C0, 0x0 }
  205.     };
  206.  
  207. variant bgeva[] =
  208.     {
  209.         { Absolute, 0, SHORT | LONG, branch, 0x6C00, 0x6C00, 0x6C00 }
  210.     };
  211.  
  212. variant bgtva[] =
  213.     {
  214.         { Absolute, 0, SHORT | LONG, branch, 0x6E00, 0x6E00, 0x6E00 }
  215.     };
  216.  
  217. variant bhiva[] =
  218.     {
  219.         { Absolute, 0, SHORT | LONG, branch, 0x6200, 0x6200, 0x6200 }
  220.     };
  221.  
  222. variant bhsva[] =
  223.     {
  224.         { Absolute, 0, SHORT | LONG, branch, 0x6400, 0x6400, 0x6400 }
  225.     };
  226.  
  227. variant bleva[] =
  228.     {
  229.         { Absolute, 0, SHORT | LONG, branch, 0x6f00, 0x6F00, 0x6F00 }
  230.     };
  231.  
  232. variant blova[] =
  233.     {
  234.         { Absolute, 0, SHORT | LONG, branch, 0x6500, 0x6500, 0x6500 }
  235.     };
  236.  
  237. variant blsva[] =
  238.     {
  239.         { Absolute, 0, SHORT | LONG, branch, 0x6300, 0x6300, 0x6300 }
  240.     };
  241.  
  242. variant bltva[] =
  243.     {
  244.         { Absolute, 0, SHORT | LONG, branch, 0x6d00, 0x6D00, 0x6D00 }
  245.     };
  246.  
  247. variant bmiva[] =
  248.     {
  249.         { Absolute, 0, SHORT | LONG, branch, 0x6b00, 0x6B00, 0x6B00 }
  250.     };
  251.  
  252. variant bneva[] =
  253.     {
  254.         { Absolute, 0, SHORT | LONG, branch, 0x6600, 0x6600, 0x6600 }
  255.     };
  256.  
  257. variant bplva[] =
  258.     {
  259.         { Absolute, 0, SHORT | LONG, branch, 0x6a00, 0x6A00, 0x6A00 }
  260.     };
  261.  
  262. variant brava[] =
  263.     {
  264.         { Absolute, 0, SHORT | LONG, branch, 0x6000, 0x6000, 0x6000 }
  265.     };
  266.  
  267. variant bsetva[] =
  268.     {
  269.         { DnDirect, MemAlt, BYTE, arithAddr, 0x01C0, 0x01C0, 0 },
  270.         { DnDirect, DnDirect, LONG, arithAddr, 0, 0x01C0, 0x01C0 },
  271.         { Immediate, MemAlt, BYTE, staticBit, 0x08C0, 0x08C0, 0 },
  272.         { Immediate, DnDirect, LONG, staticBit, 0, 0x08C0, 0x08C0 }
  273.     };
  274.  
  275. variant bsrva[] =
  276.     {
  277.         { Absolute, 0, SHORT | LONG, branch, 0x6100, 0x6100, 0x6100 }
  278.     };
  279.  
  280. variant btstva[] =
  281.     {
  282.         { DnDirect, Memory, BYTE, arithAddr, 0x0100, 0x0100, 0 },
  283.         { DnDirect, DnDirect, LONG, arithAddr, 0, 0x0100, 0x0100 },
  284.         { Immediate, Memory, BYTE, staticBit, 0x0800, 0x0800, 0 },
  285.         { Immediate, DnDirect, LONG, staticBit, 0, 0x0800, 0x0800 }
  286.     };
  287.  
  288. variant bvcva[] =
  289.     {
  290.         { Absolute, 0, SHORT | LONG, branch, 0x6800, 0x6800, 0x6800 }
  291.     };
  292.  
  293. variant bvsva[] =
  294.     {
  295.         { Absolute, 0, SHORT | LONG, branch, 0x6900, 0x6900, 0x6900 }
  296.     };
  297.  
  298. variant chkva[] =
  299.     {
  300.         { Data, DnDirect, WORD, arithReg, 0, 0x4180, 0 }
  301.     };
  302.  
  303. variant clrva[] =
  304.     {
  305.         { DataAlt, 0, BWL, oneOp, 0x4200, 0x4240, 0x4280 }
  306.     };
  307.  
  308. variant cmpva[] =
  309.     {
  310.         { All, DnDirect, BWL, arithReg, 0xB000, 0xB040, 0xB080 },
  311.         { All, AnDirect, WL, arithReg, 0, 0xB0C0, 0xB1C0 },
  312.         { Immediate, DataAlt, BWL, immedInst, 0x0C00, 0x0C40, 0x0C80 }
  313.     };
  314.  
  315. variant cmpava[] =
  316.     {
  317.         { All, AnDirect, WL, arithReg, 0, 0xB0C0, 0xB1C0 }
  318.     };
  319.  
  320. variant cmpiva[] =
  321.     {
  322.         { Immediate, DataAlt, BWL, immedInst, 0x0C00, 0x0C40, 0x0C80 }
  323.     };
  324.  
  325. variant cmpmva[] =
  326.     {
  327.         { AnIndPost, AnIndPost, BWL, twoReg, 0xB108, 0xB148, 0xB188 }
  328.     };
  329.  
  330. variant dbccva[] =
  331.     {
  332.         { DnDirect, Absolute, WORD, dbcc, 0, 0x54C8, 0 }
  333.     };
  334.  
  335. variant dbcsva[] =
  336.     {
  337.         { DnDirect, Absolute, WORD, dbcc, 0, 0x55C8, 0 }
  338.     };
  339.  
  340. variant dbeqva[] =
  341.     {
  342.         { DnDirect, Absolute, WORD, dbcc, 0, 0x57C8, 0 }
  343.     };
  344.  
  345. variant dbfva[] =
  346.     {
  347.         { DnDirect, Absolute, WORD, dbcc, 0, 0x51C8, 0 }
  348.     };
  349.  
  350. variant dbgeva[] =
  351.     {
  352.         { DnDirect, Absolute, WORD, dbcc, 0, 0x5CC8, 0 }
  353.     };
  354.  
  355. variant dbgtva[] =
  356.     {
  357.         { DnDirect, Absolute, WORD, dbcc, 0, 0x5EC8, 0 }
  358.     };
  359.  
  360. variant dbhiva[] =
  361.     {
  362.         { DnDirect, Absolute, WORD, dbcc, 0, 0x52C8, 0 }
  363.     };
  364.  
  365. variant dbhsva[] =
  366.     {
  367.         { DnDirect, Absolute, WORD, dbcc, 0, 0x54C8, 0 }
  368.     };
  369.  
  370. variant dbleva[] =
  371.     {
  372.         { DnDirect, Absolute, WORD, dbcc, 0, 0x5FC8, 0 }
  373.     };
  374.  
  375. variant dblova[] =
  376.     {
  377.         { DnDirect, Absolute, WORD, dbcc, 0, 0x55C8, 0 }
  378.     };
  379.  
  380. variant dblsva[] =
  381.     {
  382.         { DnDirect, Absolute, WORD, dbcc, 0, 0x53C8, 0 }
  383.     };
  384.  
  385. variant dbltva[] =
  386.     {
  387.         { DnDirect, Absolute, WORD, dbcc, 0, 0x5DC8, 0 }
  388.     };
  389.  
  390. variant dbmiva[] =
  391.     {
  392.         { DnDirect, Absolute, WORD, dbcc, 0, 0x5BC8, 0 }
  393.     };
  394.  
  395. variant dbneva[] =
  396.     {
  397.         { DnDirect, Absolute, WORD, dbcc, 0, 0x56C8, 0 }
  398.     };
  399.  
  400. variant dbplva[] =
  401.     {
  402.         { DnDirect, Absolute, WORD, dbcc, 0, 0x5AC8, 0 }
  403.     };
  404.  
  405. variant dbrava[] =
  406.     {
  407.         { DnDirect, Absolute, WORD, dbcc, 0, 0x51C8, 0 }
  408.     };
  409.  
  410. variant dbtva[] =
  411.     {
  412.         { DnDirect, Absolute, WORD, dbcc, 0, 0x50C8, 0 }
  413.     };
  414.  
  415. variant dbvcva[] =
  416.     {
  417.         { DnDirect, Absolute, WORD, dbcc, 0, 0x58C8, 0 }
  418.     };
  419.  
  420. variant dbvsva[] =
  421.     {
  422.         { DnDirect, Absolute, WORD, dbcc, 0, 0x59C8, 0 }
  423.     };
  424.  
  425. variant eorva[] =
  426.     {
  427.         { DnDirect, DataAlt, BWL, arithAddr, 0xB100, 0xB140, 0xB180 },
  428.         { Immediate, DataAlt, BWL, immedInst, 0x0A00, 0x0A40, 0x0A80 }
  429.     };
  430.  
  431. variant eoriva[] =
  432.     {
  433.         { Immediate, DataAlt, BWL, immedInst, 0x0A00, 0x0A40, 0x0A80 },
  434.         { Immediate, CCRDirect, BYTE, immedToCCR, 0x0A3C, 0x0A3C, 0 },
  435.         { Immediate, SRDirect, WORD, immedWord, 0, 0x0A7C, 0 }
  436.     };
  437.  
  438. variant exgva[] =
  439.     {
  440.         { DnDirect, DnDirect, LONG, exg, 0, 0xC140, 0xC140 },
  441.         { AnDirect, AnDirect, LONG, exg, 0, 0xC148, 0xC148 },
  442.         { GenReg, GenReg, LONG, exg, 0, 0xC188, 0xC188 }
  443.     };
  444.  
  445. variant extbva[] =
  446.     {
  447.         { DnDirect, 0, LONG, oneReg, 0, 0,      0x49C0 }
  448.     };
  449.  
  450. variant extva[] =
  451.     {
  452.         { DnDirect, 0, WL,   oneReg, 0, 0x4880, 0x48C0 }
  453.     };
  454.  
  455. variant illegalva[] =
  456.     {
  457.         { 0, 0, 0, zeroOp, 0, 0x4AFC, 0 }
  458.     };
  459.  
  460. variant jmpva[] =
  461.     {
  462.         { Control, 0, 0, oneOp, 0, 0x4EC0, 0 }
  463.     };
  464.  
  465. variant jsrva[] =
  466.     {
  467.         { Control, 0, 0, oneOp, 0, 0x4E80, 0 }
  468.     };
  469.  
  470. variant leava[] =
  471.     {
  472.         { Control, AnDirect, LONG, arithReg, 0, 0x41C0, 0x41C0 }
  473.     };
  474.  
  475. variant linkva[] =
  476.     {
  477.         { AnDirect, Immediate, 0, link, 0, 0x4E50, 0 }
  478.     };
  479.  
  480. variant lslva[] =
  481.     {
  482.         { MemAlt, 0, WORD, oneOp, 0, 0xE3C0, 0 },
  483.         { DnDirect, DnDirect, BWL, shiftReg, 0xE128, 0xE168, 0xE1A8 },
  484.         { Immediate, DnDirect, BWL, shiftReg, 0xE108, 0xE148, 0xE188 }
  485.     };
  486.  
  487. variant lsrva[] =
  488.     {
  489.         { MemAlt, 0, WORD, oneOp, 0, 0xE2C0, 0 },
  490.         { DnDirect, DnDirect, BWL, shiftReg, 0xE028, 0xE068, 0xE0A8 },
  491.         { Immediate, DnDirect, BWL, shiftReg, 0xE008, 0xE048, 0xE088 }
  492.     };
  493.  
  494. variant moveva[] =
  495.     {
  496.         { All, DataAlt, BWL, move, 0x1000, 0x3000, 0x2000 },        /* move */
  497.         { All, AnDirect, WL, move, 0, 0x3000, 0x2000 },             /*movea */
  498.         { Data, CCRDirect, WORD, oneOp, 0, 0x44C0, 0 },      /* move to CCR */
  499.         { Data, SRDirect, WORD, oneOp, 0, 0x46C0, 0 },        /* move to SR */
  500.         { CCRDirect, DataAlt, WORD, moveReg, 0, 0x42C0, 0 },
  501.                                                            /* move from CCR */
  502.         { SRDirect, DataAlt, WORD, moveReg, 0, 0x40C0, 0 }, /* move from SR */
  503.         { AnDirect, USPDirect, LONG, moveUSP, 0, 0x4E60, 0x4E60 },
  504.                                                              /* move to USP */
  505.         { USPDirect, AnDirect, LONG, moveUSP, 0, 0x4E68, 0x4E68 }
  506.                                                            /* move from USP */
  507.     };
  508.  
  509. variant moveava[] =
  510.     {
  511.         { All, AnDirect, WL, move, 0, 0x3000, 0x2000 }             /* movea */
  512.     };
  513.  
  514. variant movecva[] =
  515.     {
  516.         { SFCDirect | DFCDirect | USPDirect | VBRDirect,
  517.                            GenReg, LONG, movec, 0, 0x4E7A, 0x4E7A },
  518.         { GenReg, SFCDirect | DFCDirect | USPDirect | VBRDirect,
  519.                            LONG, movec, 0, 0x4E7B, 0x4E7B }
  520.     };
  521.  
  522. variant movepva[] =
  523.     {
  524.         { DnDirect, AnIndDisp, WL, movep, 0, 0x0188, 0x01C8 },
  525.         { AnIndDisp, DnDirect, WL, movep, 0, 0x0108, 0x0148 },
  526.         { DnDirect, AnInd, WL, movep, 0, 0x0188, 0x01C8 },
  527.         { AnInd, DnDirect, WL, movep, 0, 0x0108, 0x0148 }
  528.     };
  529.  
  530. variant moveqva[] =
  531.     {
  532.         { Immediate, DnDirect, LONG, moveq, 0, 0x7000, 0x7000 }
  533.     };
  534.  
  535. variant movesva[] =
  536.     {
  537.         { GenReg, MemAlt, BWL, moves, 0x0E00, 0x0E40, 0x0E80 },
  538.         { MemAlt, GenReg, BWL, moves, 0x0E00, 0x0E40, 0x0E80 }
  539.     };
  540.  
  541. variant mulsva[] =
  542.     {
  543.         { Data, DnDirect, WORD, arithReg, 0, 0xC1C0, 0 }
  544.     };
  545.  
  546. variant muluva[] =
  547.     {
  548.         { Data, DnDirect, WORD, arithReg, 0, 0xC0C0, 0 }
  549.     };
  550.  
  551. variant nbcdva[] =
  552.     {
  553.         { DataAlt, 0, BYTE, oneOp, 0x4800, 0x4800, 0 }
  554.     };
  555.  
  556. variant negva[] =
  557.     {
  558.         { DataAlt, 0, BWL, oneOp, 0x4400, 0x4440, 0x4480 }
  559.     };
  560.  
  561. variant negxva[] =
  562.     {
  563.         { DataAlt, 0, BWL, oneOp, 0x4000, 0x4040, 0x4080 }
  564.     };
  565.  
  566. variant nopva[] =
  567.     {
  568.         { 0, 0, 0, zeroOp, 0, 0x4E71, 0 }
  569.     };
  570.  
  571. variant notva[] =
  572.     {
  573.         { DataAlt, 0, BWL, oneOp, 0x4600, 0x4640, 0x4680 }
  574.     };
  575.  
  576. variant orva[] =
  577.     {
  578.         { Data, DnDirect, BWL, arithReg, 0x8000, 0x8040, 0x8080 },
  579.         { DnDirect, MemAlt, BWL, arithAddr, 0x8100, 0x8140, 0x8180 },
  580.         { Immediate, DataAlt, BWL, immedInst, 0x0000, 0x0040, 0x0080 }
  581.     };
  582.  
  583. variant oriva[] =
  584.     {
  585.         { Immediate, DataAlt, BWL, immedInst, 0x0000, 0x0040, 0x0080 },
  586.         { Immediate, CCRDirect, BYTE, immedToCCR, 0x003C, 0x003C, 0 },
  587.         { Immediate, SRDirect, WORD, immedWord, 0, 0x007C, 0 }
  588.     };
  589.  
  590. variant peava[] =
  591.     {
  592.         { Control, 0, LONG, oneOp, 0, 0x4840, 0x4840 }
  593.     };
  594.  
  595. variant resetva[] =
  596.     {
  597.         { 0, 0, 0, zeroOp, 0, 0x4E70, 0 }
  598.     };
  599.  
  600. variant rolva[] =
  601.     {
  602.         { MemAlt, 0, WORD, oneOp, 0, 0xE7C0, 0 },
  603.         { DnDirect, DnDirect, BWL, shiftReg, 0xE138, 0xE178, 0xE1B8 },
  604.         { Immediate, DnDirect, BWL, shiftReg, 0xE118, 0xE158, 0xE198 }
  605.     };
  606.  
  607. variant rorva[] =
  608.     {
  609.         { MemAlt, 0, WORD, oneOp, 0, 0xE6C0, 0 },
  610.         { DnDirect, DnDirect, BWL, shiftReg, 0xE038, 0xE078, 0xE0B8 },
  611.         { Immediate, DnDirect, BWL, shiftReg, 0xE018, 0xE058, 0xE098 }
  612.     };
  613.  
  614. variant roxlva[] =
  615.     {
  616.         { MemAlt, 0, WORD, oneOp, 0, 0xE5C0, 0 },
  617.         { DnDirect, DnDirect, BWL, shiftReg, 0xE130, 0xE170, 0xE1B0 },
  618.         { Immediate, DnDirect, BWL, shiftReg, 0xE110, 0xE150, 0xE190 }
  619.     };
  620.  
  621. variant roxrva[] =
  622.     {
  623.         { MemAlt, 0, WORD, oneOp, 0, 0xE4C0, 0 },
  624.         { DnDirect, DnDirect, BWL, shiftReg, 0xE030, 0xE070, 0xE0B0 },
  625.         { Immediate, DnDirect, BWL, shiftReg, 0xE010, 0xE050, 0xE090 }
  626.     };
  627.  
  628. variant rtdva[] =
  629.     {
  630.         { Immediate, 0, 0, immedWord, 0, 0x4E74, 0 }
  631.     };
  632.  
  633. variant rteva[] =
  634.     {
  635.         { 0, 0, 0, zeroOp, 0, 0x4E73, 0 }
  636.     };
  637.  
  638. variant rtrva[] =
  639.     {
  640.         { 0, 0, 0, zeroOp, 0, 0x4E77, 0 }
  641.     };
  642.  
  643. variant rtsva[] =
  644.     {
  645.         { 0, 0, 0, zeroOp, 0, 0x4E75, 0 }
  646.     };
  647.  
  648. variant sbcdva[] =
  649.     {
  650.         { DnDirect, DnDirect, BYTE, twoReg, 0x8100, 0x8100, 0 },
  651.         { AnIndPre, AnIndPre, BYTE, twoReg, 0x8108, 0x8108, 0 }
  652.     };
  653.  
  654. variant sccva[] =
  655.     {
  656.         { DataAlt, 0, BYTE, scc, 0x54C0, 0x54C0, 0 }
  657.     };
  658.  
  659. variant scsva[] =
  660.     {
  661.         { DataAlt, 0, BYTE, scc, 0x55C0, 0x55C0, 0 }
  662.     };
  663.  
  664. variant seqva[] =
  665.     {
  666.         { DataAlt, 0, BYTE, scc, 0x57C0, 0x57C0, 0 }
  667.     };
  668.  
  669. variant sfva[] =
  670.     {
  671.         { DataAlt, 0, BYTE, scc, 0x51C0, 0x51C0, 0 }
  672.     };
  673.  
  674. variant sgeva[] =
  675.     {
  676.         { DataAlt, 0, BYTE, scc, 0x5CC0, 0x5CC0, 0 }
  677.     };
  678.  
  679. variant sgtva[] =
  680.     {
  681.         { DataAlt, 0, BYTE, scc, 0x5EC0, 0x5EC0, 0 }
  682.     };
  683.  
  684. variant shiva[] =
  685.     {
  686.         { DataAlt, 0, BYTE, scc, 0x52C0, 0x52C0, 0 }
  687.     };
  688.  
  689. variant shsva[] =
  690.     {
  691.         { DataAlt, 0, BYTE, scc, 0x54C0, 0x54C0, 0 }
  692.     };
  693.  
  694. variant sleva[] =
  695.     {
  696.         { DataAlt, 0, BYTE, scc, 0x5FC0, 0x5FC0, 0 }
  697.     };
  698.  
  699. variant slova[] =
  700.     {
  701.         { DataAlt, 0, BYTE, scc, 0x55C0, 0x55C0, 0 }
  702.     };
  703.  
  704. variant slsva[] =
  705.     {
  706.         { DataAlt, 0, BYTE, scc, 0x53C0, 0x53C0, 0 }
  707.     };
  708.  
  709. variant sltva[] =
  710.     {
  711.         { DataAlt, 0, BYTE, scc, 0x5DC0, 0x5DC0, 0 }
  712.     };
  713.  
  714. variant smiva[] =
  715.     {
  716.         { DataAlt, 0, BYTE, scc, 0x5BC0, 0x5BC0, 0 }
  717.     };
  718.  
  719. variant sneva[] =
  720.     {
  721.         { DataAlt, 0, BYTE, scc, 0x56C0, 0x56C0, 0 }
  722.     };
  723.  
  724. variant splva[] =
  725.     {
  726.         { DataAlt, 0, BYTE, scc, 0x5AC0, 0x5AC0, 0 }
  727.     };
  728.  
  729. variant stva[] =
  730.     {
  731.         { DataAlt, 0, BYTE, scc, 0x50C0, 0x50C0, 0 }
  732.     };
  733.  
  734. variant stopva[] =
  735.     {
  736.         { Immediate, 0, 0, immedWord, 0, 0x4E72, 0 }
  737.     };
  738.  
  739. variant subva[] =
  740.     {
  741.         { Immediate, DataAlt,  BWL, immedInst, 0x0400, 0x0440, 0x0480 },
  742.         { Immediate, AnDirect, WL,  quickMath, 0,      0x5140, 0x5180 },
  743.         { All,       DnDirect, BWL, arithReg,  0x9000, 0x9040, 0x9080 },
  744.         { DnDirect,  MemAlt,   BWL, arithAddr, 0x9100, 0x9140, 0x9180 },
  745.         { All,       AnDirect, WL,  arithReg,  0,      0x90C0, 0x91C0 },
  746.     };
  747.  
  748. variant subava[] =
  749.     {
  750.         { All, AnDirect, WL, arithReg, 0, 0x90C0, 0x91C0 }
  751.     };
  752.  
  753. variant subiva[] =
  754.     {
  755.         { Immediate, DataAlt, BWL, immedInst, 0x0400, 0x0440, 0x0480 }
  756.     };
  757.  
  758. variant subqva[] =
  759.     {
  760.         { Immediate, DataAlt, BWL, quickMath, 0x5100, 0x5140, 0x5180 },
  761.         { Immediate, AnDirect, WL, quickMath, 0, 0x5140, 0x5180 }
  762.     };
  763.  
  764. variant subxva[] =
  765.     {
  766.         { DnDirect, DnDirect, BWL, twoReg, 0x9100, 0x9140, 0x9180 },
  767.         { AnIndPre, AnIndPre, BWL, twoReg, 0x9108, 0x9148, 0x9188 }
  768.     };
  769.  
  770. variant svcva[] =
  771.     {
  772.         { DataAlt, 0, BYTE, scc, 0x58C0, 0x58C0, 0 }
  773.     };
  774.  
  775. variant svsva[] =
  776.     {
  777.         { DataAlt, 0, BYTE, scc, 0x59C0, 0x59C0, 0 }
  778.     };
  779.  
  780. variant swapva[] =
  781.     {
  782.         { DnDirect, 0, WORD, oneReg, 0, 0x4840, 0 }
  783.     };
  784.  
  785. variant tasva[] =
  786.     {
  787.         { DataAlt, 0, BYTE, oneOp, 0x4AC0, 0x4AC0, 0 }
  788.     };
  789.  
  790. variant trapva[] =
  791.     {
  792.         { Immediate, 0, 0, trap, 0, 0x4E40, 0 }
  793.     };
  794.  
  795. variant trapccva[] =
  796.     {
  797.         { 0, 0, 0, NULL, 0x54fc, 0x54fa, 0x54fb }
  798.     };
  799.  
  800. variant trapcsva[] =
  801.     {
  802.         { 0, 0, 0, NULL, 0x55fc, 0x55fa, 0x55fb }
  803.     };
  804.  
  805. variant trapeqva[] =
  806.     {
  807.         { 0, 0, 0, NULL, 0x57fc, 0x57fa, 0x57fb }
  808.     };
  809.  
  810. variant trapfva[] =
  811.     {
  812.         { 0, 0, 0, NULL, 0x51fc, 0x51fa, 0x51fb }
  813.     };
  814.  
  815. variant trapgeva[] =
  816.     {
  817.         { 0, 0, 0, NULL, 0x5cfc, 0x5cfa, 0x5cfb }
  818.     };
  819.  
  820. variant trapgtva[] =
  821.     {
  822.         { 0, 0, 0, NULL, 0x5efc, 0x5efa, 0x5efb }
  823.     };
  824.  
  825. variant traphiva[] =
  826.     {
  827.         { 0, 0, 0, NULL, 0x52fc, 0x52fa, 0x52fb }
  828.     };
  829.  
  830. variant trapleva[] =
  831.     {
  832.         { 0, 0, 0, NULL, 0x5ffc, 0x5ffa, 0x5ffb }
  833.     };
  834.  
  835. variant traplsva[] =
  836.     {
  837.         { 0, 0, 0, NULL, 0x53fc, 0x53fa, 0x53fb }
  838.     };
  839.  
  840. variant trapltva[] =
  841.     {
  842.         { 0, 0, 0, NULL, 0x5dfc, 0x5dfa, 0x5dfb }
  843.     };
  844.  
  845. variant trapmiva[] =
  846.     {
  847.         { 0, 0, 0, NULL, 0x5bfc, 0x5bfa, 0x5bfb }
  848.     };
  849.  
  850. variant trapneva[] =
  851.     {
  852.         { 0, 0, 0, NULL, 0x56fc, 0x56fa, 0x56fb }
  853.     };
  854.  
  855. variant trapplva[] =
  856.     {
  857.         { 0, 0, 0, NULL, 0x5afc, 0x5afa, 0x5afb }
  858.     };
  859.  
  860. variant traptva[] =
  861.     {
  862.         { 0, 0, 0, NULL, 0x50fc, 0x50fa, 0x50fb }
  863.     };
  864.  
  865. variant trapvva[] =
  866.     {
  867.         { 0, 0, 0, zeroOp, 0, 0x4E76, 0 }
  868.     };
  869.  
  870. variant trapvcva[] =
  871.     {
  872.         { 0, 0, 0, NULL, 0x58fc, 0x58fa, 0x58fb }
  873.     };
  874.  
  875. variant trapvsva[] =
  876.     {
  877.         { 0, 0, 0, NULL, 0x59fc, 0x59fa, 0x59fb }
  878.     };
  879.  
  880. variant tstva[] =
  881.     {
  882.         { DataAlt, 0, BWL, oneOp, 0x4A00, 0x4A40, 0x4A80 }
  883.     };
  884.  
  885. variant unlkva[] =
  886.     {
  887.         { AnDirect, 0, 0, oneReg, 0, 0x4E58, 0 }
  888.     };
  889.  
  890.  
  891. /* Define a macro to compute the length of a variant list */
  892.  
  893. #define variantCount(variantArray) (sizeof(variantArray)/sizeof(variant))
  894.  
  895.  
  896. /* The instruction table itself... */
  897.  
  898. instruction instTable[] =
  899.     {
  900.         { "ABCD",   abcdva,     variantCount(abcdva),   TRUE,   NULL },
  901.         { "ADD",    addva,      variantCount(addva),    TRUE,   NULL },
  902.         { "ADDA",   addava,     variantCount(addava),   TRUE,   NULL },
  903.         { "ADDI",   addiva,     variantCount(addiva),   TRUE,   NULL },
  904.         { "ADDQ",   addqva,     variantCount(addqva),   TRUE,   NULL },
  905.         { "ADDX",   addxva,     variantCount(addxva),   TRUE,   NULL },
  906.         { "AND",    andva,      variantCount(andva),    TRUE,   NULL },
  907.         { "ANDI",   andiva,     variantCount(andiva),   TRUE,   NULL },
  908.         { "ASL",    aslva,      variantCount(aslva),    TRUE,   NULL },
  909.         { "ASR",    asrva,      variantCount(asrva),    TRUE,   NULL },
  910.         { "BCC",    bccva,      variantCount(bccva),    TRUE,   NULL },
  911.         { "BCHG",   bchgva,     variantCount(bchgva),   TRUE,   NULL },
  912.         { "BCLR",   bclrva,     variantCount(bclrva),   TRUE,   NULL },
  913.         { "BCS",    bcsva,      variantCount(bcsva),    TRUE,   NULL },
  914.         { "BEQ",    beqva,      variantCount(beqva),    TRUE,   NULL },
  915.         { "BFCHG",  bfchgva,    variantCount(bfchgva),  FALSE,  bitField },
  916.         { "BFCLR",  bfclrva,    variantCount(bfclrva),  FALSE,  bitField },
  917.         { "BFEXTS", bfextsva,   variantCount(bfextsva), FALSE,  bitField },
  918.         { "BFEXTU", bfextuva,   variantCount(bfextuva), FALSE,  bitField },
  919.         { "BFFFO",  bfffova,    variantCount(bfffova),  FALSE,  bitField },
  920.         { "BFINS",  bfinsva,    variantCount(bfinsva),  FALSE,  bitField },
  921.         { "BFSET",  bfsetva,    variantCount(bfsetva),  FALSE,  bitField },
  922.         { "BFTST",  bftstva,    variantCount(bftstva),  FALSE,  bitField },
  923.         { "BGE",    bgeva,      variantCount(bgeva),    TRUE,   NULL },
  924.         { "BGT",    bgtva,      variantCount(bgtva),    TRUE,   NULL },
  925.         { "BHI",    bhiva,      variantCount(bhiva),    TRUE,   NULL },
  926.         { "BHS",    bccva,      variantCount(bccva),    TRUE,   NULL },
  927.         { "BKPT",   NULL,       0,                      FALSE,  bkPoint },
  928.         { "BLE",    bleva,      variantCount(bleva),    TRUE,   NULL },
  929.         { "BLO",    bcsva,      variantCount(bcsva),    TRUE,   NULL },
  930.         { "BLS",    blsva,      variantCount(blsva),    TRUE,   NULL },
  931.         { "BLT",    bltva,      variantCount(bltva),    TRUE,   NULL },
  932.         { "BMI",    bmiva,      variantCount(bmiva),    TRUE,   NULL },
  933.         { "BNE",    bneva,      variantCount(bneva),    TRUE,   NULL },
  934.         { "BPL",    bplva,      variantCount(bplva),    TRUE,   NULL },
  935.         { "BRA",    brava,      variantCount(brava),    TRUE,   NULL },
  936.         { "BSET",   bsetva,     variantCount(bsetva),   TRUE,   NULL },
  937.         { "BSR",    bsrva,      variantCount(bsrva),    TRUE,   NULL },
  938.         { "BTST",   btstva,     variantCount(btstva),   TRUE,   NULL },
  939.         { "BVC",    bvcva,      variantCount(bvcva),    TRUE,   NULL },
  940.         { "BVS",    bvsva,      variantCount(bvsva),    TRUE,   NULL },
  941.         { "CALLM",  NULL,       0,                      FALSE,  callModule },
  942.         { "CAS",    NULL,       0,                      FALSE,  compSwap },
  943.         { "CAS2",   NULL,       0,                      FALSE,  compSwap2 },
  944.         { "CHK",    chkva,      variantCount(chkva),    TRUE,   NULL },
  945.         { "CHK2",   NULL,       0,                      FALSE,  checkReg },
  946.         { "CLR",    clrva,      variantCount(clrva),    TRUE,   NULL },
  947.         { "CMP",    cmpva,      variantCount(cmpva),    TRUE,   NULL },
  948.         { "CMP2",   NULL,       0,                      FALSE,  checkReg },
  949.         { "CMPA",   cmpava,     variantCount(cmpava),   TRUE,   NULL },
  950.         { "CMPI",   cmpiva,     variantCount(cmpiva),   TRUE,   NULL },
  951.         { "CMPM",   cmpmva,     variantCount(cmpmva),   TRUE,   NULL },
  952.         { "DBCC",   dbccva,     variantCount(dbccva),   TRUE,   NULL },
  953.         { "DBCS",   dbcsva,     variantCount(dbcsva),   TRUE,   NULL },
  954.         { "DBEQ",   dbeqva,     variantCount(dbeqva),   TRUE,   NULL },
  955.         { "DBF",    dbfva,      variantCount(dbfva),    TRUE,   NULL },
  956.         { "DBGE",   dbgeva,     variantCount(dbgeva),   TRUE,   NULL },
  957.         { "DBGT",   dbgtva,     variantCount(dbgtva),   TRUE,   NULL },
  958.         { "DBHI",   dbhiva,     variantCount(dbhiva),   TRUE,   NULL },
  959.         { "DBHS",   dbccva,     variantCount(dbccva),   TRUE,   NULL },
  960.         { "DBLE",   dbleva,     variantCount(dbleva),   TRUE,   NULL },
  961.         { "DBLO",   dbcsva,     variantCount(dbcsva),   TRUE,   NULL },
  962.         { "DBLS",   dblsva,     variantCount(dblsva),   TRUE,   NULL },
  963.         { "DBLT",   dbltva,     variantCount(dbltva),   TRUE,   NULL },
  964.         { "DBMI",   dbmiva,     variantCount(dbmiva),   TRUE,   NULL },
  965.         { "DBNE",   dbneva,     variantCount(dbneva),   TRUE,   NULL },
  966.         { "DBPL",   dbplva,     variantCount(dbplva),   TRUE,   NULL },
  967.         { "DBRA",   dbrava,     variantCount(dbrava),   TRUE,   NULL },
  968.         { "DBT",    dbtva,      variantCount(dbtva),    TRUE,   NULL },
  969.         { "DBVC",   dbvcva,     variantCount(dbvcva),   TRUE,   NULL },
  970.         { "DBVS",   dbvsva,     variantCount(dbvsva),   TRUE,   NULL },
  971.         { "DC",     NULL,       0,                      FALSE,  dc   },
  972.         { "DCB",    NULL,       0,                      FALSE,  dcb  },
  973.         { "DIVS",   NULL,       0,                      FALSE,  divsop },
  974.         { "DIVSL",  NULL,       0,                      FALSE,  divslop },
  975.         { "DIVU",   NULL,       0,                      FALSE,  divuop },
  976.         { "DIVUL",  NULL,       0,                      FALSE,  divulop },
  977.         { "DS",     NULL,       0,                      FALSE,  ds   },
  978.         { "END",    NULL,       0,                      FALSE,  funct_end },
  979.         { "EOR",    eorva,      variantCount(eorva),    TRUE,   NULL },
  980.         { "EORI",   eoriva,     variantCount(eoriva),   TRUE,   NULL },
  981.         { "EQU",    NULL,       0,                      FALSE,  equ  },
  982.         { "EXG",    exgva,      variantCount(exgva),    TRUE,   NULL },
  983.         { "EXT",    extva,      variantCount(extva),    TRUE,   NULL },
  984.         { "EXTB",   extbva,     variantCount(extbva),   TRUE,   NULL },
  985.         { "ILLEGAL", illegalva, variantCount(illegalva),TRUE,   NULL },
  986.         { "JMP",    jmpva,      variantCount(jmpva),    TRUE,   NULL },
  987.         { "JSR",    jsrva,      variantCount(jsrva),    TRUE,   NULL },
  988.         { "LEA",    leava,      variantCount(leava),    TRUE,   NULL },
  989.         { "LINK",   linkva,     variantCount(linkva),   TRUE,   NULL },
  990.         { "LSL",    lslva,      variantCount(lslva),    TRUE,   NULL },
  991.         { "LSR",    lsrva,      variantCount(lsrva),    TRUE,   NULL },
  992.         { "MOVE",   moveva,     variantCount(moveva),   TRUE,   NULL },
  993.         { "MOVEA",  moveava,    variantCount(moveava),  TRUE,   NULL },
  994.         { "MOVEC",  movecva,    variantCount(movecva),  TRUE,   NULL },
  995.         { "MOVEM",  NULL,       0,                      FALSE,  movem},
  996.         { "MOVEP",  movepva,    variantCount(movepva),  TRUE,   NULL },
  997.         { "MOVEQ",  moveqva,    variantCount(moveqva),  TRUE,   NULL },
  998.         { "MOVES",  movesva,    variantCount(movesva),  TRUE,   NULL },
  999.         { "MULS",   mulsva,     variantCount(mulsva),   TRUE,   NULL },
  1000.         { "MULU",   muluva,     variantCount(muluva),   TRUE,   NULL },
  1001.         { "NBCD",   nbcdva,     variantCount(nbcdva),   TRUE,   NULL },
  1002.         { "NEG",    negva,      variantCount(negva),    TRUE,   NULL },
  1003.         { "NEGX",   negxva,     variantCount(negxva),   TRUE,   NULL },
  1004.         { "NOP",    nopva,      variantCount(nopva),    TRUE,   NULL },
  1005.         { "NOT",    notva,      variantCount(notva),    TRUE,   NULL },
  1006.         { "OR",     orva,       variantCount(orva),     TRUE,   NULL },
  1007.         { "ORG",    NULL,       0,                      FALSE,  org  },
  1008.         { "ORI",    oriva,      variantCount(oriva),    TRUE,   NULL },
  1009.         { "PACK",   NULL,       0,                      FALSE,  pack },
  1010.         { "PEA",    peava,      variantCount(peava),    TRUE,   NULL },
  1011.         { "REG",    NULL,       0,                      FALSE,  reg  },
  1012.         { "RESET",  resetva,    variantCount(resetva),  TRUE,   NULL },
  1013.         { "ROL",    rolva,      variantCount(rolva),    TRUE,   NULL },
  1014.         { "ROR",    rorva,      variantCount(rorva),    TRUE,   NULL },
  1015.         { "ROXL",   roxlva,     variantCount(roxlva),   TRUE,   NULL },
  1016.         { "ROXR",   roxrva,     variantCount(roxrva),   TRUE,   NULL },
  1017.         { "RTD",    rtdva,      variantCount(rtdva),    TRUE,   NULL },
  1018.         { "RTE",    rteva,      variantCount(rteva),    TRUE,   NULL },
  1019.         { "RTM",    NULL,       0,                      FALSE,  rtm  },
  1020.         { "RTR",    rtrva,      variantCount(rtrva),    TRUE,   NULL },
  1021.         { "RTS",    rtsva,      variantCount(rtsva),    TRUE,   NULL },
  1022.         { "SBCD",   sbcdva,     variantCount(sbcdva),   TRUE,   NULL },
  1023.         { "SCC",    sccva,      variantCount(sccva),    TRUE,   NULL },
  1024.         { "SCS",    scsva,      variantCount(scsva),    TRUE,   NULL },
  1025.         { "SEQ",    seqva,      variantCount(seqva),    TRUE,   NULL },
  1026.         { "SET",    NULL,       0,                      FALSE,  set  },
  1027.         { "SF",     sfva,       variantCount(sfva),     TRUE,   NULL },
  1028.         { "SGE",    sgeva,      variantCount(sgeva),    TRUE,   NULL },
  1029.         { "SGT",    sgtva,      variantCount(sgtva),    TRUE,   NULL },
  1030.         { "SHI",    shiva,      variantCount(shiva),    TRUE,   NULL },
  1031.         { "SHS",    sccva,      variantCount(sccva),    TRUE,   NULL },
  1032.         { "SLE",    sleva,      variantCount(sleva),    TRUE,   NULL },
  1033.         { "SLO",    scsva,      variantCount(scsva),    TRUE,   NULL },
  1034.         { "SLS",    slsva,      variantCount(slsva),    TRUE,   NULL },
  1035.         { "SLT",    sltva,      variantCount(sltva),    TRUE,   NULL },
  1036.         { "SMI",    smiva,      variantCount(smiva),    TRUE,   NULL },
  1037.         { "SNE",    sneva,      variantCount(sneva),    TRUE,   NULL },
  1038.         { "SPL",    splva,      variantCount(splva),    TRUE,   NULL },
  1039.         { "ST",     stva,       variantCount(stva),     TRUE,   NULL },
  1040.         { "STOP",   stopva,     variantCount(stopva),   TRUE,   NULL },
  1041.         { "SUB",    subva,      variantCount(subva),    TRUE,   NULL },
  1042.         { "SUBA",   subava,     variantCount(subava),   TRUE,   NULL },
  1043.         { "SUBI",   subiva,     variantCount(subiva),   TRUE,   NULL },
  1044.         { "SUBQ",   subqva,     variantCount(subqva),   TRUE,   NULL },
  1045.         { "SUBX",   subxva,     variantCount(subxva),   TRUE,   NULL },
  1046.         { "SVC",    svcva,      variantCount(svcva),    TRUE,   NULL },
  1047.         { "SVS",    svsva,      variantCount(svsva),    TRUE,   NULL },
  1048.         { "SWAP",   swapva,     variantCount(swapva),   TRUE,   NULL },
  1049.         { "TAS",    tasva,      variantCount(tasva),    TRUE,   NULL },
  1050.         { "TRAP",   trapva,     variantCount(trapva),   TRUE,   NULL },
  1051.         { "TRAPCC", trapccva,   variantCount(trapccva), FALSE,  trapcc },
  1052.         { "TRAPCS", trapcsva,   variantCount(trapcsva), FALSE,  trapcc },
  1053.         { "TRAPEQ", trapeqva,   variantCount(trapeqva), FALSE,  trapcc },
  1054.         { "TRAPF",  trapfva,    variantCount(trapfva),  FALSE,  trapcc },
  1055.         { "TRAPGE", trapgeva,   variantCount(trapgeva), FALSE,  trapcc },
  1056.         { "TRAPGT", trapgtva,   variantCount(trapgtva), FALSE,  trapcc },
  1057.         { "TRAPHI", traphiva,   variantCount(traphiva), FALSE,  trapcc },
  1058.         { "TRAPHS", trapccva,   variantCount(trapccva), FALSE,  trapcc },
  1059.         { "TRAPLE", trapleva,   variantCount(trapleva), FALSE,  trapcc },
  1060.         { "TRAPLO", trapcsva,   variantCount(trapcsva), FALSE,  trapcc },
  1061.         { "TRAPLS", traplsva,   variantCount(traplsva), FALSE,  trapcc },
  1062.         { "TRAPLT", trapltva,   variantCount(trapltva), FALSE,  trapcc },
  1063.         { "TRAPMI", trapmiva,   variantCount(trapmiva), FALSE,  trapcc },
  1064.         { "TRAPNE", trapneva,   variantCount(trapneva), FALSE,  trapcc },
  1065.         { "TRAPPL", trapplva,   variantCount(trapplva), FALSE,  trapcc },
  1066.         { "TRAPT",  traptva,    variantCount(traptva),  FALSE,  trapcc },
  1067.         { "TRAPV",  trapvva,    variantCount(trapvva),  TRUE,   NULL },
  1068.         { "TRAPVC", trapvcva,   variantCount(trapvcva), FALSE,  trapcc },
  1069.         { "TRAPVS", trapvsva,   variantCount(trapvsva), FALSE,  trapcc },
  1070.         { "TST",    tstva,      variantCount(tstva),    TRUE,   NULL },
  1071.         { "UNLK",   unlkva,     variantCount(unlkva),   TRUE,   NULL },
  1072.         { "UNPK",   NULL,       0,                      FALSE,  unpack }
  1073.     };
  1074.  
  1075.  
  1076. /* Declare a global variable containing the size of the instruction table */
  1077.  
  1078. short int tableSize = sizeof(instTable)/sizeof(instruction);
  1079.  
  1080.