]> Shamusworld >> Repos - apple2/blobdiff - src/v65c02.cpp
Moved CPU cycle subtraction into CPU core.
[apple2] / src / v65c02.cpp
index a98c16f7b677dc3e9692384b491967c40bce6d8e..24ba4a8926ad05de5bf41b0cf452d67e61eadb28 100755 (executable)
@@ -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(&regs, 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, &regs, sizeof(V65C02REGS));
 }