Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions help/CommandLine.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ <h2 style="COLOR: rgb(0,128,0)">Command line</h2>
This is guaranteed to be processed after all the image loading switches (eg. -d1, -h1, etc).<br>
Use this switch if you have a mix of (eg) -d1 and -h1 loading images from different folders, and you want to guarantee the current dir.<br><br>
-d1 &lt;pathname&gt;<br>
Start with a floppy disk in slot 6 drive-1 (and auto power-on the Apple II).<br>
Start with a floppy disk in slot 6 drive-1 (and auto power-on the Apple II). NB. Disk II controller card in slot 6 gets enabled, and this has priority over '-s6 empty'.<br>
NB. -s6d1 has the meaning same as -d1.<br><br>
-d2 &lt;pathname&gt;<br>
Start with a floppy disk in slot 6 drive-2.<br>
Expand All @@ -28,7 +28,7 @@ <h2 style="COLOR: rgb(0,128,0)">Command line</h2>
-s5d2 &lt;pathname&gt;<br>
Start with a floppy disk in slot 5 drive-2 (must be used with '-s5 diskii' or '-s5 diskii13').<br><br>
-h1 &lt;pathname&gt;<br>
Start with hard disk 1 plugged in (and auto power-on the Apple II). NB. Hard disk controller card in slot 7 gets enabled.<br><br>
Start with hard disk 1 plugged in (and auto power-on the Apple II). NB. Hard disk controller card in slot 7 gets enabled, and this has priority over '-s7 empty'.<br><br>
-h2 &lt;pathname&gt;<br>
Start with hard disk 2 plugged in. NB. Hard disk controller card in slot 7 gets enabled.<br><br>
-s5h1 &lt;pathname&gt;<br>
Expand Down Expand Up @@ -60,9 +60,8 @@ <h2 style="COLOR: rgb(0,128,0)">Command line</h2>
Insert an Apple 16K Language Card into slot 0 in the original Apple II and use the F8 auto-start ROM.<br>
NB. The Apple II Plus already defaults to having a Language Card, so this switch is not required.<br><br>
-s&lt;N&gt; empty<br>
Remove any card from slot N (N=1-7).<br>
NB. '-s7 empty' is useful to allow a floppy disk to boot from slot 6, drive 1. Use in combination with -d1.<br>
NB. '-s6 empty' persists this state to the Registry and there's currently no GUI option to re-insert a Disk II controller card into slot 6. So you must use '-s6 diskii' to re-enable the card in slot 6.<br><br>
Remove any card from slot N (N=0-7).<br>
NB. '-s7 empty' is useful to allow a floppy disk to auto-boot from slot 6, drive 1. Use in combination with -d1.<br><br>
-s1 parallel<br>
Insert a parallel printer card into slot 1.<br><br>
-s2 ssc<br>
Expand Down
2 changes: 1 addition & 1 deletion source/CardManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ void CardManager::InsertInternal(UINT slot, SS_CARDTYPE type)
}
else
{
m_slot[slot] = new Saturn128K(slot, Saturn128K::kMaxSaturnBanks);
m_slot[slot] = new Saturn128K(slot, 0);
}
break;
case CT_BreakpointCard:
Expand Down
2 changes: 1 addition & 1 deletion source/CmdLine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ static LPSTR GetNextArg(LPSTR lpCmdLine)

//---------------------------------------------------------------------------

bool CardInstanceExists(SS_CARDTYPE cardType)
static bool CardInstanceExists(SS_CARDTYPE cardType)
{
for (UINT i = SLOT0; i < NUM_SLOTS; i++)
{
Expand Down
21 changes: 14 additions & 7 deletions source/Configuration/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,27 +144,34 @@ void CConfigNeedingRestart::Reload()
}
else if (m_Slot[slot] == CT_Disk2)
{
m_diskII13SectorFirmware[slot] = dynamic_cast<Disk2InterfaceCard&>(cardManager.GetRef(slot)).Get13SectorFirmware();
Disk2InterfaceCard& card = dynamic_cast<Disk2InterfaceCard&>(cardManager.GetRef(slot));
m_diskII13SectorFirmware[slot] = card.Get13SectorFirmware();

for (UINT i = DRIVE_1; i < NUM_DRIVES; i++)
m_slotInfoForFDC[slot].pathname[i] = dynamic_cast<Disk2InterfaceCard&>(cardManager.GetRef(slot)).DiskGetFullPathName(i);
{
m_slotInfoForFDC[slot].pathname[i] = card.DiskGetFullPathName(i);
}
}
else if (m_Slot[slot] == CT_GenericHDD)
{
m_hdcFirmware[slot] = dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(slot)).GetHdcFirmwareMode();
HarddiskInterfaceCard& card = dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(slot));
m_hdcFirmware[slot] = card.GetHdcFirmwareMode();

