~ubuntu-branches/debian/sid/mame/sid

« back to all changes in this revision

Viewing changes to mess/src/emu/cpu/m6502/t65c02.c

  • Committer: Package Import Robot
  • Author(s): Jordi Mallach, Jordi Mallach, Emmanuel Kasper
  • Date: 2011-12-19 22:56:27 UTC
  • mfrom: (0.1.2)
  • Revision ID: package-import@ubuntu.com-20111219225627-ub5oga1oys4ogqzm
Tags: 0.144-1
[ Jordi Mallach ]
* Fix syntax errors in DEP5 copyright file (lintian).
* Use a versioned copyright Format specification field.
* Update Vcs-* URLs.
* Move transitional packages to the new metapackages section, and make
  them priority extra.
* Remove references to GNU/Linux and MESS sources from copyright.
* Add build variables for s390x.
* Use .xz tarballs as it cuts 4MB for the upstream sources.
* Add nplayers.ini as a patch. Update copyright file to add CC-BY-SA-3.0.

[ Emmanuel Kasper ]
* New upstream release. Closes: #651538.
* Add Free Desktop compliant png icons of various sizes taken from
  the hydroxygen iconset
* Mess is now built from a new source package, to avoid possible source
  incompatibilities between mame and the mess overlay.
* Mame-tools are not built from the mame source package anymore, but
  from the mess source package

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
 *
3
 
 *   tbl65c02.c
4
 
 *   65c02 opcode functions and function pointer table
5
 
 *
6
 
 *   Copyright Juergen Buchmueller, all rights reserved.
7
 
 *
8
 
 *   - This source code is released as freeware for non-commercial purposes.
9
 
 *   - You are free to use and redistribute this code in modified or
10
 
 *     unmodified form, provided you list me in the credits.
11
 
 *   - If you modify this source code, you must add a notice to each modified
12
 
 *     source file that it has been changed.  If you're a nice person, you
13
 
 *     will clearly mark each change too.  :)
14
 
 *   - If you wish to use this for commercial purposes, please contact me at
15
 
 *     pullmoll@t-online.de
16
 
 *   - The author of this copywritten work reserves the right to change the
17
 
 *     terms of its usage and license at any time, including retroactively
18
 
 *   - This entire notice must remain in the source code.
19
 
 *
20
 
 * Not sure about the timing of all the extra (undocumented) NOP instructions.
21
 
 * Core may need to be split up into two 65c02 core. Not all versions supported
22
 
 * the bit operation RMB/SMB/etc.
23
 
 *
24
 
 *****************************************************************************/
25
 
 
26
 
#undef  OP
27
 
#define OP(nn) INLINE void m65c02_##nn(m6502_Regs *cpustate)
28
 
 
29
 
/*****************************************************************************
30
 
 *****************************************************************************
31
 
 *
32
 
 *  Implementations for 65C02 opcodes
33
 
 *
34
 
 *  There are a few slight differences between Rockwell and WDC 65C02 CPUs.
35
 
 *  The absolute indexed addressing mode RMW instructions take 6 cycles on
36
 
 *  WDC 65C02 CPU but 7 cycles on a regular 6502 and a Rockwell 65C02 CPU.
37
 
 *  TODO: Implement STP and WAI for wdc65c02.
38
 
 *
39
 
 *****************************************************************************
40
 
 * op    temp     cycles             rdmem   opc  wrmem   ********************/
41
 
OP(00) { BRK_C02;                                   } /* 7 BRK */
42
 
OP(20) { JSR;                                       } /* 6 JSR */
43
 
OP(40) { RTI;                                       } /* 6 RTI */
44
 
OP(60) { RTS;                                       } /* 6 RTS */
45
 
OP(80) { int tmp; BRA_C02( 1 );                     } /* 3-4 BRA REL */
46
 
OP(a0) { int tmp; RD_IMM; LDY;                      } /* 2 LDY IMM */
47
 
OP(c0) { int tmp; RD_IMM; CPY;                      } /* 2 CPY IMM */
48
 
OP(e0) { int tmp; RD_IMM; CPX;                      } /* 2 CPX IMM */
49
 
 
50
 
OP(10) { int tmp; BRA_C02( ! ( P & F_N ) );         } /* 2-4 BPL REL */
51
 
OP(30) { int tmp; BRA_C02(   ( P & F_N ) );         } /* 2-4 BMI REL */
52
 
OP(50) { int tmp; BRA_C02( ! ( P & F_V ) );         } /* 2-4 BVC REL */
53
 
OP(70) { int tmp; BRA_C02(   ( P & F_V ) );         } /* 2-4 BVS REL */
54
 
OP(90) { int tmp; BRA_C02( ! ( P & F_C ) );         } /* 2-4 BCC REL */
55
 
OP(b0) { int tmp; BRA_C02(   ( P & F_C ) );         } /* 2-4 BCS REL */
56
 
OP(d0) { int tmp; BRA_C02( ! ( P & F_Z ) );         } /* 2-4 BNE REL */
57
 
OP(f0) { int tmp; BRA_C02(   ( P & F_Z ) );         } /* 2-4 BEQ REL */
58
 
 
59
 
OP(01) { int tmp; RD_IDX; ORA;                      } /* 6 ORA IDX */
60
 
OP(21) { int tmp; RD_IDX; AND;                      } /* 6 AND IDX */
61
 
OP(41) { int tmp; RD_IDX; EOR;                      } /* 6 EOR IDX */
62
 
OP(61) { int tmp; RD_IDX; ADC_C02;                  } /* 6/7 ADC IDX */
63
 
OP(81) { int tmp; STA; WR_IDX;                      } /* 6 STA IDX */
64
 
