HD as a Card from AW.
Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
parent
b4aa5fff1e
commit
ca05f42721
11 changed files with 79 additions and 53 deletions
|
@ -91,7 +91,7 @@ void CardManager::InsertInternal(UINT slot, SS_CARDTYPE type)
|
|||
m_slot[slot] = new DummyCard(type, slot);
|
||||
break;
|
||||
case CT_Uthernet2:
|
||||
m_slot[slot] = new DummyCard(type);
|
||||
m_slot[slot] = new DummyCard(type, slot);
|
||||
break;
|
||||
case CT_FourPlay:
|
||||
m_slot[slot] = new FourPlayCard(slot);
|
||||
|
|
|
@ -102,8 +102,12 @@ namespace common2
|
|||
|
||||
MemInitialize();
|
||||
|
||||
GetCardMgr().GetDisk2CardMgr().Reset();
|
||||
HD_Reset();
|
||||
CardManager & cardManager = GetCardMgr();
|
||||
cardManager.GetDisk2CardMgr().Reset();
|
||||
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
|
||||
{
|
||||
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Reset(true);
|
||||
}
|
||||
|
||||
Snapshot_Startup();
|
||||
|
||||
|
@ -112,8 +116,10 @@ namespace common2
|
|||
|
||||
void DestroyEmulator()
|
||||
{
|
||||
CardManager & cardManager = GetCardMgr();
|
||||
|
||||
Snapshot_Shutdown();
|
||||
CMouseInterface* pMouseCard = GetCardMgr().GetMouseCard();
|
||||
CMouseInterface* pMouseCard = cardManager.GetMouseCard();
|
||||
if (pMouseCard)
|
||||
{
|
||||
pMouseCard->Reset();
|
||||
|
@ -126,7 +132,12 @@ namespace common2
|
|||
|
||||
unRegisterUthernet2();
|
||||
tfe_shutdown();
|
||||
HD_Destroy();
|
||||
|
||||
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
|
||||
{
|
||||
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Destroy();
|
||||
}
|
||||
|
||||
PrintDestroy();
|
||||
CpuDestroy();
|
||||
DebugDestroy();
|
||||
|
|
|
@ -33,18 +33,32 @@ namespace
|
|||
return false;
|
||||
}
|
||||
|
||||
Disk2InterfaceCard& disk2Card = dynamic_cast<Disk2InterfaceCard&>(GetCardMgr().GetRef(SLOT6));
|
||||
const ImageError_e error = disk2Card.InsertDisk(DRIVE_1, filename.c_str(), IMAGE_FORCE_WRITE_PROTECTED, IMAGE_DONT_CREATE);
|
||||
CardManager & cardManager = GetCardMgr();
|
||||
|
||||
if (error == eIMAGE_ERROR_NONE)
|
||||
Disk2InterfaceCard * disk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
|
||||
if (disk2Card)
|
||||
{
|
||||
return true;
|
||||
const ImageError_e error = disk2Card->InsertDisk(DRIVE_1, filename.c_str(), IMAGE_FORCE_WRITE_PROTECTED, IMAGE_DONT_CREATE);
|
||||
|
||||
if (error == eIMAGE_ERROR_NONE)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// try a hard disk
|
||||
HD_SetEnabled(true);
|
||||
BOOL bRes = HD_Insert(HARDDISK_1, filename);
|
||||
return bRes == TRUE;
|
||||
if (cardManager.QuerySlot(SLOT7) != CT_GenericHDD)
|
||||
{
|
||||
cardManager.Insert(SLOT7, CT_GenericHDD);
|
||||
}
|
||||
|
||||
HarddiskInterfaceCard * harddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
|
||||
if (harddiskCard)
|
||||
{
|
||||
BOOL bRes = harddiskCard->Insert(HARDDISK_1, filename);
|
||||
return bRes == TRUE;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,11 +37,8 @@ namespace
|
|||
const QString REG_TIMER = QString::fromUtf8("QApple/Emulator/Timer");
|
||||
const QString REG_FULL_SPEED = QString::fromUtf8("QApple/Emulator/Full Speed");
|
||||
|
||||
void insertDisk(const QString & filename, const int disk)
|
||||
void insertDisk(Disk2InterfaceCard* pDisk2Card, const QString & filename, const int disk)
|
||||
{
|
||||
CardManager & cardManager = GetCardMgr();
|
||||
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
|
||||
|
||||
if (!pDisk2Card)
|
||||
return;
|
||||
|
||||
|
@ -61,15 +58,15 @@ namespace
|
|||
}
|
||||
}
|
||||
|
||||
void insertHD(const QString & filename, const int disk)
|
||||
void insertHD(HarddiskInterfaceCard * pHarddiskCard, const QString & filename, const int disk)
|
||||
{
|
||||
if (filename.isEmpty())
|
||||
{
|
||||
HD_Unplug(disk);
|
||||
pHarddiskCard->Unplug(disk);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!HD_Insert(disk, filename.toStdString()))
|
||||
if (!pHarddiskCard->Insert(disk, filename.toStdString()))
|
||||
{
|
||||
const QString message = QString("Error inserting '%1'").arg(filename);
|
||||
QMessageBox::warning(nullptr, "Hard Disk error", message);
|
||||
|
@ -90,9 +87,6 @@ namespace
|
|||
// 2) Snapshot_LoadState_v2(): card already inserted
|
||||
if (cardManager.QuerySlot(slot) != newCardType)
|
||||
cardManager.Insert(slot, newCardType);
|
||||
|
||||
std::string& regSection = RegGetConfigSlotSection(slot);
|
||||
RegSaveValue(regSection.c_str(), REGVALUE_CARD_TYPE, TRUE, CT_Disk2);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -175,8 +169,8 @@ void getAppleWinPreferences(PreferenceData & data)
|
|||
{
|
||||
CardManager & cardManager = GetCardMgr();
|
||||
|
||||
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
|
||||
data.disks.resize(diskIDs.size());
|
||||
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
|
||||
|
||||
if (pDisk2Card)
|
||||
{
|
||||
|
@ -191,19 +185,24 @@ void getAppleWinPreferences(PreferenceData & data)
|
|||
}
|
||||
|
||||
data.hds.resize(hdIDs.size());
|
||||
for (size_t i = 0; i < hdIDs.size(); ++i)
|
||||
HarddiskInterfaceCard* pHarddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
|
||||
|
||||
if (pHarddiskCard)
|
||||
{
|
||||
const std::string & diskName = HD_GetFullName(hdIDs[i]);
|
||||
if (!diskName.empty())
|
||||
for (size_t i = 0; i < hdIDs.size(); ++i)
|
||||
{
|
||||
data.hds[i] = QString::fromStdString(diskName);
|
||||
const std::string & diskName = pHarddiskCard->GetFullName(hdIDs[i]);
|
||||
if (!diskName.empty())
|
||||
{
|
||||
data.hds[i] = QString::fromStdString(diskName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data.enhancedSpeed = pDisk2Card && pDisk2Card->GetEnhanceDisk();
|
||||
data.cardInSlot4 = cardManager.QuerySlot(SLOT4);
|
||||
data.cardInSlot5 = cardManager.QuerySlot(SLOT5);
|
||||
data.hdInSlot7 = HD_CardIsEnabled();
|
||||
data.hdInSlot7 = pHarddiskCard;
|
||||
|
||||
data.apple2Type = GetApple2Type();
|
||||
|
||||
|
@ -236,6 +235,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
|
|||
{
|
||||
CardManager & cardManager = GetCardMgr();
|
||||
Disk2InterfaceCard* pDisk2Card = dynamic_cast<Disk2InterfaceCard*>(cardManager.GetObj(SLOT6));
|
||||
HarddiskInterfaceCard* pHarddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
|
||||
|
||||
if (currentData.speakerVolume != newData.speakerVolume)
|
||||
{
|
||||
|
@ -267,8 +267,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
|
|||
}
|
||||
if (currentData.hdInSlot7 != newData.hdInSlot7)
|
||||
{
|
||||
REGSAVE(TEXT(REGVALUE_HDD_ENABLED), newData.hdInSlot7 ? 1 : 0);
|
||||
HD_SetEnabled(newData.hdInSlot7);
|
||||
SetSlot(SLOT7, newData.hdInSlot7 ? CT_GenericHDD : CT_Empty);
|
||||
}
|
||||
|
||||
if (pDisk2Card && (currentData.enhancedSpeed != newData.enhancedSpeed))
|
||||
|
@ -281,7 +280,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
|
|||
{
|
||||
if (currentData.disks[i] != newData.disks[i])
|
||||
{
|
||||
insertDisk(newData.disks[i], diskIDs[i]);
|
||||
insertDisk(pDisk2Card, newData.disks[i], diskIDs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -289,7 +288,7 @@ void setAppleWinPreferences(const std::shared_ptr<QtFrame> & frame, const Prefer
|
|||
{
|
||||
if (currentData.hds[i] != newData.hds[i])
|
||||
{
|
||||
insertHD(newData.hds[i], hdIDs[i]);
|
||||
insertHD(pHarddiskCard, newData.hds[i], hdIDs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -103,8 +103,12 @@ namespace
|
|||
MemInitialize();
|
||||
frame->Initialize();
|
||||
|
||||
GetCardMgr().GetDisk2CardMgr().Reset();
|
||||
HD_Reset();
|
||||
CardManager & cardManager = GetCardMgr();
|
||||
cardManager.GetDisk2CardMgr().Reset();
|
||||
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
|
||||
{
|
||||
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Reset(true);
|
||||
}
|
||||
}
|
||||
|
||||
void unloadEmulator(const std::shared_ptr<QtFrame> & frame)
|
||||
|
@ -116,7 +120,10 @@ namespace
|
|||
{
|
||||
pMouseCard->Reset();
|
||||
}
|
||||
HD_Destroy();
|
||||
if (cardManager.QuerySlot(SLOT7) == CT_GenericHDD)
|
||||
{
|
||||
dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(SLOT7)).Destroy();
|
||||
}
|
||||
PrintDestroy();
|
||||
MemDestroy();
|
||||
SpkrDestroy();
|
||||
|
|
|
@ -477,11 +477,12 @@ namespace sa2
|
|||
ImGui::PopID();
|
||||
}
|
||||
|
||||
if (HD_CardIsEnabled())
|
||||
HarddiskInterfaceCard* pHarddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(SLOT7));
|
||||
if (pHarddiskCard)
|
||||
{
|
||||
ImGui::PushID(7);
|
||||
Disk_Status_e disk1Status_;
|
||||
HD_GetLightStatus(&disk1Status_);
|
||||
pHarddiskCard->GetLightStatus(&disk1Status_);
|
||||
for (size_t drive = HARDDISK_1; drive < NUM_HARDDISKS; ++drive)
|
||||
{
|
||||
ImGui::PushID(drive);
|
||||
|
@ -501,12 +502,12 @@ namespace sa2
|
|||
ImGui::TableNextColumn();
|
||||
if (ImGui::SmallButton("Eject"))
|
||||
{
|
||||
HD_Unplug(drive);
|
||||
pHarddiskCard->Unplug(drive);
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::SmallButton("Swap"))
|
||||
{
|
||||
HD_ImageSwap();
|
||||
pHarddiskCard->ImageSwap();
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::RadioButton("", (dragAndDropSlot == SLOT7) && (dragAndDropDrive == drive)))
|
||||
|
@ -515,7 +516,7 @@ namespace sa2
|
|||
}
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TextUnformatted(HD_GetFullName(drive).c_str());
|
||||
ImGui::TextUnformatted(pHarddiskCard->GetFullName(drive).c_str());
|
||||
ImGui::PopID();
|
||||
}
|
||||
ImGui::PopID();
|
||||
|
|
|
@ -180,13 +180,6 @@ namespace sa2
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
const bool enabled = card == CT_GenericHDD;
|
||||
REGSAVE(REGVALUE_HDD_ENABLED, enabled);
|
||||
HD_SetEnabled(enabled);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
if (card == CT_Uthernet2)
|
||||
|
|
|
@ -31,7 +31,8 @@ namespace
|
|||
}
|
||||
case CT_GenericHDD:
|
||||
{
|
||||
if (!HD_Insert(dragAndDropDrive, filename))
|
||||
HarddiskInterfaceCard * harddiskCard = dynamic_cast<HarddiskInterfaceCard*>(cardManager.GetObj(dragAndDropSlot));
|
||||
if (!harddiskCard->Insert(dragAndDropDrive, filename))
|
||||
{
|
||||
frame->FrameMessageBox("Invalid HD image", "ERROR", MB_OK);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "StdAfx.h"
|
||||
#include "FourPlay.h"
|
||||
|
||||
void FourPlayCard::InitializeIO(LPBYTE pCxRomPeripheral, UINT slot)
|
||||
void FourPlayCard::InitializeIO(LPBYTE pCxRomPeripheral)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "StdAfx.h"
|
||||
#include "SNESMAX.h"
|
||||
|
||||
void SNESMAXCard::InitializeIO(LPBYTE pCxRomPeripheral, UINT slot)
|
||||
void SNESMAXCard::InitializeIO(LPBYTE pCxRomPeripheral)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
|
||||
CSuperSerialCard::CSuperSerialCard(UINT slot) :
|
||||
Card(CT_SSC), m_uSlot(slot)
|
||||
Card(CT_SSC, slot)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ void CSuperSerialCard::CommReset()
|
|||
{
|
||||
}
|
||||
|
||||
void CSuperSerialCard::CommInitialize(LPBYTE pCxRomPeripheral, UINT uSlot)
|
||||
void CSuperSerialCard::InitializeIO(LPBYTE pCxRomPeripheral)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue