mirror of
https://github.com/robmcmullen/apple2.git
synced 2024-06-16 09:29:32 +00:00
Fixed Apple power state to pause CPU thread immediately.
This commit is contained in:
parent
452bb36844
commit
df2889bf95
|
@ -140,6 +140,7 @@ int CPUThreadFunc(void * data)
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
// This is never set to true anywhere...
|
||||||
if (cpuSleep)
|
if (cpuSleep)
|
||||||
SDL_CondWait(cpuCond, cpuMutex);
|
SDL_CondWait(cpuCond, cpuMutex);
|
||||||
|
|
||||||
|
@ -151,31 +152,6 @@ SDL_SemWait(mainSem);
|
||||||
|
|
||||||
// There are exactly 800 slices of 21.333 cycles per frame, so it works out
|
// There are exactly 800 slices of 21.333 cycles per frame, so it works out
|
||||||
// evenly.
|
// evenly.
|
||||||
#if 0
|
|
||||||
uint32_t cycles = 17066;
|
|
||||||
#ifdef CPU_THREAD_OVERFLOW_COMPENSATION
|
|
||||||
// ODD! It's closer *without* this overflow compensation. ??? WHY ???
|
|
||||||
overflow += 0.666666667;
|
|
||||||
|
|
||||||
if (overflow > 1.0)
|
|
||||||
{
|
|
||||||
overflow -= 1.0;
|
|
||||||
cycles++;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef THREAD_DEBUGGING
|
|
||||||
WriteLog("CPU: Execute65C02(&mainCPU, cycles);\n");
|
|
||||||
#endif
|
|
||||||
Execute65C02(&mainCPU, cycles); // how much? 1 frame (after 1 s, off by 40 cycles) not any more--it's off by as much as 240 now!
|
|
||||||
|
|
||||||
// Adjust the sound routine's last cycle toggled time base
|
|
||||||
// Also, since we're finished executing, .clock is now valid
|
|
||||||
#ifdef THREAD_DEBUGGING
|
|
||||||
WriteLog("CPU: AdjustLastToggleCycles(mainCPU.clock);\n");
|
|
||||||
#endif
|
|
||||||
AdjustLastToggleCycles(mainCPU.clock);
|
|
||||||
#else
|
|
||||||
#ifdef THREAD_DEBUGGING
|
#ifdef THREAD_DEBUGGING
|
||||||
WriteLog("CPU: Execute65C02(&mainCPU, cycles);\n");
|
WriteLog("CPU: Execute65C02(&mainCPU, cycles);\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -196,7 +172,6 @@ WriteLog("CPU: Execute65C02(&mainCPU, cycles);\n");
|
||||||
// Dunno if this is correct (seems to be close enough)...
|
// Dunno if this is correct (seems to be close enough)...
|
||||||
vbl = (i < 670 ? true : false);
|
vbl = (i < 670 ? true : false);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef THREAD_DEBUGGING
|
#ifdef THREAD_DEBUGGING
|
||||||
WriteLog("CPU: SDL_mutexP(cpuMutex);\n");
|
WriteLog("CPU: SDL_mutexP(cpuMutex);\n");
|
||||||
|
@ -847,14 +822,16 @@ static void FrameCallback(void)
|
||||||
{
|
{
|
||||||
pauseMode = false;
|
pauseMode = false;
|
||||||
SoundResume();
|
SoundResume();
|
||||||
ResetApple2State();
|
// Unlock the CPU thread...
|
||||||
|
SDL_SemPost(mainSem);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pauseMode = true;
|
pauseMode = true;
|
||||||
|
// Should lock until CPU thread is waiting...
|
||||||
|
SDL_SemWait(mainSem);
|
||||||
SoundPause();
|
SoundPause();
|
||||||
//NOPE SDL_SemWait(mainSem);//should lock until CPU thread is waiting...
|
ResetApple2State();
|
||||||
// ResetApple2State();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
powerStateChangeRequested = false;
|
powerStateChangeRequested = false;
|
||||||
|
@ -902,7 +879,7 @@ if (counter == 60)
|
||||||
uint64_t cpuCycles = GetCurrentV65C02Clock();
|
uint64_t cpuCycles = GetCurrentV65C02Clock();
|
||||||
uint32_t cyclesBurned = (uint32_t)(cpuCycles - lastCPUCycles);
|
uint32_t cyclesBurned = (uint32_t)(cpuCycles - lastCPUCycles);
|
||||||
WriteLog("FrameCallback: used %i cycles\n", cyclesBurned);
|
WriteLog("FrameCallback: used %i cycles\n", cyclesBurned);
|
||||||
lastCPUCycles = cpuCycles;
|
lastCPUCycles = cpuCycles
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//let's wait, then signal...
|
//let's wait, then signal...
|
||||||
|
|
|
@ -15,7 +15,6 @@ void SetPowerState(void);
|
||||||
|
|
||||||
extern uint8_t ram[0x10000], rom[0x10000]; // RAM & ROM pointers
|
extern uint8_t ram[0x10000], rom[0x10000]; // RAM & ROM pointers
|
||||||
extern uint8_t ram2[0x10000]; // Auxillary RAM
|
extern uint8_t ram2[0x10000]; // Auxillary RAM
|
||||||
//extern uint8_t diskRom[0x100]; // Floppy disk ROM
|
|
||||||
extern uint8_t appleType;
|
extern uint8_t appleType;
|
||||||
extern FloppyDrive floppyDrive;
|
extern FloppyDrive floppyDrive;
|
||||||
extern uint8_t lastKeyPressed;
|
extern uint8_t lastKeyPressed;
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "video.h"
|
#include "video.h"
|
||||||
#include "charset.h"
|
#include "charset.h"
|
||||||
#include "gui/font14pt.h"
|
#include "gui/font14pt.h"
|
||||||
|
#include "gui/gui.h"
|
||||||
|
|
||||||
/* Reference: Technote tn-iigs-063 "Master Color Values"
|
/* Reference: Technote tn-iigs-063 "Master Color Values"
|
||||||
|
|
||||||
|
@ -869,43 +870,50 @@ static void RenderDHiRes(uint16_t toLine/*= 192*/)
|
||||||
|
|
||||||
void RenderVideoFrame(void)
|
void RenderVideoFrame(void)
|
||||||
{
|
{
|
||||||
if (textMode)
|
if (GUI::powerOnState == true)
|
||||||
{
|
{
|
||||||
if (!col80Mode)
|
if (textMode)
|
||||||
Render40ColumnText();
|
{
|
||||||
|
if (!col80Mode)
|
||||||
|
Render40ColumnText();
|
||||||
|
else
|
||||||
|
Render80ColumnText();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Render80ColumnText();
|
{
|
||||||
|
if (mixedMode)
|
||||||
|
{
|
||||||
|
if (hiRes)
|
||||||
|
{
|
||||||
|
RenderHiRes(160);
|
||||||
|
Render40ColumnTextLine(20);
|
||||||
|
Render40ColumnTextLine(21);
|
||||||
|
Render40ColumnTextLine(22);
|
||||||
|
Render40ColumnTextLine(23);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RenderLoRes(20);
|
||||||
|
Render40ColumnTextLine(20);
|
||||||
|
Render40ColumnTextLine(21);
|
||||||
|
Render40ColumnTextLine(22);
|
||||||
|
Render40ColumnTextLine(23);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (dhires)
|
||||||
|
RenderDHiRes();
|
||||||
|
else if (hiRes)
|
||||||
|
RenderHiRes();
|
||||||
|
else
|
||||||
|
RenderLoRes();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (mixedMode)
|
memset(scrBuffer, 0, VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32_t));
|
||||||
{
|
|
||||||
if (hiRes)
|
|
||||||
{
|
|
||||||
RenderHiRes(160);
|
|
||||||
Render40ColumnTextLine(20);
|
|
||||||
Render40ColumnTextLine(21);
|
|
||||||
Render40ColumnTextLine(22);
|
|
||||||
Render40ColumnTextLine(23);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RenderLoRes(20);
|
|
||||||
Render40ColumnTextLine(20);
|
|
||||||
Render40ColumnTextLine(21);
|
|
||||||
Render40ColumnTextLine(22);
|
|
||||||
Render40ColumnTextLine(23);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (dhires)
|
|
||||||
RenderDHiRes();
|
|
||||||
else if (hiRes)
|
|
||||||
RenderHiRes();
|
|
||||||
else
|
|
||||||
RenderLoRes();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msgTicks)
|
if (msgTicks)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user