OP(a1) { int tmp; RD_IDX; LDA;                      } /* 6 LDA IDX */
65
 
OP(c1) { int tmp; RD_IDX; CMP;                      } /* 6 CMP IDX */
66
 
OP(e1) { int tmp; RD_IDX; SBC_C02;                  } /* 6/7 SBC IDX */
67
 
 
68
 
OP(11) { int tmp; RD_IDY_C02_P; ORA;                } /* 5 ORA IDY page penalty */
69
 
OP(31) { int tmp; RD_IDY_C02_P; AND;                } /* 5 AND IDY page penalty */
70
 
OP(51) { int tmp; RD_IDY_C02_P; EOR;                } /* 5 EOR IDY page penalty */
71
 
OP(71) { int tmp; RD_IDY_C02_P; ADC_C02;            } /* 5/6 ADC IDY page penalty */
72
 
OP(91) { int tmp; STA; WR_IDY_C02_NP;               } /* 6 STA IDY */
73
 
OP(b1) { int tmp; RD_IDY_C02_P; LDA;                } /* 5 LDA IDY page penalty */
74
 
OP(d1) { int tmp; RD_IDY_C02_P; CMP;                } /* 5 CMP IDY page penalty */
75
 
OP(f1) { int tmp; RD_IDY_C02_P; SBC_C02;            } /* 5/6 SBC IDY page penalty */
76
 
 
77
 
OP(02) { RD_IMM_DISCARD; NOP;                      } /* 2 NOP not sure for rockwell */
78
 
OP(22) { RD_IMM_DISCARD; NOP;                      } /* 2 NOP not sure for rockwell */
79
 
OP(42) { RD_IMM_DISCARD; NOP;                      } /* 2 NOP not sure for rockwell */
80
 
OP(62) { RD_IMM_DISCARD; NOP;                      } /* 2 NOP not sure for rockwell */
81
 
OP(82) { RD_IMM_DISCARD; NOP;                      } /* 2 NOP not sure for rockwell */
82
 
OP(a2) { int tmp; RD_IMM; LDX;                      } /* 2 LDX IMM */
83
 
OP(c2) { RD_IMM_DISCARD; NOP;                      } /* 2 NOP not sure for rockwell */
84
 
OP(e2) { RD_IMM_DISCARD; NOP;                      } /* 2 NOP not sure for rockwell */
85
 
 
86
 
OP(12) { int tmp; RD_ZPI; ORA;                      } /* 5 ORA ZPI */
87
 
OP(32) { int tmp; RD_ZPI; AND;                      } /* 5 AND ZPI */
88
 
OP(52) { int tmp; RD_ZPI; EOR;                      } /* 5 EOR ZPI */
89
 
OP(72) { int tmp; RD_ZPI; ADC_C02;                  } /* 5/6 ADC ZPI */
90
 
OP(92) { int tmp; STA; WR_ZPI;                      } /* 5 STA ZPI */
91
 
OP(b2) { int tmp; RD_ZPI; LDA;                      } /* 5 LDA ZPI */
92
 
OP(d2) { int tmp; RD_ZPI; CMP;                      } /* 5 CMP ZPI */
93
 
OP(f2) { int tmp; RD_ZPI; SBC_C02;                  } /* 5/6 SBC ZPI */
94
 
 
95
 
OP(03) { NOP;                                       } /* 1 NOP not sure for rockwell */
96
 
OP(23) { NOP;                                       } /* 1 NOP not sure for rockwell */
97
 
OP(43) { NOP;                                       } /* 1 NOP not sure for rockwell */
98
 
OP(63) { NOP;                                       } /* 1 NOP not sure for rockwell */
99
 
OP(83) { NOP;                                       } /* 1 NOP not sure for rockwell */
100
 
OP(a3) { NOP;                                       } /* 1 NOP not sure for rockwell */
101
 
OP(c3) { NOP;                                       } /* 1 NOP not sure for rockwell */
102
 
OP(e3) { NOP;                                       } /* 1 NOP not sure for rockwell */
103
 
 
104
 
OP(13) { NOP;                                       } /* 1 NOP not sure for rockwell */
105
 
OP(33) { NOP;                                       } /* 1 NOP not sure for rockwell */
106
 
OP(53) { NOP;                                       } /* 1 NOP not sure for rockwell */
107
 
OP(73) { NOP;                                       } /* 1 NOP not sure for rockwell */
108
 
OP(93) { NOP;                                       } /* 1 NOP not sure for rockwell */
109
 
OP(b3) { NOP;                                       } /* 1 NOP not sure for rockwell */
110
 
OP(d3) { NOP;                                       } /* 1 NOP not sure for rockwell */
111
 
OP(f3) { NOP;                                       } /* 1 NOP not sure for rockwell */
112
 
 
113
 
OP(04) { int tmp; RD_ZPG; RD_EA; TSB; WB_EA;        } /* 5 TSB ZPG */
114
 
OP(24) { int tmp; RD_ZPG; BIT;                      } /* 3 BIT ZPG */
115
 
OP(44) { RD_ZPG_DISCARD; NOP;                      } /* 3 NOP not sure for rockwell */
116
 
OP(64) { int tmp; STZ; WR_ZPG;                      } /* 3 STZ ZPG */
117
 
OP(84) { int tmp; STY; WR_ZPG;                      } /* 3 STY ZPG */
118
 
OP(a4) { int tmp; RD_ZPG; LDY;                      } /* 3 LDY ZPG */
119
 
OP(c4) { int tmp; RD_ZPG; CPY;                      } /* 3 CPY ZPG */
120
 
OP(e4) { int tmp; RD_ZPG; CPX;                      } /* 3 CPX ZPG */
121
 
 
122
 
