Previous 199869 Revisions Next

r22047 Saturday 23rd March, 2013 at 18:46:31 UTC by R. Belmont
M740 CPU family updates: [R. Belmont, O. Galibert]
- Support for all T=1 instructions
- Added COM and the accumulator-only versions of INC and DEC
[src/emu/cpu/m6502]dm740.lst m6502.c m740.c m740.h om740.lst

trunk/src/emu/cpu/m6502/dm740.lst
r22046r22047
11# m740 device
22brk740_imp  ora_idx     kil_non     bbs_acc     nop_zpg     ora_zpg     asl_zpg     bbs_bzr     php_imp     ora_imm     asl_acc     seb_acc     nop_aba     ora_aba     asl_aba     seb_biz
3bpl_rel     ora_idy     clt_imp     bbc_acc     nop_zpx     ora_zpx     asl_zpx     bbc_bzr     clc_imp     ora_aby     nop_imp     clb_acc     nop_abx     ora_abx     asl_abx     clb_biz
3bpl_rel     ora_idy     clt_imp     bbc_acc     nop_zpx     ora_zpx     asl_zpx     bbc_bzr     clc_imp     ora_aby     dec_acc     clb_acc     nop_abx     ora_abx     asl_abx     clb_biz
44jsr_adr     and_idx     jsr_spg     bbs_acc     bit_zpg     and_zpg     rol_zpg     bbs_bzr     plp_imp     and_imm     rol_acc     seb_acc     bit_aba     and_aba     rol_aba     seb_biz
5bmi_rel     and_idy     set_imp     bbc_acc     nop_zpx     and_zpx     rol_zpx     bbc_bzr     sec_imp     and_aby     nop_imp     clb_acc     ldm_imz     and_abx     rol_abx     clb_biz
6rti_imp     eor_idx     kil_non     bbs_acc     nop_zpg     eor_zpg     lsr_zpg     bbs_bzr     pha_imp     eor_imm     lsr_acc     seb_acc     jmp_adr     eor_aba     lsr_aba     seb_biz
5bmi_rel     and_idy     set_imp     bbc_acc     nop_zpx     and_zpx     rol_zpx     bbc_bzr     sec_imp     and_aby     inc_acc     clb_acc     ldm_imz     and_abx     rol_abx     clb_biz
6rti_imp     eor_idx     kil_non     bbs_acc     com_zpg     eor_zpg     lsr_zpg     bbs_bzr     pha_imp     eor_imm     lsr_acc     seb_acc     jmp_adr     eor_aba     lsr_aba     seb_biz
77bvc_rel     eor_idy     kil_non     bbc_acc     nop_zpx     eor_zpx     lsr_zpx     bbc_bzr     cli_imp     eor_aby     nop_imp     clb_acc     nop_abx     eor_abx     lsr_abx     clb_biz
88rts_imp     adc_idx     kil_non     bbs_acc     nop_zpg     adc_zpg     ror_zpg     bbs_bzr     pla_imp     adc_imm     ror_acc     seb_acc     jmp_ind     adc_aba     ror_aba     seb_biz
99bvs_rel     adc_idy     kil_non     bbc_acc     nop_zpx     adc_zpx     ror_zpx     bbc_bzr     sei_imp     adc_aby     nop_imp     clb_acc     nop_abx     adc_abx     ror_abx     clb_biz
r22046r22047
1515bne_rel     cmp_idy     kil_non     bbc_acc     nop_zpx     cmp_zpx     dec_zpx     bbc_bzr     cld_imp     cmp_aby     nop_imp     clb_acc     nop_abx     cmp_abx     dec_abx     clb_biz
1616cpx_imm     sbc_idx     nop_imm     bbs_acc     cpx_zpg     sbc_zpg     inc_zpg     bbs_bzr     inx_imp     sbc_imm     nop_imp     seb_acc     cpx_aba     sbc_aba     inc_aba     seb_biz
1717beq_rel     sbc_idy     kil_non     bbc_acc     nop_zpx     sbc_zpx     inc_zpx     bbc_bzr     sed_imp     sbc_aby     nop_imp     clb_acc     nop_abx     sbc_abx     inc_abx     clb_biz
18brk740_imp  ort_idx     kil_non     bbs_acc     nop_zpg     ort_zpg     asl_zpg     bbs_bzr     php_imp     ort_imm     asl_acc     seb_acc     nop_aba     ort_aba     asl_aba     seb_biz
19bpl_rel     ort_idy     clt_imp     bbc_acc     nop_zpx     ort_zpx     asl_zpx     bbc_bzr     clc_imp     ort_aby     dect_acc     clb_acc     nop_abx     ort_abx     asl_abx     clb_biz
20jsr_adr     andt_idx     jsr_spg     bbs_acc     bit_zpg     andt_zpg     rol_zpg     bbs_bzr     plp_imp     andt_imm     rol_acc     seb_acc     bit_aba     andt_aba     rol_aba     seb_biz
21bmi_rel     andt_idy     set_imp     bbc_acc     nop_zpx     andt_zpx     rol_zpx     bbc_bzr     sec_imp     andt_aby     inct_acc     clb_acc     ldm_imz     andt_abx     rol_abx     clb_biz
22rti_imp     eort_idx     kil_non     bbs_acc     com_zpg     eort_zpg     lsr_zpg     bbs_bzr     pha_imp     eort_imm     lsr_acc     seb_acc     jmp_adr     eort_aba     lsr_aba     seb_biz
23bvc_rel     eort_idy     kil_non     bbc_acc     nop_zpx     eort_zpx     lsr_zpx     bbc_bzr     cli_imp     eort_aby     nop_imp     clb_acc     nop_abx     eort_abx     lsr_abx     clb_biz
24rts_imp     adct_idx     kil_non     bbs_acc     nop_zpg     adct_zpg     ror_zpg     bbs_bzr     pla_imp     adct_imm     ror_acc     seb_acc     jmp_ind     adct_aba     ror_aba     seb_biz
25bvs_rel     adct_idy     kil_non     bbc_acc     nop_zpx     adct_zpx     ror_zpx     bbc_bzr     sei_imp     adct_aby     nop_imp     clb_acc     nop_abx     adct_abx     ror_abx     clb_biz
26bra_rel     sta_idx     rrf_zpg     bbs_acc     sty_zpg     sta_zpg     stx_zpg     bbs_bzr     dey_imp     nop_imm     txa_imp     seb_acc     sty_aba     sta_aba     stx_aba     seb_biz
27bcc_rel     sta_idy     kil_non     bbc_acc     sty_zpx     sta_zpx     stx_zpy     bbc_bzr     tya_imp     sta_aby     txs_imp     clb_acc     shy_abx     sta_abx     shx_aby     clb_biz
28ldy_imm     ldt_idx     ldx_imm     bbs_acc     ldy_zpg     ldt_zpg     ldx_zpg     bbs_bzr     tay_imp     ldt_imm     tax_imp     seb_acc     ldy_aba     ldt_aba     ldx_aba     seb_biz
29bcs_rel     ldt_idy     jmp_zpi     bbc_acc     ldy_zpx     ldt_zpx     ldx_zpy     bbc_bzr     clv_imp     ldt_aby     tsx_imp     clb_acc     ldy_abx     ldt_abx     ldx_aby     clb_biz
30cpy_imm     cmp_idx     nop_imm     bbs_acc     cpy_zpg     cmpt_zpg     dec_zpg     bbs_bzr     iny_imp     cmpt_imm     dex_imp     seb_acc     cpy_aba     cmpt_aba     dec_aba     seb_biz
31bne_rel     cmp_idy     kil_non     bbc_acc     nop_zpx     cmpt_zpx     dec_zpx     bbc_bzr     cld_imp     cmpt_aby     nop_imp     clb_acc     nop_abx     cmpt_abx     dec_abx     clb_biz
32cpx_imm     sbct_idx     nop_imm     bbs_acc     cpx_zpg     sbct_zpg     inc_zpg     bbs_bzr     inx_imp     sbc_imm     nop_imp     seb_acc     cpx_aba     sbct_aba     inc_aba     seb_biz
33beq_rel     sbct_idy     kil_non     bbc_acc     nop_zpx     sbct_zpx     inc_zpx     bbc_bzr     sed_imp     sbc_aby     nop_imp     clb_acc     nop_abx     sbct_abx     inc_abx     clb_biz
1834reset740
trunk/src/emu/cpu/m6502/om740.lst
r22046r22047
22set_imp
33   read_pc_noinc();
44   P |= F_T;
5   inst_state_base = 0x100;
56   prefetch();
67
78clt_imp
89   read_pc_noinc();
910   P &= ~F_T;
11   inst_state_base = 0;
1012   prefetch();
1113
1214ldm_imz
r22046r22047
143145   P |= F_I; // Do *not* move after the prefetch
144146   prefetch();
145147   inst_state = -1;
148
149# T=1 opcodes
150
151adct_aba
152   TMP = read_pc();
153   TMP = set_h(TMP, read_pc());
154   TMP = read(TMP);
155   do_adct(TMP);
156   prefetch();
157
158adct_abx
159   TMP = read_pc();
160   TMP = set_h(TMP, read_pc());
161   if(page_changing(TMP, X)) {
162      read(set_l(TMP, TMP+X));
163   }
164   TMP += X;
165   TMP = read(TMP);
166   do_adct(TMP);
167   prefetch();
168
169adct_aby
170   TMP = read_pc();
171   TMP = set_h(TMP, read_pc());
172   if(page_changing(TMP, Y)) {
173      read(set_l(TMP, TMP+Y));
174   }
175   TMP += Y;
176   TMP = read(TMP);
177   do_adct(TMP);
178   prefetch();
179
180adct_idx
181   TMP2 = read_pc();
182   read(TMP2);
183   TMP2 += X;
184   TMP = read(TMP2 & 0xff);
185   TMP = set_h(TMP, read((TMP2+1) & 0xff));
186   do_adct(read(TMP));
187   prefetch();
188
189adct_idy
190   TMP2 = read_pc();
191   TMP = read(TMP2);
192   TMP = set_h(TMP, read(TMP2+1));
193   if(page_changing(TMP, Y)) {
194      read(set_l(TMP, TMP+Y));
195   }
196   do_adct(read(TMP+Y));
197   prefetch();
198
199adct_imm
200   TMP = read_pc();
201   do_adct(TMP);
202   prefetch();
203
204adct_zpg
205   TMP = read_pc();
206   TMP = read(TMP);
207   do_adct(TMP);
208   prefetch();
209
210adct_zpx
211   TMP = read_pc();
212   read(TMP);
213   TMP = read(UINT8(TMP+X));
214   do_adct(TMP);
215   prefetch();
216
217andt_aba
218   TMP = read_pc();
219   TMP = set_h(TMP, read_pc());
220   TMP2 = read(X);
221   TMP2 &= read(TMP);
222   set_nz(TMP2);
223   write(X, TMP2);
224   prefetch();
225
226andt_abx
227   TMP = read_pc();
228   TMP = set_h(TMP, read_pc());
229   if(page_changing(TMP, X)) {
230      read(set_l(TMP, TMP+X));
231   }
232   TMP += X;
233   TMP2 = read(X);
234   TMP2 &= read(TMP);
235   set_nz(TMP2);
236   write(X, TMP2);
237   prefetch();
238
239andt_aby
240   TMP = read_pc();
241   TMP = set_h(TMP, read_pc());
242   if(page_changing(TMP, Y)) {
243      read(set_l(TMP, TMP+Y));
244   }
245   TMP += Y;
246   TMP2 = read(X);
247   TMP2 &= read(TMP);
248   set_nz(TMP2);
249   write(X, TMP2);
250   prefetch();
251
252andt_imm
253   TMP2 = read(X);
254   TMP2 &= read_pc();
255   set_nz(TMP2);
256   write(X, TMP2);
257   prefetch();
258
259andt_idx
260   TMP2 = read_pc();
261   read(TMP2);
262   TMP2 += X;
263   TMP = read(TMP2 & 0xff);
264   TMP = set_h(TMP, read((TMP2+1) & 0xff));
265   TMP2 = read(X);
266   TMP2 &= read(TMP);
267   set_nz(TMP2);
268   write(X, TMP2);
269   prefetch();
270
271andt_idy
272   TMP2 = read_pc();
273   TMP = read(TMP2);
274   TMP = set_h(TMP, read(TMP2+1));
275   if(page_changing(TMP, Y)) {
276      read(set_l(TMP, TMP+Y));
277   }
278   TMP2 = read(X);
279   TMP2 &= read(TMP+Y);
280   set_nz(TMP2);
281   write(X, TMP2);
282   prefetch();
283
284andt_zpg
285   TMP = read_pc();
286   TMP2 = read(X);
287   TMP2 &= read(TMP);
288   set_nz(TMP2);
289   write(X, TMP2);
290   prefetch();
291
292andt_zpx
293   TMP = read_pc();
294   read(TMP);
295   TMP2 = read(X);
296   TMP2 &= read(UINT8(TMP+X));
297   set_nz(TMP2);
298   write(X, TMP2);
299   prefetch();
300
301com_zpg
302   TMP = read_pc();
303   TMP2 = read(TMP);
304   TMP2 ^= 0xff;
305   set_nz(TMP2);
306   write(TMP, TMP2);
307   prefetch();
308
309cmpt_aba
310   TMP = read_pc();
311   TMP = set_h(TMP, read_pc());
312   TMP = read(TMP);
313   TMP2 = read(X);
314   do_cmp(TMP2, TMP);
315   prefetch();
316
317cmpt_abx
318   TMP = read_pc();
319   TMP = set_h(TMP, read_pc());
320   if(page_changing(TMP, X)) {
321      read(set_l(TMP, TMP+X));
322   }
323   TMP += X;
324   TMP = read(TMP);
325   TMP2 = read(X);
326   do_cmp(TMP2, TMP);
327   prefetch();
328
329cmpt_aby
330   TMP = read_pc();
331   TMP = set_h(TMP, read_pc());
332   if(page_changing(TMP, Y)) {
333      read(set_l(TMP, TMP+Y));
334   }
335   TMP += Y;
336   TMP = read(TMP);
337   TMP2 = read(X);
338   do_cmp(TMP2, TMP);
339   prefetch();
340
341cmpt_idx
342   TMP2 = read_pc();
343   read(TMP2);
344   TMP2 += X;
345   TMP = read(TMP2 & 0xff);
346   TMP = set_h(TMP, read((TMP2+1) & 0xff));
347   TMP2 = read(X);
348   do_cmp(TMP2, read(TMP));
349   prefetch();
350
351cmpt_idy
352   TMP2 = read_pc();
353   TMP = read(TMP2);
354   TMP = set_h(TMP, read(TMP2+1));
355   if(page_changing(TMP, Y)) {
356      read(set_l(TMP, TMP+Y));
357   }
358   TMP2 = read(X);
359   do_cmp(TMP2, read(TMP+Y));
360   prefetch();
361
362cmpt_imm
363   TMP = read_pc();
364   TMP2 = read(X);
365   do_cmp(TMP2, TMP);
366   prefetch();
367
368cmpt_zpg
369   TMP = read_pc();
370   TMP = read(TMP);
371   TMP2 = read(X);
372   do_cmp(TMP2, TMP);
373   prefetch();
374
375cmpt_zpx
376   TMP = read_pc();
377   read(TMP);
378   TMP = read(UINT8(TMP+X));
379   TMP2 = read(X);
380   do_cmp(TMP2, TMP);
381   prefetch();
382
383dec_acc
384   read_pc_noinc();
385   A--;
386   set_nz(A);
387   prefetch();
388
389dect_acc
390   read_pc_noinc();
391   TMP2 = read(X);
392   TMP2--;
393   set_nz(TMP2);
394   write(X, TMP2);
395   prefetch();
396
397eort_aba
398   TMP = read_pc();
399   TMP = set_h(TMP, read_pc());
400   TMP2 = read(X);
401   TMP2 ^= read(TMP);
402   set_nz(TMP2);
403   write(X, TMP2);
404   prefetch();
405
406eort_abx
407   TMP = read_pc();
408   TMP = set_h(TMP, read_pc());
409   if(page_changing(TMP, X)) {
410      read(set_l(TMP, TMP+X));
411   }
412   TMP += X;
413   TMP2 = read(X);
414   TMP2 ^= read(TMP);
415   set_nz(TMP2);
416   write(X, TMP2);
417   prefetch();
418
419eort_aby
420   TMP = read_pc();
421   TMP = set_h(TMP, read_pc());
422   if(page_changing(TMP, Y)) {
423      read(set_l(TMP, TMP+Y));
424   }
425   TMP += Y;
426   TMP2 = read(X);
427   TMP2 ^= read(TMP);
428   set_nz(TMP2);
429   write(X, TMP2);
430   prefetch();
431
432eort_idx
433   TMP2 = read_pc();
434   read(TMP2);
435   TMP2 += X;
436   TMP = read(TMP2 & 0xff);
437   TMP = set_h(TMP, read((TMP2+1) & 0xff));
438   TMP2 = read(X);
439   TMP2 ^= read(TMP);
440   set_nz(TMP2);
441   write(X, TMP2);
442   prefetch();
443
444eort_idy
445   TMP2 = read_pc();
446   TMP = read(TMP2);
447   TMP = set_h(TMP, read(TMP2+1));
448   if(page_changing(TMP, Y)) {
449      read(set_l(TMP, TMP+Y));
450   }
451   TMP2 = read(X);
452   TMP2 ^= read(TMP+Y);
453   set_nz(TMP2);
454   write(X, TMP2);
455   prefetch();
456
457eort_imm
458   TMP2 = read(X);
459   TMP2 ^= read_pc();
460   set_nz(TMP2);
461   write(X, TMP2);
462   prefetch();
463
464eort_zpg
465   TMP = read_pc();
466   TMP2 = read(X);
467   TMP2 ^= read(TMP+Y);
468   set_nz(TMP2);
469   write(X, TMP2);
470   prefetch();
471
472eort_zpx
473   TMP = read_pc();
474   read(TMP);
475   TMP2 = read(X);
476   TMP2 ^= read(UINT8(TMP+X));
477   set_nz(TMP2);
478   write(X, TMP2);
479   prefetch();
480
481inc_acc
482   read_pc_noinc();
483   A++;
484   set_nz(A);
485   prefetch();
486
487inct_acc
488   read_pc_noinc();
489   TMP2 = read(X);
490   TMP2++;
491   set_nz(TMP2);
492   write(X, TMP2);
493   prefetch();
494
495ldt_aba
496   TMP = read_pc();
497   TMP = set_h(TMP, read_pc());
498   TMP2 = read(TMP);
499   set_nz(TMP2);
500   write(X, TMP2);
501   prefetch();
502
503ldt_abx
504   TMP = read_pc();
505   TMP = set_h(TMP, read_pc());
506   if(page_changing(TMP, X)) {
507      read(set_l(TMP, TMP+X));
508   }
509   TMP2 = read(TMP + X);
510   set_nz(TMP2);
511   write(X, TMP2);
512   prefetch();
513
514ldt_aby
515   TMP = read_pc();
516   TMP = set_h(TMP, read_pc());
517   if(page_changing(TMP, Y)) {
518      read(set_l(TMP, TMP+Y));
519   }
520   TMP2 = read(TMP + Y);
521   set_nz(TMP2);
522   write(X, TMP2);
523   prefetch();
524
525ldt_idx
526   TMP2 = read_pc();
527   read(TMP2);
528   TMP2 += X;
529   TMP = read(TMP2 & 0xff);
530   TMP = set_h(TMP, read((TMP2+1) & 0xff));
531   TMP2 = read(TMP);
532   set_nz(TMP2);
533   write(X, TMP2);
534   prefetch();
535
536ldt_idy
537   TMP2 = read_pc();
538   TMP = read(TMP2);
539   TMP = set_h(TMP, read(TMP2+1));
540   if(page_changing(TMP, Y)) {
541      read(set_l(TMP, TMP+Y));
542   }
543   TMP2 = read(TMP+Y);
544   set_nz(TMP2);
545   write(X, TMP2);
546   prefetch();
547
548ldt_imm
549   TMP2 = read_pc();
550   set_nz(TMP2);
551   write(X, TMP2);
552   prefetch();
553
554ldt_zpg
555   TMP = read_pc();
556   TMP2 = read(TMP);
557   set_nz(TMP2);
558   write(X, TMP2);
559   prefetch();
560
561ldt_zpx
562   TMP = read_pc();
563   read(TMP);
564   TMP2 = read(UINT8(TMP+X));
565   set_nz(TMP2);
566   write(X, TMP2);
567   prefetch();
568
569ort_aba
570   TMP = read_pc();
571   TMP = set_h(TMP, read_pc());
572   TMP2 = read(X);
573   TMP2 |= read(TMP);
574   set_nz(TMP2);
575   write(X, TMP2);
576   prefetch();
577
578ort_abx
579   TMP = read_pc();
580   TMP = set_h(TMP, read_pc());
581   if(page_changing(TMP, X)) {
582      read(set_l(TMP, TMP+X));
583   }
584   TMP += X;
585   TMP2 = read(X);
586   TMP2 |= read(TMP);
587   set_nz(TMP2);
588   write(X, TMP2);
589   prefetch();
590
591ort_aby
592   TMP = read_pc();
593   TMP = set_h(TMP, read_pc());
594   if(page_changing(TMP, Y)) {
595      read(set_l(TMP, TMP+Y));
596   }
597   TMP += Y;
598   TMP2 = read(X);
599   TMP2 |= read(TMP);
600   set_nz(TMP2);
601   write(X, TMP2);
602   prefetch();
603
604ort_imm
605   TMP2 = read(X);
606   TMP2 |= read_pc();
607   set_nz(TMP2);
608   write(X, TMP2);
609   prefetch();
610
611ort_idx
612   TMP2 = read_pc();
613   read(TMP2);
614   TMP2 += X;
615   TMP = read(TMP2 & 0xff);
616   TMP = set_h(TMP, read((TMP2+1) & 0xff));
617   TMP2 = read(X);
618   TMP2 |= read(TMP);
619   set_nz(TMP2);
620   write(X, TMP2);
621   prefetch();
622
623ort_idy
624   TMP2 = read_pc();
625   TMP = read(TMP2);
626   TMP = set_h(TMP, read(TMP2+1));
627   if(page_changing(TMP, Y)) {
628      read(set_l(TMP, TMP+Y));
629   }
630   TMP2 = read(X);
631   TMP2 |= read(TMP+Y);
632   set_nz(TMP2);
633   write(X, TMP2);
634   prefetch();
635
636ort_zpg
637   TMP = read_pc();
638   TMP2 = read(X);
639   TMP2 |= read(TMP);
640   set_nz(TMP2);
641   write(X, TMP2);
642   prefetch();
643
644ort_zpx
645   TMP = read_pc();
646   read(TMP);
647   TMP2 = read(X);
648   TMP2 |= read(UINT8(TMP+X));
649   set_nz(TMP2);
650   write(X, TMP2);
651   prefetch();
652
653sbct_aba
654   TMP = read_pc();
655   TMP = set_h(TMP, read_pc());
656   TMP = read(TMP);
657   do_sbct(TMP);
658   prefetch();
659
660sbct_abx
661   TMP = read_pc();
662   TMP = set_h(TMP, read_pc());
663   if(page_changing(TMP, X)) {
664      read(set_l(TMP, TMP+X));
665   }
666   TMP += X;
667   TMP = read(TMP);
668   do_sbct(TMP);
669   prefetch();
670
671sbct_aby
672   TMP = read_pc();
673   TMP = set_h(TMP, read_pc());
674   if(page_changing(TMP, Y)) {
675      read(set_l(TMP, TMP+Y));
676   }
677   TMP += Y;
678   TMP = read(TMP);
679   do_sbct(TMP);
680   prefetch();
681
682sbct_idx
683   TMP2 = read_pc();
684   read(TMP2);
685   TMP2 += X;
686   TMP = read(TMP2 & 0xff);
687   TMP = set_h(TMP, read((TMP2+1) & 0xff));
688   do_sbct(read(TMP));
689   prefetch();
690
691sbct_idy
692   TMP2 = read_pc();
693   TMP = read(TMP2);
694   TMP = set_h(TMP, read(TMP2+1));
695   if(page_changing(TMP, Y)) {
696      read(set_l(TMP, TMP+Y));
697   }
698   do_sbct(read(TMP+Y));
699   prefetch();
700
701sbct_imm
702   TMP = read_pc();
703   do_sbct(TMP);
704   prefetch();
705
706sbct_zpg
707   TMP = read_pc();
708   TMP = read(TMP);
709   do_sbct(TMP);
710   prefetch();
711
712sbct_zpx
713   TMP = read_pc();
714   read(TMP);
715   TMP = read(UINT8(TMP+X));
716   do_sbct(TMP);
717   prefetch();
718
trunk/src/emu/cpu/m6502/m740.c
r22046r22047
5959
6060void m740_device::device_reset()
6161{
62   inst_state_base = 0;
6263   inst_state = STATE_RESET;
6364   inst_substate = 0;
6465   nmi_state = false;
r22046r22047
7475   SP = 0x00ff;
7576}
7677
78void m740_device::state_string_export(const device_state_entry &entry, astring &string)
79{
80   switch(entry.index()) {
81   case STATE_GENFLAGS:
82   case M6502_P:
83      string.printf("%c%c%c%c%c%c%c",
84                  P & F_N ? 'N' : '.',
85                  P & F_V ? 'V' : '.',
86                  P & F_T ? 'T' : '.',
87                  P & F_D ? 'D' : '.',
88                  P & F_I ? 'I' : '.',
89                  P & F_Z ? 'Z' : '.',
90                  P & F_C ? 'C' : '.');
91      break;
92   }
93}
94
7795UINT8 m740_device::do_clb(UINT8 in, UINT8 bit)
7896{
7997   return in & ~(1<<bit);
r22046r22047
91109      return ((in&0xf)<<4) | ((in&0xf0)>>4);
92110}
93111
112void m740_device::do_sbc_dt(UINT8 val)
113{
114   UINT8 c = P & F_C ? 0 : 1;
115   P &= ~(F_N|F_V|F_Z|F_C);
116   TMP2 = read(X);
117   UINT16 diff = TMP2 - val - c;
118   UINT8 al = (TMP2 & 15) - (val & 15) - c;
119   if(INT8(al) < 0)
120      al -= 6;
121   UINT8 ah = (TMP2 >> 4) - (val >> 4) - (INT8(al) < 0);
122   if(!UINT8(diff))
123      P |= F_Z;
124   else if(diff & 0x80)
125      P |= F_N;
126   if((TMP2^val) & (TMP2^diff) & 0x80)
127      P |= F_V;
128   if(!(diff & 0xff00))
129      P |= F_C;
130   if(INT8(ah) < 0)
131      ah -= 6;
132   TMP2 = (ah << 4) | (al & 15);
133   write(X, TMP2);
134}
135
136void m740_device::do_sbc_ndt(UINT8 val)
137{
138   UINT16 diff;
139
140   TMP2 = read(X);
141   diff = TMP2 - val - (P & F_C ? 0 : 1);
142   P &= ~(F_N|F_V|F_Z|F_C);
143   if(!UINT8(diff))
144      P |= F_Z;
145   else if(INT8(diff) < 0)
146      P |= F_N;
147   if((TMP2^val) & (TMP2^diff) & 0x80)
148      P |= F_V;
149   if(!(diff & 0xff00))
150      P |= F_C;
151   TMP2 = diff;
152   write(X, TMP2);
153}
154
155void m740_device::do_sbct(UINT8 val)
156{
157   if(P & F_D)
158      do_sbc_dt(val);
159   else
160      do_sbc_ndt(val);
161}
162
163void m740_device::do_adc_dt(UINT8 val)
164{
165   UINT8 c = P & F_C ? 1 : 0;
166   P &= ~(F_N|F_V|F_Z|F_C);
167   TMP2 = read(X);
168   UINT8 al = (TMP2 & 15) + (val & 15) + c;
169   if(al > 9)
170      al += 6;
171   UINT8 ah = (TMP2 >> 4) + (val >> 4) + (al > 15);
172   if(!UINT8(TMP2 + val + c))
173      P |= F_Z;
174   else if(ah & 8)
175      P |= F_N;
176   if(~(TMP2^val) & (TMP2^(ah << 4)) & 0x80)
177      P |= F_V;
178   if(ah > 9)
179      ah += 6;
180   if(ah > 15)
181      P |= F_C;
182   TMP2 = (ah << 4) | (al & 15);
183   write(X, TMP2);
184}
185
186void m740_device::do_adc_ndt(UINT8 val)
187{
188   UINT16 sum;
189   TMP2 = read(X);
190   sum = TMP2 + val + (P & F_C ? 1 : 0);
191   P &= ~(F_N|F_V|F_Z|F_C);
192   if(!UINT8(sum))
193      P |= F_Z;
194   else if(INT8(sum) < 0)
195      P |= F_N;
196   if(~(TMP2^val) & (TMP2^sum) & 0x80)
197      P |= F_V;
198   if(sum & 0xff00)
199      P |= F_C;
200   TMP2 = sum;
201   write(X, TMP2);
202}
203
204void m740_device::do_adct(UINT8 val)
205{
206   if(P & F_D)
207      do_adc_dt(val);
208   else
209      do_adc_ndt(val);
210}
211
94212void m740_device::execute_set_input(int inputnum, int state)
95213{
96214   switch(inputnum)
trunk/src/emu/cpu/m6502/m740.h
r22046r22047
7070
7171      virtual void device_reset();
7272
73      static const disasm_entry disasm_entries[0x100];
73      static const disasm_entry disasm_entries[0x200];
7474
75      virtual void state_string_export(const device_state_entry &entry, astring &string);
76
7577      virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
7678      virtual void do_exec_full();
7779      virtual void do_exec_partial();
r22046r22047
8385   UINT8 do_clb(UINT8 in, UINT8 bit);
8486   UINT8 do_seb(UINT8 in, UINT8 bit);
8587   UINT8 do_rrf(UINT8 in);
88   void do_sbc_dt(UINT8 val);
89   void do_sbc_ndt(UINT8 val);
90   void do_sbct(UINT8 val);
91   void do_adc_dt(UINT8 val);
92   void do_adc_ndt(UINT8 val);
93   void do_adct(UINT8 val);
8694
8795   // m740 opcodes
8896   O(brk740_imp);
r22046r22047
99107   O(bra_rel);
100108   O(jmp_zpi);
101109
110   O(adct_aba); O(adct_abx); O(adct_aby); O(adct_idx); O(adct_idy); O(adct_imm); O(adct_zpg); O(adct_zpx);
111   O(andt_aba); O(andt_abx); O(andt_aby); O(andt_imm); O(andt_idx); O(andt_idy); O(andt_zpg); O(andt_zpx);
112   O(cmpt_aba); O(cmpt_abx); O(cmpt_aby); O(cmpt_idx); O(cmpt_idy); O(cmpt_imm); O(cmpt_zpg); O(cmpt_zpx);
113   O(com_zpg);
114   O(dec_acc);
115   O(dect_acc);
116   O(eort_aba); O(eort_abx); O(eort_aby); O(eort_idx); O(eort_idy); O(eort_imm); O(eort_zpg); O(eort_zpx);
117   O(inc_acc);
118   O(inct_acc);
119   O(ldt_aba); O(ldt_abx); O(ldt_aby); O(ldt_idx); O(ldt_idy); O(ldt_imm); O(ldt_zpg); O(ldt_zpx);
120   O(ort_aba); O(ort_abx); O(ort_aby); O(ort_imm); O(ort_idx); O(ort_idy); O(ort_zpg); O(ort_zpx);
121   O(sbct_aba); O(sbct_abx); O(sbct_aby); O(sbct_idx); O(sbct_idy); O(sbct_imm); O(sbct_zpg); O(sbct_zpx);
122
102123#undef O
103124
104125   UINT32 m_irq_multiplex;
trunk/src/emu/cpu/m6502/m6502.c
r22046r22047
407407      do_exec_partial();
408408
409409   while(icount > 0) {
410      if(inst_state < 0x100) {
410      if(inst_state < 0xff00) {
411411         PPC = NPC;
412412         inst_state = IR | inst_state_base;
413413         if(machine().debug_flags & DEBUG_FLAG_ENABLED)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team