home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / crossplatform / emulators / MacOS / mac64-04.hqx / MAC64-04.SEA / C64 / SOURCE / Instructions.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-01  |  12.4 KB  |  378 lines  |  [TEXT/KAHL]

  1. /*
  2.     cOMMODORE 64 eMULATOR V0.4      eARLE f. pHILHOWER iii 
  3.     cOPYRIGHT (c) 1993-4            (ST916W9R@DUNX1.OCS.DREXEL.EDU)
  4.  
  5.     tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  6.     IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
  7.     THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2 OF THE lICENSE, OR
  8.     (AT YOUR OPTION) ANY LATER VERSION.
  9.  
  10.     tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
  11.     BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
  12.     merchantability OR fitness for a particular purpose.  sEE THE
  13.     gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
  14.  
  15.     yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
  16.     ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE fREE sOFTWARE
  17.     fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
  18. */
  19.  
  20. #INCLUDE "pROCESSOR.H"
  21. #INCLUDE "iNSTRUCTIONS.H"
  22. #INCLUDE "sTACK.H"
  23. #INCLUDE "mODES.H"
  24. #INCLUDE "eRROR.H"
  25.  
  26. /*rATHER THAN USING MULTIPLICATION AND DIVISION TO DO THE bcd MATH, IT'S IMPLEMENTED
  27.  *WITH LOOKUP TABLES--FASTER AND EASIER TO CODE IN 68k ASSEMBLY.
  28.  */
  29. UNSIGNED CHARBCD2DEC[256]=
  30. {$7b}
  31. /* 0X00*/0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
  32. /* 0X10 */10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
  33. /* 0X20 */20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,
  34. /* 0X30 */30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
  35. /* 0X40 */40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,
  36. /* 0X50 */50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,
  37. /* 0X60 */60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,
  38. /* 0X70 */70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,
  39. /* 0X80 */80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
  40. /* 0X90 */90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,
  41. /* 0Xa0 */100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,
  42. /* 0Xb0 */110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
  43. /* 0Xc0 */120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,
  44. /* 0Xd0 */130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,
  45. /* 0Xe0 */140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,
  46. /* 0Xf0 */150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165
  47. {$7d};
  48.  
  49. UNSIGNED CHARDEC2BCD[100]=
  50. {$7b}
  51. 0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,
  52. 0X10,0X11,0X12,0X13,0X14,0X15,0X16,0X17,0X18,0X19,
  53. 0X20,0X21,0X22,0X23,0X24,0X25,0X26,0X27,0X28,0X29,
  54. 0X30,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38,0X39,
  55. 0X40,0X41,0X42,0X43,0X44,0X45,0X46,0X47,0X48,0X49,
  56. 0X50,0X51,0X52,0X53,0X54,0X55,0X56,0X57,0X58,0X59,
  57. 0X60,0X61,0X62,0X63,0X64,0X65,0X66,0X67,0X68,0X69,
  58. 0X70,0X71,0X72,0X73,0X74,0X75,0X76,0X77,0X78,0X79,
  59. 0X80,0X81,0X82,0X83,0X84,0X85,0X86,0X87,0X88,0X89,
  60. 0X90,0X91,0X92,0X93,0X94,0X95,0X96,0X97,0X98,0X99
  61. {$7d};
  62.  
  63. VOID I00() {$7b}
  64. pUSHwORD(PC);
  65. FLAGS {$7c}= bkc;
  66. pUSH(FLAGS);
  67. FLAGS &= {$7e}bkc;
  68. PC=wORDaT(iRQtO); {$7d}
  69. VOID I01() {$7b} ora(iNDIRECTxaDDR); PC++; {$7d}
  70. VOID I05() {$7b} ora(zEROpAGEaDDR); PC++; {$7d}
  71. VOID I06() {$7b} asl(zEROpAGEaDDR); PC++; {$7d}
  72. VOID I08() {$7b} pUSH(FLAGS); {$7d}
  73. VOID I09() {$7b} A {$7c}= iMMEDIATEbYTE(); fLAGSnz(A); PC++; {$7d}
  74. VOID I0A() {$7b}
  75. IF (A&128) FLAGS {$7c}= car;
  76. ELSE FLAGS &= {$7e}car;
  77. A=A<<1;
  78. fLAGSnz(A); {$7d}
  79. VOID I0D() {$7b} ora(aBSOLUTEaDDR); PC+=2; {$7d}
  80. VOID I0E() {$7b} asl(aBSOLUTEaDDR); PC+=2; {$7d}
  81. VOID I10() {$7b} bcl(neg); {$7d}
  82. VOID I11() {$7b} ora(iNDIRECTyaDDR); PC++; {$7d}
  83. VOID I15() {$7b} ora(zEROpAGExaDDR); PC++; {$7d}
  84. VOID I16() {$7b} asl(zEROpAGExaDDR); PC++; {$7d}
  85. VOID I18() {$7b} clr(car); {$7d}
  86. VOID I19() {$7b} ora(aBSOLUTEyaDDR); PC+=2; {$7d}
  87. VOID I1D() {$7b} ora(aBSOLUTExaDDR); PC+=2; {$7d}
  88. VOID I1E() {$7b} asl(aBSOLUTExaDDR); PC+=2; {$7d}
  89. VOID I20() {$7b} pUSHwORD(PC+1); PC=wORDaT(PC); {$7d}
  90. VOID I21() {$7b} and(iNDIRECTxaDDR); PC++; {$7d}
  91. VOID I24() {$7b} bit(zEROpAGEaDDR); PC++; {$7d}
  92. VOID I25() {$7b} and(zEROpAGEaDDR); PC++; {$7d}
  93. VOID I26() {$7b} rol(zEROpAGEaDDR); PC++; {$7d}
  94. VOID I28() {$7b} FLAGS = pOP(); {$7d}
  95. VOID I29() {$7b} A &= iMMEDIATEbYTE(); fLAGSnz(A); PC++; {$7d}
  96. VOID I2A() {$7b}
  97. IF (FLAGS&car) {$7b}
  98. IF ((A&128)==0) FLAGS &={$7e}car;
  99. A=(A<<1){$7c}1; {$7d}
  100. ELSE {$7b}
  101. IF(A&128)FLAGS{$7c}=car;
  102. A=A<<1; {$7d}
  103. fLAGSnz(A);
  104. {$7d}
  105. VOID I2C() {$7b} bit(aBSOLUTEaDDR); PC+=2; {$7d}
  106. VOID I2D() {$7b} and(aBSOLUTEaDDR); PC+=2; {$7d}
  107. VOID I2E() {$7b} rol(aBSOLUTEaDDR); PC+=2; {$7d}
  108. VOID I30() {$7b} bst(neg); {$7d}
  109. VOID I31() {$7b} and(iNDIRECTyaDDR); PC++; {$7d}
  110. VOID I35() {$7b} and(zEROpAGExaDDR); PC++; {$7d}
  111. VOID I36() {$7b} rol(zEROpAGExaDDR); PC++; {$7d}
  112. VOID I38() {$7b} set(car); {$7d}
  113. VOID I39() {$7b} and(aBSOLUTEyaDDR); PC+=2; {$7d}
  114. VOID I3D() {$7b} and(aBSOLUTExaDDR); PC+=2; {$7d}
  115. VOID I3E() {$7b} rol(aBSOLUTExaDDR); PC+=2; {$7d}
  116. VOID I40() {$7b} FLAGS=pOP(); pOPwORD(PC); {$7d}
  117. VOID I41() {$7b} eor(iNDIRECTxaDDR); PC++; {$7d}
  118. VOID I45() {$7b} eor(zEROpAGEaDDR); PC++; {$7d}
  119. VOID I46() {$7b} lsr(zEROpAGEaDDR); PC++; {$7d}
  120. VOID I48() {$7b} pUSH(A); {$7d}
  121. VOID I49() {$7b} A ^= iMMEDIATEbYTE(); fLAGSnz(A); PC++; {$7d}
  122. VOID I4A() {$7b} 
  123. FLAGS &={$7e}(car+neg+zer);
  124. IF (A&1) FLAGS {$7c}=car;
  125. IF (A=A>>1); ELSE FLAGS {$7c}=zer;
  126. {$7d}
  127. VOID I4C() {$7b} PC=wORDaT(PC); {$7d}
  128. VOID I4D() {$7b} eor(aBSOLUTEaDDR); PC+=2; {$7d}
  129. VOID I4E() {$7b} lsr(aBSOLUTEaDDR); PC+=2; {$7d}
  130. VOID I50() {$7b} bcl(ovf); {$7d}
  131. VOID I51() {$7b} eor(iNDIRECTyaDDR); PC++; {$7d}
  132. VOID I55() {$7b} eor(zEROpAGExaDDR); PC++; {$7d}
  133. VOID I56() {$7b} lsr(zEROpAGExaDDR); PC++; {$7d}
  134. VOID I58() {$7b} clr(int); {$7d}
  135. VOID I59() {$7b} eor(aBSOLUTEyaDDR); PC+=2; {$7d}
  136. VOID I5D() {$7b} eor(aBSOLUTExaDDR); PC+=2; {$7d}
  137. VOID I5E() {$7b} lsr(aBSOLUTExaDDR); PC+=2; {$7d}
  138. VOID I60() {$7b} pOPwORD(PC); PC++; {$7d}
  139. VOID I61() {$7b} adc(iNDIRECTxaDDR); PC++; {$7d}
  140. VOID I65() {$7b} adc(zEROpAGEaDDR); PC++; {$7d}
  141. VOID I66() {$7b} ror(zEROpAGEaDDR); PC++; {$7d}
  142. VOID I68() {$7b} A=pOP(); fLAGSnz(A); {$7d}
  143. VOID I69() {$7b}
  144. REGISTER WORD DATA;
  145. DATA=iMMEDIATEbYTE();
  146. IF (FLAGS&dec) {$7b}
  147. DATA = BCD2DEC[DATA]+BCD2DEC[A]+((FLAGS&car)?1:0);
  148. FLAGS &= {$7e}(car+ovf+neg+zer);
  149. IF (DATA>99) {$7b}
  150. FLAGS{$7c}=car+ovf;
  151. DATA -=100; {$7d}
  152. IF (DATA==0) FLAGS {$7c}= zer;
  153. ELSE FLAGS {$7c}= DATA&128;
  154. A=DEC2BCD[DATA];{$7d}
  155. ELSE {$7b}
  156. DATA += A+((FLAGS&car)?1:0);
  157. FLAGS &= {$7e}(car+ovf+neg+zer);
  158. IF (DATA>255) {$7b}
  159. FLAGS{$7c}=ovf+car;
  160. DATA &=255; {$7d}
  161. IF (DATA==0) FLAGS {$7c}= zer;
  162. ELSE FLAGS {$7c}= DATA&128;
  163. A=DATA; {$7d}
  164. PC++;
  165. {$7d}
  166. VOID I6A() {$7b}
  167. IF (FLAGS&car) {$7b}
  168. IF ((A&1)==0) FLAGS &={$7e}car;
  169. A=(A>>1){$7c}128; {$7d}
  170. ELSE {$7b}
  171. IF(A&1) FLAGS{$7c}=car;
  172. A=A>>1; {$7d}
  173. fLAGSnz(A);
  174. {$7d}
  175. VOID I6C() {$7b} REGISTER WORD TA; TA=wORDaT(PC); PC=wORDaT(TA); {$7d}
  176. VOID I6D() {$7b} adc(aBSOLUTEaDDR); PC+=2; {$7d}
  177. VOID I6E() {$7b} ror(aBSOLUTEaDDR); PC+=2; {$7d}
  178. VOID I70() {$7b} bst(ovf); {$7d}
  179. VOID I71() {$7b} adc(iNDIRECTyaDDR); PC++; {$7d}
  180. VOID I75() {$7b} adc(zEROpAGExaDDR); PC++; {$7d}
  181. VOID I76() {$7b} ror(zEROpAGExaDDR); PC++; {$7d}
  182. VOID I78() {$7b} set(int); {$7d}
  183. VOID I79() {$7b} adc(aBSOLUTEyaDDR); PC+=2; {$7d}
  184. VOID I7D() {$7b} adc(aBSOLUTExaDDR); PC+=2; {$7d}
  185. VOID I7E() {$7b} ror(aBSOLUTExaDDR); PC+=2; {$7d}
  186. VOID I81() {$7b} sta(iNDIRECTxaDDR); PC++; {$7d}
  187. VOID I84() {$7b} sty(zEROpAGEaDDR); PC++; {$7d}
  188. VOID I85() {$7b} sta(zEROpAGEaDDR); PC++; {$7d}
  189. VOID I86() {$7b} stx(zEROpAGEaDDR); PC++; {$7d}
  190. VOID I88() {$7b} Y--; fLAGSnz(Y); {$7d}
  191. VOID I8A() {$7b} A=X; fLAGSnz(A); {$7d}
  192. VOID I8C() {$7b} sty(aBSOLUTEaDDR); PC+=2; {$7d}
  193. VOID I8D() {$7b} sta(aBSOLUTEaDDR); PC+=2; {$7d}
  194. VOID I8E() {$7b} stx(aBSOLUTEaDDR); PC+=2; {$7d}
  195. VOID I90() {$7b} bcl(car); {$7d}
  196. VOID I91() {$7b} sta(iNDIRECTyaDDR); PC++; {$7d}
  197. VOID I94() {$7b} sty(zEROpAGExaDDR); PC++; {$7d}
  198. VOID I95() {$7b} sta(zEROpAGExaDDR); PC++; {$7d}
  199. VOID I96() {$7b} stx(zEROpAGEyaDDR); PC++; {$7d}
  200. VOID I98() {$7b} A=Y; fLAGSnz(A); {$7d}
  201. VOID I99() {$7b} sta(aBSOLUTEyaDDR); PC+=2; {$7d}
  202. VOID I9A() {$7b} SP=X; {$7d}
  203. VOID I9D() {$7b} sta(aBSOLUTExaDDR); PC+=2; {$7d}
  204. VOID IA0() {$7b} Y=iMMEDIATEbYTE(); fLAGSnz(Y); PC++; {$7d}
  205. VOID IA1() {$7b} lda(iNDIRECTxaDDR); PC++; {$7d}
  206. VOID IA2() {$7b} X=iMMEDIATEbYTE(); fLAGSnz(X); PC++; {$7d}
  207. VOID IA4() {$7b} ldy(zEROpAGEaDDR); PC++; {$7d}
  208. VOID IA5() {$7b} lda(zEROpAGEaDDR); PC++; {$7d}
  209. VOID IA6() {$7b} ldx(zEROpAGEaDDR); PC++; {$7d}
  210. VOID IA8() {$7b} Y=A; fLAGSnz(Y); {$7d}
  211. VOID IA9() {$7b} A=iMMEDIATEbYTE(); fLAGSnz(A); PC++; {$7d}
  212. VOID IAA() {$7b} X=A; fLAGSnz(X); {$7d}
  213. VOID IAC() {$7b} ldy(aBSOLUTEaDDR); PC+=2; {$7d}
  214. VOID IAD() {$7b} lda(aBSOLUTEaDDR); PC+=2; {$7d}
  215. VOID IAE() {$7b} ldx(aBSOLUTEaDDR); PC+=2; {$7d}
  216. VOID IB0() {$7b} bst(car); {$7d}
  217. VOID IB1() {$7b} lda(iNDIRECTyaDDR); PC++; {$7d}
  218. VOID IB4() {$7b} ldy(zEROpAGExaDDR); PC++; {$7d}
  219. VOID IB5() {$7b} lda(zEROpAGExaDDR); PC++; {$7d}
  220. VOID IB6() {$7b} ldx(zEROpAGEyaDDR); PC++; {$7d}
  221. VOID IB8() {$7b} clr(ovf); {$7d}
  222. VOID IB9() {$7b} lda(aBSOLUTEyaDDR); PC+=2; {$7d}
  223. VOID IBA() {$7b} X=SP; {$7d}
  224. VOID IBC() {$7b} ldy(aBSOLUTExaDDR); PC+=2; {$7d}
  225. VOID IBD() {$7b} lda(aBSOLUTExaDDR); PC+=2; {$7d}
  226. VOID IBE() {$7b} ldx(aBSOLUTEyaDDR); PC+=2; {$7d}
  227. VOID IC0() {$7b}
  228. REGISTER BYTE TBYTE;
  229. TBYTE=iMMEDIATEbYTE();
  230. FLAGS &={$7e}(car+zer+neg);
  231. IF (Y==TBYTE) FLAGS {$7c}=car+zer;
  232. ELSE IF (Y>TBYTE) FLAGS {$7c}=car;
  233. ELSE FLAGS {$7c}=neg;
  234. PC++;
  235. {$7d}
  236. VOID IC1() {$7b} cmp(iNDIRECTxaDDR); PC++; {$7d}
  237. VOID IC4() {$7b} cpy(zEROpAGEaDDR); PC++; {$7d}
  238. VOID IC5() {$7b} cmp(zEROpAGEaDDR); PC++; {$7d}
  239. VOID IC6() {$7b} decr(zEROpAGEaDDR); PC++; {$7d}
  240. VOID IC8() {$7b} Y++; fLAGSnz(Y); {$7d}
  241. VOID IC9() {$7b}
  242. REGISTER BYTE TBYTE;
  243. TBYTE=iMMEDIATEbYTE();
  244. FLAGS &={$7e}(car+zer+neg);
  245. IF (A==TBYTE) FLAGS {$7c}=car+zer;
  246. ELSE IF (A>TBYTE) FLAGS {$7c}=car;
  247. ELSE FLAGS {$7c}=neg;
  248. PC++;
  249. {$7d}
  250. VOID ICA() {$7b} X--; fLAGSnz(X); {$7d}
  251. VOID ICC() {$7b} cpy(aBSOLUTEaDDR); PC+=2; {$7d}
  252. VOID ICD() {$7b} cmp(aBSOLUTEaDDR); PC+=2; {$7d}
  253. VOID ICE() {$7b} decr(aBSOLUTEaDDR); PC+=2; {$7d}
  254. VOID ID0() {$7b} bcl(zer); {$7d}
  255. VOID ID1() {$7b} cmp(iNDIRECTyaDDR); PC++; {$7d}
  256. VOID ID5() {$7b} cmp(zEROpAGExaDDR); PC++; {$7d}
  257. VOID ID6() {$7b} decr(zEROpAGExaDDR); PC++; {$7d}
  258. VOID ID8() {$7b} clr(dec); {$7d}
  259. VOID ID9() {$7b} cmp(aBSOLUTEyaDDR); PC+=2; {$7d}
  260. VOID IDD() {$7b} cmp(aBSOLUTExaDDR); PC+=2; {$7d}
  261. VOID IDE() {$7b} decr(aBSOLUTExaDDR); PC+=2; {$7d}
  262. VOID IE0() {$7b}
  263. REGISTER BYTE TBYTE;
  264. TBYTE=iMMEDIATEbYTE();
  265. FLAGS &={$7e}(car+zer+neg);
  266. IF (X==TBYTE) FLAGS {$7c}=car+zer;
  267. ELSE IF (X>TBYTE) FLAGS {$7c}=car;
  268. ELSE FLAGS {$7c}=neg;
  269. PC++;
  270. {$7d}
  271. VOID IE1() {$7b} sbc(iNDIRECTxaDDR); PC++; {$7d}
  272. VOID IE4() {$7b} cpx(zEROpAGEaDDR); PC++; {$7d}
  273. VOID IE5() {$7b} sbc(zEROpAGEaDDR); PC++; {$7d}
  274. VOID IE6() {$7b} incr(zEROpAGEaDDR); PC++; {$7d}
  275. VOID IE8() {$7b} X++; fLAGSnz(X); {$7d}
  276. VOID IE9() {$7b}
  277. REGISTER INT DATA;
  278. DATA=iMMEDIATEbYTE();
  279. IF (FLAGS&dec) {$7b}
  280. DATA = BCD2DEC[A]-BCD2DEC[DATA]-((FLAGS&car)?0:1);
  281. FLAGS &= {$7e}(car+zer+neg+ovf);
  282. IF (DATA==0) FLAGS {$7c}=zer+car;
  283. ELSE IF (DATA>0) FLAGS {$7c}=car;
  284. ELSE {$7b}
  285. FLAGS{$7c}=neg;
  286. DATA +=100; {$7d}
  287. A=DEC2BCD[DATA]; {$7d}
  288. ELSE {$7b}
  289. DATA = A-DATA-((FLAGS&car)?0:1);
  290. FLAGS &={$7e}(car+zer+ovf+neg);
  291. IF (DATA==0) FLAGS {$7c}= zer+car;
  292. ELSE IF (DATA>0) FLAGS {$7c}= car;
  293. ELSE FLAGS{$7c}=ovf;
  294. DATA &= 255;
  295. FLAGS {$7c}= DATA&128;
  296. A=DATA; {$7d}
  297. PC++; 
  298. {$7d}
  299. VOID IEA() {$7b}{$7d}
  300. VOID IEC() {$7b} cpx(aBSOLUTEaDDR); PC+=2; {$7d}
  301. VOID IED() {$7b} sbc(aBSOLUTEaDDR); PC+=2; {$7d}
  302. VOID IEE() {$7b} incr(aBSOLUTEaDDR); PC+=2; {$7d}
  303. VOID IF0() {$7b} bst(zer); {$7d}
  304. VOID IF1() {$7b} sbc(iNDIRECTyaDDR); PC++; {$7d}
  305. VOID IF5() {$7b} sbc(zEROpAGExaDDR); PC++; {$7d}
  306. VOID IF6() {$7b} incr(zEROpAGExaDDR); PC++; {$7d}
  307. VOID IF8() {$7b} set(dec); {$7d}
  308. VOID IF9() {$7b} sbc(aBSOLUTEyaDDR); PC+=2; {$7d}
  309. VOID IFD() {$7b} sbc(aBSOLUTExaDDR); PC+=2; {$7d}
  310. VOID IFE() {$7b} incr(aBSOLUTExaDDR); PC+=2; {$7d}
  311. VOID IFF() {$7b} tRAPeXECUTE(); {$7d}
  312.  
  313. VOID INI()
  314. {$7b}
  315. #IFDEF macsbug
  316. dEBUGsTR("\PnONiMPLEMENTED!");
  317. #ENDIF
  318. PC++;
  319. {$7d}
  320.  
  321. INT iNSTRUCTIONiNITIALIZE()
  322. {$7b}
  323. RETURN KnOeRROR;
  324. {$7d}
  325.  
  326. VOID (* INSTRUCT[256]) () = {$7b}
  327. I00, I01, INI, INI, INI, I05, I06, INI,
  328. I08, I09, I0A, INI, INI, I0D, I0E, INI,
  329. I10, I11, INI, INI, INI, I15, I16, INI,
  330. I18, I19, INI, INI, INI, I1D, I1E, INI,
  331. I20, I21, INI, INI, I24, I25, I26, INI,
  332. I28, I29, I2A, INI, I2C, I2D, I2E, INI,
  333. I30, I31, INI, INI, INI, I35, I36, INI,
  334. I38, I39, INI, INI, INI, I3D, I3E, INI,
  335. I40, I41, INI, INI, INI, I45, I46, INI,
  336. I48, I49, I4A, INI, I4C, I4D, I4E, INI,
  337. I50, I51, INI, INI, INI, I55, I56, INI,
  338. I58, I59, INI, INI, INI, I5D, I5E, INI,
  339. I60, I61, INI, INI, INI, I65, I66, INI,
  340. I68, I69, I6A, INI, I6C, I6D, I6E, INI,
  341. I70, I71, INI, INI, INI, I75, I76, INI,
  342. I78, I79, INI, INI, INI, I7D, I7E, INI,
  343. INI, I81, INI, INI, I84, I85, I86, INI,
  344. I88, INI, I8A, INI, I8C, I8D, I8E, INI,
  345. I90, I91, INI, INI, I94, I95, I96, INI,
  346. I98, I99, I9A, INI, INI, I9D, INI, INI,
  347. IA0, IA1, IA2, INI, IA4, IA5, IA6, INI,
  348. IA8, IA9, IAA, INI, IAC, IAD, IAE, INI,
  349. IB0, IB1, INI, INI, IB4, IB5, IB6, INI,
  350. IB8, IB9, IBA, INI, IBC, IBD, IBE, INI,
  351. IC0, IC1, INI, INI, IC4, IC5, IC6, INI,
  352. IC8, IC9, ICA, INI, ICC, ICD, ICE, INI,
  353. ID0, ID1, INI, INI, INI, ID5, ID6, INI,
  354. ID8, ID9, INI, INI, INI, IDD, IDE, INI,
  355. IE0, IE1, INI, INI, IE4, IE5, IE6, INI,
  356. IE8, IE9, IEA, INI, IEC, IED, IEE, INI,
  357. IF0, IF1, INI, INI, INI, IF5, IF6, INI,
  358. IF8, IF9, INI, INI, INI, IFD, IFE, IFF{$7d};
  359.  
  360. BYTE CYCLETIME[256]={$7b}
  361. /*00*/7, 6, 0, 0, 0, 3, 5, 0, 3, 2, 2, 0, 0, 4, 6, 0,
  362. /*10*/3, 5, 0, 0, 0, 4, 6, 0, 2, 5, 0, 0, 0, 5, 7, 0,
  363. /*20*/6, 6, 0, 0, 3, 3, 5, 0, 4, 2, 2, 0, 4, 4, 6, 0,
  364. /*30*/3, 5, 0, 0, 0, 4, 6, 0, 2, 4, 0, 0, 0, 4, 7, 0,
  365. /*40*/6, 6, 0, 0, 0, 3, 5, 0, 3, 2, 2, 0, 3, 4, 6, 0,
  366. /*50*/3, 6, 0, 0, 0, 3, 6, 0, 2, 5, 0, 0, 0, 5, 7, 0,
  367. /*60*/6, 6, 0, 0, 0, 3, 5, 0, 4, 2, 2, 0, 5, 4, 6, 0,
  368. /*70*/3, 6, 0, 0, 0, 4, 6, 0, 2, 5, 0, 0, 0, 5, 7, 0,
  369. /*80*/0, 6, 0, 0, 6, 3, 3, 0, 2, 0, 2, 0, 4, 4, 4, 0,
  370. /*90*/2, 6, 0, 0, 4, 4, 4, 0, 2, 5, 2, 0, 0, 5, 0, 0,
  371. /*a0*/2, 6, 2, 0, 3, 3, 3, 0, 2, 2, 2, 0, 4, 4, 4, 0,
  372. /*b0*/3, 6, 0, 0, 4, 4, 4, 0, 2, 5, 2, 0, 5, 5, 5, 0,
  373. /*c0*/2, 6, 0, 0, 3, 3, 5, 0, 2, 2, 2, 0, 4, 4, 6, 0,
  374. /*d0*/3, 6, 0, 0, 0, 4, 6, 0, 2, 5, 0, 0, 0, 5, 7, 0,
  375. /*e0*/2, 6, 0, 0, 3, 3, 5, 0, 2, 2, 2, 0, 4, 4, 6, 0,
  376. /*f0*/3, 6, 0, 0, 0, 4, 6, 0, 2, 5, 0, 0, 0, 5, 7, 1 {$7d};
  377.  
  378.