Previous 15994 Revisions Next

r984 Sunday 16th September, 2007 at 16:34:31 UTC by Wilbert Pol
[H6280] H6280 cpu core fixes as submitted to mamedev.
[src/emu/cpu/h6280]6280dasm.c h6280.c h6280ops.h tblh6280.c

src/emu/cpu/h6280/h6280ops.h
r983r984
2929
3030#define TRANSLATED(addr)   ((h6280.mmr[(addr)>>13] << 13) | ((addr)&0x1fff))
3131#define CHANGE_PC         do { offs_t temp = TRANSLATED(PCW); change_pc(temp); } while (0)
32#define H6280_CYCLES(cyc)                                 \
33   {                                                \
34      h6280_ICount -= ((cyc) * h6280.clocks_per_cycle);         \
35      h6280.timer_value -= ((cyc) * h6280.clocks_per_cycle);      \
36   }
3237
3338#if LAZY_FLAGS
3439
r983r984
6671
6772#define DO_INTERRUPT(vector)                           \
6873{                                                \
69   h6280.extra_cycles += 7;   /* 7 cycles for an int */      \
74   H6280_CYCLES(7);   /* 7 cycles for an int */            \
7075   PUSH(PCH);                                       \
7176   PUSH(PCL);                                       \
7277   COMPOSE_P(0,_fB);                                 \
r983r984
7782   CHANGE_PC;                                       \
7883}
7984
80#define CHECK_IRQ_LINES                               \
81   if( !(P & _fI) )                                 \
85#define CHECK_AND_TAKE_IRQ_LINES                         \
86   if ( h6280.nmi_state != CLEAR_LINE ) {                  \
87      DO_INTERRUPT(H6280_NMI_VEC);                     \
88   }                                             \
89   else if( !(P & _fI) )                              \
8290   {                                             \
8391        if ( h6280.irq_state[2] != CLEAR_LINE &&                \
8492          !(h6280.irq_mask & 0x4) )                     \
8593      {                                          \
8694          DO_INTERRUPT(H6280_TIMER_VEC);                  \
87       }                                                          \
88      else                                       \
95      } else                                       \
8996      if ( h6280.irq_state[0] != CLEAR_LINE &&            \
9097          !(h6280.irq_mask & 0x2) )                     \
9198      {                                          \
9299         DO_INTERRUPT(H6280_IRQ1_VEC);                  \
93100         (*h6280.irq_callback)(0);                     \
94      }                                          \
95      else                                       \
101      } else                                       \
96102      if ( h6280.irq_state[1] != CLEAR_LINE &&            \
97103          !(h6280.irq_mask & 0x1) )                     \
98104      {                                          \
r983r984
101107        }                                                       \
102108    }
103109
110#define CHECK_IRQ_LINES                                 \
111   if ( ! h6280.irq_pending )                           \
112      h6280.irq_pending = 2;
113
104114/***************************************************************
115 *  CHECK_VDC_VCE_PENALTY
116 * The CPU inserts 1 clock delay when accessing the VDC or VCE
117 * area.
118 ***************************************************************/
119#define CHECK_VDC_VCE_PENALTY(addr)                        \
120   if ( ( TRANSLATED(addr) & 0x1FF800 ) == 0x1FE000 ) {      \
121      H6280_CYCLES(1);                              \
122   }
123
124/***************************************************************
105125 *  RDMEM   read memory
106126 ***************************************************************/
107#define RDMEM(addr)                                  \
108   program_read_byte_8(TRANSLATED(addr))
127INLINE UINT8 RDMEM(offs_t addr) {
128   CHECK_VDC_VCE_PENALTY(addr);
129   return program_read_byte_8(TRANSLATED(addr));
130}
109131
110132/***************************************************************
111133 *  WRMEM   write memory
112134 ***************************************************************/
113#define WRMEM(addr,data)                              \
135INLINE void WRMEM(offs_t addr, UINT8 data) {
136   CHECK_VDC_VCE_PENALTY(addr);
114137   program_write_byte_8(TRANSLATED(addr),data);
138}
115139
116140/***************************************************************
117141 *  RDMEMZ   read memory - zero page
r983r984
172196   CLEAR_T;                                       \
173197   if (cond)                                       \
174198   {                                             \
175      h6280_ICount -= 4;                              \
199      H6280_CYCLES(4);                              \
176200      tmp = RDOPARG();                              \
177201      PCW++;                                       \
178202      EAW = PCW + (signed char)tmp;                     \
r983r984
182206   else                                          \
183207   {                                             \
184208      PCW++;                                       \
185      h6280_ICount -= 2;                              \
209      H6280_CYCLES(2);                              \
186210   }
187211
188212/***************************************************************
r983r984
373397         if (hi & 0xff00)                           \
374398            P |= _fC;                              \
375399         tflagtemp = (lo & 0x0f) + (hi & 0xf0);            \
400         H6280_CYCLES(1);                           \
376401      }                                          \
377402      else                                       \
378403      {                                          \
r983r984
385410            P |= _fC;                              \
386411         tflagtemp = (UINT8) sum;                     \
387412      }                                          \
388      SET_NZ(A);                                    \
413      SET_NZ(tflagtemp);                              \
389414      WB_TFL;                                       \
415      H6280_CYCLES(3);                              \
390416   }
391417
392418
r983r984
410436         if (hi & 0xff00)                           \
411437            P |= _fC;                              \
412438         A = (lo & 0x0f) + (hi & 0xf0);                  \
439         H6280_CYCLES(1);                           \
413440      }                                          \
414441      else                                       \
415442      {                                          \
r983r984
436463      tflagtemp = (UINT8)(tflagtemp & tmp);               \
437464      WB_TFL;                                       \
438465      SET_NZ(tflagtemp);                              \
466      H6280_CYCLES(3);                              \
439467   }
440468
441469#define AND                                        \
r983r984
546574#define BSR                                        \
547575   PUSH(PCH);                                       \
548576   PUSH(PCL);                                       \
549   h6280_ICount -= 4; /* 4 cycles here, 4 in BRA */         \
577   H6280_CYCLES(4); /* 4 cycles here, 4 in BRA */            \
550578   BRA(1)
551579
552580/* 6280 ********************************************************
r983r984
678706/* 6280 ********************************************************
679707 *  EOR Logical exclusive or
680708 ***************************************************************/
681
682709#define TEOR                                        \
683710   {                                             \
684711      int tflagtemp;                                 \
r983r984
687714      tflagtemp = (UINT8)(tflagtemp ^ tmp);               \
688715      WB_TFL;                                       \
689716      SET_NZ(tflagtemp);                              \
717      H6280_CYCLES(3);                              \
690718   }
691719
692720#define EOR                                        \
r983r984
698726   }
699727
700728/* 6280 ********************************************************
701 *  ILL Illegal opcode
702 ***************************************************************/
703#define ILL                                        \
704   CLEAR_T;                                       \
705   h6280_ICount -= 2; /* (assumed) */                     \
706   logerror("%04x: WARNING - h6280 illegal opcode\n",activecpu_get_pc())
707
708/* 6280 ********************************************************
709729 *  INA Increment accumulator
710730 ***************************************************************/
711731#define INA                                                     \
r983r984
810830      tflagtemp = (UINT8)(tflagtemp | tmp);               \
811831      WB_TFL;                                       \
812832      SET_NZ(tflagtemp);                              \
833      H6280_CYCLES(3);                              \
813834   }
814835
815836#define ORA                                        \
r983r984
9801001/* 6280 ********************************************************
9811002 *  SBC Subtract with carry
9821003 ***************************************************************/
983#define SBC                                        \
984   CLEAR_T;                                       \
985   if (P & _fD)                                    \
1004#define TSBC                                       \
9861005   {                                             \
987   int c = (P & _fC) ^ _fC;                           \
988   int sum = A - tmp - c;                              \
989   int lo = (A & 0x0f) - (tmp & 0x0f) - c;                \
990   int hi = (A & 0xf0) - (tmp & 0xf0);                   \
991      P &= ~_fC;                                    \
992      if (lo & 0xf0)                                 \
993         lo -= 6;                                 \
994      if (lo & 0x80)                                 \
995         hi -= 0x10;                               \
996      if (hi & 0x0f00)                              \
997         hi -= 0x60;                               \
998      if ((sum & 0xff00) == 0)                        \
999         P |= _fC;                                 \
1000      A = (lo & 0x0f) + (hi & 0xf0);                     \
1001   }                                             \
1002   else                                          \
1003   {                                             \
1004   int c = (P & _fC) ^ _fC;                           \
1005   int sum = A - tmp - c;                              \
1006      P &= ~(_fV | _fC);                              \
1007      if ((A^tmp) & (A^sum) & _fN)                     \
1008         P |= _fV;                                 \
1009      if ((sum & 0xff00) == 0)                        \
1010         P |= _fC;                                 \
1011      A = (UINT8) sum;                              \
1012   }                                             \
1013   SET_NZ(A)
1006      int tflagtemp;                                 \
1007      CLEAR_T;                                    \
1008      RD_TFL;                                       \
1009      if (P & _fD)                                 \
1010      {                                          \
1011         int c = (P & _fC) ^ _fC;                     \
1012         int sum = tflagtemp - tmp -c;                  \
1013         int lo = (tflagtemp & 0x0f) - (tmp & 0x0f) - c;      \
1014         int hi = (tflagtemp & 0xf0) - (tmp & 0xf0);         \
1015         P &= ~_fC;                                 \
1016         if (lo & 0xf0)                              \
1017            lo -= 6;                              \
1018         if (lo & 0x80)                              \
1019            hi -= 0x10;                              \
1020         if (hi & 0x0f00)                           \
1021            hi -= 0x60;                              \
1022         if ((sum & 0xff00) == 0)                     \
1023            P |= _fC;                              \
1024         tflagtemp = (lo & 0x0f) + (hi & 0xf0);            \
1025         H6280_CYCLES(1);                           \
1026      }                                          \
1027      else                                       \
1028      {                                          \
1029         int c = (P & _fC) ^ _fC;                     \
1030         int sum = tflagtemp - tmp - c;                  \
1031         P &= ~(_fV | _fC);                           \
1032         if ((tflagtemp^tmp) & (tflagtemp^sum) & _fN)      \
1033            P |= _fV;                              \
1034         if ((sum & 0xff00) == 0)                     \
1035            P |= _fC;                              \
1036         tflagtemp = (UINT8) sum;                     \
1037      }                                          \
1038      SET_NZ(tflagtemp);                              \
1039      WB_TFL;                                       \
1040      H6280_CYCLES(3);                              \
1041   }
10141042
1043#define SBC                                        \
1044   if(P & _fT)                                       \
1045      TSBC                                       \
1046   else {                                          \
1047      if (P & _fD)                                 \
1048      {                                          \
1049         int c = (P & _fC) ^ _fC;                     \
1050         int sum = A - tmp - c;                        \
1051         int lo = (A & 0x0f) - (tmp & 0x0f) - c;          \
1052         int hi = (A & 0xf0) - (tmp & 0xf0);             \
1053         P &= ~_fC;                                 \
1054         if (lo & 0xf0)                              \
1055            lo -= 6;                              \
1056         if (lo & 0x80)                              \
1057            hi -= 0x10;                            \
1058         if (hi & 0x0f00)                           \
1059            hi -= 0x60;                            \
1060         if ((sum & 0xff00) == 0)                     \
1061            P |= _fC;                              \
1062         A = (lo & 0x0f) + (hi & 0xf0);                  \
1063         H6280_CYCLES(1);                           \
1064      }                                          \
1065      else                                       \
1066      {                                          \
1067         int c = (P & _fC) ^ _fC;                     \
1068         int sum = A - tmp - c;                        \
1069         P &= ~(_fV | _fC);                           \
1070         if ((A^tmp) & (A^sum) & _fN)                  \
1071            P |= _fV;                              \
1072         if ((sum & 0xff00) == 0)                     \
1073            P |= _fC;                              \
1074         A = (UINT8) sum;                           \
1075      }                                          \
1076      SET_NZ(A);                                    \
1077   }
1078
10151079/* 6280 ********************************************************
10161080 *  SEC Set carry flag
10171081 ***************************************************************/
r983r984
11151179   length=RDMEMW(PCW+4);                              \
11161180   PCW+=6;                                        \
11171181   alternate=0;                                     \
1182   if (!length) length = 0x10000;                        \
1183   H6280_CYCLES( ((6 * length) + 17) );                  \
11181184   while ((length--) != 0) {                            \
11191185      WRMEM(to,RDMEM(from+alternate));                   \
11201186      to++;                                        \
11211187      alternate ^= 1;                               \
1122   }                                              \
1123   h6280_ICount-=(6 * length) + 17;
1188   }
11241189
11251190/* H6280 *******************************************************
11261191 *  TAM Transfer accumulator to memory mapper register(s)
r983r984
11621227   to  =RDMEMW(PCW+2);                                 \
11631228   length=RDMEMW(PCW+4);                              \
11641229   PCW+=6;                                        \
1230   if (!length) length = 0x10000;                        \
1231   H6280_CYCLES( ((6 * length) + 17) );                  \
11651232   while ((length--) != 0) {                            \
11661233      WRMEM(to,RDMEM(from));                            \
11671234      to--;                                        \
11681235      from--;                                       \
1169   }                                              \
1170   h6280_ICount-=(6 * length) + 17;
1236   }
11711237
11721238/* 6280 ********************************************************
11731239 *  TIA Transfer Increment Alternate
r983r984
11791245   length=RDMEMW(PCW+4);                              \
11801246   PCW+=6;                                        \
11811247   alternate=0;                                     \
1248   if (!length) length = 0x10000;                        \
1249   H6280_CYCLES( ((6 * length) + 17) );                  \
11821250   while ((length--) != 0) {                            \
11831251      WRMEM(to+alternate,RDMEM(from));                  \
11841252      from++;                                     \
11851253      alternate ^= 1;                               \
1186   }                                              \
1187   h6280_ICount-=(6 * length) + 17;
1254   }
11881255
11891256/* 6280 ********************************************************
11901257 *  TII Transfer Increment Increment
r983r984
11951262   to  =RDMEMW(PCW+2);                                 \
11961263   length=RDMEMW(PCW+4);                              \
11971264   PCW+=6;                                        \
1265   if (!length) length = 0x10000;                        \
1266   H6280_CYCLES( ((6 * length) + 17) );                  \
11981267   while ((length--) != 0) {                            \
11991268      WRMEM(to,RDMEM(from));                            \
12001269      to++;                                        \
12011270      from++;                                       \
1202   }                                              \
1203   h6280_ICount-=(6 * length) + 17;
1271   }
12041272
12051273/* 6280 ********************************************************
12061274 *  TIN Transfer block, source increments every loop
r983r984
12111279   to  =RDMEMW(PCW+2);                                 \
12121280   length=RDMEMW(PCW+4);                              \
12131281   PCW+=6;                                        \
1282   if (!length) length = 0x10000;                        \
1283   H6280_CYCLES( ((6 * length) + 17) );                  \
12141284   while ((length--) != 0) {                            \
12151285      WRMEM(to,RDMEM(from));                            \
12161286      from++;                                       \
1217   }                                              \
1218   h6280_ICount-=(6 * length) + 17;
1287   }
12191288
12201289/* 6280 ********************************************************
12211290 *  TMA Transfer memory mapper register(s) to accumulator
r983r984
12401309   P = (P & ~(_fN|_fV|_fT|_fZ))                        \
12411310      | ((tmp&0x80) ? _fN:0)                           \
12421311      | ((tmp&0x40) ? _fV:0)                           \
1243      | ((tmp&A)  ? 0:_fZ);                           \
1312      | ((tmp&~A)  ? 0:_fZ);                           \
12441313    tmp &= ~A
12451314
12461315/* 6280 ********************************************************
r983r984
12511320   P = (P & ~(_fN|_fV|_fT|_fZ))                        \
12521321      | ((tmp&0x80) ? _fN:0)                           \
12531322      | ((tmp&0x40) ? _fV:0)                           \
1254      | ((tmp&A)  ? 0:_fZ);                           \
1323      | ((tmp|A)  ? 0:_fZ);                           \
12551324    tmp |= A
12561325
12571326/* 6280 ********************************************************
r983r984
12671336 ***************************************************************/
12681337#define TST                                          \
12691338   P = (P & ~(_fN|_fV|_fT|_fZ))                        \
1270      | ((tmp2&0x80) ? _fN:0)                           \
1271      | ((tmp2&0x40) ? _fV:0)                           \
1272      | ((tmp2&tmp)  ? 0:_fZ)
1339      | ((tmp&0x80) ? _fN:0)                           \
1340      | ((tmp&0x40) ? _fV:0)                           \
1341      | ((tmp&tmp2)  ? 0:_fZ)
12731342
12741343/* 6280 ********************************************************
12751344 *  TXA Transfer index X to accumulator
r983r984
12941363   CLEAR_T;                                       \
12951364   A = Y;                                          \
12961365   SET_NZ(A)
1366
1367/* 6280 ********************************************************
1368 * CSH Set CPU in high speed mode
1369 ***************************************************************/
1370#define CSH                                          \
1371   h6280.clocks_per_cycle = 1;
1372
1373/* 6280 ********************************************************
1374 * CSL Set CPU in low speed mode
1375 ***************************************************************/
1376#define CSL                                          \
1377   h6280.clocks_per_cycle = 3;
1378
src/emu/cpu/h6280/6280dasm.c
r983r984
2222
2323#define RDOP(addr)   (oprom[addr - pc])
2424#define RDBYTE(addr) (opram[addr - pc])
25#define RDWORD(addr) (opram[addr - pc] | oprom[(addr) + 1 - pc])
25#define RDWORD(addr) (opram[addr - pc] | ( oprom[(addr) + 1 - pc] << 8 ))
2626
2727enum addr_mode {
2828   _non=0,     /* no additional arguments */
src/emu/cpu/h6280/h6280.c
r983r984
1616    due to lack of programs using these features.
1717
1818    csh, csl opcodes are not supported.
19    set opcode and T flag behaviour are not supported.
2019
21    I am unsure if instructions like SBC take an extra cycle when used in
22    decimal mode.  I am unsure if flag B is set upon execution of rti.
20    I am unsure if flag B is set upon execution of rti.
2321
24    Cycle counts should be quite accurate, illegal instructions are assumed
25    to take two cycles.
22    Cycle counts should be quite accurate.
2623
2724
2825    Changelog, version 1.02:
r983r984
8279        Fixed interrupt processing order (Timer has highest priority followed
8380        by IRQ1 and finally IRQ2).
8481
85    Changelog, version 1.08, 1/07/06: (Rob Bohms)
82    Changelog, version 1.09, 1/07/06: (Rob Bohms)
8683
8784        Added emulation of the T flag, fixes PCE Ankuku Densetsu title screen
8885
86    Changelog, version 1.10, 5/09/07: (Wilbert Pol)
87
88        - Taking of interrupts is delayed to respect a pending instruction already
89          in the instruction pipeline; fixes After Burner.
90        - Added 1 cycle for decimal mode ADC and SBC instructions.
91        - Changed cycle counts for CSH and CSL instructions to 3.
92        - Added T flag support to the SBC instruction.
93        - Fixed ADC T flag to set the Z flag based on the value read.
94        - Added 3 cycle penalty to ADC, AND, EOR, ORA, and SBC instructions
95          when the T flag is set.
96        - Fixed cycle count and support for 65536 byte blocks for the TAI, TDD,
97          TIA, TII, and TIN instructions.
98        - Fixed RDWORD macro in the disassembler.
99        - Fixed setting of N and V flags in the TST instructions.
100        - Removed unneeded debug_mmr code.
101        - Fixed TSB and TRB instructions.
102        - Added 1 delay when accessing the VDC or VCE areas.
103        - Implemented low and high speed cpu modes.
104
89105******************************************************************************/
90106#include "debugger.h"
91107#include "h6280.h"
92108
93extern FILE * errorlog;
94
95109static int    h6280_ICount = 0;
96110
97111/****************************************************************************
r983r984
112126    UINT8 irq_mask;     /* interrupt enable/disable */
113127    UINT8 timer_status; /* timer status */
114128   UINT8 timer_ack;   /* timer acknowledge */
129   UINT8 clocks_per_cycle;   /* 3 = low speed mode, 1 = high speed mode */
115130    INT32 timer_value;    /* timer interrupt */
116131    INT32 timer_load;      /* reload value */
117   INT32 extra_cycles;   /* cycles used taking an interrupt */
118132    UINT8 nmi_state;
119133    UINT8 irq_state[3];
134   UINT8 irq_pending;
120135    int (*irq_callback)(int irqline);
121136
122137#if LAZY_FLAGS
r983r984
127142
128143static  h6280_Regs  h6280;
129144
130#ifdef  MAME_DEBUG /* Need some public segmentation registers for debugger */
131UINT8   H6280_debug_mmr[8];
132#endif
133
134145static void set_irq_line(int irqline, int state);
135146
136147/* include the macros */
r983r984
155166   state_save_register_item("h6280", index, h6280.irq_mask);
156167   state_save_register_item("h6280", index, h6280.timer_status);
157168   state_save_register_item("h6280", index, h6280.timer_ack);
169   state_save_register_item("h6280", index, h6280.clocks_per_cycle);
158170   state_save_register_item("h6280", index, h6280.timer_value);
159171   state_save_register_item("h6280", index, h6280.timer_load);
160   state_save_register_item("h6280", index, h6280.extra_cycles);
161172   state_save_register_item("h6280", index, h6280.nmi_state);
162173   state_save_register_item("h6280", index, h6280.irq_state[0]);
163174   state_save_register_item("h6280", index, h6280.irq_state[1]);
164175   state_save_register_item("h6280", index, h6280.irq_state[2]);
176   state_save_register_item("h6280", index, h6280.irq_pending);
165177
166178   #if LAZY_FLAGS
167179   state_save_register_item("h6280", index, h6280.NZ);
r983r984
192204   PCH = RDMEM((H6280_RESET_VEC+1));
193205   CHANGE_PC;
194206
207   /* CPU starts in low speed mode */
208   h6280.clocks_per_cycle = 3;
209
195210   /* timer off by default */
196211   h6280.timer_status=0;
197212
198213    /* clear pending interrupts */
199214   for (i = 0; i < 3; i++)
200215      h6280.irq_state[i] = CLEAR_LINE;
216   h6280.nmi_state = CLEAR_LINE;
217
218   h6280.irq_pending = 0;
201219}
202220
203221static void h6280_exit(void)
r983r984
207225
208226static int h6280_execute(int cycles)
209227{
210   int in,lastcycle,deltacycle;
228   int in;
211229   h6280_ICount = cycles;
212230
213   /* Subtract cycles used for taking an interrupt */
214   h6280_ICount -= h6280.extra_cycles;
215   h6280.extra_cycles = 0;
216   lastcycle = h6280_ICount;
217
218231   /* Execute instructions */
219232   do
220233    {
r983r984
222235          CHANGE_PC;
223236      h6280.ppc = h6280.pc;
224237
225#ifdef  MAME_DEBUG
226       {
227         if (Machine->debug_mode)
228         {
229            /* Copy the segmentation registers for debugger to use */
230            int i;
231            for (i=0; i<8; i++)
232               H6280_debug_mmr[i]=h6280.mmr[i];
238      CALL_MAME_DEBUG;
233239
234            mame_debug_hook();
235         }
236      }
237#endif
238
239240      /* Execute 1 instruction */
240241      in=RDOP();
241242      PCW++;
242243      insnh6280[in]();
243244
245      if ( h6280.irq_pending ) {
246         h6280.irq_pending--;
247         if ( ! h6280.irq_pending ) {
248            CHECK_AND_TAKE_IRQ_LINES;
249         }
250      }
251
244252      /* Check internal timer */
245253      if(h6280.timer_status)
246254      {
247         deltacycle = lastcycle - h6280_ICount;
248         h6280.timer_value -= deltacycle;
249255         if(h6280.timer_value<=0)
250256         {
251            h6280.timer_value=h6280.timer_load;
257            if ( ! h6280.irq_pending )
258               h6280.irq_pending = 2;
259            while( h6280.timer_value <= 0 )
260               h6280.timer_value += h6280.timer_load;
252261            set_irq_line(2,ASSERT_LINE);
253262         }
254263      }
255      lastcycle = h6280_ICount;
256
257      /* If PC has not changed we are stuck in a tight loop, may as well finish */
258      if( h6280.pc.d == h6280.ppc.d )
259      {
260         if (h6280_ICount > 0) h6280_ICount=0;
261         h6280.extra_cycles = 0;
262         return cycles;
263      }
264
265264   } while (h6280_ICount > 0);
266265
267   /* Subtract cycles used for taking an interrupt */
268   h6280_ICount -= h6280.extra_cycles;
269   h6280.extra_cycles = 0;
270
271266   return cycles - h6280_ICount;
272267}
273268
r983r984
293288   {
294289      if (h6280.nmi_state == state) return;
295290      h6280.nmi_state = state;
296      if (state != CLEAR_LINE)
297       {
298         DO_INTERRUPT(H6280_NMI_VEC);
299      }
291      CHECK_IRQ_LINES;
300292   }
301293   else if (irqline < 3)
302294   {
295      /* If the state has not changed, just return */
296      if ( h6280.irq_state[irqline] == state )
297         return;
298
303299       h6280.irq_state[irqline] = state;
304300
305      /* If line is cleared, just exit */
306      if (state == CLEAR_LINE) return;
307
308      /* Check if interrupts are enabled and the IRQ mask is clear */
309301      CHECK_IRQ_LINES;
310302   }
311303}
r983r984
516508      /* --- the following bits of info are returned as NULL-terminated strings --- */
517509      case CPUINFO_STR_NAME:                     strcpy(info->s, "HuC6280");            break;
518510      case CPUINFO_STR_CORE_FAMILY:               strcpy(info->s, "Hudsonsoft 6280");      break;
519      case CPUINFO_STR_CORE_VERSION:               strcpy(info->s, "1.07");            break;
511      case CPUINFO_STR_CORE_VERSION:               strcpy(info->s, "1.10");            break;
520512      case CPUINFO_STR_CORE_FILE:                  strcpy(info->s, __FILE__);            break;
521513      case CPUINFO_STR_CORE_CREDITS:               strcpy(info->s, "Copyright (c) 1999, 2000 Bryan McPhail, mish@tendril.co.uk"); break;
522514
src/emu/cpu/h6280/tblh6280.c
r983r984
2020 *
2121 *****************************************************************************
2222 * op     temp     cycles             rdmem   opc   wrmem   ******************/
23OP(_000) {         h6280_ICount -= 8;        BRK;         } // 8 BRK
24OP(_020) {         h6280_ICount -= 7; EA_ABS; JSR;         } // 7 JSR  ABS
25OP(_040) {         h6280_ICount -= 7;        RTI;         } // 7 RTI
26OP(_060) {         h6280_ICount -= 7;        RTS;         } // 7 RTS
23OP(_000) {         H6280_CYCLES(8);        BRK;         } // 8 BRK
24OP(_020) {         H6280_CYCLES(7); EA_ABS; JSR;         } // 7 JSR  ABS
25OP(_040) {         H6280_CYCLES(7);        RTI;         } // 7 RTI
26OP(_060) {         H6280_CYCLES(7);        RTS;         } // 7 RTS
2727OP(_080) { int tmp;                        BRA(1);      } // 4 BRA  REL
28OP(_0a0) { int tmp; h6280_ICount -= 2; RD_IMM; LDY;         } // 2 LDY  IMM
29OP(_0c0) { int tmp; h6280_ICount -= 2; RD_IMM; CPY;         } // 2 CPY  IMM
30OP(_0e0) { int tmp; h6280_ICount -= 2; RD_IMM; CPX;         } // 2 CPX  IMM
28OP(_0a0) { int tmp; H6280_CYCLES(2); RD_IMM; LDY;         } // 2 LDY  IMM
29OP(_0c0) { int tmp; H6280_CYCLES(2); RD_IMM; CPY;         } // 2 CPY  IMM
30OP(_0e0) { int tmp; H6280_CYCLES(2); RD_IMM; CPX;         } // 2 CPX  IMM
3131
3232OP(_010) { int tmp;                       BPL;         } // 2/4 BPL  REL
3333OP(_030) { int tmp;                       BMI;         } // 2/4 BMI  REL
r983r984
3838OP(_0d0) { int tmp;                       BNE;         } // 2/4 BNE  REL
3939OP(_0f0) { int tmp;                       BEQ;         } // 2/4 BEQ  REL
4040
41OP(_001) { int tmp; h6280_ICount -= 7; RD_IDX; ORA;         } // 7 ORA  IDX
42OP(_021) { int tmp; h6280_ICount -= 7; RD_IDX; AND;         } // 7 AND  IDX
43OP(_041) { int tmp; h6280_ICount -= 7; RD_IDX; EOR;         } // 7 EOR  IDX
44OP(_061) { int tmp; h6280_ICount -= 7; RD_IDX; ADC;         } // 7 ADC  IDX
45OP(_081) { int tmp; h6280_ICount -= 7;         STA; WR_IDX; } // 7 STA  IDX
46OP(_0a1) { int tmp; h6280_ICount -= 7; RD_IDX; LDA;         } // 7 LDA  IDX
47OP(_0c1) { int tmp; h6280_ICount -= 7; RD_IDX; CMP;         } // 7 CMP  IDX
48OP(_0e1) { int tmp; h6280_ICount -= 7; RD_IDX; SBC;         } // 7 SBC  IDX
41OP(_001) { int tmp; H6280_CYCLES(7); RD_IDX; ORA;         } // 7 ORA  IDX
42OP(_021) { int tmp; H6280_CYCLES(7); RD_IDX; AND;         } // 7 AND  IDX
43OP(_041) { int tmp; H6280_CYCLES(7); RD_IDX; EOR;         } // 7 EOR  IDX
44OP(_061) { int tmp; H6280_CYCLES(7); RD_IDX; ADC;         } // 7 ADC  IDX
45OP(_081) { int tmp; H6280_CYCLES(7);         STA; WR_IDX; } // 7 STA  IDX
46OP(_0a1) { int tmp; H6280_CYCLES(7); RD_IDX; LDA;         } // 7 LDA  IDX
47OP(_0c1) { int tmp; H6280_CYCLES(7); RD_IDX; CMP;         } // 7 CMP  IDX
48OP(_0e1) { int tmp; H6280_CYCLES(7); RD_IDX; SBC;         } // 7 SBC  IDX
4949
50OP(_011) { int tmp; h6280_ICount -= 7; RD_IDY; ORA;         } // 7 ORA  IDY
51OP(_031) { int tmp; h6280_ICount -= 7; RD_IDY; AND;         } // 7 AND  IDY
52OP(_051) { int tmp; h6280_ICount -= 7; RD_IDY; EOR;         } // 7 EOR  IDY
53OP(_071) { int tmp; h6280_ICount -= 7; RD_IDY; ADC;         } // 7 ADC  AZP
54OP(_091) { int tmp; h6280_ICount -= 7;        STA; WR_IDY; } // 7 STA  IDY
55OP(_0b1) { int tmp; h6280_ICount -= 7; RD_IDY; LDA;         } // 7 LDA  IDY
56OP(_0d1) { int tmp; h6280_ICount -= 7; RD_IDY; CMP;         } // 7 CMP  IDY
57OP(_0f1) { int tmp; h6280_ICount -= 7; RD_IDY; SBC;         } // 7 SBC  IDY
50OP(_011) { int tmp; H6280_CYCLES(7); RD_IDY; ORA;         } // 7 ORA  IDY
51OP(_031) { int tmp; H6280_CYCLES(7); RD_IDY; AND;         } // 7 AND  IDY
52OP(_051) { int tmp; H6280_CYCLES(7); RD_IDY; EOR;         } // 7 EOR  IDY
53OP(_071) { int tmp; H6280_CYCLES(7); RD_IDY; ADC;         } // 7 ADC  AZP
54OP(_091) { int tmp; H6280_CYCLES(7);        STA; WR_IDY; } // 7 STA  IDY
55OP(_0b1) { int tmp; H6280_CYCLES(7); RD_IDY; LDA;         } // 7 LDA  IDY
56OP(_0d1) { int tmp; H6280_CYCLES(7); RD_IDY; CMP;         } // 7 CMP  IDY
57OP(_0f1) { int tmp; H6280_CYCLES(7); RD_IDY; SBC;         } // 7 SBC  IDY
5858
59OP(_002) { int tmp; h6280_ICount -= 3;        SXY;         } // 3 SXY
60OP(_022) { int tmp; h6280_ICount -= 3;        SAX;         } // 3 SAX
61OP(_042) { int tmp; h6280_ICount -= 3;        SAY;         } // 3 SAY
62OP(_062) {         h6280_ICount -= 2;        CLA;         } // 2 CLA
63OP(_082) {         h6280_ICount -= 2;        CLX;         } // 2 CLX
64OP(_0a2) { int tmp; h6280_ICount -= 2; RD_IMM; LDX;         } // 2 LDX  IMM
65OP(_0c2) {         h6280_ICount -= 2;        CLY;         } // 2 CLY
66OP(_0e2) {                             ILL;         } // 2 ???
59OP(_002) { int tmp; H6280_CYCLES(3);        SXY;         } // 3 SXY
60OP(_022) { int tmp; H6280_CYCLES(3);        SAX;         } // 3 SAX
61OP(_042) { int tmp; H6280_CYCLES(3);        SAY;         } // 3 SAY
62OP(_062) {         H6280_CYCLES(2);        CLA;         } // 2 CLA
63OP(_082) {         H6280_CYCLES(2);        CLX;         } // 2 CLX
64OP(_0a2) { int tmp; H6280_CYCLES(2); RD_IMM; LDX;         } // 2 LDX  IMM
65OP(_0c2) {         H6280_CYCLES(2);        CLY;         } // 2 CLY
66OP(_0e2) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
6767
68OP(_012) { int tmp; h6280_ICount -= 7; RD_ZPI; ORA;         } // 7 ORA  ZPI
69OP(_032) { int tmp; h6280_ICount -= 7; RD_ZPI; AND;         } // 7 AND  ZPI
70OP(_052) { int tmp; h6280_ICount -= 7; RD_ZPI; EOR;         } // 7 EOR  ZPI
71OP(_072) { int tmp; h6280_ICount -= 7; RD_ZPI; ADC;         } // 7 ADC  ZPI
72OP(_092) { int tmp; h6280_ICount -= 7;        STA; WR_ZPI; } // 7 STA  ZPI
73OP(_0b2) { int tmp; h6280_ICount -= 7; RD_ZPI; LDA;         } // 7 LDA  ZPI
74OP(_0d2) { int tmp; h6280_ICount -= 7; RD_ZPI; CMP;         } // 7 CMP  ZPI
75OP(_0f2) { int tmp; h6280_ICount -= 7; RD_ZPI; SBC;         } // 7 SBC  ZPI
68OP(_012) { int tmp; H6280_CYCLES(7); RD_ZPI; ORA;         } // 7 ORA  ZPI
69OP(_032) { int tmp; H6280_CYCLES(7); RD_ZPI; AND;         } // 7 AND  ZPI
70OP(_052) { int tmp; H6280_CYCLES(7); RD_ZPI; EOR;         } // 7 EOR  ZPI
71OP(_072) { int tmp; H6280_CYCLES(7); RD_ZPI; ADC;         } // 7 ADC  ZPI
72OP(_092) { int tmp; H6280_CYCLES(7);        STA; WR_ZPI; } // 7 STA  ZPI
73OP(_0b2) { int tmp; H6280_CYCLES(7); RD_ZPI; LDA;         } // 7 LDA  ZPI
74OP(_0d2) { int tmp; H6280_CYCLES(7); RD_ZPI; CMP;         } // 7 CMP  ZPI
75OP(_0f2) { int tmp; H6280_CYCLES(7); RD_ZPI; SBC;         } // 7 SBC  ZPI
7676
77OP(_003) { int tmp; h6280_ICount -= 4; RD_IMM; ST0;         } // 4 ST0  IMM
78OP(_023) { int tmp; h6280_ICount -= 4; RD_IMM; ST2;         } // 4 ST2  IMM
79OP(_043) { int tmp; h6280_ICount -= 4; RD_IMM; TMA;         } // 4 TMA
80OP(_063) {                             ILL;         } // 2 ???
81OP(_083) { int tmp,tmp2; h6280_ICount -= 7; RD_IMM2; RD_ZPG; TST; } // 7 TST  IMM,ZPG
82OP(_0a3) { int tmp,tmp2; h6280_ICount -= 7; RD_IMM2; RD_ZPX; TST; } // 7 TST  IMM,ZPX
77OP(_003) { int tmp; H6280_CYCLES(5); RD_IMM; ST0;         } // 4 + 1 penalty cycle ST0  IMM
78OP(_023) { int tmp; H6280_CYCLES(5); RD_IMM; ST2;         } // 4 + 1 penalty cycle ST2  IMM
79OP(_043) { int tmp; H6280_CYCLES(4); RD_IMM; TMA;         } // 4 TMA
80OP(_063) {         H6280_CYCLES(4);         NOP;         } // 2 NOP
81OP(_083) { int tmp,tmp2; H6280_CYCLES(7); RD_IMM2; RD_ZPG; TST; } // 7 TST  IMM,ZPG
82OP(_0a3) { int tmp,tmp2; H6280_CYCLES(7); RD_IMM2; RD_ZPX; TST; } // 7 TST  IMM,ZPX
8383OP(_0c3) { int to,from,length;               TDD;         } // 6*l+17 TDD  XFER
8484OP(_0e3) { int to,from,length,alternate;       TIA;         } // 6*l+17 TIA  XFER
8585
86OP(_013) { int tmp; h6280_ICount -= 4; RD_IMM; ST1;         } // 4 ST1
87OP(_033) {                              ILL;         } // 2 ???
88OP(_053) { int tmp; h6280_ICount -= 5; RD_IMM; TAM;         } // 5 TAM  IMM
86OP(_013) { int tmp; H6280_CYCLES(5); RD_IMM; ST1;         } // 4 + 1 penalty cycle ST1
87OP(_033) {          H6280_CYCLES(2);         NOP;         } // 2 NOP
88OP(_053) { int tmp; H6280_CYCLES(5); RD_IMM; TAM;         } // 5 TAM  IMM
8989OP(_073) { int to,from,length;               TII;         } // 6*l+17 TII  XFER
90OP(_093) { int tmp,tmp2; h6280_ICount -= 8; RD_IMM2; RD_ABS; TST; } // 8 TST  IMM,ABS
91OP(_0b3) { int tmp,tmp2; h6280_ICount -= 8; RD_IMM2; RD_ABX; TST; } // 8 TST  IMM,ABX
90OP(_093) { int tmp,tmp2; H6280_CYCLES(8); RD_IMM2; RD_ABS; TST; } // 8 TST  IMM,ABS
91OP(_0b3) { int tmp,tmp2; H6280_CYCLES(8); RD_IMM2; RD_ABX; TST; } // 8 TST  IMM,ABX
9292OP(_0d3) { int to,from,length;               TIN;         } // 6*l+17 TIN  XFER
9393OP(_0f3) { int to,from,length,alternate;       TAI;         } // 6*l+17 TAI  XFER
9494
95OP(_004) { int tmp; h6280_ICount -= 6; RD_ZPG; TSB; WB_EAZ; } // 6 TSB  ZPG
96OP(_024) { int tmp; h6280_ICount -= 4; RD_ZPG; BIT;         } // 4 BIT  ZPG
95OP(_004) { int tmp; H6280_CYCLES(6); RD_ZPG; TSB; WB_EAZ; } // 6 TSB  ZPG
96OP(_024) { int tmp; H6280_CYCLES(4); RD_ZPG; BIT;         } // 4 BIT  ZPG
9797OP(_044) { int tmp;                       BSR;         } // 8 BSR  REL
98OP(_064) { int tmp; h6280_ICount -= 4;        STZ; WR_ZPG; } // 4 STZ  ZPG
99OP(_084) { int tmp; h6280_ICount -= 4;        STY; WR_ZPG; } // 4 STY  ZPG
100OP(_0a4) { int tmp; h6280_ICount -= 4; RD_ZPG; LDY;         } // 4 LDY  ZPG
101OP(_0c4) { int tmp; h6280_ICount -= 4; RD_ZPG; CPY;         } // 4 CPY  ZPG
102OP(_0e4) { int tmp; h6280_ICount -= 4; RD_ZPG; CPX;         } // 4 CPX  ZPG
98OP(_064) { int tmp; H6280_CYCLES(4);        STZ; WR_ZPG; } // 4 STZ  ZPG
99OP(_084) { int tmp; H6280_CYCLES(4);        STY; WR_ZPG; } // 4 STY  ZPG
100OP(_0a4) { int tmp; H6280_CYCLES(4); RD_ZPG; LDY;         } // 4 LDY  ZPG
101OP(_0c4) { int tmp; H6280_CYCLES(4); RD_ZPG; CPY;         } // 4 CPY  ZPG
102OP(_0e4) { int tmp; H6280_CYCLES(4); RD_ZPG; CPX;         } // 4 CPX  ZPG
103103
104OP(_014) { int tmp; h6280_ICount -= 6; RD_ZPG; TRB; WB_EAZ; } // 6 TRB  ZPG
105OP(_034) { int tmp; h6280_ICount -= 4; RD_ZPX; BIT;         } // 4 BIT  ZPX
106OP(_054) {         h6280_ICount -= 2;                  } // 2 CSL
107OP(_074) { int tmp; h6280_ICount -= 4;        STZ; WR_ZPX; } // 4 STZ  ZPX
108OP(_094) { int tmp; h6280_ICount -= 4;        STY; WR_ZPX; } // 4 STY  ZPX
109OP(_0b4) { int tmp; h6280_ICount -= 4; RD_ZPX; LDY;         } // 4 LDY  ZPX
110OP(_0d4) {         h6280_ICount -= 2;                  } // 2 CSH
111OP(_0f4) {         h6280_ICount -= 2;        SET;         } // 2 SET
104OP(_014) { int tmp; H6280_CYCLES(6); RD_ZPG; TRB; WB_EAZ; } // 6 TRB  ZPG
105OP(_034) { int tmp; H6280_CYCLES(4); RD_ZPX; BIT;         } // 4 BIT  ZPX
106OP(_054) {         H6280_CYCLES(3);         CSL;         } // 3 CSL
107OP(_074) { int tmp; H6280_CYCLES(4);        STZ; WR_ZPX; } // 4 STZ  ZPX
108OP(_094) { int tmp; H6280_CYCLES(4);        STY; WR_ZPX; } // 4 STY  ZPX
109OP(_0b4) { int tmp; H6280_CYCLES(4); RD_ZPX; LDY;         } // 4 LDY  ZPX
110OP(_0d4) {         H6280_CYCLES(3);         CSH;         } // 3 CSH
111OP(_0f4) {         H6280_CYCLES(2);        SET;         } // 2 SET
112112
113OP(_005) { int tmp; h6280_ICount -= 4; RD_ZPG; ORA;         } // 4 ORA  ZPG
114OP(_025) { int tmp; h6280_ICount -= 4; RD_ZPG; AND;         } // 4 AND  ZPG
115OP(_045) { int tmp; h6280_ICount -= 4; RD_ZPG; EOR;         } // 4 EOR  ZPG
116OP(_065) { int tmp; h6280_ICount -= 4; RD_ZPG; ADC;         } // 4 ADC  ZPG
117OP(_085) { int tmp; h6280_ICount -= 4;        STA; WR_ZPG; } // 4 STA  ZPG
118OP(_0a5) { int tmp; h6280_ICount -= 4; RD_ZPG; LDA;         } // 4 LDA  ZPG
119OP(_0c5) { int tmp; h6280_ICount -= 4; RD_ZPG; CMP;         } // 4 CMP  ZPG
120OP(_0e5) { int tmp; h6280_ICount -= 4; RD_ZPG; SBC;         } // 4 SBC  ZPG
113OP(_005) { int tmp; H6280_CYCLES(4); RD_ZPG; ORA;         } // 4 ORA  ZPG
114OP(_025) { int tmp; H6280_CYCLES(4); RD_ZPG; AND;         } // 4 AND  ZPG
115OP(_045) { int tmp; H6280_CYCLES(4); RD_ZPG; EOR;         } // 4 EOR  ZPG
116OP(_065) { int tmp; H6280_CYCLES(4); RD_ZPG; ADC;         } // 4 ADC  ZPG
117OP(_085) { int tmp; H6280_CYCLES(4);        STA; WR_ZPG; } // 4 STA  ZPG
118OP(_0a5) { int tmp; H6280_CYCLES(4); RD_ZPG; LDA;         } // 4 LDA  ZPG
119OP(_0c5) { int tmp; H6280_CYCLES(4); RD_ZPG; CMP;         } // 4 CMP  ZPG
120OP(_0e5) { int tmp; H6280_CYCLES(4); RD_ZPG; SBC;         } // 4 SBC  ZPG
121121
122OP(_015) { int tmp; h6280_ICount -= 4; RD_ZPX; ORA;         } // 4 ORA  ZPX
123OP(_035) { int tmp; h6280_ICount -= 4; RD_ZPX; AND;         } // 4 AND  ZPX
124OP(_055) { int tmp; h6280_ICount -= 4; RD_ZPX; EOR;         } // 4 EOR  ZPX
125OP(_075) { int tmp; h6280_ICount -= 4; RD_ZPX; ADC;         } // 4 ADC  ZPX
126OP(_095) { int tmp; h6280_ICount -= 4;        STA; WR_ZPX; } // 4 STA  ZPX
127OP(_0b5) { int tmp; h6280_ICount -= 4; RD_ZPX; LDA;         } // 4 LDA  ZPX
128OP(_0d5) { int tmp; h6280_ICount -= 4; RD_ZPX; CMP;         } // 4 CMP  ZPX
129OP(_0f5) { int tmp; h6280_ICount -= 4; RD_ZPX; SBC;         } // 4 SBC  ZPX
122OP(_015) { int tmp; H6280_CYCLES(4); RD_ZPX; ORA;         } // 4 ORA  ZPX
123OP(_035) { int tmp; H6280_CYCLES(4); RD_ZPX; AND;         } // 4 AND  ZPX
124OP(_055) { int tmp; H6280_CYCLES(4); RD_ZPX; EOR;         } // 4 EOR  ZPX
125OP(_075) { int tmp; H6280_CYCLES(4); RD_ZPX; ADC;         } // 4 ADC  ZPX
126OP(_095) { int tmp; H6280_CYCLES(4);        STA; WR_ZPX; } // 4 STA  ZPX
127OP(_0b5) { int tmp; H6280_CYCLES(4); RD_ZPX; LDA;         } // 4 LDA  ZPX
128OP(_0d5) { int tmp; H6280_CYCLES(4); RD_ZPX; CMP;         } // 4 CMP  ZPX
129OP(_0f5) { int tmp; H6280_CYCLES(4); RD_ZPX; SBC;         } // 4 SBC  ZPX
130130
131OP(_006) { int tmp; h6280_ICount -= 6; RD_ZPG; ASL; WB_EAZ; } // 6 ASL  ZPG
132OP(_026) { int tmp; h6280_ICount -= 6; RD_ZPG; ROL; WB_EAZ; } // 6 ROL  ZPG
133OP(_046) { int tmp; h6280_ICount -= 6; RD_ZPG; LSR; WB_EAZ; } // 6 LSR  ZPG
134OP(_066) { int tmp; h6280_ICount -= 6; RD_ZPG; ROR; WB_EAZ; } // 6 ROR  ZPG
135OP(_086) { int tmp; h6280_ICount -= 4;        STX; WR_ZPG; } // 4 STX  ZPG
136OP(_0a6) { int tmp; h6280_ICount -= 4; RD_ZPG; LDX;         } // 4 LDX  ZPG
137OP(_0c6) { int tmp; h6280_ICount -= 6; RD_ZPG; DEC; WB_EAZ; } // 6 DEC  ZPG
138OP(_0e6) { int tmp; h6280_ICount -= 6; RD_ZPG; INC; WB_EAZ; } // 6 INC  ZPG
131OP(_006) { int tmp; H6280_CYCLES(6); RD_ZPG; ASL; WB_EAZ; } // 6 ASL  ZPG
132OP(_026) { int tmp; H6280_CYCLES(6); RD_ZPG; ROL; WB_EAZ; } // 6 ROL  ZPG
133OP(_046) { int tmp; H6280_CYCLES(6); RD_ZPG; LSR; WB_EAZ; } // 6 LSR  ZPG
134OP(_066) { int tmp; H6280_CYCLES(6); RD_ZPG; ROR; WB_EAZ; } // 6 ROR  ZPG
135OP(_086) { int tmp; H6280_CYCLES(4);        STX; WR_ZPG; } // 4 STX  ZPG
136OP(_0a6) { int tmp; H6280_CYCLES(4); RD_ZPG; LDX;         } // 4 LDX  ZPG
137OP(_0c6) { int tmp; H6280_CYCLES(6); RD_ZPG; DEC; WB_EAZ; } // 6 DEC  ZPG
138OP(_0e6) { int tmp; H6280_CYCLES(6); RD_ZPG; INC; WB_EAZ; } // 6 INC  ZPG
139139
140OP(_016) { int tmp; h6280_ICount -= 6; RD_ZPX; ASL; WB_EAZ  } // 6 ASL  ZPX
141OP(_036) { int tmp; h6280_ICount -= 6; RD_ZPX; ROL; WB_EAZ  } // 6 ROL  ZPX
142OP(_056) { int tmp; h6280_ICount -= 6; RD_ZPX; LSR; WB_EAZ  } // 6 LSR  ZPX
143OP(_076) { int tmp; h6280_ICount -= 6; RD_ZPX; ROR; WB_EAZ  } // 6 ROR  ZPX
144OP(_096) { int tmp; h6280_ICount -= 4;        STX; WR_ZPY; } // 4 STX  ZPY
145OP(_0b6) { int tmp; h6280_ICount -= 4; RD_ZPY; LDX;         } // 4 LDX  ZPY
146OP(_0d6) { int tmp; h6280_ICount -= 6; RD_ZPX; DEC; WB_EAZ; } // 6 DEC  ZPX
147OP(_0f6) { int tmp; h6280_ICount -= 6; RD_ZPX; INC; WB_EAZ; } // 6 INC  ZPX
140OP(_016) { int tmp; H6280_CYCLES(6); RD_ZPX; ASL; WB_EAZ  } // 6 ASL  ZPX
141OP(_036) { int tmp; H6280_CYCLES(6); RD_ZPX; ROL; WB_EAZ  } // 6 ROL  ZPX
142OP(_056) { int tmp; H6280_CYCLES(6); RD_ZPX; LSR; WB_EAZ  } // 6 LSR  ZPX
143OP(_076) { int tmp; H6280_CYCLES(6); RD_ZPX; ROR; WB_EAZ  } // 6 ROR  ZPX
144OP(_096) { int tmp; H6280_CYCLES(4);        STX; WR_ZPY; } // 4 STX  ZPY
145OP(_0b6) { int tmp; H6280_CYCLES(4); RD_ZPY; LDX;         } // 4 LDX  ZPY
146OP(_0d6) { int tmp; H6280_CYCLES(6); RD_ZPX; DEC; WB_EAZ; } // 6 DEC  ZPX
147OP(_0f6) { int tmp; H6280_CYCLES(6); RD_ZPX; INC; WB_EAZ; } // 6 INC  ZPX
148148
149OP(_007) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(0);WB_EAZ;} // 7 RMB0 ZPG
150OP(_027) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(2);WB_EAZ;} // 7 RMB2 ZPG
151OP(_047) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(4);WB_EAZ;} // 7 RMB4 ZPG
152OP(_067) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(6);WB_EAZ;} // 7 RMB6 ZPG
153OP(_087) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(0);WB_EAZ;} // 7 SMB0 ZPG
154OP(_0a7) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(2);WB_EAZ;} // 7 SMB2 ZPG
155OP(_0c7) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(4);WB_EAZ;} // 7 SMB4 ZPG
156OP(_0e7) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(6);WB_EAZ;} // 7 SMB6 ZPG
149OP(_007) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(0);WB_EAZ;} // 7 RMB0 ZPG
150OP(_027) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(2);WB_EAZ;} // 7 RMB2 ZPG
151OP(_047) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(4);WB_EAZ;} // 7 RMB4 ZPG
152OP(_067) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(6);WB_EAZ;} // 7 RMB6 ZPG
153OP(_087) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(0);WB_EAZ;} // 7 SMB0 ZPG
154OP(_0a7) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(2);WB_EAZ;} // 7 SMB2 ZPG
155OP(_0c7) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(4);WB_EAZ;} // 7 SMB4 ZPG
156OP(_0e7) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(6);WB_EAZ;} // 7 SMB6 ZPG
157157
158OP(_017) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(1);WB_EAZ;} // 7 RMB1 ZPG
159OP(_037) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(3);WB_EAZ;} // 7 RMB3 ZPG
160OP(_057) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(5);WB_EAZ;} // 7 RMB5 ZPG
161OP(_077) { int tmp; h6280_ICount -= 7; RD_ZPG; RMB(7);WB_EAZ;} // 7 RMB7 ZPG
162OP(_097) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(1);WB_EAZ;} // 7 SMB1 ZPG
163OP(_0b7) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(3);WB_EAZ;} // 7 SMB3 ZPG
164OP(_0d7) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(5);WB_EAZ;} // 7 SMB5 ZPG
165OP(_0f7) { int tmp; h6280_ICount -= 7; RD_ZPG; SMB(7);WB_EAZ;} // 7 SMB7 ZPG
158OP(_017) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(1);WB_EAZ;} // 7 RMB1 ZPG
159OP(_037) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(3);WB_EAZ;} // 7 RMB3 ZPG
160OP(_057) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(5);WB_EAZ;} // 7 RMB5 ZPG
161OP(_077) { int tmp; H6280_CYCLES(7); RD_ZPG; RMB(7);WB_EAZ;} // 7 RMB7 ZPG
162OP(_097) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(1);WB_EAZ;} // 7 SMB1 ZPG
163OP(_0b7) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(3);WB_EAZ;} // 7 SMB3 ZPG
164OP(_0d7) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(5);WB_EAZ;} // 7 SMB5 ZPG
165OP(_0f7) { int tmp; H6280_CYCLES(7); RD_ZPG; SMB(7);WB_EAZ;} // 7 SMB7 ZPG
166166
167OP(_008) {         h6280_ICount -= 3;        PHP;         } // 3 PHP
168OP(_028) {         h6280_ICount -= 4;        PLP;         } // 4 PLP
169OP(_048) {         h6280_ICount -= 3;        PHA;         } // 3 PHA
170OP(_068) {         h6280_ICount -= 4;        PLA;         } // 4 PLA
171OP(_088) {         h6280_ICount -= 2;        DEY;         } // 2 DEY
172OP(_0a8) {         h6280_ICount -= 2;        TAY;         } // 2 TAY
173OP(_0c8) {         h6280_ICount -= 2;        INY;         } // 2 INY
174OP(_0e8) {         h6280_ICount -= 2;        INX;         } // 2 INX
167OP(_008) {         H6280_CYCLES(3);        PHP;         } // 3 PHP
168OP(_028) {         H6280_CYCLES(4);        PLP;         } // 4 PLP
169OP(_048) {         H6280_CYCLES(3);        PHA;         } // 3 PHA
170OP(_068) {         H6280_CYCLES(4);        PLA;         } // 4 PLA
171OP(_088) {         H6280_CYCLES(2);        DEY;         } // 2 DEY
172OP(_0a8) {         H6280_CYCLES(2);        TAY;         } // 2 TAY
173OP(_0c8) {         H6280_CYCLES(2);        INY;         } // 2 INY
174OP(_0e8) {         H6280_CYCLES(2);        INX;         } // 2 INX
175175
176OP(_018) {         h6280_ICount -= 2;        CLC;         } // 2 CLC
177OP(_038) {         h6280_ICount -= 2;        SEC;         } // 2 SEC
178OP(_058) {         h6280_ICount -= 2;        CLI;         } // 2 CLI
179OP(_078) {         h6280_ICount -= 2;        SEI;         } // 2 SEI
180OP(_098) {         h6280_ICount -= 2;        TYA;         } // 2 TYA
181OP(_0b8) {         h6280_ICount -= 2;        CLV;         } // 2 CLV
182OP(_0d8) {         h6280_ICount -= 2;        CLD;         } // 2 CLD
183OP(_0f8) {         h6280_ICount -= 2;        SED;         } // 2 SED
176OP(_018) {         H6280_CYCLES(2);        CLC;         } // 2 CLC
177OP(_038) {         H6280_CYCLES(2);        SEC;         } // 2 SEC
178OP(_058) {         H6280_CYCLES(2);        CLI;         } // 2 CLI
179OP(_078) {         H6280_CYCLES(2);        SEI;         } // 2 SEI
180OP(_098) {         H6280_CYCLES(2);        TYA;         } // 2 TYA
181OP(_0b8) {         H6280_CYCLES(2);        CLV;         } // 2 CLV
182OP(_0d8) {         H6280_CYCLES(2);        CLD;         } // 2 CLD
183OP(_0f8) {         H6280_CYCLES(2);        SED;         } // 2 SED
184184
185OP(_009) { int tmp; h6280_ICount -= 2; RD_IMM; ORA;         } // 2 ORA  IMM
186OP(_029) { int tmp; h6280_ICount -= 2; RD_IMM; AND;         } // 2 AND  IMM
187OP(_049) { int tmp; h6280_ICount -= 2; RD_IMM; EOR;         } // 2 EOR  IMM
188OP(_069) { int tmp; h6280_ICount -= 2; RD_IMM; ADC;         } // 2 ADC  IMM
189OP(_089) { int tmp; h6280_ICount -= 2; RD_IMM; BIT;         } // 2 BIT  IMM
190OP(_0a9) { int tmp; h6280_ICount -= 2; RD_IMM; LDA;         } // 2 LDA  IMM
191OP(_0c9) { int tmp; h6280_ICount -= 2; RD_IMM; CMP;         } // 2 CMP  IMM
192OP(_0e9) { int tmp; h6280_ICount -= 2; RD_IMM; SBC;         } // 2 SBC  IMM
185OP(_009) { int tmp; H6280_CYCLES(2); RD_IMM; ORA;         } // 2 ORA  IMM
186OP(_029) { int tmp; H6280_CYCLES(2); RD_IMM; AND;         } // 2 AND  IMM
187OP(_049) { int tmp; H6280_CYCLES(2); RD_IMM; EOR;         } // 2 EOR  IMM
188OP(_069) { int tmp; H6280_CYCLES(2); RD_IMM; ADC;         } // 2 ADC  IMM
189OP(_089) { int tmp; H6280_CYCLES(2); RD_IMM; BIT;         } // 2 BIT  IMM
190OP(_0a9) { int tmp; H6280_CYCLES(2); RD_IMM; LDA;         } // 2 LDA  IMM
191OP(_0c9) { int tmp; H6280_CYCLES(2); RD_IMM; CMP;         } // 2 CMP  IMM
192OP(_0e9) { int tmp; H6280_CYCLES(2); RD_IMM; SBC;         } // 2 SBC  IMM
193193
194OP(_019) { int tmp; h6280_ICount -= 5; RD_ABY; ORA;         } // 5 ORA  ABY
195OP(_039) { int tmp; h6280_ICount -= 5; RD_ABY; AND;         } // 5 AND  ABY
196OP(_059) { int tmp; h6280_ICount -= 5; RD_ABY; EOR;         } // 5 EOR  ABY
197OP(_079) { int tmp; h6280_ICount -= 5; RD_ABY; ADC;         } // 5 ADC  ABY
198OP(_099) { int tmp; h6280_ICount -= 5;        STA; WR_ABY; } // 5 STA  ABY
199OP(_0b9) { int tmp; h6280_ICount -= 5; RD_ABY; LDA;         } // 5 LDA  ABY
200OP(_0d9) { int tmp; h6280_ICount -= 5; RD_ABY; CMP;         } // 5 CMP  ABY
201OP(_0f9) { int tmp; h6280_ICount -= 5; RD_ABY; SBC;         } // 5 SBC  ABY
194OP(_019) { int tmp; H6280_CYCLES(5); RD_ABY; ORA;         } // 5 ORA  ABY
195OP(_039) { int tmp; H6280_CYCLES(5); RD_ABY; AND;         } // 5 AND  ABY
196OP(_059) { int tmp; H6280_CYCLES(5); RD_ABY; EOR;         } // 5 EOR  ABY
197OP(_079) { int tmp; H6280_CYCLES(5); RD_ABY; ADC;         } // 5 ADC  ABY
198OP(_099) { int tmp; H6280_CYCLES(5);        STA; WR_ABY; } // 5 STA  ABY
199OP(_0b9) { int tmp; H6280_CYCLES(5); RD_ABY; LDA;         } // 5 LDA  ABY
200OP(_0d9) { int tmp; H6280_CYCLES(5); RD_ABY; CMP;         } // 5 CMP  ABY
201OP(_0f9) { int tmp; H6280_CYCLES(5); RD_ABY; SBC;         } // 5 SBC  ABY
202202
203OP(_00a) { int tmp; h6280_ICount -= 2; RD_ACC; ASL; WB_ACC; } // 2 ASL  A
204OP(_02a) { int tmp; h6280_ICount -= 2; RD_ACC; ROL; WB_ACC; } // 2 ROL  A
205OP(_04a) { int tmp; h6280_ICount -= 2; RD_ACC; LSR; WB_ACC; } // 2 LSR  A
206OP(_06a) { int tmp; h6280_ICount -= 2; RD_ACC; ROR; WB_ACC; } // 2 ROR  A
207OP(_08a) {         h6280_ICount -= 2;        TXA;         } // 2 TXA
208OP(_0aa) {         h6280_ICount -= 2;        TAX;         } // 2 TAX
209OP(_0ca) {         h6280_ICount -= 2;        DEX;         } // 2 DEX
210OP(_0ea) {         h6280_ICount -= 2;        NOP;         } // 2 NOP
203OP(_00a) { int tmp; H6280_CYCLES(2); RD_ACC; ASL; WB_ACC; } // 2 ASL  A
204OP(_02a) { int tmp; H6280_CYCLES(2); RD_ACC; ROL; WB_ACC; } // 2 ROL  A
205OP(_04a) { int tmp; H6280_CYCLES(2); RD_ACC; LSR; WB_ACC; } // 2 LSR  A
206OP(_06a) { int tmp; H6280_CYCLES(2); RD_ACC; ROR; WB_ACC; } // 2 ROR  A
207OP(_08a) {         H6280_CYCLES(2);        TXA;         } // 2 TXA
208OP(_0aa) {         H6280_CYCLES(2);        TAX;         } // 2 TAX
209OP(_0ca) {         H6280_CYCLES(2);        DEX;         } // 2 DEX
210OP(_0ea) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
211211
212OP(_01a) {         h6280_ICount -= 2;        INA;         } // 2 INC  A
213OP(_03a) {         h6280_ICount -= 2;        DEA;         } // 2 DEC  A
214OP(_05a) {         h6280_ICount -= 3;        PHY;         } // 3 PHY
215OP(_07a) {         h6280_ICount -= 4;        PLY;         } // 4 PLY
216OP(_09a) {         h6280_ICount -= 2;        TXS;         } // 2 TXS
217OP(_0ba) {         h6280_ICount -= 2;        TSX;         } // 2 TSX
218OP(_0da) {         h6280_ICount -= 3;        PHX;         } // 3 PHX
219OP(_0fa) {         h6280_ICount -= 4;        PLX;         } // 4 PLX
212OP(_01a) {         H6280_CYCLES(2);        INA;         } // 2 INC  A
213OP(_03a) {         H6280_CYCLES(2);        DEA;         } // 2 DEC  A
214OP(_05a) {         H6280_CYCLES(3);        PHY;         } // 3 PHY
215OP(_07a) {         H6280_CYCLES(4);        PLY;         } // 4 PLY
216OP(_09a) {         H6280_CYCLES(2);        TXS;         } // 2 TXS
217OP(_0ba) {         H6280_CYCLES(2);        TSX;         } // 2 TSX
218OP(_0da) {         H6280_CYCLES(3);        PHX;         } // 3 PHX
219OP(_0fa) {         H6280_CYCLES(4);        PLX;         } // 4 PLX
220220
221OP(_00b) {                             ILL;         } // 2 ???
222OP(_02b) {                             ILL;         } // 2 ???
223OP(_04b) {                             ILL;         } // 2 ???
224OP(_06b) {                             ILL;         } // 2 ???
225OP(_08b) {                             ILL;         } // 2 ???
226OP(_0ab) {                             ILL;         } // 2 ???
227OP(_0cb) {                             ILL;         } // 2 ???
228OP(_0eb) {                             ILL;         } // 2 ???
221OP(_00b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
222OP(_02b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
223OP(_04b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
224OP(_06b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
225OP(_08b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
226OP(_0ab) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
227OP(_0cb) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
228OP(_0eb) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
229229
230OP(_01b) {                             ILL;         } // 2 ???
231OP(_03b) {                             ILL;         } // 2 ???
232OP(_05b) {                             ILL;         } // 2 ???
233OP(_07b) {                             ILL;         } // 2 ???
234OP(_09b) {                             ILL;         } // 2 ???
235OP(_0bb) {                             ILL;         } // 2 ???
236OP(_0db) {                             ILL;         } // 2 ???
237OP(_0fb) {                             ILL;         } // 2 ???
230OP(_01b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
231OP(_03b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
232OP(_05b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
233OP(_07b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
234OP(_09b) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
235OP(_0bb) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
236OP(_0db) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
237OP(_0fb) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
238238
239OP(_00c) { int tmp; h6280_ICount -= 7; RD_ABS; TSB; WB_EA;  } // 7 TSB  ABS
240OP(_02c) { int tmp; h6280_ICount -= 5; RD_ABS; BIT;         } // 5 BIT  ABS
241OP(_04c) {         h6280_ICount -= 4; EA_ABS; JMP;         } // 4 JMP  ABS
242OP(_06c) { int tmp; h6280_ICount -= 7; EA_IND; JMP;         } // 7 JMP  IND
243OP(_08c) { int tmp; h6280_ICount -= 5;        STY; WR_ABS; } // 5 STY  ABS
244OP(_0ac) { int tmp; h6280_ICount -= 5; RD_ABS; LDY;         } // 5 LDY  ABS
245OP(_0cc) { int tmp; h6280_ICount -= 5; RD_ABS; CPY;         } // 5 CPY  ABS
246OP(_0ec) { int tmp; h6280_ICount -= 5; RD_ABS; CPX;         } // 5 CPX  ABS
239OP(_00c) { int tmp; H6280_CYCLES(7); RD_ABS; TSB; WB_EA;  } // 7 TSB  ABS
240OP(_02c) { int tmp; H6280_CYCLES(5); RD_ABS; BIT;         } // 5 BIT  ABS
241OP(_04c) {         H6280_CYCLES(4); EA_ABS; JMP;         } // 4 JMP  ABS
242OP(_06c) { int tmp; H6280_CYCLES(7); EA_IND; JMP;         } // 7 JMP  IND
243OP(_08c) { int tmp; H6280_CYCLES(5);        STY; WR_ABS; } // 5 STY  ABS
244OP(_0ac) { int tmp; H6280_CYCLES(5); RD_ABS; LDY;         } // 5 LDY  ABS
245OP(_0cc) { int tmp; H6280_CYCLES(5); RD_ABS; CPY;         } // 5 CPY  ABS
246OP(_0ec) { int tmp; H6280_CYCLES(5); RD_ABS; CPX;         } // 5 CPX  ABS
247247
248OP(_01c) { int tmp; h6280_ICount -= 7; RD_ABS; TRB; WB_EA;  } // 7 TRB  ABS
249OP(_03c) { int tmp; h6280_ICount -= 5; RD_ABX; BIT;         } // 5 BIT  ABX
250OP(_05c) {                             ILL;         } // 2 ???
251OP(_07c) { int tmp; h6280_ICount -= 7; EA_IAX; JMP;         } // 7 JMP  IAX
252OP(_09c) { int tmp; h6280_ICount -= 5;        STZ; WR_ABS; } // 5 STZ  ABS
253OP(_0bc) { int tmp; h6280_ICount -= 5; RD_ABX; LDY;         } // 5 LDY  ABX
254OP(_0dc) {                             ILL;         } // 2 ???
255OP(_0fc) {                             ILL;         } // 2 ???
248OP(_01c) { int tmp; H6280_CYCLES(7); RD_ABS; TRB; WB_EA;  } // 7 TRB  ABS
249OP(_03c) { int tmp; H6280_CYCLES(5); RD_ABX; BIT;         } // 5 BIT  ABX
250OP(_05c) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
251OP(_07c) { int tmp; H6280_CYCLES(7); EA_IAX; JMP;         } // 7 JMP  IAX
252OP(_09c) { int tmp; H6280_CYCLES(5);        STZ; WR_ABS; } // 5 STZ  ABS
253OP(_0bc) { int tmp; H6280_CYCLES(5); RD_ABX; LDY;         } // 5 LDY  ABX
254OP(_0dc) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
255OP(_0fc) {         H6280_CYCLES(2);        NOP;         } // 2 NOP
256256
257OP(_00d) { int tmp; h6280_ICount -= 5; RD_ABS; ORA;         } // 5 ORA  ABS
258OP(_02d) { int tmp; h6280_ICount -= 5; RD_ABS; AND;         } // 4 AND  ABS
259OP(_04d) { int tmp; h6280_ICount -= 5; RD_ABS; EOR;         } // 4 EOR  ABS
260OP(_06d) { int tmp; h6280_ICount -= 5; RD_ABS; ADC;         } // 4 ADC  ABS
261OP(_08d) { int tmp; h6280_ICount -= 5;        STA; WR_ABS; } // 4 STA  ABS
262OP(_0ad) { int tmp; h6280_ICount -= 5; RD_ABS; LDA;         } // 4 LDA  ABS
263OP(_0cd) { int tmp; h6280_ICount -= 5; RD_ABS; CMP;         } // 4 CMP  ABS
264OP(_0ed) { int tmp; h6280_ICount -= 5; RD_ABS; SBC;         } // 4 SBC  ABS
257OP(_00d) { int tmp; H6280_CYCLES(5); RD_ABS; ORA;         } // 5 ORA  ABS
258OP(_02d) { int tmp; H6280_CYCLES(5); RD_ABS; AND;         } // 5 AND  ABS
259OP(_04d) { int tmp; H6280_CYCLES(5); RD_ABS; EOR;         } // 5 EOR  ABS
260OP(_06d) { int tmp; H6280_CYCLES(5); RD_ABS; ADC;         } // 5 ADC  ABS
261OP(_08d) { int tmp; H6280_CYCLES(5);        STA; WR_ABS; } // 5 STA  ABS
262OP(_0ad) { int tmp; H6280_CYCLES(5); RD_ABS; LDA;         } // 5 LDA  ABS
263OP(_0cd) { int tmp; H6280_CYCLES(5); RD_ABS; CMP;         } // 5 CMP  ABS
264OP(_0ed) { int tmp; H6280_CYCLES(5); RD_ABS; SBC;         } // 5 SBC  ABS
265265
266OP(_01d) { int tmp; h6280_ICount -= 5; RD_ABX; ORA;         } // 5 ORA  ABX
267OP(_03d) { int tmp; h6280_ICount -= 5; RD_ABX; AND;         } // 4 AND  ABX
268OP(_05d) { int tmp; h6280_ICount -= 5; RD_ABX; EOR;         } // 4 EOR  ABX
269OP(_07d) { int tmp; h6280_ICount -= 5; RD_ABX; ADC;         } // 4 ADC  ABX
270OP(_09d) { int tmp; h6280_ICount -= 5;        STA; WR_ABX; } // 5 STA  ABX
271OP(_0bd) { int tmp; h6280_ICount -= 5; RD_ABX; LDA;         } // 5 LDA  ABX
272OP(_0dd) { int tmp; h6280_ICount -= 5; RD_ABX; CMP;         } // 4 CMP  ABX
273OP(_0fd) { int tmp; h6280_ICount -= 5; RD_ABX; SBC;         } // 4 SBC  ABX
266OP(_01d) { int tmp; H6280_CYCLES(5); RD_ABX; ORA;         } // 5 ORA  ABX
267OP(_03d) { int tmp; H6280_CYCLES(5); RD_ABX; AND;         } // 5 AND  ABX
268OP(_05d) { int tmp; H6280_CYCLES(5); RD_ABX; EOR;         } // 5 EOR  ABX
269OP(_07d) { int tmp; H6280_CYCLES(5); RD_ABX; ADC;         } // 5 ADC  ABX
270OP(_09d) { int tmp; H6280_CYCLES(5);        STA; WR_ABX; } // 5 STA  ABX
271OP(_0bd) { int tmp; H6280_CYCLES(5); RD_ABX; LDA;         } // 5 LDA  ABX
272OP(_0dd) { int tmp; H6280_CYCLES(5); RD_ABX; CMP;         } // 5 CMP  ABX
273OP(_0fd) { int tmp; H6280_CYCLES(5); RD_ABX; SBC;         } // 5 SBC  ABX
274274
275OP(_00e) { int tmp; h6280_ICount -= 7; RD_ABS; ASL; WB_EA;  } // 6 ASL  ABS
276OP(_02e) { int tmp; h6280_ICount -= 7; RD_ABS; ROL; WB_EA;  } // 6 ROL  ABS
277OP(_04e) { int tmp; h6280_ICount -= 7; RD_ABS; LSR; WB_EA;  } // 6 LSR  ABS
278OP(_06e) { int tmp; h6280_ICount -= 7; RD_ABS; ROR; WB_EA;  } // 6 ROR  ABS
279OP(_08e) { int tmp; h6280_ICount -= 5;        STX; WR_ABS; } // 4 STX  ABS
280OP(_0ae) { int tmp; h6280_ICount -= 5; RD_ABS; LDX;         } // 5 LDX  ABS
281OP(_0ce) { int tmp; h6280_ICount -= 7; RD_ABS; DEC; WB_EA;  } // 6 DEC  ABS
282OP(_0ee) { int tmp; h6280_ICount -= 7; RD_ABS; INC; WB_EA;  } // 6 INC  ABS
275OP(_00e) { int tmp; H6280_CYCLES(7); RD_ABS; ASL; WB_EA;  } // 7 ASL  ABS
276OP(_02e) { int tmp; H6280_CYCLES(7); RD_ABS; ROL; WB_EA;  } // 7 ROL  ABS
277OP(_04e) { int tmp; H6280_CYCLES(7); RD_ABS; LSR; WB_EA;  } // 7 LSR  ABS
278OP(_06e) { int tmp; H6280_CYCLES(7); RD_ABS; ROR; WB_EA;  } // 7 ROR  ABS
279OP(_08e) { int tmp; H6280_CYCLES(5);        STX; WR_ABS; } // 5 STX  ABS
280OP(_0ae) { int tmp; H6280_CYCLES(5); RD_ABS; LDX;         } // 5 LDX  ABS
281OP(_0ce) { int tmp; H6280_CYCLES(7); RD_ABS; DEC; WB_EA;  } // 7 DEC  ABS
282OP(_0ee) { int tmp; H6280_CYCLES(7); RD_ABS; INC; WB_EA;  } // 7 INC  ABS
283283
284OP(_01e) { int tmp; h6280_ICount -= 7; RD_ABX; ASL; WB_EA;  } // 7 ASL  ABX
285OP(_03e) { int tmp; h6280_ICount -= 7; RD_ABX; ROL; WB_EA;  } // 7 ROL  ABX
286OP(_05e) { int tmp; h6280_ICount -= 7; RD_ABX; LSR; WB_EA;  } // 7 LSR  ABX
287OP(_07e) { int tmp; h6280_ICount -= 7; RD_ABX; ROR; WB_EA;  } // 7 ROR  ABX
288OP(_09e) { int tmp; h6280_ICount -= 5;        STZ; WR_ABX; } // 5 STZ  ABX
289OP(_0be) { int tmp; h6280_ICount -= 5; RD_ABY; LDX;         } // 4 LDX  ABY
290OP(_0de) { int tmp; h6280_ICount -= 7; RD_ABX; DEC; WB_EA;  } // 7 DEC  ABX
291OP(_0fe) { int tmp; h6280_ICount -= 7; RD_ABX; INC; WB_EA;  } // 7 INC  ABX
284OP(_01e) { int tmp; H6280_CYCLES(7); RD_ABX; ASL; WB_EA;  } // 7 ASL  ABX
285OP(_03e) { int tmp; H6280_CYCLES(7); RD_ABX; ROL; WB_EA;  } // 7 ROL  ABX
286OP(_05e) { int tmp; H6280_CYCLES(7); RD_ABX; LSR; WB_EA;  } // 7 LSR  ABX
287OP(_07e) { int tmp; H6280_CYCLES(7); RD_ABX; ROR; WB_EA;  } // 7 ROR  ABX
288OP(_09e) { int tmp; H6280_CYCLES(5);        STZ; WR_ABX; } // 5 STZ  ABX
289OP(_0be) { int tmp; H6280_CYCLES(5); RD_ABY; LDX;         } // 5 LDX  ABY
290OP(_0de) { int tmp; H6280_CYCLES(7); RD_ABX; DEC; WB_EA;  } // 7 DEC  ABX
291OP(_0fe) { int tmp; H6280_CYCLES(7); RD_ABX; INC; WB_EA;  } // 7 INC  ABX
292292
293OP(_00f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(0);      } // 6/8 BBR0 ZPG,REL
294OP(_02f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(2);      } // 6/8 BBR2 ZPG,REL
295OP(_04f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(4);      } // 6/8 BBR4 ZPG,REL
296OP(_06f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(6);      } // 6/8 BBR6 ZPG,REL
297OP(_08f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(0);      } // 6/8 BBS0 ZPG,REL
298OP(_0af) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(2);      } // 6/8 BBS2 ZPG,REL
299OP(_0cf) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(4);      } // 6/8 BBS4 ZPG,REL
300OP(_0ef) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(6);      } // 6/8 BBS6 ZPG,REL
293OP(_00f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(0);      } // 6/8 BBR0 ZPG,REL
294OP(_02f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(2);      } // 6/8 BBR2 ZPG,REL
295OP(_04f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(4);      } // 6/8 BBR4 ZPG,REL
296OP(_06f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(6);      } // 6/8 BBR6 ZPG,REL
297OP(_08f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(0);      } // 6/8 BBS0 ZPG,REL
298OP(_0af) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(2);      } // 6/8 BBS2 ZPG,REL
299OP(_0cf) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(4);      } // 6/8 BBS4 ZPG,REL
300OP(_0ef) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(6);      } // 6/8 BBS6 ZPG,REL
301301
302OP(_01f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(1);      } // 6/8 BBR1 ZPG,REL
303OP(_03f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(3);      } // 6/8 BBR3 ZPG,REL
304OP(_05f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(5);      } // 6/8 BBR5 ZPG,REL
305OP(_07f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBR(7);      } // 6/8 BBR7 ZPG,REL
306OP(_09f) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(1);      } // 6/8 BBS1 ZPG,REL
307OP(_0bf) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(3);      } // 6/8 BBS3 ZPG,REL
308OP(_0df) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(5);      } // 6/8 BBS5 ZPG,REL
309OP(_0ff) { int tmp; h6280_ICount -= 4; RD_ZPG; BBS(7);      } // 6/8 BBS7 ZPG,REL
302OP(_01f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(1);      } // 6/8 BBR1 ZPG,REL
303OP(_03f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(3);      } // 6/8 BBR3 ZPG,REL
304OP(_05f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(5);      } // 6/8 BBR5 ZPG,REL
305OP(_07f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBR(7);      } // 6/8 BBR7 ZPG,REL
306OP(_09f) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(1);      } // 6/8 BBS1 ZPG,REL
307OP(_0bf) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(3);      } // 6/8 BBS3 ZPG,REL
308OP(_0df) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(5);      } // 6/8 BBS5 ZPG,REL
309OP(_0ff) { int tmp; H6280_CYCLES(4); RD_ZPG; BBS(7);      } // 6/8 BBS7 ZPG,REL
310310
311311static void (*insnh6280[0x100])(void) = {
312312   h6280_000,h6280_001,h6280_002,h6280_003,h6280_004,h6280_005,h6280_006,h6280_007,

Previous 15994 Revisions Next


© 1998-2018 The MESS Team