OP(14) { int tmp; RD_ZPG; RD_EA; TRB; WB_EA;        } /* 5 TRB ZPG */
123
 
OP(34) { int tmp; RD_ZPX; BIT;                      } /* 4 BIT ZPX */
124
 
OP(54) { RD_ZPX_DISCARD; NOP;                      } /* 4 NOP not sure for rockwell */
125
 
OP(74) { int tmp; STZ; WR_ZPX;                      } /* 4 STZ ZPX */
126
 
OP(94) { int tmp; STY; WR_ZPX;                      } /* 4 STY ZPX */
127
 
OP(b4) { int tmp; RD_ZPX; LDY;                      } /* 4 LDY ZPX */
128
 
OP(d4) { RD_ZPX_DISCARD; NOP;                      } /* 4 NOP not sure for rockwell */
129
 
OP(f4) { RD_ZPX_DISCARD; NOP;                      } /* 4 NOP not sure for rockwell */
130
 
 
131
 
OP(05) { int tmp; RD_ZPG; ORA;                      } /* 3 ORA ZPG */
132
 
OP(25) { int tmp; RD_ZPG; AND;                      } /* 3 AND ZPG */
133
 
OP(45) { int tmp; RD_ZPG; EOR;                      } /* 3 EOR ZPG */
134
 
OP(65) { int tmp; RD_ZPG; ADC_C02;                  } /* 3/4 ADC ZPG */
135
 
OP(85) { int tmp; STA; WR_ZPG;                      } /* 3 STA ZPG */
136
 
OP(a5) { int tmp; RD_ZPG; LDA;                      } /* 3 LDA ZPG */
137
 
OP(c5) { int tmp; RD_ZPG; CMP;                      } /* 3 CMP ZPG */
138
 
OP(e5) { int tmp; RD_ZPG; SBC_C02;                  } /* 3/4 SBC ZPG */
139
 
 
140
 
OP(15) { int tmp; RD_ZPX; ORA;                      } /* 4 ORA ZPX */
141
 
OP(35) { int tmp; RD_ZPX; AND;                      } /* 4 AND ZPX */
142
 
OP(55) { int tmp; RD_ZPX; EOR;                      } /* 4 EOR ZPX */
143
 
OP(75) { int tmp; RD_ZPX; ADC_C02;                  } /* 4/5 ADC ZPX */
144
 
OP(95) { int tmp; STA; WR_ZPX;                      } /* 4 STA ZPX */
145
 
OP(b5) { int tmp; RD_ZPX; LDA;                      } /* 4 LDA ZPX */
146
 
OP(d5) { int tmp; RD_ZPX; CMP;                      } /* 4 CMP ZPX */
147
 
OP(f5) { int tmp; RD_ZPX; SBC_C02;                  } /* 4/5 SBC ZPX */
148
 
 
149
 
OP(06) { int tmp; RD_ZPG, RD_EA; ASL; WB_EA;        } /* 5 ASL ZPG */
150
 
OP(26) { int tmp; RD_ZPG; RD_EA; ROL; WB_EA;        } /* 5 ROL ZPG */
151
 
OP(46) { int tmp; RD_ZPG; RD_EA; LSR; WB_EA;        } /* 5 LSR ZPG */
152
 
OP(66) { int tmp; RD_ZPG; RD_EA; ROR; WB_EA;        } /* 5 ROR ZPG */
153
 
OP(86) { int tmp; STX; WR_ZPG;                      } /* 3 STX ZPG */
154
 
OP(a6) { int tmp; RD_ZPG; LDX;                      } /* 3 LDX ZPG */
155
 
OP(c6) { int tmp; RD_ZPG; RD_EA; DEC; WB_EA;        } /* 5 DEC ZPG */
156
 
OP(e6) { int tmp; RD_ZPG; RD_EA; INC; WB_EA;        } /* 5 INC ZPG */
157
 
 
158
 
OP(16) { int tmp; RD_ZPX; RD_EA; ASL; WB_EA;        } /* 6 ASL ZPX */
159
 
OP(36) { int tmp; RD_ZPX; RD_EA; ROL; WB_EA;        } /* 6 ROL ZPX */
160
 
OP(56) { int tmp; RD_ZPX; RD_EA; LSR; WB_EA;        } /* 6 LSR ZPX */
161
 
OP(76) { int tmp; RD_ZPX; RD_EA; ROR; WB_EA;        } /* 6 ROR ZPX */
162
 
OP(96) { int tmp; STX; WR_ZPY;                      } /* 4 STX ZPY */
163
 
OP(b6) { int tmp; RD_ZPY; LDX;                      } /* 4 LDX ZPY */
164
 
OP(d6) { int tmp; RD_ZPX; RD_EA; DEC; WB_EA;        } /* 6 DEC ZPX */
165
 
OP(f6) { int tmp; RD_ZPX; RD_EA; INC; WB_EA;        } /* 6 INC ZPX */
166
 
 
167
 
OP(07) { int tmp; RD_ZPG; RD_EA; RMB(0);WB_EA;      } /* 5 RMB0 ZPG */
168
 
OP(27) { int tmp; RD_ZPG; RD_EA; RMB(2);WB_EA;      } /* 5 RMB2 ZPG */
169
 
OP(47) { int tmp; RD_ZPG; RD_EA; RMB(4);WB_EA;      } /* 5 RMB4 ZPG */
170
 
OP(67) { int tmp; RD_ZPG; RD_EA; RMB(6);WB_EA;      } /* 5 RMB6 ZPG */
171
 
OP(87) { int tmp; RD_ZPG; RD_EA; SMB(0);WB_EA;      } /* 5 SMB0 ZPG */
172
 
OP(a7) { int tmp; RD_ZPG; RD_EA; SMB(2);WB_EA;      } /* 5 SMB2 ZPG */
173
 
