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.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-05  |  3.7 KB  |  143 lines  |  [TEXT/KAHL]

  1. #DEFINE fLAGSnz(Z)\
  2. FLAGS &={$7e}(zer+neg); IF (Z==0) FLAGS{$7c}=zer; ELSE FLAGS {$7c}=Z&128
  3.  
  4. #DEFINE ora(X) A{$7c}=bYTEaT(X()); fLAGSnz(A)
  5. #DEFINE asl(X) \
  6. REGISTER WORD ADDR;\
  7. REGISTER BYTE TBYTE;\
  8. ADDR = X();\
  9. TBYTE = bYTEaT(ADDR);\
  10. FLAGS &={$7e}(car+neg+zer);\
  11. IF (TBYTE&128) FLAGS {$7c}= car;\
  12. IF (TBYTE=TBYTE<<1) FLAGS {$7c}=TBYTE&128; ELSE FLAGS {$7c}=zer;\
  13. ram[ADDR] = TBYTE
  14. #DEFINE lsr(X) \
  15. REGISTER WORD ADDR;\
  16. REGISTER BYTE TBYTE;\
  17. ADDR=X();\
  18. TBYTE=bYTEaT(ADDR);\
  19. FLAGS &={$7e}(car+neg+zer);\
  20. FLAGS {$7c}=TBYTE&1;\
  21. IF (TBYTE=TBYTE>>1); ELSE FLAGS {$7c}=zer;\
  22. ram[ADDR]=TBYTE
  23. #DEFINE bcl(X) \
  24. REGISTER BYTE TBYTE;\
  25. IF (FLAGS&X) PC++; \
  26. ELSE {$7b}\
  27. TBYTE=iMMEDIATEbYTE();\
  28. PC++;\
  29. IF (TBYTE&128) {$7b}\
  30. PC-=(TBYTE^255)+1;\
  31. RETURN; {$7d}\
  32. PC +=TBYTE; {$7d}
  33. #DEFINE bst(X) \
  34. REGISTER BYTE TBYTE;\
  35. IF (FLAGS&X) {$7b}\
  36. TBYTE=iMMEDIATEbYTE();\
  37. PC++;\
  38. IF (TBYTE&128) {$7b}\
  39. PC-=(TBYTE^255)+1;\
  40. RETURN; {$7d}\
  41. PC +=TBYTE; {$7d}\
  42. ELSE PC++;
  43. #DEFINE clr(X) FLAGS &={$7e}X; RETURN
  44. #DEFINE set(X) FLAGS {$7c}= X; RETURN
  45. #DEFINE and(X) A &= bYTEaT(X()); fLAGSnz(A)
  46. #DEFINE bit(X) \
  47. REGISTER BYTE TBYTE;\
  48. TBYTE=bYTEaT(X());\
  49. FLAGS &={$7e}(zer+neg+ovf);\
  50. IF ((A&TBYTE)==0) FLAGS {$7c}=zer;\
  51. FLAGS {$7c}=TBYTE&(128+64)
  52. #DEFINE rol(X) \
  53. REGISTER WORD ADDR;\
  54. REGISTER BYTE TBYTE;\
  55. ADDR=X();\
  56. TBYTE=bYTEaT(ADDR);\
  57. IF (FLAGS&car) {$7b}\
  58. IF (TBYTE&128);\
  59. ELSE FLAGS &={$7e}car;\
  60. TBYTE=(TBYTE<<1){$7c}1; {$7d}\
  61. ELSE {$7b}\
  62. IF (TBYTE&128) FLAGS{$7c}=car;\
  63. TBYTE=TBYTE<<1; {$7d}\
  64. fLAGSnz(TBYTE);\
  65. ram[ADDR]=TBYTE
  66. #DEFINE eor(X) A^=bYTEaT(X());fLAGSnz(A)
  67. #DEFINE adc(X) \
  68. REGISTER WORD DATA;\
  69. DATA=bYTEaT(X());\
  70. IF (FLAGS&dec) {$7b}\
  71. DATA = BCD2DEC[DATA]+BCD2DEC[A]+((FLAGS&car)?1:0);\
  72. FLAGS &= {$7e}(car+ovf+neg+zer);\
  73. IF (DATA>99) {$7b}FLAGS{$7c}=car+ovf;DATA -=100;{$7d}\
  74. IF (DATA==0) FLAGS{$7c}=zer; ELSE FLAGS {$7c}=DATA&128;\
  75. A=DEC2BCD[DATA];{$7d}\
  76. ELSE {$7b}\
  77. DATA += A+((FLAGS&car)?1:0);\
  78. FLAGS &= {$7e}(car+ovf+neg+zer);\
  79. IF (DATA>255) {$7b}FLAGS{$7c}=ovf+car; DATA &=255;{$7d}\
  80. IF (DATA==0) FLAGS{$7c}=zer; ELSE FLAGS {$7c}=DATA&128;\
  81. A=DATA;{$7d}
  82. #DEFINE ror(X) \
  83. REGISTER WORD ADDR;\
  84. REGISTER BYTE TBYTE;\
  85. ADDR=X(); TBYTE=bYTEaT(ADDR);\
  86. IF(FLAGS&car){$7b}IF(TBYTE&1); ELSE FLAGS&={$7e}car;TBYTE=(TBYTE>>1){$7c}128;{$7d}\
  87. ELSE{$7b}IF(TBYTE&1) FLAGS{$7c}=car;TBYTE=TBYTE>>1;{$7d}\
  88. fLAGSnz(TBYTE); ram[ADDR]=TBYTE
  89. #DEFINE sta(X) ram[X()]=A
  90. #DEFINE sty(X) ram[X()]=Y
  91. #DEFINE stx(Y) ram[Y()]=X
  92. #DEFINE cpy(X) \
  93. REGISTER BYTE TBYTE;\
  94. TBYTE=bYTEaT(X()); FLAGS &={$7e}(car+zer+neg);\
  95. IF (Y==TBYTE) FLAGS {$7c}=car+zer;\
  96. ELSE IF (Y>TBYTE) FLAGS {$7c}=car;\
  97. ELSE FLAGS {$7c}=neg
  98. #DEFINE cpx(Y) \
  99. REGISTER BYTE TBYTE;\
  100. TBYTE=bYTEaT(Y()); FLAGS &={$7e}(car+zer+neg);\
  101. IF (X==TBYTE) FLAGS {$7c}=car+zer;\
  102. ELSE IF (X>TBYTE) FLAGS {$7c}=car;\
  103. ELSE FLAGS {$7c}=neg
  104. #DEFINE cmp(X) \
  105. REGISTER BYTE TBYTE;\
  106. TBYTE=bYTEaT(X()); FLAGS &={$7e}(car+zer+neg);\
  107. IF (A==TBYTE) FLAGS {$7c}=car+zer;\
  108. ELSE IF (A>TBYTE) FLAGS {$7c}=car;\
  109. ELSE FLAGS {$7c}=neg
  110. #DEFINE sbc(X) \
  111. REGISTER INT DATA;\
  112. DATA=bYTEaT(X());\
  113. IF (FLAGS&dec) {$7b}\
  114. DATA = BCD2DEC[A]-BCD2DEC[DATA]-((FLAGS&car)?0:1);\
  115. FLAGS &= {$7e}(car+zer+neg+ovf);\
  116. IF (DATA==0) FLAGS {$7c}=zer+car;\
  117. ELSE IF (DATA>0) FLAGS {$7c}=car;\
  118. ELSE {$7b}FLAGS{$7c}=neg; DATA +=100;{$7d}\
  119. A=DEC2BCD[DATA];{$7d}\
  120. ELSE {$7b}\
  121. DATA = A-DATA-((FLAGS&car)?0:1);\
  122. FLAGS &={$7e}(car+zer+ovf+neg);\
  123. IF (DATA==0) FLAGS {$7c}=zer+car;\
  124. ELSE IF (DATA>0) FLAGS {$7c}=car;\
  125. ELSE FLAGS{$7c}=ovf;\
  126. FLAGS {$7c}=DATA&128;\
  127. A=DATA&255;{$7d}
  128. #DEFINE decr(X) \
  129. REGISTER WORD ADDR; REGISTER BYTE TBYTE;\
  130. ADDR=X(); TBYTE=bYTEaT(ADDR);\
  131. FLAGS &={$7e}(zer+neg);\
  132. IF (--TBYTE) FLAGS {$7c}=TBYTE&128; ELSE FLAGS{$7c}=zer;\
  133. ram[ADDR]=TBYTE
  134. #DEFINE incr(X) \
  135. REGISTER WORD ADDR; REGISTER BYTE TBYTE;\
  136. ADDR=X(); TBYTE=bYTEaT(ADDR);\
  137. FLAGS &={$7e}(zer+neg);\
  138. IF (++TBYTE) FLAGS {$7c}=TBYTE&128; ELSE FLAGS{$7c}=zer;\
  139. ram[ADDR]=TBYTE
  140. #DEFINE lda(X) A=bYTEaT(X()); fLAGSnz(A)
  141. #DEFINE ldy(X) Y=bYTEaT(X()); fLAGSnz(Y)
  142. #DEFINE ldx(Y) X=bYTEaT(Y()); fLAGSnz(X)
  143.