From 9377573e704e847edc4c2a9b5ea982175997b896 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Thu, 7 Feb 2019 11:36:54 +0100 Subject: [PATCH 01/18] Update rommgr.cpp Added support for another variant of A1200 Kick 3.1.4 ROM - Fixes #374 --- src/rommgr.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rommgr.cpp b/src/rommgr.cpp index 0c1cd6d1..60026400 100644 --- a/src/rommgr.cpp +++ b/src/rommgr.cpp @@ -97,7 +97,7 @@ struct romdata *getromdatabypath (const TCHAR *path) return NULL; } -#define NEXT_ROM_ID 251 +#define NEXT_ROM_ID 252 #define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \ { _T("X"), 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e }, @@ -187,6 +187,8 @@ static struct romdata roms[] = { 0xBA35F8EB, 0xD73AE3A3, 0x6F12BB49, 0xBBF6BA04, 0xA890FF7A, 0xAC419015 }, { _T("KS ROM v3.1.4 (A500)"), 3, 1, 46, 143, _T("A500\0"), 524288, 250, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xD52B52FD, 0x8A240508, 0x7CE18222, 0x5656DD0B, 0x93069C45, 0x743F9E34 }, + { _T("KS ROM v3.1.4 (A1200)"), 3, 1, 46, 143, _T("A1200\0"), 524288, 251, 1, 0, ROMTYPE_KICK, 0, 0, NULL, + 0x7546b74c, 0xEF36C463, 0x8EE45DE6, 0xBB937017, 0x61216C95, 0x8CD0D57B }, #endif { _T("KS ROM v3.1 (A3000)"), 3, 1, 40, 68, _T("A3000\0"), 524288, 61, 2, 0, ROMTYPE_KICK, 0, 0, NULL, From f508edd1f16f766f103f4037e7e3ca78cd90a76c Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Thu, 7 Feb 2019 23:36:27 +0100 Subject: [PATCH 02/18] Updated toolset references to latest version --- .../Amiberry-RPI1-Debug.vgdbsettings | 3 +- VisualGDB/Amiberry-RPI1/Amiberry-RPI1.vcxproj | 4 +- .../Amiberry-sdl1-Debug.vgdbsettings | 3 +- VisualGDB/Amiberry-sdl1/Amiberry-sdl1.vcxproj | 4 +- .../Amiberry/Amiberry-Debug.vgdbsettings | 3 +- VisualGDB/Amiberry/Amiberry.vcxproj | 8 +- VisualGDB/guisan/guisan-Debug.vgdbsettings | 89 ++++++++++--------- VisualGDB/guisan/guisan.vcxproj | 4 +- 8 files changed, 62 insertions(+), 56 deletions(-) diff --git a/VisualGDB/Amiberry-RPI1/Amiberry-RPI1-Debug.vgdbsettings b/VisualGDB/Amiberry-RPI1/Amiberry-RPI1-Debug.vgdbsettings index 15d3217f..77b61c7a 100644 --- a/VisualGDB/Amiberry-RPI1/Amiberry-RPI1-Debug.vgdbsettings +++ b/VisualGDB/Amiberry-RPI1/Amiberry-RPI1-Debug.vgdbsettings @@ -52,12 +52,13 @@ 6.3.0 7.12 - 3 + 4 Amiberry-RPI1.vcxproj + 1 true diff --git a/VisualGDB/Amiberry-RPI1/Amiberry-RPI1.vcxproj b/VisualGDB/Amiberry-RPI1/Amiberry-RPI1.vcxproj index e09c6c43..1fd0fed0 100644 --- a/VisualGDB/Amiberry-RPI1/Amiberry-RPI1.vcxproj +++ b/VisualGDB/Amiberry-RPI1/Amiberry-RPI1.vcxproj @@ -28,12 +28,12 @@ Debug com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 $(ProjectName)-sdl2 com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 diff --git a/VisualGDB/Amiberry-sdl1/Amiberry-sdl1-Debug.vgdbsettings b/VisualGDB/Amiberry-sdl1/Amiberry-sdl1-Debug.vgdbsettings index ec7518d7..8fc1948c 100644 --- a/VisualGDB/Amiberry-sdl1/Amiberry-sdl1-Debug.vgdbsettings +++ b/VisualGDB/Amiberry-sdl1/Amiberry-sdl1-Debug.vgdbsettings @@ -52,12 +52,13 @@ 6.3.0 7.12 - 3 + 4 Amiberry-sdl1.vcxproj + 1 true diff --git a/VisualGDB/Amiberry-sdl1/Amiberry-sdl1.vcxproj b/VisualGDB/Amiberry-sdl1/Amiberry-sdl1.vcxproj index 3fc39a85..aebe9e5b 100644 --- a/VisualGDB/Amiberry-sdl1/Amiberry-sdl1.vcxproj +++ b/VisualGDB/Amiberry-sdl1/Amiberry-sdl1.vcxproj @@ -28,11 +28,11 @@ Debug com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 diff --git a/VisualGDB/Amiberry/Amiberry-Debug.vgdbsettings b/VisualGDB/Amiberry/Amiberry-Debug.vgdbsettings index 4020f054..94c64400 100644 --- a/VisualGDB/Amiberry/Amiberry-Debug.vgdbsettings +++ b/VisualGDB/Amiberry/Amiberry-Debug.vgdbsettings @@ -49,12 +49,13 @@ 6.3.0 7.12 - 3 + 4 Amiberry.vcxproj + 1 true diff --git a/VisualGDB/Amiberry/Amiberry.vcxproj b/VisualGDB/Amiberry/Amiberry.vcxproj index 069caccc..b3af89dd 100644 --- a/VisualGDB/Amiberry/Amiberry.vcxproj +++ b/VisualGDB/Amiberry/Amiberry.vcxproj @@ -38,23 +38,23 @@ Debug com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 $(ProjectName)-sdl2 Debug com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 $(ProjectName)-sdl2 com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 $(ProjectName)-sdl2 com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 $(ProjectName)-sdl2 diff --git a/VisualGDB/guisan/guisan-Debug.vgdbsettings b/VisualGDB/guisan/guisan-Debug.vgdbsettings index ab755b5a..21154e35 100644 --- a/VisualGDB/guisan/guisan-Debug.vgdbsettings +++ b/VisualGDB/guisan/guisan-Debug.vgdbsettings @@ -47,7 +47,7 @@ 6.3.0 7.12 - 3 + 4 guisan.vcxproj @@ -58,6 +58,51 @@ 1 true + + + + + + + + + + + + Default + + + + true + + + + + False + + + + + true + false + + Enabled + true + true + true + + + + + + + + false + + + VisualGDB\VisualGDBCache + + @@ -104,46 +149,4 @@ true false - - - - - - - - - - - - Default - - - - true - - - - - False - - - - - true - false - - Enabled - true - true - true - - - - - - false - - - VisualGDB\VisualGDBCache - \ No newline at end of file diff --git a/VisualGDB/guisan/guisan.vcxproj b/VisualGDB/guisan/guisan.vcxproj index 5c940866..3da864b2 100644 --- a/VisualGDB/guisan/guisan.vcxproj +++ b/VisualGDB/guisan/guisan.vcxproj @@ -28,14 +28,14 @@ Debug com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 StaticLibrary $(SolutionDir)..\..\guisan-dev\lib\ lib$(ProjectName) com.visualgdb.raspberry_pi - 6.3.0/7.12/r3 + 6.3.0/7.12/r4 StaticLibrary $(SolutionDir)..\..\guisan-dev\lib\ lib$(ProjectName) From 6a4f55fa77aae25b01927e10dc0b2f710f1a12fd Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Thu, 7 Feb 2019 23:38:38 +0100 Subject: [PATCH 03/18] Implemented Emulation Pause handling - Fixes #414 --- src/filesys.cpp | 17 +++++++++++++++++ src/include/inputdevice.h | 4 ++++ src/inputdevice.cpp | 33 ++++++++++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/filesys.cpp b/src/filesys.cpp index b95abe26..f09166a8 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -1467,6 +1467,23 @@ int filesys_eject (int nr) } static uae_u32 heartbeat; +static int heartbeat_count, heartbeat_count_cont; +static int heartbeat_task; + +bool filesys_heartbeat(void) +{ + return heartbeat_count_cont > 0; +} + +// This uses filesystem process to reduce resource usage +void setsystime(void) +{ + if (!currprefs.tod_hack || !rtarea_bank.baseaddr) + return; + heartbeat = get_long_host(rtarea_bank.baseaddr + RTAREA_HEARTBEAT); + heartbeat_task = 1; + heartbeat_count = 10; +} static uae_u32 REGPARAM2 debugger_helper(TrapContext *ctx) { diff --git a/src/include/inputdevice.h b/src/include/inputdevice.h index c8516085..6728fa56 100644 --- a/src/include/inputdevice.h +++ b/src/include/inputdevice.h @@ -282,6 +282,8 @@ extern void inputdevice_acquire (int allmode); extern void inputdevice_unacquire (void); extern void inputdevice_unacquire(bool emulationactive, int inputmask); +extern void pausemode(int mode); + extern void inputdevice_add_inputcode(int code, int state, const TCHAR *); extern void inputdevice_handle_inputcode (void); @@ -289,6 +291,8 @@ extern void inputdevice_tablet_strobe (void); extern uae_u64 input_getqualifiers (void); +extern void setsystime(void); + #define JSEM_MODE_DEFAULT 0 #define JSEM_MODE_WHEELMOUSE 1 #define JSEM_MODE_MOUSE 2 diff --git a/src/inputdevice.cpp b/src/inputdevice.cpp index fcdd79c4..9ad4e579 100644 --- a/src/inputdevice.cpp +++ b/src/inputdevice.cpp @@ -97,6 +97,8 @@ static const int *joyinputs[MAX_JPORTS]; static int input_acquired; +static int autopause; + static int handle_input_event (int nr, int state, int max, int autofire); static struct inputdevice_functions idev[IDTYPE_MAX]; @@ -2642,9 +2644,6 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) // screenshot(1, 1); // } // break; - case AKS_TOGGLEWINDOWEDFULLSCREEN: - toggle_fullscreen(); - break; #ifdef ACTION_REPLAY case AKS_FREEZEBUTTON: action_replay_freeze(); @@ -2702,6 +2701,14 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) case AKS_EFLOPPY3: disk_eject(3); break; + case AKS_PAUSE: + pausemode(newstate > 0 ? 1 : newstate); + break; + case AKS_SINGLESTEP: + if (pause_emulation) + pausemode(0); + autopause = 1; + break; case AKS_VOLDOWN: sound_volume(newstate <= 0 ? -1 : 1); break; @@ -2717,6 +2724,9 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) case AKS_HARDRESET: uae_reset(1, 1); break; + case AKS_TOGGLEWINDOWEDFULLSCREEN: + toggle_fullscreen(); + break; case AKS_MOUSEMAP_PORT0_LEFT: (changed_prefs.jports[0].mousemap) ^= 1 << 0; inputdevice_updateconfig(&changed_prefs, &currprefs); @@ -3071,6 +3081,13 @@ static void inputdevice_checkconfig (void) void inputdevice_vsync (void) { + if (autopause > 0 && pause_emulation == 0) { + autopause--; + if (!autopause) { + pausemode(1); + } + } + input_frame++; mouseupdate (0, true); @@ -6115,6 +6132,16 @@ int getmousestate (int joy) return mice[joy].enabled; } +void pausemode(int mode) +{ + if (mode < 0) + pause_emulation = pause_emulation ? 0 : 9; + else + pause_emulation = mode; + set_config_changed(); + setsystime(); +} + int jsem_isjoy (int port, const struct uae_prefs *p) { int v = JSEM_DECODEVAL (port, p); From 4231699161f01ce8c2ae176020430de2d55c7597 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 15:37:01 +0100 Subject: [PATCH 04/18] Revert "Update rommgr.cpp" This reverts commit 9377573e704e847edc4c2a9b5ea982175997b896. --- src/rommgr.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/rommgr.cpp b/src/rommgr.cpp index 60026400..0c1cd6d1 100644 --- a/src/rommgr.cpp +++ b/src/rommgr.cpp @@ -97,7 +97,7 @@ struct romdata *getromdatabypath (const TCHAR *path) return NULL; } -#define NEXT_ROM_ID 252 +#define NEXT_ROM_ID 251 #define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \ { _T("X"), 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e }, @@ -187,8 +187,6 @@ static struct romdata roms[] = { 0xBA35F8EB, 0xD73AE3A3, 0x6F12BB49, 0xBBF6BA04, 0xA890FF7A, 0xAC419015 }, { _T("KS ROM v3.1.4 (A500)"), 3, 1, 46, 143, _T("A500\0"), 524288, 250, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xD52B52FD, 0x8A240508, 0x7CE18222, 0x5656DD0B, 0x93069C45, 0x743F9E34 }, - { _T("KS ROM v3.1.4 (A1200)"), 3, 1, 46, 143, _T("A1200\0"), 524288, 251, 1, 0, ROMTYPE_KICK, 0, 0, NULL, - 0x7546b74c, 0xEF36C463, 0x8EE45DE6, 0xBB937017, 0x61216C95, 0x8CD0D57B }, #endif { _T("KS ROM v3.1 (A3000)"), 3, 1, 40, 68, _T("A3000\0"), 524288, 61, 2, 0, ROMTYPE_KICK, 0, 0, NULL, From 6c7a1127a8ab6892eb216b4a689e2288254daa9c Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:18:21 +0100 Subject: [PATCH 05/18] Fixed compiler warnings/errors in writelog - Fixes #419 --- src/osdep/writelog.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/osdep/writelog.cpp b/src/osdep/writelog.cpp index 674ab3a7..84edc523 100644 --- a/src/osdep/writelog.cpp +++ b/src/osdep/writelog.cpp @@ -5,8 +5,9 @@ * * Copyright 2001 Bernd Schmidt */ -#include -#include +#include +#include +#include #include "sysdeps.h" #include "uae.h" @@ -23,7 +24,7 @@ void console_out (const TCHAR *format,...) va_start (parms, format); vsnprintf (buffer, WRITE_LOG_BUF_SIZE-1, format, parms); va_end (parms); - printf(buffer); + cout << buffer << endl; } void write_log (const char *format,...) @@ -37,7 +38,7 @@ void write_log (const char *format,...) auto count = vsnprintf(buffer, WRITE_LOG_BUF_SIZE - 1, format, parms); if (debugfile) { - fprintf(debugfile, buffer); + fprintf(debugfile, "%s", buffer); fflush(debugfile); } va_end(parms); From c9eaac70dc29f80eb89fb35493af164aaa8b9ec6 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:19:03 +0100 Subject: [PATCH 06/18] Removed unused code --- src/osdep/picasso96.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/osdep/picasso96.cpp b/src/osdep/picasso96.cpp index 9b6c1dca..1b9660e9 100644 --- a/src/osdep/picasso96.cpp +++ b/src/osdep/picasso96.cpp @@ -100,9 +100,9 @@ struct picasso96_state_struct picasso96_state; struct picasso_vidbuf_description picasso_vidinfo; static struct PicassoResolution* newmodes = nullptr; -/* These are the maximum resolutions... They are filled in by GetSupportedResolutions() */ -/* have to fill this in, otherwise problems occur on the Amiga side P96 s/w which expects -/* data here. */ +/* These are the maximum resolutions... They are filled in by GetSupportedResolutions() + have to fill this in, otherwise problems occur on the Amiga side P96 s/w which expects + data here. */ static struct ScreenResolution planar = { 320, 240 }; static struct ScreenResolution chunky = { 640, 480 }; static struct ScreenResolution hicolour = { 640, 480 }; @@ -492,7 +492,7 @@ static void rtg_render(void) { return; } - bool full = picasso_vidinfo.full_refresh > 0; + //bool full = picasso_vidinfo.full_refresh > 0; if (uaegfx_active) { if (!currprefs.rtg_multithread) @@ -1493,16 +1493,14 @@ static uaecptr picasso96_amem, picasso96_amemend; static void CopyLibResolutionStructureU2A(TrapContext* ctx, struct LibResolution* libres, uaecptr amigamemptr) { - int i; - trap_set_bytes(ctx, amigamemptr, 0, PSSO_LibResolution_sizeof); - for (i = 0; i < strlen(libres->P96ID); i++) + for (unsigned int i = 0; i < strlen(libres->P96ID); i++) trap_put_byte(ctx, amigamemptr + PSSO_LibResolution_P96ID + i, libres->P96ID[i]); trap_put_long(ctx, amigamemptr + PSSO_LibResolution_DisplayID, libres->DisplayID); trap_put_word(ctx, amigamemptr + PSSO_LibResolution_Width, libres->Width); trap_put_word(ctx, amigamemptr + PSSO_LibResolution_Height, libres->Height); trap_put_word(ctx, amigamemptr + PSSO_LibResolution_Flags, libres->Flags); - for (i = 0; i < MAXMODES; i++) + for (int i = 0; i < MAXMODES; i++) trap_put_long(ctx, amigamemptr + PSSO_LibResolution_Modes + i * 4, libres->Modes[i]); trap_put_long(ctx, amigamemptr + 10, amigamemptr + PSSO_LibResolution_P96ID); trap_put_long(ctx, amigamemptr + PSSO_LibResolution_BoardInfo, libres->BoardInfo); @@ -1613,7 +1611,7 @@ static void picasso96_alloc2(TrapContext* ctx) i++; continue; } - j = i; + //j = i; size += PSSO_LibResolution_sizeof; while (missmodes[misscnt * 2] == 0) misscnt++; @@ -2088,16 +2086,16 @@ static uae_u32 REGPARAM2 picasso_SetPanning(TrapContext* ctx) uaecptr bi = trap_get_areg(ctx, 0); uaecptr bmeptr = trap_get_long(ctx, bi + PSSO_BoardInfo_BitMapExtra); /* Get our BoardInfo ptr's BitMapExtra ptr */ uae_u16 bme_width, bme_height; - int changed = 0; + //int changed = 0; RGBFTYPE rgbf; if (oldscr == 0) { oldscr = start_of_screen; - changed = 1; + //changed = 1; } if (oldscr != start_of_screen) { oldscr = start_of_screen; - changed = 1; + //changed = 1; } bme_width = trap_get_word(ctx, bmeptr + PSSO_BitMapExtra_Width); From 04eb0d37012e67093487265880bdadfbb8eca8b1 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:19:22 +0100 Subject: [PATCH 07/18] Fixed potential buffer overflow --- src/osdep/amiberry_rp9.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/osdep/amiberry_rp9.cpp b/src/osdep/amiberry_rp9.cpp index 53fb3596..218a32f8 100644 --- a/src/osdep/amiberry_rp9.cpp +++ b/src/osdep/amiberry_rp9.cpp @@ -27,7 +27,7 @@ static bool clip_no_hires = false; void rp9_init() { fetch_rp9path(rp9tmp_path, MAX_DPATH); - strncat(rp9tmp_path, _T("tmp/"), MAX_DPATH); + strncat(rp9tmp_path, _T("tmp/"), MAX_DPATH - 1); lstTmpRP9Files.clear(); LIBXML_TEST_VERSION } From 11c3eeec161262777d13c78139ca10794cc0d959 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:19:58 +0100 Subject: [PATCH 08/18] Fixed trying to access memory after it was freed, removed unused code --- src/osdep/amiberry_mem.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/osdep/amiberry_mem.cpp b/src/osdep/amiberry_mem.cpp index 255195fb..3393c905 100644 --- a/src/osdep/amiberry_mem.cpp +++ b/src/osdep/amiberry_mem.cpp @@ -451,10 +451,9 @@ bool mapped_malloc(addrbank* ab) } struct uae_mman_data md = {0}; - uaecptr start = ab->start; if (uae_mman_info(ab, &md)) { - start = md.start; + uaecptr start = md.start; ab->baseaddr = regs.natmem_offset + start; } @@ -479,11 +478,11 @@ bool mapped_malloc(addrbank* ab) void mapped_free(addrbank* ab) { if (ab->label != nullptr && !strcmp(ab->label, "filesys") && ab->baseaddr != nullptr) - { - free(ab->baseaddr); + { write_log("mapped_free(): 0x%08x - 0x%08x (0x%08x - 0x%08x) -> %s (%s)\n", ab->baseaddr - regs.natmem_offset, ab->baseaddr - regs.natmem_offset + ab->allocated_size, ab->baseaddr, ab->baseaddr + ab->allocated_size, ab->name, ab->label); + free(ab->baseaddr); } ab->baseaddr = nullptr; ab->allocated_size = 0; From 9d589ff4cc857e0e29dd77af691e5c98bf04b0b7 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:20:30 +0100 Subject: [PATCH 09/18] Indentation fixes --- src/osdep/amiberry_input.cpp | 79 ++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/src/osdep/amiberry_input.cpp b/src/osdep/amiberry_input.cpp index 9af0063b..39e12d83 100644 --- a/src/osdep/amiberry_input.cpp +++ b/src/osdep/amiberry_input.cpp @@ -64,10 +64,10 @@ static void fill_default_controller(void) default_controller_map.lstick_up = -1; default_controller_map.lstick_down = -1; default_controller_map.lstick_axis_y = 1; - default_controller_map.lstick_axis_x = 0; - default_controller_map.lstick_axis_y_invert = false; - default_controller_map.lstick_axis_x_invert = false; - + default_controller_map.lstick_axis_x = 0; + default_controller_map.lstick_axis_y_invert = false; + default_controller_map.lstick_axis_x_invert = false; + default_controller_map.rstick_button = -1; default_controller_map.rstick_left = -1; default_controller_map.rstick_right = -1; @@ -75,9 +75,9 @@ static void fill_default_controller(void) default_controller_map.rstick_down = -1; default_controller_map.rstick_axis_y = 3; default_controller_map.rstick_axis_x = 2; - default_controller_map.rstick_axis_y_invert = false; - default_controller_map.rstick_axis_x_invert = false; - + default_controller_map.rstick_axis_y_invert = false; + default_controller_map.rstick_axis_x_invert = false; + default_controller_map.is_retroarch = false; } @@ -117,9 +117,9 @@ static void fill_blank_controller(void) default_controller_map.lstick_down = -1; default_controller_map.lstick_axis_y = -1; default_controller_map.lstick_axis_x = -1; - default_controller_map.lstick_axis_y_invert = false; - default_controller_map.lstick_axis_x_invert = false; - + default_controller_map.lstick_axis_y_invert = false; + default_controller_map.lstick_axis_x_invert = false; + default_controller_map.rstick_button = -1; default_controller_map.rstick_left = -1; default_controller_map.rstick_right = -1; @@ -127,9 +127,9 @@ static void fill_blank_controller(void) default_controller_map.rstick_down = -1; default_controller_map.rstick_axis_y = -1; default_controller_map.rstick_axis_x = -1; - default_controller_map.rstick_axis_y_invert = false; - default_controller_map.rstick_axis_x_invert = false; - + default_controller_map.rstick_axis_y_invert = false; + default_controller_map.rstick_axis_x_invert = false; + default_controller_map.is_retroarch = false; } @@ -1138,7 +1138,6 @@ static void read_joystick(void) if (current_controller_map.right_shoulder == current_controller_map.hotkey_button) current_controller_map.right_shoulder = -1; - auto held_offset = 0; // detect standalone retroarch hotkeys @@ -1187,31 +1186,28 @@ static void read_joystick(void) held_offset = 0; } - auto val = 0; - // this should allow use to change the tolerance - int lower_bound = -32767; - int upper_bound = 32767; - - + // this should allow use to change the tolerance + int lower_bound = -32767; + int upper_bound = 32767; + // left stick if (!currprefs.input_analog_remap) { // handle the X axis (left stick) val = SDL_JoystickGetAxis(joysticktable[hostjoyid], current_controller_map.lstick_axis_x); - if (current_controller_map.lstick_axis_x_invert != 0) - val = val * -1; - - setjoystickstate(hostjoyid + 1, 0, val, upper_bound); - + if (current_controller_map.lstick_axis_x_invert != 0) + val = val * -1; + + setjoystickstate(hostjoyid + 1, 0, val, upper_bound); + // handle the Y axis val = SDL_JoystickGetAxis(joysticktable[hostjoyid], current_controller_map.lstick_axis_y); - if (current_controller_map.lstick_axis_y_invert != 0) - val = val * -1; - - setjoystickstate(hostjoyid + 1, 1, val, upper_bound); - + if (current_controller_map.lstick_axis_y_invert != 0) + val = val * -1; + + setjoystickstate(hostjoyid + 1, 1, val, upper_bound); } else @@ -1238,19 +1234,17 @@ static void read_joystick(void) } // right stick - val = SDL_JoystickGetAxis(joysticktable[hostjoyid], current_controller_map.rstick_axis_x); - if (current_controller_map.rstick_axis_x_invert != 0) - val = val * -1; - - setjoystickstate(hostjoyid + 1, 2, val, upper_bound); - - val = SDL_JoystickGetAxis(joysticktable[hostjoyid], current_controller_map.rstick_axis_y); - if (current_controller_map.rstick_axis_y_invert != 0) - val = val * -1; - - setjoystickstate(hostjoyid + 1, 3, val, upper_bound); - + val = SDL_JoystickGetAxis(joysticktable[hostjoyid], current_controller_map.rstick_axis_x); + if (current_controller_map.rstick_axis_x_invert != 0) + val = val * -1; + setjoystickstate(hostjoyid + 1, 2, val, upper_bound); + + val = SDL_JoystickGetAxis(joysticktable[hostjoyid], current_controller_map.rstick_axis_y); + if (current_controller_map.rstick_axis_y_invert != 0) + val = val * -1; + + setjoystickstate(hostjoyid + 1, 3, val, upper_bound); // cd32 red, blue, green, yellow // south @@ -1266,7 +1260,6 @@ static void read_joystick(void) setjoybuttonstate(hostjoyid + 1, 3 + held_offset, (SDL_JoystickGetButton(joysticktable[hostjoyid], current_controller_map.north_button) & 1)); - // cd32 rwd, ffw, start setjoybuttonstate(hostjoyid + 1, 4 + held_offset, (SDL_JoystickGetButton(joysticktable[hostjoyid], current_controller_map.left_shoulder) & 1)); From 48951d151c9f5bda7dfacc91fe4566fa48d86944 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:20:44 +0100 Subject: [PATCH 10/18] Minor code cleanup --- src/osdep/amiberry_hardfile.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/osdep/amiberry_hardfile.cpp b/src/osdep/amiberry_hardfile.cpp index b2ea249d..147f8559 100644 --- a/src/osdep/amiberry_hardfile.cpp +++ b/src/osdep/amiberry_hardfile.cpp @@ -332,7 +332,7 @@ int hdf_read_target(struct hardfiledata *hfd, void *buffer, uae_u64 offset, int while (len > 0) { int maxlen; - int ret; + int ret = 0; if (hfd->physsize < CACHE_SIZE) { hfd->cache_valid = 0; @@ -402,9 +402,7 @@ static int hdf_write_2(struct hardfiledata *hfd, void *buffer, uae_u64 offset, i } } else if (hfd->handle_valid == HDF_HANDLE_ZFILE) - { outlen = zfile_fwrite(hfd->cache, 1, len, hfd->handle->zf); - } return outlen; } From 72b01536644ddb1e0af92fc40efa85d668a213e1 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:21:33 +0100 Subject: [PATCH 11/18] Removed unused code, code cleanup --- src/drawing.cpp | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/src/drawing.cpp b/src/drawing.cpp index e6e54d64..3c1f9a31 100644 --- a/src/drawing.cpp +++ b/src/drawing.cpp @@ -468,11 +468,6 @@ void get_custom_raw_limits(int *pw, int *ph, int *pdx, int *pdy) void check_custom_limits(void) { - int vls = visible_left_start; - int vrs = visible_right_stop; - int vts = visible_top_start; - int vbs = visible_bottom_stop; - struct gfx_filterdata *fd = &currprefs.gf[0]; int left = fd->gfx_filter_left_border >> (RES_MAX - currprefs.gfx_resolution); int right = fd->gfx_filter_right_border >> (RES_MAX - currprefs.gfx_resolution); @@ -721,11 +716,6 @@ void get_custom_mouse_limits(int *pw, int *ph, int *pdx, int *pdy, int dbl) if (*ph > 0) h = *ph; - delay1 = (firstword_bplcon1 & 0x0f) | ((firstword_bplcon1 & 0x0c00) >> 6); - delay2 = ((firstword_bplcon1 >> 4) & 0x0f) | (((firstword_bplcon1 >> 4) & 0x0c00) >> 6); - // if (delay1 == delay2) - // dx += delay1; - dx = xshift(dx, res_shift); dbl2 = dbl1 = currprefs.gfx_vresolution; @@ -2063,7 +2053,6 @@ static void init_ham_decoding(void) static void decode_ham (int pix, int stoppos, int blank) { int todraw_amiga = res_shift_from_window(stoppos - pix); - int hdp = ham_decode_pixel; if (!bplham) { while (todraw_amiga-- > 0) { @@ -2707,14 +2696,14 @@ void init_row_map(void) static void init_aspect_maps(void) { - int i, maxl, h; + int i; linedbld = linedbl = currprefs.gfx_vresolution; if (doublescan > 0 && interlace_seen <= 0) { linedbl = 0; linedbld = 1; } - maxl = (MAXVPOS + 1) << linedbld; + const int maxl = (MAXVPOS + 1) << linedbld; min_ypos_for_screen = minfirstline << linedbl; max_drawn_amiga_line = -1; @@ -2724,7 +2713,7 @@ static void init_aspect_maps(void) visible_bottom_stop = MAX_STOP; set_blanking_limits(); - h = gfxvidinfo.drawbuffer.outheight; + const int h = gfxvidinfo.drawbuffer.outheight; if (h == 0) /* Do nothing if the gfx driver hasn't initialized the screen yet */ return; @@ -2753,10 +2742,9 @@ static void init_aspect_maps(void) native2amiga_line_map[i] = -1; for (i = maxl - 1; i >= min_ypos_for_screen; i--) { - int j; if (amiga2aspect_line_map[i] == -1) continue; - for (j = amiga2aspect_line_map[i]; j < h && native2amiga_line_map[j] == -1; j++) + for (int j = amiga2aspect_line_map[i]; j < h && native2amiga_line_map[j] == -1; j++) native2amiga_line_map[j] = (i + currprefs.vertical_offset) >> linedbl; } } @@ -3340,11 +3328,6 @@ static void pfield_draw_line(struct vidbuffer *vb, int lineno, int gfx_ypos, int static void center_image() { - int prev_x_adjust = visible_left_border; - int prev_y_adjust = thisframe_y_adjust; - - int w = gfxvidinfo.drawbuffer.outwidth; - const int deltaToBorder = (gfxvidinfo.drawbuffer.outwidth >> currprefs.gfx_resolution) - 320; visible_left_border = 73 - (deltaToBorder >> 1); @@ -3381,13 +3364,11 @@ static void init_drawing_frame(void) int largest_res = 0; int largest_count = 0; - int largest_count_res = 0; for (int i = 0; i <= RES_MAX; i++) { if (resolution_count[i]) largest_res = i; if (resolution_count[i] >= largest_count) { largest_count = resolution_count[i]; - largest_count_res = i; } } if (currprefs.gfx_resolution == changed_prefs.gfx_resolution && lines_count > 0) { @@ -3904,10 +3885,7 @@ void allocvidbuffer(struct vidbuffer *buf, int width, int height, int depth) buf->outwidth = (width + 7) & ~7; buf->outheight = height; - int size = width * height * buf->pixbytes; - buf->rowbytes = width * buf->pixbytes; - } void freevidbuffer(struct vidbuffer *buf) From 05dbf48da38b0b81f225c4f85f6064b8431f209a Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:41:31 +0100 Subject: [PATCH 12/18] Removed more unused code --- src/main.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 228188df..f02d44fa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -184,7 +184,7 @@ void fixup_cpu(struct uae_prefs *p) void fixup_prefs (struct uae_prefs *p, bool userconfig) { - auto err = 0; + //auto err = 0; built_in_chipset_prefs(p); fixup_cpu(p); @@ -199,7 +199,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) { error_log(_T("Unsupported chipmem size %d (0x%x)."), p->chipmem_size, p->chipmem_size); p->chipmem_size = 0x200000; - err = 1; + //err = 1; } for (auto & i : p->fastmem) { @@ -208,7 +208,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) { error_log(_T("Unsupported fastmem size %d (0x%x)."), i.size, i.size); i.size = 0; - err = 1; + //err = 1; } } @@ -217,7 +217,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) if (rbc->rtgmem_size > max_z3fastmem && rbc->rtgmem_type == GFXBOARD_UAE_Z3) { error_log(_T("Graphics card memory size %d (0x%x) larger than maximum reserved %d (0x%x)."), rbc->rtgmem_size, rbc->rtgmem_size, 0x1000000, 0x1000000); rbc->rtgmem_size = 0x1000000; - err = 1; + //err = 1; } if ((rbc->rtgmem_size & (rbc->rtgmem_size - 1)) != 0 || (rbc->rtgmem_size != 0 && (rbc->rtgmem_size < 0x100000))) { @@ -226,7 +226,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) rbc->rtgmem_size = max_z3fastmem; else rbc->rtgmem_size = 0; - err = 1; + //err = 1; } } @@ -235,7 +235,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) { error_log(_T("Unsupported Zorro III fastmem size %d (0x%x)."), i.size, i.size); i.size = 0; - err = 1; + //err = 1; } } @@ -251,7 +251,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) if (p->bogomem_size != 0 && p->bogomem_size != 0x80000 && p->bogomem_size != 0x100000 && p->bogomem_size != 0x180000 && p->bogomem_size != 0x1c0000) { error_log(_T("Unsupported bogomem size %d (0x%x)"), p->bogomem_size, p->bogomem_size); p->bogomem_size = 0; - err = 1; + //err = 1; } if (p->bogomem_size > 0x180000 && (p->cs_fatgaryrev >= 0 || p->cs_ide || p->cs_ramseyrev >= 0)) { @@ -261,7 +261,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) if (p->chipmem_size > 0x200000 && p->fastmem[0].size > 262144) { error_log(_T("You can't use fastmem and more than 2MB chip at the same time.")); p->chipmem_size = 0x200000; - err = 1; + //err = 1; } if (p->mbresmem_low_size > 0x01000000 || (p->mbresmem_low_size & 0xfffff)) { p->mbresmem_low_size = 0; @@ -277,7 +277,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) if (p->chipmem_size > 0x200000 && rbc->rtgmem_size && gfxboard_get_configtype(rbc) == 2) { error_log(_T("You can't use Zorro II RTG and more than 2MB chip at the same time.")); p->chipmem_size = 0x200000; - err = 1; + //err = 1; } if (p->address_space_24 && rbc->rtgmem_size && rbc->rtgmem_type == GFXBOARD_UAE_Z3) { error_log(_T("Z3 RTG and 24bit address space are not compatible.")); @@ -294,23 +294,23 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) if (p->produce_sound < 0 || p->produce_sound > 3) { error_log(_T("Bad value for -S parameter: enable value must be within 0..3.")); p->produce_sound = 0; - err = 1; + //err = 1; } if (p->cachesize < 0 || p->cachesize > MAX_JIT_CACHE) { error_log(_T("Bad value for cachesize parameter: value must be within 0..16384.")); p->cachesize = 0; - err = 1; + //err = 1; } if ((p->z3fastmem[0].size) && p->address_space_24) { error_log(_T("Z3 fast memory can't be used if address space is 24-bit.")); p->z3fastmem[0].size = 0; - err = 1; + //err = 1; } for (auto & rtgboard : p->rtgboards) { if ((rtgboard.rtgmem_size > 0 && rtgboard.rtgmem_type == GFXBOARD_UAE_Z3) && p->address_space_24) { error_log(_T("UAEGFX Z3 RTG can't be used if address space is 24-bit.")); rtgboard.rtgmem_size = 0; - err = 1; + //err = 1; } } @@ -329,7 +329,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) p->floppyslots[1].dfxtype = 0; p->floppyslots[2].dfxtype = -1; p->floppyslots[3].dfxtype = -1; - err = 1; + //err = 1; } if (p->floppy_speed > 0 && p->floppy_speed < 10) { @@ -339,7 +339,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig) if (p->collision_level < 0 || p->collision_level > 3) { error_log(_T("Invalid collision support level. Using 1.")); p->collision_level = 1; - err = 1; + //err = 1; } if (p->cs_compatible == CP_GENERIC) { p->cs_fatgaryrev = p->cs_ramseyrev = -1; From 7d06843ea7eb322ab2ebd3adfeb13d19ff39f899 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:46:43 +0100 Subject: [PATCH 13/18] Fixed potential buffer overflow situations in gui Panels --- src/osdep/gui/PanelConfig.cpp | 4 ++-- src/osdep/gui/PanelCustom.cpp | 9 ++++----- src/osdep/gui/PanelDisplay.cpp | 2 +- src/osdep/gui/PanelQuickstart.cpp | 2 +- src/osdep/gui/SelectFile.cpp | 6 +++--- src/osdep/gui/SelectFolder.cpp | 4 ++-- src/osdep/gui/SelectorEntry.cpp | 2 +- src/osdep/gui/main_window.cpp | 4 ++-- 8 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/osdep/gui/PanelConfig.cpp b/src/osdep/gui/PanelConfig.cpp index 28a3fa17..4a4cbb49 100644 --- a/src/osdep/gui/PanelConfig.cpp +++ b/src/osdep/gui/PanelConfig.cpp @@ -95,7 +95,7 @@ public: if (strlen(i->Description) > 0) { strncat(tmp, " (", MAX_DPATH - 1); - strncat(tmp, i->Description, MAX_DPATH - 1); + strncat(tmp, i->Description, MAX_DPATH - 3); strncat(tmp, ")", MAX_DPATH - 1); } configs.emplace_back(tmp); @@ -142,7 +142,7 @@ public: { fetch_configurationpath(filename, MAX_DPATH); strncat(filename, txtName->getText().c_str(), MAX_DPATH - 1); - strncat(filename, ".uae", MAX_DPATH); + strncat(filename, ".uae", MAX_DPATH - 1); strncpy(changed_prefs.description, txtDesc->getText().c_str(), 256); if (cfgfile_save(&changed_prefs, filename, 0)) RefreshPanelConfig(); diff --git a/src/osdep/gui/PanelCustom.cpp b/src/osdep/gui/PanelCustom.cpp index 1230fddd..d1d43173 100644 --- a/src/osdep/gui/PanelCustom.cpp +++ b/src/osdep/gui/PanelCustom.cpp @@ -466,12 +466,11 @@ void InitPanelCustom(const struct _ConfigCategory& category) auto posY = 144 + 40; for (i = 0; i < 7; ++i) { - category.panel->add(lblCustomAction[i], DISTANCE_BORDER/2, posY); - category.panel->add(cboCustomAction[i], DISTANCE_BORDER/2 + lblCustomAction[i]->getWidth() + 4, posY); + category.panel->add(lblCustomAction[i], DISTANCE_BORDER / 2, posY); + category.panel->add(cboCustomAction[i], DISTANCE_BORDER / 2 + lblCustomAction[i]->getWidth() + 4, posY); posY = posY + DROPDOWN_HEIGHT + 6; } - posY = 144 + 40; for (i = 7; i < 14; ++i) { @@ -479,8 +478,8 @@ void InitPanelCustom(const struct _ConfigCategory& category) category.panel->add(cboCustomAction[i], DISTANCE_BORDER + lblCustomAction[i]->getWidth() + 290 + 4, posY); posY = posY + DROPDOWN_HEIGHT + 6; } - - category.panel->add(chkAnalogRemap, DISTANCE_BORDER + lblCustomAction[0]->getWidth(), posY); + + category.panel->add(chkAnalogRemap, DISTANCE_BORDER + lblCustomAction[0]->getWidth(), posY); posY += chkAnalogRemap->getHeight() + DISTANCE_NEXT_Y; category.panel->add(lblPortInput, DISTANCE_BORDER, 144); diff --git a/src/osdep/gui/PanelDisplay.cpp b/src/osdep/gui/PanelDisplay.cpp index a470f6b4..eaec7a21 100644 --- a/src/osdep/gui/PanelDisplay.cpp +++ b/src/osdep/gui/PanelDisplay.cpp @@ -258,7 +258,7 @@ void InitPanelDisplay(const struct _ConfigCategory& category) grpLineMode = new gcn::Window("Line mode"); #ifdef USE_SDL2 grpLineMode->setPosition( - grpScalingMethod->getWidth() + DISTANCE_BORDER + DISTANCE_NEXT_X, + grpScalingMethod->getWidth() + DISTANCE_BORDER + DISTANCE_NEXT_X, posY - DISTANCE_BORDER - grpScalingMethod->getHeight() - DISTANCE_NEXT_Y); #else grpLineMode->setPosition(DISTANCE_BORDER, posY); diff --git a/src/osdep/gui/PanelQuickstart.cpp b/src/osdep/gui/PanelQuickstart.cpp index e2dd13bd..40357a72 100644 --- a/src/osdep/gui/PanelQuickstart.cpp +++ b/src/osdep/gui/PanelQuickstart.cpp @@ -206,7 +206,7 @@ static void SetControlState(const int model) static void AdjustPrefs(void) { - const auto old_cs = changed_prefs.cs_compatible; + //const auto old_cs = changed_prefs.cs_compatible; built_in_prefs(&changed_prefs, quickstart_model, quickstart_conf, 0, 0); switch (quickstart_model) diff --git a/src/osdep/gui/SelectFile.cpp b/src/osdep/gui/SelectFile.cpp index 4cafe9e0..ff87e523 100644 --- a/src/osdep/gui/SelectFile.cpp +++ b/src/osdep/gui/SelectFile.cpp @@ -109,7 +109,7 @@ public: return; strncpy(tmp, workingDir, MAX_DPATH - 1); strncat(tmp, "/", MAX_DPATH - 1); - strncat(tmp, txtFilename->getText().c_str(), MAX_DPATH - 1); + strncat(tmp, txtFilename->getText().c_str(), MAX_DPATH - 2); if (strstr(tmp, filefilter[0]) == nullptr) strncat(tmp, filefilter[0], MAX_DPATH - 1); if (my_existsfile(tmp) == 1) @@ -122,7 +122,7 @@ public: if (fileList->isDir(selected_item)) return; // Directory selected -> Ok not possible strncat(workingDir, "/", MAX_DPATH - 1); - strncat(workingDir, fileList->getElementAt(selected_item).c_str(), MAX_DPATH - 1); + strncat(workingDir, fileList->getElementAt(selected_item).c_str(), MAX_DPATH - 2); dialogResult = true; } } @@ -176,7 +176,7 @@ public: const auto selected_item = lstFiles->getSelected(); strncpy(foldername, workingDir, MAX_DPATH); strncat(foldername, "/", MAX_DPATH - 1); - strncat(foldername, fileList->getElementAt(selected_item).c_str(), MAX_DPATH - 1); + strncat(foldername, fileList->getElementAt(selected_item).c_str(), MAX_DPATH - 2); if (fileList->isDir(selected_item)) checkfoldername(foldername); else if (!createNew) diff --git a/src/osdep/gui/SelectFolder.cpp b/src/osdep/gui/SelectFolder.cpp index 4f7a7d45..a4f33ad3 100644 --- a/src/osdep/gui/SelectFolder.cpp +++ b/src/osdep/gui/SelectFolder.cpp @@ -125,7 +125,7 @@ public: const auto selected_item = lstFolders->getSelected(); strncpy(foldername, workingDir, MAX_DPATH - 1); strncat(foldername, "/", MAX_DPATH - 1); - strncat(foldername, dirList.getElementAt(selected_item).c_str(), MAX_DPATH - 1); + strncat(foldername, dirList.getElementAt(selected_item).c_str(), MAX_DPATH - 2); volName = dirList.getElementAt(selected_item); checkfoldername(foldername); } @@ -369,7 +369,7 @@ bool SelectFolder(const char* title, char* value) { strncpy(value, workingDir, MAX_DPATH); if (value[strlen(value) - 1] != '/') - strncat(value, "/", MAX_DPATH); + strncat(value, "/", MAX_DPATH - 1); } return dialogResult; } diff --git a/src/osdep/gui/SelectorEntry.cpp b/src/osdep/gui/SelectorEntry.cpp index 27c8e86e..6d9425f6 100644 --- a/src/osdep/gui/SelectorEntry.cpp +++ b/src/osdep/gui/SelectorEntry.cpp @@ -27,7 +27,7 @@ namespace gcn label = new Label(caption); label->setHeight(16); - Image* img = Image::load(imagepath); + auto img = Image::load(imagepath); icon = new Icon(img); icon->setSize(16, 16); diff --git a/src/osdep/gui/main_window.cpp b/src/osdep/gui/main_window.cpp index e535336a..306b5a31 100644 --- a/src/osdep/gui/main_window.cpp +++ b/src/osdep/gui/main_window.cpp @@ -791,8 +791,8 @@ namespace widgets strncat(tmp, last_loaded_config, MAX_DPATH - 1); else { - strncat(tmp, OPTIONSFILENAME, MAX_DPATH); - strncat(tmp, ".uae", MAX_DPATH); + strncat(tmp, OPTIONSFILENAME, MAX_DPATH - 1); + strncat(tmp, ".uae", MAX_DPATH - 10); } uae_restart(-1, tmp); gui_running = false; From 505b9f39a403e09921a3572cc9a1723b00a622bd Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 20:54:59 +0100 Subject: [PATCH 14/18] Indentation corrections --- src/memory.cpp | 1731 ++++++++++++++++++++++++++---------------------- 1 file changed, 929 insertions(+), 802 deletions(-) diff --git a/src/memory.cpp b/src/memory.cpp index 65a12224..ba464f22 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -7,8 +7,6 @@ */ #include -#include - #include "sysdeps.h" #include "options.h" @@ -48,12 +46,13 @@ addrbank *mem_banks[MEMORY_BANKS]; int addr_valid(const TCHAR *txt, uaecptr addr, uae_u32 len) { - addrbank *ab = &get_mem_bank(addr); - if (ab == 0 || !(ab->flags & (ABFLAG_RAM | ABFLAG_ROM)) || addr < 0x100 || len > 16777215 || !valid_address(addr, len)) { - write_log (_T("corrupt %s pointer %x (%d) detected!\n"), txt, addr, len); - return 0; - } - return 1; + addrbank *ab = &get_mem_bank(addr); + if (ab == 0 || !(ab->flags & (ABFLAG_RAM | ABFLAG_ROM)) || addr < 0x100 || len > 16777215 || !valid_address(addr, len)) + { + write_log(_T("corrupt %s pointer %x (%d) detected!\n"), txt, addr, len); + return 0; + } + return 1; } /* A dummy bank that only contains zeros */ @@ -113,73 +112,80 @@ uae_u32 dummy_get_safe(uaecptr addr, int size, bool inst, uae_u32 defvalue) return 0; if (currprefs.cs_unmapped_space == 2) return 0xffffffff & mask; - if ((currprefs.cpu_model <= 68010) || (currprefs.cpu_model == 68020 && (currprefs.chipset_mask & CSMASK_AGA) && currprefs.address_space_24)) { - if (size == 4) { + if ((currprefs.cpu_model <= 68010) || (currprefs.cpu_model == 68020 && (currprefs.chipset_mask & CSMASK_AGA) && currprefs.address_space_24)) + { + if (size == 4) + { v = regs.db & 0xffff; if (addr & 1) v = (v << 8) | (v >> 8); v = (v << 16) | v; - } else if (size == 2) { + } + else if (size == 2) + { v = regs.db & 0xffff; if (addr & 1) v = (v << 8) | (v >> 8); - } else { + } + else + { v = regs.db; - v = (addr & 1) ? (v & 0xff) : ((v >> 8) & 0xff); + v = (addr & 1) ? (v & 0xff) : ((v >> 8) & 0xff); } } return v & mask; } -uae_u32 dummy_get (uaecptr addr, int size, bool inst, uae_u32 defvalue) +uae_u32 dummy_get(uaecptr addr, int size, bool inst, uae_u32 defvalue) { uae_u32 v = defvalue; - if (gary_nonrange(addr) || (size > 1 && gary_nonrange(addr + size - 1))) { + if (gary_nonrange(addr) || (size > 1 && gary_nonrange(addr + size - 1))) + { if (gary_toenb) - exception2 (addr, false, size, (regs.s ? 4 : 0) | (inst ? 0 : 1)); + exception2(addr, false, size, (regs.s ? 4 : 0) | (inst ? 0 : 1)); return v; } return dummy_get_safe(addr, size, inst, defvalue); } -static uae_u32 REGPARAM2 dummy_lget (uaecptr addr) +static uae_u32 REGPARAM2 dummy_lget(uaecptr addr) { - return dummy_get (addr, 4, false, nonexistingdata()); + return dummy_get(addr, 4, false, nonexistingdata()); } -uae_u32 REGPARAM2 dummy_lgeti (uaecptr addr) +uae_u32 REGPARAM2 dummy_lgeti(uaecptr addr) { - return dummy_get (addr, 4, true, nonexistingdata()); + return dummy_get(addr, 4, true, nonexistingdata()); } -static uae_u32 REGPARAM2 dummy_wget (uaecptr addr) +static uae_u32 REGPARAM2 dummy_wget(uaecptr addr) { - return dummy_get (addr, 2, false, nonexistingdata()); + return dummy_get(addr, 2, false, nonexistingdata()); } -uae_u32 REGPARAM2 dummy_wgeti (uaecptr addr) +uae_u32 REGPARAM2 dummy_wgeti(uaecptr addr) { - return dummy_get (addr, 2, true, nonexistingdata()); + return dummy_get(addr, 2, true, nonexistingdata()); } -static uae_u32 REGPARAM2 dummy_bget (uaecptr addr) +static uae_u32 REGPARAM2 dummy_bget(uaecptr addr) { - return dummy_get (addr, 1, false, nonexistingdata()); + return dummy_get(addr, 1, false, nonexistingdata()); } -static void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l) +static void REGPARAM2 dummy_lput(uaecptr addr, uae_u32 l) { } -static void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w) +static void REGPARAM2 dummy_wput(uaecptr addr, uae_u32 w) { } -static void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b) +static void REGPARAM2 dummy_bput(uaecptr addr, uae_u32 b) { } -static int REGPARAM2 dummy_check (uaecptr addr, uae_u32 size) +static int REGPARAM2 dummy_check(uaecptr addr, uae_u32 size) { - return 0; + return 0; } addrbank *get_sub_bank(uaecptr *paddr) @@ -190,12 +196,15 @@ addrbank *get_sub_bank(uaecptr *paddr) struct addrbank_sub *sb = ab->sub_banks; if (!sb) return &dummy_bank; - for (i = 0; sb[i].bank; i++) { + for (i = 0; sb[i].bank; i++) + { int offset = addr & 65535; - if (offset < sb[i + 1].offset) { + if (offset < sb[i + 1].offset) + { uae_u32 mask = sb[i].mask; uae_u32 maskval = sb[i].maskval; - if ((offset & mask) == maskval) { + if ((offset & mask) == maskval) + { *paddr = addr - sb[i].suboffset; return sb[i].bank; } @@ -204,7 +213,7 @@ addrbank *get_sub_bank(uaecptr *paddr) *paddr = addr - sb[i - 1].suboffset; return sb[i - 1].bank; } -uae_u32 REGPARAM3 sub_bank_lget (uaecptr addr) REGPARAM +uae_u32 REGPARAM3 sub_bank_lget(uaecptr addr) REGPARAM { addrbank *ab = get_sub_bank(&addr); return ab->lget(addr); @@ -263,76 +272,76 @@ uae_u32 chipmem_full_mask; static int REGPARAM3 chipmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 chipmem_xlate (uaecptr addr) REGPARAM; -static uae_u32 REGPARAM2 chipmem_lget (uaecptr addr) +static uae_u32 REGPARAM2 chipmem_lget(uaecptr addr) { - uae_u32 *m; + uae_u32 *m; - addr &= chipmem_bank.mask; - m = (uae_u32 *)(chipmem_bank.baseaddr + addr); - return do_get_mem_long (m); + addr &= chipmem_bank.mask; + m = (uae_u32 *)(chipmem_bank.baseaddr + addr); + return do_get_mem_long(m); } -static uae_u32 REGPARAM2 chipmem_wget (uaecptr addr) +static uae_u32 REGPARAM2 chipmem_wget(uaecptr addr) { - uae_u16 *m, v; + uae_u16 *m, v; - addr &= chipmem_bank.mask; - m = (uae_u16 *)(chipmem_bank.baseaddr + addr); - v = do_get_mem_word (m); - return v; + addr &= chipmem_bank.mask; + m = (uae_u16 *)(chipmem_bank.baseaddr + addr); + v = do_get_mem_word(m); + return v; } -static uae_u32 REGPARAM2 chipmem_bget (uaecptr addr) +static uae_u32 REGPARAM2 chipmem_bget(uaecptr addr) { uae_u8 v; - addr &= chipmem_bank.mask; + addr &= chipmem_bank.mask; v = chipmem_bank.baseaddr[addr]; return v; } -void REGPARAM2 chipmem_lput (uaecptr addr, uae_u32 l) +void REGPARAM2 chipmem_lput(uaecptr addr, uae_u32 l) { - uae_u32 *m; + uae_u32 *m; - addr &= chipmem_bank.mask; - m = (uae_u32 *)(chipmem_bank.baseaddr + addr); - do_put_mem_long(m, l); + addr &= chipmem_bank.mask; + m = (uae_u32 *)(chipmem_bank.baseaddr + addr); + do_put_mem_long(m, l); } -void REGPARAM2 chipmem_wput (uaecptr addr, uae_u32 w) +void REGPARAM2 chipmem_wput(uaecptr addr, uae_u32 w) { - uae_u16 *m; + uae_u16 *m; - addr &= chipmem_bank.mask; - m = (uae_u16 *)(chipmem_bank.baseaddr + addr); - do_put_mem_word (m, w); + addr &= chipmem_bank.mask; + m = (uae_u16 *)(chipmem_bank.baseaddr + addr); + do_put_mem_word(m, w); } -void REGPARAM2 chipmem_bput (uaecptr addr, uae_u32 b) +void REGPARAM2 chipmem_bput(uaecptr addr, uae_u32 b) { - addr &= chipmem_bank.mask; + addr &= chipmem_bank.mask; chipmem_bank.baseaddr[addr] = b; } -void REGPARAM2 chipmem_agnus_wput (uaecptr addr, uae_u32 w) +void REGPARAM2 chipmem_agnus_wput(uaecptr addr, uae_u32 w) { - uae_u16 *m; + uae_u16 *m; - addr &= chipmem_full_mask; - m = (uae_u16 *)(chipmem_bank.baseaddr + addr); - do_put_mem_word (m, w); + addr &= chipmem_full_mask; + m = (uae_u16 *)(chipmem_bank.baseaddr + addr); + do_put_mem_word(m, w); } -static int REGPARAM2 chipmem_check (uaecptr addr, uae_u32 size) -{ - addr &= chipmem_bank.mask; - return (addr + size) <= chipmem_bank.allocated_size; -} - -static uae_u8 *REGPARAM2 chipmem_xlate (uaecptr addr) +static int REGPARAM2 chipmem_check(uaecptr addr, uae_u32 size) { addr &= chipmem_bank.mask; - return chipmem_bank.baseaddr + addr; + return (addr + size) <= chipmem_bank.allocated_size; +} + +static uae_u8 *REGPARAM2 chipmem_xlate(uaecptr addr) +{ + addr &= chipmem_bank.mask; + return chipmem_bank.baseaddr + addr; } /* Slow memory */ @@ -427,96 +436,95 @@ int REGPARAM2 default_check (uaecptr a, uae_u32 b) static int be_cnt, be_recursive; -uae_u8 *REGPARAM2 default_xlate (uaecptr addr) +uae_u8 *REGPARAM2 default_xlate(uaecptr addr) { - if (be_recursive) { + if (be_recursive) + { cpu_halt(CPU_HALT_OPCODE_FETCH_FROM_NON_EXISTING_ADDRESS); return kickmem_xlate(2); } be_recursive++; int size = currprefs.cpu_model >= 68020 ? 4 : 2; - if (quit_program == 0) { - /* do this only in 68010+ mode, there are some tricky A500 programs.. */ - if(currprefs.cpu_model > 68000 || !currprefs.cpu_compatible) { - if (be_cnt < 3) { - write_log (_T("Your Amiga program just did something terribly stupid %08X PC=%08X\n"), addr, M68K_GETPC); - } - if (gary_toenb && (gary_nonrange(addr) || (size > 1 && gary_nonrange(addr + size - 1)))) { - exception2 (addr, false, size, regs.s ? 4 : 0); - } else { - cpu_halt (CPU_HALT_OPCODE_FETCH_FROM_NON_EXISTING_ADDRESS); - } - } + if (quit_program == 0) + { + /* do this only in 68010+ mode, there are some tricky A500 programs.. */ + if (currprefs.cpu_model > 68000 || !currprefs.cpu_compatible) + { + if (be_cnt < 3) + { + write_log(_T("Your Amiga program just did something terribly stupid %08X PC=%08X\n"), addr, M68K_GETPC); + } + if (gary_toenb && (gary_nonrange(addr) || (size > 1 && gary_nonrange(addr + size - 1)))) + { + exception2(addr, false, size, regs.s ? 4 : 0); + } + else + { + cpu_halt(CPU_HALT_OPCODE_FETCH_FROM_NON_EXISTING_ADDRESS); + } + } } be_recursive--; - return kickmem_xlate (2); /* So we don't crash. */ + return kickmem_xlate(2); /* So we don't crash. */ } /* Address banks */ addrbank dummy_bank = { - dummy_lget, dummy_wget, dummy_bget, - dummy_lput, dummy_wput, dummy_bput, - default_xlate, dummy_check, NULL, NULL, NULL, + dummy_lget, dummy_wget, dummy_bget, + dummy_lput, dummy_wput, dummy_bput, + default_xlate, dummy_check, NULL, NULL, NULL, dummy_lgeti, dummy_wgeti, - ABFLAG_NONE, S_READ, S_WRITE -}; + ABFLAG_NONE, S_READ, S_WRITE}; addrbank chipmem_bank = { - chipmem_lget, chipmem_wget, chipmem_bget, - chipmem_lput, chipmem_wput, chipmem_bput, + chipmem_lget, chipmem_wget, chipmem_bget, + chipmem_lput, chipmem_wput, chipmem_bput, chipmem_xlate, chipmem_check, NULL, _T("chip"), _T("Chip memory"), chipmem_lget, chipmem_wget, - ABFLAG_RAM | ABFLAG_THREADSAFE | ABFLAG_CHIPRAM, 0, 0 -}; + ABFLAG_RAM | ABFLAG_THREADSAFE | ABFLAG_CHIPRAM, 0, 0}; addrbank bogomem_bank = { - bogomem_lget, bogomem_wget, bogomem_bget, - bogomem_lput, bogomem_wput, bogomem_bput, + bogomem_lget, bogomem_wget, bogomem_bget, + bogomem_lput, bogomem_wput, bogomem_bput, bogomem_xlate, bogomem_check, NULL, _T("bogo"), _T("Slow memory"), bogomem_lget, bogomem_wget, - ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0 -}; + ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0}; addrbank a3000lmem_bank = { a3000lmem_lget, a3000lmem_wget, a3000lmem_bget, a3000lmem_lput, a3000lmem_wput, a3000lmem_bput, a3000lmem_xlate, a3000lmem_check, NULL, _T("ramsey_low"), _T("RAMSEY memory (low)"), a3000lmem_lget, a3000lmem_wget, - ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0 -}; + ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0}; addrbank a3000hmem_bank = { a3000hmem_lget, a3000hmem_wget, a3000hmem_bget, a3000hmem_lput, a3000hmem_wput, a3000hmem_bput, a3000hmem_xlate, a3000hmem_check, NULL, _T("ramsey_high"), _T("RAMSEY memory (high)"), a3000hmem_lget, a3000hmem_wget, - ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0 -}; + ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0}; addrbank kickmem_bank = { - kickmem_lget, kickmem_wget, kickmem_bget, - kickmem_lput, kickmem_wput, kickmem_bput, + kickmem_lget, kickmem_wget, kickmem_bget, + kickmem_lput, kickmem_wput, kickmem_bput, kickmem_xlate, kickmem_check, NULL, _T("kick"), _T("Kickstart ROM"), kickmem_lget, kickmem_wget, - ABFLAG_ROM | ABFLAG_THREADSAFE, 0, S_WRITE -}; + ABFLAG_ROM | ABFLAG_THREADSAFE, 0, S_WRITE}; addrbank extendedkickmem_bank = { - extendedkickmem_lget, extendedkickmem_wget, extendedkickmem_bget, - extendedkickmem_lput, extendedkickmem_wput, extendedkickmem_bput, + extendedkickmem_lget, extendedkickmem_wget, extendedkickmem_bget, + extendedkickmem_lput, extendedkickmem_wput, extendedkickmem_bput, extendedkickmem_xlate, extendedkickmem_check, NULL, NULL, _T("Extended Kickstart ROM"), extendedkickmem_lget, extendedkickmem_wget, - ABFLAG_ROM | ABFLAG_THREADSAFE, 0, S_WRITE -}; + ABFLAG_ROM | ABFLAG_THREADSAFE, 0, S_WRITE}; addrbank extendedkickmem2_bank = { - extendedkickmem2_lget, extendedkickmem2_wget, extendedkickmem2_bget, - extendedkickmem2_lput, extendedkickmem2_wput, extendedkickmem2_bput, + extendedkickmem2_lget, extendedkickmem2_wget, extendedkickmem2_bget, + extendedkickmem2_lput, extendedkickmem2_wput, extendedkickmem2_bput, extendedkickmem2_xlate, extendedkickmem2_check, NULL, _T("rom_a8"), _T("Extended 2nd Kickstart ROM"), extendedkickmem2_lget, extendedkickmem2_wget, - ABFLAG_ROM | ABFLAG_THREADSAFE, 0, S_WRITE -}; + ABFLAG_ROM | ABFLAG_THREADSAFE, 0, S_WRITE}; MEMORY_FUNCTIONS(custmem1); MEMORY_FUNCTIONS(custmem2); @@ -526,15 +534,13 @@ addrbank custmem1_bank = { custmem1_lput, custmem1_wput, custmem1_bput, custmem1_xlate, custmem1_check, NULL, _T("custmem1"), _T("Non-autoconfig RAM #1"), custmem1_lget, custmem1_wget, - ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0 -}; + ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0}; addrbank custmem2_bank = { custmem2_lget, custmem2_wget, custmem2_bget, custmem2_lput, custmem2_wput, custmem2_bput, custmem2_xlate, custmem2_check, NULL, _T("custmem2"), _T("Non-autoconfig RAM #2"), custmem2_lget, custmem2_wget, - ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0 -}; + ABFLAG_RAM | ABFLAG_THREADSAFE, 0, 0}; static const uae_char *kickstring = "exec.library"; @@ -610,107 +616,122 @@ static int read_kickstart(struct zfile *f, uae_u8 *mem, int size, int dochecksum return i; } -static bool load_extendedkickstart (const TCHAR *romextfile, int type) +static bool load_extendedkickstart(const TCHAR *romextfile, int type) { - struct zfile *f; - int size, off; + struct zfile *f; + int size, off; bool ret = false; - if (_tcslen (romextfile) == 0) - return false; - f = read_rom_name (romextfile); - if (!f) { - notify_user (NUMSG_NOEXTROM); - return false; - } - zfile_fseek (f, 0, SEEK_END); - size = zfile_ftell (f); + if (_tcslen(romextfile) == 0) + return false; + f = read_rom_name(romextfile); + if (!f) + { + notify_user(NUMSG_NOEXTROM); + return false; + } + zfile_fseek(f, 0, SEEK_END); + size = zfile_ftell(f); extendedkickmem_bank.reserved_size = ROM_SIZE_512; - off = 0; - if (type == 0) { - if (currprefs.cs_cd32cd) { + off = 0; + if (type == 0) + { + if (currprefs.cs_cd32cd) + { extendedkickmem_type = EXTENDED_ROM_CD32; - } else if (size > 300000) { - extendedkickmem_type = EXTENDED_ROM_CD32; - } - } else { + } + else if (size > 300000) + { + extendedkickmem_type = EXTENDED_ROM_CD32; + } + } + else + { extendedkickmem_type = type; } - if (extendedkickmem_type) { - zfile_fseek (f, off, SEEK_SET); - switch (extendedkickmem_type) { - case EXTENDED_ROM_CD32: + if (extendedkickmem_type) + { + zfile_fseek(f, off, SEEK_SET); + switch (extendedkickmem_type) + { + case EXTENDED_ROM_CD32: extendedkickmem_bank.label = _T("rom_e0"); - mapped_malloc (&extendedkickmem_bank); - extendedkickmem_bank.start = 0xe00000; - break; - } - if (extendedkickmem_bank.baseaddr) { - read_kickstart (f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size, 0, 1); - extendedkickmem_bank.mask = extendedkickmem_bank.allocated_size - 1; + mapped_malloc(&extendedkickmem_bank); + extendedkickmem_bank.start = 0xe00000; + break; + } + if (extendedkickmem_bank.baseaddr) + { + read_kickstart(f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size, 0, 1); + extendedkickmem_bank.mask = extendedkickmem_bank.allocated_size - 1; ret = true; } } - zfile_fclose (f); - return ret; + zfile_fclose(f); + return ret; } /* disable incompatible drivers */ -static int patch_residents (uae_u8 *kickmemory, int size) +static int patch_residents(uae_u8 *kickmemory, int size) { - int i, j, patched = 0; - const uae_char *residents[] = { "NCR scsi.device", NULL }; - // "scsi.device", "carddisk.device", "card.resource" }; - uaecptr base = size == ROM_SIZE_512 ? 0xf80000 : 0xfc0000; + int i, j, patched = 0; + const uae_char *residents[] = {"NCR scsi.device", NULL}; + // "scsi.device", "carddisk.device", "card.resource" }; + uaecptr base = size == ROM_SIZE_512 ? 0xf80000 : 0xfc0000; - for (i = 0; i < size - 100; i++) { - if (kickmemory[i] == 0x4a && kickmemory[i + 1] == 0xfc) { - uaecptr addr; - addr = (kickmemory[i + 2] << 24) | (kickmemory[i + 3] << 16) | (kickmemory[i + 4] << 8) | (kickmemory[i + 5] << 0); - if (addr != i + base) - continue; - addr = (kickmemory[i + 14] << 24) | (kickmemory[i + 15] << 16) | (kickmemory[i + 16] << 8) | (kickmemory[i + 17] << 0); - if (addr >= base && addr < base + size) { - j = 0; - while (residents[j]) { - if (!memcmp (residents[j], kickmemory + addr - base, strlen (residents[j]) + 1)) { - TCHAR *s = au (residents[j]); - write_log (_T("KSPatcher: '%s' at %08X disabled\n"), s, i + base); - xfree (s); - kickmemory[i] = 0x4b; /* destroy RTC_MATCHWORD */ - patched++; - break; - } - j++; - } - } - } - } - return patched; + for (i = 0; i < size - 100; i++) + { + if (kickmemory[i] == 0x4a && kickmemory[i + 1] == 0xfc) + { + uaecptr addr; + addr = (kickmemory[i + 2] << 24) | (kickmemory[i + 3] << 16) | (kickmemory[i + 4] << 8) | (kickmemory[i + 5] << 0); + if (addr != i + base) + continue; + addr = (kickmemory[i + 14] << 24) | (kickmemory[i + 15] << 16) | (kickmemory[i + 16] << 8) | (kickmemory[i + 17] << 0); + if (addr >= base && addr < base + size) + { + j = 0; + while (residents[j]) + { + if (!memcmp(residents[j], kickmemory + addr - base, strlen(residents[j]) + 1)) + { + TCHAR *s = au(residents[j]); + write_log(_T("KSPatcher: '%s' at %08X disabled\n"), s, i + base); + xfree(s); + kickmemory[i] = 0x4b; /* destroy RTC_MATCHWORD */ + patched++; + break; + } + j++; + } + } + } + } + return patched; } static void patch_kick(void) { - int patched = 0; - patched += patch_residents (kickmem_bank.baseaddr, kickmem_bank.allocated_size); - if (extendedkickmem_bank.baseaddr) { - patched += patch_residents (extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size); - if (patched) - kickstart_fix_checksum (extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size); - } - if (patched) - kickstart_fix_checksum (kickmem_bank.baseaddr, kickmem_bank.allocated_size); + int patched = 0; + patched += patch_residents(kickmem_bank.baseaddr, kickmem_bank.allocated_size); + if (extendedkickmem_bank.baseaddr) + { + patched += patch_residents(extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size); + if (patched) + kickstart_fix_checksum(extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size); + } + if (patched) + kickstart_fix_checksum(kickmem_bank.baseaddr, kickmem_bank.allocated_size); } extern unsigned char arosrom[]; extern unsigned int arosrom_len; -static bool load_kickstart_replacement (void) +static bool load_kickstart_replacement(void) { - struct zfile *f; - f = zfile_fopen_data (_T("aros.gz"), arosrom_len, arosrom); + struct zfile* f = zfile_fopen_data(_T("aros.gz"), arosrom_len, arosrom); if (!f) return false; - f = zfile_gunzip (f); + f = zfile_gunzip(f); if (!f) return false; @@ -718,14 +739,14 @@ static bool load_kickstart_replacement (void) extendedkickmem_bank.mask = ROM_SIZE_512 - 1; extendedkickmem_bank.label = _T("rom_e0"); extendedkickmem_type = EXTENDED_ROM_KS; - mapped_malloc (&extendedkickmem_bank); - read_kickstart (f, extendedkickmem_bank.baseaddr, ROM_SIZE_512, 0, 1); + mapped_malloc(&extendedkickmem_bank); + read_kickstart(f, extendedkickmem_bank.baseaddr, ROM_SIZE_512, 0, 1); kickmem_bank.reserved_size = ROM_SIZE_512; kickmem_bank.mask = ROM_SIZE_512 - 1; - read_kickstart (f, kickmem_bank.baseaddr, ROM_SIZE_512, 1, 0); + read_kickstart(f, kickmem_bank.baseaddr, ROM_SIZE_512, 1, 0); - zfile_fclose (f); + zfile_fclose(f); // if 68000-68020 config without any other fast ram with m68k aros: enable special extra RAM. if (currprefs.cpu_model <= 68020 && @@ -733,7 +754,8 @@ static bool load_kickstart_replacement (void) currprefs.fastmem[0].size == 0 && currprefs.z3fastmem[0].size == 0 && currprefs.mbresmem_high_size == 0 && - currprefs.mbresmem_low_size == 0) { + currprefs.mbresmem_low_size == 0) + { changed_prefs.custom_memory_addrs[0] = currprefs.custom_memory_addrs[0] = 0xa80000; changed_prefs.custom_memory_sizes[0] = currprefs.custom_memory_sizes[0] = 512 * 1024; @@ -748,117 +770,130 @@ static bool load_kickstart_replacement (void) static struct zfile *get_kickstart_filehandle(struct uae_prefs *p) { - struct zfile *f; - TCHAR tmprom[MAX_DPATH], tmprom2[MAX_DPATH]; + struct zfile *f; + TCHAR tmprom[MAX_DPATH], tmprom2[MAX_DPATH]; - f = read_rom_name (p->romfile); - _tcscpy (tmprom, p->romfile); - if (f == NULL) { - _stprintf (tmprom2, _T("%s%s"), start_path_data, p->romfile); - f = rom_fopen (tmprom2, _T("rb"), ZFD_NORMAL); - if (f == NULL) { - _stprintf (p->romfile, _T("%sroms/kick.rom"), start_path_data); - f = rom_fopen (p->romfile, _T("rb"), ZFD_NORMAL); - if (f == NULL) { - _stprintf (p->romfile, _T("%skick.rom"), start_path_data); - f = rom_fopen(p->romfile, _T("rb"), ZFD_NORMAL); + f = read_rom_name(p->romfile); + _tcscpy(tmprom, p->romfile); + if (f == NULL) + { + _stprintf(tmprom2, _T("%s%s"), start_path_data, p->romfile); + f = rom_fopen(tmprom2, _T("rb"), ZFD_NORMAL); + if (f == NULL) + { + _stprintf(p->romfile, _T("%sroms/kick.rom"), start_path_data); + f = rom_fopen(p->romfile, _T("rb"), ZFD_NORMAL); + if (f == NULL) + { + _stprintf(p->romfile, _T("%skick.rom"), start_path_data); + f = rom_fopen(p->romfile, _T("rb"), ZFD_NORMAL); if (f == NULL) - f = read_rom_name_guess (tmprom); - } - } else { - _tcscpy (p->romfile, tmprom2); - } - } + f = read_rom_name_guess(tmprom); + } + } + else + { + _tcscpy(p->romfile, tmprom2); + } + } return f; } -static int load_kickstart (void) +static int load_kickstart(void) { TCHAR tmprom[MAX_DPATH]; - cloanto_rom = 0; - if (!_tcscmp (currprefs.romfile, _T(":AROS"))) { - return load_kickstart_replacement (); - } + cloanto_rom = 0; + if (!_tcscmp(currprefs.romfile, _T(":AROS"))) + { + return load_kickstart_replacement(); + } _tcscpy(tmprom, currprefs.romfile); struct zfile *f = get_kickstart_filehandle(&currprefs); - addkeydir (currprefs.romfile); + addkeydir(currprefs.romfile); if (f == NULL) /* still no luck */ - goto err; + goto err; - if (f != NULL) { - int filesize, size, maxsize; - int kspos = ROM_SIZE_512; - int extpos = 0; + if (f != NULL) + { + int filesize, size, maxsize; + int kspos = ROM_SIZE_512; + int extpos = 0; - maxsize = ROM_SIZE_512; - zfile_fseek (f, 0, SEEK_END); - filesize = zfile_ftell (f); - zfile_fseek (f, 0, SEEK_SET); - if (filesize == 1760 * 512) { - filesize = ROM_SIZE_256; - maxsize = ROM_SIZE_256; - } - if (filesize == ROM_SIZE_512 + 8) { - /* GVP 0xf0 kickstart */ - zfile_fseek (f, 8, SEEK_SET); - } - if (filesize >= ROM_SIZE_512 * 2) { - struct romdata *rd = getromdatabyzfile(f); - zfile_fseek (f, kspos, SEEK_SET); - } - if (filesize >= ROM_SIZE_512 * 4) { - kspos = ROM_SIZE_512 * 3; - extpos = 0; - zfile_fseek (f, kspos, SEEK_SET); - } - size = read_kickstart (f, kickmem_bank.baseaddr, maxsize, 1, 0); - if (size == 0) - goto err; - kickmem_bank.mask = size - 1; - kickmem_bank.reserved_size = size; - if (filesize >= ROM_SIZE_512 * 2 && !extendedkickmem_type) { - extendedkickmem_bank.reserved_size = ROM_SIZE_512; - extendedkickmem_type = EXTENDED_ROM_KS; + maxsize = ROM_SIZE_512; + zfile_fseek(f, 0, SEEK_END); + filesize = zfile_ftell(f); + zfile_fseek(f, 0, SEEK_SET); + if (filesize == 1760 * 512) + { + filesize = ROM_SIZE_256; + maxsize = ROM_SIZE_256; + } + if (filesize == ROM_SIZE_512 + 8) + { + /* GVP 0xf0 kickstart */ + zfile_fseek(f, 8, SEEK_SET); + } + if (filesize >= ROM_SIZE_512 * 2) + { + struct romdata *rd = getromdatabyzfile(f); + zfile_fseek(f, kspos, SEEK_SET); + } + if (filesize >= ROM_SIZE_512 * 4) + { + kspos = ROM_SIZE_512 * 3; + extpos = 0; + zfile_fseek(f, kspos, SEEK_SET); + } + size = read_kickstart(f, kickmem_bank.baseaddr, maxsize, 1, 0); + if (size == 0) + goto err; + kickmem_bank.mask = size - 1; + kickmem_bank.reserved_size = size; + if (filesize >= ROM_SIZE_512 * 2 && !extendedkickmem_type) + { + extendedkickmem_bank.reserved_size = ROM_SIZE_512; + extendedkickmem_type = EXTENDED_ROM_KS; extendedkickmem_bank.label = _T("rom_e0"); extendedkickmem_bank.start = 0xe00000; - mapped_malloc (&extendedkickmem_bank); - zfile_fseek (f, extpos, SEEK_SET); - read_kickstart (f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size, 0, 1); - extendedkickmem_bank.mask = extendedkickmem_bank.allocated_size - 1; - } - if (filesize > ROM_SIZE_512 * 2) { - extendedkickmem2_bank.reserved_size = ROM_SIZE_512 * 2; - mapped_malloc (&extendedkickmem2_bank); - zfile_fseek (f, extpos + ROM_SIZE_512, SEEK_SET); - read_kickstart (f, extendedkickmem2_bank.baseaddr, ROM_SIZE_512, 0, 1); - zfile_fseek (f, extpos + ROM_SIZE_512 * 2, SEEK_SET); - read_kickstart (f, extendedkickmem2_bank.baseaddr + ROM_SIZE_512, ROM_SIZE_512, 0, 1); - extendedkickmem2_bank.mask = extendedkickmem2_bank.allocated_size - 1; + mapped_malloc(&extendedkickmem_bank); + zfile_fseek(f, extpos, SEEK_SET); + read_kickstart(f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated_size, 0, 1); + extendedkickmem_bank.mask = extendedkickmem_bank.allocated_size - 1; + } + if (filesize > ROM_SIZE_512 * 2) + { + extendedkickmem2_bank.reserved_size = ROM_SIZE_512 * 2; + mapped_malloc(&extendedkickmem2_bank); + zfile_fseek(f, extpos + ROM_SIZE_512, SEEK_SET); + read_kickstart(f, extendedkickmem2_bank.baseaddr, ROM_SIZE_512, 0, 1); + zfile_fseek(f, extpos + ROM_SIZE_512 * 2, SEEK_SET); + read_kickstart(f, extendedkickmem2_bank.baseaddr + ROM_SIZE_512, ROM_SIZE_512, 0, 1); + extendedkickmem2_bank.mask = extendedkickmem2_bank.allocated_size - 1; extendedkickmem2_bank.start = 0xa80000; - } - } + } + } - kickstart_version = (kickmem_bank.baseaddr[12] << 8) | kickmem_bank.baseaddr[13]; - if (kickstart_version == 0xffff) { + kickstart_version = (kickmem_bank.baseaddr[12] << 8) | kickmem_bank.baseaddr[13]; + if (kickstart_version == 0xffff) + { // 1.0-1.1 and older kickstart_version = (kickmem_bank.baseaddr[16] << 8) | kickmem_bank.baseaddr[17]; if (kickstart_version > 33) - kickstart_version = 0; + kickstart_version = 0; } - zfile_fclose (f); - return 1; + zfile_fclose(f); + return 1; err: - _tcscpy (currprefs.romfile, tmprom); - zfile_fclose (f); - return 0; + _tcscpy(currprefs.romfile, tmprom); + zfile_fclose(f); + return 0; } - -static void init_mem_banks (void) +static void init_mem_banks(void) { // unsigned so i << 16 won't overflow to negative when i >= 32768 - for (unsigned int i = 0; i < MEMORY_BANKS; i++) - mem_banks[i] = &dummy_bank; + for (unsigned int i = 0; i < MEMORY_BANKS; i++) + mem_banks[i] = &dummy_bank; } static bool singlebit (uae_u32 v) @@ -868,167 +903,192 @@ static bool singlebit (uae_u32 v) return (v & ~1) == 0; } -static void allocate_memory (void) +static void allocate_memory(void) { - if (chipmem_bank.reserved_size != currprefs.chipmem_size) { - int memsize; - mapped_free (&chipmem_bank); - if (currprefs.chipmem_size > 2 * 1024 * 1024) { - free_fastmemory (0); + if (chipmem_bank.reserved_size != currprefs.chipmem_size) + { + int memsize; + mapped_free(&chipmem_bank); + if (currprefs.chipmem_size > 2 * 1024 * 1024) + { + free_fastmemory(0); } - memsize = chipmem_bank.reserved_size = currprefs.chipmem_size; - chipmem_full_mask = chipmem_bank.mask = chipmem_bank.reserved_size - 1; + memsize = chipmem_bank.reserved_size = currprefs.chipmem_size; + chipmem_full_mask = chipmem_bank.mask = chipmem_bank.reserved_size - 1; chipmem_bank.start = chipmem_start_addr; if (!currprefs.cachesize && memsize < 0x100000) memsize = 0x100000; - if (memsize > 0x100000 && memsize < 0x200000) - memsize = 0x200000; + if (memsize > 0x100000 && memsize < 0x200000) + memsize = 0x200000; chipmem_bank.reserved_size = memsize; - mapped_malloc (&chipmem_bank); + mapped_malloc(&chipmem_bank); chipmem_bank.reserved_size = currprefs.chipmem_size; chipmem_bank.allocated_size = currprefs.chipmem_size; - if (chipmem_bank.baseaddr == 0) { - write_log (_T("Fatal error: out of memory for chipmem.\n")); + if (chipmem_bank.baseaddr == 0) + { + write_log(_T("Fatal error: out of memory for chipmem.\n")); chipmem_bank.reserved_size = 0; - } else { + } + else + { need_hardreset = true; - if (memsize > chipmem_bank.allocated_size) - memset (chipmem_bank.baseaddr + chipmem_bank.allocated_size, 0xff, memsize - chipmem_bank.allocated_size); - } - currprefs.chipset_mask = changed_prefs.chipset_mask; - chipmem_full_mask = chipmem_bank.allocated_size - 1; - if (!currprefs.cachesize) { - if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { - if (chipmem_bank.allocated_size < 0x100000) - chipmem_full_mask = 0x100000 - 1; - if (chipmem_bank.allocated_size > 0x100000 && chipmem_bank.allocated_size < 0x200000) - chipmem_full_mask = chipmem_bank.mask = 0x200000 - 1; - } - } - } + if (memsize > chipmem_bank.allocated_size) + memset(chipmem_bank.baseaddr + chipmem_bank.allocated_size, 0xff, memsize - chipmem_bank.allocated_size); + } + currprefs.chipset_mask = changed_prefs.chipset_mask; + chipmem_full_mask = chipmem_bank.allocated_size - 1; + if (!currprefs.cachesize) + { + if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) + { + if (chipmem_bank.allocated_size < 0x100000) + chipmem_full_mask = 0x100000 - 1; + if (chipmem_bank.allocated_size > 0x100000 && chipmem_bank.allocated_size < 0x200000) + chipmem_full_mask = chipmem_bank.mask = 0x200000 - 1; + } + } + } - if (bogomem_bank.reserved_size != currprefs.bogomem_size) { - mapped_free (&bogomem_bank); + if (bogomem_bank.reserved_size != currprefs.bogomem_size) + { + mapped_free(&bogomem_bank); bogomem_bank.reserved_size = 0; - - if(currprefs.bogomem_size > 0x1c0000) - currprefs.bogomem_size = 0x1c0000; - if (currprefs.bogomem_size > 0x180000 && ((changed_prefs.chipset_mask & CSMASK_AGA) || (currprefs.cpu_model >= 68020))) - currprefs.bogomem_size = 0x180000; - bogomem_bank.reserved_size = currprefs.bogomem_size; + if (currprefs.bogomem_size > 0x1c0000) + currprefs.bogomem_size = 0x1c0000; + if (currprefs.bogomem_size > 0x180000 && ((changed_prefs.chipset_mask & CSMASK_AGA) || (currprefs.cpu_model >= 68020))) + currprefs.bogomem_size = 0x180000; + + bogomem_bank.reserved_size = currprefs.bogomem_size; if (bogomem_bank.reserved_size >= 0x180000) bogomem_bank.reserved_size = 0x200000; bogomem_bank.mask = bogomem_bank.reserved_size - 1; bogomem_bank.start = bogomem_start_addr; - if (bogomem_bank.reserved_size) { - if (!mapped_malloc (&bogomem_bank)) { - write_log (_T("Out of memory for bogomem.\n")); - bogomem_bank.reserved_size = 0; - } + if (bogomem_bank.reserved_size) + { + if (!mapped_malloc(&bogomem_bank)) + { + write_log(_T("Out of memory for bogomem.\n")); + bogomem_bank.reserved_size = 0; + } } - need_hardreset = true; + need_hardreset = true; } - if (a3000lmem_bank.reserved_size != currprefs.mbresmem_low_size) { - mapped_free (&a3000lmem_bank); + if (a3000lmem_bank.reserved_size != currprefs.mbresmem_low_size) + { + mapped_free(&a3000lmem_bank); a3000lmem_bank.reserved_size = currprefs.mbresmem_low_size; a3000lmem_bank.mask = a3000lmem_bank.reserved_size - 1; a3000lmem_bank.start = 0x08000000 - a3000lmem_bank.reserved_size; - if (a3000lmem_bank.reserved_size) { - if (!mapped_malloc (&a3000lmem_bank)) { - write_log (_T("Out of memory for a3000lowmem.\n")); + if (a3000lmem_bank.reserved_size) + { + if (!mapped_malloc(&a3000lmem_bank)) + { + write_log(_T("Out of memory for a3000lowmem.\n")); a3000lmem_bank.reserved_size = 0; } } need_hardreset = true; } - if (a3000hmem_bank.reserved_size != currprefs.mbresmem_high_size) { - mapped_free (&a3000hmem_bank); + if (a3000hmem_bank.reserved_size != currprefs.mbresmem_high_size) + { + mapped_free(&a3000hmem_bank); a3000hmem_bank.reserved_size = currprefs.mbresmem_high_size; a3000hmem_bank.mask = a3000hmem_bank.reserved_size - 1; a3000hmem_bank.start = 0x08000000; - if (a3000hmem_bank.reserved_size) { - if (!mapped_malloc (&a3000hmem_bank)) { - write_log (_T("Out of memory for a3000highmem.\n")); + if (a3000hmem_bank.reserved_size) + { + if (!mapped_malloc(&a3000hmem_bank)) + { + write_log(_T("Out of memory for a3000highmem.\n")); a3000hmem_bank.reserved_size = 0; } } need_hardreset = true; } - if (custmem1_bank.reserved_size != currprefs.custom_memory_sizes[0]) { - mapped_free (&custmem1_bank); + if (custmem1_bank.reserved_size != currprefs.custom_memory_sizes[0]) + { + mapped_free(&custmem1_bank); custmem1_bank.reserved_size = currprefs.custom_memory_sizes[0]; // custmem1 and 2 can have non-power of 2 size so only set correct mask if size is power of 2. - custmem1_bank.mask = singlebit (custmem1_bank.reserved_size) ? custmem1_bank.reserved_size - 1 : -1; + custmem1_bank.mask = singlebit(custmem1_bank.reserved_size) ? custmem1_bank.reserved_size - 1 : -1; custmem1_bank.start = currprefs.custom_memory_addrs[0]; - if (custmem1_bank.reserved_size) { - if (!mapped_malloc (&custmem1_bank)) + if (custmem1_bank.reserved_size) + { + if (!mapped_malloc(&custmem1_bank)) custmem1_bank.reserved_size = 0; } } - if (custmem2_bank.reserved_size != currprefs.custom_memory_sizes[1]) { - mapped_free (&custmem2_bank); + if (custmem2_bank.reserved_size != currprefs.custom_memory_sizes[1]) + { + mapped_free(&custmem2_bank); custmem2_bank.reserved_size = currprefs.custom_memory_sizes[1]; - custmem2_bank.mask = singlebit (custmem2_bank.reserved_size) ? custmem2_bank.reserved_size - 1 : -1; + custmem2_bank.mask = singlebit(custmem2_bank.reserved_size) ? custmem2_bank.reserved_size - 1 : -1; custmem2_bank.start = currprefs.custom_memory_addrs[1]; - if (custmem2_bank.reserved_size) { - if (!mapped_malloc (&custmem2_bank)) + if (custmem2_bank.reserved_size) + { + if (!mapped_malloc(&custmem2_bank)) custmem2_bank.reserved_size = 0; } } - if (savestate_state == STATE_RESTORE) { - if (bootrom_filepos) { - protect_roms (false); - restore_ram (bootrom_filepos, rtarea_bank.baseaddr); - protect_roms (true); - } - restore_ram (chip_filepos, chipmem_bank.baseaddr); - if (bogomem_bank.allocated_size > 0) - restore_ram (bogo_filepos, bogomem_bank.baseaddr); + if (savestate_state == STATE_RESTORE) + { + if (bootrom_filepos) + { + protect_roms(false); + restore_ram(bootrom_filepos, rtarea_bank.baseaddr); + protect_roms(true); + } + restore_ram(chip_filepos, chipmem_bank.baseaddr); + if (bogomem_bank.allocated_size > 0) + restore_ram(bogo_filepos, bogomem_bank.baseaddr); if (a3000lmem_bank.allocated_size > 0) - restore_ram (a3000lmem_filepos, a3000lmem_bank.baseaddr); + restore_ram(a3000lmem_filepos, a3000lmem_bank.baseaddr); if (a3000hmem_bank.allocated_size > 0) - restore_ram (a3000hmem_filepos, a3000hmem_bank.baseaddr); - } - bootrom_filepos = 0; - chip_filepos = 0; - bogo_filepos = 0; + restore_ram(a3000hmem_filepos, a3000hmem_bank.baseaddr); + } + bootrom_filepos = 0; + chip_filepos = 0; + bogo_filepos = 0; a3000lmem_filepos = 0; a3000hmem_filepos = 0; } -void map_overlay (int chip) +void map_overlay(int chip) { - int size; - addrbank *cb; - int currPC = m68k_getpc(); + int size; + addrbank *cb; + int currPC = m68k_getpc(); - size = chipmem_bank.allocated_size >= 0x180000 ? (chipmem_bank.allocated_size >> 16) : 32; - cb = &chipmem_bank; - if (chip) { - map_banks (&dummy_bank, 0, size, 0); - map_banks (cb, 0, size, chipmem_bank.allocated_size); - } else { - addrbank *rb = NULL; - if (size < 32) - size = 32; - cb = &get_mem_bank (0xf00000); - if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word (0xf00000) == 0x1114) - rb = cb; - cb = &get_mem_bank (0xe00000); - if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word (0xe00000) == 0x1114) - rb = cb; - if (!rb) - rb = &kickmem_bank; - map_banks (rb, 0, size, 0x80000); - } - if (!isrestore () && valid_address (regs.pc, 4)) - m68k_setpc_normal (currPC); + size = chipmem_bank.allocated_size >= 0x180000 ? (chipmem_bank.allocated_size >> 16) : 32; + cb = &chipmem_bank; + if (chip) + { + map_banks(&dummy_bank, 0, size, 0); + map_banks(cb, 0, size, chipmem_bank.allocated_size); + } + else + { + addrbank *rb = NULL; + if (size < 32) + size = 32; + cb = &get_mem_bank(0xf00000); + if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word(0xf00000) == 0x1114) + rb = cb; + cb = &get_mem_bank(0xe00000); + if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word(0xe00000) == 0x1114) + rb = cb; + if (!rb) + rb = &kickmem_bank; + map_banks(rb, 0, size, 0x80000); + } + if (!isrestore() && valid_address(regs.pc, 4)) + m68k_setpc_normal(currPC); } static void map_banks_set(addrbank *bank, int start, int size, int realsize) @@ -1036,81 +1096,96 @@ static void map_banks_set(addrbank *bank, int start, int size, int realsize) map_banks(bank, start, size, realsize); } -void memory_clear (void) +void memory_clear(void) { mem_hardreset = 0; if (savestate_state == STATE_RESTORE) return; if (chipmem_bank.baseaddr) - memset (chipmem_bank.baseaddr, 0, chipmem_bank.allocated_size); + memset(chipmem_bank.baseaddr, 0, chipmem_bank.allocated_size); if (bogomem_bank.baseaddr) - memset (bogomem_bank.baseaddr, 0, bogomem_bank.allocated_size); + memset(bogomem_bank.baseaddr, 0, bogomem_bank.allocated_size); if (a3000lmem_bank.baseaddr) memset(a3000lmem_bank.baseaddr, 0, a3000lmem_bank.allocated_size); if (a3000hmem_bank.baseaddr) memset(a3000hmem_bank.baseaddr, 0, a3000hmem_bank.allocated_size); - expansion_clear (); + expansion_clear(); } static void restore_roms(void) { - protect_roms (false); - write_log (_T("ROM loader.. (%s)\n"), currprefs.romfile); - kickstart_rom = 1; + protect_roms(false); + write_log(_T("ROM loader.. (%s)\n"), currprefs.romfile); + kickstart_rom = 1; - memcpy (currprefs.romfile, changed_prefs.romfile, sizeof currprefs.romfile); - memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile); + memcpy(currprefs.romfile, changed_prefs.romfile, sizeof currprefs.romfile); + memcpy(currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile); need_hardreset = true; - mapped_free (&extendedkickmem_bank); - mapped_free (&extendedkickmem2_bank); - extendedkickmem_bank.reserved_size = 0; + mapped_free(&extendedkickmem_bank); + mapped_free(&extendedkickmem2_bank); + extendedkickmem_bank.reserved_size = 0; extendedkickmem2_bank.reserved_size = 0; extendedkickmem_type = 0; - load_extendedkickstart (currprefs.romextfile, 0); + load_extendedkickstart(currprefs.romextfile, 0); kickmem_bank.mask = ROM_SIZE_512 - 1; - if (!load_kickstart ()) { - if (_tcslen (currprefs.romfile) > 0) { - error_log (_T("Failed to open '%s'\n"), currprefs.romfile); - notify_user (NUMSG_NOROM); - } - load_kickstart_replacement (); - } else { - struct romdata *rd = getromdatabydata (kickmem_bank.baseaddr, kickmem_bank.reserved_size); - if (rd) { - write_log (_T("Known ROM '%s' loaded\n"), rd->name); - if ((rd->cpu & 8) && changed_prefs.cpu_model < 68030) { - notify_user (NUMSG_KS68030PLUS); - uae_restart (-1, NULL); - } else if ((rd->cpu & 3) == 3 && changed_prefs.cpu_model != 68030) { - notify_user (NUMSG_KS68030); - uae_restart (-1, NULL); - } else if ((rd->cpu & 3) == 1 && changed_prefs.cpu_model < 68020) { - notify_user (NUMSG_KS68EC020); - uae_restart (-1, NULL); - } else if ((rd->cpu & 3) == 2 && (changed_prefs.cpu_model < 68020 || changed_prefs.address_space_24)) { - notify_user (NUMSG_KS68020); - uae_restart (-1, NULL); - } - if (rd->cloanto) - cloanto_rom = 1; - kickstart_rom = 0; + if (!load_kickstart()) + { + if (_tcslen(currprefs.romfile) > 0) + { + error_log(_T("Failed to open '%s'\n"), currprefs.romfile); + notify_user(NUMSG_NOROM); + } + load_kickstart_replacement(); + } + else + { + struct romdata *rd = getromdatabydata(kickmem_bank.baseaddr, kickmem_bank.reserved_size); + if (rd) + { + write_log(_T("Known ROM '%s' loaded\n"), rd->name); + if ((rd->cpu & 8) && changed_prefs.cpu_model < 68030) + { + notify_user(NUMSG_KS68030PLUS); + uae_restart(-1, NULL); + } + else if ((rd->cpu & 3) == 3 && changed_prefs.cpu_model != 68030) + { + notify_user(NUMSG_KS68030); + uae_restart(-1, NULL); + } + else if ((rd->cpu & 3) == 1 && changed_prefs.cpu_model < 68020) + { + notify_user(NUMSG_KS68EC020); + uae_restart(-1, NULL); + } + else if ((rd->cpu & 3) == 2 && (changed_prefs.cpu_model < 68020 || changed_prefs.address_space_24)) + { + notify_user(NUMSG_KS68020); + uae_restart(-1, NULL); + } + if (rd->cloanto) + cloanto_rom = 1; + kickstart_rom = 0; if ((rd->type & (ROMTYPE_SPECIALKICK | ROMTYPE_KICK)) == ROMTYPE_KICK) - kickstart_rom = 1; - if ((rd->cpu & 4) && currprefs.cs_compatible) { + kickstart_rom = 1; + if ((rd->cpu & 4) && currprefs.cs_compatible) + { /* A4000 ROM = need ramsey, gary and ide */ if (currprefs.cs_ramseyrev < 0) changed_prefs.cs_ramseyrev = currprefs.cs_ramseyrev = 0x0f; changed_prefs.cs_fatgaryrev = currprefs.cs_fatgaryrev = 0; if (currprefs.cs_ide != IDE_A4000) changed_prefs.cs_ide = currprefs.cs_ide = -1; - } - } else { - write_log (_T("Unknown ROM '%s' loaded\n"), currprefs.romfile); - } - } - patch_kick (); - write_log (_T("ROM loader end\n")); - protect_roms (true); + } + } + else + { + write_log(_T("Unknown ROM '%s' loaded\n"), currprefs.romfile); + } + } + patch_kick(); + write_log(_T("ROM loader end\n")); + protect_roms(true); } bool read_kickstart_version(struct uae_prefs *p) @@ -1120,11 +1195,12 @@ bool read_kickstart_version(struct uae_prefs *p) struct zfile *z = get_kickstart_filehandle(p); if (!z) return false; - uae_u8 mem[32] = { 0 }; + uae_u8 mem[32] = {0}; read_kickstart(z, mem, sizeof mem, 0, 0); zfile_fclose(z); kickstart_version = (mem[12] << 8) | mem[13]; - if (kickstart_version == 0xffff) { + if (kickstart_version == 0xffff) + { // 1.0-1.1 and older kickstart_version = (mem[16] << 8) | mem[17]; if (kickstart_version > 33) @@ -1134,9 +1210,9 @@ bool read_kickstart_version(struct uae_prefs *p) return true; } -void memory_reset (void) +void memory_reset(void) { - int bnk, bnk_end; + int bnk, bnk_end; bool gayleorfatgary; need_hardreset = false; @@ -1146,11 +1222,11 @@ void memory_reset (void) last_address_space_24 = changed_prefs.address_space_24; if (mem_hardreset > 2) - memory_init (); + memory_init(); be_cnt = be_recursive = 0; - currprefs.chipmem_size = changed_prefs.chipmem_size; - currprefs.bogomem_size = changed_prefs.bogomem_size; + currprefs.chipmem_size = changed_prefs.chipmem_size; + currprefs.bogomem_size = changed_prefs.bogomem_size; currprefs.mbresmem_low_size = changed_prefs.mbresmem_low_size; currprefs.mbresmem_high_size = changed_prefs.mbresmem_high_size; currprefs.cs_ksmirror_e0 = changed_prefs.cs_ksmirror_e0; @@ -1163,210 +1239,228 @@ void memory_reset (void) gayleorfatgary = ((currprefs.chipset_mask & CSMASK_AGA) || currprefs.cs_pcmcia || currprefs.cs_ide > 0) && !currprefs.cs_cd32cd; - init_mem_banks (); - allocate_memory (); + init_mem_banks(); + allocate_memory(); - if (mem_hardreset > 1 - || _tcscmp (currprefs.romfile, changed_prefs.romfile) != 0 - || _tcscmp (currprefs.romextfile, changed_prefs.romextfile) != 0) - { + if (mem_hardreset > 1 || _tcscmp(currprefs.romfile, changed_prefs.romfile) != 0 || _tcscmp(currprefs.romextfile, changed_prefs.romextfile) != 0) + { restore_roms(); - } + } - map_banks (&custom_bank, 0xC0, 0xE0 - 0xC0, 0); - map_banks (&cia_bank, 0xA0, 32, 0); + map_banks(&custom_bank, 0xC0, 0xE0 - 0xC0, 0); + map_banks(&cia_bank, 0xA0, 32, 0); if (currprefs.cs_rtc != 3) - /* D80000 - DDFFFF not mapped (A1000 or A2000 = custom chips) */ - map_banks (&dummy_bank, 0xD8, 6, 0); + /* D80000 - DDFFFF not mapped (A1000 or A2000 = custom chips) */ + map_banks(&dummy_bank, 0xD8, 6, 0); - /* map "nothing" to 0x200000 - 0x9FFFFF (0xBEFFFF if Gayle or Fat Gary) */ - bnk = chipmem_bank.allocated_size >> 16; - if (bnk < 0x20 + (currprefs.fastmem[0].size >> 16)) - bnk = 0x20 + (currprefs.fastmem[0].size >> 16); + /* map "nothing" to 0x200000 - 0x9FFFFF (0xBEFFFF if Gayle or Fat Gary) */ + bnk = chipmem_bank.allocated_size >> 16; + if (bnk < 0x20 + (currprefs.fastmem[0].size >> 16)) + bnk = 0x20 + (currprefs.fastmem[0].size >> 16); bnk_end = currprefs.cs_cd32cd ? 0xBE : (gayleorfatgary ? 0xBF : 0xA0); - map_banks (&dummy_bank, bnk, bnk_end - bnk, 0); - if (gayleorfatgary) { - // a4000 = custom chips from 0xc0 to 0xd0 + map_banks(&dummy_bank, bnk, bnk_end - bnk, 0); + if (gayleorfatgary) + { + // a4000 = custom chips from 0xc0 to 0xd0 if (currprefs.cs_ide == IDE_A4000) - map_banks (&dummy_bank, 0xd0, 8, 0); + map_banks(&dummy_bank, 0xd0, 8, 0); else - map_banks (&dummy_bank, 0xc0, 0xd8 - 0xc0, 0); - } else if (currprefs.cs_cd32cd) { + map_banks(&dummy_bank, 0xc0, 0xd8 - 0xc0, 0); + } + else if (currprefs.cs_cd32cd) + { // CD32: 0xc0 to 0xd0 map_banks(&dummy_bank, 0xd0, 8, 0); // strange 64k custom mirror map_banks(&custom_bank, 0xb9, 1, 0); - } + } - if (bogomem_bank.baseaddr) { - int t = currprefs.bogomem_size >> 16; - if (t > 0x1C) - t = 0x1C; - if (t > 0x18 && ((currprefs.chipset_mask & CSMASK_AGA) || (currprefs.cpu_model >= 68020 && !currprefs.address_space_24))) - t = 0x18; - map_banks (&bogomem_bank, 0xC0, t, 0); - } - if (currprefs.cs_ide || currprefs.cs_pcmcia) { - if (currprefs.cs_ide == IDE_A600A1200 || currprefs.cs_pcmcia) { - map_banks (&gayle_bank, 0xD8, 6, 0); - map_banks (&gayle2_bank, 0xDD, 2, 0); + if (bogomem_bank.baseaddr) + { + int t = currprefs.bogomem_size >> 16; + if (t > 0x1C) + t = 0x1C; + if (t > 0x18 && ((currprefs.chipset_mask & CSMASK_AGA) || (currprefs.cpu_model >= 68020 && !currprefs.address_space_24))) + t = 0x18; + map_banks(&bogomem_bank, 0xC0, t, 0); + } + if (currprefs.cs_ide || currprefs.cs_pcmcia) + { + if (currprefs.cs_ide == IDE_A600A1200 || currprefs.cs_pcmcia) + { + map_banks(&gayle_bank, 0xD8, 6, 0); + map_banks(&gayle2_bank, 0xDD, 2, 0); } - gayle_map_pcmcia (); + gayle_map_pcmcia(); if (currprefs.cs_ide == IDE_A4000) - map_banks (&gayle_bank, 0xDD, 1, 0); + map_banks(&gayle_bank, 0xDD, 1, 0); if (currprefs.cs_ide < 0 && !currprefs.cs_pcmcia) - map_banks (&gayle_bank, 0xD8, 6, 0); + map_banks(&gayle_bank, 0xD8, 6, 0); if (currprefs.cs_ide < 0) - map_banks (&gayle_bank, 0xDD, 1, 0); - } + map_banks(&gayle_bank, 0xDD, 1, 0); + } if (currprefs.cs_rtc == 3) // A2000 clock - map_banks (&clock_bank, 0xD8, 4, 0); + map_banks(&clock_bank, 0xD8, 4, 0); if (currprefs.cs_rtc == 1 || currprefs.cs_rtc == 2) - map_banks (&clock_bank, 0xDC, 1, 0); + map_banks(&clock_bank, 0xDC, 1, 0); else if (currprefs.cs_ksmirror_a8 || currprefs.cs_ide > 0 || currprefs.cs_pcmcia) - map_banks (&clock_bank, 0xDC, 1, 0); /* none clock */ + map_banks(&clock_bank, 0xDC, 1, 0); /* none clock */ if (currprefs.cs_fatgaryrev >= 0 || currprefs.cs_ramseyrev >= 0) - map_banks (&mbres_bank, 0xDE, 1, 0); + map_banks(&mbres_bank, 0xDE, 1, 0); #ifdef CD32 - if (currprefs.cs_cd32c2p || currprefs.cs_cd32cd || currprefs.cs_cd32nvram) { - map_banks (&akiko_bank, AKIKO_BASE >> 16, 1, 0); - map_banks (&gayle2_bank, 0xDD, 2, 0); + if (currprefs.cs_cd32c2p || currprefs.cs_cd32cd || currprefs.cs_cd32nvram) + { + map_banks(&akiko_bank, AKIKO_BASE >> 16, 1, 0); + map_banks(&gayle2_bank, 0xDD, 2, 0); } #endif if (a3000lmem_bank.baseaddr) map_banks(&a3000lmem_bank, a3000lmem_bank.start >> 16, a3000lmem_bank.allocated_size >> 16, 0); if (a3000hmem_bank.baseaddr) map_banks(&a3000hmem_bank, a3000hmem_bank.start >> 16, a3000hmem_bank.allocated_size >> 16, 0); - map_banks_set(&kickmem_bank, 0xF8, 8, 0); - /* map beta Kickstarts at 0x200000/0xC00000/0xF00000 */ - if (kickmem_bank.baseaddr[0] == 0x11 && kickmem_bank.baseaddr[2] == 0x4e && kickmem_bank.baseaddr[3] == 0xf9 && kickmem_bank.baseaddr[4] == 0x00) { - uae_u32 addr = kickmem_bank.baseaddr[5]; + map_banks_set(&kickmem_bank, 0xF8, 8, 0); + /* map beta Kickstarts at 0x200000/0xC00000/0xF00000 */ + if (kickmem_bank.baseaddr[0] == 0x11 && kickmem_bank.baseaddr[2] == 0x4e && kickmem_bank.baseaddr[3] == 0xf9 && kickmem_bank.baseaddr[4] == 0x00) + { + uae_u32 addr = kickmem_bank.baseaddr[5]; if (addr == 0x20 && currprefs.chipmem_size <= 0x200000 && currprefs.fastmem[0].size == 0) - map_banks_set(&kickmem_bank, addr, 8, 0); + map_banks_set(&kickmem_bank, addr, 8, 0); if (addr == 0xC0 && currprefs.bogomem_size == 0) - map_banks_set(&kickmem_bank, addr, 8, 0); - if (addr == 0xF0) - map_banks_set(&kickmem_bank, addr, 8, 0); - } + map_banks_set(&kickmem_bank, addr, 8, 0); + if (addr == 0xF0) + map_banks_set(&kickmem_bank, addr, 8, 0); + } #ifdef AUTOCONFIG expansion_map(); #endif - /* Map the chipmem into all of the lower 8MB */ - map_overlay (1); + /* Map the chipmem into all of the lower 8MB */ + map_overlay(1); - switch (extendedkickmem_type) { - case EXTENDED_ROM_KS: - map_banks_set(&extendedkickmem_bank, 0xE0, 8, 0); - break; + switch (extendedkickmem_type) + { + case EXTENDED_ROM_KS: + map_banks_set(&extendedkickmem_bank, 0xE0, 8, 0); + break; #ifdef CD32 - case EXTENDED_ROM_CD32: - map_banks_set(&extendedkickmem_bank, 0xE0, 8, 0); - break; + case EXTENDED_ROM_CD32: + map_banks_set(&extendedkickmem_bank, 0xE0, 8, 0); + break; #endif - } + } #ifdef AUTOCONFIG - if ((need_uae_boot_rom (&currprefs) && currprefs.uaeboard == 0) || currprefs.uaeboard == 1) - map_banks_set(&rtarea_bank, rtarea_base >> 16, 1, 0); + if ((need_uae_boot_rom(&currprefs) && currprefs.uaeboard == 0) || currprefs.uaeboard == 1) + map_banks_set(&rtarea_bank, rtarea_base >> 16, 1, 0); #endif - if ((cloanto_rom || currprefs.cs_ksmirror_e0) && !extendedkickmem_type) { - map_banks (&kickmem_bank, 0xE0, 8, 0); - } - if (currprefs.cs_ksmirror_a8) { - if (extendedkickmem2_bank.allocated_size) { + if ((cloanto_rom || currprefs.cs_ksmirror_e0) && !extendedkickmem_type) + { + map_banks(&kickmem_bank, 0xE0, 8, 0); + } + if (currprefs.cs_ksmirror_a8) + { + if (extendedkickmem2_bank.allocated_size) + { map_banks_set(&extendedkickmem2_bank, 0xa8, 16, 0); - } else { - struct romdata *rd = getromdatabypath (currprefs.cartfile); - if (!rd || rd->id != 63) { - if (extendedkickmem_type == EXTENDED_ROM_CD32 || extendedkickmem_type == EXTENDED_ROM_KS) - map_banks (&extendedkickmem_bank, 0xb0, 8, 0); - else - map_banks (&kickmem_bank, 0xb0, 8, 0); - map_banks (&kickmem_bank, 0xa8, 8, 0); - } - } - } + } + else + { + struct romdata *rd = getromdatabypath(currprefs.cartfile); + if (!rd || rd->id != 63) + { + if (extendedkickmem_type == EXTENDED_ROM_CD32 || extendedkickmem_type == EXTENDED_ROM_KS) + map_banks(&extendedkickmem_bank, 0xb0, 8, 0); + else + map_banks(&kickmem_bank, 0xb0, 8, 0); + map_banks(&kickmem_bank, 0xa8, 8, 0); + } + } + } #ifdef ACTION_REPLAY - action_replay_memory_reset (); + action_replay_memory_reset(); #endif - for (int i = 0; i < 2; i++) { - if (currprefs.custom_memory_sizes[i]) { - map_banks (i == 0 ? &custmem1_bank : &custmem2_bank, - currprefs.custom_memory_addrs[i] >> 16, - currprefs.custom_memory_sizes[i] >> 16, 0); - if (currprefs.custom_memory_mask[i]) { - for (int j = currprefs.custom_memory_addrs[i]; j & currprefs.custom_memory_mask[i]; j += currprefs.custom_memory_sizes[i]) { + for (int i = 0; i < 2; i++) + { + if (currprefs.custom_memory_sizes[i]) + { + map_banks(i == 0 ? &custmem1_bank : &custmem2_bank, + currprefs.custom_memory_addrs[i] >> 16, + currprefs.custom_memory_sizes[i] >> 16, 0); + if (currprefs.custom_memory_mask[i]) + { + for (int j = currprefs.custom_memory_addrs[i]; j & currprefs.custom_memory_mask[i]; j += currprefs.custom_memory_sizes[i]) + { map_banks(i == 0 ? &custmem1_bank : &custmem2_bank, j >> 16, currprefs.custom_memory_sizes[i] >> 16, 0); } } } } - if (mem_hardreset) { - memory_clear (); + if (mem_hardreset) + { + memory_clear(); } - write_log (_T("memory init end\n")); + write_log (_T("memory init end\n")); } -void memory_init (void) +void memory_init(void) { - init_mem_banks (); - virtualdevice_init (); + init_mem_banks(); + virtualdevice_init(); - chipmem_bank.reserved_size = 0; - bogomem_bank.reserved_size = 0; - kickmem_bank.baseaddr = NULL; - extendedkickmem_bank.baseaddr = NULL; - extendedkickmem_bank.reserved_size = 0; - extendedkickmem2_bank.baseaddr = NULL; - extendedkickmem2_bank.reserved_size = 0; - extendedkickmem_type = 0; - chipmem_bank.baseaddr = 0; + chipmem_bank.reserved_size = 0; + bogomem_bank.reserved_size = 0; + kickmem_bank.baseaddr = NULL; + extendedkickmem_bank.baseaddr = NULL; + extendedkickmem_bank.reserved_size = 0; + extendedkickmem2_bank.baseaddr = NULL; + extendedkickmem2_bank.reserved_size = 0; + extendedkickmem_type = 0; + chipmem_bank.baseaddr = 0; a3000lmem_bank.reserved_size = a3000hmem_bank.reserved_size = 0; a3000lmem_bank.baseaddr = a3000hmem_bank.baseaddr = NULL; - bogomem_bank.baseaddr = NULL; + bogomem_bank.baseaddr = NULL; custmem1_bank.reserved_size = custmem2_bank.reserved_size = 0; custmem1_bank.baseaddr = NULL; custmem2_bank.baseaddr = NULL; kickmem_bank.reserved_size = ROM_SIZE_512; - mapped_malloc (&kickmem_bank); - memset (kickmem_bank.baseaddr, 0, ROM_SIZE_512); - _tcscpy (currprefs.romfile, _T("")); - currprefs.romextfile[0] = 0; + mapped_malloc(&kickmem_bank); + memset(kickmem_bank.baseaddr, 0, ROM_SIZE_512); + _tcscpy(currprefs.romfile, _T("")); + currprefs.romextfile[0] = 0; #ifdef ACTION_REPLAY - action_replay_unload (0); - action_replay_load (); - action_replay_init (1); + action_replay_unload(0); + action_replay_load(); + action_replay_init(1); #ifdef ACTION_REPLAY_HRTMON - hrtmon_load (); + hrtmon_load(); #endif #endif } -void memory_cleanup (void) +void memory_cleanup(void) { mapped_free(&a3000lmem_bank); mapped_free(&a3000hmem_bank); - mapped_free (&bogomem_bank); - mapped_free (&kickmem_bank); - mapped_free (&chipmem_bank); - mapped_free (&custmem1_bank); - mapped_free (&custmem2_bank); - - bogomem_bank.baseaddr = NULL; - kickmem_bank.baseaddr = NULL; + mapped_free(&bogomem_bank); + mapped_free(&kickmem_bank); + mapped_free(&chipmem_bank); + mapped_free(&custmem1_bank); + mapped_free(&custmem2_bank); + + bogomem_bank.baseaddr = NULL; + kickmem_bank.baseaddr = NULL; a3000lmem_bank.baseaddr = a3000hmem_bank.baseaddr = NULL; - chipmem_bank.baseaddr = NULL; + chipmem_bank.baseaddr = NULL; custmem1_bank.baseaddr = NULL; custmem2_bank.baseaddr = NULL; - + #ifdef ACTION_REPLAY action_replay_cleanup(); #endif @@ -1379,9 +1473,10 @@ void memory_hardreset (int mode) } // do not map if it conflicts with custom banks -void map_banks_cond (addrbank *bank, int start, int size, int realsize) +void map_banks_cond(addrbank *bank, int start, int size, int realsize) { - for (int i = 0; i < MAX_CUSTOM_MEMORY_ADDRS; i++) { + for (int i = 0; i < MAX_CUSTOM_MEMORY_ADDRS; i++) + { int cstart = currprefs.custom_memory_addrs[i] >> 16; if (!cstart) continue; @@ -1393,70 +1488,80 @@ void map_banks_cond (addrbank *bank, int start, int size, int realsize) if (cstart <= start && (cstart + size >= start || start + size > cstart)) return; } - map_banks (bank, start, size, realsize); + map_banks(bank, start, size, realsize); } -static void map_banks2 (addrbank *bank, int start, int size, int realsize, int quick) +static void map_banks2(addrbank *bank, int start, int size, int realsize, int quick) { - int bnr; - unsigned long int hioffs = 0, endhioffs = 0x100; - uae_u32 realstart = start; + int bnr; + unsigned long int hioffs = 0, endhioffs = 0x100; + uae_u32 realstart = start; - flush_icache_hard (3); /* Sure don't want to keep any old mappings around! */ + flush_icache_hard(3); /* Sure don't want to keep any old mappings around! */ - if (!realsize) - realsize = size << 16; + if (!realsize) + realsize = size << 16; - if ((size << 16) < realsize) { - write_log (_T("Broken mapping, size=%x, realsize=%x\nStart is %x\n"), - size, realsize, start); - } + if ((size << 16) < realsize) + { + write_log(_T("Broken mapping, size=%x, realsize=%x\nStart is %x\n"), + size, realsize, start); + } #ifndef ADDRESS_SPACE_24BIT - if (start >= 0x100) { - for (bnr = start; bnr < start + size; bnr++) { - mem_banks[bnr] = bank; - } - return; - } + if (start >= 0x100) + { + for (bnr = start; bnr < start + size; bnr++) + { + mem_banks[bnr] = bank; + } + return; + } #endif - if (last_address_space_24) - endhioffs = 0x10000; + if (last_address_space_24) + endhioffs = 0x10000; #ifdef ADDRESS_SPACE_24BIT - endhioffs = 0x100; + endhioffs = 0x100; #endif - for (hioffs = 0; hioffs < endhioffs; hioffs += 0x100) { - for (bnr = start; bnr < start + size; bnr++) { - mem_banks[bnr + hioffs] = bank; - } - } + for (hioffs = 0; hioffs < endhioffs; hioffs += 0x100) + { + for (bnr = start; bnr < start + size; bnr++) + { + mem_banks[bnr + hioffs] = bank; + } + } } -void map_banks (addrbank *bank, int start, int size, int realsize) +void map_banks(addrbank *bank, int start, int size, int realsize) { if (start == 0xffffffff) return; - if (start >= 0x100) { + if (start >= 0x100) + { if (currprefs.address_space_24) return; } - map_banks2 (bank, start, size, realsize, 0); + map_banks2(bank, start, size, realsize, 0); } bool validate_banks_z3(addrbank *bank, int start, int size) { - if (start < 0x1000 || size <= 0) { + if (start < 0x1000 || size <= 0) + { error_log(_T("Z3 invalid map_banks(%s) start=%08x size=%08x\n"), bank->name, start << 16, size << 16); cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT); return false; } - if (size > 0x4000 || start + size > 0xf000) { + if (size > 0x4000 || start + size > 0xf000) + { error_log(_T("Z3 invalid map_banks(%s) start=%08x size=%08x\n"), bank->name, start << 16, size << 16); return false; } - for (int i = start; i < start + size; i++) { + for (int i = start; i < start + size; i++) + { addrbank *ab = &get_mem_bank(start << 16); - if (ab != &dummy_bank && ab != bank) { + if (ab != &dummy_bank && ab != bank) + { error_log(_T("Z3 map_banks(%s) attempting to override existing memory bank '%s' at %08x!\n"), bank->name, ab->name, i << 16); return false; } @@ -1473,32 +1578,41 @@ void map_banks_z3(addrbank *bank, int start, int size) bool validate_banks_z2(addrbank *bank, int start, int size) { - if (start < 0x20 || (start >= 0xa0 && start < 0xe9) || start >= 0xf0) { + if (start < 0x20 || (start >= 0xa0 && start < 0xe9) || start >= 0xf0) + { error_log(_T("Z2 map_banks(%s) with invalid start address %08X\n"), bank->name, start << 16); cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT); return false; } - if (start >= 0xe9) { - if (start + size > 0xf0) { - error_log(_T("Z2 map_banks(%s) with invalid region %08x - %08X\n"), bank->name, start << 16, (start + size) << 16); - cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT); - return false; - } - } else { - if (start + size > 0xa0) { + if (start >= 0xe9) + { + if (start + size > 0xf0) + { error_log(_T("Z2 map_banks(%s) with invalid region %08x - %08X\n"), bank->name, start << 16, (start + size) << 16); cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT); return false; } } - if (size <= 0 || size > 0x80) { + else + { + if (start + size > 0xa0) + { + error_log(_T("Z2 map_banks(%s) with invalid region %08x - %08X\n"), bank->name, start << 16, (start + size) << 16); + cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT); + return false; + } + } + if (size <= 0 || size > 0x80) + { error_log(_T("Z2 map_banks(%s) with invalid size %08x\n"), bank->name, size); cpu_halt(CPU_HALT_AUTOCONFIG_CONFLICT); return false; } - for (int i = start; i < start + size; i++) { + for (int i = start; i < start + size; i++) + { addrbank *ab = &get_mem_bank(start << 16); - if (ab != &dummy_bank) { + if (ab != &dummy_bank) + { error_log(_T("Z2 map_banks(%s) attempting to override existing memory bank '%s' at %08x!\n"), bank->name, ab->name, i << 16); return false; } @@ -1506,17 +1620,16 @@ bool validate_banks_z2(addrbank *bank, int start, int size) return true; } - -void map_banks_z2 (addrbank *bank, int start, int size) +void map_banks_z2(addrbank *bank, int start, int size) { if (!validate_banks_z2(bank, start, size)) return; - map_banks (bank, start, size, 0); + map_banks(bank, start, size, 0); } -void map_banks_quick (addrbank *bank, int start, int size, int realsize) +void map_banks_quick(addrbank *bank, int start, int size, int realsize) { - map_banks2 (bank, start, size, realsize, 1); + map_banks2(bank, start, size, realsize, 1); } #ifdef SAVESTATE @@ -1526,250 +1639,264 @@ void map_banks_quick (addrbank *bank, int start, int size, int realsize) uae_u8 *save_bootrom(int *len) { if (!uae_boot_rom_type) - return 0; - *len = uae_boot_rom_size; + return 0; + *len = uae_boot_rom_size; return rtarea_bank.baseaddr; } -uae_u8 *save_cram (int *len) +uae_u8 *save_cram(int *len) { - *len = chipmem_bank.allocated_size; - return chipmem_bank.baseaddr; + *len = chipmem_bank.allocated_size; + return chipmem_bank.baseaddr; } -uae_u8 *save_bram (int *len) +uae_u8 *save_bram(int *len) { - *len = bogomem_bank.allocated_size; - return bogomem_bank.baseaddr; + *len = bogomem_bank.allocated_size; + return bogomem_bank.baseaddr; } -uae_u8 *save_a3000lram (int *len) +uae_u8 *save_a3000lram(int *len) { *len = a3000lmem_bank.allocated_size; return a3000lmem_bank.baseaddr; } -uae_u8 *save_a3000hram (int *len) +uae_u8 *save_a3000hram(int *len) { *len = a3000hmem_bank.allocated_size; return a3000hmem_bank.baseaddr; } -void restore_bootrom (int len, size_t filepos) +void restore_bootrom(int len, size_t filepos) { - bootrom_filepos = filepos; + bootrom_filepos = filepos; } -void restore_cram (int len, size_t filepos) +void restore_cram(int len, size_t filepos) { - chip_filepos = filepos; - changed_prefs.chipmem_size = len; + chip_filepos = filepos; + changed_prefs.chipmem_size = len; } -void restore_bram (int len, size_t filepos) +void restore_bram(int len, size_t filepos) { - bogo_filepos = filepos; - changed_prefs.bogomem_size = len; + bogo_filepos = filepos; + changed_prefs.bogomem_size = len; } -void restore_a3000lram (int len, size_t filepos) +void restore_a3000lram(int len, size_t filepos) { a3000lmem_filepos = filepos; changed_prefs.mbresmem_low_size = len; } -void restore_a3000hram (int len, size_t filepos) +void restore_a3000hram(int len, size_t filepos) { a3000hmem_filepos = filepos; changed_prefs.mbresmem_high_size = len; } -uae_u8 *restore_rom (uae_u8 *src) +uae_u8 *restore_rom(uae_u8 *src) { - uae_u32 crc32, mem_start, mem_size, mem_type, version; - TCHAR *s, *romn; - int i, crcdet; - struct romlist *rl = romlist_getit (); + uae_u32 crc32, mem_start, mem_size, mem_type, version; + TCHAR *s, *romn; + int i, crcdet; + struct romlist *rl = romlist_getit(); - mem_start = restore_u32 (); - mem_size = restore_u32 (); - mem_type = restore_u32 (); - version = restore_u32 (); - crc32 = restore_u32 (); - romn = restore_string (); - crcdet = 0; - for (i = 0; i < romlist_count (); i++) { - if (rl[i].rd->crc32 == crc32 && crc32) { - if (zfile_exists (rl[i].path)) { - switch (mem_type) - { - case 0: - _tcsncpy (changed_prefs.romfile, rl[i].path, 255); - break; - case 1: - _tcsncpy (changed_prefs.romextfile, rl[i].path, 255); - break; - } - write_log (_T("ROM '%s' = '%s'\n"), romn, rl[i].path); - crcdet = 1; - } else { - write_log (_T("ROM '%s' = '%s' invalid rom scanner path!"), romn, rl[i].path); - } - break; - } - } - s = restore_string (); - if (!crcdet) { - if(zfile_exists (s)) { - switch (mem_type) - { - case 0: - _tcsncpy (changed_prefs.romfile, s, 255); - break; - case 1: - _tcsncpy (changed_prefs.romextfile, s, 255); - break; - } - write_log (_T("ROM detected (path) as '%s'\n"), s); - crcdet = 1; - } - } - xfree (s); - if (!crcdet) - write_log (_T("WARNING: ROM '%s' %d.%d (CRC32=%08x %08x-%08x) not found!\n"), - romn, version >> 16, version & 0xffff, crc32, mem_start, mem_start + mem_size - 1); - xfree (romn); - return src; + mem_start = restore_u32(); + mem_size = restore_u32(); + mem_type = restore_u32(); + version = restore_u32(); + crc32 = restore_u32(); + romn = restore_string(); + crcdet = 0; + for (i = 0; i < romlist_count(); i++) + { + if (rl[i].rd->crc32 == crc32 && crc32) + { + if (zfile_exists(rl[i].path)) + { + switch (mem_type) + { + case 0: + _tcsncpy(changed_prefs.romfile, rl[i].path, 255); + break; + case 1: + _tcsncpy(changed_prefs.romextfile, rl[i].path, 255); + break; + } + write_log(_T("ROM '%s' = '%s'\n"), romn, rl[i].path); + crcdet = 1; + } + else + { + write_log(_T("ROM '%s' = '%s' invalid rom scanner path!"), romn, rl[i].path); + } + break; + } + } + s = restore_string(); + if (!crcdet) + { + if (zfile_exists(s)) + { + switch (mem_type) + { + case 0: + _tcsncpy(changed_prefs.romfile, s, 255); + break; + case 1: + _tcsncpy(changed_prefs.romextfile, s, 255); + break; + } + write_log(_T("ROM detected (path) as '%s'\n"), s); + crcdet = 1; + } + } + xfree(s); + if (!crcdet) + write_log(_T("WARNING: ROM '%s' %d.%d (CRC32=%08x %08x-%08x) not found!\n"), + romn, version >> 16, version & 0xffff, crc32, mem_start, mem_start + mem_size - 1); + xfree(romn); + return src; } -uae_u8 *save_rom (int first, int *len, uae_u8 *dstptr) +uae_u8 *save_rom(int first, int *len, uae_u8 *dstptr) { - static int count; - uae_u8 *dst, *dstbak; - uae_u8 *mem_real_start; - uae_u32 version; - TCHAR *path; - int mem_start, mem_size, mem_type, saverom; - int i; - TCHAR tmpname[1000]; + static int count; + uae_u8 *dst, *dstbak; + uae_u8 *mem_real_start; + uae_u32 version; + TCHAR *path; + int mem_start, mem_size, mem_type, saverom; + int i; + TCHAR tmpname[1000]; - version = 0; - saverom = 0; - if (first) - count = 0; - for (;;) { - mem_type = count; - mem_size = 0; - switch (count) { - case 0: /* Kickstart ROM */ - mem_start = 0xf80000; - mem_real_start = kickmem_bank.baseaddr; - mem_size = kickmem_bank.allocated_size; - path = currprefs.romfile; - /* 256KB or 512KB ROM? */ - for (i = 0; i < mem_size / 2 - 4; i++) { - if (longget (i + mem_start) != longget (i + mem_start + mem_size / 2)) - break; - } - if (i == mem_size / 2 - 4) { - mem_size /= 2; - mem_start += ROM_SIZE_256; - } - version = longget (mem_start + 12); /* version+revision */ - _stprintf (tmpname, _T("Kickstart %d.%d"), wordget (mem_start + 12), wordget (mem_start + 14)); - break; - case 1: /* Extended ROM */ - if (!extendedkickmem_type) - break; - mem_start = extendedkickmem_bank.start; - mem_real_start = extendedkickmem_bank.baseaddr; - mem_size = extendedkickmem_bank.allocated_size; - path = currprefs.romextfile; - version = longget (mem_start + 12); /* version+revision */ + version = 0; + saverom = 0; + if (first) + count = 0; + for (;;) + { + mem_type = count; + mem_size = 0; + switch (count) + { + case 0: /* Kickstart ROM */ + mem_start = 0xf80000; + mem_real_start = kickmem_bank.baseaddr; + mem_size = kickmem_bank.allocated_size; + path = currprefs.romfile; + /* 256KB or 512KB ROM? */ + for (i = 0; i < mem_size / 2 - 4; i++) + { + if (longget(i + mem_start) != longget(i + mem_start + mem_size / 2)) + break; + } + if (i == mem_size / 2 - 4) + { + mem_size /= 2; + mem_start += ROM_SIZE_256; + } + version = longget(mem_start + 12); /* version+revision */ + _stprintf(tmpname, _T("Kickstart %d.%d"), wordget(mem_start + 12), wordget(mem_start + 14)); + break; + case 1: /* Extended ROM */ + if (!extendedkickmem_type) + break; + mem_start = extendedkickmem_bank.start; + mem_real_start = extendedkickmem_bank.baseaddr; + mem_size = extendedkickmem_bank.allocated_size; + path = currprefs.romextfile; + version = longget(mem_start + 12); /* version+revision */ if (version == 0xffffffff) - version = longget (mem_start + 16); - _stprintf (tmpname, _T("Extended")); - break; - default: - return 0; - } - count++; - if (mem_size) - break; - } - if (dstptr) - dstbak = dst = dstptr; - else - dstbak = dst = xmalloc (uae_u8, 4 + 4 + 4 + 4 + 4 + 256 + 256 + mem_size); - save_u32 (mem_start); - save_u32 (mem_size); - save_u32 (mem_type); - save_u32 (version); - save_u32 (get_crc32 (mem_real_start, mem_size)); - save_string (tmpname); - save_string (path); - if (saverom) { - for (i = 0; i < mem_size; i++) - *dst++ = byteget (mem_start + i); - } - *len = dst - dstbak; - return dstbak; + version = longget(mem_start + 16); + _stprintf(tmpname, _T("Extended")); + break; + default: + return 0; + } + count++; + if (mem_size) + break; + } + if (dstptr) + dstbak = dst = dstptr; + else + dstbak = dst = xmalloc(uae_u8, 4 + 4 + 4 + 4 + 4 + 256 + 256 + mem_size); + save_u32(mem_start); + save_u32(mem_size); + save_u32(mem_type); + save_u32(version); + save_u32(get_crc32(mem_real_start, mem_size)); + save_string(tmpname); + save_string(path); + if (saverom) + { + for (i = 0; i < mem_size; i++) + *dst++ = byteget(mem_start + i); + } + *len = dst - dstbak; + return dstbak; } #endif /* SAVESTATE */ /* memory helpers */ -void memcpyha_safe (uaecptr dst, const uae_u8 *src, int size) +void memcpyha_safe(uaecptr dst, const uae_u8 *src, int size) { - if (!addr_valid (_T("memcpyha"), dst, size)) - return; - while (size--) - put_byte (dst++, *src++); + if (!addr_valid(_T("memcpyha"), dst, size)) + return; + while (size--) + put_byte(dst++, *src++); } -void memcpyha (uaecptr dst, const uae_u8 *src, int size) +void memcpyha(uaecptr dst, const uae_u8 *src, int size) { - while (size--) - put_byte (dst++, *src++); + while (size--) + put_byte(dst++, *src++); } -void memcpyah_safe (uae_u8 *dst, uaecptr src, int size) +void memcpyah_safe(uae_u8 *dst, uaecptr src, int size) { - if (!addr_valid (_T("memcpyah"), src, size)) - return; - while (size--) - *dst++ = get_byte(src++); + if (!addr_valid(_T("memcpyah"), src, size)) + return; + while (size--) + *dst++ = get_byte(src++); } -void memcpyah (uae_u8 *dst, uaecptr src, int size) +void memcpyah(uae_u8 *dst, uaecptr src, int size) { - while (size--) - *dst++ = get_byte(src++); + while (size--) + *dst++ = get_byte(src++); } -uae_char *strcpyah_safe (uae_char *dst, uaecptr src, int maxsize) +uae_char *strcpyah_safe(uae_char *dst, uaecptr src, int maxsize) { uae_char *res = dst; - uae_u8 b; + uae_u8 b; dst[0] = 0; - do { - if (!addr_valid (_T("_tcscpyah"), src, 1)) - return res; - b = get_byte(src++); - *dst++ = b; + do + { + if (!addr_valid(_T("_tcscpyah"), src, 1)) + return res; + b = get_byte(src++); + *dst++ = b; *dst = 0; - maxsize--; + maxsize--; if (maxsize <= 1) - break; - } while (b); - return res; + break; + } while (b); + return res; } -uaecptr strcpyha_safe (uaecptr dst, const uae_char *src) +uaecptr strcpyha_safe(uaecptr dst, const uae_char *src) { - uaecptr res = dst; - uae_u8 b; - do { - if (!addr_valid (_T("_tcscpyha"), dst, 1)) - return res; - b = *src++; - put_byte (dst++, b); - } while (b); - return res; + uaecptr res = dst; + uae_u8 b; + do + { + if (!addr_valid(_T("_tcscpyha"), dst, 1)) + return res; + b = *src++; + put_byte(dst++, b); + } while (b); + return res; } From f1f64867b64c313112ad8339722376455d0680c4 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 8 Feb 2019 21:04:59 +0100 Subject: [PATCH 15/18] More indentation fixes --- src/ide.cpp | 38 +- src/machdep/support.cpp | 19 +- src/native2amiga.cpp | 72 ++-- src/newcpu_common.cpp | 524 ++++++++++++++---------- src/readcpu.cpp | 857 ++++++++++++++++++++++++++-------------- src/rommgr.cpp | 90 +++-- src/statusline.cpp | 15 +- 7 files changed, 1011 insertions(+), 604 deletions(-) diff --git a/src/ide.cpp b/src/ide.cpp index 5578f71a..a3db3636 100644 --- a/src/ide.cpp +++ b/src/ide.cpp @@ -391,9 +391,12 @@ static void ide_identity_buffer(struct ide_hdf *ide) v = ide->multiple_mode; pwor(ide, 59, v > 0 ? 0x100 : 0); - if (!atapi && cf) { + if (!atapi && cf) + { pw(ide, 0, 0x848a); - } else if (!atapi && !cf) { + } + else if (!atapi && !cf) + { pwand(ide, 0, 0x8000); } } @@ -478,15 +481,18 @@ static void ide_initialize_drive_parameters (struct ide_hdf *ide) ide_interrupt (ide); } -static void ide_set_multiple_mode (struct ide_hdf *ide) +static void ide_set_multiple_mode(struct ide_hdf *ide) { - write_log (_T("IDE%d drive multiple mode = %d\n"), ide->num, ide->regs.ide_nsector); - if (ide->regs.ide_nsector > (ide->max_multiple_mode >> (ide->blocksize / 512 - 1))) { + write_log(_T("IDE%d drive multiple mode = %d\n"), ide->num, ide->regs.ide_nsector); + if (ide->regs.ide_nsector > (ide->max_multiple_mode >> (ide->blocksize / 512 - 1))) + { ide_fail(ide); - } else { - ide->multiple_mode = ide->regs.ide_nsector; } - ide_interrupt (ide); + else + { + ide->multiple_mode = ide->regs.ide_nsector; + } + ide_interrupt(ide); } static void ide_set_features (struct ide_hdf *ide) @@ -517,17 +523,23 @@ static void ide_set_features (struct ide_hdf *ide) } } -static void get_lbachs (struct ide_hdf *ide, uae_u64 *lbap, unsigned int *cyl, unsigned int *head, unsigned int *sec) +static void get_lbachs(struct ide_hdf *ide, uae_u64 *lbap, unsigned int *cyl, unsigned int *head, unsigned int *sec) { - if (ide->lba48 && ide->lba48cmd && (ide->regs.ide_select & 0x40)) { + if (ide->lba48 && ide->lba48cmd && (ide->regs.ide_select & 0x40)) + { uae_u64 lba; lba = (ide->regs.ide_hcyl << 16) | (ide->regs.ide_lcyl << 8) | ide->regs.ide_sector; lba |= ((ide->regs.ide_hcyl2 << 16) | (ide->regs.ide_lcyl2 << 8) | ide->regs.ide_sector2) << 24; *lbap = lba; - } else { - if (ide->regs.ide_select & 0x40) { + } + else + { + if (ide->regs.ide_select & 0x40) + { *lbap = ((ide->regs.ide_select & 15) << 24) | (ide->regs.ide_hcyl << 16) | (ide->regs.ide_lcyl << 8) | ide->regs.ide_sector; - } else { + } + else + { *cyl = (ide->regs.ide_hcyl << 8) | ide->regs.ide_lcyl; *head = ide->regs.ide_select & 15; *sec = ide->regs.ide_sector; diff --git a/src/machdep/support.cpp b/src/machdep/support.cpp index 29aee3a5..59fc8010 100644 --- a/src/machdep/support.cpp +++ b/src/machdep/support.cpp @@ -8,18 +8,17 @@ extern int screen_is_picasso; int64_t g_uae_epoch = 0; - -int machdep_init (void) +int machdep_init(void) { - picasso_requested_on = 0; - picasso_on = 0; - screen_is_picasso = 0; + picasso_requested_on = 0; + picasso_on = 0; + screen_is_picasso = 0; - // Initialize timebase - g_uae_epoch = read_processor_time(); - syncbase = 1000000; // Microseconds - - return 1; + // Initialize timebase + g_uae_epoch = read_processor_time(); + syncbase = 1000000; // Microseconds + + return 1; } diff --git a/src/native2amiga.cpp b/src/native2amiga.cpp index 8a453191..05d995e6 100644 --- a/src/native2amiga.cpp +++ b/src/native2amiga.cpp @@ -22,22 +22,22 @@ static uae_sem_t n2asem = 0; * to be called when setting up the hardware */ -void native2amiga_install (void) +void native2amiga_install(void) { - if(native2amiga_pending.size != 300) - init_comm_pipe (&native2amiga_pending, 300, 2); - if(n2asem != 0) - uae_sem_destroy(&n2asem); - n2asem = 0; - uae_sem_init (&n2asem, 0, 1); + if (native2amiga_pending.size != 300) + init_comm_pipe(&native2amiga_pending, 300, 2); + if (n2asem != 0) + uae_sem_destroy(&n2asem); + n2asem = 0; + uae_sem_init(&n2asem, 0, 1); } -void native2amiga_reset (void) +void native2amiga_reset(void) { - smp_comm_pipe *p = &native2amiga_pending; - p->rdp = p->wrp = 0; - p->reader_waiting = 0; - p->writer_waiting = 0; + smp_comm_pipe *p = &native2amiga_pending; + p->rdp = p->wrp = 0; + p->reader_waiting = 0; + p->writer_waiting = 0; } /* @@ -47,9 +47,9 @@ void native2amiga_startup (void) { } -int native2amiga_isfree (void) +int native2amiga_isfree(void) { - return comm_pipe_has_data (&native2amiga_pending) == 0; + return comm_pipe_has_data(&native2amiga_pending) == 0; } #ifdef SUPPORT_THREADS @@ -66,63 +66,63 @@ void uae_nativesem_post(void) void uae_Cause(uaecptr interrupt) { uae_nativesem_wait(); - write_comm_pipe_int (&native2amiga_pending, 3, 0); - write_comm_pipe_u32 (&native2amiga_pending, interrupt, 1); - do_uae_int_requested(); + write_comm_pipe_int(&native2amiga_pending, 3, 0); + write_comm_pipe_u32(&native2amiga_pending, interrupt, 1); + do_uae_int_requested(); uae_nativesem_post(); } void uae_ReplyMsg(uaecptr msg) { uae_nativesem_wait(); - write_comm_pipe_int (&native2amiga_pending, 2, 0); - write_comm_pipe_u32 (&native2amiga_pending, msg, 1); - do_uae_int_requested(); + write_comm_pipe_int(&native2amiga_pending, 2, 0); + write_comm_pipe_u32(&native2amiga_pending, msg, 1); + do_uae_int_requested(); uae_nativesem_post(); } void uae_PutMsg(uaecptr port, uaecptr msg) { uae_nativesem_wait(); - write_comm_pipe_int (&native2amiga_pending, 1, 0); - write_comm_pipe_u32 (&native2amiga_pending, port, 0); - write_comm_pipe_u32 (&native2amiga_pending, msg, 1); - do_uae_int_requested(); + write_comm_pipe_int(&native2amiga_pending, 1, 0); + write_comm_pipe_u32(&native2amiga_pending, port, 0); + write_comm_pipe_u32(&native2amiga_pending, msg, 1); + do_uae_int_requested(); uae_nativesem_post(); } void uae_Signal(uaecptr task, uae_u32 mask) { uae_nativesem_wait(); - write_comm_pipe_int (&native2amiga_pending, 0, 0); - write_comm_pipe_u32 (&native2amiga_pending, task, 0); - write_comm_pipe_int (&native2amiga_pending, mask, 1); - do_uae_int_requested(); + write_comm_pipe_int(&native2amiga_pending, 0, 0); + write_comm_pipe_u32(&native2amiga_pending, task, 0); + write_comm_pipe_int(&native2amiga_pending, mask, 1); + do_uae_int_requested(); uae_nativesem_post(); } void uae_NotificationHack(uaecptr port, uaecptr nr) { uae_nativesem_wait(); - write_comm_pipe_int (&native2amiga_pending, 4, 0); - write_comm_pipe_int (&native2amiga_pending, port, 0); - write_comm_pipe_int (&native2amiga_pending, nr, 1); - do_uae_int_requested(); + write_comm_pipe_int(&native2amiga_pending, 4, 0); + write_comm_pipe_int(&native2amiga_pending, port, 0); + write_comm_pipe_int(&native2amiga_pending, nr, 1); + do_uae_int_requested(); uae_nativesem_post(); } #endif -uaecptr uae_AllocMem (TrapContext *ctx, uae_u32 size, uae_u32 flags, uaecptr sysbase) +uaecptr uae_AllocMem(TrapContext *ctx, uae_u32 size, uae_u32 flags, uaecptr sysbase) { trap_set_dreg(ctx, 0, size); trap_set_dreg(ctx, 1, flags); - return CallLib (ctx, sysbase, -198); /* AllocMem */ + return CallLib(ctx, sysbase, -198); /* AllocMem */ } -void uae_FreeMem (TrapContext *ctx, uaecptr memory, uae_u32 size, uaecptr sysbase) +void uae_FreeMem(TrapContext *ctx, uaecptr memory, uae_u32 size, uaecptr sysbase) { trap_set_dreg(ctx, 0, size); trap_set_areg(ctx, 1, memory); - CallLib (ctx, sysbase, -0xD2); /* FreeMem */ + CallLib(ctx, sysbase, -0xD2); /* FreeMem */ } diff --git a/src/newcpu_common.cpp b/src/newcpu_common.cpp index 0e240449..38d07af4 100644 --- a/src/newcpu_common.cpp +++ b/src/newcpu_common.cpp @@ -7,133 +7,217 @@ #include "memory.h" #include "newcpu.h" -int movec_illg (int regno) +int movec_illg(int regno) { - int regno2 = regno & 0x7ff; + int regno2 = regno & 0x7ff; - if (currprefs.cpu_model == 68010) { - if (regno2 < 2) - return 0; - return 1; - } else if (currprefs.cpu_model == 68020) { + if (currprefs.cpu_model == 68010) + { + if (regno2 < 2) + return 0; + return 1; + } + else if (currprefs.cpu_model == 68020) + { if (regno == 3) return 1; /* 68040/060 only */ - /* 4 is >=68040, but 0x804 is in 68020 */ - if (regno2 < 4 || regno == 0x804) - return 0; - return 1; - } else if (currprefs.cpu_model == 68030) { + /* 4 is >=68040, but 0x804 is in 68020 */ + if (regno2 < 4 || regno == 0x804) + return 0; + return 1; + } + else if (currprefs.cpu_model == 68030) + { if (regno2 <= 2) return 0; - if (regno == 0x803 || regno == 0x804) - return 0; - return 1; - } else if (currprefs.cpu_model == 68040) { + if (regno == 0x803 || regno == 0x804) + return 0; + return 1; + } + else if (currprefs.cpu_model == 68040) + { if (regno == 0x802) return 1; /* 68020/030 only */ - if (regno2 < 8) return 0; - return 1; - } - return 1; -} - -int m68k_move2c (int regno, uae_u32 *regp) -{ - if (movec_illg (regno)) { - op_illg (0x4E7B); - return 0; - } else { - switch (regno) { - case 0: regs.sfc = *regp & 7; break; - case 1: regs.dfc = *regp & 7; break; - case 2: - { - uae_u32 cacr_mask = 0; - if (currprefs.cpu_model == 68020) - cacr_mask = 0x0000000f; - else if (currprefs.cpu_model == 68030) - cacr_mask = 0x00003f1f; - else if (currprefs.cpu_model == 68040) - cacr_mask = 0x80008000; - regs.cacr = *regp & cacr_mask; - set_cpu_caches(false); - } - break; - /* 68040/060 only */ - case 3: - regs.tcr = *regp & 0xc000; - break; - - /* no differences between 68040 and 68060 */ - case 4: regs.itt0 = *regp & 0xffffe364; break; - case 5: regs.itt1 = *regp & 0xffffe364; break; - case 6: regs.dtt0 = *regp & 0xffffe364; break; - case 7: regs.dtt1 = *regp & 0xffffe364; break; - /* 68060 only */ - case 8: regs.buscr = *regp & 0xf0000000; break; - - case 0x800: regs.usp = *regp; break; - case 0x801: regs.vbr = *regp; break; - case 0x802: regs.caar = *regp; break; - case 0x803: regs.msp = *regp; if (regs.m == 1) m68k_areg(regs, 7) = regs.msp; break; - case 0x804: regs.isp = *regp; if (regs.m == 0) m68k_areg(regs, 7) = regs.isp; break; - /* 68040 only */ - case 0x805: regs.mmusr = *regp; break; - /* 68040 stores all bits, 68060 zeroes low 9 bits */ - case 0x806: regs.urp = *regp; break; - case 0x807: regs.srp = *regp; break; - default: - op_illg (0x4E7B); + if (regno2 < 8) return 0; - } - } + return 1; + } return 1; } -int m68k_movec2 (int regno, uae_u32 *regp) +int m68k_move2c(int regno, uae_u32 *regp) { - if (movec_illg (regno)) { - op_illg (0x4E7A); + if (movec_illg(regno)) + { + op_illg(0x4E7B); return 0; - } else { - switch (regno) { - case 0: *regp = regs.sfc; break; - case 1: *regp = regs.dfc; break; - case 2: - { - uae_u32 v = regs.cacr; - uae_u32 cacr_mask = 0; - if (currprefs.cpu_model == 68020) - cacr_mask = 0x00000003; - else if (currprefs.cpu_model == 68030) - cacr_mask = 0x00003313; - else if (currprefs.cpu_model == 68040) - cacr_mask = 0x80008000; - *regp = v & cacr_mask; - } - break; - case 3: *regp = regs.tcr; break; - case 4: *regp = regs.itt0; break; - case 5: *regp = regs.itt1; break; - case 6: *regp = regs.dtt0; break; - case 7: *regp = regs.dtt1; break; - case 8: *regp = regs.buscr; break; + } + else + { + switch (regno) + { + case 0: + regs.sfc = *regp & 7; + break; + case 1: + regs.dfc = *regp & 7; + break; + case 2: + { + uae_u32 cacr_mask = 0; + if (currprefs.cpu_model == 68020) + cacr_mask = 0x0000000f; + else if (currprefs.cpu_model == 68030) + cacr_mask = 0x00003f1f; + else if (currprefs.cpu_model == 68040) + cacr_mask = 0x80008000; + regs.cacr = *regp & cacr_mask; + set_cpu_caches(false); + } + break; + /* 68040/060 only */ + case 3: + regs.tcr = *regp & 0xc000; + break; - case 0x800: *regp = regs.usp; break; - case 0x801: *regp = regs.vbr; break; - case 0x802: *regp = regs.caar; break; - case 0x803: *regp = regs.m == 1 ? m68k_areg(regs, 7) : regs.msp; break; - case 0x804: *regp = regs.m == 0 ? m68k_areg(regs, 7) : regs.isp; break; - case 0x805: *regp = regs.mmusr; break; - case 0x806: *regp = regs.urp; break; - case 0x807: *regp = regs.srp; break; - case 0x808: *regp = regs.pcr; break; + /* no differences between 68040 and 68060 */ + case 4: + regs.itt0 = *regp & 0xffffe364; + break; + case 5: + regs.itt1 = *regp & 0xffffe364; + break; + case 6: + regs.dtt0 = *regp & 0xffffe364; + break; + case 7: + regs.dtt1 = *regp & 0xffffe364; + break; + /* 68060 only */ + case 8: + regs.buscr = *regp & 0xf0000000; + break; - default: - op_illg (0x4E7A); + case 0x800: + regs.usp = *regp; + break; + case 0x801: + regs.vbr = *regp; + break; + case 0x802: + regs.caar = *regp; + break; + case 0x803: + regs.msp = *regp; + if (regs.m == 1) + m68k_areg(regs, 7) = regs.msp; + break; + case 0x804: + regs.isp = *regp; + if (regs.m == 0) + m68k_areg(regs, 7) = regs.isp; + break; + /* 68040 only */ + case 0x805: + regs.mmusr = *regp; + break; + /* 68040 stores all bits, 68060 zeroes low 9 bits */ + case 0x806: + regs.urp = *regp; + break; + case 0x807: + regs.srp = *regp; + break; + default: + op_illg(0x4E7B); return 0; - } - } + } + } + return 1; +} + +int m68k_movec2(int regno, uae_u32 *regp) +{ + if (movec_illg(regno)) + { + op_illg(0x4E7A); + return 0; + } + else + { + switch (regno) + { + case 0: + *regp = regs.sfc; + break; + case 1: + *regp = regs.dfc; + break; + case 2: + { + uae_u32 v = regs.cacr; + uae_u32 cacr_mask = 0; + if (currprefs.cpu_model == 68020) + cacr_mask = 0x00000003; + else if (currprefs.cpu_model == 68030) + cacr_mask = 0x00003313; + else if (currprefs.cpu_model == 68040) + cacr_mask = 0x80008000; + *regp = v & cacr_mask; + } + break; + case 3: + *regp = regs.tcr; + break; + case 4: + *regp = regs.itt0; + break; + case 5: + *regp = regs.itt1; + break; + case 6: + *regp = regs.dtt0; + break; + case 7: + *regp = regs.dtt1; + break; + case 8: + *regp = regs.buscr; + break; + + case 0x800: + *regp = regs.usp; + break; + case 0x801: + *regp = regs.vbr; + break; + case 0x802: + *regp = regs.caar; + break; + case 0x803: + *regp = regs.m == 1 ? m68k_areg(regs, 7) : regs.msp; + break; + case 0x804: + *regp = regs.m == 0 ? m68k_areg(regs, 7) : regs.isp; + break; + case 0x805: + *regp = regs.mmusr; + break; + case 0x806: + *regp = regs.urp; + break; + case 0x807: + *regp = regs.srp; + break; + case 0x808: + *regp = regs.pcr; + break; + + default: + op_illg(0x4E7A); + return 0; + } + } return 1; } @@ -141,47 +225,48 @@ int m68k_movec2 (int regno, uae_u32 *regp) * extract bitfield data from memory and return it in the MSBs * bdata caches the unmodified data for put_bitfield() */ -uae_u32 REGPARAM2 get_bitfield (uae_u32 src, uae_u32 bdata[2], uae_s32 offset, int width) +uae_u32 REGPARAM2 get_bitfield(uae_u32 src, uae_u32 bdata[2], uae_s32 offset, int width) { uae_u32 tmp, res, mask; offset &= 7; mask = 0xffffffffu << (32 - width); - switch ((offset + width + 7) >> 3) { + switch ((offset + width + 7) >> 3) + { case 1: - tmp = get_byte (src); + tmp = get_byte(src); res = tmp << (24 + offset); bdata[0] = tmp & ~(mask >> (24 + offset)); break; case 2: - tmp = get_word (src); + tmp = get_word(src); res = tmp << (16 + offset); bdata[0] = tmp & ~(mask >> (16 + offset)); break; case 3: - tmp = get_word (src); + tmp = get_word(src); res = tmp << (16 + offset); bdata[0] = tmp & ~(mask >> (16 + offset)); - tmp = get_byte (src + 2); + tmp = get_byte(src + 2); res |= tmp << (8 + offset); bdata[1] = tmp & ~(mask >> (8 + offset)); break; case 4: - tmp = get_long (src); + tmp = get_long(src); res = tmp << offset; bdata[0] = tmp & ~(mask >> offset); break; case 5: - tmp = get_long (src); + tmp = get_long(src); res = tmp << offset; bdata[0] = tmp & ~(mask >> offset); - tmp = get_byte (src + 4); + tmp = get_byte(src + 4); res |= tmp >> (8 - offset); bdata[1] = tmp & ~(mask << (8 - offset)); break; default: /* Panic? */ - write_log (_T("get_bitfield() can't happen %d\n"), (offset + width + 7) >> 3); + write_log(_T("get_bitfield() can't happen %d\n"), (offset + width + 7) >> 3); res = 0; break; } @@ -191,67 +276,73 @@ uae_u32 REGPARAM2 get_bitfield (uae_u32 src, uae_u32 bdata[2], uae_s32 offset, i * write bitfield data (in the LSBs) back to memory, upper bits * must be cleared already. */ -void REGPARAM2 put_bitfield (uae_u32 dst, uae_u32 bdata[2], uae_u32 val, uae_s32 offset, int width) +void REGPARAM2 put_bitfield(uae_u32 dst, uae_u32 bdata[2], uae_u32 val, uae_s32 offset, int width) { offset = (offset & 7) + width; - switch ((offset + 7) >> 3) { + switch ((offset + 7) >> 3) + { case 1: - put_byte (dst, bdata[0] | (val << (8 - offset))); + put_byte(dst, bdata[0] | (val << (8 - offset))); break; case 2: - put_word (dst, bdata[0] | (val << (16 - offset))); + put_word(dst, bdata[0] | (val << (16 - offset))); break; case 3: - put_word (dst, bdata[0] | (val >> (offset - 16))); - put_byte (dst + 2, bdata[1] | (val << (24 - offset))); + put_word(dst, bdata[0] | (val >> (offset - 16))); + put_byte(dst + 2, bdata[1] | (val << (24 - offset))); break; case 4: - put_long (dst, bdata[0] | (val << (32 - offset))); + put_long(dst, bdata[0] | (val << (32 - offset))); break; case 5: - put_long (dst, bdata[0] | (val >> (offset - 32))); - put_byte (dst + 4, bdata[1] | (val << (40 - offset))); + put_long(dst, bdata[0] | (val >> (offset - 32))); + put_byte(dst + 4, bdata[1] | (val << (40 - offset))); break; default: - write_log (_T("put_bitfield() can't happen %d\n"), (offset + 7) >> 3); + write_log(_T("put_bitfield() can't happen %d\n"), (offset + 7) >> 3); break; } } -uae_u32 REGPARAM2 _get_disp_ea_020 (uae_u32 base) +uae_u32 REGPARAM2 _get_disp_ea_020(uae_u32 base) { - uae_u16 dp = next_diword (); - int reg = (dp >> 12) & 15; - uae_s32 regd = regs.regs[reg]; - if ((dp & 0x800) == 0) - regd = (uae_s32)(uae_s16)regd; - regd <<= (dp >> 9) & 3; - if (dp & 0x100) { - uae_s32 outer = 0; - if (dp & 0x80) base = 0; - if (dp & 0x40) regd = 0; + uae_u16 dp = next_diword(); + int reg = (dp >> 12) & 15; + uae_s32 regd = regs.regs[reg]; + if ((dp & 0x800) == 0) + regd = (uae_s32)(uae_s16)regd; + regd <<= (dp >> 9) & 3; + if (dp & 0x100) + { + uae_s32 outer = 0; + if (dp & 0x80) + base = 0; + if (dp & 0x40) + regd = 0; - if ((dp & 0x30) == 0x20) - base += (uae_s32)(uae_s16) next_diword (); - if ((dp & 0x30) == 0x30) - base += next_dilong (); + if ((dp & 0x30) == 0x20) + base += (uae_s32)(uae_s16)next_diword(); + if ((dp & 0x30) == 0x30) + base += next_dilong(); - if ((dp & 0x3) == 0x2) - outer = (uae_s32)(uae_s16) next_diword (); - if ((dp & 0x3) == 0x3) - outer = next_dilong (); + if ((dp & 0x3) == 0x2) + outer = (uae_s32)(uae_s16)next_diword(); + if ((dp & 0x3) == 0x3) + outer = next_dilong(); - if ((dp & 0x4) == 0) - base += regd; - if (dp & 0x3) - base = get_long (base); - if (dp & 0x4) - base += regd; + if ((dp & 0x4) == 0) + base += regd; + if (dp & 0x3) + base = get_long(base); + if (dp & 0x4) + base += regd; - return base + outer; - } else { - return base + (uae_s32)((uae_s8)dp) + regd; - } + return base + outer; + } + else + { + return base + (uae_s32)((uae_s8)dp) + regd; + } } /* @@ -312,34 +403,37 @@ uae_u32 REGPARAM2 _get_disp_ea_020 (uae_u32 base) */ -int getDivu68kCycles (uae_u32 dividend, uae_u16 divisor) +int getDivu68kCycles(uae_u32 dividend, uae_u16 divisor) { int mcycles; uae_u32 hdivisor; int i; - if(divisor == 0) + if (divisor == 0) return 0; // Overflow - if((dividend >> 16) >= divisor) + if ((dividend >> 16) >= divisor) return (mcycles = 5) * 2; mcycles = 38; hdivisor = divisor << 16; - for( i = 0; i < 15; i++) { + for (i = 0; i < 15; i++) + { uae_u32 temp; temp = dividend; dividend <<= 1; // If carry from shift - if((uae_s32)temp < 0) + if ((uae_s32)temp < 0) dividend -= hdivisor; - else { + else + { mcycles += 2; - if(dividend >= hdivisor) { + if (dividend >= hdivisor) + { dividend -= hdivisor; mcycles--; } @@ -348,31 +442,32 @@ int getDivu68kCycles (uae_u32 dividend, uae_u16 divisor) return mcycles * 2; } -int getDivs68kCycles (uae_s32 dividend, uae_s16 divisor) +int getDivs68kCycles(uae_s32 dividend, uae_s16 divisor) { int mcycles; uae_u32 aquot; int i; - if(divisor == 0) + if (divisor == 0) return 0; mcycles = 6; - if( dividend < 0) + if (dividend < 0) mcycles++; // Check for absolute overflow - if(((uae_u32)abs(dividend) >> 16) >= (uae_u16)abs(divisor)) + if (((uae_u32)abs(dividend) >> 16) >= (uae_u16)abs(divisor)) return (mcycles + 2) * 2; // Absolute quotient - aquot = (uae_u32) abs(dividend) / (uae_u16)abs(divisor); + aquot = (uae_u32)abs(dividend) / (uae_u16)abs(divisor); mcycles += 55; - if(divisor >= 0) { - if(dividend >= 0) + if (divisor >= 0) + { + if (dividend >= 0) mcycles--; else mcycles++; @@ -380,8 +475,9 @@ int getDivs68kCycles (uae_s32 dividend, uae_s16 divisor) // Count 15 msbits in absolute of quotient - for( i = 0; i < 15; i++) { - if((uae_s16)aquot >= 0) + for (i = 0; i < 15; i++) + { + if ((uae_s16)aquot >= 0) mcycles++; aquot <<= 1; } @@ -393,23 +489,31 @@ int getDivs68kCycles (uae_s32 dividend, uae_s16 divisor) * 68020 and 68030: Signed: Z=1 NVC=0. Unsigned: V=1, N= 68040) { - SET_CFLG (0); - } else { + else + { + SET_ZFLG(1); + } + } + else if (currprefs.cpu_model >= 68040) + { + SET_CFLG(0); + } + else + { // 68000/010 - CLEAR_CZNV (); + CLEAR_CZNV(); } } @@ -426,13 +530,18 @@ void divbyzero_special (bool issigned, uae_s32 dst) void setdivuoverflowflags(uae_u32 dividend, uae_u16 divisor) { - if (currprefs.cpu_model >= 68040) { + if (currprefs.cpu_model >= 68040) + { SET_VFLG(1); - } else if (currprefs.cpu_model >= 68020) { + } + else if (currprefs.cpu_model >= 68020) + { SET_VFLG(1); if ((uae_s32)dividend < 0) SET_NFLG(1); - } else { + } + else + { SET_VFLG(1); SET_NFLG(1); } @@ -453,9 +562,12 @@ void setdivuoverflowflags(uae_u32 dividend, uae_u16 divisor) void setdivsoverflowflags(uae_s32 dividend, uae_s16 divisor) { - if (currprefs.cpu_model >= 68040) { + if (currprefs.cpu_model >= 68040) + { SET_VFLG(1); - } else if (currprefs.cpu_model >= 68020) { + } + else if (currprefs.cpu_model >= 68020) + { SET_VFLG(1); // absolute overflow? if (((uae_u32)abs(dividend) >> 16) >= (uae_u16)abs(divisor)) @@ -465,7 +577,9 @@ void setdivsoverflowflags(uae_s32 dividend, uae_s16 divisor) SET_ZFLG(1); if ((uae_s8)aquot < 0) SET_NFLG(1); - } else { + } + else + { SET_VFLG(1); SET_NFLG(1); } @@ -477,16 +591,20 @@ STATIC_INLINE int div_unsigned(uae_u32 src_hi, uae_u32 src_lo, uae_u32 div, uae_ uae_u32 q = 0, cbit = 0; int i; - if (div <= src_hi) { - return 1; + if (div <= src_hi) + { + return 1; } - for (i = 0 ; i < 32 ; i++) { + for (i = 0; i < 32; i++) + { cbit = src_hi & 0x80000000ul; src_hi <<= 1; - if (src_lo & 0x80000000ul) src_hi++; + if (src_lo & 0x80000000ul) + src_hi++; src_lo <<= 1; q = q << 1; - if (cbit || div <= src_hi) { + if (cbit || div <= src_hi) + { q |= 1; src_hi -= div; } @@ -632,10 +750,12 @@ STATIC_INLINE void mul_unsigned(uae_u32 src1, uae_u32 src2, uae_u32 *dst_hi, uae uae_u32 lo; lo = r0 + ((r1 << 16) & 0xffff0000ul); - if (lo < r0) r3++; + if (lo < r0) + r3++; r0 = lo; lo = r0 + ((r2 << 16) & 0xffff0000ul); - if (lo < r0) r3++; + if (lo < r0) + r3++; r3 += ((r1 >> 16) & 0xffff) + ((r2 >> 16) & 0xffff); *dst_lo = lo; *dst_hi = r3; diff --git a/src/readcpu.cpp b/src/readcpu.cpp index 8fb1f5c0..915373dc 100644 --- a/src/readcpu.cpp +++ b/src/readcpu.cpp @@ -196,7 +196,7 @@ STATIC_INLINE amodes mode_from_mr (int mode, int reg) return (amodes)0; } -static void build_insn (int insn) +static void build_insn(int insn) { int find = -1; int variants; @@ -205,61 +205,90 @@ static void build_insn (int insn) int i, n; int flaglive = 0, flagdead = 0; - int cflow = 0; + int cflow = 0; - // Mask of flags set/used - unsigned char flags_set = 0; - unsigned char flags_used = 0; + // Mask of flags set/used + unsigned char flags_set = 0; + unsigned char flags_used = 0; id = defs68k[insn]; - // Control flow information - cflow = id.cflow; + // Control flow information + cflow = id.cflow; - for (i = 0, n = 4; i < 5; i++, n--) { - switch (id.flaginfo[i].flagset) { - case fa_unset: - case fa_isjmp: - break; - default: - flags_set |= (1 << n); - } + for (i = 0, n = 4; i < 5; i++, n--) + { + switch (id.flaginfo[i].flagset) + { + case fa_unset: + case fa_isjmp: + break; + default: + flags_set |= (1 << n); + } - switch (id.flaginfo[i].flaguse) { - case fu_unused: - case fu_isjmp: - break; - default: - flags_used |= (1 << n); - } - } + switch (id.flaginfo[i].flaguse) + { + case fu_unused: + case fu_isjmp: + break; + default: + flags_used |= (1 << n); + } + } - for (i = 0; i < 5; i++) { - switch (id.flaginfo[i].flagset){ - case fa_unset: break; - case fa_isjmp: break; - case fa_zero: flagdead |= 1 << i; break; - case fa_one: flagdead |= 1 << i; break; - case fa_dontcare: flagdead |= 1 << i; break; - case fa_unknown: flagdead = -1; goto out1; - case fa_set: flagdead |= 1 << i; break; + for (i = 0; i < 5; i++) + { + switch (id.flaginfo[i].flagset) + { + case fa_unset: + break; + case fa_isjmp: + break; + case fa_zero: + flagdead |= 1 << i; + break; + case fa_one: + flagdead |= 1 << i; + break; + case fa_dontcare: + flagdead |= 1 << i; + break; + case fa_unknown: + flagdead = -1; + goto out1; + case fa_set: + flagdead |= 1 << i; + break; } } out1: - for (i = 0; i < 5; i++) { - switch (id.flaginfo[i].flaguse) { - case fu_unused: break; - case fu_isjmp: flaglive |= 1 << i; break; - case fu_maybecc: flaglive |= 1 << i; break; - case fu_unknown: flaglive = -1; goto out2; - case fu_used: flaglive |= 1 << i; break; + for (i = 0; i < 5; i++) + { + switch (id.flaginfo[i].flaguse) + { + case fu_unused: + break; + case fu_isjmp: + flaglive |= 1 << i; + break; + case fu_maybecc: + flaglive |= 1 << i; + break; + case fu_unknown: + flaglive = -1; + goto out2; + case fu_used: + flaglive |= 1 << i; + break; } } out2: opcstr = id.opcstr; - for (variants = 0; variants < (1 << id.n_variable); variants++) { + for (variants = 0; variants < (1 << id.n_variable); variants++) + { int bitcnt[lastbit]; int bitval[lastbit]; int bitpos[lastbit]; @@ -287,8 +316,10 @@ out2: vmsk = 1 << id.n_variable; - for (i = 0, msk = 0x8000; i < 16; i++, msk >>= 1) { - if (!(msk & id.mask)) { + for (i = 0, msk = 0x8000; i < 16; i++, msk >>= 1) + { + if (!(msk & id.mask)) + { int currbit = id.bitpos[bitno++]; int bit_set; vmsk >>= 1; @@ -302,7 +333,8 @@ out2: } } - if (bitval[bitj] == 0) bitval[bitj] = 8; + if (bitval[bitj] == 0) + bitval[bitj] = 8; /* first check whether this one does not match after all */ if (bitval[bitz] == 3 || bitval[bitC] == 1) continue; @@ -313,40 +345,69 @@ out2: continue; /* bitI and bitC get copied to biti and bitc */ - if (bitcnt[bitI]) { - bitval[biti] = bitval[bitI]; bitpos[biti] = bitpos[bitI]; + if (bitcnt[bitI]) + { + bitval[biti] = bitval[bitI]; + bitpos[biti] = bitpos[bitI]; } if (bitcnt[bitC]) bitval[bitc] = bitval[bitC]; pos = 0; - while (opcstr[pos] && !_istspace(opcstr[pos])) { - if (opcstr[pos] == '.') { + while (opcstr[pos] && !_istspace(opcstr[pos])) + { + if (opcstr[pos] == '.') + { pos++; unsized = 0; - switch (opcstr[pos]) { + switch (opcstr[pos]) + { - case 'B': sz = sz_byte; break; - case 'W': sz = sz_word; break; - case 'L': sz = sz_long; break; + case 'B': + sz = sz_byte; + break; + case 'W': + sz = sz_word; + break; + case 'L': + sz = sz_long; + break; case 'z': - switch (bitval[bitz]) { - case 0: sz = sz_byte; break; - case 1: sz = sz_word; break; - case 2: sz = sz_long; break; - default: abort(); + switch (bitval[bitz]) + { + case 0: + sz = sz_byte; + break; + case 1: + sz = sz_word; + break; + case 2: + sz = sz_long; + break; + default: + abort(); } break; - default: abort(); + default: + abort(); } - } else { + } + else + { mnemonic[mnp] = opcstr[pos]; - if (mnemonic[mnp] == 'f') { + if (mnemonic[mnp] == 'f') + { find = -1; - switch (bitval[bitf]) { - case 0: mnemonic[mnp] = 'R'; break; - case 1: mnemonic[mnp] = 'L'; break; - default: abort(); + switch (bitval[bitf]) + { + case 0: + mnemonic[mnp] = 'R'; + break; + case 1: + mnemonic[mnp] = 'L'; + break; + default: + abort(); } } mnp++; @@ -365,136 +426,209 @@ out2: /* parse the source address */ usesrc = 1; - switch (opcstr[pos++]) { + switch (opcstr[pos++]) + { case 'D': srcmode = Dreg; - switch (opcstr[pos++]) { - case 'r': srcreg = bitval[bitr]; srcgather = 1; srcpos = bitpos[bitr]; break; - case 'R': srcreg = bitval[bitR]; srcgather = 1; srcpos = bitpos[bitR]; break; - default: abort(); + switch (opcstr[pos++]) + { + case 'r': + srcreg = bitval[bitr]; + srcgather = 1; + srcpos = bitpos[bitr]; + break; + case 'R': + srcreg = bitval[bitR]; + srcgather = 1; + srcpos = bitpos[bitR]; + break; + default: + abort(); } break; case 'A': srcmode = Areg; - switch (opcstr[pos++]) { - case 'l': srcmode = absl; break; - case 'r': srcreg = bitval[bitr]; srcgather = 1; srcpos = bitpos[bitr]; break; - case 'R': srcreg = bitval[bitR]; srcgather = 1; srcpos = bitpos[bitR]; break; - default: abort(); + switch (opcstr[pos++]) + { + case 'l': + srcmode = absl; + break; + case 'r': + srcreg = bitval[bitr]; + srcgather = 1; + srcpos = bitpos[bitr]; + break; + case 'R': + srcreg = bitval[bitR]; + srcgather = 1; + srcpos = bitpos[bitR]; + break; + default: + abort(); } - switch (opcstr[pos]) { - case 'p': srcmode = Apdi; pos++; break; - case 'P': srcmode = Aipi; pos++; break; - case 'a': srcmode = Aind; pos++; break; + switch (opcstr[pos]) + { + case 'p': + srcmode = Apdi; + pos++; + break; + case 'P': + srcmode = Aipi; + pos++; + break; + case 'a': + srcmode = Aind; + pos++; + break; } break; case 'L': srcmode = absl; break; case '#': - switch (opcstr[pos++]) { - case 'z': srcmode = imm; break; - case '0': srcmode = imm0; break; - case '1': srcmode = imm1; break; - case '2': srcmode = imm2; break; - case 'i': srcmode = immi; srcreg = (uae_s32)(uae_s8)bitval[biti]; - if (CPU_EMU_SIZE < 4) { + switch (opcstr[pos++]) + { + case 'z': + srcmode = imm; + break; + case '0': + srcmode = imm0; + break; + case '1': + srcmode = imm1; + break; + case '2': + srcmode = imm2; + break; + case 'i': + srcmode = immi; + srcreg = (uae_s32)(uae_s8)bitval[biti]; + if (CPU_EMU_SIZE < 4) + { /* Used for branch instructions */ srctype = 1; srcgather = 1; srcpos = bitpos[biti]; } break; - case 'j': srcmode = immi; srcreg = bitval[bitj]; - if (CPU_EMU_SIZE < 3) { + case 'j': + srcmode = immi; + srcreg = bitval[bitj]; + if (CPU_EMU_SIZE < 3) + { /* 1..8 for ADDQ/SUBQ and rotshi insns */ srcgather = 1; srctype = 3; srcpos = bitpos[bitj]; } break; - case 'J': srcmode = immi; srcreg = bitval[bitJ]; - if (CPU_EMU_SIZE < 5) { + case 'J': + srcmode = immi; + srcreg = bitval[bitJ]; + if (CPU_EMU_SIZE < 5) + { /* 0..15 */ srcgather = 1; srctype = 2; srcpos = bitpos[bitJ]; } break; - case 'k': srcmode = immi; srcreg = bitval[bitk]; - if (CPU_EMU_SIZE < 3) { + case 'k': + srcmode = immi; + srcreg = bitval[bitk]; + if (CPU_EMU_SIZE < 3) + { srcgather = 1; srctype = 4; srcpos = bitpos[bitk]; } break; - case 'K': srcmode = immi; srcreg = bitval[bitK]; - if (CPU_EMU_SIZE < 5) { + case 'K': + srcmode = immi; + srcreg = bitval[bitK]; + if (CPU_EMU_SIZE < 5) + { /* 0..15 */ srcgather = 1; srctype = 5; srcpos = bitpos[bitK]; } break; - case 'E': srcmode = immi; srcreg = bitval[bitE]; - if (CPU_EMU_SIZE < 5) { - /* 1..255 */ - srcgather = 1; - srctype = 6; - srcpos = bitpos[bitE]; - } - break; - case 'p': srcmode = immi; srcreg = bitval[bitp]; - if (CPU_EMU_SIZE < 5) { + case 'E': + srcmode = immi; + srcreg = bitval[bitE]; + if (CPU_EMU_SIZE < 5) + { + /* 1..255 */ + srcgather = 1; + srctype = 6; + srcpos = bitpos[bitE]; + } + break; + case 'p': + srcmode = immi; + srcreg = bitval[bitp]; + if (CPU_EMU_SIZE < 5) + { /* 0..3 */ srcgather = 1; srctype = 7; srcpos = bitpos[bitp]; } break; - default: abort(); + default: + abort(); } break; case 'd': srcreg = bitval[bitD]; - srcmode = mode_from_mr(bitval[bitd],bitval[bitD]); + srcmode = mode_from_mr(bitval[bitd], bitval[bitD]); if (srcmode == am_illg) continue; if (CPU_EMU_SIZE < 2 && - (srcmode == Areg || srcmode == Dreg || srcmode == Aind - || srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi - || srcmode == Apdi)) + (srcmode == Areg || srcmode == Dreg || srcmode == Aind || srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi || srcmode == Apdi)) { - srcgather = 1; srcpos = bitpos[bitD]; + srcgather = 1; + srcpos = bitpos[bitD]; } - if (opcstr[pos] == '[') { + if (opcstr[pos] == '[') + { pos++; - if (opcstr[pos] == '!') { + if (opcstr[pos] == '!') + { /* exclusion */ - do { + do + { pos++; - if (mode_from_str(opcstr+pos) == srcmode) + if (mode_from_str(opcstr + pos) == srcmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; - } else { - if (opcstr[pos+4] == '-') { + } + else + { + if (opcstr[pos + 4] == '-') + { /* replacement */ - if (mode_from_str(opcstr+pos) == srcmode) - srcmode = mode_from_str(opcstr+pos+5); + if (mode_from_str(opcstr + pos) == srcmode) + srcmode = mode_from_str(opcstr + pos + 5); else goto nomatch; pos += 10; - } else { + } + else + { /* normal */ - while(mode_from_str(opcstr+pos) != srcmode) { + while (mode_from_str(opcstr + pos) != srcmode) + { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } - while(opcstr[pos] != ']') pos++; + while (opcstr[pos] != ']') + pos++; pos++; break; } @@ -506,56 +640,64 @@ out2: break; case 's': srcreg = bitval[bitS]; - srcmode = mode_from_mr(bitval[bits],bitval[bitS]); + srcmode = mode_from_mr(bitval[bits], bitval[bitS]); if (srcmode == am_illg) continue; if (CPU_EMU_SIZE < 2 && - (srcmode == Areg || srcmode == Dreg || srcmode == Aind - || srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi - || srcmode == Apdi)) + (srcmode == Areg || srcmode == Dreg || srcmode == Aind || srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi || srcmode == Apdi)) { - srcgather = 1; srcpos = bitpos[bitS]; + srcgather = 1; + srcpos = bitpos[bitS]; } - if (opcstr[pos] == '[') { + if (opcstr[pos] == '[') + { pos++; - if (opcstr[pos] == '!') { + if (opcstr[pos] == '!') + { /* exclusion */ - do { + do + { pos++; - if (mode_from_str(opcstr+pos) == srcmode) + if (mode_from_str(opcstr + pos) == srcmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; - } else { - if (opcstr[pos+4] == '-') { + } + else + { + if (opcstr[pos + 4] == '-') + { /* replacement */ - if (mode_from_str(opcstr+pos) == srcmode) - srcmode = mode_from_str(opcstr+pos+5); + if (mode_from_str(opcstr + pos) == srcmode) + srcmode = mode_from_str(opcstr + pos + 5); else goto nomatch; pos += 10; - } else { + } + else + { /* normal */ - while(mode_from_str(opcstr+pos) != srcmode) { + while (mode_from_str(opcstr + pos) != srcmode) + { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } - while(opcstr[pos] != ']') pos++; + while (opcstr[pos] != ']') + pos++; pos++; } } } break; - default: abort(); + default: + abort(); } /* safety check - might have changed */ - if (srcmode != Areg && srcmode != Dreg && srcmode != Aind - && srcmode != Ad16 && srcmode != Ad8r && srcmode != Aipi - && srcmode != Apdi && srcmode != immi) + if (srcmode != Areg && srcmode != Dreg && srcmode != Aind && srcmode != Ad16 && srcmode != Ad8r && srcmode != Aipi && srcmode != Apdi && srcmode != immi) { srcgather = 0; } @@ -568,91 +710,159 @@ out2: /* parse the destination address */ usedst = 1; - switch (opcstr[pos++]) { + switch (opcstr[pos++]) + { case 'D': destmode = Dreg; - switch (opcstr[pos++]) { - case 'r': destreg = bitval[bitr]; dstgather = 1; dstpos = bitpos[bitr]; break; - case 'R': destreg = bitval[bitR]; dstgather = 1; dstpos = bitpos[bitR]; break; - default: abort(); + switch (opcstr[pos++]) + { + case 'r': + destreg = bitval[bitr]; + dstgather = 1; + dstpos = bitpos[bitr]; + break; + case 'R': + destreg = bitval[bitR]; + dstgather = 1; + dstpos = bitpos[bitR]; + break; + default: + abort(); } if (dstpos < 0 || dstpos >= 32) - abort (); + abort(); break; case 'A': destmode = Areg; - switch (opcstr[pos++]) { - case 'l': destmode = absl; break; - case 'r': destreg = bitval[bitr]; dstgather = 1; dstpos = bitpos[bitr]; break; - case 'R': destreg = bitval[bitR]; dstgather = 1; dstpos = bitpos[bitR]; break; - case 'x': destreg = 0; dstgather = 0; dstpos = 0; break; - default: abort(); + switch (opcstr[pos++]) + { + case 'l': + destmode = absl; + break; + case 'r': + destreg = bitval[bitr]; + dstgather = 1; + dstpos = bitpos[bitr]; + break; + case 'R': + destreg = bitval[bitR]; + dstgather = 1; + dstpos = bitpos[bitR]; + break; + case 'x': + destreg = 0; + dstgather = 0; + dstpos = 0; + break; + default: + abort(); } - if (destmode != absl && (dstpos < 0 || dstpos >= 32)) - abort (); - switch (opcstr[pos]) { - case 'p': destmode = Apdi; pos++; break; - case 'P': destmode = Aipi; pos++; break; + if (destmode != absl && (dstpos < 0 || dstpos >= 32)) + abort(); + switch (opcstr[pos]) + { + case 'p': + destmode = Apdi; + pos++; + break; + case 'P': + destmode = Aipi; + pos++; + break; } break; case 'L': destmode = absl; break; case '#': - switch (opcstr[pos++]) { - case 'z': destmode = imm; break; - case '0': destmode = imm0; break; - case '1': destmode = imm1; break; - case '2': destmode = imm2; break; - case 'i': destmode = immi; destreg = (uae_s32)(uae_s8)bitval[biti]; break; - case 'j': destmode = immi; destreg = bitval[bitj]; break; - case 'J': destmode = immi; destreg = bitval[bitJ]; break; - case 'k': destmode = immi; destreg = bitval[bitk]; break; - case 'K': destmode = immi; destreg = bitval[bitK]; break; - default: abort(); + switch (opcstr[pos++]) + { + case 'z': + destmode = imm; + break; + case '0': + destmode = imm0; + break; + case '1': + destmode = imm1; + break; + case '2': + destmode = imm2; + break; + case 'i': + destmode = immi; + destreg = (uae_s32)(uae_s8)bitval[biti]; + break; + case 'j': + destmode = immi; + destreg = bitval[bitj]; + break; + case 'J': + destmode = immi; + destreg = bitval[bitJ]; + break; + case 'k': + destmode = immi; + destreg = bitval[bitk]; + break; + case 'K': + destmode = immi; + destreg = bitval[bitK]; + break; + default: + abort(); } break; case 'd': destreg = bitval[bitD]; - destmode = mode_from_mr(bitval[bitd],bitval[bitD]); + destmode = mode_from_mr(bitval[bitd], bitval[bitD]); if (destmode == am_illg) continue; if (CPU_EMU_SIZE < 1 && - (destmode == Areg || destmode == Dreg || destmode == Aind - || destmode == Ad16 || destmode == Ad8r || destmode == Aipi - || destmode == Apdi)) + (destmode == Areg || destmode == Dreg || destmode == Aind || destmode == Ad16 || destmode == Ad8r || destmode == Aipi || destmode == Apdi)) { - dstgather = 1; dstpos = bitpos[bitD]; + dstgather = 1; + dstpos = bitpos[bitD]; } - if (opcstr[pos] == '[') { + if (opcstr[pos] == '[') + { pos++; - if (opcstr[pos] == '!') { + if (opcstr[pos] == '!') + { /* exclusion */ - do { + do + { pos++; - if (mode_from_str(opcstr+pos) == destmode) + if (mode_from_str(opcstr + pos) == destmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; - } else { - if (opcstr[pos+4] == '-') { + } + else + { + if (opcstr[pos + 4] == '-') + { /* replacement */ - if (mode_from_str(opcstr+pos) == destmode) - destmode = mode_from_str(opcstr+pos+5); + if (mode_from_str(opcstr + pos) == destmode) + destmode = mode_from_str(opcstr + pos + 5); else goto nomatch; pos += 10; - } else { + } + else + { /* normal */ - while(mode_from_str(opcstr+pos) != destmode) { + while (mode_from_str(opcstr + pos) != destmode) + { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } - while(opcstr[pos] != ']') pos++; + while (opcstr[pos] != ']') + pos++; pos++; break; } @@ -664,91 +874,101 @@ out2: break; case 's': destreg = bitval[bitS]; - destmode = mode_from_mr(bitval[bits],bitval[bitS]); + destmode = mode_from_mr(bitval[bits], bitval[bitS]); if (destmode == am_illg) continue; if (CPU_EMU_SIZE < 1 && - (destmode == Areg || destmode == Dreg || destmode == Aind - || destmode == Ad16 || destmode == Ad8r || destmode == Aipi - || destmode == Apdi)) + (destmode == Areg || destmode == Dreg || destmode == Aind || destmode == Ad16 || destmode == Ad8r || destmode == Aipi || destmode == Apdi)) { - dstgather = 1; dstpos = bitpos[bitS]; + dstgather = 1; + dstpos = bitpos[bitS]; } - if (opcstr[pos] == '[') { + if (opcstr[pos] == '[') + { pos++; - if (opcstr[pos] == '!') { + if (opcstr[pos] == '!') + { /* exclusion */ - do { + do + { pos++; - if (mode_from_str(opcstr+pos) == destmode) + if (mode_from_str(opcstr + pos) == destmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; - } else { - if (opcstr[pos+4] == '-') { + } + else + { + if (opcstr[pos + 4] == '-') + { /* replacement */ - if (mode_from_str(opcstr+pos) == destmode) - destmode = mode_from_str(opcstr+pos+5); + if (mode_from_str(opcstr + pos) == destmode) + destmode = mode_from_str(opcstr + pos + 5); else goto nomatch; pos += 10; - } else { + } + else + { /* normal */ - while(mode_from_str(opcstr+pos) != destmode) { + while (mode_from_str(opcstr + pos) != destmode) + { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } - while(opcstr[pos] != ']') pos++; + while (opcstr[pos] != ']') + pos++; pos++; } } } break; - default: abort(); + default: + abort(); } /* safety check - might have changed */ - if (destmode != Areg && destmode != Dreg && destmode != Aind - && destmode != Ad16 && destmode != Ad8r && destmode != Aipi - && destmode != Apdi) + if (destmode != Areg && destmode != Dreg && destmode != Aind && destmode != Ad16 && destmode != Ad8r && destmode != Aipi && destmode != Apdi) { dstgather = 0; } if (destmode == Areg && sz == sz_byte) goto nomatch; -endofline: + endofline: /* now, we have a match */ if (table68k[opc].mnemo != i_ILLG) - ;//write_log (_T("Double match: %x: %s\n"), opc, opcstr); - if (find == -1) { - for (find = 0;; find++) { - if (_tcscmp (mnemonic, lookuptab[find].name) == 0) { + ; //write_log (_T("Double match: %x: %s\n"), opc, opcstr); + if (find == -1) + { + for (find = 0;; find++) + { + if (_tcscmp(mnemonic, lookuptab[find].name) == 0) + { table68k[opc].mnemo = lookuptab[find].mnemo; break; } - if (_tcslen (lookuptab[find].name) == 0) + if (_tcslen(lookuptab[find].name) == 0) abort(); } } - else { + else + { table68k[opc].mnemo = lookuptab[find].mnemo; } table68k[opc].cc = bitval[bitc]; mnemo = table68k[opc].mnemo; - if (mnemo == i_BTST - || mnemo == i_BSET - || mnemo == i_BCLR - || mnemo == i_BCHG) + if (mnemo == i_BTST || mnemo == i_BSET || mnemo == i_BCLR || mnemo == i_BCHG) { sz = destmode == Dreg ? sz_long : sz_byte; unsized = 0; } - if (mnemo == i_JSR || mnemo == i_JMP) { + if (mnemo == i_JSR || mnemo == i_JMP) + { unsized = 1; } @@ -772,108 +992,167 @@ endofline: table68k[opc].clocks = id.clocks; table68k[opc].fetchmode = id.fetchmode; - // Fix flags used information for Scc, Bcc, TRAPcc, DBcc instructions - if ( table68k[opc].mnemo == i_Scc - || table68k[opc].mnemo == i_Bcc - || table68k[opc].mnemo == i_DBcc - || table68k[opc].mnemo == i_TRAPcc - ) { - switch (table68k[opc].cc) { - // CC mask: XNZVC - // 8421 - case 0: flags_used = 0x00; break; /* T */ - case 1: flags_used = 0x00; break; /* F */ - case 2: flags_used = 0x05; break; /* HI */ - case 3: flags_used = 0x05; break; /* LS */ - case 4: flags_used = 0x01; break; /* CC */ - case 5: flags_used = 0x01; break; /* CS */ - case 6: flags_used = 0x04; break; /* NE */ - case 7: flags_used = 0x04; break; /* EQ */ - case 8: flags_used = 0x02; break; /* VC */ - case 9: flags_used = 0x02; break; /* VS */ - case 10:flags_used = 0x08; break; /* PL */ - case 11:flags_used = 0x08; break; /* MI */ - case 12:flags_used = 0x0A; break; /* GE */ - case 13:flags_used = 0x0A; break; /* LT */ - case 14:flags_used = 0x0E; break; /* GT */ - case 15:flags_used = 0x0E; break; /* LE */ + // Fix flags used information for Scc, Bcc, TRAPcc, DBcc instructions + if (table68k[opc].mnemo == i_Scc || table68k[opc].mnemo == i_Bcc || table68k[opc].mnemo == i_DBcc || table68k[opc].mnemo == i_TRAPcc) + { + switch (table68k[opc].cc) + { + // CC mask: XNZVC + // 8421 + case 0: + flags_used = 0x00; + break; /* T */ + case 1: + flags_used = 0x00; + break; /* F */ + case 2: + flags_used = 0x05; + break; /* HI */ + case 3: + flags_used = 0x05; + break; /* LS */ + case 4: + flags_used = 0x01; + break; /* CC */ + case 5: + flags_used = 0x01; + break; /* CS */ + case 6: + flags_used = 0x04; + break; /* NE */ + case 7: + flags_used = 0x04; + break; /* EQ */ + case 8: + flags_used = 0x02; + break; /* VC */ + case 9: + flags_used = 0x02; + break; /* VS */ + case 10: + flags_used = 0x08; + break; /* PL */ + case 11: + flags_used = 0x08; + break; /* MI */ + case 12: + flags_used = 0x0A; + break; /* GE */ + case 13: + flags_used = 0x0A; + break; /* LT */ + case 14: + flags_used = 0x0E; + break; /* GT */ + case 15: + flags_used = 0x0E; + break; /* LE */ + } } - } #if 1 - /* gb-- flagdead and flaglive would not have correct information */ - table68k[opc].flagdead = flags_set; - table68k[opc].flaglive = flags_used; + /* gb-- flagdead and flaglive would not have correct information */ + table68k[opc].flagdead = flags_set; + table68k[opc].flaglive = flags_used; #else table68k[opc].flagdead = flagdead; table68k[opc].flaglive = flaglive; #endif - table68k[opc].cflow = cflow; -nomatch: + table68k[opc].cflow = cflow; + nomatch: /* FOO! */; } } - -void read_table68k (void) +void read_table68k(void) { int i; - free (table68k); - table68k = xmalloc (struct instr, 65536); - for (i = 0; i < 65536; i++) { + free(table68k); + table68k = xmalloc(struct instr, 65536); + for (i = 0; i < 65536; i++) + { table68k[i].mnemo = i_ILLG; table68k[i].handler = -1; } - for (i = 0; i < n_defs68k; i++) { - build_insn (i); + for (i = 0; i < n_defs68k; i++) + { + build_insn(i); } } static int imismatch; -static void handle_merges (long int opcode) +static void handle_merges(long int opcode) { uae_u16 smsk; uae_u16 dmsk; int sbitdst, dstend; int srcreg, dstreg; - if (table68k[opcode].spos == -1) { - sbitdst = 1; smsk = 0; - } else { - switch (table68k[opcode].stype) { + if (table68k[opcode].spos == -1) + { + sbitdst = 1; + smsk = 0; + } + else + { + switch (table68k[opcode].stype) + { case 0: - smsk = 7; sbitdst = 8; break; + smsk = 7; + sbitdst = 8; + break; case 1: - smsk = 255; sbitdst = 256; break; + smsk = 255; + sbitdst = 256; + break; case 2: - smsk = 15; sbitdst = 16; break; + smsk = 15; + sbitdst = 16; + break; case 3: - smsk = 7; sbitdst = 8; break; + smsk = 7; + sbitdst = 8; + break; case 4: - smsk = 7; sbitdst = 8; break; + smsk = 7; + sbitdst = 8; + break; case 5: - smsk = 63; sbitdst = 64; break; - case 6: - smsk = 255; sbitdst = 256; break; + smsk = 63; + sbitdst = 64; + break; + case 6: + smsk = 255; + sbitdst = 256; + break; case 7: - smsk = 3; sbitdst = 4; break; + smsk = 3; + sbitdst = 4; + break; default: - smsk = 0; sbitdst = 0; + smsk = 0; + sbitdst = 0; abort(); break; } smsk <<= table68k[opcode].spos; } - if (table68k[opcode].dpos == -1) { - dstend = 1; dmsk = 0; - } else { + if (table68k[opcode].dpos == -1) + { + dstend = 1; + dmsk = 0; + } + else + { dmsk = 7 << table68k[opcode].dpos; dstend = 8; } - for (srcreg=0; srcreg < sbitdst; srcreg++) { - for (dstreg=0; dstreg < dstend; dstreg++) { + for (srcreg = 0; srcreg < sbitdst; srcreg++) + { + for (dstreg = 0; dstreg < dstend; dstreg++) + { uae_u16 code = (uae_u16)opcode; code = (code & ~smsk) | (srcreg << table68k[opcode].spos); @@ -882,25 +1161,20 @@ static void handle_merges (long int opcode) /* Check whether this is in fact the same instruction. * The instructions should never differ, except for the * Bcc.(BW) case. */ - if (table68k[code].mnemo != table68k[opcode].mnemo - || table68k[code].size != table68k[opcode].size - || table68k[code].suse != table68k[opcode].suse - || table68k[code].duse != table68k[opcode].duse) + if (table68k[code].mnemo != table68k[opcode].mnemo || table68k[code].size != table68k[opcode].size || table68k[code].suse != table68k[opcode].suse || table68k[code].duse != table68k[opcode].duse) { - imismatch++; continue; + imismatch++; + continue; } - if (table68k[opcode].suse - && (table68k[opcode].spos != table68k[code].spos - || table68k[opcode].smode != table68k[code].smode - || table68k[opcode].stype != table68k[code].stype)) + if (table68k[opcode].suse && (table68k[opcode].spos != table68k[code].spos || table68k[opcode].smode != table68k[code].smode || table68k[opcode].stype != table68k[code].stype)) { - imismatch++; continue; + imismatch++; + continue; } - if (table68k[opcode].duse - && (table68k[opcode].dpos != table68k[code].dpos - || table68k[opcode].dmode != table68k[code].dmode)) + if (table68k[opcode].duse && (table68k[opcode].dpos != table68k[code].dpos || table68k[opcode].dmode != table68k[code].dmode)) { - imismatch++; continue; + imismatch++; + continue; } if (code != opcode) @@ -909,21 +1183,22 @@ static void handle_merges (long int opcode) } } -void do_merges (void) +void do_merges(void) { long int opcode; int nr = 0; imismatch = 0; - for (opcode = 0; opcode < 65536; opcode++) { + for (opcode = 0; opcode < 65536; opcode++) + { if (table68k[opcode].handler != -1 || table68k[opcode].mnemo == i_ILLG) continue; nr++; - handle_merges (opcode); + handle_merges(opcode); } nr_cpuop_funcs = nr; } -int get_no_mismatches (void) +int get_no_mismatches(void) { return imismatch; } diff --git a/src/rommgr.cpp b/src/rommgr.cpp index 0c1cd6d1..997aa8ce 100644 --- a/src/rommgr.cpp +++ b/src/rommgr.cpp @@ -36,65 +36,69 @@ int romlist_count (void) return romlist_cnt; } -TCHAR *romlist_get (const struct romdata *rd) +TCHAR *romlist_get(const struct romdata *rd) { - int i; + int i; - if (!rd) - return 0; - for (i = 0; i < romlist_cnt; i++) { - if (rl[i].rd->id == rd->id) - return rl[i].path; - } - return 0; + if (!rd) + return 0; + for (i = 0; i < romlist_cnt; i++) + { + if (rl[i].rd->id == rd->id) + return rl[i].path; + } + return 0; } -static struct romlist *romlist_getrl (const struct romdata *rd) +static struct romlist *romlist_getrl(const struct romdata *rd) { - int i; - - if (!rd) - return 0; - for (i = 0; i < romlist_cnt; i++) { - if (rl[i].rd == rd) - return &rl[i]; - } - return 0; + int i; + + if (!rd) + return 0; + for (i = 0; i < romlist_cnt; i++) + { + if (rl[i].rd == rd) + return &rl[i]; + } + return 0; } static void romlist_cleanup (void); -void romlist_add (const TCHAR *path, struct romdata *rd) +void romlist_add(const TCHAR *path, struct romdata *rd) { - struct romlist *rl2; + struct romlist *rl2; - if (path == NULL || rd == NULL) { - romlist_cleanup (); - return; - } - romlist_cnt++; - rl = xrealloc (struct romlist, rl, romlist_cnt); - rl2 = rl + romlist_cnt - 1; - rl2->path = my_strdup (path); - rl2->rd = rd; - struct romdata *rd2 = getromdatabyid (rd->id); + if (path == NULL || rd == NULL) + { + romlist_cleanup(); + return; + } + romlist_cnt++; + rl = xrealloc(struct romlist, rl, romlist_cnt); + rl2 = rl + romlist_cnt - 1; + rl2->path = my_strdup(path); + rl2->rd = rd; + struct romdata *rd2 = getromdatabyid(rd->id); if (rd2 != rd && rd2) // replace "X" with parent name rd->name = rd2->name; } - -struct romdata *getromdatabypath (const TCHAR *path) +struct romdata *getromdatabypath(const TCHAR *path) { - int i; - for (i = 0; i < romlist_cnt; i++) { - struct romdata *rd = rl[i].rd; - if (rd->configname && path[0] == ':') { - if (!_tcscmp(path + 1, rd->configname)) - return rd; - } + int i; + for (i = 0; i < romlist_cnt; i++) + { + struct romdata *rd = rl[i].rd; + if (rd->configname && path[0] == ':') + { + if (!_tcscmp(path + 1, rd->configname)) + return rd; + } if (my_issamepath(rl[i].path, path)) - return rl[i].rd; - } - return NULL; + return rl[i].rd; + } + return NULL; } #define NEXT_ROM_ID 251 diff --git a/src/statusline.cpp b/src/statusline.cpp index fdad1d39..84e75873 100644 --- a/src/statusline.cpp +++ b/src/statusline.cpp @@ -37,13 +37,10 @@ STATIC_INLINE uae_u32 ledcolor(uae_u32 c, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, return v; } -static void write_tdnumber(uae_u8* buf, int bpp, int x, int y, int num, uae_u32 c1, uae_u32 c2) +static void write_tdnumber(uae_u8 *buf, int bpp, int x, int y, int num, uae_u32 c1, uae_u32 c2) { - int j; - const char* numptr; - - numptr = numbers + num * TD_NUM_WIDTH + NUMBERS_NUM * TD_NUM_WIDTH * y; - for (j = 0; j < TD_NUM_WIDTH; j++) + const char* numptr = numbers + num * TD_NUM_WIDTH + NUMBERS_NUM * TD_NUM_WIDTH * y; + for (int j = 0; j < TD_NUM_WIDTH; j++) { if (*numptr == 'x') putpixel(buf, nullptr, bpp, x + j, c1, 1); @@ -348,10 +345,10 @@ void statusline_clear(void) { statusline_text_active = nullptr; statusline_delay = 0; - for (int i = 0; i < MAX_STATUSLINE_QUEUE; i++) + for (auto& i : statusline_data) { - xfree(statusline_data[i].text); - statusline_data[i].text = nullptr; + xfree(i.text); + i.text = nullptr; } statusline_update_notification(); } From 2b5f278754f92b6b5eb588f58cb5eabaeaa25adb Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Sat, 9 Feb 2019 01:39:49 +0100 Subject: [PATCH 16/18] Indentation and unused code cleanup --- src/osdep/amiberry_input.cpp | 78 +++++++++++++++++------------------ src/osdep/gui/PanelCustom.cpp | 32 +++----------- 2 files changed, 43 insertions(+), 67 deletions(-) diff --git a/src/osdep/amiberry_input.cpp b/src/osdep/amiberry_input.cpp index 39e12d83..365dfcb0 100644 --- a/src/osdep/amiberry_input.cpp +++ b/src/osdep/amiberry_input.cpp @@ -804,7 +804,7 @@ static int init_joystick(void) else sprintf(joystick_name[cpt], "Joystick%d", cpt); - // printf("Real Name >>%s<<\n",joystick_name[cpt]); + // printf("Real Name >>%s<<\n",joystick_name[cpt]); //this now uses controllers path (in tmp) char control_config[255]; @@ -812,27 +812,26 @@ static int init_joystick(void) auto sanitized_name = sanitize_retroarch_name(joystick_name[cpt]); strcat(control_config, sanitized_name.c_str()); //strcat(control_config, joystick_name[cpt]); - strcat(control_config, ".cfg"); - - //printf("Trying to match >>%s<<\n",control_config); + strcat(control_config, ".cfg"); + + //printf("Trying to match >>%s<<\n",control_config); if (zfile_exists(control_config)) { fill_blank_controller(); host_input_buttons[cpt] = default_controller_map; - - //printf("Retroarch search for: >>%s<<\n",joystick_name[cpt]); - + //printf("Retroarch search for: >>%s<<\n",joystick_name[cpt]); + host_input_buttons[cpt].is_retroarch = true; host_input_buttons[cpt].hotkey_button = find_retroarch("input_enable_hotkey_btn", control_config, - host_input_buttons[cpt]); + host_input_buttons[cpt]); host_input_buttons[cpt].quit_button = find_retroarch("input_exit_emulator_btn", control_config, - host_input_buttons[cpt]); + host_input_buttons[cpt]); host_input_buttons[cpt].menu_button = find_retroarch("input_menu_toggle_btn", control_config, - host_input_buttons[cpt]); + host_input_buttons[cpt]); host_input_buttons[cpt].reset_button = find_retroarch("input_reset_btn", control_config, host_input_buttons[cpt]); host_input_buttons[cpt].east_button = find_retroarch("input_a_btn", control_config, host_input_buttons[cpt]); @@ -856,41 +855,41 @@ static int init_joystick(void) host_input_buttons[cpt].rstick_button = find_retroarch("input_r3_btn", control_config, host_input_buttons[cpt]); host_input_buttons[cpt].lstick_axis_x = find_retroarch("input_l_x_plus_axis", control_config, - host_input_buttons[cpt]); + host_input_buttons[cpt]); if (host_input_buttons[cpt].lstick_axis_x == -1) host_input_buttons[cpt].lstick_axis_x = find_retroarch("input_right_axis", control_config, host_input_buttons[cpt]); host_input_buttons[cpt].lstick_axis_y = find_retroarch("input_l_y_plus_axis", control_config, - host_input_buttons[cpt]); + host_input_buttons[cpt]); if (host_input_buttons[cpt].lstick_axis_y == -1) host_input_buttons[cpt].lstick_axis_y = find_retroarch("input_down_axis", control_config, host_input_buttons[cpt]); host_input_buttons[cpt].rstick_axis_x = find_retroarch("input_r_x_plus_axis", control_config, - host_input_buttons[cpt]); + host_input_buttons[cpt]); host_input_buttons[cpt].rstick_axis_y = find_retroarch("input_r_y_plus_axis", control_config, - host_input_buttons[cpt]); + host_input_buttons[cpt]); - // specials - // hats + // specials + // hats host_input_buttons[cpt].number_of_hats = find_retroarch("count_hats", control_config, host_input_buttons[cpt]); - - // invert on axes - host_input_buttons[cpt].lstick_axis_y_invert = find_retroarch_polarity("input_down_axis",control_config); - if (host_input_buttons[cpt].lstick_axis_y_invert == false) - host_input_buttons[cpt].lstick_axis_y_invert = find_retroarch_polarity("input_l_y_plus_axis",control_config); - - host_input_buttons[cpt].lstick_axis_x_invert = find_retroarch_polarity("input_right_axis",control_config); - if (host_input_buttons[cpt].lstick_axis_x_invert == false) - host_input_buttons[cpt].lstick_axis_x_invert = find_retroarch_polarity("input_l_x_plus_axis",control_config); - host_input_buttons[cpt].rstick_axis_x_invert = find_retroarch_polarity("input_r_x_plus_axis",control_config); - host_input_buttons[cpt].rstick_axis_y_invert = find_retroarch_polarity("input_r_y_plus_axis",control_config); - -// i'll just leave this here for when we have a working debug logging -// printf("invert left y axis: %d\n",host_input_buttons[cpt].lstick_axis_y_invert); -// printf("invert left x axis: %d\n",host_input_buttons[cpt].lstick_axis_x_invert); -// printf("invert right y axis: %d\n",host_input_buttons[cpt].rstick_axis_y_invert); -// printf("invert right x axis: %d\n",host_input_buttons[cpt].rstick_axis_x_invert); + // invert on axes + host_input_buttons[cpt].lstick_axis_y_invert = find_retroarch_polarity("input_down_axis", control_config); + if (!host_input_buttons[cpt].lstick_axis_y_invert) + host_input_buttons[cpt].lstick_axis_y_invert = find_retroarch_polarity("input_l_y_plus_axis", control_config); + + host_input_buttons[cpt].lstick_axis_x_invert = find_retroarch_polarity("input_right_axis", control_config); + if (!host_input_buttons[cpt].lstick_axis_x_invert) + host_input_buttons[cpt].lstick_axis_x_invert = find_retroarch_polarity("input_l_x_plus_axis", control_config); + + host_input_buttons[cpt].rstick_axis_x_invert = find_retroarch_polarity("input_r_x_plus_axis", control_config); + host_input_buttons[cpt].rstick_axis_y_invert = find_retroarch_polarity("input_r_y_plus_axis", control_config); + + //i'll just leave this here for when we have a working debug logging +// printf("invert left y axis: %d\n",host_input_buttons[cpt].lstick_axis_y_invert); +// printf("invert left x axis: %d\n",host_input_buttons[cpt].lstick_axis_x_invert); +// printf("invert right y axis: %d\n",host_input_buttons[cpt].rstick_axis_y_invert); +// printf("invert right x axis: %d\n",host_input_buttons[cpt].rstick_axis_x_invert); // //input_state_slot_increase_axis //input_state_slot_decrease_axis @@ -1353,20 +1352,17 @@ int input_get_default_joystick(struct uae_input_device* uid, const int num, int } } - // - // ASSIGN ALL INPUT EVENT ACTIONS, EITHER CUSTOM OR DEFAULT // // set up a temporary control layout/ called 'thismap' struct joypad_map_layout thismap[4]; - // here, we will fill thismap with defaults, if a custom value is not set. // this will do a lot of the 'logic' of the original code. thismap[0] = currprefs.jports[port].amiberry_custom_none; // grab the 'no selection' options for the current map - // directions + // directions if (port < 2) // ports 0, 1 ... { @@ -1561,11 +1557,11 @@ int input_get_default_joystick(struct uae_input_device* uid, const int num, int thismap[1] = currprefs.jports[port].amiberry_custom_hotkey; // grab the 'select button' options for the current map - // currently disabled - // thismap[2] = currprefs.jports[port].amiberry_custom_left_trigger; // grab the 'left trigger' options for the current map - // thismap[3] = currprefs.jports[port].amiberry_custom_right_trigger; // grab the 'right trigger' options for the current map + // currently disabled + // thismap[2] = currprefs.jports[port].amiberry_custom_left_trigger; // grab the 'left trigger' options for the current map + // thismap[3] = currprefs.jports[port].amiberry_custom_right_trigger; // grab the 'right trigger' options for the current map - // Now assign the actual buttons VALUES (TRUE/FALSE) to trigger the EVENTS + // Now assign the actual buttons VALUES (TRUE/FALSE) to trigger the EVENTS auto function_offset = 0; diff --git a/src/osdep/gui/PanelCustom.cpp b/src/osdep/gui/PanelCustom.cpp index d1d43173..e6313dd4 100644 --- a/src/osdep/gui/PanelCustom.cpp +++ b/src/osdep/gui/PanelCustom.cpp @@ -160,50 +160,32 @@ public: void action(const gcn::ActionEvent& actionEvent) override { if (actionEvent.getSource() == optPort0) - { SelectedPort = 0; - } else if (actionEvent.getSource() == optPort1) - { SelectedPort = 1; - } else if (actionEvent.getSource() == optPort2) - { SelectedPort = 2; - } else if (actionEvent.getSource() == optPort3) - { SelectedPort = 3; - } else if (actionEvent.getSource() == optMultiNone) - { SelectedFunction = 0; - } else if (actionEvent.getSource() == optMultiSelect) - { SelectedFunction = 1; - } else if (actionEvent.getSource() == optMultiLeft) - { SelectedFunction = 2; - } else if (actionEvent.getSource() == optMultiRight) - { SelectedFunction = 3; - } - - else if (actionEvent.getSource() == chkAnalogRemap) - changed_prefs.input_analog_remap = chkAnalogRemap->isSelected(); - + else if (actionEvent.getSource() == chkAnalogRemap) + changed_prefs.input_analog_remap = chkAnalogRemap->isSelected(); + RefreshPanelCustom(); } }; static GroupActionListener* grpActionListener; - class CustomActionListener : public gcn::ActionListener { public: @@ -330,7 +312,6 @@ public: break; } - // and here, we will scroll through the custom-map and // push it into the currprefs config file @@ -394,7 +375,7 @@ void InitPanelCustom(const struct _ConfigCategory& category) chkAnalogRemap = new gcn::UaeCheckBox("Remap DPad to left axis"); chkAnalogRemap->setId("chkAnalogRemap"); chkAnalogRemap->addActionListener(grpActionListener); - chkAnalogRemap->setEnabled(true); + chkAnalogRemap->setEnabled(true); grpPort = new gcn::Window("Joystick Port"); grpPort->setPosition(DISTANCE_BORDER, DISTANCE_BORDER); @@ -506,15 +487,14 @@ void ExitPanelCustom() delete optMultiLeft; delete optMultiRight; delete grpFunction; - delete chkAnalogRemap; + delete chkAnalogRemap; for (auto & i : lblCustomAction) { delete i; - // delete cboCustomAction[i]; + //delete cboCustomAction[i]; } - delete lblPortInput; delete txtPortInput; delete lblRetroarch; From 9d6bba23760481235c443b1f974aae4d7e1f8a5e Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Sat, 9 Feb 2019 01:41:02 +0100 Subject: [PATCH 17/18] Implemented support for Pause Emulation function (mapped through custom controls) - fixes #414 --- src/custom.cpp | 164 ++++++++++++++++++------------ src/devices.cpp | 31 ++++++ src/events.cpp | 208 +++++++++++++++++++------------------- src/include/devices.h | 8 +- src/include/drawing.h | 1 + src/include/inputdevice.h | 2 +- src/include/keybuf.h | 1 + src/include/newcpu.h | 1 + src/include/xwin.h | 4 +- src/inputdevice.cpp | 173 ++++++++++++++++++++++--------- src/keybuf.cpp | 7 ++ src/osdep/amiberry.cpp | 191 ++++++++++++++++++++++++---------- 12 files changed, 513 insertions(+), 278 deletions(-) diff --git a/src/custom.cpp b/src/custom.cpp index 7a38fd21..16c1897b 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -1736,7 +1736,7 @@ STATIC_INLINE void long_fetch_64(int plane, int nwords, int weird_number_of_bits bplpt[plane] += nwords * 2; } - if (real_pt == 0) + if (real_pt == nullptr) /* @@@ Don't do this, fall back on chipmem_wget instead. */ return; @@ -1745,20 +1745,18 @@ STATIC_INLINE void long_fetch_64(int plane, int nwords, int weird_number_of_bits aga_shift(shiftbuffer, delay); while (nwords > 0) { - int i; - shiftbuffer[0] |= fetchval; - for (i = 0; i < 4; i++) { + for (int i = 0; i < 4; i++) { uae_u32 t; - int bits_left = 32 - tmp_nbits; + const int bits_left = 32 - tmp_nbits; if (64 - shift > 0) { - t = (uae_u32)(shiftbuffer[1] << (64 - shift)); + t = uae_u32(shiftbuffer[1] << (64 - shift)); t |= shiftbuffer[0] >> shift; } else { - t = (uae_u32)(shiftbuffer[1] >> (shift - 64)); + t = uae_u32(shiftbuffer[1] >> (shift - 64)); } t &= 0xffff; @@ -1803,10 +1801,10 @@ STATIC_INLINE void long_fetch_64(int plane, int nwords, int weird_number_of_bits v1 |= v1 << 16; v2 &= 0x0000ffff; v2 |= v2 << 16; - fetchval = (((uae_u64)v1) << 32) | v2; + fetchval = (uae_u64(v1) << 32) | v2; } else { - fetchval = ((uae_u64)do_get_mem_long(real_pt1)) << 32; + fetchval = uae_u64(do_get_mem_long(real_pt1)) << 32; fetchval |= do_get_mem_long(real_pt2); } real_pt += 2; @@ -2979,8 +2977,7 @@ static void decide_sprites(int spnr, int hpos, bool quick) int nrs[MAX_SPRITES * 2], posns[MAX_SPRITES * 2]; int count, i; int point; - int width = sprite_width; - int sscanmask = 0x100 << sprite_buffer_res; + int sscanmask = 0x100 << sprite_buffer_res; int startnr = 0, endnr = MAX_SPRITES - 1; if (thisline_decision.plfleft < 0 && !(bplcon3 & 2)) @@ -3969,6 +3966,22 @@ STATIC_INLINE void copper_stop(void) case COP_read2: copper_enabled_thisline = -1; break; + case COP_stop: break; + case COP_waitforever: break; + case COP_read1: break; + case COP_bltwait: break; + case COP_wait_in2: break; + case COP_skip_in2: break; + case COP_wait1: break; + case COP_wait: break; + case COP_skip1: break; + case COP_strobe_delay1: break; + case COP_strobe_delay2: break; + case COP_strobe_delay1x: break; + case COP_strobe_delay2x: break; + case COP_strobe_extra: break; + case COP_start_delay: break; + default: ; } } if (copper_enabled_thisline >= 0) { @@ -3977,72 +3990,89 @@ STATIC_INLINE void copper_stop(void) } } -static void DMACON (int hpos, uae_u16 v) +static void DMACON(int hpos, uae_u16 v) { int oldcop, newcop; - uae_u16 changed; - + uae_u16 changed; + uae_u16 oldcon = dmacon; - - decide_line (hpos); - decide_fetch_safe (hpos); - - setclr (&dmacon, v); + + decide_line(hpos); + decide_fetch_safe(hpos); + + setclr(&dmacon, v); dmacon &= 0x07FF; - - changed = dmacon ^ oldcon; - oldcop = (oldcon & DMA_COPPER) && (oldcon & DMA_MASTER); - newcop = (dmacon & DMA_COPPER) && (dmacon & DMA_MASTER); - if (oldcop != newcop) { - eventtab[ev_copper].active = 0; + changed = dmacon ^ oldcon; + oldcop = (oldcon & DMA_COPPER) && (oldcon & DMA_MASTER); + newcop = (dmacon & DMA_COPPER) && (dmacon & DMA_MASTER); - if (newcop && !oldcop) { - compute_spcflag_copper (hpos); - } else if (!newcop) { + if (oldcop != newcop) + { + eventtab[ev_copper].active = 0; + + if (newcop && !oldcop) + { + compute_spcflag_copper(hpos); + } + else if (!newcop) + { copper_stop(); - } + } } if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done) - set_special (SPCFLAG_BLTNASTY); + set_special(SPCFLAG_BLTNASTY); - if (dmaen (DMA_BLITTER) && bltstate == BLT_init) { - blitter_check_start (); + if (dmaen(DMA_BLITTER) && bltstate == BLT_init) + { + blitter_check_start(); } if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) - unset_special (SPCFLAG_BLTNASTY); - - if (changed & (DMA_MASTER | 0x0f)) - audio_state_machine (); + unset_special(SPCFLAG_BLTNASTY); - if (changed & (DMA_MASTER | DMA_BITPLANE)) { - SET_LINE_CYCLEBASED; + if (changed & (DMA_MASTER | 0x0f)) + audio_state_machine(); + + if (changed & (DMA_MASTER | DMA_BITPLANE)) + { + SET_LINE_CYCLEBASED; bitplane_maybe_start_hpos = hpos; - } + } events_schedule(); } -int intlev (void) +static int irq_nmi; + +void NMI_delayed(void) { - uae_u16 imask = intreq & intena; - if (!(imask && (intena & 0x4000))) - return -1; - if (imask & (0x4000 | 0x2000)) // 13 14 - return 6; - if (imask & (0x1000 | 0x0800)) // 11 12 - return 5; - if (imask & (0x0400 | 0x0200 | 0x0100 | 0x0080)) // 7 8 9 10 - return 4; - if (imask & (0x0040 | 0x0020 | 0x0010)) // 4 5 6 - return 3; - if (imask & 0x0008) // 3 - return 2; - if (imask & (0x0001 | 0x0002 | 0x0004)) // 0 1 2 - return 1; - return -1; + irq_nmi = 1; +} + +int intlev(void) +{ + uae_u16 imask = intreq & intena; + if (irq_nmi) { + irq_nmi = 0; + return 7; + } + if (!(imask && (intena & 0x4000))) + return -1; + if (imask & (0x4000 | 0x2000)) // 13 14 + return 6; + if (imask & (0x1000 | 0x0800)) // 11 12 + return 5; + if (imask & (0x0400 | 0x0200 | 0x0100 | 0x0080)) // 7 8 9 10 + return 4; + if (imask & (0x0040 | 0x0020 | 0x0010)) // 4 5 6 + return 3; + if (imask & 0x0008) // 3 + return 2; + if (imask & (0x0001 | 0x0002 | 0x0004)) // 0 1 2 + return 1; + return -1; } void rethink_uae_int(void) @@ -5515,7 +5545,6 @@ STATIC_INLINE void do_sprites_1(int num, int cycle, int hpos) uae_u16 data; // fetch both sprite pairs even if DMA was switched off between sprites int isdma = dmaen (DMA_SPRITE) || ((num & 1) && spr[num & ~1].dmacycle); - bool unaligned = (spr[num].pt & 2) != 0; if (isdma && s->dblscan && (fmode & 0x8000) && (vpos & 1) != (s->vstart & 1) && s->dmastate) { spr_arm (num, 1); @@ -6001,7 +6030,21 @@ static void vsync_handler_pre(void) if (!nodraw() || picasso_on) fpscounter(frameok); - handle_events(); + bool waspaused = false; + while (handle_events()) { + if (!waspaused) { + render_screen(true); + show_screen(0); + waspaused = true; + } + // we are paused, do all config checks but don't do any emulation + if (vsync_handle_check()) { + redraw_frame(); + render_screen(true); + show_screen(0); + } + config_check_vsync(); + } if (quit_program > 0) { /* prevent possible infinite loop at wait_cycles().. */ @@ -6105,7 +6148,6 @@ static void dmal_emu (uae_u32 v) // Disk and Audio DMA bits are ignored by Agnus, Agnus only checks DMAL and master bit if (!(dmacon & DMA_MASTER)) return; - int hpos = current_hpos (); if (v >= 6) { v -= 6; int nr = v / 2; @@ -6196,8 +6238,6 @@ static void set_hpos (void) // this finishes current line static void hsync_handler_pre(bool onvsync) { - int hpos = current_hpos(); - if (!nocustom()) { /* Using 0x8A makes sure that we don't accidentally trip over the modified_regtypes check. */ @@ -6300,7 +6340,7 @@ static void hsync_handler_post(bool onvsync) } } - inputdevice_hsync(); + inputdevice_hsync(false); if (!nocustom()) { if (bltstate != BLT_done && dmaen(DMA_BITPLANE) && diwstate == DIW_waiting_stop) { diff --git a/src/devices.cpp b/src/devices.cpp index c687dfe6..89cf23ac 100644 --- a/src/devices.cpp +++ b/src/devices.cpp @@ -91,6 +91,11 @@ void devices_rethink(void) rethink_uae_int(); } +void devices_update_sound(double clk, double syncadjust) +{ + update_sound(clk); +} + void devices_update_sync(double svpos, double syncadjust) { cd32_fmv_set_sync(svpos, syncadjust); @@ -194,3 +199,29 @@ void devices_restore_start(void) changed_prefs.mbresmem_low_size = 0; changed_prefs.mbresmem_high_size = 0; } + +void devices_pause(void) +{ +#ifdef WITH_PPC + uae_ppc_pause(1); +#endif + blkdev_entergui(); +#ifdef RETROPLATFORM + rp_pause(1); +#endif + //pausevideograb(1); + //ethernet_pause(1); +} + +void devices_unpause(void) +{ + blkdev_exitgui(); +#ifdef RETROPLATFORM + rp_pause(0); +#endif +#ifdef WITH_PPC + uae_ppc_pause(0); +#endif + //pausevideograb(0); + //ethernet_pause(0); +} \ No newline at end of file diff --git a/src/events.cpp b/src/events.cpp index cf154b7f..ab6058a5 100644 --- a/src/events.cpp +++ b/src/events.cpp @@ -7,8 +7,6 @@ * Copyright 1995 Alessandro Bissacco * Copyright 2000-2012 Toni Wilen */ -#include - #include "sysdeps.h" #include "options.h" @@ -21,75 +19,70 @@ int is_syncline; frame_time_t vsyncmintime, vsyncmaxtime, vsyncwaittime; int vsynctimebase; -void events_schedule (void) +void events_schedule(void) { - int i; - - unsigned long int mintime = ~0L; - for (i = 0; i < ev_max; i++) { - if (eventtab[i].active) { - unsigned long int eventtime = eventtab[i].evtime - currcycle; - if (eventtime < mintime) - mintime = eventtime; - } - } - nextevent = currcycle + mintime; + unsigned long int mintime = ~0L; + for (auto& i : eventtab) + { + if (i.active) + { + auto eventtime = i.evtime - currcycle; + if (eventtime < mintime) + mintime = eventtime; + } + } + nextevent = currcycle + mintime; } -void do_cycles_cpu_fastest (unsigned long cycles_to_add) +void do_cycles_cpu_fastest(unsigned long cycles_to_add) { - if ((regs.pissoff -= cycles_to_add) > 0) - return; + if ((regs.pissoff -= cycles_to_add) > 0) + return; - cycles_to_add = -regs.pissoff; - regs.pissoff = 0; + cycles_to_add = -regs.pissoff; + regs.pissoff = 0; /* Keep only CPU emulation running while waiting for sync point. */ - if (is_syncline) { - int rpt = read_processor_time (); - int v = rpt - vsyncmintime; - if (v > vsynctimebase || v < -vsynctimebase) { - v = 0; - } - if (v < speedup_timelimit) { - regs.pissoff = pissoff_value; - return; - } - is_syncline = 0; - } + if (is_syncline) + { + int rpt = read_processor_time(); + int v = rpt - vsyncmintime; + if (v > vsynctimebase || v < -vsynctimebase) + v = 0; + if (v < speedup_timelimit) + { + regs.pissoff = pissoff_value; + return; + } + is_syncline = 0; + } - while ((nextevent - currcycle) <= cycles_to_add) { - int i; + while ((nextevent - currcycle) <= cycles_to_add) + { + cycles_to_add -= (nextevent - currcycle); + currcycle = nextevent; - cycles_to_add -= (nextevent - currcycle); - currcycle = nextevent; - - for (i = 0; i < ev_max; i++) { - if (eventtab[i].active && eventtab[i].evtime == currcycle) { - (*eventtab[i].handler)(); - } - } - events_schedule(); - } - currcycle += cycles_to_add; + for (auto& i : eventtab) + if (i.active && i.evtime == currcycle) + (*i.handler)(); + events_schedule(); + } + currcycle += cycles_to_add; } -void do_cycles_cpu_norm (unsigned long cycles_to_add) +void do_cycles_cpu_norm(unsigned long cycles_to_add) { - while ((nextevent - currcycle) <= cycles_to_add) { - int i; + while ((nextevent - currcycle) <= cycles_to_add) + { + cycles_to_add -= (nextevent - currcycle); + currcycle = nextevent; - cycles_to_add -= (nextevent - currcycle); - currcycle = nextevent; - - for (i = 0; i < ev_max; i++) { - if (eventtab[i].active && eventtab[i].evtime == currcycle) { - (*eventtab[i].handler)(); - } - } - events_schedule(); - } - currcycle += cycles_to_add; + for (auto& i : eventtab) + if (i.active && i.evtime == currcycle) + (*i.handler)(); + events_schedule(); + } + currcycle += cycles_to_add; } do_cycles_func do_cycles = do_cycles_cpu_norm; @@ -98,66 +91,74 @@ void MISC_handler(void) { static bool dorecheck; bool recheck; - int i; - evt mintime; - evt ct = get_cycles(); - static int recursive; + evt mintime = 0; + evt ct = get_cycles(); + static int recursive; - if (recursive) { + if (recursive) + { dorecheck = true; - return; + return; } - recursive++; - eventtab[ev_misc].active = 0; + recursive++; + eventtab[ev_misc].active = 0; recheck = true; - while (recheck) { + while (recheck) + { recheck = false; - mintime = ~0L; - for (i = 0; i < ev2_max; i++) { - if (eventtab2[i].active) { - if (eventtab2[i].evtime == ct) { - eventtab2[i].active = false; - eventtab2[i].handler(eventtab2[i].data); - if (dorecheck || eventtab2[i].active) { + mintime = ~0L; + for (auto& i : eventtab2) + { + if (i.active) + { + if (i.evtime == ct) + { + i.active = false; + i.handler(i.data); + if (dorecheck || i.active) + { recheck = true; dorecheck = false; - } - } else { - evt eventtime = eventtab2[i].evtime - ct; - if (eventtime < mintime) - mintime = eventtime; - } - } - } + } + } + else + { + evt eventtime = i.evtime - ct; + if (eventtime < mintime) + mintime = eventtime; + } + } + } } - if (mintime != ~0UL) { + if (mintime != ~0UL) + { eventtab[ev_misc].active = true; - eventtab[ev_misc].evtime = ct + mintime; - events_schedule(); - } - recursive--; + eventtab[ev_misc].evtime = ct + mintime; + events_schedule(); + } + recursive--; } - -void event2_newevent_xx (int no, evt t, uae_u32 data, evfunc2 func) +void event2_newevent_xx(int no, evt t, uae_u32 data, evfunc2 func) { - evt et; static int next = ev2_misc; - et = t + get_cycles (); - if (no < 0) { + evt et = t + get_cycles(); + if (no < 0) + { no = next; - for (;;) { - if (!eventtab2[no].active) { + for (;;) + { + if (!eventtab2[no].active) break; - } if (eventtab2[no].evtime == et && eventtab2[no].handler == func && eventtab2[no].data == data) break; no++; if (no == ev2_max) no = ev2_misc; - if (no == next) { - write_log (_T("out of event2's!\n")); + if (no == next) + { + write_log(_T("out of event2's!\n")); return; } } @@ -167,17 +168,18 @@ void event2_newevent_xx (int no, evt t, uae_u32 data, evfunc2 func) eventtab2[no].evtime = et; eventtab2[no].handler = func; eventtab2[no].data = data; - MISC_handler (); + MISC_handler(); } void event2_newevent_x_replace(evt t, uae_u32 data, evfunc2 func) { - for (int i = 0; i < ev2_max; i++) { - if (eventtab2[i].active && eventtab2[i].handler == func) { - eventtab2[i].active = false; - } + for (auto& i : eventtab2) + { + if (i.active && i.handler == func) + i.active = false; } - if (((int)t) <= 0) { + if (int(t) <= 0) + { func(data); return; } diff --git a/src/include/devices.h b/src/include/devices.h index 1b6852b3..6dc067f8 100644 --- a/src/include/devices.h +++ b/src/include/devices.h @@ -5,16 +5,14 @@ void devices_reset(int hardreset); void devices_vsync_pre(void); void devices_hsync(void); void devices_rethink(void); -STATIC_INLINE void devices_update_sound(double clk, double syncadjust) -{ - update_sound (clk); -} - +void devices_update_sound(double clk, double syncadjust); void devices_update_sync(double svpos, double syncadjust); void reset_all_systems(void); void do_leave_program(void); void virtualdevice_init(void); void devices_restore_start(void); void device_check_config(void); +void devices_pause(void); +void devices_unpause(void); #endif /* UAE_DEVICES_H */ diff --git a/src/include/drawing.h b/src/include/drawing.h index 9d184695..0f1ccba1 100644 --- a/src/include/drawing.h +++ b/src/include/drawing.h @@ -295,6 +295,7 @@ extern void init_hardware_for_drawing_frame (void); extern void reset_drawing (void); extern void drawing_init (void); extern bool notice_interlace_seen (bool); +extern void redraw_frame(void); extern void putpixel(uae_u8* buf, uae_u8* genlockbuf, int bpp, int x, xcolnr c8, int opaq); extern void check_prefs_picasso(void); diff --git a/src/include/inputdevice.h b/src/include/inputdevice.h index 6728fa56..e13eafee 100644 --- a/src/include/inputdevice.h +++ b/src/include/inputdevice.h @@ -262,7 +262,7 @@ extern void JOYSET (int num, uae_u16 v); extern uae_u16 JOYGET (int num); extern void inputdevice_vsync (void); -extern void inputdevice_hsync (void); +extern void inputdevice_hsync (bool forceread); extern void inputdevice_reset (void); extern void write_inputdevice_config (struct uae_prefs *p, struct zfile *f); diff --git a/src/include/keybuf.h b/src/include/keybuf.h index 1924b3ce..90d6aab8 100644 --- a/src/include/keybuf.h +++ b/src/include/keybuf.h @@ -13,6 +13,7 @@ extern int get_next_key (void); extern int keys_available (void); extern int record_key (int); +extern int record_key_direct(int); extern void keybuf_init (void); #endif /* UAE_KEYBUF_H */ diff --git a/src/include/newcpu.h b/src/include/newcpu.h index bf9a84cf..5d60e93a 100644 --- a/src/include/newcpu.h +++ b/src/include/newcpu.h @@ -312,6 +312,7 @@ extern void REGPARAM3 MakeFromSR_T0(void) REGPARAM; extern void REGPARAM3 Exception (int) REGPARAM; extern void REGPARAM3 Exception_cpu(int) REGPARAM; extern void NMI (void); +extern void NMI_delayed(void); extern void doint (void); extern void dump_counts (void); extern int m68k_move2c (int, uae_u32 *); diff --git a/src/include/xwin.h b/src/include/xwin.h index 21ade14e..0b71ce4b 100644 --- a/src/include/xwin.h +++ b/src/include/xwin.h @@ -22,9 +22,7 @@ extern uae_u32 p96_rgbx16[65536]; extern int graphics_setup (void); extern int graphics_init (bool); extern void graphics_leave (void); -STATIC_INLINE void handle_events (void) -{ -} +extern bool handle_events(void); extern int handle_msgpump (void); extern bool vsync_switchmode (int); diff --git a/src/inputdevice.cpp b/src/inputdevice.cpp index 9ad4e579..7c05539f 100644 --- a/src/inputdevice.cpp +++ b/src/inputdevice.cpp @@ -1980,16 +1980,30 @@ static void joymousecounter (int joy) } } -static int inputdelay; +static int inputread; static void inputdevice_read (void) { - do { - handle_msgpump (); - idev[IDTYPE_MOUSE].read (); - idev[IDTYPE_JOYSTICK].read (); - idev[IDTYPE_KEYBOARD].read (); - } while (handle_msgpump ()); + for (;;) + { + int got = handle_msgpump(); + if (!got) + break; + } + if (inputread <= 0) + { + idev[IDTYPE_MOUSE].read(); + idev[IDTYPE_JOYSTICK].read(); + idev[IDTYPE_KEYBOARD].read(); + } +} + +static void maybe_read_input(void) +{ + if (inputread >= 0 && (vpos - inputread) <= maxvpos_display / 3) + return; + inputread = vpos; + inputdevice_read(); } static uae_u16 getjoystate (int joy) @@ -2409,7 +2423,7 @@ static void inject_events (const TCHAR *str) } } -void inputdevice_hsync (void) +void inputdevice_hsync(bool forceread) { static int cnt; cap_check (); @@ -2430,12 +2444,14 @@ void inputdevice_hsync (void) } } - if ((++cnt & 63) == 63 ) { - inputdevice_read (); - } else if (inputdelay > 0) { - inputdelay--; - if (inputdelay == 0) - inputdevice_read (); + if (forceread) + { + inputread = maxvpos + 1; + inputdevice_read(); + } + else + { + maybe_read_input(); } } @@ -2613,6 +2629,9 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) { int newstate, onoffstate; + if (s != NULL && s[0] == 0) + s = NULL; + if (code == 0) goto end; @@ -2635,6 +2654,7 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) { case AKS_ENTERGUI: gui_display(-1); + setsystime(); break; //case AKS_SCREENSHOT_FILE: // if (state > 1) { @@ -2657,6 +2677,7 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) } else { gui_display(0); + setsystime(); } break; case AKS_FLOPPY1: @@ -2667,6 +2688,7 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) } else { gui_display(1); + setsystime(); } break; case AKS_FLOPPY2: @@ -2677,6 +2699,7 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) } else { gui_display(2); + setsystime(); } break; case AKS_FLOPPY3: @@ -2687,6 +2710,7 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) } else { gui_display(3); + setsystime(); } break; case AKS_EFLOPPY0: @@ -2701,6 +2725,9 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) case AKS_EFLOPPY3: disk_eject(3); break; + case AKS_IRQ7: + NMI_delayed(); + break; case AKS_PAUSE: pausemode(newstate > 0 ? 1 : newstate); break; @@ -2709,12 +2736,30 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) pausemode(0); autopause = 1; break; + //case AKS_WARP: + // warpmode(newstate); + // break; + //case AKS_INHIBITSCREEN: + // toggle_inhibit_frame(monid, IHF_SCROLLLOCK); + // break; case AKS_VOLDOWN: sound_volume(newstate <= 0 ? -1 : 1); break; case AKS_VOLUP: sound_volume(newstate <= 0 ? 1 : -1); break; + //case AKS_VOLMUTE: + // sound_mute(newstate); + // break; + //case AKS_MVOLDOWN: + // master_sound_volume(newstate <= 0 ? -1 : 1); + // break; + //case AKS_MVOLUP: + // master_sound_volume(newstate <= 0 ? 1 : -1); + // break; + //case AKS_MVOLMUTE: + // master_sound_volume(0); + // break; case AKS_QUIT: uae_quit(); break; @@ -2727,6 +2772,24 @@ static bool inputdevice_handle_inputcode2(int code, int state, const TCHAR *s) case AKS_TOGGLEWINDOWEDFULLSCREEN: toggle_fullscreen(); break; + case AKS_DECREASEREFRESHRATE: + case AKS_INCREASEREFRESHRATE: + { + struct chipset_refresh *cr = get_chipset_refresh(); + if (cr) { + int dir = code == AKS_INCREASEREFRESHRATE ? 5 : -5; + if (cr->rate == 0) + cr->rate = currprefs.ntscmode ? 60 : 50; + cr->locked = true; + cr->rate += dir; + if (cr->rate < 10) + cr->rate = 10; + if (cr->rate > 900) + cr->rate = 900; + set_config_changed(); + } + } + break; case AKS_MOUSEMAP_PORT0_LEFT: (changed_prefs.jports[0].mousemap) ^= 1 << 0; inputdevice_updateconfig(&changed_prefs, &currprefs); @@ -2780,6 +2843,15 @@ void inputdevice_handle_inputcode(void) int state = i.state; const TCHAR *s = i.s; if (code) { +#ifdef AMIBERRY + if (pause_emulation && state == 0) + { + got = false; + xfree(i.s); + i.code = 0; + continue; + } +#endif if (!inputdevice_handle_inputcode2(code, state, s)) { xfree(i.s); i.code = 0; @@ -2811,7 +2883,7 @@ static int handle_input_event(int nr, int state, int max, int autofire) { const struct inputevent *ie; int joy; - bool isaks = false; + bool isaks; if (nr <= 0 || nr == INPUTEVENT_SPC_CUSTOM_EVENT) return 0; @@ -3090,9 +3162,7 @@ void inputdevice_vsync (void) input_frame++; mouseupdate (0, true); - - inputdevice_read (); - inputdelay = uaerand () % (maxvpos <= 1 ? 1 : maxvpos - 1); + inputread = -1; inputdevice_handle_inputcode (); if (mousehack_alive_cnt > 0) { @@ -3106,11 +3176,11 @@ void inputdevice_vsync (void) inputdevice_checkconfig (); } -void inputdevice_reset (void) +void inputdevice_reset(void) { - mousehack_reset (); - if (inputdevice_is_tablet ()) - mousehack_enable (); + mousehack_reset(); + if (inputdevice_is_tablet()) + mousehack_enable(); } static int getoldport (struct uae_input_device *id) @@ -3445,38 +3515,41 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev if (button >= ID_BUTTON_TOTAL) return; - if (doit) { - getqualmask (qualmask, id, ID_BUTTON_OFFSET + button, &qualonly); + if (doit) + { + getqualmask(qualmask, id, ID_BUTTON_OFFSET + button, &qualonly); - for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { - int sub = sublevdir[buttonstate == 0 ? 1 : 0][i]; - uae_u64 *flagsp = &id->flags[ID_BUTTON_OFFSET + button][sub]; - int evt = id->eventid[ID_BUTTON_OFFSET + button][sub]; - uae_u64 flags = flagsp[0]; - int autofire = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0; - int toggle = (flags & ID_FLAG_TOGGLE) ? 1 : 0; - int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0; - int invert = (flags & ID_FLAG_INVERT) ? 1 : 0; - int setmode = (flags & ID_FLAG_SET_ONOFF) ? 1: 0; - int setval = (flags & ID_FLAG_SET_ONOFF_VAL) ? SET_ONOFF_ON_VALUE : SET_ONOFF_OFF_VALUE; - int state; + for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) + { + int sub = sublevdir[buttonstate == 0 ? 1 : 0][i]; + uae_u64 *flagsp = &id->flags[ID_BUTTON_OFFSET + button][sub]; + int evt = id->eventid[ID_BUTTON_OFFSET + button][sub]; + uae_u64 flags = flagsp[0]; + int autofire = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0; + int toggle = (flags & ID_FLAG_TOGGLE) ? 1 : 0; + int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0; + int invert = (flags & ID_FLAG_INVERT) ? 1 : 0; + int setmode = (flags & ID_FLAG_SET_ONOFF) ? 1 : 0; + int setval = (flags & ID_FLAG_SET_ONOFF_VAL) ? SET_ONOFF_ON_VALUE : SET_ONOFF_OFF_VALUE; + int state; - if (buttonstate < 0) { - state = buttonstate; - } else if (invert) { - state = buttonstate ? 0 : 1; - } else { - state = buttonstate; - } - if (setmode) { - if (state) - state = setval; - } + if (buttonstate < 0) + state = buttonstate; + else if (invert) + state = buttonstate ? 0 : 1; + else + state = buttonstate; - setqualifiers (evt, state > 0); + if (setmode) + { + if (state || setval == SET_ONOFF_PRESS_VALUE || setval == SET_ONOFF_PRESSREL_VALUE) + state = setval | (buttonstate ? 1 : 0); + } - if (qualonly) - continue; + setqualifiers(evt, state > 0); + + if (qualonly) + continue; #ifndef INPUTDEVICE_SIMPLE if (state < 0) { diff --git a/src/keybuf.cpp b/src/keybuf.cpp index 09d4811a..610cd298 100644 --- a/src/keybuf.cpp +++ b/src/keybuf.cpp @@ -254,6 +254,13 @@ int get_next_key(void) } int record_key(int kc) +{ + if (pause_emulation) + return 0; + return record_key_direct(kc); +} + +int record_key_direct(int kc) { int kpb_next = kpb_first + 1; diff --git a/src/osdep/amiberry.cpp b/src/osdep/amiberry.cpp index 2b74ccbf..e6fa2b44 100644 --- a/src/osdep/amiberry.cpp +++ b/src/osdep/amiberry.cpp @@ -33,6 +33,9 @@ #include "rtgmodes.h" #include "gfxboard.h" #include "amiberry_gfx.h" +#include "gui.h" +#include "sounddep/sound.h" +#include "devices.h" #ifdef USE_SDL2 #include #endif @@ -47,6 +50,56 @@ bool read_config_descriptions = true; bool write_logfile = false; bool scanlines_by_default = false; +// Default Enter GUI key is F12 +int enter_gui_key = SDLK_F12; +// We don't set a default value for Quitting +int quit_key = 0; +// The default value for Action Replay is Pause/Break +int action_replay_button = SDLK_PAUSE; +// No default value for Full Screen toggle +int fullscreen_key = 0; + +void set_key_configs(struct uae_prefs *p) +{ + if (strncmp(p->open_gui, "", 1) != 0) + { + // If we have a value in the config, we use that instead +#ifdef USE_SDL1 + enter_gui_key = GetKeyFromName(p->open_gui); +#elif USE_SDL2 + enter_gui_key = SDL_GetKeyFromName(p->open_gui); +#endif + } + + if (strncmp(p->quit_amiberry, "", 1) != 0) + { + // If we have a value in the config, we use that instead +#ifdef USE_SDL1 + quit_key = GetKeyFromName(p->quit_amiberry); +#elif USE_SDL2 + quit_key = SDL_GetKeyFromName(p->quit_amiberry); +#endif + } + + if (strncmp(p->action_replay, "", 1) != 0) + { +#ifdef USE_SDL1 + action_replay_button = GetKeyFromName(p->action_replay); +#elif USE_SDL2 + action_replay_button = SDL_GetKeyFromName(p->action_replay); +#endif + } + + if (strncmp(p->fullscreen_toggle, "", 1) != 0) + { +#ifdef USE_SDL1 + fullscreen_key = GetKeyFromName(p->fullscreen_toggle); +#elif USE_SDL2 + fullscreen_key = SDL_GetKeyFromName(p->fullscreen_toggle); +#endif + } +} + // Justifications for the numbers set here // Frametime is 20000 cycles in PAL // 16667 cycles in NTSC @@ -126,6 +179,51 @@ int sleep_millis_main(int ms) return 0; } +static int pausemouseactive; +void resumesoundpaused(void) +{ + resume_sound(); +#ifdef AHI + ahi_open_sound(); + ahi2_pause_sound(0); +#endif +} +void setsoundpaused(void) +{ + pause_sound(); +#ifdef AHI + ahi_close_sound(); + ahi2_pause_sound(1); +#endif +} +bool resumepaused(int priority) +{ + //write_log (_T("resume %d (%d)\n"), priority, pause_emulation); + if (pause_emulation > priority) + return false; + if (!pause_emulation) + return false; + devices_unpause(); + resumesoundpaused(); + if (pausemouseactive) { + pausemouseactive = 0; + } + pause_emulation = 0; + setsystime(); + return true; +} +bool setpaused(int priority) +{ + //write_log (_T("pause %d (%d)\n"), priority, pause_emulation); + if (pause_emulation > priority) + return false; + pause_emulation = priority; + devices_pause(); + setsoundpaused(); + pausemouseactive = 1; + return true; +} + void logging_init(void) { if (write_logfile) @@ -266,10 +364,11 @@ void target_fixup_options(struct uae_prefs* p) else p->fpu_no_unimplemented = true; - if (!p->cachesize > 0) + if (p->cachesize <= 0) p->compfpu = false; fix_apmodes(p); + set_key_configs(p); } void target_default_options(struct uae_prefs* p, int type) @@ -537,7 +636,6 @@ void set_retroarchfile(char* newpath) strncpy(retroarch_file, newpath, MAX_DPATH); } - void fetch_rompath(char* out, int size) { fixtrailing(rom_path); @@ -549,7 +647,6 @@ void set_rompath(char *newpath) strncpy(rom_path, newpath, MAX_DPATH); } - void fetch_rp9path(char *out, int size) { fixtrailing(rp9_path); @@ -578,7 +675,7 @@ int target_cfgfile_load(struct uae_prefs* p, const char* filename, int type, int default_prefs(p, true, 0); const char* ptr = strstr(const_cast(filename), ".rp9"); - if (ptr > nullptr) + if (ptr) { // Load rp9 config result = rp9_parse_file(p, filename); @@ -588,7 +685,7 @@ int target_cfgfile_load(struct uae_prefs* p, const char* filename, int type, int else { ptr = strstr(const_cast(filename), ".uae"); - if (ptr > nullptr) + if (ptr) { auto config_type = CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST; result = cfgfile_load(p, filename, &config_type, 0, 1); @@ -630,10 +727,10 @@ int check_configfile(char *file) strncpy(tmp, file, MAX_DPATH); const auto ptr = strstr(tmp, ".uae"); - if (ptr > nullptr) + if (ptr) { *(ptr + 1) = '\0'; - strncat(tmp, "conf", MAX_DPATH); + strncat(tmp, "conf", MAX_DPATH - 1); f = fopen(tmp, "rte"); if (f) { @@ -1095,53 +1192,6 @@ int handle_msgpump() auto got = 0; SDL_Event rEvent; - // Default Enter GUI key is F12 - int enter_gui_key = SDLK_F12; - if (strncmp(currprefs.open_gui, "", 1) != 0) - { - // If we have a value in the config, we use that instead - // SDL2-only for now -#ifdef USE_SDL1 - enter_gui_key = GetKeyFromName(currprefs.open_gui); -#elif USE_SDL2 - enter_gui_key = SDL_GetKeyFromName(currprefs.open_gui); -#endif - } - - // We don't set a default value for Quitting - int quit_key = 0; - if (strncmp(currprefs.quit_amiberry, "", 1) != 0) - { - // If we have a value in the config, we use that instead -#ifdef USE_SDL1 - quit_key = GetKeyFromName(currprefs.quit_amiberry); -#elif USE_SDL2 - quit_key = SDL_GetKeyFromName(currprefs.quit_amiberry); -#endif - } - - // The default value for Action Replay is Pause/Break - int action_replay_button = SDLK_PAUSE; - if (strncmp(currprefs.action_replay, "", 1) != 0) - { -#ifdef USE_SDL1 - action_replay_button = GetKeyFromName(currprefs.action_replay); -#elif USE_SDL2 - action_replay_button = SDL_GetKeyFromName(currprefs.action_replay); -#endif - } - - // No default value for Full Screen toggle - int fullscreen_key = 0; - if (strncmp(currprefs.fullscreen_toggle, "", 1) != 0) - { -#ifdef USE_SDL1 - fullscreen_key = GetKeyFromName(currprefs.fullscreen_toggle); -#elif USE_SDL2 - fullscreen_key = SDL_GetKeyFromName(currprefs.fullscreen_toggle); -#endif - } - while (SDL_PollEvent(&rEvent)) { got = 1; @@ -1336,6 +1386,39 @@ int handle_msgpump() return got; } +bool handle_events() +{ + static int was_paused = 0; + + if (pause_emulation) + { + if (was_paused == 0) + { + setpaused(pause_emulation); + was_paused = pause_emulation; + gui_fps(0, 0, 0); + gui_led(LED_SND, 0, -1); + // we got just paused, report it to caller. + return true; + } + SDL_Event event; + SDL_WaitEvent(&event); + + inputdevicefunc_keyboard.read(); + inputdevicefunc_mouse.read(); + inputdevicefunc_joystick.read(); + inputdevice_handle_inputcode(); + } + if (was_paused && (!pause_emulation || quit_program)) { + //updatedisplayarea(); + pause_emulation = was_paused; + resumepaused(was_paused); + was_paused = 0; + } + + return pause_emulation != 0; +} + static uaecptr clipboard_data; void amiga_clipboard_die() From 56cc2fc354c2f664084f9ef7a0c58fc6c3daaa71 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Sat, 9 Feb 2019 12:08:52 +0100 Subject: [PATCH 18/18] Moved GetKeyFromName higher up so that SDL1 build can find it #414 --- src/osdep/amiberry.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/osdep/amiberry.cpp b/src/osdep/amiberry.cpp index e6fa2b44..5fe58ce1 100644 --- a/src/osdep/amiberry.cpp +++ b/src/osdep/amiberry.cpp @@ -59,6 +59,27 @@ int action_replay_button = SDLK_PAUSE; // No default value for Full Screen toggle int fullscreen_key = 0; +#ifdef USE_SDL1 +SDLKey GetKeyFromName(const char *name) +{ + if (!name || !*name) { + return SDLK_UNKNOWN; + } + + for (int key = SDLK_FIRST; key < SDLK_LAST; key++) + { + if (!SDL_GetKeyName(SDLKey(key))) + continue; + if (SDL_strcasecmp(name, SDL_GetKeyName(SDLKey(key))) == 0) + { + return SDLKey(key); + } + } + + return SDLK_UNKNOWN; +} +#endif + void set_key_configs(struct uae_prefs *p) { if (strncmp(p->open_gui, "", 1) != 0) @@ -1166,27 +1187,6 @@ int main(int argc, char* argv[]) return 0; } -#ifdef USE_SDL1 -SDLKey GetKeyFromName(const char *name) -{ - if (!name || !*name) { - return SDLK_UNKNOWN; - } - - for (int key = SDLK_FIRST; key < SDLK_LAST; key++) - { - if (!SDL_GetKeyName(SDLKey(key))) - continue; - if (SDL_strcasecmp(name, SDL_GetKeyName(SDLKey(key))) == 0) - { - return SDLKey(key); - } - } - - return SDLK_UNKNOWN; -} -#endif - int handle_msgpump() { auto got = 0;