OP(c7) { int tmp; RD_ZPG; RD_EA; SMB(4);WB_EA;      } /* 5 SMB4 ZPG */
174
 
OP(e7) { int tmp; RD_ZPG; RD_EA; SMB(6);WB_EA;      } /* 5 SMB6 ZPG */
175
 
 
176
 
OP(17) { int tmp; RD_ZPG; RD_EA; RMB(1);WB_EA;      } /* 5 RMB1 ZPG */
177
 
OP(37) { int tmp; RD_ZPG; RD_EA; RMB(3);WB_EA;      } /* 5 RMB3 ZPG */
178
 
OP(57) { int tmp; RD_ZPG; RD_EA; RMB(5);WB_EA;      } /* 5 RMB5 ZPG */
179
 
OP(77) { int tmp; RD_ZPG; RD_EA; RMB(7);WB_EA;      } /* 5 RMB7 ZPG */
180
 
OP(97) { int tmp; RD_ZPG; RD_EA; SMB(1);WB_EA;      } /* 5 SMB1 ZPG */
181
 
OP(b7) { int tmp; RD_ZPG; RD_EA; SMB(3);WB_EA;      } /* 5 SMB3 ZPG */
182
 
OP(d7) { int tmp; RD_ZPG; RD_EA; SMB(5);WB_EA;      } /* 5 SMB5 ZPG */
183
 
OP(f7) { int tmp; RD_ZPG; RD_EA; SMB(7);WB_EA;      } /* 5 SMB7 ZPG */
184
 
 
185
 
OP(08) { RD_DUM; PHP;                               } /* 3 PHP */
186
 
OP(28) { RD_DUM; PLP;                               } /* 4 PLP */
187
 
OP(48) { RD_DUM; PHA;                               } /* 3 PHA */
188
 
OP(68) { RD_DUM; PLA;                               } /* 4 PLA */
189
 
OP(88) { RD_DUM; DEY;                               } /* 2 DEY */
190
 
OP(a8) { RD_DUM; TAY;                               } /* 2 TAY */
191
 
OP(c8) { RD_DUM; INY;                               } /* 2 INY */
192
 
OP(e8) { RD_DUM; INX;                               } /* 2 INX */
193
 
 
194
 
OP(18) { RD_DUM; CLC;                               } /* 2 CLC */
195
 
OP(38) { RD_DUM; SEC;                               } /* 2 SEC */
196
 
OP(58) { RD_DUM; CLI;                               } /* 2 CLI */
197
 
OP(78) { RD_DUM; SEI;                               } /* 2 SEI */
198
 
OP(98) { RD_DUM; TYA;                               } /* 2 TYA */
199
 
OP(b8) { RD_DUM; CLV;                               } /* 2 CLV */
200
 
OP(d8) { RD_DUM; CLD;                               } /* 2 CLD */
201
 
OP(f8) { RD_DUM; SED;                               } /* 2 SED */
202
 
 
203
 
OP(09) { int tmp; RD_IMM; ORA;                      } /* 2 ORA IMM */
204
 
OP(29) { int tmp; RD_IMM; AND;                      } /* 2 AND IMM */
205
 
OP(49) { int tmp; RD_IMM; EOR;                      } /* 2 EOR IMM */
206
 
OP(69) { int tmp; RD_IMM; ADC_C02;                  } /* 2/3 ADC IMM */
207
 
OP(89) { int tmp; RD_IMM; BIT_IMM_C02;              } /* 2 BIT IMM */
208
 
OP(a9) { int tmp; RD_IMM; LDA;                      } /* 2 LDA IMM */
209
 
OP(c9) { int tmp; RD_IMM; CMP;                      } /* 2 CMP IMM */
210
 
OP(e9) { int tmp; RD_IMM; SBC_C02;                  } /* 2/3 SBC IMM */
211
 
 
212
 
OP(19) { int tmp; RD_ABY_C02_P; ORA;                } /* 4 ORA ABY page penalty */
213
 
OP(39) { int tmp; RD_ABY_C02_P; AND;                } /* 4 AND ABY page penalty */
214
 
OP(59) { int tmp; RD_ABY_C02_P; EOR;                } /* 4 EOR ABY page penalty */
215
 
OP(79) { int tmp; RD_ABY_C02_P; ADC_C02;            } /* 4/5 ADC ABY page penalty */
216
 
OP(99) { int tmp; STA; WR_ABY_C02_NP;               } /* 5 STA ABY */
217
 
OP(b9) { int tmp; RD_ABY_C02_P; LDA;                } /* 4 LDA ABY page penalty */
218
 
OP(d9) { int tmp; RD_ABY_C02_P; CMP;                } /* 4 CMP ABY page penalty */
219
 
OP(f9) { int tmp; RD_ABY_C02_P; SBC_C02;            } /* 4/5 SBC ABY page penalty */
220
 
 
221
 
OP(0a) { int tmp; RD_DUM; RD_ACC; ASL; WB_ACC;      } /* 2 ASL A */
222
 
OP(2a) { int tmp; RD_DUM; RD_ACC; ROL; WB_ACC;      } /* 2 ROL A */
223
 
OP(4a) { int tmp; RD_DUM; RD_ACC; LSR; WB_ACC;      } /* 2 LSR A */
224
 
OP(6a) { int tmp; RD_DUM; RD_ACC; ROR; WB_ACC;      } /* 2 ROR A */
225
 
OP(8a) { RD_DUM; TXA;                               } /* 2 TXA */
226
 
OP(aa) { RD_DUM; TAX;                               } /* 2 TAX */
227
 
OP(ca) { RD_DUM; DEX;                               } /* 2 DEX */
228
 
