2006-02-25 20:50:29 +00:00
|
|
|
#pragma once
|
|
|
|
|
2019-06-28 20:34:34 +00:00
|
|
|
const double _14M_NTSC = (157500000.0 / 11.0); // 14.3181818... * 10^6
|
|
|
|
const double _14M_PAL = 14.25045e6; // UTAIIe:3-17
|
2019-06-28 20:45:43 +00:00
|
|
|
const double CLK_6502_NTSC = (_14M_NTSC * 65.0) / (65.0*14.0+2.0); // 65 cycles per 912 14M clocks
|
|
|
|
const double CLK_6502_PAL = (_14M_PAL * 65.0) / (65.0*14.0+2.0);
|
2006-05-02 21:56:28 +00:00
|
|
|
//const double CLK_6502 = 23 * 44100; // 1014300
|
2006-02-25 20:50:29 +00:00
|
|
|
|
2007-05-28 11:16:42 +00:00
|
|
|
#define NUM_SLOTS 8
|
|
|
|
|
2006-02-25 20:50:29 +00:00
|
|
|
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
|
|
|
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
|
|
|
|
|
|
|
#define RAMWORKS // 8MB RamWorks III support
|
|
|
|
|
|
|
|
// Use a base freq so that DirectX (or sound h/w) doesn't have to up/down-sample
|
|
|
|
// Assume base freqs are 44.1KHz & 48KHz
|
|
|
|
const DWORD SPKR_SAMPLE_RATE = 44100;
|
|
|
|
|
2006-06-12 22:06:50 +00:00
|
|
|
enum AppMode_e
|
|
|
|
{
|
|
|
|
MODE_LOGO = 0
|
|
|
|
, MODE_PAUSED
|
2017-02-25 22:32:46 +00:00
|
|
|
, MODE_RUNNING // 6502 is running at normal/full speed (Debugger breakpoints may or may not be active)
|
2011-02-21 23:54:09 +00:00
|
|
|
, MODE_DEBUG // 6502 is paused
|
2017-02-25 22:32:46 +00:00
|
|
|
, MODE_STEPPING // 6502 is running at normal/full speed (Debugger breakpoints always active)
|
2006-06-12 22:06:50 +00:00
|
|
|
};
|
|
|
|
|
2006-02-25 20:50:29 +00:00
|
|
|
#define SPEED_MIN 0
|
|
|
|
#define SPEED_NORMAL 10
|
|
|
|
#define SPEED_MAX 40
|
|
|
|
|
2014-07-29 14:56:55 +00:00
|
|
|
#define DRAW_BACKGROUND (1 << 0)
|
|
|
|
#define DRAW_LEDS (1 << 1)
|
|
|
|
#define DRAW_TITLE (1 << 2)
|
|
|
|
#define DRAW_BUTTON_DRIVES (1 << 3)
|
|
|
|
#define DRAW_DISK_STATUS (1 << 4)
|
2006-02-25 20:50:29 +00:00
|
|
|
|
|
|
|
#define BTN_HELP 0
|
|
|
|
#define BTN_RUN 1
|
|
|
|
#define BTN_DRIVE1 2
|
|
|
|
#define BTN_DRIVE2 3
|
|
|
|
#define BTN_DRIVESWAP 4
|
|
|
|
#define BTN_FULLSCR 5
|
|
|
|
#define BTN_DEBUG 6
|
|
|
|
#define BTN_SETUP 7
|
2007-05-28 11:16:42 +00:00
|
|
|
|
2006-06-26 16:59:48 +00:00
|
|
|
// TODO: Move to StringTable.h
|
2007-05-28 11:16:42 +00:00
|
|
|
#define TITLE_APPLE_2 TEXT("Apple ][ Emulator")
|
|
|
|
#define TITLE_APPLE_2_PLUS TEXT("Apple ][+ Emulator")
|
2020-04-02 19:17:32 +00:00
|
|
|
#define TITLE_APPLE_2_JPLUS TEXT("Apple ][ J-Plus Emulator")
|
2007-05-28 11:16:42 +00:00
|
|
|
#define TITLE_APPLE_2E TEXT("Apple //e Emulator")
|
|
|
|
#define TITLE_APPLE_2E_ENHANCED TEXT("Enhanced Apple //e Emulator")
|
2010-12-14 18:00:10 +00:00
|
|
|
#define TITLE_APPLE_2C TEXT("Apple //e Emulator")
|
|
|
|
#define TITLE_APPLE_2D TEXT("Apple )(d Virtual Debug Hardware")
|
2008-06-20 23:47:25 +00:00
|
|
|
#define TITLE_PRAVETS_82 TEXT("Pravets 82 Emulator")
|
2009-01-09 21:59:22 +00:00
|
|
|
#define TITLE_PRAVETS_8M TEXT("Pravets 8M Emulator")
|
2008-06-20 23:47:25 +00:00
|
|
|
#define TITLE_PRAVETS_8A TEXT("Pravets 8A Emulator")
|
2016-10-22 22:20:23 +00:00
|
|
|
#define TITLE_TK3000_2E TEXT("TK3000 //e Emulator")
|
2006-06-27 02:34:46 +00:00
|
|
|
|
2009-02-18 16:03:10 +00:00
|
|
|
#define TITLE_PAUSED TEXT("* PAUSED *")
|
2006-06-26 16:59:48 +00:00
|
|
|
#define TITLE_STEPPING TEXT("Stepping")
|
2006-02-25 20:50:29 +00:00
|
|
|
|
2006-06-25 03:41:52 +00:00
|
|
|
// Configuration
|
2009-01-06 22:02:31 +00:00
|
|
|
#define REG_CONFIG "Configuration"
|
2007-05-28 11:16:42 +00:00
|
|
|
#define REGVALUE_APPLE2_TYPE "Apple2 Type"
|
2016-02-14 16:01:30 +00:00
|
|
|
#define REGVALUE_CPU_TYPE "CPU Type"
|
2014-07-27 21:31:00 +00:00
|
|
|
#define REGVALUE_OLD_APPLE2_TYPE "Computer Emulation" // Deprecated
|
|
|
|
#define REGVALUE_CONFIRM_REBOOT "Confirm Reboot" // Added at 1.24.1 PageConfig
|
2017-10-02 21:22:26 +00:00
|
|
|
#define REGVALUE_FS_SHOW_SUBUNIT_STATUS "Full-screen show subunit status"
|
2019-11-24 15:57:33 +00:00
|
|
|
#define REGVALUE_SOUND_EMULATION "Sound Emulation"
|
2006-06-26 16:59:48 +00:00
|
|
|
#define REGVALUE_SPKR_VOLUME "Speaker Volume"
|
|
|
|
#define REGVALUE_MB_VOLUME "Mockingboard Volume"
|
2006-02-25 20:50:29 +00:00
|
|
|
#define REGVALUE_SAVESTATE_FILENAME "Save State Filename"
|
|
|
|
#define REGVALUE_SAVE_STATE_ON_EXIT "Save State On Exit"
|
2006-06-26 16:59:48 +00:00
|
|
|
#define REGVALUE_HDD_ENABLED "Harddisk Enable"
|
2017-07-03 20:48:21 +00:00
|
|
|
#define REGVALUE_JOYSTICK0_EMU_TYPE "Joystick0 Emu Type v3" // GH#434: Added at 1.26.3.0 (previously was "Joystick0 Emu Type")
|
|
|
|
#define REGVALUE_JOYSTICK1_EMU_TYPE "Joystick1 Emu Type v3" // GH#434: Added at 1.26.3.0 (previously was "Joystick1 Emu Type")
|
|
|
|
#define REGVALUE_OLD_JOYSTICK0_EMU_TYPE2 "Joystick0 Emu Type" // GH#434: Deprecated from 1.26.3.0 (previously was "Joystick 0 Emulation")
|
|
|
|
#define REGVALUE_OLD_JOYSTICK1_EMU_TYPE2 "Joystick1 Emu Type" // GH#434: Deprecated from 1.26.3.0 (previously was "Joystick 1 Emulation")
|
|
|
|
#define REGVALUE_OLD_JOYSTICK0_EMU_TYPE1 "Joystick 0 Emulation" // Deprecated from 1.24.0
|
|
|
|
#define REGVALUE_OLD_JOYSTICK1_EMU_TYPE1 "Joystick 1 Emulation" // Deprecated from 1.24.0
|
2006-06-26 16:59:48 +00:00
|
|
|
#define REGVALUE_PDL_XTRIM "PDL X-Trim"
|
|
|
|
#define REGVALUE_PDL_YTRIM "PDL Y-Trim"
|
2007-08-06 21:38:35 +00:00
|
|
|
#define REGVALUE_SCROLLLOCK_TOGGLE "ScrollLock Toggle"
|
2013-12-31 22:40:10 +00:00
|
|
|
#define REGVALUE_CURSOR_CONTROL "Joystick Cursor Control"
|
|
|
|
#define REGVALUE_CENTERING_CONTROL "Joystick Centering Control"
|
2013-12-06 21:10:41 +00:00
|
|
|
#define REGVALUE_AUTOFIRE "Autofire"
|
2020-01-18 19:06:06 +00:00
|
|
|
#define REGVALUE_SWAP_BUTTONS_0_AND_1 "Swap buttons 0 and 1"
|
2008-05-17 23:20:33 +00:00
|
|
|
#define REGVALUE_MOUSE_CROSSHAIR "Mouse crosshair"
|
2008-05-18 18:23:25 +00:00
|
|
|
#define REGVALUE_MOUSE_RESTRICT_TO_WINDOW "Mouse restrict to window"
|
2008-02-22 21:28:35 +00:00
|
|
|
#define REGVALUE_THE_FREEZES_F8_ROM "The Freeze's F8 Rom"
|
2008-06-20 23:47:25 +00:00
|
|
|
#define REGVALUE_CIDERPRESSLOC "CiderPress Location"
|
2012-01-22 13:46:36 +00:00
|
|
|
#define REGVALUE_CPM_CONFIG "CPM Config"
|
2009-01-09 21:59:22 +00:00
|
|
|
#define REGVALUE_DUMP_TO_PRINTER "Dump to printer"
|
|
|
|
#define REGVALUE_CONVERT_ENCODING "Convert printer encoding for clones"
|
|
|
|
#define REGVALUE_FILTER_UNPRINTABLE "Filter unprintable characters"
|
|
|
|
#define REGVALUE_PRINTER_FILENAME "Printer Filename"
|
|
|
|
#define REGVALUE_PRINTER_APPEND "Append to printer file"
|
|
|
|
#define REGVALUE_PRINTER_IDLE_LIMIT "Printer idle limit"
|
2009-02-14 03:32:24 +00:00
|
|
|
#define REGVALUE_VIDEO_MODE "Video Emulation"
|
2019-02-24 15:59:35 +00:00
|
|
|
#define REGVALUE_VIDEO_STYLE "Video Style" // GH#616: Added at 1.28.2
|
|
|
|
#define REGVALUE_VIDEO_HALF_SCAN_LINES "Half Scan Lines" // GH#616: Deprecated from 1.28.2
|
2009-02-14 03:32:24 +00:00
|
|
|
#define REGVALUE_VIDEO_MONO_COLOR "Monochrome Color"
|
2019-06-28 20:34:34 +00:00
|
|
|
#define REGVALUE_VIDEO_REFRESH_RATE "Video Refresh Rate"
|
2009-10-07 21:38:42 +00:00
|
|
|
#define REGVALUE_SERIAL_PORT_NAME "Serial Port Name"
|
2010-01-17 18:43:06 +00:00
|
|
|
#define REGVALUE_ENHANCE_DISK_SPEED "Enhance Disk Speed"
|
2012-03-20 23:17:06 +00:00
|
|
|
#define REGVALUE_CUSTOM_SPEED "Custom Speed"
|
|
|
|
#define REGVALUE_EMULATION_SPEED "Emulation Speed"
|
2012-12-29 14:53:52 +00:00
|
|
|
#define REGVALUE_WINDOW_SCALE "Window Scale"
|
2019-09-15 19:37:20 +00:00
|
|
|
#define REGVALUE_UTHERNET_ACTIVE "Uthernet Active"
|
|
|
|
#define REGVALUE_UTHERNET_INTERFACE "Uthernet Interface"
|
2018-10-26 18:23:30 +00:00
|
|
|
#define REGVALUE_SLOT0 "Slot 0"
|
2012-03-20 23:17:06 +00:00
|
|
|
#define REGVALUE_SLOT1 "Slot 1"
|
|
|
|
#define REGVALUE_SLOT2 "Slot 2"
|
|
|
|
#define REGVALUE_SLOT3 "Slot 3"
|
|
|
|
#define REGVALUE_SLOT4 "Slot 4"
|
|
|
|
#define REGVALUE_SLOT5 "Slot 5"
|
|
|
|
#define REGVALUE_SLOT6 "Slot 6"
|
|
|
|
#define REGVALUE_SLOT7 "Slot 7"
|
|
|
|
#define REGVALUE_SLOTAUX "Slot Auxilary"
|
2013-08-08 21:13:31 +00:00
|
|
|
#define REGVALUE_VERSION "Version"
|
2006-02-25 20:50:29 +00:00
|
|
|
|
2006-06-25 03:41:52 +00:00
|
|
|
// Preferences
|
2010-01-17 18:43:06 +00:00
|
|
|
#define REG_PREFS "Preferences"
|
2008-06-20 23:47:25 +00:00
|
|
|
#define REGVALUE_PREF_START_DIR "Starting Directory"
|
2009-01-06 22:02:31 +00:00
|
|
|
#define REGVALUE_PREF_LAST_DISK_1 "Last Disk Image 1"
|
|
|
|
#define REGVALUE_PREF_LAST_DISK_2 "Last Disk Image 2"
|
2010-01-17 18:43:06 +00:00
|
|
|
#define REGVALUE_PREF_WINDOW_X_POS "Window X-Position"
|
|
|
|
#define REGVALUE_PREF_WINDOW_Y_POS "Window Y-Position"
|
|
|
|
#define REGVALUE_PREF_HDV_START_DIR "HDV Starting Directory"
|
|
|
|
#define REGVALUE_PREF_LAST_HARDDISK_1 "Last Harddisk Image 1"
|
|
|
|
#define REGVALUE_PREF_LAST_HARDDISK_2 "Last Harddisk Image 2"
|
2006-06-25 03:41:52 +00:00
|
|
|
|
2006-02-25 20:50:29 +00:00
|
|
|
#define WM_USER_BENCHMARK WM_USER+1
|
|
|
|
#define WM_USER_RESTART WM_USER+2
|
|
|
|
#define WM_USER_SAVESTATE WM_USER+3
|
|
|
|
#define WM_USER_LOADSTATE WM_USER+4
|
2014-08-25 15:35:43 +00:00
|
|
|
#define VK_SNAPSHOT_560 WM_USER+5 // PrintScreen
|
|
|
|
#define VK_SNAPSHOT_280 WM_USER+6 // PrintScreen+Shift
|
2009-01-26 15:24:40 +00:00
|
|
|
#define WM_USER_TCP_SERIAL WM_USER+7
|
2010-01-17 18:43:06 +00:00
|
|
|
#define WM_USER_BOOT WM_USER+8
|
2012-12-29 14:53:52 +00:00
|
|
|
#define WM_USER_FULLSCREEN WM_USER+9
|
2014-08-25 15:35:43 +00:00
|
|
|
#define VK_SNAPSHOT_TEXT WM_USER+10 // PrintScreen+Ctrl
|
2008-06-20 23:47:25 +00:00
|
|
|
|
2007-08-06 21:38:35 +00:00
|
|
|
enum eIRQSRC {IS_6522=0, IS_SPEECH, IS_SSC, IS_MOUSE};
|
2007-05-28 11:16:42 +00:00
|
|
|
|
|
|
|
//
|
2010-12-14 18:00:10 +00:00
|
|
|
#define APPLE2P_MASK 0x01
|
|
|
|
/*
|
|
|
|
][ 0
|
|
|
|
][+ 1
|
|
|
|
//e 10
|
|
|
|
//e+ 11
|
|
|
|
//c 20
|
|
|
|
//d 40
|
|
|
|
*/
|
2007-05-28 11:16:42 +00:00
|
|
|
#define APPLE2E_MASK 0x10
|
|
|
|
#define APPLE2C_MASK 0x20
|
2010-12-14 18:00:10 +00:00
|
|
|
#define APPLE2D_MASK 0x40
|
2008-06-20 23:47:25 +00:00
|
|
|
#define APPLECLONE_MASK 0x100
|
2007-05-28 11:16:42 +00:00
|
|
|
|
|
|
|
#define IS_APPLE2 ((g_Apple2Type & (APPLE2E_MASK|APPLE2C_MASK)) == 0)
|
2019-04-06 10:18:48 +00:00
|
|
|
#define IS_APPLE2E() (g_Apple2Type & APPLE2E_MASK)
|
|
|
|
#define IS_APPLE2C() (g_Apple2Type & APPLE2C_MASK)
|
2012-03-20 23:17:06 +00:00
|
|
|
#define IS_CLONE() (g_Apple2Type & APPLECLONE_MASK)
|
2007-05-28 11:16:42 +00:00
|
|
|
|
2015-02-13 22:40:53 +00:00
|
|
|
// NB. These get persisted to the Registry & save-state file, so don't change the values for these enums!
|
2007-05-28 11:16:42 +00:00
|
|
|
enum eApple2Type {
|
|
|
|
A2TYPE_APPLE2=0,
|
|
|
|
A2TYPE_APPLE2PLUS,
|
2020-04-02 19:17:32 +00:00
|
|
|
A2TYPE_APPLE2JPLUS,
|
2007-05-28 11:16:42 +00:00
|
|
|
A2TYPE_APPLE2E=APPLE2E_MASK,
|
2012-09-16 21:53:07 +00:00
|
|
|
A2TYPE_APPLE2EENHANCED,
|
2008-06-20 23:47:25 +00:00
|
|
|
A2TYPE_UNDEFINED,
|
2010-12-14 18:00:10 +00:00
|
|
|
A2TYPE_APPLE2C=APPLE2C_MASK,
|
|
|
|
A2TYPE_APPLE2D=APPLE2D_MASK,
|
2017-05-08 21:32:01 +00:00
|
|
|
|
|
|
|
// ][ clones start here:
|
2008-06-20 23:47:25 +00:00
|
|
|
A2TYPE_CLONE=APPLECLONE_MASK,
|
2016-04-12 22:21:05 +00:00
|
|
|
A2TYPE_PRAVETS8M, // Apple ][ clone
|
2017-05-08 21:32:01 +00:00
|
|
|
A2TYPE_PRAVETS82, // Apple ][ clone
|
|
|
|
// (Gap for more Apple ][ clones)
|
|
|
|
A2TYPE_CLONE_A2_MAX,
|
|
|
|
|
|
|
|
// //e clones start here:
|
|
|
|
A2TYPE_CLONE_A2E=A2TYPE_CLONE|APPLE2E_MASK,
|
|
|
|
A2TYPE_BAD_PRAVETS82=A2TYPE_CLONE|APPLE2E_MASK, // Wrongly tagged as Apple //e clone (< AppleWin 1.26)
|
|
|
|
A2TYPE_BAD_PRAVETS8M, // Wrongly tagged as Apple //e clone (< AppleWin 1.26)
|
2016-04-12 22:21:05 +00:00
|
|
|
A2TYPE_PRAVETS8A, // Apple //e clone
|
2016-10-22 22:20:23 +00:00
|
|
|
A2TYPE_TK30002E, // Apple //e enhanced clone
|
2017-05-08 21:32:01 +00:00
|
|
|
// (Gap for more Apple //e clones)
|
2007-05-28 11:16:42 +00:00
|
|
|
A2TYPE_MAX
|
2007-08-06 21:38:35 +00:00
|
|
|
};
|
|
|
|
|
2018-11-04 15:07:46 +00:00
|
|
|
inline bool IsApple2Original(eApple2Type type) // Apple ][
|
|
|
|
{
|
|
|
|
return type == A2TYPE_APPLE2;
|
|
|
|
}
|
|
|
|
|
2020-04-02 19:17:32 +00:00
|
|
|
inline bool IsApple2Plus(eApple2Type type) // Apple ][,][+,][J-Plus
|
2012-05-06 22:14:03 +00:00
|
|
|
{
|
2018-11-04 17:29:22 +00:00
|
|
|
return ((type & (APPLE2E_MASK|APPLE2C_MASK)) == 0) && !(type & APPLECLONE_MASK);
|
2012-05-06 22:14:03 +00:00
|
|
|
}
|
|
|
|
|
2020-04-02 19:17:32 +00:00
|
|
|
inline bool IsApple2JPlus(eApple2Type type) // Apple ][J-Plus
|
|
|
|
{
|
|
|
|
return type == A2TYPE_APPLE2JPLUS;
|
|
|
|
}
|
|
|
|
|
2012-05-06 22:14:03 +00:00
|
|
|
inline bool IsClone(eApple2Type type)
|
|
|
|
{
|
|
|
|
return (type & APPLECLONE_MASK) != 0;
|
|
|
|
}
|
|
|
|
|
2020-04-02 19:17:32 +00:00
|
|
|
inline bool IsApple2PlusOrClone(eApple2Type type) // Apple ][,][+,][J-Plus or clone ][,][+
|
2018-10-26 18:23:30 +00:00
|
|
|
{
|
2018-11-04 17:29:22 +00:00
|
|
|
return (type & (APPLE2E_MASK|APPLE2C_MASK)) == 0;
|
2018-10-26 18:23:30 +00:00
|
|
|
}
|
|
|
|
|
2012-09-16 21:53:07 +00:00
|
|
|
extern eApple2Type g_Apple2Type;
|
2019-04-06 10:18:48 +00:00
|
|
|
inline bool IsEnhancedIIE(void)
|
2012-09-16 21:53:07 +00:00
|
|
|
{
|
2019-04-06 10:18:48 +00:00
|
|
|
return ( (g_Apple2Type == A2TYPE_APPLE2EENHANCED) || (g_Apple2Type == A2TYPE_TK30002E) );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline bool IsEnhancedIIEorIIC(void)
|
|
|
|
{
|
|
|
|
return ( (g_Apple2Type == A2TYPE_APPLE2EENHANCED) || (g_Apple2Type == A2TYPE_TK30002E) || IS_APPLE2C() );
|
2012-09-16 21:53:07 +00:00
|
|
|
}
|
|
|
|
|
2007-08-06 21:38:35 +00:00
|
|
|
enum eBUTTON {BUTTON0=0, BUTTON1};
|
2008-06-20 23:47:25 +00:00
|
|
|
|
2007-08-06 21:38:35 +00:00
|
|
|
enum eBUTTONSTATE {BUTTON_UP=0, BUTTON_DOWN};
|
2017-10-28 20:59:48 +00:00
|
|
|
|
|
|
|
enum {IDEVENT_TIMER_MOUSE=1, IDEVENT_TIMER_100MSEC};
|