mos6510 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,946 +0,0 @@
1
-
2
- jsSID.MOS6510 = function(mem, sid) {
3
-
4
- // other internal values
5
- this.cycles = 0;
6
- this.bval = 0;
7
- this.wval = 0;
8
-
9
- if(mem) {
10
- this.mem = mem;
11
- } else {
12
- this.mem = new Array(65536);
13
- for(var i=0; i<65536; i++) {
14
- memory[i]=0;
15
- }
16
- }
17
-
18
- if(sid) {
19
- this.sid = sid;
20
- } else {
21
- this.sid = null;
22
- }
23
-
24
- this.cpuReset();
25
-
26
- }
27
-
28
- jsSID.MOS6510.prototype.getmem = function(addr) {
29
- //if (addr < 0 || addr > 65536) console.log("jsSID.MOS6510.getmem: out of range addr: " + addr + " (caller: " + arguments.caller + ")");
30
- //if (addr == 0xdd0d) {
31
- // this.mem[addr] = 0;
32
- //}
33
- return this.mem[addr];
34
- };
35
-
36
- jsSID.MOS6510.prototype.setmem = function(addr, value) {
37
- //if (addr < 0 || addr > 65535) console.log("jsSID.MOS6510.getmem: out of range addr: " + addr + " (caller: " + arguments.caller + ")");
38
- //if (value < 0 || value > 255 ) console.log("jsSID.MOS6510.getmem: out of range value: " + value + " (caller: " + arguments.caller + ")");
39
- if ((addr & 0xfc00) == 0xd400 && this.sid !== null) {
40
- this.sid.poke(addr & 0x1f, value);
41
- if (addr > 0xd418) {
42
- console.log("attempted digi poke:", addr, value);
43
- this.sid.pokeDigi(addr, value);
44
- }
45
- } else {
46
- this.mem[addr] = value;
47
- }
48
-
49
- };
50
-
51
- // just like pc++, but with bound check on pc after
52
- jsSID.MOS6510.prototype.pcinc = function(mode) {
53
- var pc = this.pc++;
54
- this.pc &= 0xffff;
55
- return pc;
56
- };
57
-
58
- jsSID.MOS6510.prototype.getaddr = function(mode) {
59
-
60
- var ad,ad2;
61
- switch(mode) {
62
- case jsSID.MOS6510.mode.imp:
63
- this.cycles += 2;
64
- return 0;
65
- case jsSID.MOS6510.mode.imm:
66
- this.cycles += 2;
67
- return this.getmem(this.pcinc());
68
- case jsSID.MOS6510.mode.abs:
69
- this.cycles += 4;
70
- ad = this.getmem(this.pcinc());
71
- ad |= this.getmem(this.pcinc()) << 8;
72
- return this.getmem(ad);
73
- case jsSID.MOS6510.mode.absx:
74
- this.cycles += 4;
75
- ad = this.getmem(this.pcinc());
76
- ad |= 256 * this.getmem(this.pcinc());
77
- ad2 = ad + this.x;
78
- ad2 &= 0xffff;
79
- if ((ad2 & 0xff00) != (ad & 0xff00)) this.cycles++;
80
- return this.getmem(ad2);
81
- case jsSID.MOS6510.mode.absy:
82
- this.cycles += 4;
83
- ad = this.getmem(this.pcinc());
84
- ad |= 256 * this.getmem(this.pcinc());
85
- ad2 = ad + this.y;
86
- ad2 &= 0xffff;
87
- if ((ad2 & 0xff00) != (ad & 0xff00)) this.cycles++;
88
- return this.getmem(ad2);
89
- case jsSID.MOS6510.mode.zp:
90
- this.cycles += 3;
91
- ad = this.getmem(this.pcinc());
92
- return this.getmem(ad);
93
- case jsSID.MOS6510.mode.zpx:
94
- this.cycles += 4;
95
- ad = this.getmem(this.pcinc());
96
- ad += this.x;
97
- return this.getmem(ad & 0xff);
98
- case jsSID.MOS6510.mode.zpy:
99
- this.cycles += 4;
100
- ad = this.getmem(this.pcinc());
101
- ad += this.y;
102
- return this.getmem(ad & 0xff);
103
- case jsSID.MOS6510.mode.indx:
104
- this.cycles += 6;
105
- ad = this.getmem(this.pcinc());
106
- ad += this.x;
107
- ad2 = this.getmem(ad & 0xff);
108
- ad++;
109
- ad2 |= this.getmem(ad & 0xff) << 8;
110
- return this.getmem(ad2);
111
- case jsSID.MOS6510.mode.indy:
112
- this.cycles += 5;
113
- ad = this.getmem(this.pcinc());
114
- ad2 = this.getmem(ad);
115
- ad2 |= this.getmem((ad + 1) & 0xff) << 8;
116
- ad = ad2 + this.y;
117
- ad &= 0xffff;
118
- if ((ad2 & 0xff00) != (ad & 0xff00)) this.cycles++;
119
- return this.getmem(ad);
120
- case jsSID.MOS6510.mode.acc:
121
- this.cycles += 2;
122
- return this.a;
123
- }
124
- console.log("getaddr: attempted unhandled mode");
125
- return 0;
126
-
127
- };
128
-
129
- jsSID.MOS6510.prototype.setaddr = function(mode, val) {
130
- var ad,ad2;
131
- // FIXME: not checking pc addresses as all should be relative to a valid instruction
132
- switch(mode) {
133
- case jsSID.MOS6510.mode.abs:
134
- this.cycles += 2;
135
- ad = this.getmem(this.pc - 2);
136
- ad |= 256 * this.getmem(this.pc - 1);
137
- this.setmem(ad, val);
138
- return;
139
- case jsSID.MOS6510.mode.absx:
140
- this.cycles += 3;
141
- ad = this.getmem(this.pc - 2);
142
- ad |= 256 * this.getmem(this.pc - 1);
143
- ad2 = ad + this.x;
144
- ad2 &= 0xffff;
145
- if ((ad2 & 0xff00) != (ad & 0xff00)) this.cycles--;
146
- this.setmem(ad2, val);
147
- return;
148
- case jsSID.MOS6510.mode.zp:
149
- this.cycles += 2;
150
- ad = this.getmem(this.pc - 1);
151
- this.setmem(ad, val);
152
- return;
153
- case jsSID.MOS6510.mode.zpx:
154
- this.cycles += 2;
155
- ad = this.getmem(this.pc - 1);
156
- ad += this.x;
157
- this.setmem(ad & 0xff, val);
158
- return;
159
- case jsSID.MOS6510.mode.acc:
160
- this.a = val;
161
- return;
162
- }
163
- console.log("setaddr: attempted unhandled mode");
164
- };
165
-
166
- jsSID.MOS6510.prototype.putaddr = function(mode, val) {
167
- var ad,ad2;
168
- switch(mode) {
169
- case jsSID.MOS6510.mode.abs:
170
- this.cycles += 4;
171
- ad = this.getmem(this.pcinc());
172
- ad |= this.getmem(this.pcinc()) << 8;
173
- this.setmem(ad, val);
174
- return;
175
- case jsSID.MOS6510.mode.absx:
176
- this.cycles += 4;
177
- ad = this.getmem(this.pcinc());
178
- ad |= this.getmem(this.pcinc()) << 8;
179
- ad2 = ad + this.x;
180
- ad2 &= 0xffff;
181
- this.setmem(ad2, val);
182
- return;
183
- case jsSID.MOS6510.mode.absy:
184
- this.cycles += 4;
185
- ad = this.getmem(this.pcinc());
186
- ad |= this.getmem(this.pcinc()) << 8;
187
- ad2 = ad + this.y;
188
- ad2 &= 0xffff;
189
- if ((ad2 & 0xff00) != (ad & 0xff00)) this.cycles++;
190
- this.setmem(ad2, val);
191
- return;
192
- case jsSID.MOS6510.mode.zp:
193
- this.cycles += 3;
194
- ad = this.getmem(this.pcinc());
195
- this.setmem(ad, val);
196
- return;
197
- case jsSID.MOS6510.mode.zpx:
198
- this.cycles += 4;
199
- ad = this.getmem(this.pcinc());
200
- ad += this.x;
201
- this.setmem(ad & 0xff, val);
202
- return;
203
- case jsSID.MOS6510.mode.zpy:
204
- this.cycles += 4;
205
- ad = this.getmem(this.pcinc());
206
- ad += this.y;
207
- this.setmem(ad & 0xff,val);
208
- return;
209
- case jsSID.MOS6510.mode.indx:
210
- this.cycles += 6;
211
- ad = this.getmem(this.pcinc());
212
- ad += this.x;
213
- ad2 = this.getmem(ad & 0xff);
214
- ad++;
215
- ad2 |= this.getmem(ad & 0xff) << 8;
216
- this.setmem(ad2, val);
217
- return;
218
- case jsSID.MOS6510.mode.indy:
219
- this.cycles += 5;
220
- ad = this.getmem(this.pcinc());
221
- ad2 = this.getmem(ad);
222
- ad2 |= this.getmem((ad + 1) & 0xff) << 8;
223
- ad = ad2 + this.y;
224
- ad &= 0xffff;
225
- this.setmem(ad, val);
226
- return;
227
- case jsSID.MOS6510.mode.acc:
228
- this.cycles += 2;
229
- this.a = val;
230
- return;
231
- }
232
- console.log("putaddr: attempted unhandled mode");
233
- };
234
-
235
- jsSID.MOS6510.prototype.setflags = function(flag, cond) {
236
- if (cond) {
237
- this.p |= flag;
238
- } else {
239
- this.p &= ~flag & 0xff;
240
- }
241
- };
242
-
243
- jsSID.MOS6510.prototype.push = function(val) {
244
- this.setmem(0x100 + this.s, val);
245
- if (this.s) this.s--;
246
- };
247
-
248
- jsSID.MOS6510.prototype.pop = function() {
249
- if (this.s < 0xff) this.s++;
250
- return this.getmem(0x100 + this.s);
251
- };
252
-
253
- jsSID.MOS6510.prototype.branch = function(flag) {
254
- var dist = this.getaddr(jsSID.MOS6510.mode.imm);
255
- // FIXME: while this was checked out, it still seems too complicated
256
- // make signed
257
- if (dist & 0x80) {
258
- dist = 0 - ((~dist & 0xff) + 1);
259
- }
260
-
261
- // this here needs to be extracted for general 16-bit rounding needs
262
- this.wval= this.pc + dist;
263
- // FIXME: added boundary checks to wrap around. Not sure this is whats needed
264
- if (this.wval < 0) this.wval += 65536;
265
- this.wval &= 0xffff;
266
- if (flag) {
267
- this.cycles += ((this.pc & 0x100) != (this.wval & 0x100)) ? 2 : 1;
268
- this.pc = this.wval;
269
- }
270
- };
271
-
272
- jsSID.MOS6510.prototype.cpuReset = function() {
273
- this.a = 0;
274
- this.x = 0;
275
- this.y = 0;
276
- this.p = 0;
277
- this.s = 255;
278
- this.pc = this.getmem(0xfffc);
279
- this.pc |= 256 * this.getmem(0xfffd);
280
- };
281
-
282
- jsSID.MOS6510.prototype.cpuResetTo = function(npc, na) {
283
- this.a = na || 0;
284
- this.x = 0;
285
- this.y = 0;
286
- this.p = 0;
287
- this.s = 255;
288
- this.pc = npc;
289
- };
290
-
291
- jsSID.MOS6510.prototype.cpuParse = function() {
292
- var c;
293
- this.cycles = 0;
294
-
295
- var opc = this.getmem(this.pcinc());
296
- var cmd = jsSID.MOS6510.opcodes[opc][0];
297
- var addr = jsSID.MOS6510.opcodes[opc][1];
298
-
299
- //console.log(opc, cmd, addr);
300
-
301
- switch (cmd) {
302
- case jsSID.MOS6510.inst.adc:
303
- this.wval = this.a + this.getaddr(addr) + ((this.p & jsSID.MOS6510.flag.C) ? 1 : 0);
304
- this.setflags(jsSID.MOS6510.flag.C, this.wval & 0x100);
305
- this.a = this.wval & 0xff;
306
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
307
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
308
- this.setflags(jsSID.MOS6510.flag.V, ((this.p & jsSID.MOS6510.flag.C) ? 1 : 0) ^ ((this.p & jsSID.MOS6510.flag.N) ? 1 : 0));
309
- break;
310
- case jsSID.MOS6510.inst.and:
311
- this.bval = this.getaddr(addr);
312
- this.a &= this.bval;
313
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
314
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
315
- break;
316
- case jsSID.MOS6510.inst.asl:
317
- this.wval = this.getaddr(addr);
318
- this.wval <<= 1;
319
- this.setaddr(addr, this.wval & 0xff);
320
- this.setflags(jsSID.MOS6510.flag.Z, !this.wval);
321
- this.setflags(jsSID.MOS6510.flag.N, this.wval & 0x80);
322
- this.setflags(jsSID.MOS6510.flag.C, this.wval & 0x100);
323
- break;
324
- case jsSID.MOS6510.inst.bcc:
325
- this.branch(!(this.p & jsSID.MOS6510.flag.C));
326
- break;
327
- case jsSID.MOS6510.inst.bcs:
328
- this.branch(this.p & jsSID.MOS6510.flag.C);
329
- break;
330
- case jsSID.MOS6510.inst.bne:
331
- this.branch(!(this.p & jsSID.MOS6510.flag.Z));
332
- break;
333
- case jsSID.MOS6510.inst.beq:
334
- this.branch(this.p & jsSID.MOS6510.flag.Z);
335
- break;
336
- case jsSID.MOS6510.inst.bpl:
337
- this.branch(!(this.p & jsSID.MOS6510.flag.N));
338
- break;
339
- case jsSID.MOS6510.inst.bmi:
340
- this.branch(this.p & jsSID.MOS6510.flag.N);
341
- break;
342
- case jsSID.MOS6510.inst.bvc:
343
- this.branch(!(this.p & jsSID.MOS6510.flag.V));
344
- break;
345
- case jsSID.MOS6510.inst.bvs:
346
- this.branch(this.p & jsSID.MOS6510.flag.V);
347
- break;
348
- case jsSID.MOS6510.inst.bit:
349
- this.bval = this.getaddr(addr);
350
- this.setflags(jsSID.MOS6510.flag.Z, !(this.a & this.bval));
351
- this.setflags(jsSID.MOS6510.flag.N, this.bval & 0x80);
352
- this.setflags(jsSID.MOS6510.flag.V, this.bval & 0x40);
353
- break;
354
- case jsSID.MOS6510.inst.brk:
355
- pc=0; // just quit per rockbox
356
- //this.push(this.pc & 0xff);
357
- //this.push(this.pc >> 8);
358
- //this.push(this.p);
359
- //this.setflags(jsSID.MOS6510.flag.B, 1);
360
- // FIXME: should Z be set as well?
361
- //this.pc = this.getmem(0xfffe);
362
- //this.cycles += 7;
363
- break;
364
- case jsSID.MOS6510.inst.clc:
365
- this.cycles += 2;
366
- this.setflags(jsSID.MOS6510.flag.C, 0);
367
- break;
368
- case jsSID.MOS6510.inst.cld:
369
- this.cycles += 2;
370
- this.setflags(jsSID.MOS6510.flag.D, 0);
371
- break;
372
- case jsSID.MOS6510.inst.cli:
373
- this.cycles += 2;
374
- this.setflags(jsSID.MOS6510.flag.I, 0);
375
- break;
376
- case jsSID.MOS6510.inst.clv:
377
- this.cycles += 2;
378
- this.setflags(jsSID.MOS6510.flag.V, 0);
379
- break;
380
- case jsSID.MOS6510.inst.cmp:
381
- this.bval = this.getaddr(addr);
382
- this.wval = this.a - this.bval;
383
- // FIXME: may not actually be needed (yay 2's complement)
384
- if(this.wval < 0) this.wval += 256;
385
- this.setflags(jsSID.MOS6510.flag.Z, !this.wval);
386
- this.setflags(jsSID.MOS6510.flag.N, this.wval & 0x80);
387
- this.setflags(jsSID.MOS6510.flag.C, this.a >= this.bval);
388
- break;
389
- case jsSID.MOS6510.inst.cpx:
390
- this.bval = this.getaddr(addr);
391
- this.wval = this.x - this.bval;
392
- // FIXME: may not actually be needed (yay 2's complement)
393
- if(this.wval < 0) this.wval += 256;
394
- this.setflags(jsSID.MOS6510.flag.Z, !this.wval);
395
- this.setflags(jsSID.MOS6510.flag.N, this.wval & 0x80);
396
- this.setflags(jsSID.MOS6510.flag.C, this.x >= this.bval);
397
- break;
398
- case jsSID.MOS6510.inst.cpy:
399
- this.bval = this.getaddr(addr);
400
- this.wval = this.y - this.bval;
401
- // FIXME: may not actually be needed (yay 2's complement)
402
- if(this.wval < 0) this.wval += 256;
403
- this.setflags(jsSID.MOS6510.flag.Z, !this.wval);
404
- this.setflags(jsSID.MOS6510.flag.N, this.wval & 0x80);
405
- this.setflags(jsSID.MOS6510.flag.C, this.y >= this.bval);
406
- break;
407
- case jsSID.MOS6510.inst.dec:
408
- this.bval = this.getaddr(addr);
409
- this.bval--;
410
- // FIXME: may be able to just mask this (yay 2's complement)
411
- if(this.bval < 0) this.bval += 256;
412
- this.setaddr(addr, this.bval);
413
- this.setflags(jsSID.MOS6510.flag.Z, !this.bval);
414
- this.setflags(jsSID.MOS6510.flag.N, this.bval & 0x80);
415
- break;
416
- case jsSID.MOS6510.inst.dex:
417
- this.cycles += 2;
418
- this.x--;
419
- // FIXME: may be able to just mask this (yay 2's complement)
420
- if(this.x < 0) this.x += 256;
421
- this.setflags(jsSID.MOS6510.flag.Z, !this.x);
422
- this.setflags(jsSID.MOS6510.flag.N, this.x & 0x80);
423
- break;
424
- case jsSID.MOS6510.inst.dey:
425
- this.cycles += 2;
426
- this.y--;
427
- // FIXME: may be able to just mask this (yay 2's complement)
428
- if(this.y < 0) this.y += 256;
429
- this.setflags(jsSID.MOS6510.flag.Z, !this.y);
430
- this.setflags(jsSID.MOS6510.flag.N, this.y & 0x80);
431
- break;
432
- case jsSID.MOS6510.inst.eor:
433
- this.bval = this.getaddr(addr);
434
- this.a ^= this.bval;
435
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
436
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
437
- break;
438
- case jsSID.MOS6510.inst.inc:
439
- this.bval = this.getaddr(addr);
440
- this.bval++;
441
- this.bval &= 0xff;
442
- this.setaddr(addr, this.bval);
443
- this.setflags(jsSID.MOS6510.flag.Z, !this.bval);
444
- this.setflags(jsSID.MOS6510.flag.N, this.bval & 0x80);
445
- break;
446
- case jsSID.MOS6510.inst.inx:
447
- this.cycles += 2;
448
- this.x++;
449
- this.x &= 0xff;
450
- this.setflags(jsSID.MOS6510.flag.Z, !this.x);
451
- this.setflags(jsSID.MOS6510.flag.N, this.x & 0x80);
452
- break;
453
- case jsSID.MOS6510.inst.iny:
454
- this.cycles += 2;
455
- this.y++;
456
- this.y &= 0xff;
457
- this.setflags(jsSID.MOS6510.flag.Z, !this.y);
458
- this.setflags(jsSID.MOS6510.flag.N, this.y & 0x80);
459
- break;
460
- case jsSID.MOS6510.inst.jmp:
461
- this.cycles += 3;
462
- this.wval = this.getmem(this.pcinc());
463
- this.wval |= 256 * this.getmem(this.pcinc());
464
- switch (addr) {
465
- case jsSID.MOS6510.mode.abs:
466
- this.pc = this.wval;
467
- break;
468
- case jsSID.MOS6510.mode.ind:
469
- this.pc = this.getmem(this.wval);
470
- this.pc |= 256 * this.getmem((this.wval + 1) & 0xffff);
471
- this.cycles += 2;
472
- break;
473
- }
474
- break;
475
- case jsSID.MOS6510.inst.jsr:
476
- this.cycles += 6;
477
- this.push(((this.pc + 1) & 0xffff) >> 8);
478
- this.push((this.pc + 1) & 0xff);
479
- this.wval = this.getmem(this.pcinc());
480
- this.wval |= 256 * this.getmem(this.pcinc());
481
- this.pc = this.wval;
482
- break;
483
- case jsSID.MOS6510.inst.lda:
484
- this.a = this.getaddr(addr);
485
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
486
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
487
- break;
488
- case jsSID.MOS6510.inst.ldx:
489
- this.x = this.getaddr(addr);
490
- this.setflags(jsSID.MOS6510.flag.Z, !this.x);
491
- this.setflags(jsSID.MOS6510.flag.N, this.x & 0x80);
492
- break;
493
- case jsSID.MOS6510.inst.ldy:
494
- this.y = this.getaddr(addr);
495
- this.setflags(jsSID.MOS6510.flag.Z, !this.y);
496
- this.setflags(jsSID.MOS6510.flag.N, this.y & 0x80);
497
- break;
498
- case jsSID.MOS6510.inst.lsr:
499
- this.bval = this.getaddr(addr);
500
- this.wval = this.bval;
501
- this.wval >>= 1;
502
- this.setaddr(addr, this.wval & 0xff);
503
- this.setflags(jsSID.MOS6510.flag.Z, !this.wval);
504
- this.setflags(jsSID.MOS6510.flag.N, this.wval & 0x80);
505
- this.setflags(jsSID.MOS6510.flag.C, this.bval & 1);
506
- break;
507
- case jsSID.MOS6510.inst.nop:
508
- this.cycles += 2;
509
- break;
510
- case jsSID.MOS6510.inst.ora:
511
- this.bval = this.getaddr(addr);
512
- this.a |= this.bval;
513
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
514
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
515
- break;
516
- case jsSID.MOS6510.inst.pha:
517
- this.push(this.a);
518
- this.cycles += 3;
519
- break;
520
- case jsSID.MOS6510.inst.php:
521
- this.push(this.p);
522
- this.cycles += 3;
523
- break;
524
- case jsSID.MOS6510.inst.pla:
525
- this.a = this.pop();
526
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
527
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
528
- this.cycles += 4;
529
- break;
530
- case jsSID.MOS6510.inst.plp:
531
- this.p = this.pop();
532
- this.cycles += 4;
533
- break;
534
- case jsSID.MOS6510.inst.rol:
535
- this.bval = this.getaddr(addr);
536
- c = (this.p & jsSID.MOS6510.flag.C) ? 1 : 0;
537
- this.setflags(jsSID.MOS6510.flag.C, this.bval & 0x80);
538
- this.bval <<= 1;
539
- this.bval |= c;
540
- this.bval &= 0xff;
541
- this.setaddr(addr, this.bval);
542
- this.setflags(jsSID.MOS6510.flag.N, this.bval & 0x80);
543
- this.setflags(jsSID.MOS6510.flag.Z, !this.bval);
544
- break;
545
- case jsSID.MOS6510.inst.ror:
546
- this.bval = this.getaddr(addr);
547
- c = (this.p & jsSID.MOS6510.flag.C) ? 128 : 0;
548
- this.setflags(jsSID.MOS6510.flag.C, this.bval & 1);
549
- this.bval >>= 1;
550
- this.bval |= c;
551
- this.setaddr(addr, this.bval);
552
- this.setflags(jsSID.MOS6510.flag.N, this.bval & 0x80);
553
- this.setflags(jsSID.MOS6510.flag.Z, !this.bval);
554
- break;
555
- case jsSID.MOS6510.inst.rti:
556
- // treat like RTS
557
- case jsSID.MOS6510.inst.rts:
558
- this.wval = this.pop();
559
- this.wval |= 256 * this.pop();
560
- this.pc = this.wval + 1;
561
- this.cycles += 6;
562
- break;
563
- case jsSID.MOS6510.inst.sbc:
564
- this.bval = this.getaddr(addr) ^ 0xff;
565
- this.wval = this.a + this.bval + (( this.p & jsSID.MOS6510.flag.C) ? 1 : 0);
566
- this.setflags(jsSID.MOS6510.flag.C, this.wval & 0x100);
567
- this.a = this.wval & 0xff;
568
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
569
- this.setflags(jsSID.MOS6510.flag.N, this.a > 127);
570
- this.setflags(jsSID.MOS6510.flag.V, ((this.p & jsSID.MOS6510.flag.C) ? 1 : 0) ^ ((this.p & jsSID.MOS6510.flag.N) ? 1 : 0));
571
- break;
572
- case jsSID.MOS6510.inst.sec:
573
- this.cycles += 2;
574
- this.setflags(jsSID.MOS6510.flag.C, 1);
575
- break;
576
- case jsSID.MOS6510.inst.sed:
577
- this.cycles += 2;
578
- this.setflags(jsSID.MOS6510.flag.D, 1);
579
- break;
580
- case jsSID.MOS6510.inst.sei:
581
- this.cycles += 2;
582
- this.setflags(jsSID.MOS6510.flag.I, 1);
583
- break;
584
- case jsSID.MOS6510.inst.sta:
585
- this.putaddr(addr, this.a);
586
- break;
587
- case jsSID.MOS6510.inst.stx:
588
- this.putaddr(addr, this.x);
589
- break;
590
- case jsSID.MOS6510.inst.sty:
591
- this.putaddr(addr, this.y);
592
- break;
593
- case jsSID.MOS6510.inst.tax:
594
- this.cycles += 2;
595
- this.x = this.a;
596
- this.setflags(jsSID.MOS6510.flag.Z, !this.x);
597
- this.setflags(jsSID.MOS6510.flag.N, this.x & 0x80);
598
- break;
599
- case jsSID.MOS6510.inst.tay:
600
- this.cycles += 2;
601
- this.y = this.a;
602
- this.setflags(jsSID.MOS6510.flag.Z, !this.y);
603
- this.setflags(jsSID.MOS6510.flag.N, this.y & 0x80);
604
- break;
605
- case jsSID.MOS6510.inst.tsx:
606
- this.cycles += 2;
607
- this.x = this.s;
608
- this.setflags(jsSID.MOS6510.flag.Z, !this.x);
609
- this.setflags(jsSID.MOS6510.flag.N, this.x & 0x80);
610
- break;
611
- case jsSID.MOS6510.inst.txa:
612
- this.cycles += 2;
613
- this.a = this.x;
614
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
615
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
616
- break;
617
- case jsSID.MOS6510.inst.txs:
618
- this.cycles += 2;
619
- this.s = this.x;
620
- break;
621
- case jsSID.MOS6510.inst.tya:
622
- this.cycles += 2;
623
- this.a = this.y;
624
- this.setflags(jsSID.MOS6510.flag.Z, !this.a);
625
- this.setflags(jsSID.MOS6510.flag.N, this.a & 0x80);
626
- break;
627
- default:
628
- console.log("cpuParse: attempted unhandled instruction, opcode: ", opc);
629
- }
630
- return this.cycles;
631
-
632
- };
633
-
634
- jsSID.MOS6510.prototype.cpuJSR = function(npc, na) {
635
- var ccl = 0;
636
-
637
- this.a = na;
638
- this.x = 0;
639
- this.y = 0;
640
- this.p = 0;
641
- this.s = 255;
642
- this.pc = npc;
643
- this.push(0);
644
- this.push(0);
645
-
646
- while (this.pc > 1) {
647
- ccl += this.cpuParse();
648
- }
649
- return ccl;
650
- };
651
-
652
- // Flags Enum
653
- jsSID.MOS6510.flag = Object.freeze ({
654
- N: 128, V: 64, B: 16, D: 8, I: 4, Z: 2, C: 1
655
- });
656
-
657
-
658
- // Opcodes Enum
659
- jsSID.MOS6510.inst = Object.freeze ({
660
- adc: {}, and: {}, asl: {}, bcc: {}, bcs: {}, beq: {}, bit: {}, bmi: {}, bne: {}, bpl: {}, brk: {}, bvc: {}, bvs: {}, clc: {},
661
- cld: {}, cli: {}, clv: {}, cmp: {}, cpx: {}, cpy: {}, dec: {}, dex: {}, dey: {}, eor: {}, inc: {}, inx: {}, iny: {}, jmp: {},
662
- jsr: {}, lda: {}, ldx: {}, ldy: {}, lsr: {}, nop: {}, ora: {}, pha: {}, php: {}, pla: {}, plp: {}, rol: {}, ror: {}, rti: {},
663
- rts: {}, sbc: {}, sec: {}, sed: {}, sei: {}, sta: {}, stx: {}, sty: {}, tax: {}, tay: {}, tsx: {}, txa: {}, txs: {}, tya: {},
664
- xxx: {}
665
- });
666
-
667
- // Modes Enum
668
- jsSID.MOS6510.mode = Object.freeze ({
669
- imp: {}, imm: {}, abs: {}, absx: {}, absy: {}, zp: {}, zpx: {}, zpy: {}, ind: {}, indx: {}, indy: {}, acc: {}, rel: {}, xxx: {}
670
- });
671
-
672
-
673
- // 256 entries, each entry array pair of [inst, mode]
674
- jsSID.MOS6510.opcodes = new Array(
675
- [jsSID.MOS6510.inst.brk, jsSID.MOS6510.mode.imp], // 0x00
676
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.indx], // 0x01
677
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x02
678
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x03
679
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.zp], // 0x04
680
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.zp], // 0x05
681
- [jsSID.MOS6510.inst.asl, jsSID.MOS6510.mode.zp], // 0x06
682
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x07
683
- [jsSID.MOS6510.inst.php, jsSID.MOS6510.mode.imp], // 0x08
684
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.imm], // 0x09
685
- [jsSID.MOS6510.inst.asl, jsSID.MOS6510.mode.acc], // 0x0a
686
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x0b
687
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.abs], // 0x0c
688
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.abs], // 0x0d
689
- [jsSID.MOS6510.inst.asl, jsSID.MOS6510.mode.abs], // 0x0e
690
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x0f
691
-
692
- [jsSID.MOS6510.inst.bpl, jsSID.MOS6510.mode.rel], // 0x10
693
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.indy], // 0x11
694
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x12
695
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x13
696
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x14
697
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.zpx], // 0x15
698
- [jsSID.MOS6510.inst.asl, jsSID.MOS6510.mode.zpx], // 0x16
699
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x17
700
- [jsSID.MOS6510.inst.clc, jsSID.MOS6510.mode.imp], // 0x18
701
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.absy], // 0x19
702
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x1a
703
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x1b
704
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x1c
705
- [jsSID.MOS6510.inst.ora, jsSID.MOS6510.mode.absx], // 0x1d
706
- [jsSID.MOS6510.inst.asl, jsSID.MOS6510.mode.absx], // 0x1e
707
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x1f
708
-
709
- [jsSID.MOS6510.inst.jsr, jsSID.MOS6510.mode.abs], // 0x20
710
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.indx], // 0x21
711
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x22
712
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x23
713
- [jsSID.MOS6510.inst.bit, jsSID.MOS6510.mode.zp], // 0x24
714
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.zp], // 0x25
715
- [jsSID.MOS6510.inst.rol, jsSID.MOS6510.mode.zp], // 0x26
716
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x27
717
- [jsSID.MOS6510.inst.plp, jsSID.MOS6510.mode.imp], // 0x28
718
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.imm], // 0x29
719
- [jsSID.MOS6510.inst.rol, jsSID.MOS6510.mode.acc], // 0x2a
720
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x2b
721
- [jsSID.MOS6510.inst.bit, jsSID.MOS6510.mode.abs], // 0x2c
722
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.abs], // 0x2d
723
- [jsSID.MOS6510.inst.rol, jsSID.MOS6510.mode.abs], // 0x2e
724
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x2f
725
-
726
- [jsSID.MOS6510.inst.bmi, jsSID.MOS6510.mode.rel], // 0x30
727
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.indy], // 0x31
728
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x32
729
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x33
730
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x34
731
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.zpx], // 0x35
732
- [jsSID.MOS6510.inst.rol, jsSID.MOS6510.mode.zpx], // 0x36
733
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x37
734
- [jsSID.MOS6510.inst.sec, jsSID.MOS6510.mode.imp], // 0x38
735
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.absy], // 0x39
736
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x3a
737
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x3b
738
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x3c
739
- [jsSID.MOS6510.inst.and, jsSID.MOS6510.mode.absx], // 0x3d
740
- [jsSID.MOS6510.inst.rol, jsSID.MOS6510.mode.absx], // 0x3e
741
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x3f
742
-
743
- [jsSID.MOS6510.inst.rti, jsSID.MOS6510.mode.imp], // 0x40
744
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.indx], // 0x41
745
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x42
746
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x43
747
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.zp], // 0x44
748
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.zp], // 0x45
749
- [jsSID.MOS6510.inst.lsr, jsSID.MOS6510.mode.zp], // 0x46
750
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x47
751
- [jsSID.MOS6510.inst.pha, jsSID.MOS6510.mode.imp], // 0x48
752
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.imm], // 0x49
753
- [jsSID.MOS6510.inst.lsr, jsSID.MOS6510.mode.acc], // 0x4a
754
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x4b
755
- [jsSID.MOS6510.inst.jmp, jsSID.MOS6510.mode.abs], // 0x4c
756
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.abs], // 0x4d
757
- [jsSID.MOS6510.inst.lsr, jsSID.MOS6510.mode.abs], // 0x4e
758
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x4f
759
-
760
- [jsSID.MOS6510.inst.bvc, jsSID.MOS6510.mode.rel], // 0x50
761
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.indy], // 0x51
762
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x52
763
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x53
764
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x54
765
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.zpx], // 0x55
766
- [jsSID.MOS6510.inst.lsr, jsSID.MOS6510.mode.zpx], // 0x56
767
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x57
768
- [jsSID.MOS6510.inst.cli, jsSID.MOS6510.mode.imp], // 0x58
769
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.absy], // 0x59
770
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x5a
771
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x5b
772
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x5c
773
- [jsSID.MOS6510.inst.eor, jsSID.MOS6510.mode.absx], // 0x5d
774
- [jsSID.MOS6510.inst.lsr, jsSID.MOS6510.mode.absx], // 0x5e
775
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x5f
776
-
777
- [jsSID.MOS6510.inst.rts, jsSID.MOS6510.mode.imp], // 0x60
778
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.indx], // 0x61
779
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x62
780
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x63
781
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.zp], // 0x64
782
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.zp], // 0x65
783
- [jsSID.MOS6510.inst.ror, jsSID.MOS6510.mode.zp], // 0x66
784
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x67
785
- [jsSID.MOS6510.inst.pla, jsSID.MOS6510.mode.imp], // 0x68
786
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.imm], // 0x69
787
- [jsSID.MOS6510.inst.ror, jsSID.MOS6510.mode.acc], // 0x6a
788
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x6b
789
- [jsSID.MOS6510.inst.jmp, jsSID.MOS6510.mode.ind], // 0x6c
790
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.abs], // 0x6d
791
- [jsSID.MOS6510.inst.ror, jsSID.MOS6510.mode.abs], // 0x6e
792
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x6f
793
-
794
- [jsSID.MOS6510.inst.bvs, jsSID.MOS6510.mode.rel], // 0x70
795
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.indy], // 0x71
796
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x72
797
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x73
798
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x74
799
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.zpx], // 0x75
800
- [jsSID.MOS6510.inst.ror, jsSID.MOS6510.mode.zpx], // 0x76
801
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x77
802
- [jsSID.MOS6510.inst.sei, jsSID.MOS6510.mode.imp], // 0x78
803
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.absy], // 0x79
804
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x7a
805
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x7b
806
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x7c
807
- [jsSID.MOS6510.inst.adc, jsSID.MOS6510.mode.absx], // 0x7d
808
- [jsSID.MOS6510.inst.ror, jsSID.MOS6510.mode.absx], // 0x7e
809
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x7f
810
-
811
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.imm], // 0x80
812
- [jsSID.MOS6510.inst.sta, jsSID.MOS6510.mode.indx], // 0x81
813
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x82
814
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x83
815
- [jsSID.MOS6510.inst.sty, jsSID.MOS6510.mode.zp], // 0x84
816
- [jsSID.MOS6510.inst.sta, jsSID.MOS6510.mode.zp], // 0x85
817
- [jsSID.MOS6510.inst.stx, jsSID.MOS6510.mode.zp], // 0x86
818
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x87
819
- [jsSID.MOS6510.inst.dey, jsSID.MOS6510.mode.imp], // 0x88
820
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.imm], // 0x89
821
- [jsSID.MOS6510.inst.txa, jsSID.MOS6510.mode.acc], // 0x8a
822
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x8b
823
- [jsSID.MOS6510.inst.sty, jsSID.MOS6510.mode.abs], // 0x8c
824
- [jsSID.MOS6510.inst.sta, jsSID.MOS6510.mode.abs], // 0x8d
825
- [jsSID.MOS6510.inst.stx, jsSID.MOS6510.mode.abs], // 0x8e
826
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x8f
827
-
828
- [jsSID.MOS6510.inst.bcc, jsSID.MOS6510.mode.rel], // 0x90
829
- [jsSID.MOS6510.inst.sta, jsSID.MOS6510.mode.indy], // 0x91
830
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x92
831
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x93
832
- [jsSID.MOS6510.inst.sty, jsSID.MOS6510.mode.zpx], // 0x94
833
- [jsSID.MOS6510.inst.sta, jsSID.MOS6510.mode.zpx], // 0x95
834
- [jsSID.MOS6510.inst.stx, jsSID.MOS6510.mode.zpy], // 0x96
835
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x97
836
- [jsSID.MOS6510.inst.tya, jsSID.MOS6510.mode.imp], // 0x98
837
- [jsSID.MOS6510.inst.sta, jsSID.MOS6510.mode.absy], // 0x99
838
- [jsSID.MOS6510.inst.txs, jsSID.MOS6510.mode.acc], // 0x9a
839
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x9b
840
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x9c
841
- [jsSID.MOS6510.inst.sta, jsSID.MOS6510.mode.absx], // 0x9d
842
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.absx], // 0x9e
843
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0x9f
844
-
845
- [jsSID.MOS6510.inst.ldy, jsSID.MOS6510.mode.imm], // 0xa0
846
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.indx], // 0xa1
847
- [jsSID.MOS6510.inst.ldx, jsSID.MOS6510.mode.imm], // 0xa2
848
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xa3
849
- [jsSID.MOS6510.inst.ldy, jsSID.MOS6510.mode.zp], // 0xa4
850
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.zp], // 0xa5
851
- [jsSID.MOS6510.inst.ldx, jsSID.MOS6510.mode.zp], // 0xa6
852
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xa7
853
- [jsSID.MOS6510.inst.tay, jsSID.MOS6510.mode.imp], // 0xa8
854
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.imm], // 0xa9
855
- [jsSID.MOS6510.inst.tax, jsSID.MOS6510.mode.acc], // 0xaa
856
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xab
857
- [jsSID.MOS6510.inst.ldy, jsSID.MOS6510.mode.abs], // 0xac
858
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.abs], // 0xad
859
- [jsSID.MOS6510.inst.ldx, jsSID.MOS6510.mode.abs], // 0xae
860
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xaf
861
-
862
- [jsSID.MOS6510.inst.bcs, jsSID.MOS6510.mode.rel], // 0xb0
863
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.indy], // 0xb1
864
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xb2
865
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xb3
866
- [jsSID.MOS6510.inst.ldy, jsSID.MOS6510.mode.zpx], // 0xb4
867
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.zpx], // 0xb5
868
- [jsSID.MOS6510.inst.ldx, jsSID.MOS6510.mode.zpy], // 0xb6
869
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xb7
870
- [jsSID.MOS6510.inst.clv, jsSID.MOS6510.mode.imp], // 0xb8
871
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.absy], // 0xb9
872
- [jsSID.MOS6510.inst.tsx, jsSID.MOS6510.mode.acc], // 0xba
873
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xbb
874
- [jsSID.MOS6510.inst.ldy, jsSID.MOS6510.mode.absx], // 0xbc
875
- [jsSID.MOS6510.inst.lda, jsSID.MOS6510.mode.absx], // 0xbd
876
- [jsSID.MOS6510.inst.ldx, jsSID.MOS6510.mode.absy], // 0xbe
877
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xbf
878
-
879
- [jsSID.MOS6510.inst.cpy, jsSID.MOS6510.mode.imm], // 0xc0
880
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.indx], // 0xc1
881
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xc2
882
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xc3
883
- [jsSID.MOS6510.inst.cpy, jsSID.MOS6510.mode.zp], // 0xc4
884
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.zp], // 0xc5
885
- [jsSID.MOS6510.inst.dec, jsSID.MOS6510.mode.zp], // 0xc6
886
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xc7
887
- [jsSID.MOS6510.inst.iny, jsSID.MOS6510.mode.imp], // 0xc8
888
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.imm], // 0xc9
889
- [jsSID.MOS6510.inst.dex, jsSID.MOS6510.mode.acc], // 0xca
890
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xcb
891
- [jsSID.MOS6510.inst.cpy, jsSID.MOS6510.mode.abs], // 0xcc
892
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.abs], // 0xcd
893
- [jsSID.MOS6510.inst.dec, jsSID.MOS6510.mode.abs], // 0xce
894
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xcf
895
-
896
- [jsSID.MOS6510.inst.bne, jsSID.MOS6510.mode.rel], // 0xd0
897
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.indy], // 0xd1
898
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xd2
899
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xd3
900
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.zpx], // 0xd4
901
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.zpx], // 0xd5
902
- [jsSID.MOS6510.inst.dec, jsSID.MOS6510.mode.zpx], // 0xd6
903
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xd7
904
- [jsSID.MOS6510.inst.cld, jsSID.MOS6510.mode.imp], // 0xd8
905
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.absy], // 0xd9
906
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.acc], // 0xda
907
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xdb
908
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xdc
909
- [jsSID.MOS6510.inst.cmp, jsSID.MOS6510.mode.absx], // 0xdd
910
- [jsSID.MOS6510.inst.dec, jsSID.MOS6510.mode.absx], // 0xde
911
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xdf
912
-
913
- [jsSID.MOS6510.inst.cpx, jsSID.MOS6510.mode.imm], // 0xe0
914
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.indx], // 0xe1
915
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xe2
916
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xe3
917
- [jsSID.MOS6510.inst.cpx, jsSID.MOS6510.mode.zp], // 0xe4
918
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.zp], // 0xe5
919
- [jsSID.MOS6510.inst.inc, jsSID.MOS6510.mode.zp], // 0xe6
920
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xe7
921
- [jsSID.MOS6510.inst.inx, jsSID.MOS6510.mode.imp], // 0xe8
922
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.imm], // 0xe9
923
- [jsSID.MOS6510.inst.nop, jsSID.MOS6510.mode.acc], // 0xea
924
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xeb
925
- [jsSID.MOS6510.inst.cpx, jsSID.MOS6510.mode.abs], // 0xec
926
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.abs], // 0xed
927
- [jsSID.MOS6510.inst.inc, jsSID.MOS6510.mode.abs], // 0xee
928
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xef
929
-
930
- [jsSID.MOS6510.inst.beq, jsSID.MOS6510.mode.rel], // 0xf0
931
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.indy], // 0xf1
932
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xf2
933
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xf3
934
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.zpx], // 0xf4
935
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.zpx], // 0xf5
936
- [jsSID.MOS6510.inst.inc, jsSID.MOS6510.mode.zpx], // 0xf6
937
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xf7
938
- [jsSID.MOS6510.inst.sed, jsSID.MOS6510.mode.imp], // 0xf8
939
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.absy], // 0xf9
940
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.acc], // 0xfa
941
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xfb
942
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx], // 0xfc
943
- [jsSID.MOS6510.inst.sbc, jsSID.MOS6510.mode.absx], // 0xfd
944
- [jsSID.MOS6510.inst.inc, jsSID.MOS6510.mode.absx], // 0xfe
945
- [jsSID.MOS6510.inst.xxx, jsSID.MOS6510.mode.xxx] // 0xff
946
- );