OP(ea) { RD_DUM; NOP;                               } /* 2 NOP */
229
 
 
230
 
OP(1a) { RD_DUM;INA;                                } /* 2 INA */
231
 
OP(3a) { RD_DUM;DEA;                                } /* 2 DEA */
232
 
OP(5a) { RD_DUM;PHY;                                } /* 3 PHY */
233
 
OP(7a) { RD_DUM;PLY;                                } /* 4 PLY */
234
 
OP(9a) { RD_DUM; TXS;                               } /* 2 TXS */
235
 
OP(ba) { RD_DUM; TSX;                               } /* 2 TSX */
236
 
OP(da) { RD_DUM;PHX;                                } /* 3 PHX */
237
 
OP(fa) { RD_DUM;PLX;                                } /* 4 PLX */
238
 
 
239
 
OP(0b) { NOP;                                       } /* 1 NOP not sure for rockwell */
240
 
OP(2b) { NOP;                                       } /* 1 NOP not sure for rockwell */
241
 
OP(4b) { NOP;                                       } /* 1 NOP not sure for rockwell */
242
 
OP(6b) { NOP;                                       } /* 1 NOP not sure for rockwell */
243
 
OP(8b) { NOP;                                       } /* 1 NOP not sure for rockwell */
244
 
OP(ab) { NOP;                                       } /* 1 NOP not sure for rockwell */
245
 
OP(cb) { NOP;                                       } /* 1 NOP not sure for rockwell */
246
 
OP(eb) { NOP;                                       } /* 1 NOP not sure for rockwell */
247
 
 
248
 
OP(1b) { NOP;                                       } /* 1 NOP not sure for rockwell */
249
 
OP(3b) { NOP;                                       } /* 1 NOP not sure for rockwell */
250
 
OP(5b) { NOP;                                       } /* 1 NOP not sure for rockwell */
251
 
OP(7b) { NOP;                                       } /* 1 NOP not sure for rockwell */
252
 
OP(9b) { NOP;                                       } /* 1 NOP not sure for rockwell */
253
 
OP(bb) { NOP;                                       } /* 1 NOP not sure for rockwell */
254
 
OP(db) { NOP;                                       } /* 1 NOP not sure for rockwell */
255
 
OP(fb) { NOP;                                       } /* 1 NOP not sure for rockwell */
256
 
 
257
 
OP(0c) { int tmp; RD_ABS; RD_EA; TSB; WB_EA;        } /* 6 TSB ABS */
258
 
OP(2c) { int tmp; RD_ABS; BIT;                      } /* 4 BIT ABS */
259
 
OP(4c) { EA_ABS; JMP;                               } /* 3 JMP ABS */
260
 
OP(6c) { int tmp; EA_IND_C02; JMP;                  } /* 6 JMP IND */
261
 
OP(8c) { int tmp; STY; WR_ABS;                      } /* 4 STY ABS */
262
 
OP(ac) { int tmp; RD_ABS; LDY;                      } /* 4 LDY ABS */
263
 
OP(cc) { int tmp; RD_ABS; CPY;                      } /* 4 CPY ABS */
264
 
OP(ec) { int tmp; RD_ABS; CPX;                      } /* 4 CPX ABS */
265
 
 
266
 
OP(1c) { int tmp; RD_ABS; RD_EA; TRB; WB_EA;        } /* 6 TRB ABS */
267
 
OP(3c) { int tmp; RD_ABX_C02_P; BIT;                } /* 4 BIT ABX page penalty */
268
 
OP(5c) { RD_ABX_C02_NP_DISCARD; RD_DUM; RD_DUM; RD_DUM; RD_DUM; } /* 8 NOP ABX not sure for rockwell. Page penalty not sure */
269
 
OP(7c) { int tmp; EA_IAX; JMP;                      } /* 6 JMP IAX page penalty */
270
 
OP(9c) { int tmp; STZ; WR_ABS;                      } /* 4 STZ ABS */
271
 
OP(bc) { int tmp; RD_ABX_C02_P; LDY;                } /* 4 LDY ABX page penalty */
272
 
OP(dc) { RD_ABX_C02_NP_DISCARD; NOP;               } /* 4 NOP ABX not sure for rockwell. Page penalty not sure  */
273
 
OP(fc) { RD_ABX_C02_NP_DISCARD; NOP;               } /* 4 NOP ABX not sure for rockwell. Page penalty not sure  */
274
 
 
275
 
OP(0d) { int tmp; RD_ABS; ORA;                      } /* 4 ORA ABS */
276
 
OP(2d) { int tmp; RD_ABS; AND;                      } /* 4 AND ABS */
277
 
OP(4d) { int tmp; RD_ABS; EOR;                      } /* 4 EOR ABS */
278
 
OP(6d) { int tmp; RD_ABS; ADC_C02;                  } /* 4/5 ADC ABS */
279
 
OP(8d) { int tmp; STA; WR_ABS;                      } /* 4 STA ABS */
280
 
OP(ad) { int tmp; RD_ABS; LDA;                      } /* 4 LDA ABS */
281
 
OP(cd) { int tmp; RD_ABS; CMP;                      } /* 4 CMP ABS */
282
 
OP(ed) { int tmp; RD_ABS; SBC_C02;                  } /* 4/5 SBC ABS */
283
 
 
284
 
OP(1d) { int tmp; RD_ABX_C02_P; ORA;                } /* 4 ORA ABX page penalty */
285
 
OP(3d) { int tmp; RD_ABX_C02_P; AND;                } /* 4 AND ABX page penalty */
286
 
OP(5d) { int tmp; RD_ABX_C02_P; EOR;                } /* 4 EOR ABX page penalty */
287
 
OP(7d) { int tmp; RD_ABX_C02_P; ADC_C02;            } /* 4/5 ADC ABX page penalty */
288
 
