*/
event->set_frames_per_sec(FRAMES_PER_SEC);
event->set_lines_per_frame(LINES_PER_FRAME);
- //event->set_context_cpu(dummycpu, CPU_CLOCKS / 2);
- event->set_context_cpu(dummycpu, SUBCLOCK_SLOW);
+ event->set_context_cpu(dummycpu, CPU_CLOCKS / 3);
+ //event->set_context_cpu(dummycpu, SUBCLOCK_SLOW);
#if defined(_FM8)
mainclock = MAINCLOCK_SLOW;
int MC6809::run(int clock)
{
int cycle = 0;
+ int first_icount;
+ if (clock >= 0) {
+ icount += clock;
+ }
+ first_icount = icount;
+
if ((int_state & MC6809_HALT_BIT) != 0) { // 0x80
- if(icount > 0) icount = 0; // OK?
+ icount = 0;
+ icount -= extra_icount;
+ extra_icount = 0;
if(!busreq) write_signals(&outputs_bus_halt, 0xffffffff);
busreq = true;
- return icount;
+ return first_icount - icount;
}
if(busreq) write_signals(&outputs_bus_halt, 0x00000000);
busreq = false;
if((int_state & MC6809_INSN_HALT) != 0) { // 0x80
uint8 dmy = RM(PCD);
- icount -= 2;
- icount -= extra_icount;
- extra_icount = 0;
+ icount = 0;
+ icount -= extra_icount;
+ extra_icount = 0;
PC++;
- return icount;
+ return first_icount - icount;
}
/*
* Check Interrupt
} else {
int_state &= ~MC6809_CWAI_IN;
}
- return icount;
+ return first_icount - icount;
// run cpu
check_ok:
if((int_state & MC6809_SYNC_IN) != 0) {
- icount = 0;
- return icount;
+ if (clock >= 0) {
+ icount -= clock;
+ } else {
+ icount = 0;
+ }
+ return first_icount - icount;
}
if((int_state & MC6809_CWAI_IN) == 0) {
if(clock == -1) {
// run only one opcode
- //icount = 0;
run_one_opecode();
return icount;
} else {
// run cpu while given clocks
- icount += clock;
- int first_icount = icount;
-
while(icount > 0) {
run_one_opecode();
}
return first_icount - icount;
}
- } else {
- icount = 0;
- return icount;
+ } else { // CWAI_IN
+ if (clock >= 0) {
+ icount -= clock;
+ }
+ else {
+ icount = 0;
+ }
+ return first_icount - icount;
}
}