mos6510 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
- );