OP(9d) { int tmp; STA; WR_ABX_C02_NP;               } /* 5 STA ABX */
289
 
OP(bd) { int tmp; RD_ABX_C02_P; LDA;                } /* 4 LDA ABX page penalty */
290
 
OP(dd) { int tmp; RD_ABX_C02_P; CMP;                } /* 4 CMP ABX page penalty */
291
 
OP(fd) { int tmp; RD_ABX_C02_P; SBC_C02;            } /* 4/5 SBC ABX page penalty */
292
 
 
293
 
OP(0e) { int tmp; RD_ABS; RD_EA; ASL; WB_EA;        } /* 6 ASL ABS */
294
 
OP(2e) { int tmp; RD_ABS; RD_EA; ROL; WB_EA;        } /* 6 ROL ABS */
295
 
OP(4e) { int tmp; RD_ABS; RD_EA; LSR; WB_EA;        } /* 6 LSR ABS */
296
 
OP(6e) { int tmp; RD_ABS; RD_EA; ROR; WB_EA;        } /* 6 ROR ABS */
297
 
OP(8e) { int tmp; STX; WR_ABS;                      } /* 4 STX ABS */
298
 
OP(ae) { int tmp; RD_ABS; LDX;                      } /* 4 LDX ABS */
299
 
OP(ce) { int tmp; RD_ABS; RD_EA; DEC; WB_EA;        } /* 6 DEC ABS */
300
 
OP(ee) { int tmp; RD_ABS; RD_EA; INC; WB_EA;        } /* 6 INC ABS */
301
 
 
302
 
OP(1e) { int tmp; RD_ABX_C02_NP; RD_EA; ASL; WB_EA; } /* 7 ASL ABX */
303
 
OP(3e) { int tmp; RD_ABX_C02_NP; RD_EA; ROL; WB_EA; } /* 7 ROL ABX */
304
 
OP(5e) { int tmp; RD_ABX_C02_NP; RD_EA; LSR; WB_EA; } /* 7 LSR ABX */
305
 
OP(7e) { int tmp; RD_ABX_C02_NP; RD_EA; ROR; WB_EA; } /* 7 ROR ABX */
306
 
OP(9e) { int tmp; STZ; WR_ABX_C02_NP;               } /* 5 STZ ABX */
307
 
OP(be) { int tmp; RD_ABY_C02_P; LDX;                } /* 4 LDX ABY page penalty */
308
 
OP(de) { int tmp; RD_ABX_C02_NP; RD_EA; DEC; WB_EA; } /* 7 DEC ABX */
309
 
OP(fe) { int tmp; RD_ABX_C02_NP; RD_EA; INC; WB_EA; } /* 7 INC ABX */
310
 
 
311
 
OP(0f) { int tmp; RD_ZPG; BBR(0);                   } /* 5-7 BBR0 ZPG */
312
 
OP(2f) { int tmp; RD_ZPG; BBR(2);                   } /* 5-7 BBR2 ZPG */
313
 
OP(4f) { int tmp; RD_ZPG; BBR(4);                   } /* 5-7 BBR4 ZPG */
314
 
OP(6f) { int tmp; RD_ZPG; BBR(6);                   } /* 5-7 BBR6 ZPG */
315
 
OP(8f) { int tmp; RD_ZPG; BBS(0);                   } /* 5-7 BBS0 ZPG */
316
 
OP(af) { int tmp; RD_ZPG; BBS(2);                   } /* 5-7 BBS2 ZPG */
317
 
OP(cf) { int tmp; RD_ZPG; BBS(4);                   } /* 5-7 BBS4 ZPG */
318
 
OP(ef) { int tmp; RD_ZPG; BBS(6);                   } /* 5-7 BBS6 ZPG */
319
 
 
320
 
OP(1f) { int tmp; RD_ZPG; BBR(1);                   } /* 5-7 BBR1 ZPG */
321
 
OP(3f) { int tmp; RD_ZPG; BBR(3);                   } /* 5-7 BBR3 ZPG */
322
 
OP(5f) { int tmp; RD_ZPG; BBR(5);                   } /* 5-7 BBR5 ZPG */
323
 
OP(7f) { int tmp; RD_ZPG; BBR(7);                   } /* 5-7 BBR7 ZPG */
324
 
OP(9f) { int tmp; RD_ZPG; BBS(1);                   } /* 5-7 BBS1 ZPG */
325
 
OP(bf) { int tmp; RD_ZPG; BBS(3);                   } /* 5-7 BBS3 ZPG */
326
 
OP(df) { int tmp; RD_ZPG; BBS(5);                   } /* 5-7 BBS5 ZPG */
327
 
OP(ff) { int tmp; RD_ZPG; BBS(7);                   } /* 5-7 BBS7 ZPG */
328
 
 
329
 
