static void setid (struct uae_input_device *uid, int i, int slot, int sub, int port, int evt)
{
uid[i].eventid[slot][sub] = evt;
- uid[i].port[slot][sub] = port;
+ uid[i].port[slot][sub] = port + 1;
+}
+static void setid (struct uae_input_device *uid, int i, int slot, int sub, int port, int evt, int af)
+{
+ setid (uid, i, slot, sub, port, evt);
+ uid[i].flags[slot][sub] &= ~(ID_FLAG_AUTOFIRE | ID_FLAG_TOGGLE);
+ if (af >= JPORT_AF_NORMAL)
+ uid[i].flags[slot][sub] |= ID_FLAG_AUTOFIRE;
+ if (af == JPORT_AF_TOGGLE)
+ uid[i].flags[slot][sub] |= ID_FLAG_TOGGLE;
}
-int input_get_default_mouse (struct uae_input_device *uid, int i, int port)
+int input_get_default_mouse (struct uae_input_device *uid, int i, int port, int af)
{
struct didata *did;
setid (uid, i, ID_AXIS_OFFSET + 0, 0, port, port ? INPUTEVENT_MOUSE2_HORIZ : INPUTEVENT_MOUSE1_HORIZ);
setid (uid, i, ID_AXIS_OFFSET + 1, 0, port, port ? INPUTEVENT_MOUSE2_VERT : INPUTEVENT_MOUSE1_VERT);
setid (uid, i, ID_AXIS_OFFSET + 2, 0, port, port ? 0 : INPUTEVENT_MOUSE1_WHEEL);
- setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON);
+ setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af);
setid (uid, i, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON);
setid (uid, i, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_3RD_BUTTON : INPUTEVENT_JOY1_3RD_BUTTON);
if (port == 0) { /* map back and forward to ALT+LCUR and ALT+RCUR */
return 0;
}
-int input_get_default_lightpen (struct uae_input_device *uid, int i, int port)
+int input_get_default_lightpen (struct uae_input_device *uid, int i, int port, int af)
{
struct didata *did;
return 0;
}
-int input_get_default_joystick (struct uae_input_device *uid, int i, int port, int mode)
+int input_get_default_joystick (struct uae_input_device *uid, int i, int port, int af, int mode)
{
int j;
struct didata *did;
setid (uid, i, ID_AXIS_OFFSET + 1, 0, port, v);
if (port >= 2) {
- setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port == 3 ? INPUTEVENT_PAR_JOY2_FIRE_BUTTON : INPUTEVENT_PAR_JOY1_FIRE_BUTTON);
+ setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port == 3 ? INPUTEVENT_PAR_JOY2_FIRE_BUTTON : INPUTEVENT_PAR_JOY1_FIRE_BUTTON, af);
} else {
- setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON);
+ setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af);
if (isrealbutton (did, 1))
setid (uid, i, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON);
if (isrealbutton (did, 2))
}
}
if (mode == JSEM_MODE_JOYSTICK_CD32) {
- setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_CD32_RED : INPUTEVENT_JOY1_CD32_RED);
- setid (uid, i, ID_BUTTON_OFFSET + 0, 1, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON);
+ setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_CD32_RED : INPUTEVENT_JOY1_CD32_RED, af);
+ setid (uid, i, ID_BUTTON_OFFSET + 0, 1, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af);
if (isrealbutton (did, 1)) {
setid (uid, i, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_CD32_BLUE : INPUTEVENT_JOY1_CD32_BLUE);
setid (uid, i, ID_BUTTON_OFFSET + 1, 1, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON);
return 0;
}
-int input_get_default_joystick_analog (struct uae_input_device *uid, int i, int port)
+int input_get_default_joystick_analog (struct uae_input_device *uid, int i, int port, int af)
{
int j;
struct didata *did;
did = &di_joystick[i];
setid (uid, i, ID_AXIS_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_HORIZ_POT : INPUTEVENT_JOY1_HORIZ_POT);
setid (uid, i, ID_AXIS_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_VERT_POT : INPUTEVENT_JOY1_VERT_POT);
- setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_LEFT : INPUTEVENT_JOY1_LEFT);
+ setid (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_LEFT : INPUTEVENT_JOY1_LEFT, af);
if (isrealbutton (did, 1))
setid (uid, i, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_RIGHT : INPUTEVENT_JOY1_RIGHT);
if (isrealbutton (did, 2))
{ -1, 0 }
};
-static int kb_np[] = { DIK_NUMPAD4, -1, DIK_NUMPAD6, -1, DIK_NUMPAD8, -1, DIK_NUMPAD2, -1, DIK_NUMPAD0, DIK_NUMPAD5, -1, DIK_DECIMAL, DIK_DIVIDE, DIK_NUMPADENTER, -1, -1 };
+static int kb_np[] = { DIK_NUMPAD4, -1, DIK_NUMPAD6, -1, DIK_NUMPAD8, -1, DIK_NUMPAD2, -1, DIK_NUMPAD0, DIK_NUMPAD5, -1, DIK_DECIMAL, DIK_NUMPADENTER, -1, -1 };
static int kb_ck[] = { DIK_LEFT, -1, DIK_RIGHT, -1, DIK_UP, -1, DIK_DOWN, -1, DIK_RCONTROL, DIK_RMENU, -1, DIK_RSHIFT, -1, -1 };
static int kb_se[] = { DIK_A, -1, DIK_D, -1, DIK_W, -1, DIK_S, -1, DIK_LMENU, -1, DIK_LSHIFT, -1, -1 };
FONT 8, "MS Sans Serif", 0, 0, 0x1\r
BEGIN\r
GROUPBOX "Mouse and Joystick settings",IDC_STATIC,0,3,299,181\r
- RTEXT "Port 0:",IDC_STATIC,11,16,25,15,SS_CENTERIMAGE\r
+ RTEXT "Port 1:",IDC_STATIC,11,16,25,15,SS_CENTERIMAGE\r
COMBOBOX IDC_PORT0_JOYS,45,17,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
COMBOBOX IDC_PORT0_JOYSMODE,127,35,87,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Test [] Test Port 0 (mouse) configuration.",IDC_PORT0_TEST,218,35,34,14\r
- PUSHBUTTON "Remap [] Remap Port 0 configurarion.",IDC_PORT0_REMAP,256,35,31,14\r
- RTEXT "Port 1:",IDC_STATIC,11,52,25,15,SS_CENTERIMAGE\r
+ PUSHBUTTON "Test [] Test Port 1 (mouse) configuration.",IDC_PORT0_TEST,218,35,34,14\r
+ PUSHBUTTON "Remap [] Remap Port 1 configurarion.",IDC_PORT0_REMAP,256,35,31,14\r
+ RTEXT "Port 2:",IDC_STATIC,11,52,25,15,SS_CENTERIMAGE\r
COMBOBOX IDC_PORT1_JOYS,45,53,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Swap ports [] Swap ports 0 and 1.",IDC_SWAP,118,93,53,14\r
+ PUSHBUTTON "Swap ports [] Swap ports 1 and 2.",IDC_SWAP,118,93,53,14\r
COMBOBOX IDC_PORT1_JOYSMODE,127,70,88,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Test [] Test Port 1 (joystick) configuration.",IDC_PORT1_TEST,218,70,34,14\r
- PUSHBUTTON "Remap [] Remap Port 1 configuration.",IDC_PORT1_REMAP,256,70,31,14\r
+ PUSHBUTTON "Test [] Test Port 2 (joystick) configuration.",IDC_PORT1_TEST,218,70,34,14\r
+ PUSHBUTTON "Remap [] Remap Port 2 configuration.",IDC_PORT1_REMAP,256,70,31,14\r
LTEXT "Parallel port joystick adapter",IDC_STATIC,10,96,99,15,SS_CENTERIMAGE\r
LTEXT "X-Arcade layout information []#1",IDC_STATIC,184,96,109,15,SS_NOTIFY | SS_CENTERIMAGE\r
COMBOBOX IDC_PORT2_JOYS,45,114,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Test [] Test Parallel port joystick port 0 configuration.",IDC_PORT2_TEST,196,131,44,14\r
- PUSHBUTTON "Remap [] Remap Parallel port joystick port 0 configurarion.",IDC_PORT2_REMAP,245,131,41,14\r
+ PUSHBUTTON "Test [] Test Parallel port joystick port 1 configuration.",IDC_PORT2_TEST,196,131,44,14\r
+ PUSHBUTTON "Remap [] Remap Parallel port joystick port 1 configurarion.",IDC_PORT2_REMAP,245,131,41,14\r
COMBOBOX IDC_PORT3_JOYS,45,149,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
- PUSHBUTTON "Test [] Test Parallel port joystick 1 configuration.",IDC_PORT3_TEST,196,165,44,14\r
- PUSHBUTTON "Remap [] Remap Parallel port joystick port 1 configurarion.",IDC_PORT3_REMAP,245,165,41,14\r
+ PUSHBUTTON "Test [] Test Parallel port joystick 2 configuration.",IDC_PORT3_TEST,196,165,44,14\r
+ PUSHBUTTON "Remap [] Remap Parallel port joystick port 2 configurarion.",IDC_PORT3_REMAP,245,165,41,14\r
GROUPBOX "Mouse extra settings",IDC_STATIC,0,186,299,60\r
RTEXT "Mouse speed:",IDC_STATIC,17,200,56,10,SS_CENTERIMAGE\r
RTEXT "Magic Mouse cursor mode:",IDC_STATIC,17,217,138,10,SS_CENTERIMAGE\r
EDITTEXT IDC_INPUTDEADZONE,88,195,25,12,ES_NUMBER\r
RTEXT "Digital joy-mouse speed:",-1,117,196,88,10,SS_CENTERIMAGE\r
EDITTEXT IDC_INPUTSPEEDD,210,195,25,12,ES_NUMBER\r
- RTEXT "Autofire rate (lines)",-1,4,212,79,10,SS_CENTERIMAGE\r
+ RTEXT "Autofire rate (lines):",-1,4,212,79,10,SS_CENTERIMAGE\r
EDITTEXT IDC_INPUTAUTOFIRERATE,88,210,25,12,ES_NUMBER\r
RTEXT "Analog joy-mouse speed:",-1,117,212,88,10,SS_CENTERIMAGE\r
EDITTEXT IDC_INPUTSPEEDA,210,211,25,12,ES_NUMBER\r
IDS_QS_CD "CD"\r
IDS_QS_CD_AUTO "Autodetect"\r
IDS_QS_CD_IMAGE "Image file"\r
- IDS_REMAPTITLE "Input captured. F12 = Exit. F11 = Skip curent event in Remap mode."\r
+ IDS_REMAPTITLE "Input captured. F12 = Exit. F11 = Skip current event in Remap mode."\r
IDS_FILTER_NOOVERLAYS "No overlays available"\r
END\r
\r
#define WINUAEPUBLICBETA 1
#define LANG_DLL 1
-#define WINUAEBETA L"6"
-#define WINUAEDATE MAKEBD(2010, 6, 3)
+#define WINUAEBETA L"7"
+#define WINUAEDATE MAKEBD(2010, 6, 5)
#define WINUAEEXTRA L""
#define WINUAEREV L""
if (port > 0) {
TCHAR tmp[256];
_tcscpy (tmp, name);
- name[0] = 0;
- _tcscat (name, L"[ ");
- _tcscat (name, tmp);
- _tcscat (name, L" ]");
+ _stprintf (name, L"[PORT%d] %s", port, tmp);
}
- ListView_SetItemState (list, index, port > 0 ? LVIS_DROPHILITED : 0, LVIS_DROPHILITED);
-
ListView_SetItemText (list, index, 1, custom[0] ? custom : name);
ListView_SetItemText (list, index, 2, af);
ListView_SetItemText (list, index, 3, toggle);
listview_column_width[0] = width;
entry++;
}
- listview_column_width [1] = 260;
- listview_column_width [2] = 65;
- listview_column_width [3] = 65;
- listview_column_width [4] = 30;
+ listview_column_width[1] = 260;
+ listview_column_width[2] = 65;
+ listview_column_width[3] = 65;
+ listview_column_width[4] = 30;
update_listview_input (hDlg);
} else if (lv_type == LV_INPUTMAP) {
- listview_column_width [0] = 200;
- listview_column_width [1] = 200;
+ listview_column_width[0] = 200;
+ listview_column_width[1] = 200;
update_listview_inputmap (hDlg);
} else if (lv_type == LV_DISK) {
if(width > listview_column_width[2])
listview_column_width[2] = width;
- listview_column_width [3] = 150;
+ listview_column_width[3] = 150;
ListView_SetItemText(list, result, 3, rootdir);
width = ListView_GetStringWidth(list, rootdir) + 10;
if(width > listview_column_width[3])
{
TCHAR name1[256], name2[256];
TCHAR custom1[MAX_DPATH], tmp1[MAX_DPATH];
- int cnt, index, af, aftmp;
+ int cnt, index, af, aftmp, port;
- if (input_selected_widget < 0 || workprefs.input_selected_setting == GAMEPORT_INPUT_SETTINGS) {
- EnableWindow (GetDlgItem (hDlg, IDC_INPUTAMIGA), FALSE);
- } else {
- EnableWindow (GetDlgItem (hDlg, IDC_INPUTAMIGA), TRUE);
- }
SendDlgItemMessage (hDlg, IDC_INPUTAMIGA, CB_RESETCONTENT, 0, 0L);
SendDlgItemMessage (hDlg, IDC_INPUTAMIGA, CB_ADDSTRING, 0, (LPARAM)szNone);
WIN32GUI_LoadUIString (IDS_INPUT_CUSTOMEVENT, tmp1, MAX_DPATH);
SendDlgItemMessage (hDlg, IDC_INPUTAMIGA, CB_ADDSTRING, 0, (LPARAM)tmp1);
- index = 0; af = 0;
+ index = 0; af = 0; port = 0;
if (input_selected_widget >= 0) {
- inputdevice_get_mapped_name (input_selected_device, input_selected_widget, NULL, NULL, name1, custom1, input_selected_sub_num);
+ inputdevice_get_mapped_name (input_selected_device, input_selected_widget, NULL, &port, name1, custom1, input_selected_sub_num);
cnt = 2;
while(inputdevice_iterate (input_selected_device, input_selected_widget, name2, &aftmp)) {
- free (eventnames[cnt]);
+ xfree (eventnames[cnt]);
eventnames[cnt] = my_strdup (name2);
if (name1 && !_tcscmp (name1, name2)) {
index = cnt;
SendDlgItemMessage (hDlg, IDC_INPUTAMIGACNT, CB_SETCURSEL, input_selected_sub_num, 0);
}
}
+ if (input_selected_widget < 0 || workprefs.input_selected_setting == GAMEPORT_INPUT_SETTINGS || port > 0) {
+ EnableWindow (GetDlgItem (hDlg, IDC_INPUTAMIGA), FALSE);
+ } else {
+ EnableWindow (GetDlgItem (hDlg, IDC_INPUTAMIGA), TRUE);
+ }
}
static void init_inputdlg (HWND hDlg)
}
if (sub >= MAX_INPUT_SUB_EVENT)
sub = MAX_INPUT_SUB_EVENT - 1;
- inputdevice_set_mapping (input_selected_device, input_selected_widget, name, NULL, 0, inputmap_port, sub);
+ inputdevice_set_mapping (input_selected_device, input_selected_widget, name, NULL, IDEV_MAPPED_GAMEPORTSCUSTOM, inputmap_port + 1, sub);
InitializeListView (hDlg);
inputmap_remap_counter += cntadd;
ListView_EnsureVisible (h, inputmap_remap_counter, FALSE);
ListView_SetItemState (GetDlgItem (hDlg, IDC_INPUTLIST), input_selected_widget, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
if (rawmode == 1) {
input_find (hDlg, 0, FALSE);
- setfocus (hDlg, IDC_INPUTAMIGA);
- SendDlgItemMessage (hDlg, IDC_INPUTAMIGA, CB_SHOWDROPDOWN , TRUE, 0L);
+ if (IsWindowEnabled (GetDlgItem (hDlg, IDC_INPUTAMIGA))) {
+ setfocus (hDlg, IDC_INPUTAMIGA);
+ SendDlgItemMessage (hDlg, IDC_INPUTAMIGA, CB_SHOWDROPDOWN , TRUE, 0L);
+ }
}
}
}
static HWND updatePanel (int id);
-static int rawdisable[] = { IDC_PANELTREE, 0, IDC_RESETAMIGA, 0, IDC_QUITEMU, 0, IDC_RESTARTEMU, 0, IDOK, 0, IDCANCEL, 0, IDHELP, 0, -1 };
+static int rawdisable[] = {
+ IDC_INPUTTYPE, 0, 0, IDC_INPUTDEVICE, 0, 0, IDC_INPUTDEVICEDISABLE, 0, 0,
+ IDC_INPUTAMIGACNT, 0, 0, IDC_INPUTAMIGA, 0, 0, IDC_INPUTTEST, 0, 0, IDC_INPUTREMAP, 0, 0,
+ IDC_INPUTCOPY, 0, 0, IDC_INPUTCOPYFROM, 0, 0, IDC_INPUTSWAP, 0, 0,
+ IDC_INPUTDEADZONE, 0, 0, IDC_INPUTSPEEDD, 0, 0, IDC_INPUTAUTOFIRERATE, 0, 0, IDC_INPUTSPEEDA, 0, 0,
+ IDC_PANELTREE, 1, 0, IDC_RESETAMIGA, 1, 0, IDC_QUITEMU, 1, 0, IDC_RESTARTEMU, 1, 0, IDOK, 1, 0, IDCANCEL, 1, 0, IDHELP, 1, 0,
+ -1
+};
+
static void input_find (HWND hDlg, int mode, int set)
{
SetWindowText (guiDlg, tmp2);
}
SetTimer (hDlg, 1, 30, timerfunc);
- ew (hDlg, IDC_INPUTREMAP, FALSE);
- ew (hDlg, IDC_INPUTTEST, FALSE);
- for (int i = 0; rawdisable[i] >= 0; i += 2) {
- rawdisable[i + 1] = IsWindowEnabled (GetDlgItem (guiDlg, rawdisable[i]));
- EnableWindow (GetDlgItem (guiDlg, rawdisable[i]), FALSE);
+ for (int i = 0; rawdisable[i] >= 0; i += 3) {
+ HWND w = GetDlgItem (rawdisable[i + 1] ? guiDlg : hDlg, rawdisable[i]);
+ if (w) {
+ rawdisable[i + 2] = IsWindowEnabled (w);
+ EnableWindow (w, FALSE);
+ }
}
ShowCursor (FALSE);
SetCapture (guiDlg);
ReleaseCapture ();
ShowCursor (TRUE);
inputdevice_unacquire ();
- for (int i = 0; rawdisable[i] >= 0; i += 2)
- EnableWindow (GetDlgItem (guiDlg, rawdisable[i]), rawdisable[i + 1]);
- ew (hDlg, IDC_INPUTREMAP, TRUE);
- ew (hDlg, IDC_INPUTTEST, TRUE);
+ for (int i = 0; rawdisable[i] >= 0; i += 3) {
+ HWND w = GetDlgItem (rawdisable[i + 1] ? guiDlg : hDlg, rawdisable[i]);
+ if (w)
+ EnableWindow (w, rawdisable[i + 2]);
+ }
inputdevice_settest (FALSE);
if (rawmode == 2) {
SetWindowText (guiDlg, tmp);
+Beta 7:
+
+- do not center horizontally if there is no bitplanes enabled (result was very badly aligned
+ screen, normally not visible but if there are background color changes or sprites..)
+- input config backwards compatibility fix, old versions read GamePorts mode as Configuration#4
+- huge brown paper bag bug fixed, in some situations INTREQR can return bit 15 set.. (fast CPU
+ modes only, introduced in earlier 2.x release)
+- do not emulate hpos offset in non-cycle exact modes, JIT mode can return hpos/vpos value pairs
+ that are not normally possible (and so far only some A500 programs require hpos offset = vpos
+ increments when hpos equals 4, not when hpos equals 0)
+- audio filter emulation didn't always follow power led state correctly
+- emulate fire and left mouse button contact bounce (no 2nd and 3rd because they are connected to
+ POT capacitors) Fixes Spacestone which waits for button release and then immediately checks
+ button state again.. I guess coder had really bad joystick firebutton, planet selection works
+ quite unreliably on my real A1200 :) cycle-exact only
+- NTSC disk timing was not fully compatible with RNC Copylock
+- b6 wordsync change reverted, another hopefully better tweak added
+- joystick button pullups removed, this will break some games' second joystick button read routines
+ but it has to be done because they wouldn't work on real Amigas with standard joystick either and
+ this workaround also breaks some other games that don't expect pullups (Dick Tracy for example)
+ Pullups are automatically enabled if joystick 3rd button is mapped.
+
+- another big input change, Game Ports settings are now always merged with currently selected
+ input configuration (possibly overwriting event that was manually configured in slot 0)
+ In other words, Game Ports panel settings are now finally working as expected by most users
+ instead of only confusing most users :) Just select your gamepad/joystick using GamePorts panel,
+ select Configuration#1 and remap remaining extra buttons, should be simple and easy enough now.
+
+ This also means old Configuration#x configurations now have Gameports mappings merged when loaded.
+ (which most likely is something you don't want) Workaround: set GamePorts settings to <none>
+ Hopefully some kind of automatic fix is possible..
+
+- GamePorts mapped Configuration#x events are marked as [PortX] in Input list where X is port number.
+- GamePorts custom configuration in Configuration#x mode also supported.
+ NOTE: configuration files that have GamePorts customized Input Configuration#x's are not
+ backwards compatible
+- renamed GamePorts port 0 -> port 1 and port 1 -> port 2, now same as input target port numbers
+ (1 = "mouse" port, 2 = "joystick" port, 3 and 4 are parallel joystick adapter ports)
+- do not add default mappings to Configuration#x joysticks and mice (not needed anymore)
+- automatically disable empty devices in Configuration#x modes
+
+ Just ask if you have any questions or suggestions. Input configuration is never finished :)
+
Beta 6:
- CE-mode CIA interrupt delay decreased by 1 CPU clock cycle, tst.b CIAICR immediately followed
broken during C++ conversion)
- CD32 state restore didn't work if CD32 configuration was not pre-selected
- save POT capacitors' charge status to statefile
-- disk read DMA wordsync should not skip first syncword if data is already in sync
+- disk read DMA wordsync should not skip first syncword if bit stream is already aligned
+ (Starglider 2 original)
- on the fly cycle-exact switching broke few betas ago
- use early blitter finished state emulation only in 68000 cycle exact modes, 68020 "CE" can
- execute blitter test and immediate blitter register near-instantly in some situations
+ execute blitter busy check followed by write to blitter register really too quickly
Beta 5: