mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-12-28 17:30:02 +00:00
AppleWin.cpp split (PR #875)
. Split AppleWin -> Core with the functionality really needed by the emulator. . Split AppleWin -> Utilities for generic code not called by other emulator components. . Split AppleWin -> CmdLine for the command line option parsing.
This commit is contained in:
parent
6e166dfff6
commit
bbe88da787
@ -227,11 +227,27 @@
|
||||
Filter=".cpp"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\source\AppleWin.cpp"
|
||||
RelativePath=".\source\CmdLine.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\source\AppleWin.h"
|
||||
RelativePath=".\source\CmdLine.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\source\Core.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\source\Core.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\source\Utilities.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\source\Utilities.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@ -953,6 +969,14 @@
|
||||
<Filter
|
||||
Name="Windows"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\source\Windows\AppleWin.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\source\Windows\AppleWin.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\source\Windows\DirectInput.cpp"
|
||||
>
|
||||
|
@ -22,10 +22,10 @@
|
||||
<ClInclude Include="resource\resource.h" />
|
||||
<ClInclude Include="resource\winres.h" />
|
||||
<ClInclude Include="source\6821.h" />
|
||||
<ClInclude Include="source\AppleWin.h" />
|
||||
<ClInclude Include="source\AY8910.h" />
|
||||
<ClInclude Include="source\Card.h" />
|
||||
<ClInclude Include="source\CardManager.h" />
|
||||
<ClInclude Include="source\CmdLine.h" />
|
||||
<ClInclude Include="source\Common.h" />
|
||||
<ClInclude Include="source\CommonVICE\6510core.h" />
|
||||
<ClInclude Include="source\CommonVICE\alarm.h" />
|
||||
@ -45,6 +45,7 @@
|
||||
<ClInclude Include="source\Configuration\PropertySheet.h" />
|
||||
<ClInclude Include="source\Configuration\PropertySheetDefs.h" />
|
||||
<ClInclude Include="source\Configuration\PropertySheetHelper.h" />
|
||||
<ClInclude Include="source\Core.h" />
|
||||
<ClInclude Include="source\CPU.h" />
|
||||
<ClInclude Include="source\CPU\cpu6502.h" />
|
||||
<ClInclude Include="source\CPU\cpu65C02.h" />
|
||||
@ -107,7 +108,9 @@
|
||||
<ClInclude Include="source\Tfe\Tfearch.h" />
|
||||
<ClInclude Include="source\Tfe\Tfesupp.h" />
|
||||
<ClInclude Include="source\Tfe\Uilib.h" />
|
||||
<ClInclude Include="source\Utilities.h" />
|
||||
<ClInclude Include="source\Video.h" />
|
||||
<ClInclude Include="source\Windows\AppleWin.h" />
|
||||
<ClInclude Include="source\Windows\DirectInput.h" />
|
||||
<ClInclude Include="source\Windows\WinFrame.h" />
|
||||
<ClInclude Include="source\Windows\WinVideo.h" />
|
||||
@ -129,9 +132,9 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\6821.cpp" />
|
||||
<ClCompile Include="source\AppleWin.cpp" />
|
||||
<ClCompile Include="source\AY8910.cpp" />
|
||||
<ClCompile Include="source\CardManager.cpp" />
|
||||
<ClCompile Include="source\CmdLine.cpp" />
|
||||
<ClCompile Include="source\Configuration\About.cpp" />
|
||||
<ClCompile Include="source\Configuration\PageAdvanced.cpp" />
|
||||
<ClCompile Include="source\Configuration\PageConfig.cpp" />
|
||||
@ -141,6 +144,7 @@
|
||||
<ClCompile Include="source\Configuration\PageSound.cpp" />
|
||||
<ClCompile Include="source\Configuration\PropertySheet.cpp" />
|
||||
<ClCompile Include="source\Configuration\PropertySheetHelper.cpp" />
|
||||
<ClCompile Include="source\Core.cpp" />
|
||||
<ClCompile Include="source\CPU.cpp" />
|
||||
<ClCompile Include="source\Disk2CardManager.cpp" />
|
||||
<ClCompile Include="source\RGBMonitor.cpp" />
|
||||
@ -214,7 +218,9 @@
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release NoDX|Win32'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\Utilities.cpp" />
|
||||
<ClCompile Include="source\Video.cpp" />
|
||||
<ClCompile Include="source\Windows\AppleWin.cpp" />
|
||||
<ClCompile Include="source\Windows\DirectInput.cpp" />
|
||||
<ClCompile Include="source\Windows\WinFrame.cpp" />
|
||||
<ClCompile Include="source\Windows\WinVideo.cpp" />
|
||||
|
@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\AppleWin.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\6821.cpp">
|
||||
<Filter>Source Files\Emulator</Filter>
|
||||
</ClCompile>
|
||||
@ -211,11 +208,20 @@
|
||||
<ClCompile Include="source\Windows\WinFrame.cpp">
|
||||
<Filter>Source Files\Windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\Core.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\Utilities.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\Windows\AppleWin.cpp">
|
||||
<Filter>Source Files\Windows</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\CmdLine.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="source\AppleWin.h">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\CommonVICE\6510core.h">
|
||||
<Filter>Source Files\CommonVICE</Filter>
|
||||
</ClInclude>
|
||||
@ -507,6 +513,18 @@
|
||||
<ClInclude Include="source\Windows\WinFrame.h">
|
||||
<Filter>Source Files\Windows</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\Core.h">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\Utilities.h">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\Windows\AppleWin.h">
|
||||
<Filter>Source Files\Windows</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\CmdLine.h">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="resource\Applewin.bmp">
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
#include "AY8910.h"
|
||||
|
||||
#include "AppleWin.h" // For g_fh
|
||||
#include "Core.h" // For g_fh
|
||||
#include "YamlHelper.h"
|
||||
|
||||
/* The AY white noise RNG algorithm is based on info from MAME's ay8910.c -
|
||||
|
2270
source/AppleWin.cpp
2270
source/AppleWin.cpp
File diff suppressed because it is too large
Load Diff
@ -87,7 +87,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "CPU.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CardManager.h"
|
||||
#include "Memory.h"
|
||||
#include "Mockingboard.h"
|
||||
|
@ -30,7 +30,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "CardManager.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
|
||||
#include "Disk.h"
|
||||
#include "MouseInterface.h"
|
||||
|
527
source/CmdLine.cpp
Normal file
527
source/CmdLine.cpp
Normal file
@ -0,0 +1,527 @@
|
||||
/*
|
||||
AppleWin : An Apple //e emulator for Windows
|
||||
|
||||
Copyright (C) 1994-1996, Michael O'Brien
|
||||
Copyright (C) 1999-2001, Oliver Schmidt
|
||||
Copyright (C) 2002-2005, Tom Charlesworth
|
||||
Copyright (C) 2006-2014, Tom Charlesworth, Michael Pohoreski
|
||||
|
||||
AppleWin is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
AppleWin is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with AppleWin; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* Description: main
|
||||
*
|
||||
* Author: Various
|
||||
*/
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "CmdLine.h"
|
||||
#include "Log.h"
|
||||
#include "Core.h"
|
||||
#include "Memory.h"
|
||||
#include "LanguageCard.h"
|
||||
#include "Keyboard.h"
|
||||
#include "Joystick.h"
|
||||
#include "SoundCore.h"
|
||||
#include "ParallelPrinter.h"
|
||||
#include "CardManager.h"
|
||||
#include "SerialComms.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
|
||||
CmdLine g_cmdLine;
|
||||
std::string g_sConfigFile; // INI file to use instead of Registry
|
||||
|
||||
bool g_bCapturePrintScreenKey = true;
|
||||
bool g_bRegisterFileTypes = true;
|
||||
bool g_bHookSystemKey = true;
|
||||
bool g_bHookAltTab = false;
|
||||
bool g_bHookAltGrControl = false;
|
||||
|
||||
static LPSTR GetCurrArg(LPSTR lpCmdLine)
|
||||
{
|
||||
if(*lpCmdLine == '\"')
|
||||
lpCmdLine++;
|
||||
|
||||
return lpCmdLine;
|
||||
}
|
||||
|
||||
static LPSTR GetNextArg(LPSTR lpCmdLine)
|
||||
{
|
||||
int bInQuotes = 0;
|
||||
|
||||
while(*lpCmdLine)
|
||||
{
|
||||
if(*lpCmdLine == '\"')
|
||||
{
|
||||
bInQuotes ^= 1;
|
||||
if(!bInQuotes)
|
||||
{
|
||||
*lpCmdLine++ = 0x00; // Assume end-quote is end of this arg
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if((*lpCmdLine == ' ') && !bInQuotes)
|
||||
{
|
||||
*lpCmdLine++ = 0x00;
|
||||
break;
|
||||
}
|
||||
|
||||
lpCmdLine++;
|
||||
}
|
||||
|
||||
return lpCmdLine;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool ProcessCmdLine(LPSTR lpCmdLine)
|
||||
{
|
||||
const std::string strCmdLine(lpCmdLine); // Keep a copy for log ouput
|
||||
std::string strUnsupported;
|
||||
|
||||
// If 1st param looks like an abs pathname then assume that an associated filetype has been double-clicked
|
||||
// NB. Handled by WM_DDE_INITIATE & WM_DDE_EXECUTE msgs
|
||||
if ((lpCmdLine[0] >= '\"' && lpCmdLine[1] >= 'A' && lpCmdLine[1] <= 'Z' && lpCmdLine[2] == ':') // always in quotes
|
||||
|| strncmp("\\\\?\\", lpCmdLine, 4) == 0)
|
||||
return true;
|
||||
|
||||
while (*lpCmdLine)
|
||||
{
|
||||
LPSTR lpNextArg = GetNextArg(lpCmdLine);
|
||||
|
||||
if (((strcmp(lpCmdLine, "-l") == 0) || (strcmp(lpCmdLine, "-log") == 0)) && (g_fh == NULL))
|
||||
{
|
||||
LogInit();
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-noreg") == 0)
|
||||
{
|
||||
g_bRegisterFileTypes = false;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-conf") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
char buf[MAX_PATH];
|
||||
DWORD res = GetFullPathName(lpCmdLine, MAX_PATH, buf, NULL);
|
||||
if (res == 0)
|
||||
LogFileOutput("Failed to open configuration file: %s\n", lpCmdLine);
|
||||
else
|
||||
g_sConfigFile = buf;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-d1") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.szImageName_drive[SLOT6][DRIVE_1] = lpCmdLine;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-d2") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.szImageName_drive[SLOT6][DRIVE_2] = lpCmdLine;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-h1") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.szImageName_harddisk[HARDDISK_1] = lpCmdLine;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-h2") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.szImageName_harddisk[HARDDISK_2] = lpCmdLine;
|
||||
}
|
||||
else if (lpCmdLine[0] == '-' && lpCmdLine[1] == 's' && lpCmdLine[2] >= '1' && lpCmdLine[2] <= '7')
|
||||
{
|
||||
const UINT slot = lpCmdLine[2] - '0';
|
||||
|
||||
if (lpCmdLine[3] == 0) // -s[1..7] <card>
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
if (strcmp(lpCmdLine, "empty") == 0)
|
||||
g_cmdLine.bSlotEmpty[slot] = true;
|
||||
if (strcmp(lpCmdLine, "diskii") == 0)
|
||||
g_cmdLine.slotInsert[slot] = CT_Disk2;
|
||||
}
|
||||
else if (lpCmdLine[3] == 'd' && (lpCmdLine[4] == '1' || lpCmdLine[4] == '2')) // -s[1..7]d[1|2] <dsk-image>
|
||||
{
|
||||
const UINT drive = lpCmdLine[4] == '1' ? DRIVE_1 : DRIVE_2;
|
||||
|
||||
if (slot != 5 && slot != 6)
|
||||
{
|
||||
LogFileOutput("Unsupported arg: %s\n", lpCmdLine);
|
||||
}
|
||||
else
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.szImageName_drive[slot][drive] = lpCmdLine;
|
||||
}
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-s7-empty-on-exit") == 0)
|
||||
{
|
||||
g_cmdLine.bSlot7EmptyOnExit = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogFileOutput("Unsupported arg: %s\n", lpCmdLine);
|
||||
}
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-load-state") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.szSnapshotName = lpCmdLine;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-f") == 0)
|
||||
{
|
||||
g_cmdLine.bSetFullScreen = true;
|
||||
}
|
||||
#define CMD_FS_HEIGHT "-fs-height="
|
||||
else if (strncmp(lpCmdLine, CMD_FS_HEIGHT, sizeof(CMD_FS_HEIGHT)-1) == 0)
|
||||
{
|
||||
g_cmdLine.bSetFullScreen = true; // Implied
|
||||
|
||||
LPSTR lpTmp = lpCmdLine + sizeof(CMD_FS_HEIGHT)-1;
|
||||
bool bRes = false;
|
||||
if (strcmp(lpTmp, "best") == 0)
|
||||
{
|
||||
bRes = GetBestDisplayResolutionForFullScreen(g_cmdLine.bestWidth, g_cmdLine.bestHeight);
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT userSpecifiedHeight = atoi(lpTmp);
|
||||
if (userSpecifiedHeight)
|
||||
bRes = GetBestDisplayResolutionForFullScreen(g_cmdLine.bestWidth, g_cmdLine.bestHeight, userSpecifiedHeight);
|
||||
else
|
||||
LogFileOutput("Invalid cmd-line parameter for -fs-height=x switch\n");
|
||||
}
|
||||
if (bRes)
|
||||
LogFileOutput("Best resolution for -fs-height=x switch: Width=%d, Height=%d\n", g_cmdLine.bestWidth, g_cmdLine.bestHeight);
|
||||
else
|
||||
LogFileOutput("Failed to set parameter for -fs-height=x switch\n");
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-no-di") == 0)
|
||||
{
|
||||
g_bDisableDirectInput = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-m") == 0)
|
||||
{
|
||||
g_bDisableDirectSound = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-no-mb") == 0)
|
||||
{
|
||||
g_bDisableDirectSoundMockingboard = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-memclear") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_nMemoryClearType = atoi(lpCmdLine);
|
||||
if (g_nMemoryClearType < 0)
|
||||
g_nMemoryClearType = 0;
|
||||
else
|
||||
if (g_nMemoryClearType >= NUM_MIP)
|
||||
g_nMemoryClearType = NUM_MIP - 1;
|
||||
}
|
||||
#ifdef RAMWORKS
|
||||
else if (strcmp(lpCmdLine, "-r") == 0) // RamWorks size [1..127]
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.uRamWorksExPages = atoi(lpCmdLine);
|
||||
if (g_cmdLine.uRamWorksExPages > kMaxExMemoryBanks)
|
||||
g_cmdLine.uRamWorksExPages = kMaxExMemoryBanks;
|
||||
else
|
||||
if (g_cmdLine.uRamWorksExPages < 1)
|
||||
g_cmdLine.uRamWorksExPages = 1;
|
||||
}
|
||||
#endif
|
||||
else if (strcmp(lpCmdLine, "-s0") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
|
||||
if (strcmp(lpCmdLine, "saturn") == 0 || strcmp(lpCmdLine, "saturn128") == 0)
|
||||
g_cmdLine.uSaturnBanks = Saturn128K::kMaxSaturnBanks;
|
||||
else if (strcmp(lpCmdLine, "saturn64") == 0)
|
||||
g_cmdLine.uSaturnBanks = Saturn128K::kMaxSaturnBanks/2;
|
||||
else if (strcmp(lpCmdLine, "languagecard") == 0 || strcmp(lpCmdLine, "lc") == 0)
|
||||
g_cmdLine.bSlot0LanguageCard = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-f8rom") == 0) // Use custom 2K ROM at [$F800..$FFFF]
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
|
||||
if (g_hCustomRomF8 != INVALID_HANDLE_VALUE) // Stop resource leak if -f8rom is specified twice!
|
||||
CloseHandle(g_hCustomRomF8);
|
||||
|
||||
g_hCustomRomF8 = CreateFile(lpCmdLine, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
|
||||
if ((g_hCustomRomF8 == INVALID_HANDLE_VALUE) || (GetFileSize(g_hCustomRomF8, NULL) != 0x800))
|
||||
g_bCustomRomF8Failed = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-rom") == 0) // Use custom 16K at [$C000..$FFFF] or 12K ROM at [$D000..$FFFF]
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
|
||||
if (g_hCustomRom != INVALID_HANDLE_VALUE) // Stop resource leak if -rom is specified twice!
|
||||
CloseHandle(g_hCustomRom);
|
||||
|
||||
g_hCustomRom = CreateFile(lpCmdLine, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
|
||||
if ((g_hCustomRom == INVALID_HANDLE_VALUE) || ((GetFileSize(g_hCustomRom, NULL) != 0x4000) && (GetFileSize(g_hCustomRom, NULL) != 0x3000)))
|
||||
g_bCustomRomFailed = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-videorom") == 0) // Use 2K (for II/II+). Use 4K,8K or 16K video ROM (for Enhanced //e)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
|
||||
if (!ReadVideoRomFile(lpCmdLine))
|
||||
{
|
||||
std::string msg = "Failed to load video rom (not found or not exactly 2/4/8/16KiB)\n";
|
||||
LogFileOutput("%s", msg.c_str());
|
||||
MessageBox(g_hFrameWindow, msg.c_str(), TEXT("AppleWin Error"), MB_OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetVideoRomRockerSwitch(true); // Use PAL char set
|
||||
}
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-printscreen") == 0) // Turn on display of the last filename print screen was saved to
|
||||
{
|
||||
g_bDisplayPrintScreenFileName = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-no-printscreen-key") == 0) // Don't try to capture PrintScreen key GH#469
|
||||
{
|
||||
g_bCapturePrintScreenKey = false;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-no-printscreen-dlg") == 0) // Turn off the PrintScreen warning message dialog (if PrintScreen key can't be grabbed)
|
||||
{
|
||||
g_bShowPrintScreenWarningDialog = false;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-no-hook-system-key") == 0) // Don't hook the System keys (eg. Left-ALT+ESC/SPACE/TAB) GH#556
|
||||
{
|
||||
g_bHookSystemKey = false;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-hook-alt-tab") == 0) // GH#556
|
||||
{
|
||||
g_bHookAltTab = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-hook-altgr-control") == 0) // GH#556
|
||||
{
|
||||
g_bHookAltGrControl = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-altgr-sends-wmchar") == 0) // GH#625
|
||||
{
|
||||
KeybSetAltGrSendsWM_CHAR(true);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-no-hook-alt") == 0) // GH#583
|
||||
{
|
||||
JoySetHookAltKeys(false);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-left-alt-control-buttons") == 0) // GH#743
|
||||
{
|
||||
JoySetButtonVirtualKey(0, VK_CONTROL);
|
||||
JoySetButtonVirtualKey(1, VK_MENU);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-right-alt-control-buttons") == 0) // GH#743
|
||||
{
|
||||
JoySetButtonVirtualKey(0, VK_MENU | KF_EXTENDED);
|
||||
JoySetButtonVirtualKey(1, VK_CONTROL | KF_EXTENDED);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-swap-buttons") == 0)
|
||||
{
|
||||
g_cmdLine.bSwapButtons0and1 = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-spkr-inc") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
const int nErrorInc = atoi(lpCmdLine);
|
||||
SoundCore_SetErrorInc( nErrorInc );
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-spkr-max") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
const int nErrorMax = atoi(lpCmdLine);
|
||||
SoundCore_SetErrorMax( nErrorMax );
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-use-real-printer") == 0) // Enable control in Advanced config to allow dumping to a real printer
|
||||
{
|
||||
g_bEnableDumpToRealPrinter = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-speech") == 0)
|
||||
{
|
||||
g_bEnableSpeech = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-multimon") == 0)
|
||||
{
|
||||
g_bMultiMon = true;
|
||||
}
|
||||
else if ((strcmp(lpCmdLine, "-dcd") == 0) || (strcmp(lpCmdLine, "-modem") == 0)) // GH#386
|
||||
{
|
||||
if (GetCardMgr().IsSSCInstalled())
|
||||
GetCardMgr().GetSSC()->SupportDCD(true);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-alt-enter=toggle-full-screen") == 0) // GH#556
|
||||
{
|
||||
SetAltEnterToggleFullScreen(true);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-alt-enter=open-apple-enter") == 0) // GH#556
|
||||
{
|
||||
SetAltEnterToggleFullScreen(false);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-video-mode=idealized") == 0) // GH#616
|
||||
{
|
||||
g_cmdLine.newVideoType = VT_COLOR_IDEALIZED;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-video-mode=rgb-videocard") == 0)
|
||||
{
|
||||
g_cmdLine.newVideoType = VT_COLOR_VIDEOCARD_RGB;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-video-mode=composite-monitor") == 0) // GH#763
|
||||
{
|
||||
g_cmdLine.newVideoType = VT_COLOR_MONITOR_NTSC;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-video-style=vertical-blend") == 0) // GH#616
|
||||
{
|
||||
g_cmdLine.newVideoStyleEnableMask = VS_COLOR_VERTICAL_BLEND;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-video-style=no-vertical-blend") == 0) // GH#616
|
||||
{
|
||||
g_cmdLine.newVideoStyleDisableMask = VS_COLOR_VERTICAL_BLEND;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-rgb-card-invert-bit7") == 0) // GH#633
|
||||
{
|
||||
RGB_SetInvertBit7(true);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-screenshot-and-exit") == 0) // GH#616: For testing - Use in combination with -load-state
|
||||
{
|
||||
g_cmdLine.szScreenshotFilename = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-clock-multiplier") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.clockMultiplier = atof(lpCmdLine);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-model") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
|
||||
if (strcmp(lpCmdLine, "apple2") == 0)
|
||||
g_cmdLine.model = A2TYPE_APPLE2;
|
||||
else if (strcmp(lpCmdLine, "apple2p") == 0)
|
||||
g_cmdLine.model = A2TYPE_APPLE2PLUS;
|
||||
else if (strcmp(lpCmdLine, "apple2jp") == 0)
|
||||
g_cmdLine.model = A2TYPE_APPLE2JPLUS;
|
||||
else if (strcmp(lpCmdLine, "apple2e") == 0)
|
||||
g_cmdLine.model = A2TYPE_APPLE2E;
|
||||
else if (strcmp(lpCmdLine, "apple2ee") == 0)
|
||||
g_cmdLine.model = A2TYPE_APPLE2EENHANCED;
|
||||
else
|
||||
LogFileOutput("-model: unsupported type: %s\n", lpCmdLine);
|
||||
}
|
||||
else if (_stricmp(lpCmdLine, "-50hz") == 0) // (case-insensitive)
|
||||
{
|
||||
g_cmdLine.newVideoRefreshRate = VR_50HZ;
|
||||
}
|
||||
else if (_stricmp(lpCmdLine, "-60hz") == 0) // (case-insensitive)
|
||||
{
|
||||
g_cmdLine.newVideoRefreshRate = VR_60HZ;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-rgb-card-type") == 0)
|
||||
{
|
||||
// RGB video card valid types are: "apple", "sl7", "eve", "feline"
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
|
||||
if (strcmp(lpCmdLine, "apple") == 0) // Just an alias for SL7
|
||||
g_cmdLine.rgbCard = RGB_Videocard_e::Apple;
|
||||
else if (strcmp(lpCmdLine, "sl7") == 0)
|
||||
g_cmdLine.rgbCard = RGB_Videocard_e::Video7_SL7;
|
||||
else if (strcmp(lpCmdLine, "eve") == 0)
|
||||
g_cmdLine.rgbCard = RGB_Videocard_e::LeChatMauve_EVE;
|
||||
else if (strcmp(lpCmdLine, "feline") == 0)
|
||||
g_cmdLine.rgbCard = RGB_Videocard_e::LeChatMauve_Feline;
|
||||
else
|
||||
LogFileOutput("-rgb-card-type: unsupported type: %s\n", lpCmdLine);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-rgb-card-foreground") == 0)
|
||||
{
|
||||
// Default hardware-defined Text foreground color, for Video-7's RGB-SL7 card only
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.rgbCardForegroundColor = atoi(lpCmdLine);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-rgb-card-background") == 0)
|
||||
{
|
||||
// Default hardware-defined Text background color, for Video-7's RGB-SL7 card only
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.rgbCardBackgroundColor = atoi(lpCmdLine);
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-power-on") == 0)
|
||||
{
|
||||
g_cmdLine.bBoot = true;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-current-dir") == 0)
|
||||
{
|
||||
lpCmdLine = GetCurrArg(lpNextArg);
|
||||
lpNextArg = GetNextArg(lpNextArg);
|
||||
g_cmdLine.strCurrentDir = lpCmdLine;
|
||||
}
|
||||
else if (strcmp(lpCmdLine, "-no-nsc") == 0)
|
||||
{
|
||||
g_cmdLine.bRemoveNoSlotClock = true;
|
||||
}
|
||||
else // unsupported
|
||||
{
|
||||
LogFileOutput("Unsupported arg: %s\n", lpCmdLine);
|
||||
strUnsupported += lpCmdLine;
|
||||
strUnsupported += "\n";
|
||||
}
|
||||
|
||||
lpCmdLine = lpNextArg;
|
||||
}
|
||||
|
||||
LogFileOutput("CmdLine: %s\n", strCmdLine.c_str());
|
||||
|
||||
bool ok = true;
|
||||
|
||||
if (!strUnsupported.empty())
|
||||
{
|
||||
std::string msg("Unsupported commands:\n\n");
|
||||
msg += strUnsupported;
|
||||
msg += "\n";
|
||||
msg += "Continue running AppleWin?";
|
||||
int res = MessageBox(GetDesktopWindow(), // NB. g_hFrameWindow is not yet valid
|
||||
msg.c_str(),
|
||||
"AppleWin Command Line",
|
||||
MB_ICONSTOP | MB_SETFOREGROUND | MB_YESNO);
|
||||
ok = (res != IDNO);
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
88
source/CmdLine.h
Normal file
88
source/CmdLine.h
Normal file
@ -0,0 +1,88 @@
|
||||
#pragma once
|
||||
|
||||
#include "RgbMonitor.h"
|
||||
#include "Harddisk.h"
|
||||
#include "Disk.h"
|
||||
#include "Video.h"
|
||||
#include "Common.h"
|
||||
#include "Card.h"
|
||||
|
||||
|
||||
struct CmdLine
|
||||
{
|
||||
CmdLine()
|
||||
{
|
||||
bShutdown = false;
|
||||
bSetFullScreen = false;
|
||||
bBoot = false;
|
||||
bChangedDisplayResolution = false;
|
||||
bSlot0LanguageCard = false;
|
||||
bSlot7EmptyOnExit = false;
|
||||
bSwapButtons0and1 = false;
|
||||
bRemoveNoSlotClock = false;
|
||||
bestWidth = 0;
|
||||
bestHeight = 0;
|
||||
szImageName_harddisk[HARDDISK_1] = NULL;
|
||||
szImageName_harddisk[HARDDISK_2] = NULL;
|
||||
szSnapshotName = NULL;
|
||||
szScreenshotFilename = NULL;
|
||||
uRamWorksExPages = 0;
|
||||
uSaturnBanks = 0;
|
||||
newVideoType = -1;
|
||||
newVideoStyleEnableMask = 0;
|
||||
newVideoStyleDisableMask = 0;
|
||||
newVideoRefreshRate = VR_NONE;
|
||||
clockMultiplier = 0.0; // 0 => not set from cmd-line
|
||||
model = A2TYPE_MAX;
|
||||
rgbCard = RGB_Videocard_e::Apple;
|
||||
rgbCardForegroundColor = 15;
|
||||
rgbCardBackgroundColor = 0;
|
||||
|
||||
for (UINT i = 0; i < NUM_SLOTS; i++)
|
||||
{
|
||||
bSlotEmpty[i] = false;
|
||||
slotInsert[i] = CT_Empty;
|
||||
szImageName_drive[i][DRIVE_1] = NULL;
|
||||
szImageName_drive[i][DRIVE_2] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool bShutdown;
|
||||
bool bSetFullScreen;
|
||||
bool bBoot;
|
||||
bool bChangedDisplayResolution;
|
||||
bool bSlot0LanguageCard;
|
||||
bool bSlotEmpty[NUM_SLOTS];
|
||||
bool bSlot7EmptyOnExit;
|
||||
bool bSwapButtons0and1;
|
||||
bool bRemoveNoSlotClock;
|
||||
SS_CARDTYPE slotInsert[NUM_SLOTS];
|
||||
UINT bestWidth;
|
||||
UINT bestHeight;
|
||||
LPSTR szImageName_drive[NUM_SLOTS][NUM_DRIVES];
|
||||
LPSTR szImageName_harddisk[NUM_HARDDISKS];
|
||||
LPSTR szSnapshotName;
|
||||
LPSTR szScreenshotFilename;
|
||||
UINT uRamWorksExPages;
|
||||
UINT uSaturnBanks;
|
||||
int newVideoType;
|
||||
int newVideoStyleEnableMask;
|
||||
int newVideoStyleDisableMask;
|
||||
VideoRefreshRate_e newVideoRefreshRate;
|
||||
double clockMultiplier;
|
||||
eApple2Type model;
|
||||
RGB_Videocard_e rgbCard;
|
||||
int rgbCardForegroundColor;
|
||||
int rgbCardBackgroundColor;
|
||||
std::string strCurrentDir;
|
||||
};
|
||||
|
||||
bool ProcessCmdLine(LPSTR lpCmdLine);
|
||||
|
||||
extern std::string g_sConfigFile; // INI file to use instead of Registry
|
||||
extern bool g_bCapturePrintScreenKey;
|
||||
extern bool g_bRegisterFileTypes;
|
||||
extern bool g_bHookSystemKey;
|
||||
extern bool g_bHookAltTab;
|
||||
extern bool g_bHookAltGrControl;
|
||||
extern CmdLine g_cmdLine;
|
@ -24,7 +24,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "About.h"
|
||||
#include "../AppleWin.h"
|
||||
#include "../Core.h"
|
||||
#include "../Windows/AppleWin.h"
|
||||
#include "../Windows/WinFrame.h"
|
||||
#include "../resource/resource.h"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Core.h"
|
||||
#include "../CardManager.h"
|
||||
#include "../CPU.h"
|
||||
#include "../DiskImage.h" // Disk_Status_e
|
||||
|
@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "PageConfig.h"
|
||||
#include "PropertySheetHelper.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Windows/AppleWin.h"
|
||||
#include "../Windows/WinFrame.h"
|
||||
#include "../Registry.h"
|
||||
#include "../SerialComms.h"
|
||||
|
@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "PageDisk.h"
|
||||
#include "PropertySheetHelper.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Windows/AppleWin.h"
|
||||
#include "../CardManager.h"
|
||||
#include "../Disk.h" // Drive_e, Disk_Status_e
|
||||
#include "../Windows/WinFrame.h"
|
||||
|
@ -31,7 +31,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#include "PropertySheet.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Windows/AppleWin.h"
|
||||
#include "../Windows/WinFrame.h"
|
||||
#include "../resource/resource.h"
|
||||
|
||||
|
@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "PropertySheetHelper.h"
|
||||
#include "IPropertySheet.h"
|
||||
|
||||
#include "../AppleWin.h" // g_nAppMode, g_uScrollLockToggle, sg_PropertySheet
|
||||
#include "../Windows/AppleWin.h" // g_nAppMode, g_uScrollLockToggle, sg_PropertySheet
|
||||
#include "../CardManager.h"
|
||||
#include "../Disk.h"
|
||||
#include "../Windows/WinFrame.h"
|
||||
|
300
source/Core.cpp
Normal file
300
source/Core.cpp
Normal file
@ -0,0 +1,300 @@
|
||||
/*
|
||||
AppleWin : An Apple //e emulator for Windows
|
||||
|
||||
Copyright (C) 1994-1996, Michael O'Brien
|
||||
Copyright (C) 1999-2001, Oliver Schmidt
|
||||
Copyright (C) 2002-2005, Tom Charlesworth
|
||||
Copyright (C) 2006-2014, Tom Charlesworth, Michael Pohoreski
|
||||
|
||||
AppleWin is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
AppleWin is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with AppleWin; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* Description: main
|
||||
*
|
||||
* Author: Various
|
||||
*/
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Core.h"
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "Video.h"
|
||||
#include "Log.h"
|
||||
#include "Memory.h"
|
||||
#include "Mockingboard.h"
|
||||
#include "Speaker.h"
|
||||
#include "Registry.h"
|
||||
#include "SynchronousEventManager.h"
|
||||
#include "Configuration/PropertySheet.h"
|
||||
|
||||
#ifdef USE_SPEECH_API
|
||||
#include "Speech.h"
|
||||
#endif
|
||||
|
||||
static const UINT VERSIONSTRING_SIZE = 16;
|
||||
static UINT16 g_OldAppleWinVersion[4] = {0};
|
||||
UINT16 g_AppleWinVersion[4] = { 0 };
|
||||
TCHAR VERSIONSTRING[VERSIONSTRING_SIZE] = "xx.yy.zz.ww";
|
||||
|
||||
std::string g_pAppTitle;
|
||||
|
||||
eApple2Type g_Apple2Type = A2TYPE_APPLE2EENHANCED;
|
||||
|
||||
bool g_bFullSpeed = false;
|
||||
|
||||
//=================================================
|
||||
|
||||
AppMode_e g_nAppMode = MODE_LOGO;
|
||||
|
||||
std::string g_sStartDir; // NB. AppleWin.exe maybe relative to this! (GH#663)
|
||||
std::string g_sProgramDir; // Directory of where AppleWin executable resides
|
||||
std::string g_sCurrentDir; // Also Starting Dir. Debugger uses this when load/save
|
||||
|
||||
bool g_bRestart = false;
|
||||
|
||||
bool g_bDisableDirectInput = false;
|
||||
bool g_bDisableDirectSound = false;
|
||||
bool g_bDisableDirectSoundMockingboard = false;
|
||||
|
||||
DWORD g_dwSpeed = SPEED_NORMAL; // Affected by Config dialog's speed slider bar
|
||||
double g_fCurrentCLK6502 = CLK_6502_NTSC; // Affected by Config dialog's speed slider bar
|
||||
static double g_fMHz = 1.0; // Affected by Config dialog's speed slider bar
|
||||
|
||||
int g_nCpuCyclesFeedback = 0;
|
||||
DWORD g_dwCyclesThisFrame = 0;
|
||||
|
||||
int g_nMemoryClearType = MIP_FF_FF_00_00; // Note: -1 = random MIP in Memory.cpp MemReset()
|
||||
|
||||
SynchronousEventManager g_SynchronousEventMgr;
|
||||
|
||||
IPropertySheet& sg_PropertySheet = *new CPropertySheet;
|
||||
|
||||
HANDLE g_hCustomRomF8 = INVALID_HANDLE_VALUE; // Cmd-line specified custom F8 ROM at $F800..$FFFF
|
||||
bool g_bCustomRomF8Failed = false; // Set if custom F8 ROM file failed
|
||||
HANDLE g_hCustomRom = INVALID_HANDLE_VALUE; // Cmd-line specified custom ROM at $C000..$FFFF(16KiB) or $D000..$FFFF(12KiB)
|
||||
bool g_bCustomRomFailed = false; // Set if custom ROM file failed
|
||||
|
||||
bool g_bEnableSpeech = false;
|
||||
#ifdef USE_SPEECH_API
|
||||
CSpeech g_Speech;
|
||||
#endif
|
||||
|
||||
//===========================================================================
|
||||
|
||||
#ifdef LOG_PERF_TIMINGS
|
||||
static UINT64 g_timeTotal = 0;
|
||||
UINT64 g_timeCpu = 0;
|
||||
UINT64 g_timeVideo = 0; // part of timeCpu
|
||||
UINT64 g_timeMB_Timer = 0; // part of timeCpu
|
||||
UINT64 g_timeMB_NoTimer = 0;
|
||||
UINT64 g_timeSpeaker = 0;
|
||||
static UINT64 g_timeVideoRefresh = 0;
|
||||
|
||||
void LogPerfTimings(void)
|
||||
{
|
||||
if (g_timeTotal)
|
||||
{
|
||||
UINT64 cpu = g_timeCpu - g_timeVideo - g_timeMB_Timer;
|
||||
UINT64 video = g_timeVideo + g_timeVideoRefresh;
|
||||
UINT64 spkr = g_timeSpeaker;
|
||||
UINT64 mb = g_timeMB_Timer + g_timeMB_NoTimer;
|
||||
UINT64 audio = spkr + mb;
|
||||
UINT64 other = g_timeTotal - g_timeCpu - g_timeSpeaker - g_timeMB_NoTimer - g_timeVideoRefresh;
|
||||
|
||||
LogOutput("Perf breakdown:\n");
|
||||
LogOutput(". CPU %% = %6.2f\n", (double)cpu / (double)g_timeTotal * 100.0);
|
||||
LogOutput(". Video %% = %6.2f\n", (double)video / (double)g_timeTotal * 100.0);
|
||||
LogOutput("... NTSC %% = %6.2f\n", (double)g_timeVideo / (double)g_timeTotal * 100.0);
|
||||
LogOutput("... refresh %% = %6.2f\n", (double)g_timeVideoRefresh / (double)g_timeTotal * 100.0);
|
||||
LogOutput(". Audio %% = %6.2f\n", (double)audio / (double)g_timeTotal * 100.0);
|
||||
LogOutput("... Speaker %% = %6.2f\n", (double)spkr / (double)g_timeTotal * 100.0);
|
||||
LogOutput("... MB %% = %6.2f\n", (double)mb / (double)g_timeTotal * 100.0);
|
||||
LogOutput(". Other %% = %6.2f\n", (double)other / (double)g_timeTotal * 100.0);
|
||||
LogOutput(". TOTAL %% = %6.2f\n", (double)(cpu+video+audio+other) / (double)g_timeTotal * 100.0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//===========================================================================
|
||||
|
||||
static DWORD dwLogKeyReadTickStart;
|
||||
static bool bLogKeyReadDone = false;
|
||||
|
||||
void LogFileTimeUntilFirstKeyReadReset(void)
|
||||
{
|
||||
#ifdef LOG_PERF_TIMINGS
|
||||
LogPerfTimings();
|
||||
#endif
|
||||
|
||||
if (!g_fh)
|
||||
return;
|
||||
|
||||
dwLogKeyReadTickStart = GetTickCount();
|
||||
|
||||
bLogKeyReadDone = false;
|
||||
}
|
||||
|
||||
// Log the time from emulation restart/reboot until the first key read: BIT $C000
|
||||
// . AZTEC.DSK (DOS 3.3) does prior LDY $C000 reads, but the BIT $C000 is at the "Press any key" message
|
||||
// . Phasor1.dsk / ProDOS 1.1.1: PC=E797: B1 50: LDA ($50),Y / "Select an Option:" message
|
||||
// . Rescue Raiders v1.3,v1.5: PC=895: LDA $C000 / boot to intro
|
||||
void LogFileTimeUntilFirstKeyRead(void)
|
||||
{
|
||||
if (!g_fh || bLogKeyReadDone)
|
||||
return;
|
||||
|
||||
if ( (mem[regs.pc-3] != 0x2C) // AZTEC: bit $c000
|
||||
&& !((regs.pc-2) == 0xE797 && mem[regs.pc-2] == 0xB1 && mem[regs.pc-1] == 0x50) // Phasor1: lda ($50),y
|
||||
&& !((regs.pc-3) == 0x0895 && mem[regs.pc-3] == 0xAD) // Rescue Raiders v1.3,v1.5: lda $c000
|
||||
)
|
||||
return;
|
||||
|
||||
DWORD dwTime = GetTickCount() - dwLogKeyReadTickStart;
|
||||
|
||||
LogFileOutput("Time from emulation reboot until first $C000 access: %d msec\n", dwTime);
|
||||
|
||||
bLogKeyReadDone = true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
eApple2Type GetApple2Type(void)
|
||||
{
|
||||
return g_Apple2Type;
|
||||
}
|
||||
|
||||
void SetApple2Type(eApple2Type type)
|
||||
{
|
||||
g_Apple2Type = type;
|
||||
SetMainCpuDefault(type);
|
||||
}
|
||||
|
||||
const UINT16* GetOldAppleWinVersion(void)
|
||||
{
|
||||
return g_OldAppleWinVersion;
|
||||
}
|
||||
|
||||
CardManager& GetCardMgr(void)
|
||||
{
|
||||
static CardManager g_CardMgr; // singleton
|
||||
return g_CardMgr;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
double Get6502BaseClock(void)
|
||||
{
|
||||
return (GetVideoRefreshRate() == VR_50HZ) ? CLK_6502_PAL : CLK_6502_NTSC;
|
||||
}
|
||||
|
||||
void SetCurrentCLK6502(void)
|
||||
{
|
||||
static DWORD dwPrevSpeed = (DWORD) -1;
|
||||
static VideoRefreshRate_e prevVideoRefreshRate = VR_NONE;
|
||||
|
||||
if (dwPrevSpeed == g_dwSpeed && GetVideoRefreshRate() == prevVideoRefreshRate)
|
||||
return;
|
||||
|
||||
dwPrevSpeed = g_dwSpeed;
|
||||
prevVideoRefreshRate = GetVideoRefreshRate();
|
||||
|
||||
// SPEED_MIN = 0 = 0.50 MHz
|
||||
// SPEED_NORMAL = 10 = 1.00 MHz
|
||||
// 20 = 2.00 MHz
|
||||
// SPEED_MAX-1 = 39 = 3.90 MHz
|
||||
// SPEED_MAX = 40 = ???? MHz (run full-speed, /g_fCurrentCLK6502/ is ignored)
|
||||
|
||||
if(g_dwSpeed < SPEED_NORMAL)
|
||||
g_fMHz = 0.5 + (double)g_dwSpeed * 0.05;
|
||||
else
|
||||
g_fMHz = (double)g_dwSpeed / 10.0;
|
||||
|
||||
g_fCurrentCLK6502 = Get6502BaseClock() * g_fMHz;
|
||||
|
||||
//
|
||||
// Now re-init modules that are dependent on /g_fCurrentCLK6502/
|
||||
//
|
||||
|
||||
SpkrReinitialize();
|
||||
MB_Reinitialize();
|
||||
}
|
||||
|
||||
void UseClockMultiplier(double clockMultiplier)
|
||||
{
|
||||
if (clockMultiplier == 0.0)
|
||||
return;
|
||||
|
||||
if (clockMultiplier < 1.0)
|
||||
{
|
||||
if (clockMultiplier < 0.5)
|
||||
clockMultiplier = 0.5;
|
||||
g_dwSpeed = (ULONG)((clockMultiplier - 0.5) * 20); // [0.5..0.9] -> [0..9]
|
||||
}
|
||||
else
|
||||
{
|
||||
g_dwSpeed = (ULONG)(clockMultiplier * 10);
|
||||
if (g_dwSpeed >= SPEED_MAX)
|
||||
g_dwSpeed = SPEED_MAX - 1;
|
||||
}
|
||||
|
||||
SetCurrentCLK6502();
|
||||
}
|
||||
|
||||
void SetAppleWinVersion(UINT16 major, UINT16 minor, UINT16 fix, UINT16 fix_minor)
|
||||
{
|
||||
g_AppleWinVersion[0] = major;
|
||||
g_AppleWinVersion[1] = minor;
|
||||
g_AppleWinVersion[2] = fix;
|
||||
g_AppleWinVersion[3] = fix_minor;
|
||||
StringCbPrintf(VERSIONSTRING, VERSIONSTRING_SIZE, "%d.%d.%d.%d", major, minor, fix, fix_minor);
|
||||
}
|
||||
|
||||
bool CheckOldAppleWinVersion(void)
|
||||
{
|
||||
TCHAR szOldAppleWinVersion[VERSIONSTRING_SIZE + 1];
|
||||
RegLoadString(TEXT(REG_CONFIG), TEXT(REGVALUE_VERSION), 1, szOldAppleWinVersion, VERSIONSTRING_SIZE, TEXT(""));
|
||||
const bool bShowAboutDlg = strcmp(szOldAppleWinVersion, VERSIONSTRING) != 0;
|
||||
|
||||
// version: xx.yy.zz.ww
|
||||
char* p0 = szOldAppleWinVersion;
|
||||
int len = strlen(szOldAppleWinVersion);
|
||||
szOldAppleWinVersion[len] = '.'; // append a null terminator
|
||||
szOldAppleWinVersion[len + 1] = '\0';
|
||||
for (UINT i = 0; i < 4; i++)
|
||||
{
|
||||
char* p1 = strstr(p0, ".");
|
||||
if (!p1)
|
||||
break;
|
||||
*p1 = 0;
|
||||
g_OldAppleWinVersion[i] = atoi(p0);
|
||||
p0 = p1 + 1;
|
||||
}
|
||||
|
||||
return bShowAboutDlg;
|
||||
}
|
||||
|
||||
bool SetCurrentImageDir(const std::string& pszImageDir)
|
||||
{
|
||||
g_sCurrentDir = pszImageDir;
|
||||
|
||||
if (!g_sCurrentDir.empty() && *g_sCurrentDir.rbegin() != '\\')
|
||||
g_sCurrentDir += '\\';
|
||||
|
||||
if (SetCurrentDirectory(g_sCurrentDir.c_str()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
@ -1,17 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "Card.h"
|
||||
#include "SaveState_Structs_common.h"
|
||||
#include "Common.h"
|
||||
|
||||
void LogFileTimeUntilFirstKeyReadReset(void);
|
||||
void LogFileTimeUntilFirstKeyRead(void);
|
||||
|
||||
bool SetCurrentImageDir(const std::string & pszImageDir);
|
||||
|
||||
extern const UINT16* GetOldAppleWinVersion(void);
|
||||
extern TCHAR VERSIONSTRING[]; // Constructed in WinMain()
|
||||
|
||||
void SetAppleWinVersion(UINT16 major, UINT16 minor, UINT16 fix, UINT16 fix_minor);
|
||||
bool CheckOldAppleWinVersion(void);
|
||||
|
||||
extern std::string g_pAppTitle;
|
||||
|
||||
extern eApple2Type g_Apple2Type;
|
||||
@ -21,25 +21,25 @@ void SetApple2Type(eApple2Type type);
|
||||
double Get6502BaseClock(void);
|
||||
void SetCurrentCLK6502(void);
|
||||
|
||||
void SingleStep(bool bReinit);
|
||||
// set g_dwSpeed =
|
||||
// | clockMultiplier == 0 => unchanged
|
||||
// | clockMultiplier < 1 => (max(0.5, clockMultiplier) - 0.5) * 20
|
||||
// | else => min(SPEED_MAX - 1, clockMultiplier * 10)
|
||||
void UseClockMultiplier(double clockMultiplier);
|
||||
|
||||
extern bool g_bFullSpeed;
|
||||
|
||||
//===========================================
|
||||
|
||||
// Win32
|
||||
extern HINSTANCE g_hInstance;
|
||||
|
||||
extern AppMode_e g_nAppMode;
|
||||
bool GetLoadedSaveStateFlag(void);
|
||||
void SetLoadedSaveStateFlag(const bool bFlag);
|
||||
bool GetHookAltGrControl(void);
|
||||
|
||||
extern std::string g_sStartDir;
|
||||
extern std::string g_sProgramDir;
|
||||
extern std::string g_sCurrentDir;
|
||||
|
||||
bool SetCurrentImageDir(const std::string& pszImageDir);
|
||||
|
||||
extern bool g_bRestart;
|
||||
extern bool g_bRestartFullScreen;
|
||||
|
||||
extern DWORD g_dwSpeed;
|
||||
extern double g_fCurrentCLK6502;
|
||||
@ -47,25 +47,27 @@ extern double g_fCurrentCLK6502;
|
||||
extern int g_nCpuCyclesFeedback;
|
||||
extern DWORD g_dwCyclesThisFrame;
|
||||
|
||||
extern bool g_bDisableDirectInput; // Cmd line switch: don't init DI (so no DIMouse support)
|
||||
extern bool g_bDisableDirectSound; // Cmd line switch: don't init DS (so no MB/Speaker support)
|
||||
extern bool g_bDisableDirectSoundMockingboard; // Cmd line switch: don't init MB support
|
||||
extern int g_nMemoryClearType; // Cmd line switch: use specific MIP (Memory Initialization Pattern)
|
||||
|
||||
extern class CardManager& GetCardMgr(void);
|
||||
extern class SynchronousEventManager g_SynchronousEventMgr;
|
||||
|
||||
extern HANDLE g_hCustomRomF8; // INVALID_HANDLE_VALUE if no custom F8 rom
|
||||
extern HANDLE g_hCustomRom; // INVALID_HANDLE_VALUE if no custom rom
|
||||
extern HANDLE g_hCustomRomF8; // INVALID_HANDLE_VALUE if no custom F8 rom
|
||||
extern bool g_bCustomRomF8Failed; // Set if custom F8 ROM file failed
|
||||
extern HANDLE g_hCustomRom; // INVALID_HANDLE_VALUE if no custom rom
|
||||
extern bool g_bCustomRomFailed; // Set if custom ROM file failed
|
||||
|
||||
extern bool g_bEnableSpeech;
|
||||
#ifdef USE_SPEECH_API
|
||||
class CSpeech;
|
||||
extern CSpeech g_Speech;
|
||||
#endif
|
||||
|
||||
extern __interface IPropertySheet& sg_PropertySheet;
|
||||
extern bool g_bDisableDirectInput; // Cmd line switch: don't init DI (so no DIMouse support)
|
||||
extern bool g_bDisableDirectSound; // Cmd line switch: don't init DS (so no MB/Speaker support)
|
||||
extern bool g_bDisableDirectSoundMockingboard; // Cmd line switch: don't init MB support
|
||||
|
||||
//
|
||||
extern __interface IPropertySheet& sg_PropertySheet;
|
||||
|
||||
//#define LOG_PERF_TIMINGS
|
||||
#ifdef LOG_PERF_TIMINGS
|
@ -34,7 +34,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "Debug.h"
|
||||
#include "DebugDefs.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Windows/AppleWin.h"
|
||||
#include "../Core.h"
|
||||
#include "../CardManager.h"
|
||||
#include "../CPU.h"
|
||||
#include "../Disk.h"
|
||||
|
@ -32,6 +32,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#include "../CPU.h"
|
||||
#include "../Memory.h"
|
||||
#include "../Windows/WinFrame.h"
|
||||
|
||||
#define DEBUG_ASSEMBLER 0
|
||||
|
||||
|
@ -32,7 +32,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "Debug.h"
|
||||
#include "Debugger_Display.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Windows/AppleWin.h"
|
||||
#include "../Core.h"
|
||||
#include "../CPU.h"
|
||||
#include "../Frame.h"
|
||||
#include "../Windows/WinFrame.h"
|
||||
|
@ -32,7 +32,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#include "Debug.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Core.h"
|
||||
|
||||
|
||||
#define DEBUG_COLOR_CONSOLE 0
|
||||
|
@ -30,7 +30,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#include "Debug.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../Windows/AppleWin.h"
|
||||
#include "../Core.h"
|
||||
|
||||
// 2.6.2.13 Added: Can now enable/disable selected symbol table(s) !
|
||||
// Allow the user to disable/enable symbol tables
|
||||
|
@ -34,7 +34,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#include "SaveState_Structs_v1.h"
|
||||
|
||||
#include "AppleWin.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CPU.h"
|
||||
#include "DiskImage.h"
|
||||
#include "Log.h"
|
||||
|
@ -30,7 +30,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Disk2CardManager.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CardManager.h"
|
||||
#include "Disk.h"
|
||||
|
||||
|
@ -28,6 +28,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include "Core.h"
|
||||
#include "DiskImageHelper.h"
|
||||
|
||||
#include "Common.h"
|
||||
@ -2199,8 +2200,6 @@ UINT CHardDiskImageHelper::GetMinDetectSize(const UINT uImageSize, bool* pTempDe
|
||||
|
||||
#define ASSERT_OFFSET(x, offset) _ASSERT( ((BYTE*)&pWOZ->x - (BYTE*)pWOZ) == offset )
|
||||
|
||||
extern TCHAR VERSIONSTRING[]; // AppleWin.h
|
||||
|
||||
BYTE* CWOZHelper::CreateEmptyDisk(DWORD& size)
|
||||
{
|
||||
WOZEmptyImage525* pWOZ = new WOZEmptyImage525;
|
||||
|
@ -29,7 +29,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Harddisk.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "DiskImage.h" // ImageError_e, Disk_Status_e
|
||||
|
@ -40,7 +40,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Joystick.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "CPU.h"
|
||||
#include "Memory.h"
|
||||
#include "YamlHelper.h"
|
||||
|
@ -29,7 +29,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Keyboard.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
#include "Pravets.h"
|
||||
#include "Tape.h"
|
||||
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "LanguageCard.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CPU.h" // GH#700
|
||||
#include "Log.h"
|
||||
#include "Memory.h"
|
||||
|
@ -31,7 +31,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Memory.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "Disk.h"
|
||||
|
@ -80,7 +80,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "Mockingboard.h"
|
||||
#include "SaveState_Structs_v1.h"
|
||||
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "Log.h"
|
||||
|
@ -46,7 +46,7 @@ Etc.
|
||||
#include "SaveState_Structs_common.h"
|
||||
#include "Common.h"
|
||||
|
||||
#include "AppleWin.h" // g_SynchronousEventMgr
|
||||
#include "Core.h" // g_SynchronousEventMgr
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "Windows/WinFrame.h" // FrameSetCursorPosByMousePos()
|
||||
|
@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
// Includes
|
||||
#include "StdAfx.h"
|
||||
#include "NTSC.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CPU.h" // CpuGetCyclesThisVideoFrame()
|
||||
#include "Frame.h"
|
||||
#include "Memory.h" // MemGetMainPtr(), MemGetAuxPtr(), MemGetAnnunciator()
|
||||
|
@ -21,7 +21,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include "NTSC_CharSet.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "../resource/resource.h"
|
||||
#include "Video.h"
|
||||
|
||||
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "ParallelPrinter.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "Memory.h"
|
||||
#include "Registry.h"
|
||||
#include "YamlHelper.h"
|
||||
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Pravets.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
#include "Keyboard.h"
|
||||
#include "Tape.h"
|
||||
|
@ -29,8 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Registry.h"
|
||||
|
||||
extern std::string g_sConfigFile;
|
||||
#include "CmdLine.h"
|
||||
|
||||
namespace _ini {
|
||||
//===========================================================================
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "SAM.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Memory.h"
|
||||
#include "Speaker.h"
|
||||
|
||||
|
@ -31,7 +31,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "SaveState.h"
|
||||
#include "YamlHelper.h"
|
||||
|
||||
#include "AppleWin.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "Debug.h"
|
||||
|
@ -36,7 +36,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "SerialComms.h"
|
||||
#include "AppleWin.h"
|
||||
#include "CPU.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
#include "Log.h"
|
||||
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "SoundCore.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
#include "Log.h"
|
||||
#include "Speaker.h"
|
||||
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Speaker.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CPU.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
#include "Log.h"
|
||||
|
@ -42,7 +42,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "SynchronousEventManager.h"
|
||||
#include "AppleWin.h"
|
||||
|
||||
void SynchronousEventManager::Insert(SyncEvent* pNewEvent)
|
||||
{
|
||||
|
@ -32,7 +32,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Tape.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Keyboard.h"
|
||||
#include "Memory.h"
|
||||
#include "Pravets.h"
|
||||
|
455
source/Utilities.cpp
Normal file
455
source/Utilities.cpp
Normal file
@ -0,0 +1,455 @@
|
||||
/*AppleWin : An Apple //e emulator for Windows
|
||||
|
||||
Copyright (C) 1994-1996, Michael O'Brien
|
||||
Copyright (C) 1999-2001, Oliver Schmidt
|
||||
Copyright (C) 2002-2005, Tom Charlesworth
|
||||
Copyright (C) 2006-2014, Tom Charlesworth, Michael Pohoreski
|
||||
|
||||
AppleWin is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
AppleWin is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with AppleWin; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* Description: main
|
||||
*
|
||||
* Author: Various
|
||||
*/
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Utilities.h"
|
||||
#include "Core.h"
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "Video.h"
|
||||
#include "Joystick.h"
|
||||
#include "Log.h"
|
||||
#include "Mockingboard.h"
|
||||
#include "MouseInterface.h"
|
||||
#include "ParallelPrinter.h"
|
||||
#include "Registry.h"
|
||||
#include "Riff.h"
|
||||
#include "SaveState.h"
|
||||
#include "SerialComms.h"
|
||||
#include "Speaker.h"
|
||||
#include "Mockingboard.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
|
||||
#include "Configuration/PropertySheet.h"
|
||||
#include "Tfe/Tfe.h"
|
||||
|
||||
// Backwards compatibility with AppleWin <1.24.0
|
||||
static void LoadConfigOldJoystick_v1(const UINT uJoyNum)
|
||||
{
|
||||
DWORD dwOldJoyType;
|
||||
if (!REGLOAD(TEXT(uJoyNum==0 ? REGVALUE_OLD_JOYSTICK0_EMU_TYPE1 : REGVALUE_OLD_JOYSTICK1_EMU_TYPE1), &dwOldJoyType))
|
||||
return; // EG. Old AppleWin never installed
|
||||
|
||||
UINT uNewJoyType;
|
||||
switch (dwOldJoyType)
|
||||
{
|
||||
case 0: // Disabled
|
||||
default:
|
||||
uNewJoyType = J0C_DISABLED;
|
||||
break;
|
||||
case 1: // PC Joystick
|
||||
uNewJoyType = J0C_JOYSTICK1;
|
||||
break;
|
||||
case 2: // Keyboard (standard)
|
||||
uNewJoyType = J0C_KEYBD_NUMPAD;
|
||||
sg_PropertySheet.SetJoystickCenteringControl(JOYSTICK_MODE_FLOATING);
|
||||
break;
|
||||
case 3: // Keyboard (centering)
|
||||
uNewJoyType = J0C_KEYBD_NUMPAD;
|
||||
sg_PropertySheet.SetJoystickCenteringControl(JOYSTICK_MODE_CENTERING);
|
||||
break;
|
||||
case 4: // Mouse
|
||||
uNewJoyType = J0C_MOUSE;
|
||||
break;
|
||||
}
|
||||
|
||||
JoySetJoyType(uJoyNum, uNewJoyType);
|
||||
}
|
||||
|
||||
//Reads configuration from the registry entries
|
||||
void LoadConfiguration(void)
|
||||
{
|
||||
DWORD dwComputerType = 0;
|
||||
eApple2Type apple2Type = A2TYPE_APPLE2EENHANCED;
|
||||
|
||||
if (REGLOAD(TEXT(REGVALUE_APPLE2_TYPE), &dwComputerType))
|
||||
{
|
||||
const DWORD dwLoadedComputerType = dwComputerType;
|
||||
|
||||
if ( (dwComputerType >= A2TYPE_MAX) ||
|
||||
(dwComputerType >= A2TYPE_UNDEFINED && dwComputerType < A2TYPE_CLONE) ||
|
||||
(dwComputerType >= A2TYPE_CLONE_A2_MAX && dwComputerType < A2TYPE_CLONE_A2E) )
|
||||
dwComputerType = A2TYPE_APPLE2EENHANCED;
|
||||
|
||||
// Remap the bad Pravets models (before AppleWin v1.26)
|
||||
if (dwComputerType == A2TYPE_BAD_PRAVETS82) dwComputerType = A2TYPE_PRAVETS82;
|
||||
if (dwComputerType == A2TYPE_BAD_PRAVETS8M) dwComputerType = A2TYPE_PRAVETS8M;
|
||||
|
||||
// Remap the bad Pravets models (at AppleWin v1.26) - GH#415
|
||||
if (dwComputerType == A2TYPE_CLONE) dwComputerType = A2TYPE_PRAVETS82;
|
||||
|
||||
if (dwLoadedComputerType != dwComputerType)
|
||||
{
|
||||
char sText[100];
|
||||
StringCbPrintf(sText, sizeof(sText), "Unsupported Apple2Type(%d). Changing to %d", dwLoadedComputerType, dwComputerType);
|
||||
|
||||
LogFileOutput("%s\n", sText);
|
||||
|
||||
MessageBox(
|
||||
GetDesktopWindow(), // NB. g_hFrameWindow is not yet valid
|
||||
sText,
|
||||
"Load Configuration",
|
||||
MB_ICONSTOP | MB_SETFOREGROUND);
|
||||
|
||||
sg_PropertySheet.ConfigSaveApple2Type((eApple2Type)dwComputerType);
|
||||
}
|
||||
|
||||
apple2Type = (eApple2Type) dwComputerType;
|
||||
}
|
||||
else if (REGLOAD(TEXT(REGVALUE_OLD_APPLE2_TYPE), &dwComputerType)) // Support older AppleWin registry entries
|
||||
{
|
||||
switch (dwComputerType)
|
||||
{
|
||||
// NB. No A2TYPE_APPLE2E (this is correct)
|
||||
case 0: apple2Type = A2TYPE_APPLE2; break;
|
||||
case 1: apple2Type = A2TYPE_APPLE2PLUS; break;
|
||||
case 2: apple2Type = A2TYPE_APPLE2EENHANCED; break;
|
||||
default: apple2Type = A2TYPE_APPLE2EENHANCED; break;
|
||||
}
|
||||
}
|
||||
|
||||
SetApple2Type(apple2Type);
|
||||
|
||||
//
|
||||
|
||||
DWORD dwMainCpuType;
|
||||
REGLOAD_DEFAULT(TEXT(REGVALUE_CPU_TYPE), &dwMainCpuType, CPU_65C02);
|
||||
if (dwMainCpuType != CPU_6502 && dwMainCpuType != CPU_65C02)
|
||||
dwMainCpuType = CPU_65C02;
|
||||
SetMainCpu((eCpuType)dwMainCpuType);
|
||||
|
||||
//
|
||||
|
||||
DWORD dwJoyType;
|
||||
if (REGLOAD(TEXT(REGVALUE_JOYSTICK0_EMU_TYPE), &dwJoyType))
|
||||
JoySetJoyType(JN_JOYSTICK0, dwJoyType);
|
||||
else if (REGLOAD(TEXT(REGVALUE_OLD_JOYSTICK0_EMU_TYPE2), &dwJoyType)) // GH#434
|
||||
JoySetJoyType(JN_JOYSTICK0, dwJoyType);
|
||||
else
|
||||
LoadConfigOldJoystick_v1(JN_JOYSTICK0);
|
||||
|
||||
if (REGLOAD(TEXT(REGVALUE_JOYSTICK1_EMU_TYPE), &dwJoyType))
|
||||
JoySetJoyType(JN_JOYSTICK1, dwJoyType);
|
||||
else if (REGLOAD(TEXT(REGVALUE_OLD_JOYSTICK1_EMU_TYPE2), &dwJoyType)) // GH#434
|
||||
JoySetJoyType(JN_JOYSTICK1, dwJoyType);
|
||||
else
|
||||
LoadConfigOldJoystick_v1(JN_JOYSTICK1);
|
||||
|
||||
DWORD dwSoundType;
|
||||
REGLOAD_DEFAULT(TEXT(REGVALUE_SOUND_EMULATION), &dwSoundType, REG_SOUNDTYPE_WAVE);
|
||||
switch (dwSoundType)
|
||||
{
|
||||
case REG_SOUNDTYPE_NONE:
|
||||
case REG_SOUNDTYPE_DIRECT: // Not supported from 1.26
|
||||
case REG_SOUNDTYPE_SMART: // Not supported from 1.26
|
||||
default:
|
||||
soundtype = SOUND_NONE;
|
||||
break;
|
||||
case REG_SOUNDTYPE_WAVE:
|
||||
soundtype = SOUND_WAVE;
|
||||
break;
|
||||
}
|
||||
|
||||
TCHAR serialPortName[CSuperSerialCard::SIZEOF_SERIALCHOICE_ITEM];
|
||||
if (RegLoadString(
|
||||
TEXT(REG_CONFIG),
|
||||
TEXT(REGVALUE_SERIAL_PORT_NAME),
|
||||
TRUE,
|
||||
serialPortName,
|
||||
CSuperSerialCard::SIZEOF_SERIALCHOICE_ITEM))
|
||||
{
|
||||
if (GetCardMgr().IsSSCInstalled())
|
||||
GetCardMgr().GetSSC()->SetSerialPortName(serialPortName);
|
||||
}
|
||||
|
||||
REGLOAD_DEFAULT(TEXT(REGVALUE_EMULATION_SPEED), &g_dwSpeed, SPEED_NORMAL);
|
||||
Config_Load_Video();
|
||||
SetCurrentCLK6502(); // Pre: g_dwSpeed && Config_Load_Video()->SetVideoRefreshRate()
|
||||
|
||||
DWORD dwEnhanceDisk;
|
||||
REGLOAD_DEFAULT(TEXT(REGVALUE_ENHANCE_DISK_SPEED), &dwEnhanceDisk, 1);
|
||||
GetCardMgr().GetDisk2CardMgr().SetEnhanceDisk(dwEnhanceDisk ? true : false);
|
||||
|
||||
//
|
||||
|
||||
DWORD dwTmp = 0;
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_FS_SHOW_SUBUNIT_STATUS), &dwTmp))
|
||||
SetFullScreenShowSubunitStatus(dwTmp ? true : false);
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_THE_FREEZES_F8_ROM), &dwTmp))
|
||||
sg_PropertySheet.SetTheFreezesF8Rom(dwTmp);
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_SPKR_VOLUME), &dwTmp))
|
||||
SpkrSetVolume(dwTmp, sg_PropertySheet.GetVolumeMax());
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_MB_VOLUME), &dwTmp))
|
||||
MB_SetVolume(dwTmp, sg_PropertySheet.GetVolumeMax());
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_SAVE_STATE_ON_EXIT), &dwTmp))
|
||||
g_bSaveStateOnExit = dwTmp ? true : false;
|
||||
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_DUMP_TO_PRINTER), &dwTmp))
|
||||
g_bDumpToPrinter = dwTmp ? true : false;
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_CONVERT_ENCODING), &dwTmp))
|
||||
g_bConvertEncoding = dwTmp ? true : false;
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_FILTER_UNPRINTABLE), &dwTmp))
|
||||
g_bFilterUnprintable = dwTmp ? true : false;
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_PRINTER_APPEND), &dwTmp))
|
||||
g_bPrinterAppend = dwTmp ? true : false;
|
||||
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp)) // TODO: Change to REGVALUE_SLOT7
|
||||
HD_SetEnabled(dwTmp ? true : false);
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_PDL_XTRIM), &dwTmp))
|
||||
JoySetTrim((short)dwTmp, true);
|
||||
if(REGLOAD(TEXT(REGVALUE_PDL_YTRIM), &dwTmp))
|
||||
JoySetTrim((short)dwTmp, false);
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_SCROLLLOCK_TOGGLE), &dwTmp))
|
||||
sg_PropertySheet.SetScrollLockToggle(dwTmp);
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_CURSOR_CONTROL), &dwTmp))
|
||||
sg_PropertySheet.SetJoystickCursorControl(dwTmp);
|
||||
if(REGLOAD(TEXT(REGVALUE_AUTOFIRE), &dwTmp))
|
||||
sg_PropertySheet.SetAutofire(dwTmp);
|
||||
if(REGLOAD(TEXT(REGVALUE_SWAP_BUTTONS_0_AND_1), &dwTmp))
|
||||
sg_PropertySheet.SetButtonsSwapState(dwTmp ? true : false);
|
||||
if(REGLOAD(TEXT(REGVALUE_CENTERING_CONTROL), &dwTmp))
|
||||
sg_PropertySheet.SetJoystickCenteringControl(dwTmp);
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_MOUSE_CROSSHAIR), &dwTmp))
|
||||
sg_PropertySheet.SetMouseShowCrosshair(dwTmp);
|
||||
if(REGLOAD(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW), &dwTmp))
|
||||
sg_PropertySheet.SetMouseRestrictToWindow(dwTmp);
|
||||
|
||||
if(REGLOAD(TEXT(REGVALUE_SLOT4), &dwTmp))
|
||||
GetCardMgr().Insert(4, (SS_CARDTYPE)dwTmp);
|
||||
if(REGLOAD(TEXT(REGVALUE_SLOT5), &dwTmp))
|
||||
GetCardMgr().Insert(5, (SS_CARDTYPE)dwTmp);
|
||||
|
||||
//
|
||||
|
||||
TCHAR szFilename[MAX_PATH];
|
||||
|
||||
// Load save-state pathname *before* inserting any harddisk/disk images (for both init & reinit cases)
|
||||
// NB. inserting harddisk/disk can change snapshot pathname
|
||||
RegLoadString(TEXT(REG_CONFIG), TEXT(REGVALUE_SAVESTATE_FILENAME), 1, szFilename, MAX_PATH, TEXT("")); // Can be pathname or just filename
|
||||
Snapshot_SetFilename(szFilename); // If not in Registry than default will be used (ie. g_sCurrentDir + default filename)
|
||||
|
||||
//
|
||||
|
||||
RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_HDV_START_DIR), 1, szFilename, MAX_PATH, TEXT(""));
|
||||
if (szFilename[0] == '\0')
|
||||
GetCurrentDirectory(sizeof(szFilename), szFilename);
|
||||
SetCurrentImageDir(szFilename);
|
||||
|
||||
HD_LoadLastDiskImage(HARDDISK_1);
|
||||
HD_LoadLastDiskImage(HARDDISK_2);
|
||||
|
||||
//
|
||||
|
||||
// Current/Starting Dir is the "root" of where the user keeps their disk images
|
||||
RegLoadString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_START_DIR), 1, szFilename, MAX_PATH, TEXT(""));
|
||||
if (szFilename[0] == '\0')
|
||||
GetCurrentDirectory(sizeof(szFilename), szFilename);
|
||||
SetCurrentImageDir(szFilename);
|
||||
|
||||
GetCardMgr().GetDisk2CardMgr().LoadLastDiskImage();
|
||||
|
||||
//
|
||||
|
||||
DWORD dwTfeEnabled;
|
||||
REGLOAD_DEFAULT(TEXT(REGVALUE_UTHERNET_ACTIVE), &dwTfeEnabled, 0);
|
||||
tfe_enabled = dwTfeEnabled ? 1 : 0;
|
||||
|
||||
RegLoadString(TEXT(REG_CONFIG), TEXT(REGVALUE_UTHERNET_INTERFACE), 1, szFilename, MAX_PATH, TEXT(""));
|
||||
update_tfe_interface(szFilename, NULL);
|
||||
|
||||
//
|
||||
|
||||
RegLoadString(TEXT(REG_CONFIG), TEXT(REGVALUE_PRINTER_FILENAME), 1, szFilename, MAX_PATH, TEXT(""));
|
||||
Printer_SetFilename(szFilename); // If not in Registry than default will be used
|
||||
|
||||
REGLOAD_DEFAULT(TEXT(REGVALUE_PRINTER_IDLE_LIMIT), &dwTmp, 10);
|
||||
Printer_SetIdleLimit(dwTmp);
|
||||
|
||||
if (REGLOAD(TEXT(REGVALUE_WINDOW_SCALE), &dwTmp))
|
||||
SetViewportScale(dwTmp);
|
||||
|
||||
if (REGLOAD(TEXT(REGVALUE_CONFIRM_REBOOT), &dwTmp))
|
||||
g_bConfirmReboot = dwTmp;
|
||||
}
|
||||
|
||||
static std::string GetFullPath(LPCSTR szFileName)
|
||||
{
|
||||
std::string strPathName;
|
||||
|
||||
if (szFileName[0] == '\\' || szFileName[1] == ':')
|
||||
{
|
||||
// Abs pathname
|
||||
strPathName = szFileName;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Rel pathname (GH#663)
|
||||
strPathName = g_sStartDir;
|
||||
strPathName.append(szFileName);
|
||||
}
|
||||
|
||||
return strPathName;
|
||||
}
|
||||
|
||||
static void SetCurrentDir(std::string pathname)
|
||||
{
|
||||
// Due to the order HDDs/disks are inserted, then s7 insertions take priority over s6 & s5; and d2 takes priority over d1:
|
||||
// . if -s6[dN] and -hN are specified, then g_sCurrentDir will be set to the HDD image's path
|
||||
// . if -s5[dN] and -s6[dN] are specified, then g_sCurrentDir will be set to the s6 image's path
|
||||
// . if -[sN]d1 and -[sN]d2 are specified, then g_sCurrentDir will be set to the d2 image's path
|
||||
// This is purely dependent on the current order of InsertFloppyDisks() & InsertHardDisks() - ie. very brittle!
|
||||
// . better to use -current-dir to be explicit
|
||||
std::size_t found = pathname.find_last_of("\\");
|
||||
std::string path = pathname.substr(0, found);
|
||||
SetCurrentImageDir(path);
|
||||
}
|
||||
|
||||
bool DoDiskInsert(const UINT slot, const int nDrive, LPCSTR szFileName)
|
||||
{
|
||||
Disk2InterfaceCard& disk2Card = dynamic_cast<Disk2InterfaceCard&>(GetCardMgr().GetRef(slot));
|
||||
|
||||
if (szFileName[0] == '\0')
|
||||
{
|
||||
disk2Card.EjectDisk(nDrive);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string strPathName = GetFullPath(szFileName);
|
||||
if (strPathName.empty()) return false;
|
||||
|
||||
ImageError_e Error = disk2Card.InsertDisk(nDrive, strPathName.c_str(), IMAGE_USE_FILES_WRITE_PROTECT_STATUS, IMAGE_DONT_CREATE);
|
||||
bool res = (Error == eIMAGE_ERROR_NONE);
|
||||
if (res)
|
||||
SetCurrentDir(strPathName);
|
||||
return res;
|
||||
}
|
||||
|
||||
bool DoHardDiskInsert(const int nDrive, LPCSTR szFileName)
|
||||
{
|
||||
if (szFileName[0] == '\0')
|
||||
{
|
||||
HD_Unplug(nDrive);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string strPathName = GetFullPath(szFileName);
|
||||
if (strPathName.empty()) return false;
|
||||
|
||||
BOOL bRes = HD_Insert(nDrive, strPathName.c_str());
|
||||
bool res = (bRes == TRUE);
|
||||
if (res)
|
||||
SetCurrentDir(strPathName);
|
||||
return res;
|
||||
}
|
||||
|
||||
void InsertFloppyDisks(const UINT slot, LPSTR szImageName_drive[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])
|
||||
{
|
||||
bRes = DoDiskInsert(slot, DRIVE_1, szImageName_drive[DRIVE_1]);
|
||||
LogFileOutput("Init: S%d, DoDiskInsert(D1), res=%d\n", slot, bRes);
|
||||
FrameRefreshStatus(DRAW_LEDS | DRAW_BUTTON_DRIVES); // floppy activity LEDs and floppy buttons
|
||||
bBoot = true;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
if (!bRes)
|
||||
MessageBox(g_hFrameWindow, "Failed to insert floppy disk(s) - see log file", "Warning", MB_ICONASTERISK | MB_OK);
|
||||
}
|
||||
|
||||
void InsertHardDisks(LPSTR szImageName_harddisk[NUM_HARDDISKS], bool& bBoot)
|
||||
{
|
||||
if (!szImageName_harddisk[HARDDISK_1] && !szImageName_harddisk[HARDDISK_2])
|
||||
return;
|
||||
|
||||
// Enable the Harddisk controller card
|
||||
|
||||
HD_SetEnabled(true);
|
||||
|
||||
DWORD dwTmp;
|
||||
BOOL res = REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp);
|
||||
if (!res || !dwTmp)
|
||||
REGSAVE(TEXT(REGVALUE_HDD_ENABLED), 1); // Config: HDD Enabled
|
||||
|
||||
//
|
||||
|
||||
bool bRes = true;
|
||||
|
||||
if (szImageName_harddisk[HARDDISK_1])
|
||||
{
|
||||
bRes = DoHardDiskInsert(HARDDISK_1, szImageName_harddisk[HARDDISK_1]);
|
||||
LogFileOutput("Init: DoHardDiskInsert(HDD1), res=%d\n", bRes);
|
||||
FrameRefreshStatus(DRAW_LEDS); // harddisk activity LED
|
||||
bBoot = true;
|
||||
}
|
||||
|
||||
if (szImageName_harddisk[HARDDISK_2])
|
||||
{
|
||||
bRes |= DoHardDiskInsert(HARDDISK_2, szImageName_harddisk[HARDDISK_2]);
|
||||
LogFileOutput("Init: DoHardDiskInsert(HDD2), res=%d\n", bRes);
|
||||
}
|
||||
|
||||
if (!bRes)
|
||||
MessageBox(g_hFrameWindow, "Failed to insert harddisk(s) - see log file", "Warning", MB_ICONASTERISK | MB_OK);
|
||||
}
|
||||
|
||||
void UnplugHardDiskControllerCard(void)
|
||||
{
|
||||
HD_SetEnabled(false);
|
||||
|
||||
DWORD dwTmp;
|
||||
BOOL res = REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp);
|
||||
if (!res || dwTmp)
|
||||
REGSAVE(TEXT(REGVALUE_HDD_ENABLED), 0); // Config: HDD Disabled
|
||||
}
|
12
source/Utilities.h
Normal file
12
source/Utilities.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "Disk.h"
|
||||
#include "Harddisk.h"
|
||||
|
||||
|
||||
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 InsertHardDisks(LPSTR szImageName_harddisk[NUM_HARDDISKS], bool& bBoot);
|
||||
void UnplugHardDiskControllerCard(void);
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Video.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Core.h"
|
||||
#include "CPU.h"
|
||||
#include "Frame.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
|
1048
source/Windows/AppleWin.cpp
Normal file
1048
source/Windows/AppleWin.cpp
Normal file
File diff suppressed because it is too large
Load Diff
14
source/Windows/AppleWin.h
Normal file
14
source/Windows/AppleWin.h
Normal file
@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
void SingleStep(bool bReinit);
|
||||
|
||||
//===========================================
|
||||
|
||||
// Win32
|
||||
extern HINSTANCE g_hInstance;
|
||||
|
||||
bool GetLoadedSaveStateFlag(void);
|
||||
void SetLoadedSaveStateFlag(const bool bFlag);
|
||||
bool GetHookAltGrControl(void);
|
||||
|
||||
extern bool g_bRestartFullScreen;
|
@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Windows/WinFrame.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "CardManager.h"
|
||||
#include "CPU.h"
|
||||
#include "Disk.h"
|
||||
|
@ -30,8 +30,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#include "Windows/WinVideo.h"
|
||||
#include "Windows/WinFrame.h"
|
||||
#include "AppleWin.h"
|
||||
#include "Windows/AppleWin.h"
|
||||
#include "Video.h"
|
||||
#include "Core.h"
|
||||
#include "CPU.h"
|
||||
#include "Joystick.h"
|
||||
#include "Frame.h"
|
||||
|
@ -26,7 +26,6 @@
|
||||
|
||||
#include "../StdAfx.h"
|
||||
|
||||
#include "../AppleWin.h"
|
||||
#include "../CPU.h"
|
||||
#include "../Memory.h"
|
||||
#include "../YamlHelper.h"
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "z80emu.h"
|
||||
#include "AppleWin.h"
|
||||
#include "CPU.h"
|
||||
#include "Memory.h"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "../../source/AppleWin.h"
|
||||
#include "../../source/Windows/AppleWin.h"
|
||||
#include "../../source/CPU.h"
|
||||
#include "../../source/Memory.h"
|
||||
#include "../../source/SynchronousEventManager.h"
|
||||
|
Loading…
Reference in New Issue
Block a user