diff --git a/src/cpu/i8039/i8039.cpp b/src/cpu/i8039/i8039.cpp index cda3988af..1ba974e87 100644 --- a/src/cpu/i8039/i8039.cpp +++ b/src/cpu/i8039/i8039.cpp @@ -107,10 +107,12 @@ typedef struct int (*irq_callback)(int irqline); int inst_cycles; UINT8 Old_T1; + double total_cycles; } I8039_Regs; static I8039_Regs R; static int i8039_ICount; +static int i8039_ICount_cycles; static UINT8 *RAM; @@ -846,6 +848,7 @@ int I8039Run(int cycles) unsigned opcode, T1, timerInt; int count; + i8039_ICount_cycles = cycles; i8039_ICount = (cycles - R.irq_extra_cycles); R.irq_extra_cycles = 0; @@ -899,11 +902,22 @@ int I8039Run(int cycles) } while (i8039_ICount>0); i8039_ICount -= R.irq_extra_cycles; + R.total_cycles += cycles - i8039_ICount; R.irq_extra_cycles = 0; return cycles - i8039_ICount; } +INT32 I8039TotalCycles() +{ + return R.total_cycles + (i8039_ICount_cycles - i8039_ICount); +} + +void I8039NewFrame() +{ + R.total_cycles = 0; +} + int N7751Run(int cycles) { return I8039Run(cycles); diff --git a/src/cpu/i8039/i8039.h b/src/cpu/i8039/i8039.h index b5bdba5b7..6d5401f91 100644 --- a/src/cpu/i8039/i8039.h +++ b/src/cpu/i8039/i8039.h @@ -70,7 +70,8 @@ extern void N7751Reset (void); extern void N7751SetIrqState(int state); extern int N7751Scan(int nAction,int *pnMin); - +extern INT32 I8039TotalCycles(); +extern void I8039NewFrame(); /* * Input a UINT8 from given I/O port