mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-01-22 01:31:25 +00:00
Support disconnecting drives from DiskII Interface card: -d1-disconnected, -d2-disconnected
This commit is contained in:
parent
1e35d4448c
commit
469f9ba807
@ -134,6 +134,14 @@ bool ProcessCmdLine(LPSTR lpCmdLine)
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.szImageName_drive[SLOT6][DRIVE_2] = lpCmdLine;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-d1-disconnected") == 0)
|
||||
{
|
||||
g_cmdLine.driveConnected[SLOT6][DRIVE_1] = false;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-d2-disconnected") == 0)
|
||||
{
|
||||
g_cmdLine.driveConnected[SLOT6][DRIVE_2] = false;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-h1") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
|
@ -44,6 +44,8 @@ struct CmdLine
|
||||
slotInsert[i] = CT_Empty;
|
||||
szImageName_drive[i][DRIVE_1] = NULL;
|
||||
szImageName_drive[i][DRIVE_2] = NULL;
|
||||
driveConnected[i][DRIVE_1] = true;
|
||||
driveConnected[i][DRIVE_2] = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,6 +62,7 @@ struct CmdLine
|
||||
UINT bestWidth;
|
||||
UINT bestHeight;
|
||||
LPSTR szImageName_drive[NUM_SLOTS][NUM_DRIVES];
|
||||
bool driveConnected[NUM_SLOTS][NUM_DRIVES];
|
||||
LPSTR szImageName_harddisk[NUM_HARDDISKS];
|
||||
LPSTR szSnapshotName;
|
||||
LPSTR szScreenshotFilename;
|
||||
|
@ -355,6 +355,16 @@ void Disk2InterfaceCard::EjectDisk(const int drive)
|
||||
Video_ResetScreenshotCounter("");
|
||||
}
|
||||
|
||||
void Disk2InterfaceCard::UnplugDrive(const int drive)
|
||||
{
|
||||
if (!IsDriveValid(drive))
|
||||
return;
|
||||
|
||||
EjectDisk(drive);
|
||||
|
||||
m_floppyDrive[drive].m_isConnected = false;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
void Disk2InterfaceCard::WriteTrack(const int drive)
|
||||
@ -1552,6 +1562,12 @@ void Disk2InterfaceCard::ResetSwitches(void)
|
||||
|
||||
bool Disk2InterfaceCard::UserSelectNewDiskImage(const int drive, LPCSTR pszFilename/*=""*/)
|
||||
{
|
||||
if (!IsDriveConnected(drive))
|
||||
{
|
||||
MessageBox(g_hFrameWindow, "Drive not connected!", "Insert disk", MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
||||
TCHAR directory[MAX_PATH];
|
||||
TCHAR filename[MAX_PATH];
|
||||
TCHAR title[40];
|
||||
|
@ -144,6 +144,7 @@ public:
|
||||
|
||||
ImageError_e InsertDisk(const int drive, LPCTSTR pszImageFilename, const bool bForceWriteProtected, const bool bCreateIfNecessary);
|
||||
void EjectDisk(const int drive);
|
||||
void UnplugDrive(const int drive);
|
||||
|
||||
bool IsConditionForFullSpeed(void);
|
||||
void NotifyInvalidImage(const int drive, LPCTSTR pszImageFilename, const ImageError_e Error);
|
||||
|
@ -389,16 +389,17 @@ bool DoHardDiskInsert(const int nDrive, LPCSTR szFileName)
|
||||
return res;
|
||||
}
|
||||
|
||||
void InsertFloppyDisks(const UINT slot, LPSTR szImageName_drive[NUM_DRIVES], bool& bBoot)
|
||||
void InsertFloppyDisks(const UINT slot, LPSTR szImageName_drive[NUM_DRIVES], bool driveConnected[NUM_DRIVES], bool& bBoot)
|
||||
{
|
||||
_ASSERT(slot == 5 || slot == 6);
|
||||
|
||||
if (!szImageName_drive[DRIVE_1] && !szImageName_drive[DRIVE_2])
|
||||
return;
|
||||
|
||||
bool bRes = true;
|
||||
|
||||
if (szImageName_drive[DRIVE_1])
|
||||
if (!driveConnected[DRIVE_1])
|
||||
{
|
||||
dynamic_cast<Disk2InterfaceCard&>(GetCardMgr().GetRef(slot)).UnplugDrive(DRIVE_1);
|
||||
}
|
||||
else if (szImageName_drive[DRIVE_1])
|
||||
{
|
||||
bRes = DoDiskInsert(slot, DRIVE_1, szImageName_drive[DRIVE_1]);
|
||||
LogFileOutput("Init: S%d, DoDiskInsert(D1), res=%d\n", slot, bRes);
|
||||
@ -406,7 +407,11 @@ void InsertFloppyDisks(const UINT slot, LPSTR szImageName_drive[NUM_DRIVES], boo
|
||||
bBoot = true;
|
||||
}
|
||||
|
||||
if (szImageName_drive[DRIVE_2])
|
||||
if (!driveConnected[DRIVE_2])
|
||||
{
|
||||
dynamic_cast<Disk2InterfaceCard&>(GetCardMgr().GetRef(slot)).UnplugDrive(DRIVE_2);
|
||||
}
|
||||
else if (szImageName_drive[DRIVE_2])
|
||||
{
|
||||
bRes |= DoDiskInsert(slot, DRIVE_2, szImageName_drive[DRIVE_2]);
|
||||
LogFileOutput("Init: S%d, DoDiskInsert(D2), res=%d\n", slot, bRes);
|
||||
|
@ -7,7 +7,7 @@
|
||||
void LoadConfiguration();
|
||||
bool DoDiskInsert(const UINT slot, const int nDrive, LPCSTR szFileName);
|
||||
bool DoHardDiskInsert(const int nDrive, LPCSTR szFileName);
|
||||
void InsertFloppyDisks(const UINT slot, LPSTR szImageName_drive[NUM_DRIVES], bool& bBoot);
|
||||
void InsertFloppyDisks(const UINT slot, LPSTR szImageName_drive[NUM_DRIVES], bool driveConnected[NUM_DRIVES], bool& bBoot);
|
||||
void InsertHardDisks(LPSTR szImageName_harddisk[NUM_HARDDISKS], bool& bBoot);
|
||||
void UnplugHardDiskControllerCard(void);
|
||||
void GetAppleWindowTitle();
|
||||
|
@ -880,10 +880,10 @@ static void RepeatInitialization(void)
|
||||
// Post: may enable HDD, required for MemInitialize()->MemInitializeIO()
|
||||
{
|
||||
bool temp = false;
|
||||
InsertFloppyDisks(SLOT5, g_cmdLine.szImageName_drive[SLOT5], temp);
|
||||
InsertFloppyDisks(SLOT5, g_cmdLine.szImageName_drive[SLOT5], g_cmdLine.driveConnected[SLOT5], temp);
|
||||
//g_cmdLine.szImageName_drive[SLOT5][DRIVE_1] = g_cmdLine.szImageName_drive[SLOT5][DRIVE_2] = NULL; // *Do* insert on a restart (since no way they could have changed)
|
||||
|
||||
InsertFloppyDisks(SLOT6, g_cmdLine.szImageName_drive[SLOT6], g_cmdLine.bBoot);
|
||||
InsertFloppyDisks(SLOT6, g_cmdLine.szImageName_drive[SLOT6], g_cmdLine.driveConnected[SLOT6], g_cmdLine.bBoot);
|
||||
g_cmdLine.szImageName_drive[SLOT6][DRIVE_1] = g_cmdLine.szImageName_drive[SLOT6][DRIVE_2] = NULL; // Don't insert on a restart
|
||||
|
||||
InsertHardDisks(g_cmdLine.szImageName_harddisk, g_cmdLine.bBoot);
|
||||
|
Loading…
x
Reference in New Issue
Block a user