mirror of
https://github.com/robmcmullen/apple2.git
synced 2024-06-02 08:41:36 +00:00
Moved CPU cycle subtraction into CPU core.
This commit is contained in:
parent
8765ad261b
commit
5aaf5d5685
|
@ -644,7 +644,8 @@ memcpy(ram + 0xD000, ram + 0xC000, 0x1000);
|
|||
Execute65C02(&mainCPU, USEC_TO_M6502_CYCLES(timeToNextEvent));
|
||||
//We MUST remove a frame's worth of time in order for the CPU to function... !!! FIX !!!
|
||||
//(Fix so that this is not a requirement!)
|
||||
mainCPU.clock -= USEC_TO_M6502_CYCLES(timeToNextEvent);
|
||||
//Fixed, but mainCPU.clock is destroyed in the bargain. Oh well.
|
||||
// mainCPU.clock -= USEC_TO_M6502_CYCLES(timeToNextEvent);
|
||||
HandleNextEvent();
|
||||
}
|
||||
|
||||
|
|
|
@ -2214,14 +2214,37 @@ FBEF: 60 602 RTS2B RTS
|
|||
#ifdef __DEBUG__
|
||||
bool dumpDis = false;
|
||||
#endif
|
||||
|
||||
//Note: could enforce regs.clock to zero on starting the CPU with an Init() function...
|
||||
//bleh.
|
||||
//static uint32 limit = 0;
|
||||
|
||||
//
|
||||
// Function to execute 6808 for "cycles" cycles
|
||||
// Function to execute 65C02 for "cycles" cycles
|
||||
//
|
||||
void Execute65C02(V65C02REGS * context, uint32 cycles)
|
||||
{
|
||||
myMemcpy(®s, context, sizeof(V65C02REGS));
|
||||
|
||||
// Execute here...
|
||||
// NOTE: There *must* be some way of doing this without requiring the caller to subtract out
|
||||
// the previous run's cycles. !!! FIX !!!
|
||||
// Could try:
|
||||
// while (regs.clock < regs.clock + cycles) <-- won't work
|
||||
/*
|
||||
// This isn't as accurate as subtracting out cycles from regs.clock...
|
||||
// Unless limit is a static variable, adding cycles to it each time through...
|
||||
uint32 limit = regs.clock + cycles;
|
||||
while (regs.clock < limit)
|
||||
*/
|
||||
// but have wraparound to deal with. :-/
|
||||
/*
|
||||
Let's see...
|
||||
|
||||
if (regs.clock + cycles > 0xFFFFFFFF)
|
||||
wraparound = true;
|
||||
*/
|
||||
|
||||
while (regs.clock < cycles)
|
||||
{
|
||||
#if 0
|
||||
|
@ -2360,6 +2383,10 @@ WriteLog("\n*** IRQ ***\n\n");
|
|||
}
|
||||
}
|
||||
|
||||
//This is a lame way of doing it, but in the end the simplest--however, it destroys any
|
||||
//record of elasped CPU time. Not sure that it's important to keep track, but there it is.
|
||||
regs.clock -= cycles;
|
||||
|
||||
myMemcpy(context, ®s, sizeof(V65C02REGS));
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ struct V65C02REGS
|
|||
uint8 a; // 65C02 A register
|
||||
uint8 x; // 65C02 X index register
|
||||
uint8 y; // 65C02 Y register
|
||||
uint32 clock; // 65C02 clock
|
||||
uint32 clock; // 65C02 clock (@ 1 MHz, wraps at 71.5 minutes)
|
||||
uint8 (* RdMem)(uint16); // Address of BYTE read routine
|
||||
void (* WrMem)(uint16, uint8); // Address of BYTE write routine
|
||||
uint16 cpuFlags; // v65C02 IRQ/RESET flags
|
||||
|
|
Loading…
Reference in New Issue
Block a user