static void (*const insn65c02[0x100])(m6502_Regs *cpustate) = {
330
 
        m65c02_00,m65c02_01,m65c02_02,m65c02_03,m65c02_04,m65c02_05,m65c02_06,m65c02_07,
331
 
        m65c02_08,m65c02_09,m65c02_0a,m65c02_0b,m65c02_0c,m65c02_0d,m65c02_0e,m65c02_0f,
332
 
        m65c02_10,m65c02_11,m65c02_12,m65c02_13,m65c02_14,m65c02_15,m65c02_16,m65c02_17,
333
 
        m65c02_18,m65c02_19,m65c02_1a,m65c02_1b,m65c02_1c,m65c02_1d,m65c02_1e,m65c02_1f,
334
 
        m65c02_20,m65c02_21,m65c02_22,m65c02_23,m65c02_24,m65c02_25,m65c02_26,m65c02_27,
335
 
        m65c02_28,m65c02_29,m65c02_2a,m65c02_2b,m65c02_2c,m65c02_2d,m65c02_2e,m65c02_2f,
336
 
        m65c02_30,m65c02_31,m65c02_32,m65c02_33,m65c02_34,m65c02_35,m65c02_36,m65c02_37,
337
 
        m65c02_38,m65c02_39,m65c02_3a,m65c02_3b,m65c02_3c,m65c02_3d,m65c02_3e,m65c02_3f,
338
 
        m65c02_40,m65c02_41,m65c02_42,m65c02_43,m65c02_44,m65c02_45,m65c02_46,m65c02_47,
339
 
        m65c02_48,m65c02_49,m65c02_4a,m65c02_4b,m65c02_4c,m65c02_4d,m65c02_4e,m65c02_4f,
340
 
        m65c02_50,m65c02_51,m65c02_52,m65c02_53,m65c02_54,m65c02_55,m65c02_56,m65c02_57,
341
 
        m65c02_58,m65c02_59,m65c02_5a,m65c02_5b,m65c02_5c,m65c02_5d,m65c02_5e,m65c02_5f,
342
 
        m65c02_60,m65c02_61,m65c02_62,m65c02_63,m65c02_64,m65c02_65,m65c02_66,m65c02_67,
343
 
        m65c02_68,m65c02_69,m65c02_6a,m65c02_6b,m65c02_6c,m65c02_6d,m65c02_6e,m65c02_6f,
344
 
        m65c02_70,m65c02_71,m65c02_72,m65c02_73,m65c02_74,m65c02_75,m65c02_76,m65c02_77,
345
 
        m65c02_78,m65c02_79,m65c02_7a,m65c02_7b,m65c02_7c,m65c02_7d,m65c02_7e,m65c02_7f,
346
 
        m65c02_80,m65c02_81,m65c02_82,m65c02_83,m65c02_84,m65c02_85,m65c02_86,m65c02_87,
347
 
        m65c02_88,m65c02_89,m65c02_8a,m65c02_8b,m65c02_8c,m65c02_8d,m65c02_8e,m65c02_8f,
348
 
        m65c02_90,m65c02_91,m65c02_92,m65c02_93,m65c02_94,m65c02_95,m65c02_96,m65c02_97,
349
 
        m65c02_98,m65c02_99,m65c02_9a,m65c02_9b,m65c02_9c,m65c02_9d,m65c02_9e,m65c02_9f,
350
 
        m65c02_a0,m65c02_a1,m65c02_a2,m65c02_a3,m65c02_a4,m65c02_a5,m65c02_a6,m65c02_a7,
351
 
        m65c02_a8,m65c02_a9,m65c02_aa,m65c02_ab,m65c02_ac,m65c02_ad,m65c02_ae,m65c02_af,
352
 
        m65c02_b0,m65c02_b1,m65c02_b2,m65c02_b3,m65c02_b4,m65c02_b5,m65c02_b6,m65c02_b7,
353
 
        m65c02_b8,m65c02_b9,m65c02_ba,m65c02_bb,m65c02_bc,m65c02_bd,m65c02_be,m65c02_bf,
354
 
        m65c02_c0,m65c02_c1,m65c02_c2,m65c02_c3,m65c02_c4,m65c02_c5,m65c02_c6,m65c02_c7,
355
 
        m65c02_c8,m65c02_c9,m65c02_ca,m65c02_cb,m65c02_cc,m65c02_cd,m65c02_ce,m65c02_cf,
356
 
        m65c02_d0,m65c02_d1,m65c02_d2,m65c02_d3,m65c02_d4,m65c02_d5,m65c02_d6,m65c02_d7,
357
 
        m65c02_d8,m65c02_d9,m65c02_da,m65c02_db,m65c02_dc,m65c02_dd,m65c02_de,m65c02_df,
358
 
        m65c02_e0,m65c02_e1,m65c02_e2,m65c02_e3,m65c02_e4,m65c02_e5,m65c02_e6,m65c02_e7,
359
 
        m65c02_e8,m65c02_e9,m65c02_ea,m65c02_eb,m65c02_ec,m65c02_ed,m65c02_ee,m65c02_ef,
360
 
        m65c02_f0,m65c02_f1,m65c02_f2,m65c02_f3,m65c02_f4,m65c02_f5,m65c02_f6,m65c02_f7,
361
 
        m65c02_f8,m65c02_f9,m65c02_fa,m65c02_fb,m65c02_fc,m65c02_fd,m65c02_fe,m65c02_ff
362
 
};
363
 
 
364
 
#ifdef WDC65C02
365
 
OP(cb_wdc) { RD_DUM; RD_DUM;                            } /* 3 WAI, TODO: Implement HALT mode */
366
 
OP(db_wdc) { RD_DUM; RD_DUM;                            } /* 3 STP, TODO: Implement STP mode */
367
 
OP(1e_wdc) { int tmp; RD_ABX_P; RD_EA; ASL; WB_EA;      } /* 6 ASL ABX page penalty */
368
 
OP(3e_wdc) { int tmp; RD_ABX_P; RD_EA; ROL; WB_EA;      } /* 6 ROL ABX page penalty */
369
 
OP(5e_wdc) { int tmp; RD_ABX_P; RD_EA; LSR; WB_EA;      } /* 6 LSR ABX page penalty */
370
 
OP(7e_wdc) { int tmp; RD_ABX_P; RD_EA; ROR; WB_EA;      } /* 6 ROR ABX page penalty */
371
 
OP(de_wdc) { int tmp; RD_ABX_P; RD_EA; DEC; WB_EA;      } /* 6 DEC ABX page penalty */
372
 
