Changed Config->Input prop sheet's UI:
. [Feature #4399] Allow Z80 SoftCard to be inserted into slot 4 or 5. (Allows CP/M v3 to work) Removed CPP macro: SUPPORT_CPM (since it's been in since 1.16.0, Feb 2009) Bumped version to 1.21.0
This commit is contained in:
parent
e614289098
commit
a3f85280f0
17 changed files with 152 additions and 92 deletions
|
@ -19,8 +19,11 @@ Restrictions/bugs:
|
||||||
- For an original Apple //e, 80-column (PR#3) and INVERSE, it still appears to be mousetext character, but it should be inverted upper-case from $40 to $5F.
|
- For an original Apple //e, 80-column (PR#3) and INVERSE, it still appears to be mousetext character, but it should be inverted upper-case from $40 to $5F.
|
||||||
|
|
||||||
|
|
||||||
1.xx.0 - ?? ??? 2012
|
1.21.0 - 21 Jan 2012
|
||||||
--------------------
|
--------------------
|
||||||
|
Changes:
|
||||||
|
. [Feature #4399] Allow Z80 SoftCard to be inserted into slot 4 or 5. (Allows CP/M v3 to work)
|
||||||
|
|
||||||
Fixes:
|
Fixes:
|
||||||
. Floating bus not returned for empty slot $Cnxx addresses (Fix for A2VGA.DSK: Apple][VGA card detection).
|
. Floating bus not returned for empty slot $Cnxx addresses (Fix for A2VGA.DSK: Apple][VGA card detection).
|
||||||
|
|
||||||
|
|
|
@ -122,8 +122,6 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTIO
|
||||||
CAPTION "Input"
|
CAPTION "Input"
|
||||||
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "&Restrict mouse to Apple window",IDC_MOUSE_RESTRICT_TO_WINDOW,
|
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,123,121,10
|
|
||||||
GROUPBOX "Joystick Control",IDC_STATIC,5,7,200,66
|
GROUPBOX "Joystick Control",IDC_STATIC,5,7,200,66
|
||||||
LTEXT "Joystick &1:",IDC_STATIC,12,20,40,8
|
LTEXT "Joystick &1:",IDC_STATIC,12,20,40,8
|
||||||
COMBOBOX IDC_JOYSTICK0,52,18,100,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_JOYSTICK0,52,18,100,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
|
@ -140,9 +138,11 @@ BEGIN
|
||||||
CONTROL "&Mouse interface in slot 4",IDC_MOUSE_IN_SLOT4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,95,106,10
|
CONTROL "&Mouse interface in slot 4",IDC_MOUSE_IN_SLOT4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,95,106,10
|
||||||
CONTROL "Show &crosshairs in window's frame",IDC_MOUSE_CROSSHAIR,
|
CONTROL "Show &crosshairs in window's frame",IDC_MOUSE_CROSSHAIR,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,109,159,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,109,159,10
|
||||||
CONTROL "Microsoft C&P/M SoftCard in slot 5",IDC_Z80_IN_SLOT5,
|
CONTROL "&Restrict mouse to Apple window",IDC_MOUSE_RESTRICT_TO_WINDOW,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,138,122,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,123,121,10
|
||||||
PUSHBUTTON "Paste &From Clipboard",IDC_PASTE_FROM_CLIPBOARD,5,160,81,14
|
LTEXT "Microsoft CP/M SoftCard:",IDC_STATIC,5,138,122,10
|
||||||
|
COMBOBOX IDC_CPM_CONFIG,90,136,55,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
|
PUSHBUTTON "Paste &From Clipboard",IDC_PASTE_FROM_CLIPBOARD,5,160,81,14
|
||||||
LTEXT "(Shift+Insert during emulation)",IDC_STATIC,90,163,111,8
|
LTEXT "(Shift+Insert during emulation)",IDC_STATIC,90,163,111,8
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -253,8 +253,8 @@ DISK_ICON ICON "DISK.ICO"
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,20,1,0
|
FILEVERSION 1,21,0,0
|
||||||
PRODUCTVERSION 1,20,1,0
|
PRODUCTVERSION 1,21,0,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -272,12 +272,12 @@ BEGIN
|
||||||
VALUE "Comments", "http://applewin.berlios.de"
|
VALUE "Comments", "http://applewin.berlios.de"
|
||||||
VALUE "CompanyName", "AppleWin"
|
VALUE "CompanyName", "AppleWin"
|
||||||
VALUE "FileDescription", "Apple //e Emulator for Windows"
|
VALUE "FileDescription", "Apple //e Emulator for Windows"
|
||||||
VALUE "FileVersion", "1, 20, 1, 0"
|
VALUE "FileVersion", "1, 21, 0, 0"
|
||||||
VALUE "InternalName", "APPLEWIN"
|
VALUE "InternalName", "APPLEWIN"
|
||||||
VALUE "LegalCopyright", " 1994-2011 Michael O'Brien, Oliver Schmidt, Tom Charlesworth, Michael Pohoreski, Nick Westgate, Linards Ticmanis"
|
VALUE "LegalCopyright", " 1994-2012 Michael O'Brien, Oliver Schmidt, Tom Charlesworth, Michael Pohoreski, Nick Westgate, Linards Ticmanis"
|
||||||
VALUE "OriginalFilename", "APPLEWIN.EXE"
|
VALUE "OriginalFilename", "APPLEWIN.EXE"
|
||||||
VALUE "ProductName", "Apple //e Emulator"
|
VALUE "ProductName", "Apple //e Emulator"
|
||||||
VALUE "ProductVersion", "1, 20, 1, 0"
|
VALUE "ProductVersion", "1, 21, 0, 0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
#define IDC_MOUSE_RESTRICT_TO_WINDOW 1048
|
#define IDC_MOUSE_RESTRICT_TO_WINDOW 1048
|
||||||
#define IDC_CIDERPRESS_BROWSE 1049
|
#define IDC_CIDERPRESS_BROWSE 1049
|
||||||
#define IDC_CIDERPRESS_FILENAME 1050
|
#define IDC_CIDERPRESS_FILENAME 1050
|
||||||
#define IDC_Z80_IN_SLOT5 1051
|
#define IDC_CPM_CONFIG 1051
|
||||||
#define IDC_DUMPTOPRINTER 1052
|
#define IDC_DUMPTOPRINTER 1052
|
||||||
#define IDC_PRINTER_DUMP_FILENAME 1053
|
#define IDC_PRINTER_DUMP_FILENAME 1053
|
||||||
#define IDC_PRINTER_DUMP_FILENAME_BROWSE 1054
|
#define IDC_PRINTER_DUMP_FILENAME_BROWSE 1054
|
||||||
|
|
|
@ -85,11 +85,8 @@ CSuperSerialCard sg_SSC;
|
||||||
CMouseInterface sg_Mouse;
|
CMouseInterface sg_Mouse;
|
||||||
|
|
||||||
// TODO: CLEANUP! Move to peripherals.cpp!!!
|
// TODO: CLEANUP! Move to peripherals.cpp!!!
|
||||||
#ifdef SUPPORT_CPM
|
SS_CARDTYPE g_Slot4 = CT_Empty;
|
||||||
UINT g_Slot4 = CT_Empty;
|
SS_CARDTYPE g_Slot5 = CT_Empty;
|
||||||
#else
|
|
||||||
UINT g_Slot4 = CT_Mockingboard; // CT_Mockingboard or CT_MouseInterface
|
|
||||||
#endif
|
|
||||||
|
|
||||||
eCPU g_ActiveCPU = CPU_6502;
|
eCPU g_ActiveCPU = CPU_6502;
|
||||||
|
|
||||||
|
@ -555,24 +552,19 @@ void LoadConfiguration ()
|
||||||
if(REGLOAD(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW), &dwTmp))
|
if(REGLOAD(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW), &dwTmp))
|
||||||
g_uMouseRestrictToWindow = dwTmp;
|
g_uMouseRestrictToWindow = dwTmp;
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
if(REGLOAD(TEXT(REGVALUE_CPM_CONFIG), &dwTmp))
|
||||||
if(REGLOAD(TEXT(REGVALUE_Z80_IN_SLOT5), &dwTmp))
|
g_CPMChoice = (CPMCHOICE) dwTmp;
|
||||||
g_uZ80InSlot5 = dwTmp;
|
|
||||||
|
|
||||||
if (g_uZ80InSlot5)
|
if (g_CPMChoice == CPM_SLOT4 || g_CPMChoice == CPM_SLOT5)
|
||||||
MB_SetSoundcardType(SC_NONE);
|
MB_SetSoundcardType(SC_NONE);
|
||||||
|
|
||||||
g_Slot4 =
|
g_Slot4 =
|
||||||
g_uMouseInSlot4 ? CT_MouseInterface
|
g_uMouseInSlot4 ? CT_MouseInterface
|
||||||
: g_uZ80InSlot5 ? CT_Empty
|
: (g_CPMChoice == CPM_SLOT4) ? CT_Z80
|
||||||
: CT_Mockingboard;
|
: CT_Mockingboard;
|
||||||
// : g_uClockInSlot4 ? CT_GenericClock
|
|
||||||
// : CT_Mockingboard;
|
g_Slot5 = (g_CPMChoice == CPM_SLOT5) ? CT_Z80
|
||||||
#else
|
: CT_Mockingboard;
|
||||||
g_Slot4 = g_uMouseInSlot4
|
|
||||||
? CT_MouseInterface
|
|
||||||
: CT_Mockingboard;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
|
@ -44,12 +44,12 @@ extern bool g_bDisableDirectSound; // Cmd line switch: don't init DS (s
|
||||||
extern bool g_bDisableDirectSoundMockingboard; // Cmd line switch: don't init MB support
|
extern bool g_bDisableDirectSoundMockingboard; // Cmd line switch: don't init MB support
|
||||||
|
|
||||||
// TODO: Make g_CurrentPeripherals[MAX_SLOTS] = { CT_Empty }
|
// TODO: Make g_CurrentPeripherals[MAX_SLOTS] = { CT_Empty }
|
||||||
extern UINT g_Slot4; // Mockingboard or Mouse in slot4
|
extern SS_CARDTYPE g_Slot4; // Mockingboard, Z80, Mouse in slot4
|
||||||
|
extern SS_CARDTYPE g_Slot5; // Mockingboard, Z80, in slot5
|
||||||
|
|
||||||
// TODO: Move into: g_CurrentPeripherals[]
|
// TODO: Move into: g_CurrentPeripherals[]
|
||||||
extern UINT g_uMouseInSlot4;
|
extern UINT g_uMouseInSlot4;
|
||||||
//extern UINT g_uClockInSlot4;
|
//extern UINT g_uClockInSlot4;
|
||||||
extern UINT g_uZ80InSlot5;
|
|
||||||
|
|
||||||
extern HANDLE g_hCustomRomF8; // NULL if no custom rom
|
extern HANDLE g_hCustomRomF8; // NULL if no custom rom
|
||||||
|
|
||||||
|
|
|
@ -87,11 +87,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
#include "MouseInterface.h"
|
#include "MouseInterface.h"
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
#include "z80emu.h"
|
#include "z80emu.h"
|
||||||
#include "Z80VICE\z80.h"
|
#include "Z80VICE\z80.h"
|
||||||
#include "Z80VICE\z80mem.h"
|
#include "Z80VICE\z80mem.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_SPEECH_API
|
#ifdef USE_SPEECH_API
|
||||||
#include "Speech.h"
|
#include "Speech.h"
|
||||||
|
@ -461,10 +459,8 @@ void CpuInitialize ()
|
||||||
CpuIrqReset();
|
CpuIrqReset();
|
||||||
CpuNmiReset();
|
CpuNmiReset();
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
z80mem_initialize();
|
z80mem_initialize();
|
||||||
z80_reset();
|
z80_reset();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -567,10 +563,8 @@ void CpuReset()
|
||||||
|
|
||||||
regs.bJammed = 0;
|
regs.bJammed = 0;
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
g_ActiveCPU = CPU_6502;
|
g_ActiveCPU = CPU_6502;
|
||||||
z80_reset();
|
z80_reset();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
|
@ -44,13 +44,11 @@ static DWORD Cpu6502 (DWORD uTotalCycles)
|
||||||
UINT uExtraCycles = 0;
|
UINT uExtraCycles = 0;
|
||||||
BYTE iOpcode;
|
BYTE iOpcode;
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
if (g_ActiveCPU == CPU_Z80)
|
if (g_ActiveCPU == CPU_Z80)
|
||||||
{
|
{
|
||||||
const UINT uZ80Cycles = z80_mainloop(uTotalCycles, uExecutedCycles); CYC(uZ80Cycles)
|
const UINT uZ80Cycles = z80_mainloop(uTotalCycles, uExecutedCycles); CYC(uZ80Cycles)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (!Fetch(iOpcode, uExecutedCycles))
|
if (!Fetch(iOpcode, uExecutedCycles))
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -47,13 +47,11 @@ static DWORD Cpu65C02 (DWORD uTotalCycles)
|
||||||
UINT uExtraCycles = 0;
|
UINT uExtraCycles = 0;
|
||||||
BYTE iOpcode;
|
BYTE iOpcode;
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
if (g_ActiveCPU == CPU_Z80)
|
if (g_ActiveCPU == CPU_Z80)
|
||||||
{
|
{
|
||||||
const UINT uZ80Cycles = z80_mainloop(uTotalCycles, uExecutedCycles); CYC(uZ80Cycles)
|
const UINT uZ80Cycles = z80_mainloop(uTotalCycles, uExecutedCycles); CYC(uZ80Cycles)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (!Fetch(iOpcode, uExecutedCycles))
|
if (!Fetch(iOpcode, uExecutedCycles))
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -106,13 +106,11 @@ static DWORD Cpu65D02 (DWORD uTotalCycles)
|
||||||
UINT uExtraCycles = 0;
|
UINT uExtraCycles = 0;
|
||||||
BYTE iOpcode;
|
BYTE iOpcode;
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
if (g_ActiveCPU == CPU_Z80)
|
if (g_ActiveCPU == CPU_Z80)
|
||||||
{
|
{
|
||||||
const UINT uZ80Cycles = z80_mainloop(uTotalCycles, uExecutedCycles); CYC(uZ80Cycles)
|
const UINT uZ80Cycles = z80_mainloop(uTotalCycles, uExecutedCycles); CYC(uZ80Cycles)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!Fetch(iOpcode, uExecutedCycles))
|
if (!Fetch(iOpcode, uExecutedCycles))
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define SUPPORT_CPM
|
|
||||||
#define USE_SPEECH_API
|
#define USE_SPEECH_API
|
||||||
|
|
||||||
const double _M14 = (157500000.0 / 11.0); // 14.3181818... * 10^6
|
const double _M14 = (157500000.0 / 11.0); // 14.3181818... * 10^6
|
||||||
|
@ -90,7 +89,8 @@ enum AppMode_e
|
||||||
#define REGVALUE_THE_FREEZES_F8_ROM "The Freeze's F8 Rom"
|
#define REGVALUE_THE_FREEZES_F8_ROM "The Freeze's F8 Rom"
|
||||||
#define REGVALUE_CLONETYPE "Clone Type"
|
#define REGVALUE_CLONETYPE "Clone Type"
|
||||||
#define REGVALUE_CIDERPRESSLOC "CiderPress Location"
|
#define REGVALUE_CIDERPRESSLOC "CiderPress Location"
|
||||||
#define REGVALUE_Z80_IN_SLOT5 "Z80 in slot 5"
|
//#define REGVALUE_Z80_IN_SLOT5 "Z80 in slot 5"
|
||||||
|
#define REGVALUE_CPM_CONFIG "CPM Config"
|
||||||
#define REGVALUE_DUMP_TO_PRINTER "Dump to printer"
|
#define REGVALUE_DUMP_TO_PRINTER "Dump to printer"
|
||||||
#define REGVALUE_CONVERT_ENCODING "Convert printer encoding for clones"
|
#define REGVALUE_CONVERT_ENCODING "Convert printer encoding for clones"
|
||||||
#define REGVALUE_FILTER_UNPRINTABLE "Filter unprintable characters"
|
#define REGVALUE_FILTER_UNPRINTABLE "Filter unprintable characters"
|
||||||
|
|
|
@ -1685,9 +1685,7 @@ void ResetMachineState ()
|
||||||
MB_Reset();
|
MB_Reset();
|
||||||
SpkrReset();
|
SpkrReset();
|
||||||
sg_Mouse.Reset();
|
sg_Mouse.Reset();
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
g_ActiveCPU = CPU_6502;
|
g_ActiveCPU = CPU_6502;
|
||||||
#endif
|
|
||||||
#ifdef USE_SPEECH_API
|
#ifdef USE_SPEECH_API
|
||||||
g_Speech.Reset();
|
g_Speech.Reset();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -30,11 +30,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
#include "Harddisk.h"
|
#include "Harddisk.h"
|
||||||
#include "MouseInterface.h"
|
#include "MouseInterface.h"
|
||||||
#include "NoSlotClock.h"
|
#include "NoSlotClock.h"
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
#include "z80emu.h"
|
#include "z80emu.h"
|
||||||
#include "Z80VICE\z80.h"
|
#include "Z80VICE\z80.h"
|
||||||
#include "Z80VICE\z80mem.h"
|
#include "Z80VICE\z80mem.h"
|
||||||
#endif
|
|
||||||
#include "..\resource\resource.h"
|
#include "..\resource\resource.h"
|
||||||
|
|
||||||
// Memory Flag
|
// Memory Flag
|
||||||
|
@ -1172,21 +1170,25 @@ void MemInitialize()
|
||||||
{
|
{
|
||||||
sg_Mouse.Initialize(pCxRomPeripheral, 4); // $C400 : Mouse f/w
|
sg_Mouse.Initialize(pCxRomPeripheral, 4); // $C400 : Mouse f/w
|
||||||
}
|
}
|
||||||
// else if (g_Slot4 == CT_GenericClock)
|
|
||||||
// {
|
|
||||||
// LoadRom_Clock_Generic(pCxRomPeripheral, 4);
|
|
||||||
// }
|
|
||||||
else if (g_Slot4 == CT_Mockingboard)
|
else if (g_Slot4 == CT_Mockingboard)
|
||||||
{
|
{
|
||||||
const UINT uSlot4 = 4;
|
const UINT uSlot4 = 4;
|
||||||
const UINT uSlot5 = 5;
|
const UINT uSlot5 = 5;
|
||||||
MB_InitializeIO(pCxRomPeripheral, uSlot4, uSlot5);
|
MB_InitializeIO(pCxRomPeripheral, uSlot4, uSlot5);
|
||||||
}
|
}
|
||||||
|
else if (g_Slot4 == CT_Z80)
|
||||||
|
{
|
||||||
|
ConfigureSoftcard(pCxRomPeripheral, 4); // $C400 : Z80 card
|
||||||
|
}
|
||||||
|
// else if (g_Slot4 == CT_GenericClock)
|
||||||
|
// {
|
||||||
|
// LoadRom_Clock_Generic(pCxRomPeripheral, 4);
|
||||||
|
// }
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
if (g_Slot5 == CT_Z80)
|
||||||
if (g_uZ80InSlot5)
|
{
|
||||||
ConfigureSoftcard(pCxRomPeripheral, 5, g_uZ80InSlot5); // $C500 : Z80 card
|
ConfigureSoftcard(pCxRomPeripheral, 5); // $C500 : Z80 card
|
||||||
#endif
|
}
|
||||||
|
|
||||||
DiskLoadRom(pCxRomPeripheral, 6); // $C600 : Disk][ f/w
|
DiskLoadRom(pCxRomPeripheral, 6); // $C600 : Disk][ f/w
|
||||||
HD_Load_Rom(pCxRomPeripheral, 7); // $C700 : HDD f/w
|
HD_Load_Rom(pCxRomPeripheral, 7); // $C700 : HDD f/w
|
||||||
|
@ -1241,9 +1243,7 @@ void MemReset ()
|
||||||
CpuInitialize();
|
CpuInitialize();
|
||||||
//Sets Caps Lock = false (Pravets 8A/C only)
|
//Sets Caps Lock = false (Pravets 8A/C only)
|
||||||
|
|
||||||
#ifdef SUPPORT_CPM
|
|
||||||
z80_reset();
|
z80_reset();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
|
@ -1498,18 +1498,11 @@ static BYTE __stdcall PhasorIO (WORD PC, WORD nAddr, BYTE bWrite, BYTE nValue, U
|
||||||
|
|
||||||
void MB_InitializeIO(LPBYTE pCxRomPeripheral, UINT uSlot4, UINT uSlot5)
|
void MB_InitializeIO(LPBYTE pCxRomPeripheral, UINT uSlot4, UINT uSlot5)
|
||||||
{
|
{
|
||||||
#ifdef SUPPORT_CPM
|
if (g_Slot4 == CT_Mockingboard)
|
||||||
if (g_Slot4 == CT_Mockingboard)
|
{
|
||||||
{
|
RegisterIoHandler(uSlot4, PhasorIO, PhasorIO, MB_Read, MB_Write, NULL, NULL);
|
||||||
RegisterIoHandler(uSlot4, PhasorIO, PhasorIO, MB_Read, MB_Write, NULL, NULL);
|
|
||||||
RegisterIoHandler(uSlot5, PhasorIO, PhasorIO, MB_Read, MB_Write, NULL, NULL);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (g_Slot4 == CT_Mockingboard)
|
|
||||||
RegisterIoHandler(uSlot4, PhasorIO, PhasorIO, MB_Read, MB_Write, NULL, NULL);
|
|
||||||
|
|
||||||
RegisterIoHandler(uSlot5, PhasorIO, PhasorIO, MB_Read, MB_Write, NULL, NULL);
|
RegisterIoHandler(uSlot5, PhasorIO, PhasorIO, MB_Read, MB_Write, NULL, NULL);
|
||||||
#endif
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -78,6 +78,15 @@ TCHAR soundchoices[] = TEXT("Disabled\0")
|
||||||
TCHAR discchoices[] = TEXT("Authentic Speed\0")
|
TCHAR discchoices[] = TEXT("Authentic Speed\0")
|
||||||
TEXT("Enhanced Speed\0");
|
TEXT("Enhanced Speed\0");
|
||||||
|
|
||||||
|
TCHAR g_szCPMSlotChoice_Slot4[] = TEXT("Slot 4\0");
|
||||||
|
TCHAR g_szCPMSlotChoice_Slot5[] = TEXT("Slot 5\0");
|
||||||
|
TCHAR g_szCPMSlotChoice_Unplugged[] = TEXT("Unplugged\0");
|
||||||
|
TCHAR g_szCPMSlotChoice_Unavailable[] = TEXT("Unavailable\0");
|
||||||
|
|
||||||
|
static TCHAR g_szCPMSlotChoices[100];
|
||||||
|
CPMCHOICE g_CPMChoice = CPM_UNPLUGGED;
|
||||||
|
CPMCHOICE g_CPMComboItemToChoice[_CPM_MAX_CHOICES];
|
||||||
|
|
||||||
const UINT VOLUME_MIN = 0;
|
const UINT VOLUME_MIN = 0;
|
||||||
const UINT VOLUME_MAX = 59;
|
const UINT VOLUME_MAX = 59;
|
||||||
|
|
||||||
|
@ -92,8 +101,6 @@ UINT g_uMouseInSlot4 = 0;
|
||||||
UINT g_uMouseShowCrosshair = 0;
|
UINT g_uMouseShowCrosshair = 0;
|
||||||
UINT g_uMouseRestrictToWindow = 0;
|
UINT g_uMouseRestrictToWindow = 0;
|
||||||
|
|
||||||
UINT g_uZ80InSlot5 = 0;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
UINT g_uTheFreezesF8Rom = 0;
|
UINT g_uTheFreezesF8Rom = 0;
|
||||||
|
@ -219,6 +226,72 @@ static void InitJoystickChoices(HWND window, int nJoyNum, int nIdcValue)
|
||||||
FillComboBox(window, nIdcValue, pnzJoystickChoices, joytype[nJoyNum]);
|
FillComboBox(window, nIdcValue, pnzJoystickChoices, joytype[nJoyNum]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void InitCPMChoices(HWND window)
|
||||||
|
{
|
||||||
|
for (UINT i=0; i<_CPM_MAX_CHOICES; i++)
|
||||||
|
g_CPMComboItemToChoice[i] = CPM_UNAVAILABLE;
|
||||||
|
|
||||||
|
UINT uStringOffset = 0;
|
||||||
|
UINT uComboItemIdx = 0;
|
||||||
|
const eSOUNDCARDTYPE SoundcardType = MB_GetSoundcardType();
|
||||||
|
|
||||||
|
const bool bIsSlot4Empty = g_uMouseInSlot4 == 0 &&
|
||||||
|
SoundcardType == SC_NONE; // Mockingboard is in slots 4+5; Phasor is in slot 4
|
||||||
|
const bool bIsSlot5Empty = SoundcardType != SC_MOCKINGBOARD;
|
||||||
|
|
||||||
|
if (bIsSlot4Empty) // Slot-4 is empty
|
||||||
|
{
|
||||||
|
const UINT uStrLen = strlen(g_szCPMSlotChoice_Slot4)+1;
|
||||||
|
memcpy(&g_szCPMSlotChoices[uStringOffset], g_szCPMSlotChoice_Slot4, uStrLen);
|
||||||
|
uStringOffset += uStrLen;
|
||||||
|
|
||||||
|
g_CPMComboItemToChoice[uComboItemIdx++] = CPM_SLOT4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bIsSlot5Empty) // Slot-5 is empty
|
||||||
|
{
|
||||||
|
const UINT uStrLen = strlen(g_szCPMSlotChoice_Slot5)+1;
|
||||||
|
memcpy(&g_szCPMSlotChoices[uStringOffset], g_szCPMSlotChoice_Slot5, uStrLen);
|
||||||
|
uStringOffset += uStrLen;
|
||||||
|
|
||||||
|
g_CPMComboItemToChoice[uComboItemIdx++] = CPM_SLOT5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uStringOffset)
|
||||||
|
{
|
||||||
|
const UINT uStrLen = strlen(g_szCPMSlotChoice_Unplugged)+1;
|
||||||
|
memcpy(&g_szCPMSlotChoices[uStringOffset], g_szCPMSlotChoice_Unplugged, uStrLen);
|
||||||
|
uStringOffset += uStrLen;
|
||||||
|
|
||||||
|
g_CPMComboItemToChoice[uComboItemIdx] = CPM_UNPLUGGED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const UINT uStrLen = strlen(g_szCPMSlotChoice_Unavailable)+1;
|
||||||
|
memcpy(&g_szCPMSlotChoices[uStringOffset], g_szCPMSlotChoice_Unavailable, uStrLen);
|
||||||
|
uStringOffset += uStrLen;
|
||||||
|
|
||||||
|
g_CPMChoice = CPM_UNAVAILABLE; // Force this
|
||||||
|
g_CPMComboItemToChoice[uComboItemIdx] = CPM_UNAVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_szCPMSlotChoices[uStringOffset] = 0; // Doubly null terminated
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
UINT uCurrentChoice = uComboItemIdx; // Default to last item (either UNPLUGGED or UNAVAILABLE)
|
||||||
|
for (UINT i=0; i<=uComboItemIdx; i++)
|
||||||
|
{
|
||||||
|
if (g_CPMComboItemToChoice[i] == g_CPMChoice)
|
||||||
|
{
|
||||||
|
uCurrentChoice = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FillComboBox(window, IDC_CPM_CONFIG, g_szCPMSlotChoices, uCurrentChoice);
|
||||||
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
static eApple2Type GetApple2Type(DWORD NewCompType, DWORD NewCloneType)
|
static eApple2Type GetApple2Type(DWORD NewCompType, DWORD NewCloneType)
|
||||||
|
@ -541,7 +614,7 @@ static void InputDlg_OK(HWND window, UINT afterclose)
|
||||||
REGSAVE(TEXT(REGVALUE_MOUSE_IN_SLOT4),g_uMouseInSlot4);
|
REGSAVE(TEXT(REGVALUE_MOUSE_IN_SLOT4),g_uMouseInSlot4);
|
||||||
REGSAVE(TEXT(REGVALUE_MOUSE_CROSSHAIR),g_uMouseShowCrosshair);
|
REGSAVE(TEXT(REGVALUE_MOUSE_CROSSHAIR),g_uMouseShowCrosshair);
|
||||||
REGSAVE(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW),g_uMouseRestrictToWindow);
|
REGSAVE(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW),g_uMouseRestrictToWindow);
|
||||||
REGSAVE(TEXT(REGVALUE_Z80_IN_SLOT5),g_uZ80InSlot5);
|
REGSAVE(TEXT(REGVALUE_CPM_CONFIG), g_CPMChoice);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -667,30 +740,36 @@ static BOOL CALLBACK InputDlgProc(HWND window,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_Z80_IN_SLOT5:
|
case IDC_CPM_CONFIG:
|
||||||
|
if(HIWORD(wparam) == CBN_SELCHANGE)
|
||||||
{
|
{
|
||||||
UINT uNewState = IsDlgButtonChecked(window, IDC_Z80_IN_SLOT5) ? 1 : 0;
|
DWORD NewCPMChoiceItem = (DWORD) SendDlgItemMessage(window, IDC_CPM_CONFIG, CB_GETCURSEL, 0, 0);
|
||||||
LPCSTR pMsg = uNewState ?
|
CPMCHOICE NewCPMChoice = g_CPMComboItemToChoice[NewCPMChoiceItem];
|
||||||
|
if (NewCPMChoice == g_CPMChoice)
|
||||||
|
break;
|
||||||
|
|
||||||
|
LPCSTR pMsg = NewCPMChoice != CPM_UNPLUGGED ?
|
||||||
TEXT("The emulator needs to restart as the slot configuration has changed.\n")
|
TEXT("The emulator needs to restart as the slot configuration has changed.\n")
|
||||||
TEXT("Microsoft CP/M SoftCard will be placed in slot 5.\n\n")
|
TEXT("Microsoft CP/M SoftCard will be inserted.\n\n")
|
||||||
TEXT("Would you like to restart the emulator now?")
|
TEXT("Would you like to restart the emulator now?")
|
||||||
:
|
:
|
||||||
TEXT("The emulator needs to restart as the slot configuration has changed.\n")
|
TEXT("The emulator needs to restart as the slot configuration has changed.\n")
|
||||||
TEXT("Microsoft CP/M SoftCard will be removed from slot 5\n\n")
|
TEXT("Microsoft CP/M SoftCard will be removed.\n\n")
|
||||||
TEXT("Would you like to restart the emulator now?");
|
TEXT("Would you like to restart the emulator now?");
|
||||||
if (MessageBox(window,
|
if (MessageBox(window,
|
||||||
pMsg,
|
pMsg,
|
||||||
TEXT("Configuration"),
|
TEXT("Configuration"),
|
||||||
MB_ICONQUESTION | MB_YESNO | MB_SETFOREGROUND) == IDYES)
|
MB_ICONQUESTION | MB_YESNO | MB_SETFOREGROUND) == IDYES)
|
||||||
{
|
{
|
||||||
g_uZ80InSlot5 = uNewState;
|
g_CPMChoice = NewCPMChoice;
|
||||||
afterclose = WM_USER_RESTART;
|
afterclose = WM_USER_RESTART;
|
||||||
PropSheet_PressButton(GetParent(window), PSBTN_OK);
|
PropSheet_PressButton(GetParent(window), PSBTN_OK);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckDlgButton(window, IDC_Z80_IN_SLOT5, g_uZ80InSlot5 ? BST_CHECKED : BST_UNCHECKED);
|
InitCPMChoices(window); // Restore original state
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -714,12 +793,17 @@ static BOOL CALLBACK InputDlgProc(HWND window,
|
||||||
SendDlgItemMessage(window, IDC_SPIN_YTRIM, UDM_SETPOS, 0, MAKELONG(JoyGetTrim(false),0));
|
SendDlgItemMessage(window, IDC_SPIN_YTRIM, UDM_SETPOS, 0, MAKELONG(JoyGetTrim(false),0));
|
||||||
|
|
||||||
CheckDlgButton(window, IDC_SCROLLLOCK_TOGGLE, g_uScrollLockToggle ? BST_CHECKED : BST_UNCHECKED);
|
CheckDlgButton(window, IDC_SCROLLLOCK_TOGGLE, g_uScrollLockToggle ? BST_CHECKED : BST_UNCHECKED);
|
||||||
|
|
||||||
CheckDlgButton(window, IDC_MOUSE_IN_SLOT4, g_uMouseInSlot4 ? BST_CHECKED : BST_UNCHECKED);
|
CheckDlgButton(window, IDC_MOUSE_IN_SLOT4, g_uMouseInSlot4 ? BST_CHECKED : BST_UNCHECKED);
|
||||||
CheckDlgButton(window, IDC_MOUSE_CROSSHAIR, g_uMouseShowCrosshair ? BST_CHECKED : BST_UNCHECKED);
|
CheckDlgButton(window, IDC_MOUSE_CROSSHAIR, g_uMouseShowCrosshair ? BST_CHECKED : BST_UNCHECKED);
|
||||||
CheckDlgButton(window, IDC_MOUSE_RESTRICT_TO_WINDOW, g_uMouseRestrictToWindow ? BST_CHECKED : BST_UNCHECKED);
|
CheckDlgButton(window, IDC_MOUSE_RESTRICT_TO_WINDOW, g_uMouseRestrictToWindow ? BST_CHECKED : BST_UNCHECKED);
|
||||||
|
|
||||||
|
const eSOUNDCARDTYPE SoundcardType = MB_GetSoundcardType();
|
||||||
|
EnableWindow(GetDlgItem(window, IDC_MOUSE_IN_SLOT4), (g_uMouseInSlot4 || (g_CPMChoice != CPM_SLOT4 && SoundcardType == SC_NONE)) ? TRUE : FALSE);
|
||||||
EnableWindow(GetDlgItem(window, IDC_MOUSE_CROSSHAIR), g_uMouseInSlot4 ? TRUE : FALSE);
|
EnableWindow(GetDlgItem(window, IDC_MOUSE_CROSSHAIR), g_uMouseInSlot4 ? TRUE : FALSE);
|
||||||
EnableWindow(GetDlgItem(window, IDC_MOUSE_RESTRICT_TO_WINDOW), g_uMouseInSlot4 ? TRUE : FALSE);
|
EnableWindow(GetDlgItem(window, IDC_MOUSE_RESTRICT_TO_WINDOW), g_uMouseInSlot4 ? TRUE : FALSE);
|
||||||
CheckDlgButton(window, IDC_Z80_IN_SLOT5, g_uZ80InSlot5 ? BST_CHECKED : BST_UNCHECKED);
|
|
||||||
|
InitCPMChoices(window);
|
||||||
|
|
||||||
afterclose = 0;
|
afterclose = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -849,14 +933,14 @@ static BOOL CALLBACK SoundDlgProc (HWND window,
|
||||||
|
|
||||||
CheckRadioButton(window, IDC_MB_ENABLE, IDC_SOUNDCARD_DISABLE, nID);
|
CheckRadioButton(window, IDC_MB_ENABLE, IDC_SOUNDCARD_DISABLE, nID);
|
||||||
|
|
||||||
if (g_uMouseInSlot4)
|
if (g_uMouseInSlot4 || g_CPMChoice == CPM_SLOT4)
|
||||||
{
|
{
|
||||||
EnableWindow(GetDlgItem(window, IDC_PHASOR_ENABLE), FALSE);
|
EnableWindow(GetDlgItem(window, IDC_PHASOR_ENABLE), FALSE); // Disable Phasor (slot 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_uZ80InSlot5)
|
if (g_uMouseInSlot4 || g_CPMChoice == CPM_SLOT4 || g_CPMChoice == CPM_SLOT5)
|
||||||
{
|
{
|
||||||
EnableWindow(GetDlgItem(window, IDC_MB_ENABLE), FALSE);
|
EnableWindow(GetDlgItem(window, IDC_MB_ENABLE), FALSE); // Disable Mockingboard (slot 4 & 5)
|
||||||
}
|
}
|
||||||
|
|
||||||
afterclose = 0;
|
afterclose = 0;
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
extern HWND hwConfigTab;
|
extern HWND hwConfigTab;
|
||||||
extern HWND hwAdvancedTab;
|
extern HWND hwAdvancedTab;
|
||||||
|
|
||||||
|
enum CPMCHOICE {CPM_SLOT4=0, CPM_SLOT5, CPM_UNPLUGGED, CPM_UNAVAILABLE, _CPM_MAX_CHOICES};
|
||||||
|
extern CPMCHOICE g_CPMChoice;
|
||||||
|
|
||||||
|
|
||||||
// Prototypes
|
// Prototypes
|
||||||
|
|
|
@ -34,11 +34,11 @@ BYTE __stdcall CPMZ80_IOWrite(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULO
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
void ConfigureSoftcard(LPBYTE pCxRomPeripheral, UINT uSlot, UINT bEnable)
|
void ConfigureSoftcard(LPBYTE pCxRomPeripheral, UINT uSlot)
|
||||||
{
|
{
|
||||||
memset(pCxRomPeripheral + (uSlot << 8), 0xFF, APPLE_SLOT_SIZE);
|
memset(pCxRomPeripheral + (uSlot << 8), 0xFF, APPLE_SLOT_SIZE);
|
||||||
|
|
||||||
g_uCPMZ80Slot = uSlot;
|
g_uCPMZ80Slot = uSlot;
|
||||||
|
|
||||||
RegisterIoHandler(uSlot, CPMZ80_IONull, CPMZ80_IONull, CPMZ80_IONull, bEnable ? CPMZ80_IOWrite : NULL, NULL, NULL);
|
RegisterIoHandler(uSlot, CPMZ80_IONull, CPMZ80_IONull, CPMZ80_IONull, CPMZ80_IOWrite, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,4 +13,4 @@
|
||||||
// Emula a CPU Z80
|
// Emula a CPU Z80
|
||||||
|
|
||||||
// Protótipos
|
// Protótipos
|
||||||
void ConfigureSoftcard(LPBYTE pCxRomPeripheral, UINT uSlot, UINT bEnable);
|
void ConfigureSoftcard(LPBYTE pCxRomPeripheral, UINT uSlot);
|
||||||
|
|
Loading…
Add table
Reference in a new issue