Couple of fixes from upstream AW.

Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
Andrea Odetti 2020-10-12 20:58:32 +01:00
parent b100ed1ae0
commit a72d19b386
13 changed files with 84 additions and 44 deletions

View file

@ -29,6 +29,8 @@ add_library(appleii SHARED
CardManager.cpp
Disk2CardManager.cpp
Riff.cpp
SaveState.cpp
SynchronousEventManager.cpp
Configuration/PropertySheetHelper.cpp
@ -61,8 +63,7 @@ add_library(appleii SHARED
linux/duplicates/Frame.cpp
linux/duplicates/SerialComms.cpp
linux/duplicates/IPropertySheet.cpp
linux/duplicates/Applewin.cpp # defines g_CardMgr (reverse order)
SaveState.cpp # uses g_CardMgr in m_ConfigNew (reverse order)
linux/duplicates/Applewin.cpp
Z80VICE/z80.cpp
Z80VICE/z80mem.cpp

View file

@ -44,13 +44,14 @@ Etc.
#include "SaveState_Structs_common.h"
#include "Common.h"
#include "AppleWin.h" // g_SynchronousEventMgr
#include "Applewin.h" // g_SynchronousEventMgr
#include "CardManager.h"
#include "CPU.h"
#include "Frame.h" // FrameSetCursorPosByMousePos()
#include "Log.h"
#include "Memory.h"
#include "MouseInterface.h"
#include "Video.h"
#include "NTSC.h" // NTSC_GetCyclesUntilVBlank()
#include "YamlHelper.h"

View file

@ -41,7 +41,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "StdAfx.h"
#include "AppleWin.h"
#include "Applewin.h"
#include "SynchronousEventManager.h"
void SynchronousEventManager::Insert(SyncEvent* pNewEvent)

View file

@ -36,7 +36,7 @@ bool DoDiskInsert(const UINT slot, const int nDrive, const std::string & fileNam
strPathName.append(fileName);
}
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*> (g_CardMgr.GetObj(slot));
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*> (GetCardMgr().GetObj(slot));
ImageError_e Error = pDisk2Card->InsertDisk(nDrive, strPathName.c_str(), IMAGE_USE_FILES_WRITE_PROTECT_STATUS, createMissingDisk);
return Error == eIMAGE_ERROR_NONE;
}

View file

@ -54,7 +54,9 @@ namespace
const DWORD uActualCyclesExecuted = CpuExecute(uCyclesToExecute, bVideoUpdate);
g_dwCyclesThisFrame += uActualCyclesExecuted;
g_CardMgr.GetDisk2CardMgr().UpdateDriveState(uActualCyclesExecuted);
CardManager & cardManager = GetCardMgr();
cardManager.GetDisk2CardMgr().UpdateDriveState(uActualCyclesExecuted);
const int key = ProcessKeyboard();
@ -102,7 +104,7 @@ namespace
g_relativeSpeed = g_relativeSpeed * coeff + double(us) / double(nExecutionPeriodUsec) * (1.0 - coeff);
if (!g_CardMgr.GetDisk2CardMgr().IsConditionForFullSpeed())
if (!cardManager.GetDisk2CardMgr().IsConditionForFullSpeed())
{
if (us < nExecutionPeriodUsec)
{
@ -160,6 +162,8 @@ namespace
LogFileOutput("Init: DoDiskInsert(D2), res=%d\n", ok);
}
CardManager & cardManager = GetCardMgr();
if (disksOk)
{
// AFTER a restart
@ -175,7 +179,7 @@ namespace
MB_Initialize();
MemInitialize();
NVideoInitialize();
g_CardMgr.GetDisk2CardMgr().Reset();
cardManager.GetDisk2CardMgr().Reset();
HD_Reset();
if (!options.snapshot.empty())
@ -192,7 +196,7 @@ namespace
EnterMessageLoop(options);
}
CMouseInterface* pMouseCard = g_CardMgr.GetMouseCard();
CMouseInterface* pMouseCard = cardManager.GetMouseCard();
if (pMouseCard)
{
pMouseCard->Reset();
@ -214,7 +218,7 @@ namespace
PrintDestroy();
CpuDestroy();
g_CardMgr.GetDisk2CardMgr().Destroy();
cardManager.GetDisk2CardMgr().Destroy();
ImageDestroy();
LogDone();

View file

@ -256,8 +256,11 @@ void FrameRefresh()
void FrameDrawDiskLEDS(HDC x)
{
if (g_CardMgr.QuerySlot(SLOT6) == CT_Disk2)
dynamic_cast<Disk2InterfaceCard*>(g_CardMgr.GetObj(SLOT6))->GetLightStatus(&g_eStatusDrive1, &g_eStatusDrive2);
CardManager & cardManager = GetCardMgr();
if (cardManager.QuerySlot(SLOT6) != CT_Disk2)
return;
dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6))->GetLightStatus(&g_eStatusDrive1, &g_eStatusDrive2);
FrameRefresh();
}
@ -267,7 +270,11 @@ void FrameDrawDiskStatus(HDC x)
if (mem == NULL)
return;
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(g_CardMgr.GetObj(SLOT6));
CardManager & cardManager = GetCardMgr();
if (cardManager.QuerySlot(SLOT6) != CT_Disk2)
return;
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
// We use the actual drive since probing from memory doesn't tell us anything we don't already know.
// DOS3.3 ProDOS

View file

@ -34,10 +34,11 @@ namespace
void insertDisk(const QString & filename, const int disk)
{
if (g_CardMgr.QuerySlot(SLOT6) != CT_Disk2)
CardManager & cardManager = GetCardMgr();
if (cardManager.QuerySlot(SLOT6) != CT_Disk2)
return;
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(g_CardMgr.GetObj(SLOT6));
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
if (filename.isEmpty())
{
pDisk2Card->EjectDisk(disk);
@ -76,11 +77,13 @@ namespace
if (slot >= NUM_SLOTS)
return;
CardManager & cardManager = GetCardMgr();
// Two paths:
// 1) Via Config dialog: card not inserted yet
// 2) Snapshot_LoadState_v2(): card already inserted
if (g_CardMgr.QuerySlot(slot) != newCardType)
g_CardMgr.Insert(slot, newCardType);
if (cardManager.QuerySlot(slot) != newCardType)
cardManager.Insert(slot, newCardType);
std::string slotText;
switch (slot)
@ -169,7 +172,9 @@ void GlobalOptions::setData(const GlobalOptions & data)
void getAppleWinPreferences(PreferenceData & data)
{
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(g_CardMgr.GetObj(SLOT6));
CardManager & cardManager = GetCardMgr();
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
data.disks.resize(diskIDs.size());
for (size_t i = 0; i < diskIDs.size(); ++i)
@ -192,8 +197,8 @@ void getAppleWinPreferences(PreferenceData & data)
}
data.enhancedSpeed = pDisk2Card->GetEnhanceDisk();
data.cardInSlot4 = g_CardMgr.QuerySlot(SLOT4);
data.cardInSlot5 = g_CardMgr.QuerySlot(SLOT5);
data.cardInSlot4 = cardManager.QuerySlot(SLOT4);
data.cardInSlot5 = cardManager.QuerySlot(SLOT5);
data.hdInSlot7 = HD_CardIsEnabled();
data.apple2Type = GetApple2Type();
@ -216,7 +221,8 @@ void getAppleWinPreferences(PreferenceData & data)
void setAppleWinPreferences(const PreferenceData & currentData, const PreferenceData & newData)
{
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(g_CardMgr.GetObj(SLOT6));
CardManager & cardManager = GetCardMgr();
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
if (currentData.speakerVolume != newData.speakerVolume)
{

View file

@ -112,13 +112,15 @@ namespace
emulator->displayLogo();
g_CardMgr.GetDisk2CardMgr().Reset();
GetCardMgr().GetDisk2CardMgr().Reset();
HD_Reset();
}
void unloadEmulator()
{
CMouseInterface* pMouseCard = g_CardMgr.GetMouseCard();
CardManager & cardManager = GetCardMgr();
CMouseInterface* pMouseCard = cardManager.GetMouseCard();
if (pMouseCard)
{
pMouseCard->Reset();
@ -132,7 +134,7 @@ namespace
DSUninit();
CpuDestroy();
g_CardMgr.GetDisk2CardMgr().Destroy();
cardManager.GetDisk2CardMgr().Destroy();
ImageDestroy();
LogDone();
RiffFinishWriteFile();
@ -318,13 +320,15 @@ void QApple::on_timer()
const bool bVideoUpdate = true;
CardManager & cardManager = GetCardMgr();
int count = 0;
const UINT dwClksPerFrame = NTSC_GetCyclesPerFrame();
do
{
const DWORD uActualCyclesExecuted = CpuExecute(uCyclesToExecute, bVideoUpdate);
g_dwCyclesThisFrame += uActualCyclesExecuted;
g_CardMgr.GetDisk2CardMgr().UpdateDriveState(uActualCyclesExecuted);
cardManager.GetDisk2CardMgr().UpdateDriveState(uActualCyclesExecuted);
MB_PeriodicUpdate(uActualCyclesExecuted);
SpkrUpdate(uActualCyclesExecuted);
@ -332,7 +336,7 @@ void QApple::on_timer()
g_dwCyclesThisFrame = g_dwCyclesThisFrame % dwClksPerFrame;
++count;
}
while (g_CardMgr.GetDisk2CardMgr().IsConditionForFullSpeed() && (myElapsedTimer.elapsed() < target + myOptions.msFullSpeed));
while (cardManager.GetDisk2CardMgr().IsConditionForFullSpeed() && (myElapsedTimer.elapsed() < target + myOptions.msFullSpeed));
// just repaint each time, to make it simpler
// we run @ 60 fps anyway
@ -546,10 +550,11 @@ void QApple::on_actionScreenshot_triggered()
void QApple::on_actionSwap_disks_triggered()
{
PauseEmulator pause(this);
CardManager & cardManager = GetCardMgr();
if (g_CardMgr.QuerySlot(SLOT6) == CT_Disk2)
if (cardManager.QuerySlot(SLOT6) == CT_Disk2)
{
dynamic_cast<Disk2InterfaceCard*>(g_CardMgr.GetObj(SLOT6))->DriveSwap();
dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6))->DriveSwap();
}
}

View file

@ -212,11 +212,13 @@ void Video::keyPressEvent(QKeyEvent *event)
void Video::mouseMoveEvent(QMouseEvent *event)
{
if (g_CardMgr.IsMouseCardInstalled() && g_CardMgr.GetMouseCard()->IsActiveAndEnabled())
CardManager & cardManager = GetCardMgr();
if (cardManager.IsMouseCardInstalled() && cardManager.GetMouseCard()->IsActiveAndEnabled())
{
int iX, iMinX, iMaxX;
int iY, iMinY, iMaxY;
g_CardMgr.GetMouseCard()->GetXY(iX, iMinX, iMaxX, iY, iMinY, iMaxY);
cardManager.GetMouseCard()->GetXY(iX, iMinX, iMaxX, iY, iMinY, iMaxY);
const QPointF p = event->localPos();
const QSize s = size();
@ -229,7 +231,7 @@ void Video::mouseMoveEvent(QMouseEvent *event)
int outOfBoundsX;
int outOfBoundsY;
g_CardMgr.GetMouseCard()->SetPositionRel(dx, dy, &outOfBoundsX, &outOfBoundsY);
cardManager.GetMouseCard()->SetPositionRel(dx, dy, &outOfBoundsX, &outOfBoundsY);
event->accept();
}
@ -237,16 +239,18 @@ void Video::mouseMoveEvent(QMouseEvent *event)
void Video::mousePressEvent(QMouseEvent *event)
{
if (g_CardMgr.IsMouseCardInstalled() && g_CardMgr.GetMouseCard()->IsActiveAndEnabled())
CardManager & cardManager = GetCardMgr();
if (cardManager.IsMouseCardInstalled() && cardManager.GetMouseCard()->IsActiveAndEnabled())
{
Qt::MouseButton button = event->button();
switch (button)
{
case Qt::LeftButton:
g_CardMgr.GetMouseCard()->SetButton(BUTTON0, BUTTON_DOWN);
cardManager.GetMouseCard()->SetButton(BUTTON0, BUTTON_DOWN);
break;
case Qt::RightButton:
g_CardMgr.GetMouseCard()->SetButton(BUTTON1, BUTTON_DOWN);
cardManager.GetMouseCard()->SetButton(BUTTON1, BUTTON_DOWN);
break;
default:
break;
@ -257,16 +261,18 @@ void Video::mousePressEvent(QMouseEvent *event)
void Video::mouseReleaseEvent(QMouseEvent *event)
{
if (g_CardMgr.IsMouseCardInstalled() && g_CardMgr.GetMouseCard()->IsActiveAndEnabled())
CardManager & cardManager = GetCardMgr();
if (cardManager.IsMouseCardInstalled() && cardManager.GetMouseCard()->IsActiveAndEnabled())
{
Qt::MouseButton button = event->button();
switch (button)
{
case Qt::LeftButton:
g_CardMgr.GetMouseCard()->SetButton(BUTTON0, BUTTON_UP);
cardManager.GetMouseCard()->SetButton(BUTTON0, BUTTON_UP);
break;
case Qt::RightButton:
g_CardMgr.GetMouseCard()->SetButton(BUTTON1, BUTTON_UP);
cardManager.GetMouseCard()->SetButton(BUTTON1, BUTTON_UP);
break;
default:
break;

View file

@ -198,7 +198,7 @@ void Emulator::executeOneFrame()
const DWORD uActualCyclesExecuted = CpuExecute(uCyclesToExecute, bVideoUpdate);
g_dwCyclesThisFrame += uActualCyclesExecuted;
g_CardMgr.GetDisk2CardMgr().UpdateDriveState(uActualCyclesExecuted);
GetCardMgr().GetDisk2CardMgr().UpdateDriveState(uActualCyclesExecuted);
// SDL2 seems to synch with screen refresh rate so we do not need to worry about timers
const SDL_Rect srect = refreshTexture(myTexture);
@ -275,9 +275,10 @@ void Emulator::processKeyDown(const SDL_KeyboardEvent & key, bool & quit)
}
case SDLK_F5:
{
if (g_CardMgr.QuerySlot(SLOT6) == CT_Disk2)
CardManager & cardManager = GetCardMgr();
if (cardManager.QuerySlot(SLOT6) == CT_Disk2)
{
dynamic_cast<Disk2InterfaceCard*>(g_CardMgr.GetObj(SLOT6))->DriveSwap();
dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6))->DriveSwap();
}
break;
}

View file

@ -53,7 +53,7 @@ namespace
VideoInitialize();
VideoSwitchVideocardPalette(RGB_GetVideocard(), GetVideoType());
g_CardMgr.GetDisk2CardMgr().Reset();
GetCardMgr().GetDisk2CardMgr().Reset();
HD_Reset();
}
@ -88,7 +88,7 @@ namespace
void stopEmulator()
{
CMouseInterface* pMouseCard = g_CardMgr.GetMouseCard();
CMouseInterface* pMouseCard = GetCardMgr().GetMouseCard();
if (pMouseCard)
{
pMouseCard->Reset();
@ -102,7 +102,7 @@ namespace
PrintDestroy();
CpuDestroy();
g_CardMgr.GetDisk2CardMgr().Destroy();
GetCardMgr().GetDisk2CardMgr().Destroy();
ImageDestroy();
LogDone();
}

View file

@ -132,7 +132,7 @@ void VideoBenchmark(std::function<void()> redraw, std::function<void()> refresh)
const DWORD executedcycles = CpuExecute(cyclesPerMs, true);
cyclesThisFrame += executedcycles;
// every ms disk and joystick are updated
g_CardMgr.GetDisk2CardMgr().UpdateDriveState(executedcycles);
GetCardMgr().GetDisk2CardMgr().UpdateDriveState(executedcycles);
#if 0
JoyUpdateButtonLatch(executedcycles);
#endif

View file

@ -20,6 +20,7 @@
#include "ParallelPrinter.h"
#include "SaveState.h"
#include "Mockingboard.h"
#include "SynchronousEventManager.h"
#include <unistd.h>
@ -62,6 +63,8 @@ static double g_fMHz = 1.0; // Affected by Config dialog's speed slider bar
bool g_bDisableDirectSound = false;
bool g_bDisableDirectSoundMockingboard = false;
SynchronousEventManager g_SynchronousEventMgr;
void LogFileTimeUntilFirstKeyReadReset(void)
{
if (!g_fh)
@ -374,3 +377,9 @@ double Get6502BaseClock(void)
{
return (GetVideoRefreshRate() == VR_50HZ) ? CLK_6502_PAL : CLK_6502_NTSC;
}
CardManager& GetCardMgr(void)
{
static CardManager g_CardMgr; // singleton
return g_CardMgr;
}