OP(fe_wdc) { int tmp; RD_ABX_P; RD_EA; INC; WB_EA;      } /* 6 INC ABX page penalty */
373
 
 
374
 
static void (*const insnwdc65c02[0x100])(m6502_Regs *cpustate) = {
375
 
        m65c02_00,m65c02_01,m65c02_02,m65c02_03,m65c02_04,m65c02_05,m65c02_06,m65c02_07,
376
 
        m65c02_08,m65c02_09,m65c02_0a,m65c02_0b,m65c02_0c,m65c02_0d,m65c02_0e,m65c02_0f,
377
 
        m65c02_10,m65c02_11,m65c02_12,m65c02_13,m65c02_14,m65c02_15,m65c02_16,m65c02_17,
378
 
        m65c02_18,m65c02_19,m65c02_1a,m65c02_1b,m65c02_1c,m65c02_1d,m65c02_1e_wdc,m65c02_1f,
379
 
        m65c02_20,m65c02_21,m65c02_22,m65c02_23,m65c02_24,m65c02_25,m65c02_26,m65c02_27,
380
 
        m65c02_28,m65c02_29,m65c02_2a,m65c02_2b,m65c02_2c,m65c02_2d,m65c02_2e,m65c02_2f,
381
 
        m65c02_30,m65c02_31,m65c02_32,m65c02_33,m65c02_34,m65c02_35,m65c02_36,m65c02_37,
382
 
        m65c02_38,m65c02_39,m65c02_3a,m65c02_3b,m65c02_3c,m65c02_3d,m65c02_3e_wdc,m65c02_3f,
383
 
        m65c02_40,m65c02_41,m65c02_42,m65c02_43,m65c02_44,m65c02_45,m65c02_46,m65c02_47,
384
 
        m65c02_48,m65c02_49,m65c02_4a,m65c02_4b,m65c02_4c,m65c02_4d,m65c02_4e,m65c02_4f,
385
 
        m65c02_50,m65c02_51,m65c02_52,m65c02_53,m65c02_54,m65c02_55,m65c02_56,m65c02_57,
386
 
        m65c02_58,m65c02_59,m65c02_5a,m65c02_5b,m65c02_5c,m65c02_5d,m65c02_5e_wdc,m65c02_5f,
387
 
        m65c02_60,m65c02_61,m65c02_62,m65c02_63,m65c02_64,m65c02_65,m65c02_66,m65c02_67,
388
 
        m65c02_68,m65c02_69,m65c02_6a,m65c02_6b,m65c02_6c,m65c02_6d,m65c02_6e,m65c02_6f,
389
 
        m65c02_70,m65c02_71,m65c02_72,m65c02_73,m65c02_74,m65c02_75,m65c02_76,m65c02_77,
390
 
        m65c02_78,m65c02_79,m65c02_7a,m65c02_7b,m65c02_7c,m65c02_7d,m65c02_7e_wdc,m65c02_7f,
391
 
        m65c02_80,m65c02_81,m65c02_82,m65c02_83,m65c02_84,m65c02_85,m65c02_86,m65c02_87,
392
 
        m65c02_88,m65c02_89,m65c02_8a,m65c02_8b,m65c02_8c,m65c02_8d,m65c02_8e,m65c02_8f,
393
 
        m65c02_90,m65c02_91,m65c02_92,m65c02_93,m65c02_94,m65c02_95,m65c02_96,m65c02_97,
394
 
        m65c02_98,m65c02_99,m65c02_9a,m65c02_9b,m65c02_9c,m65c02_9d,m65c02_9e,m65c02_9f,
395
 
        m65c02_a0,m65c02_a1,m65c02_a2,m65c02_a3,m65c02_a4,m65c02_a5,m65c02_a6,m65c02_a7,
396
 
        m65c02_a8,m65c02_a9,m65c02_aa,m65c02_ab,m65c02_ac,m65c02_ad,m65c02_ae,m65c02_af,
397
 
        m65c02_b0,m65c02_b1,m65c02_b2,m65c02_b3,m65c02_b4,m65c02_b5,m65c02_b6,m65c02_b7,
398
 
        m65c02_b8,m65c02_b9,m65c02_ba,m65c02_bb,m65c02_bc,m65c02_bd,m65c02_be,m65c02_bf,
399
 
        m65c02_c0,m65c02_c1,m65c02_c2,m65c02_c3,m65c02_c4,m65c02_c5,m65c02_c6,m65c02_c7,
400
 
        m65c02_c8,m65c02_c9,m65c02_ca,m65c02_cb_wdc,m65c02_cc,m65c02_cd,m65c02_ce,m65c02_cf,
401
 
        m65c02_d0,m65c02_d1,m65c02_d2,m65c02_d3,m65c02_d4,m65c02_d5,m65c02_d6,m65c02_d7,
402
 
        m65c02_d8,m65c02_d9,m65c02_da,m65c02_db_wdc,m65c02_dc,m65c02_dd,m65c02_de_wdc,m65c02_df,
403
 
        m65c02_e0,m65c02_e1,m65c02_e2,m65c02_e3,m65c02_e4,m65c02_e5,m65c02_e6,m65c02_e7,
404
 
        m65c02_e8,m65c02_e9,m65c02_ea,m65c02_eb,m65c02_ec,m65c02_ed,m65c02_ee,m65c02_ef,
405
 
        m65c02_f0,m65c02_f1,m65c02_f2,m65c02_f3,m65c02_f4,m65c02_f5,m65c02_f6,m65c02_f7,
406
 
        m65c02_f8,m65c02_f9,m65c02_fa,m65c02_fb,m65c02_fc,m65c02_fd,m65c02_fe_wdc,m65c02_ff
407
 
};
408
 
#endif
409
 
 
410