for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
m_slotInfoForHDC[slot].pathname[i] = dynamic_cast<HarddiskInterfaceCard&>(cardManager.GetRef(slot)).HarddiskGetFullPathName(i);
{
m_slotInfoForHDC[slot].pathname[i] = card.HarddiskGetFullPathName(i);
}
}
else if (m_Slot[slot] == CT_Saturn128K)
{
m_SaturnMemorySize[slot] = dynamic_cast<Saturn128K&>(cardManager.GetRef(slot)).GetSaturnMemorySize();
}
else if (m_Slot[slot] == CT_MockingboardC || m_Slot[slot] == CT_Phasor)
{
m_Mockingboard[slot].ssi263A = dynamic_cast<MockingboardCard&>(cardManager.GetRef(slot)).GetSocketSSI263(0);
m_Mockingboard[slot].ssi263B = dynamic_cast<MockingboardCard&>(cardManager.GetRef(slot)).GetSocketSSI263(1);
m_Mockingboard[slot].sc01 = dynamic_cast<MockingboardCard&>(cardManager.GetRef(slot)).GetSocketSC01();
MockingboardCard& card = dynamic_cast<MockingboardCard&>(cardManager.GetRef(slot));
m_Mockingboard[slot].ssi263A = card.GetSocketSSI263(0);
m_Mockingboard[slot].ssi263B = card.GetSocketSSI263(1);
m_Mockingboard[slot].sc01 = card.GetSocketSC01();
}
else if (m_Slot[slot] == CT_Empty)
{
Expand Down
8 changes: 5 additions & 3 deletions source/Configuration/PageSlots.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ void CPageSlots::ApplyConfigAfterClose()
HarddiskInterfaceCard& card = dynamic_cast<HarddiskInterfaceCard&>(GetCardMgr().GetRef(slot));
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
{
std::string pathname = m_PropertySheetHelper.GetConfigNew().m_slotInfoForHDC[slot].pathname[i];
const std::string& pathname = m_PropertySheetHelper.GetConfigNew().m_slotInfoForHDC[slot].pathname[i];

if (card.HarddiskGetFullPathName(i) == pathname)
continue;
Expand Down Expand Up @@ -565,9 +565,10 @@ bool CPageSlots::CheckFloppyPathnameInUse(const std::string& pathname, BYTE& inU
{
if (GetCardMgr().QuerySlot(slot) == CT_Disk2)
{
Disk2InterfaceCard& card = dynamic_cast<Disk2InterfaceCard&>(GetCardMgr().GetRef(slot));
for (UINT i = DRIVE_1; i < NUM_DRIVES; i++)
{
if (dynamic_cast<Disk2InterfaceCard&>(GetCardMgr().GetRef(slot)).DiskGetFullPathName(i) == pathname)
if (card.DiskGetFullPathName(i) == pathname)
{
inUseSlot = slot;
inUseDrive = i;
Expand Down Expand Up @@ -815,9 +816,10 @@ bool CPageSlots::CheckHDDPathnameInUse(const std::string& pathname, BYTE& inUseS
{
if (GetCardMgr().QuerySlot(slot) == CT_GenericHDD)
{
HarddiskInterfaceCard& card = dynamic_cast<HarddiskInterfaceCard&>(GetCardMgr().GetRef(slot));
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
{
if (dynamic_cast<HarddiskInterfaceCard&>(GetCardMgr().GetRef(slot)).HarddiskGetFullPathName(i) == pathname)
if (card.HarddiskGetFullPathName(i) == pathname)
{
inUseSlot = slot;
inUseDrive = i;
Expand Down
16 changes: 15 additions & 1 deletion source/Configuration/PropertySheetHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,21 @@ bool CPropertySheetHelper::HardwareConfigChanged(HWND hWnd)
strMsgMain += ". RamWorks III memory size changed\n";

if (memcmp(m_ConfigOld.m_SaturnMemorySize, m_ConfigNew.m_SaturnMemorySize, sizeof(m_ConfigOld.m_SaturnMemorySize)) != 0)
strMsgMain += ". Saturn memory size has changed\n";
{
for (UINT slot = SLOT0; slot < NUM_SLOTS; slot++)
{
if (CONFIG_CHANGED(m_Slot[slot]))
continue;

if (CONFIG_CHANGED(m_SaturnMemorySize[slot]))
{
strMsgMain += ". Slot ";
strMsgMain += '0' + slot;
strMsgMain += ": ";
strMsgMain += "Saturn memory size has changed\n";
}
}
}

if (memcmp(m_ConfigOld.m_Mockingboard, m_ConfigNew.m_Mockingboard, sizeof(m_ConfigOld.m_Mockingboard)) != 0)
strMsgMain += ". Mockingboard/Phasor config has changed\n";
Expand Down
19 changes: 13 additions & 6 deletions source/Debugger/Debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1252,7 +1252,7 @@ bool _CheckBreakpointValueWithPrefix(Breakpoint_t* pBP, int nVal)
const UINT saturnActiveBank = GetCardMgr().GetLanguageCardMgr().GetLanguageCard()->GetActiveBank();
const int saturnBank = pBP->addrPrefix.nSlot != AddressPrefix_t::kSlotInvalid && pBP->addrPrefix.nBank != AddressPrefix_t::kBankInvalid ? pBP->addrPrefix.nBank : AddressPrefix_t::kBankInvalid;

if (GetMemMode() & MF_HIGHRAM)
if (GetMemMode() & MF_HIGHRAM) // RAM readable (RAM either writable or protected)
{
if (bNoRamworksOrSaturnBank
|| (saturnBank < 0 && pBP->addrPrefix.nBank == 0x00 && !(GetMemMode() & MF_ALTZP))
Expand All @@ -1272,13 +1272,20 @@ bool _CheckBreakpointValueWithPrefix(Breakpoint_t* pBP, int nVal)
}
}
}
else // ROM switched in
else // ROM readable (RAM either writable or protected)
{
if (!bNoRamworksOrSaturnBank
|| (pBP->addrPrefix.nLangCard != AddressPrefix_t::kLangCardInvalid))
bStatus = false;
else
if (isWrite && GetMemMode() & MF_WRITERAM) // RAM writable
{
bStatus = true;
}
else // RAM protected
{
if (!bNoRamworksOrSaturnBank
|| (pBP->addrPrefix.nLangCard != AddressPrefix_t::kLangCardInvalid))
bStatus = false;
else
bStatus = true;
}
}
}
else
Expand Down
2 changes: 1 addition & 1 deletion source/Debugger/Debugger_Display.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2703,7 +2703,7 @@ void _DrawSoftSwitchLanguageCardBank( RECT & rect, const int iBankDisplay, int b

rect.right = rect.left + dx80;

// 0 = RAM
// 0 = ROM
// 1 = Bank 1
// 2 = Bank 2
bool bBankWritable = (GetMemMode() & MF_WRITERAM) ? 1 : 0;
Expand Down
4 changes: 2 additions & 2 deletions source/Disk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ void Disk2InterfaceCard::CheckSpinning(const bool stateChanged, const ULONG uExe

bool Disk2InterfaceCard::IsDriveValid(const int drive)
{
return (drive >= 0 && drive < NUM_DRIVES);
return (drive >= DRIVE_1 && drive < NUM_DRIVES);
}

//===========================================================================
Expand Down Expand Up @@ -2584,7 +2584,7 @@ bool Disk2InterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT versi
}

// Eject all disks first in case Drive-2 contains disk to be inserted into Drive-1
for (UINT i=0; i<NUM_DRIVES; i++)
for (UINT i=DRIVE_1; i<NUM_DRIVES; i++)
{
EjectDisk(i); // Remove any disk & update Registry to reflect empty drive
m_floppyDrive[i].clear();
Expand Down
14 changes: 7 additions & 7 deletions source/Harddisk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,13 +191,13 @@ HarddiskInterfaceCard::HarddiskInterfaceCard(UINT slot) :

HarddiskInterfaceCard::~HarddiskInterfaceCard(void)
{
for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
CleanupDriveInternal(i);
}

void HarddiskInterfaceCard::Reset(const bool powerCycle)
{
for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
m_hardDiskDrive[i].m_error = 0;

m_fifoIdx = 0;
Expand Down Expand Up @@ -384,7 +384,7 @@ void HarddiskInterfaceCard::GetFilenameAndPathForSaveState(std::string& filename
filename = "";
path = "";

for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
{
if (!m_hardDiskDrive[i].m_imageloaded)
continue;
Expand All @@ -408,7 +408,7 @@ void HarddiskInterfaceCard::GetFilenameAndPathForSaveState(std::string& filename

void HarddiskInterfaceCard::Destroy(void)
{
for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
{
m_saveDiskImage = false;
CleanupDrive(i);
Expand Down Expand Up @@ -1330,7 +1330,7 @@ void HarddiskInterfaceCard::SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
yamlSaveHelper.SaveMemory(MemGetCxRomPeripheral() + m_slot * APPLE_SLOT_SIZE, APPLE_SLOT_SIZE);
}

for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
{
if (m_hardDiskDrive[i].m_imageloaded)
SaveSnapshotHDDUnit(yamlSaveHelper, i);
Expand Down Expand Up @@ -1462,14 +1462,14 @@ bool HarddiskInterfaceCard::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT ve
}

// Unplug all HDDs first in case eg. HDD-2 is to be plugged in as HDD-1
for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
{
Unplug(i);
m_hardDiskDrive[i].clear();
}

bool userSelectedImageFolder = false;
for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
userSelectedImageFolder |= LoadSnapshotHDDUnit(yamlLoadHelper, i, version);

if (!userSelectedImageFolder)
Expand Down
3 changes: 2 additions & 1 deletion source/LanguageCard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,8 @@ Saturn128K::Saturn128K(UINT slot, UINT banks)
m_uSaturnActiveBank = 0;
m_uSaturnTotalBanks = banks; // /banks/ (from cmd line) overrides banks from Registry

SetSaturnMemorySizeSlot0(0); // reset (eg. if there's a VM restart, due to user changing # banks)
if (slot == SLOT0)
SetSaturnMemorySizeSlot0(0); // reset (eg. if there's a VM restart, due to user changing # banks)

if (banks == 0)
{
Expand Down
4 changes: 2 additions & 2 deletions source/SaveState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,11 @@ void Snapshot_GetDefaultFilenameAndPath(std::string& defaultFilename, std::strin
// Attempt to get a default filename/path based on harddisk plugged-in or floppy disk inserted
// . Priority given to harddisk over floppy images

for (int i = NUM_SLOTS - 1; i >= 0; i--) // scan slots backwards: 7->0
for (int i = NUM_SLOTS - 1; i >= SLOT0; i--) // scan slots backwards: 7->0
{
if (GetCardMgr().QuerySlot(i) == CT_GenericHDD)
{
dynamic_cast<HarddiskInterfaceCard&>(GetCardMgr().GetRef(SLOT7)).GetFilenameAndPathForSaveState(defaultFilename, defaultPath);
dynamic_cast<HarddiskInterfaceCard&>(GetCardMgr().GetRef(i)).GetFilenameAndPathForSaveState(defaultFilename, defaultPath);
if (!defaultFilename.empty())
break;
}
Expand Down
19 changes: 12 additions & 7 deletions source/Utilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ void LoadConfiguration(bool loadImages)

//

for (UINT slot = SLOT0; slot <= SLOT7; slot++)
for (UINT slot = SLOT0; slot < NUM_SLOTS; slot++)
{
std::string regSection = RegGetConfigSlotSection(slot);

Expand Down Expand Up @@ -297,15 +297,20 @@ void LoadConfiguration(bool loadImages)
GetCurrentDirectory(sizeof(szFilename), szFilename);
SetCurrentImageDir(szFilename);

for (UINT slot = SLOT1; slot <= SLOT7; slot++)
if (loadImages)
{
if (loadImages && GetCardMgr().QuerySlot(slot) == CT_GenericHDD)
for (UINT slot = SLOT1; slot < NUM_SLOTS; slot++)
{
for (UINT i = 0; i < NUM_HARDDISKS; i++)
dynamic_cast<HarddiskInterfaceCard&>(GetCardMgr().GetRef(slot)).LoadLastDiskImage(i);
if (GetCardMgr().QuerySlot(slot) == CT_GenericHDD)
{
HarddiskInterfaceCard& card = dynamic_cast<HarddiskInterfaceCard&>(GetCardMgr().GetRef(slot));
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
{
card.LoadLastDiskImage(i);
}
}
}
}

//

// Current/Starting Dir is the "root" of where the user keeps their disk images
Expand Down Expand Up @@ -448,7 +453,7 @@ void InsertHardDisks(const UINT slot, LPCSTR szImageName_harddisk[NUM_HARDDISKS]
{
// If no HDDs then just return (and don't insert an HDC into this slot)
bool res = true;
for (UINT i = 0; i < NUM_HARDDISKS; i++)
for (UINT i = HARDDISK_1; i < NUM_HARDDISKS; i++)
res &= szImageName_harddisk[i] == NULL;
if (res)
return;
Expand Down
Loading