From 90b65715ae93b10f5e6a7d2b093716ecfc7e3cbe Mon Sep 17 00:00:00 2001 From: MSharq Date: Fri, 28 Sep 2018 16:14:14 +0200 Subject: [PATCH 01/54] added VDE functionality --- BasiliskII/src/Unix/configure.ac | 2 + BasiliskII/src/Unix/ether_unix.cpp | 75 ++++++++++++++++++++++++++++-- BasiliskII/src/Unix/main_unix.cpp | 16 ++++++- BasiliskII/src/include/main.h | 3 ++ 4 files changed, 91 insertions(+), 5 deletions(-) diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index 962199ad..6e6ab0c7 100644 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -323,6 +323,8 @@ else SDL_SUPPORT="none" fi +LIBS="$CFLAGS -lvdeplug" + dnl We need X11, if not using SDL or Mac GUI. if [[ "x$WANT_SDL_VIDEO" = "xno" -a "x$WANT_MACOSX_GUI" = "xno" ]]; then AC_PATH_XTRA diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index a9ca33ce..a701688a 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -20,6 +20,9 @@ #include "sysdeps.h" +extern "C" { +#include +} /* * NOTES concerning MacOS X issues: * - poll() does not exist in 10.2.8, but is available in 10.4.4 @@ -93,7 +96,8 @@ enum { NET_IF_SHEEPNET, NET_IF_ETHERTAP, NET_IF_TUNTAP, - NET_IF_SLIRP + NET_IF_SLIRP, + NET_IF_VDE }; // Constants @@ -115,6 +119,7 @@ static pthread_t slirp_thread; // Slirp reception thread static bool slirp_thread_active = false; // Flag: Slirp reception threadinstalled static int slirp_output_fd = -1; // fd of slirp output pipe static int slirp_input_fds[2] = { -1, -1 }; // fds of slirp input pipe +VDECONN *vde_conn; #ifdef SHEEPSHAVER static bool net_open = false; // Flag: initialization succeeded, network device open static uint8 ether_addr[6]; // Our Ethernet address @@ -250,6 +255,10 @@ bool ether_init(void) else if (strcmp(name, "slirp") == 0) net_if_type = NET_IF_SLIRP; #endif + else if (strcmp(name, "vde") == 0){ + printf("selected Ethernet device type VDE\n"); + net_if_type = NET_IF_VDE; + } else net_if_type = NET_IF_SHEEPNET; @@ -301,7 +310,33 @@ bool ether_init(void) strcpy(dev_name, "/dev/sheep_net"); break; } - if (net_if_type != NET_IF_SLIRP) { + + //vde switch information + int port = 0; + char *init_group = NULL; + mode_t mode = 0700; + + struct vde_open_args args = { + .port = port, + .group = init_group, + .mode = mode, + }; + + if (net_if_type == NET_IF_VDE) { + /* calling vde open to open the vde connection to the vde switch */ + vde_conn = vde_open(vde_sock, (char *)"macemu", &args); + + if (!vde_conn) { + D(bug("VDE open failed\n")); + return -1; + } else { + /* for select/poll when this fd receive data, there are + * packets to recv(call vde_recv) */ + fd = vde_datafd(vde_conn); + } + } + + if (net_if_type != NET_IF_SLIRP && net_if_type != NET_IF_VDE) { fd = open(dev_name, O_RDWR); if (fd < 0) { sprintf(str, GetString(STR_NO_SHEEP_NET_DRIVER_WARN), dev_name, strerror(errno)); @@ -388,6 +423,13 @@ bool ether_init(void) ether_addr[4] = 0x34; ether_addr[5] = 0x56; #endif + } else if (net_if_type == NET_IF_VDE) { + ether_addr[0] = 0x52; + ether_addr[1] = 0x54; + ether_addr[2] = 0x00; + ether_addr[3] = 0x12; + ether_addr[4] = 0x34; + ether_addr[5] = 0x56; } else ioctl(fd, SIOCGIFADDR, ether_addr); D(bug("Ethernet address %02x %02x %02x %02x %02x %02x\n", ether_addr[0], ether_addr[1], ether_addr[2], ether_addr[3], ether_addr[4], ether_addr[5])); @@ -453,6 +495,9 @@ void ether_exit(void) if (slirp_output_fd > 0) close(slirp_output_fd); + // Close vde_connection + if (net_if_type == NET_IF_VDE) + vde_close(vde_conn); #if STATISTICS // Show statistics printf("%ld messages put on write queue\n", num_wput); @@ -749,9 +794,27 @@ static int16 ether_do_write(uint32 arg) write(slirp_input_fd, &len, sizeof(len)); write(slirp_input_fd, packet, len); return noErr; - } else + } #endif - if (write(fd, packet, len) < 0) { + if (net_if_type == NET_IF_VDE) { + if (fd == -1) { // which means vde service is not running + D(bug("WARNING: Couldn't transmit VDE packet\n")); + return excessCollsns; + } + + if (vde_conn == NULL) + { + D(bug("WARNING: vde_conn is NULL\n")); + return -1; + } + + do { + len = vde_send(vde_conn,packet,sizeof(packet),0); + } while (len < 0); + + return noErr; + } + else if (write(fd, packet, len) < 0) { D(bug("WARNING: Couldn't transmit packet\n")); return excessCollsns; } else @@ -925,6 +988,9 @@ void ether_do_interrupt(void) } else #endif { + if (net_if_type == NET_IF_VDE) { + length = vde_recv(vde_conn, Mac2HostAddr(packet), 1514, 0); + } else { // Read packet from sheep_net device #if defined(__linux__) @@ -932,6 +998,7 @@ void ether_do_interrupt(void) #else length = read(fd, Mac2HostAddr(packet), 1514); #endif + } if (length < 14) break; diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp index c4f975a3..57507fd7 100644 --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -207,6 +207,8 @@ static void sigill_handler(int sig, int code, struct sigcontext *scp); extern "C" void EmulOpTrampoline(void); #endif +// vde switch variable +char* vde_sock; /* * Ersatz functions @@ -374,7 +376,8 @@ static void usage(const char *prg_name) " --display STRING\n X display to use\n" " --break ADDRESS\n set ROM breakpoint in hexadecimal\n" " --loadbreak FILE\n load breakpoint from FILE\n" - " --rominfo\n dump ROM information\n", prg_name + " --rominfo\n dump ROM information\n" + " --switch SWITCH_PATH\n vde switch address\n", prg_name ); LoadPrefs(NULL); // read the prefs file so PrefsPrintUsage() will print the correct default values PrefsPrintUsage(); @@ -436,6 +439,17 @@ int main(int argc, char **argv) } else if (strcmp(argv[i], "--rominfo") == 0) { argv[i] = NULL; PrintROMInfo = true; + } else if (strcmp(argv[i], "--switch") == 0) { + argv[i] = NULL; + if (argv[++i] == NULL) { + printf("switch address not defined\n"); + usage(argv[0]); + } + int vde_str_len = strlen(argv[i]); + vde_sock = (char*)malloc(vde_str_len); + memset(vde_sock,NULL,vde_str_len); + strncpy(vde_sock,argv[i],vde_str_len); + argv[i] = NULL; //don't know why it works } } diff --git a/BasiliskII/src/include/main.h b/BasiliskII/src/include/main.h index 1ba7b6ac..cfe9730f 100644 --- a/BasiliskII/src/include/main.h +++ b/BasiliskII/src/include/main.h @@ -74,6 +74,9 @@ extern uint32 InterruptFlags; // Currently pending interrupts extern void SetInterruptFlag(uint32 flag); // Set/clear interrupt flags extern void ClearInterruptFlag(uint32 flag); +// vde switch variable +extern char* vde_sock; + // Array length #if __cplusplus >= 201103L || (_MSC_VER >= 1900 && defined __cplusplus) template From f7023246d9f630385c9b4cf374dfdf441459cc7c Mon Sep 17 00:00:00 2001 From: asvitkine Date: Sat, 20 Oct 2018 09:49:42 +0200 Subject: [PATCH 02/54] Update BasiliskII/src/Unix/ether_unix.cpp Co-Authored-By: MSharq --- BasiliskII/src/Unix/ether_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index a701688a..b598b27c 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -255,7 +255,7 @@ bool ether_init(void) else if (strcmp(name, "slirp") == 0) net_if_type = NET_IF_SLIRP; #endif - else if (strcmp(name, "vde") == 0){ + else if (strcmp(name, "vde") == 0) { printf("selected Ethernet device type VDE\n"); net_if_type = NET_IF_VDE; } From 5f04c95b79df23276ea8d9eb34725205d4487bd7 Mon Sep 17 00:00:00 2001 From: asvitkine Date: Sat, 20 Oct 2018 09:59:57 +0200 Subject: [PATCH 03/54] adding static to VDECONN Co-Authored-By: MSharq --- BasiliskII/src/Unix/ether_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index b598b27c..393e52c3 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -119,7 +119,7 @@ static pthread_t slirp_thread; // Slirp reception thread static bool slirp_thread_active = false; // Flag: Slirp reception threadinstalled static int slirp_output_fd = -1; // fd of slirp output pipe static int slirp_input_fds[2] = { -1, -1 }; // fds of slirp input pipe -VDECONN *vde_conn; +static VDECONN *vde_conn; #ifdef SHEEPSHAVER static bool net_open = false; // Flag: initialization succeeded, network device open static uint8 ether_addr[6]; // Our Ethernet address From e4332cc72aca835a438976088a5b77ae4126dd74 Mon Sep 17 00:00:00 2001 From: MSharq Date: Sat, 20 Oct 2018 11:18:08 +0200 Subject: [PATCH 04/54] added the printf statement for all Ethernet devices --- BasiliskII/src/Unix/ether_unix.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index a701688a..21cffd3a 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -119,7 +119,7 @@ static pthread_t slirp_thread; // Slirp reception thread static bool slirp_thread_active = false; // Flag: Slirp reception threadinstalled static int slirp_output_fd = -1; // fd of slirp output pipe static int slirp_input_fds[2] = { -1, -1 }; // fds of slirp input pipe -VDECONN *vde_conn; +static VDECONN *vde_conn; #ifdef SHEEPSHAVER static bool net_open = false; // Flag: initialization succeeded, network device open static uint8 ether_addr[6]; // Our Ethernet address @@ -245,22 +245,30 @@ bool ether_init(void) // Determine Ethernet device type net_if_type = -1; - if (strncmp(name, "tap", 3) == 0) + if (strncmp(name, "tap", 3) == 0) { net_if_type = NET_IF_ETHERTAP; + printf("selected Ethernet device type tap\n"); + } #if ENABLE_TUNTAP - else if (strcmp(name, "tun") == 0) + else if (strcmp(name, "tun") == 0) { net_if_type = NET_IF_TUNTAP; + printf("selected Ethernet device type tun\n"); + } #endif #ifdef HAVE_SLIRP - else if (strcmp(name, "slirp") == 0) + else if (strcmp(name, "slirp") == 0) { net_if_type = NET_IF_SLIRP; -#endif - else if (strcmp(name, "vde") == 0){ - printf("selected Ethernet device type VDE\n"); - net_if_type = NET_IF_VDE; + printf("selected Ethernet device type slirp\n"); } - else +#endif + else if (strcmp(name, "vde") == 0) { + net_if_type = NET_IF_VDE; + printf("selected Ethernet device type VDE\n"); + } + else { net_if_type = NET_IF_SHEEPNET; + printf("selected Ethernet device type sheep_net\n"); + } // Don't raise SIGPIPE, let errno be set to EPIPE struct sigaction sigpipe_sa; From 50c98de60f2768b7bdd4ebd55c66d26062ea3067 Mon Sep 17 00:00:00 2001 From: MSharq Date: Sat, 20 Oct 2018 15:07:38 +0200 Subject: [PATCH 05/54] a few indentation fixes --- BasiliskII/src/Unix/ether_unix.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index 21cffd3a..58095b6b 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -810,14 +810,13 @@ static int16 ether_do_write(uint32 arg) return excessCollsns; } - if (vde_conn == NULL) - { + if (vde_conn == NULL) { D(bug("WARNING: vde_conn is NULL\n")); return -1; } do { - len = vde_send(vde_conn,packet,sizeof(packet),0); + len = vde_send(vde_conn, packet, sizeof(packet), 0); } while (len < 0); return noErr; From 30fdd103a22278c641ee73a9e8e11e486c25fb14 Mon Sep 17 00:00:00 2001 From: MSharq Date: Sat, 20 Oct 2018 15:11:40 +0200 Subject: [PATCH 06/54] changed vde switch to vde_switch in the usage function --- BasiliskII/src/Unix/main_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp index 57507fd7..5806b506 100644 --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -377,7 +377,7 @@ static void usage(const char *prg_name) " --break ADDRESS\n set ROM breakpoint in hexadecimal\n" " --loadbreak FILE\n load breakpoint from FILE\n" " --rominfo\n dump ROM information\n" - " --switch SWITCH_PATH\n vde switch address\n", prg_name + " --switch SWITCH_PATH\n vde_switch address\n", prg_name ); LoadPrefs(NULL); // read the prefs file so PrefsPrintUsage() will print the correct default values PrefsPrintUsage(); From 0c622863cf680eca886f774df9d746be2a1bf126 Mon Sep 17 00:00:00 2001 From: MSharq Date: Tue, 23 Oct 2018 15:37:09 +0200 Subject: [PATCH 07/54] fixed a bug --- BasiliskII/src/Unix/ether_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index 58095b6b..b9fbe121 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -802,7 +802,7 @@ static int16 ether_do_write(uint32 arg) write(slirp_input_fd, &len, sizeof(len)); write(slirp_input_fd, packet, len); return noErr; - } + } else #endif if (net_if_type == NET_IF_VDE) { if (fd == -1) { // which means vde service is not running From ddf1bcf0944ae1e84e9402c46478de3fecafe2d4 Mon Sep 17 00:00:00 2001 From: Christian Bauer Date: Sat, 27 Oct 2018 22:48:58 +0200 Subject: [PATCH 08/54] Fix const-ness of main() parameters. --- cxmon/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cxmon/src/main.cpp b/cxmon/src/main.cpp index 3f40d8a6..0a82c73c 100644 --- a/cxmon/src/main.cpp +++ b/cxmon/src/main.cpp @@ -100,7 +100,7 @@ static bool open_stdio(const char *title) #endif // Main program -int main(int argc, char **argv) +int main(int argc, const char **argv) { #ifdef __BEOS__ // Launched from Tracker? Then open terminal window From 76c5a97efec9ed66fe44e2766e3675a0ddb70f90 Mon Sep 17 00:00:00 2001 From: Christian Bauer Date: Sun, 28 Oct 2018 13:28:06 +0100 Subject: [PATCH 09/54] Fix libreadline detection. --- cxmon/configure.ac | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cxmon/configure.ac b/cxmon/configure.ac index f93e6c85..a2e7abcb 100644 --- a/cxmon/configure.ac +++ b/cxmon/configure.ac @@ -31,7 +31,8 @@ dnl Checks for libraries. AC_SEARCH_LIBS([tgetent], [ncurses termcap termlib terminfo Hcurses curses], [], [ AC_MSG_ERROR([unable to find the tgetent() function]) ]) -AC_SEARCH_LIBS([readline], [readline], [], [ +AC_SEARCH_LIBS([readline], [readline], [ + AC_DEFINE([HAVE_LIBREADLINE], 1, [Define if you have the Readline library])], [ AC_MSG_ERROR([unable to find the readline() function]) ]) From cf406ec953f235bbb7ea5c78a6ff6e00505f78d5 Mon Sep 17 00:00:00 2001 From: MSharq Date: Sun, 28 Oct 2018 19:40:08 +0100 Subject: [PATCH 10/54] fixed indentation ether_unix --- BasiliskII/src/Unix/ether_unix.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index b9fbe121..c942d719 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -998,16 +998,15 @@ void ether_do_interrupt(void) if (net_if_type == NET_IF_VDE) { length = vde_recv(vde_conn, Mac2HostAddr(packet), 1514, 0); } else { - // Read packet from sheep_net device #if defined(__linux__) - length = read(fd, Mac2HostAddr(packet), net_if_type == NET_IF_ETHERTAP ? 1516 : 1514); + length = read(fd, Mac2HostAddr(packet), net_if_type == NET_IF_ETHERTAP ? 1516 : 1514); #else - length = read(fd, Mac2HostAddr(packet), 1514); + length = read(fd, Mac2HostAddr(packet), 1514); #endif + if (length < 14) + break; } - if (length < 14) - break; #if MONITOR bug("Receiving Ethernet packet:\n"); From 2bc581d4f678e58a99608cc62e65b817471af054 Mon Sep 17 00:00:00 2001 From: MSharq Date: Sun, 28 Oct 2018 19:42:04 +0100 Subject: [PATCH 11/54] fixed indentation ether_unix --- BasiliskII/src/Unix/ether_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index c942d719..ec71ebc7 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -998,7 +998,7 @@ void ether_do_interrupt(void) if (net_if_type == NET_IF_VDE) { length = vde_recv(vde_conn, Mac2HostAddr(packet), 1514, 0); } else { - // Read packet from sheep_net device + // Read packet from sheep_net device #if defined(__linux__) length = read(fd, Mac2HostAddr(packet), net_if_type == NET_IF_ETHERTAP ? 1516 : 1514); #else From 242e8af3a7c96895af52f5da83870dce4d4a4201 Mon Sep 17 00:00:00 2001 From: MSharq Date: Mon, 29 Oct 2018 15:44:53 +0100 Subject: [PATCH 12/54] fixed a bug --- BasiliskII/src/Unix/ether_unix.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index ec71ebc7..aff82e4e 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -1004,9 +1004,10 @@ void ether_do_interrupt(void) #else length = read(fd, Mac2HostAddr(packet), 1514); #endif - if (length < 14) - break; } + + if (length < 14) + break; #if MONITOR bug("Receiving Ethernet packet:\n"); From e583d058687fd9d3a0b33329a0ddf6d94ac8494f Mon Sep 17 00:00:00 2001 From: MSharq Date: Mon, 29 Oct 2018 21:14:25 +0100 Subject: [PATCH 13/54] fixed vde_sock pointer --- BasiliskII/src/Unix/main_unix.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp index 5806b506..0a888ccd 100644 --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -445,11 +445,8 @@ int main(int argc, char **argv) printf("switch address not defined\n"); usage(argv[0]); } - int vde_str_len = strlen(argv[i]); - vde_sock = (char*)malloc(vde_str_len); - memset(vde_sock,NULL,vde_str_len); - strncpy(vde_sock,argv[i],vde_str_len); - argv[i] = NULL; //don't know why it works + vde_sock = argv[i]; + argv[i] = NULL; } } From 5d77f865753541193128140547cf66fbcaddcbe7 Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Wed, 31 Oct 2018 12:28:32 +0000 Subject: [PATCH 14/54] Make vdeplug support optional. Linking with -lvdeplug without checking whether it exists causes failures from later configure tests; this makes it an optional dependency in the same way as other libraries. --- BasiliskII/src/Unix/configure.ac | 15 +++++++++++++-- BasiliskII/src/Unix/ether_unix.cpp | 30 ++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index 6e6ab0c7..2f233d7a 100644 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -88,6 +88,11 @@ AC_ARG_WITH(bincue, AC_ARG_WITH(libvhd, AS_HELP_STRING([--with-libvhd], [Enable VHD disk images])) +AC_ARG_WITH(vdeplug, + AS_HELP_STRING([--with-vdeplug], [Enable VDE virtual network support]), + [], + [with_vdeplug=yes]) + dnl Cross Compiling results in 'guesses' being made about the target system. These defaults are oftetimes incorrect. dnl The following Environment variables allow you to configure the default guess value for each option in the configure script. @@ -323,8 +328,6 @@ else SDL_SUPPORT="none" fi -LIBS="$CFLAGS -lvdeplug" - dnl We need X11, if not using SDL or Mac GUI. if [[ "x$WANT_SDL_VIDEO" = "xno" -a "x$WANT_MACOSX_GUI" = "xno" ]]; then AC_PATH_XTRA @@ -794,6 +797,13 @@ if [[ -n "$CAN_SLIRP" ]]; then fi AC_SUBST(SLIRP_SRCS) +dnl Is libvdeplug available? +have_vdeplug=no +AS_IF([test "x$with_vdeplug" = "xyes"], [ + have_vdeplug=yes + AC_CHECK_LIB(vdeplug, vde_close, [], [have_vdeplug=no]) +]) + if [[ "x$WANT_MACOSX_GUI" = "xyes" ]]; then CPPFLAGS="$CPPFLAGS -I../MacOSX" LIBS="$LIBS -framework CoreAudio -framework AudioUnit -framework AudioToolbox" @@ -1855,6 +1865,7 @@ echo Mac OS X Sound ......................... : $WANT_MACOSX_SOUND echo SDL support ............................ : $SDL_SUPPORT echo BINCUE support ......................... : $have_bincue echo LIBVHD support ......................... : $have_libvhd +echo VDE support ............................ : $have_vdeplug echo XFree86 DGA support .................... : $WANT_XF86_DGA echo XFree86 VidMode support ................ : $WANT_XF86_VIDMODE echo fbdev DGA support ...................... : $WANT_FBDEV_DGA diff --git a/BasiliskII/src/Unix/ether_unix.cpp b/BasiliskII/src/Unix/ether_unix.cpp index aff82e4e..87a9f2c5 100644 --- a/BasiliskII/src/Unix/ether_unix.cpp +++ b/BasiliskII/src/Unix/ether_unix.cpp @@ -20,9 +20,6 @@ #include "sysdeps.h" -extern "C" { -#include -} /* * NOTES concerning MacOS X issues: * - poll() does not exist in 10.2.8, but is available in 10.4.4 @@ -72,6 +69,12 @@ extern "C" { #include "ctl.h" #endif +#ifdef HAVE_LIBVDEPLUG +extern "C" { +#include +} +#endif + #include "cpu_emulation.h" #include "main.h" #include "macos_util.h" @@ -119,7 +122,9 @@ static pthread_t slirp_thread; // Slirp reception thread static bool slirp_thread_active = false; // Flag: Slirp reception threadinstalled static int slirp_output_fd = -1; // fd of slirp output pipe static int slirp_input_fds[2] = { -1, -1 }; // fds of slirp input pipe +#ifdef HAVE_LIBVDEPLUG static VDECONN *vde_conn; +#endif #ifdef SHEEPSHAVER static bool net_open = false; // Flag: initialization succeeded, network device open static uint8 ether_addr[6]; // Our Ethernet address @@ -261,10 +266,12 @@ bool ether_init(void) printf("selected Ethernet device type slirp\n"); } #endif +#ifdef HAVE_LIBVDEPLUG else if (strcmp(name, "vde") == 0) { net_if_type = NET_IF_VDE; printf("selected Ethernet device type VDE\n"); } +#endif else { net_if_type = NET_IF_SHEEPNET; printf("selected Ethernet device type sheep_net\n"); @@ -319,6 +326,7 @@ bool ether_init(void) break; } +#ifdef HAVE_LIBVDEPLUG //vde switch information int port = 0; char *init_group = NULL; @@ -343,6 +351,7 @@ bool ether_init(void) fd = vde_datafd(vde_conn); } } +#endif if (net_if_type != NET_IF_SLIRP && net_if_type != NET_IF_VDE) { fd = open(dev_name, O_RDWR); @@ -431,6 +440,7 @@ bool ether_init(void) ether_addr[4] = 0x34; ether_addr[5] = 0x56; #endif +#ifdef HAVE_LIBVDEPLUG } else if (net_if_type == NET_IF_VDE) { ether_addr[0] = 0x52; ether_addr[1] = 0x54; @@ -438,6 +448,7 @@ bool ether_init(void) ether_addr[3] = 0x12; ether_addr[4] = 0x34; ether_addr[5] = 0x56; +#endif } else ioctl(fd, SIOCGIFADDR, ether_addr); D(bug("Ethernet address %02x %02x %02x %02x %02x %02x\n", ether_addr[0], ether_addr[1], ether_addr[2], ether_addr[3], ether_addr[4], ether_addr[5])); @@ -503,9 +514,11 @@ void ether_exit(void) if (slirp_output_fd > 0) close(slirp_output_fd); +#ifdef HAVE_LIBVDEPLUG // Close vde_connection if (net_if_type == NET_IF_VDE) vde_close(vde_conn); +#endif #if STATISTICS // Show statistics printf("%ld messages put on write queue\n", num_wput); @@ -804,6 +817,7 @@ static int16 ether_do_write(uint32 arg) return noErr; } else #endif +#ifdef HAVE_LIBVDEPLUG if (net_if_type == NET_IF_VDE) { if (fd == -1) { // which means vde service is not running D(bug("WARNING: Couldn't transmit VDE packet\n")); @@ -820,8 +834,9 @@ static int16 ether_do_write(uint32 arg) } while (len < 0); return noErr; - } - else if (write(fd, packet, len) < 0) { + } else +#endif + if (write(fd, packet, len) < 0) { D(bug("WARNING: Couldn't transmit packet\n")); return excessCollsns; } else @@ -995,9 +1010,12 @@ void ether_do_interrupt(void) } else #endif { +#ifdef HAVE_LIBVDEPLUG if (net_if_type == NET_IF_VDE) { length = vde_recv(vde_conn, Mac2HostAddr(packet), 1514, 0); - } else { + } else +#endif + { // Read packet from sheep_net device #if defined(__linux__) length = read(fd, Mac2HostAddr(packet), net_if_type == NET_IF_ETHERTAP ? 1516 : 1514); From 668c2ba107e6fbc6dea81888a032016b1acafaac Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Wed, 31 Oct 2018 12:43:55 +0000 Subject: [PATCH 15/54] Remove obsolete sg.h workaround. This is no longer necessary as of glibc 2.2 (released in November 2000), and it causes breakage when /usr/include/linux is installed using a symlink-based system like stow. --- BasiliskII/src/Unix/Linux/scsi_linux.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/Unix/Linux/scsi_linux.cpp b/BasiliskII/src/Unix/Linux/scsi_linux.cpp index d6365277..b2cef011 100644 --- a/BasiliskII/src/Unix/Linux/scsi_linux.cpp +++ b/BasiliskII/src/Unix/Linux/scsi_linux.cpp @@ -22,7 +22,7 @@ #include #include -#include // workaround for broken RedHat 6.0 /usr/include/scsi +#include #include #include From 6267af03157fa2b48fea743e4e7347bbc4d48cf5 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Thu, 21 Mar 2019 15:13:53 +0100 Subject: [PATCH 16/54] sigsegv.cpp: Add addr32 decode With this fix I can compile with ./configure --enable-addressing=direct,0x100000 and then I don't need to change vm.mmap_min_addr and hence without root privileges --- BasiliskII/src/CrossPlatform/sigsegv.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/BasiliskII/src/CrossPlatform/sigsegv.cpp b/BasiliskII/src/CrossPlatform/sigsegv.cpp index f1322d1e..0286076f 100644 --- a/BasiliskII/src/CrossPlatform/sigsegv.cpp +++ b/BasiliskII/src/CrossPlatform/sigsegv.cpp @@ -1018,6 +1018,14 @@ static bool ix86_skip_instruction(SIGSEGV_REGISTER_TYPE * regs) transfer_size = SIZE_WORD; } +#if defined(__x86_64__) || defined(_M_X64) + // addr32 + if (*eip == 0x67) { + eip++; + len++; + } +#endif + // REX prefix #if defined(__x86_64__) || defined(_M_X64) struct rex_t { From 507508b66de370dfc50d5e6ad2245a8f58bca091 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 25 Jan 2020 01:05:52 -0500 Subject: [PATCH 17/54] configure: Enable /dev/ptmx for Linux, Darwin. Both of these systems have /dev/ptmx for creating pseudoterminals. OS X Leopard (10.5) added it in 2007, and Linux has had support for it since v2.1 (1998). This fixes a bug with pseudoterminal creation on Linux and macOS where a new pseudoterminal cannot be created because the wrong method is being used to find one. --- BasiliskII/src/Unix/configure.ac | 4 ---- 1 file changed, 4 deletions(-) diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index 2f233d7a..1ec6c7ea 100644 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -569,9 +569,6 @@ case "$host" in *-*-hpux10.26) disable_ptmx_check=yes ;; -*-*-linux*) - no_dev_ptmx=1 - ;; mips-sony-bsd|mips-sony-newsos4) AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).]) ;; @@ -585,7 +582,6 @@ mips-sony-bsd|mips-sony-newsos4) no_dev_ptmx=1 ;; *-*-darwin*) - no_dev_ptmx=1 LIBS="$LIBS -lstdc++" ;; *-*-freebsd*) From 00f02d9d0c47cda3ca42ef2efca29900087613c7 Mon Sep 17 00:00:00 2001 From: anabate123 <62159176+anabate123@users.noreply.github.com> Date: Sat, 14 Mar 2020 18:59:27 -0400 Subject: [PATCH 18/54] Added more Mac models to the ModelID string --- BasiliskII/src/user_strings.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/BasiliskII/src/user_strings.cpp b/BasiliskII/src/user_strings.cpp index 55a7fb87..2cb9a15e 100644 --- a/BasiliskII/src/user_strings.cpp +++ b/BasiliskII/src/user_strings.cpp @@ -203,7 +203,36 @@ user_string_def common_strings[] = { {STR_RAMSIZE_FMT, "%ld MB"}, {STR_MODELID_CTRL, "Mac Model ID"}, {STR_MODELID_5_LAB, "Mac IIci (MacOS 7.x)"}, + {STR_MODELID_7_LAB, "Mac IIfx (MacOS 7.x)"}, + {STR_MODELID_12_LAB, "Mac IIsi (MacOS 7.x"}, + {STR_MODELID_13_LAB, "Mac LC (MacOS 7.x"}, {STR_MODELID_14_LAB, "Quadra 900 (MacOS 8.x)"}, + {STR_MODELID_15_LAB, "PowerBook 170 (MacOS 7.x)"}, + {STR_MODELID_16_LAB, "Quadra 700 (MacOS 8.x)"}, + {STR_MODELID_19_LAB, "PowerBook 140 (MacOS 7.x)"}, + {STR_MODELID_20_LAB, "Quadra 950 (MacOS 8.x)"}, + {STR_MODELID_21_LAB, "Mac LC III-Performa 450 (MacOS 7.x)"}, + {STR_MODELID_24_LAB, "Centris 650 (MacOS 8.x)"}, + {STR_MODELID_29_LAB, "Quadra 800 (MacOS 8.x)"}, + {STR_MODELID_30_LAB, "Quadra 650 (MacOS 8.x)"}, + {STR_MODELID_31_LAB, "Mac LC II (MacOS 7.x)"}, + {STR_MODELID_38_LAB, "Mac IIvi (MacOS 7.x)"}, + {STR_MODELID_39_LAB, "Performa 600 (MacOS 7.x)"}, + {STR_MODELID_42_LAB, "Mac IIvx (MacOS 7.x)"}, + {STR_MODELID_43_LAB, "Color Classic (MacOS 7.x)"}, + {STR_MODELID_46_LAB, "Centris 610 (MacOS 8.x)"}, + {STR_MODELID_47_LAB, "Quadra 610 (MacOS 8.x)"}, + {STR_MODELID_50_LAB, "Mac LC 520 (MacOS 7.x)"}, + {STR_MODELID_54_LAB, "Centris-Quadra 660AV (MacOS 8.x)"}, + {STR_MODELID_56_LAB, "Performa 46x (MacOS 7.x)"}, + {STR_MODELID_72_LAB, "Quadra 840AV (MacOS 8.x)"}, + {STR_MODELID_74_LAB, "Mac LC-Performa 550 (MacOS 7.x)"}, + {STR_MODELID_82_LAB, "Mac TV (MacOS 7.x)"}, + {STR_MODELID_83_LAB, "Mac LC 475-Performa 47x (MacOS 8.x)"}, + {STR_MODELID_86_LAB, "Mac LC 575-Performa 57x (MacOS 8.x)"}, + {STR_MODELID_87_LAB, "Quadra 605 (MacOS 8.x)"}, + {STR_MODELID_92_LAB, "Mac LC-Performa-Quadra 630 (MacOS 8.x)"}, + {STR_MODELID_93_LAB, "Mac LC 580 (MacOS 8.x)"}, {STR_CPU_CTRL, "CPU Type"}, {STR_CPU_68020_LAB, "68020"}, {STR_CPU_68020_FPU_LAB, "68020 with FPU"}, @@ -212,7 +241,6 @@ user_string_def common_strings[] = { {STR_CPU_68040_LAB, "68040"}, {STR_ROM_FILE_CTRL, "ROM File"}, {STR_IDLEWAIT_CTRL, "Don't Use CPU When Idle"}, - {STR_JIT_PANE_TITLE, "JIT Compiler"}, {STR_JIT_CTRL, "Enable JIT Compiler"}, {STR_JIT_FPU_CTRL, "Compile FPU Instructions"}, From 767b97311b4c107e83965c9761bc83d4148af8ed Mon Sep 17 00:00:00 2001 From: bolt Date: Thu, 9 Apr 2020 14:50:07 +0200 Subject: [PATCH 19/54] Add the strings from commit 00f02d9d0c47cda3ca42ef2efca29900087613c7 to user_strings.h --- BasiliskII/src/include/user_strings.h | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/BasiliskII/src/include/user_strings.h b/BasiliskII/src/include/user_strings.h index 24a0b28a..9da57e2c 100644 --- a/BasiliskII/src/include/user_strings.h +++ b/BasiliskII/src/include/user_strings.h @@ -188,7 +188,36 @@ enum { STR_RAMSIZE_FMT, STR_MODELID_CTRL, STR_MODELID_5_LAB, + STR_MODELID_7_LAB, + STR_MODELID_12_LAB, + STR_MODELID_13_LAB, STR_MODELID_14_LAB, + STR_MODELID_15_LAB, + STR_MODELID_16_LAB, + STR_MODELID_19_LAB, + STR_MODELID_20_LAB, + STR_MODELID_21_LAB, + STR_MODELID_24_LAB, + STR_MODELID_29_LAB, + STR_MODELID_30_LAB, + STR_MODELID_31_LAB, + STR_MODELID_38_LAB, + STR_MODELID_39_LAB, + STR_MODELID_42_LAB, + STR_MODELID_43_LAB, + STR_MODELID_46_LAB, + STR_MODELID_47_LAB, + STR_MODELID_50_LAB, + STR_MODELID_54_LAB, + STR_MODELID_56_LAB, + STR_MODELID_72_LAB, + STR_MODELID_74_LAB, + STR_MODELID_82_LAB, + STR_MODELID_83_LAB, + STR_MODELID_86_LAB, + STR_MODELID_87_LAB, + STR_MODELID_92_LAB, + STR_MODELID_93_LAB, STR_CPU_CTRL, STR_CPU_68020_LAB, STR_CPU_68020_FPU_LAB, From c6e1af7ff418ec0fc8a1bc31eb25c855f0103674 Mon Sep 17 00:00:00 2001 From: bolt Date: Thu, 9 Apr 2020 15:07:29 +0200 Subject: [PATCH 20/54] Fix compile time warning on enum compare --- BasiliskII/src/SDL/video_sdl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index 011941f9..527f2795 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -1874,7 +1874,7 @@ static void update_display_static(driver_base *drv) // Check for first column from left and first column from right that have changed if (high) { - if (VIDEO_MODE_DEPTH < VIDEO_DEPTH_8BIT) { + if ((int)VIDEO_MODE_DEPTH < VIDEO_DEPTH_8BIT) { const int src_bytes_per_row = bytes_per_row; const int dst_bytes_per_row = drv->s->pitch; const int pixels_per_byte = VIDEO_MODE_X / src_bytes_per_row; From 5670c82b0da39386f68074f6d434353164d146b8 Mon Sep 17 00:00:00 2001 From: bolt Date: Thu, 9 Apr 2020 15:07:29 +0200 Subject: [PATCH 21/54] Fix compile time warning on enum compare --- BasiliskII/src/SDL/video_sdl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index 011941f9..527f2795 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -1874,7 +1874,7 @@ static void update_display_static(driver_base *drv) // Check for first column from left and first column from right that have changed if (high) { - if (VIDEO_MODE_DEPTH < VIDEO_DEPTH_8BIT) { + if ((int)VIDEO_MODE_DEPTH < VIDEO_DEPTH_8BIT) { const int src_bytes_per_row = bytes_per_row; const int dst_bytes_per_row = drv->s->pitch; const int pixels_per_byte = VIDEO_MODE_X / src_bytes_per_row; From 8a4b84b9d77710a9019221f6f24b629659c8c1fa Mon Sep 17 00:00:00 2001 From: Roland Illig Date: Tue, 5 May 2020 19:48:35 +0200 Subject: [PATCH 22/54] src/Unix/Darwin/testlmem.sh: make code shorter The old code used the `[[` shell keyword, which is only available in bash. The interpreter in line 1 is `/bin/sh` though. This confused my shell portability check in pkgsrc, since that check neither guesses the target platform from the filename, nor assumes that `/bin/sh` is actually bash, even though this may be true on macOS. The change makes the code shorter with the well-known `${var:-default}` pattern. Since `$1` is now only accessed when it is defined, this allows the program to have a `set -eu` at the top. This in turn would make all the `&&` redundant since it applies automatic error checking. The `{ ... } 1>&2` could also be replaced with a single `exec 1>&2` at the top. --- BasiliskII/src/Unix/Darwin/testlmem.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/BasiliskII/src/Unix/Darwin/testlmem.sh b/BasiliskII/src/Unix/Darwin/testlmem.sh index 3c07f437..4e08425f 100755 --- a/BasiliskII/src/Unix/Darwin/testlmem.sh +++ b/BasiliskII/src/Unix/Darwin/testlmem.sh @@ -20,8 +20,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -PAGEZERO_SIZE=0x2000 -[[ -n "$1" ]] && PAGEZERO_SIZE=$1 +PAGEZERO_SIZE=${1:-0x2000} # You want all the output to go to stderr so that configure is quiet but # config.log is verbose. { echo 'building lowmem utility' && \ From f13f25db3e952cd40b3c3aa90a24399408968e04 Mon Sep 17 00:00:00 2001 From: Antoine Viallon Date: Sat, 20 Jun 2020 19:19:49 +0200 Subject: [PATCH 23/54] Fix build fail under GCC 10 GCC fails to build because of -Wnarrowing --- SheepShaver/src/video.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SheepShaver/src/video.cpp b/SheepShaver/src/video.cpp index d0eda93d..60ef8c13 100644 --- a/SheepShaver/src/video.cpp +++ b/SheepShaver/src/video.cpp @@ -736,7 +736,7 @@ static int16 VideoStatus(uint32 pb, VidLocals *csSave) case cscGetNextResolution: { D(bug("GetNextResolution \n")); - int work_id = ReadMacInt32(param + csPreviousDisplayModeID); + unsigned int work_id = ReadMacInt32(param + csPreviousDisplayModeID); switch (work_id) { case kDisplayModeIDCurrent: work_id = csSave->saveData; From b0bdceac34a5b0cc2e199d944bc07024ac72e742 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Thu, 25 Jun 2020 09:43:20 -0400 Subject: [PATCH 24/54] Revert "Merge pull request #190 from fragglet/patch-1" This reverts commit a4a2c88ed7d13df0d16c3f8a737fc06f329b70cc, reversing changes made to 1918557e787da22766797f4354c1af13de06a09e. --- BasiliskII/src/Unix/configure.ac | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index 1ec6c7ea..2f233d7a 100644 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -569,6 +569,9 @@ case "$host" in *-*-hpux10.26) disable_ptmx_check=yes ;; +*-*-linux*) + no_dev_ptmx=1 + ;; mips-sony-bsd|mips-sony-newsos4) AC_DEFINE(HAVE_NEWS4, 1, [Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for sshpty.c).]) ;; @@ -582,6 +585,7 @@ mips-sony-bsd|mips-sony-newsos4) no_dev_ptmx=1 ;; *-*-darwin*) + no_dev_ptmx=1 LIBS="$LIBS -lstdc++" ;; *-*-freebsd*) From a46759990d33d7d1e2c7bac01459747d6180eb76 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Thu, 25 Jun 2020 15:18:16 -0400 Subject: [PATCH 25/54] Backport SDL2 features from https://github.com/kanjitalk755/macemu By default, without providing `with-sdl2` in configure it uses SDL1. Users need to explicitly request SDL2. Signed-off-by: Ricky Zhang --- BasiliskII/src/CrossPlatform/video_blit.cpp | 15 +- BasiliskII/src/CrossPlatform/video_vosf.h | 12 +- BasiliskII/src/SDL/audio_sdl.cpp | 16 +- BasiliskII/src/SDL/video_sdl.cpp | 17 +- BasiliskII/src/SDL/video_sdl2.cpp | 2723 +++++++++++++++++++ BasiliskII/src/Unix/configure.ac | 92 +- BasiliskII/src/Unix/main_unix.cpp | 37 + BasiliskII/src/include/user_strings.h | 5 + BasiliskII/src/user_strings.cpp | 11 + 9 files changed, 2895 insertions(+), 33 deletions(-) create mode 100644 BasiliskII/src/SDL/video_sdl2.cpp diff --git a/BasiliskII/src/CrossPlatform/video_blit.cpp b/BasiliskII/src/CrossPlatform/video_blit.cpp index 3ff27b27..5f1a0ae3 100644 --- a/BasiliskII/src/CrossPlatform/video_blit.cpp +++ b/BasiliskII/src/CrossPlatform/video_blit.cpp @@ -22,6 +22,10 @@ #include "video.h" #include "video_blit.h" +#if USE_SDL_VIDEO +#include +#endif + #include #include @@ -519,12 +523,21 @@ bool Screen_blitter_init(VisualFormat const & visual_format, bool native_byte_or #else const bool use_sdl_video = false; #endif -#if REAL_ADDRESSING || DIRECT_ADDRESSING +#if REAL_ADDRESSING || DIRECT_ADDRESSING || USE_SDL_VIDEO if (mac_depth == 1 && !use_sdl_video && !visual_format.fullscreen) { // Windowed 1-bit mode uses a 1-bit X image, so there's no need for special blitting routines Screen_blit = Blit_Copy_Raw; +#if __MACOSX__ && !defined(SHEEPSHAVER) + // dludwig@pobox.com, HACK: This works on OSX (64-bit, at least), but not Linux (32-bit?). Why? + // To note, __MACOSX__ is an SDL-declared macro (for platform identification at compile time). + } else if (mac_depth == 16) { + + Screen_blit = Blit_Copy_Raw; + +#endif + } else { // Compute RGB shift values diff --git a/BasiliskII/src/CrossPlatform/video_vosf.h b/BasiliskII/src/CrossPlatform/video_vosf.h index 4a5677e1..f99b44bf 100644 --- a/BasiliskII/src/CrossPlatform/video_vosf.h +++ b/BasiliskII/src/CrossPlatform/video_vosf.h @@ -30,6 +30,12 @@ #include "util_windows.h" #endif +// Import SDL-backend-specific functions +#ifdef USE_SDL_VIDEO +extern void update_sdl_video(SDL_Surface *screen, Sint32 x, Sint32 y, Sint32 w, Sint32 h); +extern void update_sdl_video(SDL_Surface *screen, int numrects, SDL_Rect *rects); +#endif + // Glue for SDL and X11 support #ifdef TEST_VOSF_PERFORMANCE #define MONITOR_INIT /* nothing */ @@ -514,7 +520,7 @@ static void update_display_window_vosf(VIDEO_DRV_WIN_INIT) VIDEO_DRV_UNLOCK_PIXELS; #ifdef USE_SDL_VIDEO - SDL_UpdateRect(drv->s, 0, y1, VIDEO_MODE_X, height); + update_sdl_video(drv->s, 0, y1, VIDEO_MODE_X, height); #else if (VIDEO_DRV_HAVE_SHM) XShmPutImage(x_display, VIDEO_DRV_WINDOW, VIDEO_DRV_GC, VIDEO_DRV_IMAGE, 0, y1, 0, y1, VIDEO_MODE_X, height, 0); @@ -558,7 +564,7 @@ static void update_display_dga_vosf(VIDEO_DRV_DGA_INIT) i2 += scr_bytes_per_row; } #ifdef USE_SDL_VIDEO - SDL_UpdateRect(drv->s, 0, 0, VIDEO_MODE_X, VIDEO_MODE_Y); + update_sdl_video(drv->s, 0, 0, VIDEO_MODE_X, VIDEO_MODE_Y); #endif VIDEO_DRV_UNLOCK_PIXELS; return; @@ -664,7 +670,7 @@ static void update_display_dga_vosf(VIDEO_DRV_DGA_INIT) #endif } #ifdef USE_SDL_VIDEO - SDL_UpdateRects(drv->s, bbi, bb); + update_sdl_video(drv->s, bbi, bb); #endif VIDEO_DRV_UNLOCK_PIXELS; } diff --git a/BasiliskII/src/SDL/audio_sdl.cpp b/BasiliskII/src/SDL/audio_sdl.cpp index 921beb4c..a7e949cf 100644 --- a/BasiliskII/src/SDL/audio_sdl.cpp +++ b/BasiliskII/src/SDL/audio_sdl.cpp @@ -87,6 +87,7 @@ static bool open_sdl_audio(void) } SDL_AudioSpec audio_spec; + memset(&audio_spec, 0, sizeof(audio_spec)); audio_spec.freq = audio_sample_rates[audio_sample_rate_index] >> 16; audio_spec.format = (audio_sample_sizes[audio_sample_size_index] == 8) ? AUDIO_U8 : AUDIO_S16MSB; audio_spec.channels = audio_channel_counts[audio_channel_count_index]; @@ -99,14 +100,27 @@ static bool open_sdl_audio(void) fprintf(stderr, "WARNING: Cannot open audio: %s\n", SDL_GetError()); return false; } + +#ifdef ENABLE_SDL2 + // HACK: workaround a bug in SDL pre-2.0.6 (reported via https://bugzilla.libsdl.org/show_bug.cgi?id=3710 ) + // whereby SDL does not update audio_spec.size + if (audio_spec.size == 0) { + audio_spec.size = (SDL_AUDIO_BITSIZE(audio_spec.format) / 8) * audio_spec.channels * audio_spec.samples; + } +#endif #if defined(BINCUE) OpenAudio_bincue(audio_spec.freq, audio_spec.format, audio_spec.channels, audio_spec.silence); #endif +#ifdef ENABLE_SDL2 + const char * driver_name = SDL_GetCurrentAudioDriver(); +#else char driver_name[32]; - printf("Using SDL/%s audio output\n", SDL_AudioDriverName(driver_name, sizeof(driver_name) - 1)); + SDL_AudioDriverName(driver_name, sizeof(driver_name) - 1); +#endif + printf("Using SDL/%s audio output\n", driver_name ? driver_name : ""); silence_byte = audio_spec.silence; SDL_PauseAudio(0); diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index 527f2795..037d3fab 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -1,5 +1,5 @@ /* - * video_sdl.cpp - Video/graphics emulation, SDL specific stuff + * video_sdl.cpp - Video/graphics emulation, SDL 1.x specific stuff * * Basilisk II (C) 1997-2008 Christian Bauer * @@ -39,9 +39,9 @@ * - Backport hw cursor acceleration to Basilisk II? * - Factor out code */ - #include "sysdeps.h" +#ifdef ENABLE_SDL1 #include #include #include @@ -455,7 +455,7 @@ static inline int sdl_display_height(void) return height; } -// Check wether specified mode is available +// Check whether specified mode is available static bool has_mode(int type, int width, int height, int depth) { #ifdef SHEEPSHAVER @@ -584,6 +584,16 @@ static void migrate_screen_prefs(void) #endif } +void update_sdl_video(SDL_Surface *screen, Sint32 x, Sint32 y, Sint32 w, Sint32 h) +{ + SDL_UpdateRect(screen, x, y, w, h); +} + +void update_sdl_video(SDL_Surface *screen, int numrects, SDL_Rect *rects) +{ + SDL_UpdateRects(screen, numrects, rects); +} + /* * Display "driver" classes @@ -2269,3 +2279,4 @@ void video_set_dirty_area(int x, int y, int w, int h) // XXX handle dirty bounding boxes for non-VOSF modes } #endif +#endif //end of ifdef ENABLE_SDL1 diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp new file mode 100644 index 00000000..6e497550 --- /dev/null +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -0,0 +1,2723 @@ +/* + * video_sdl2.cpp - Video/graphics emulation, SDL 2.x specific stuff + * + * Basilisk II (C) 1997-2008 Christian Bauer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * NOTES: + * The Ctrl key works like a qualifier for special actions: + * Ctrl-Tab = suspend DGA mode (TODO) + * Ctrl-Esc = emergency quit + * Ctrl-F1 = mount floppy + * Ctrl-F5 = grab mouse (in windowed mode) + * + * FIXMEs and TODOs: + * - Windows requires an extra mouse event to update the actual cursor image? + * - Ctr-Tab for suspend/resume but how? SDL does not support that for non-Linux + * - Ctrl-Fn doesn't generate SDL_KEYDOWN events (SDL bug?) + * - Mouse acceleration, there is no API in SDL yet for that + * - Gamma tables support is likely to be broken here + * - Events processing is bound to the general emulation thread as SDL requires + * to PumpEvents() within the same thread as the one that called SetVideoMode(). + * Besides, there can't seem to be a way to call SetVideoMode() from a child thread. + * - Backport hw cursor acceleration to Basilisk II? + * - Factor out code + */ +#include "sysdeps.h" + +#ifdef ENABLE_SDL2 +#include + +#include +#include +#include +#include +#include + +#ifdef WIN32 +#include /* alloca() */ +#endif + +#include +#include "main.h" +#include "adb.h" +#include "macos_util.h" +#include "prefs.h" +#include "user_strings.h" +#include "video.h" +#include "video_defs.h" +#include "video_blit.h" +#include "vm_alloc.h" + +#define DEBUG 0 +#include "debug.h" + +#define CODE_INVALID -1 +#define CODE_HOTKEY -2 + +// Supported video modes +using std::vector; +static vector VideoModes; + +// Display types +#ifdef SHEEPSHAVER +enum { + DISPLAY_WINDOW = DIS_WINDOW, // windowed display + DISPLAY_SCREEN = DIS_SCREEN // fullscreen display +}; +extern int display_type; // See enum above +#else +enum { + DISPLAY_WINDOW, // windowed display + DISPLAY_SCREEN // fullscreen display +}; +static int display_type = DISPLAY_WINDOW; // See enum above +#endif + +// Constants +#if defined(__MACOSX__) || defined(WIN32) +const char KEYCODE_FILE_NAME[] = "keycodes"; +const char KEYCODE_FILE_NAME2[] = "BasiliskII_keycodes"; +#else +const char KEYCODE_FILE_NAME[] = DATADIR "/keycodes"; +const char KEYCODE_FILE_NAME2[] = DATADIR "/BasiliskII_keycodes"; +#endif + + +// Global variables +static uint32 frame_skip; // Prefs items +static int16 mouse_wheel_mode; +static int16 mouse_wheel_lines; + +static uint8 *the_buffer = NULL; // Mac frame buffer (where MacOS draws into) +static uint8 *the_buffer_copy = NULL; // Copy of Mac frame buffer (for refreshed modes) +static uint32 the_buffer_size; // Size of allocated the_buffer + +static bool redraw_thread_active = false; // Flag: Redraw thread installed +#ifndef USE_CPU_EMUL_SERVICES +static volatile bool redraw_thread_cancel; // Flag: Cancel Redraw thread +static SDL_Thread *redraw_thread = NULL; // Redraw thread +static volatile bool thread_stop_req = false; +static volatile bool thread_stop_ack = false; // Acknowledge for thread_stop_req +#endif + +#ifdef ENABLE_VOSF +static bool use_vosf = false; // Flag: VOSF enabled +#else +static const bool use_vosf = false; // VOSF not possible +#endif + +static bool ctrl_down = false; // Flag: Ctrl key pressed +static bool opt_down = false; // Flag: Opt key pressed +static bool cmd_down = false; // Flag: Cmd key pressed +static bool quit_full_screen = false; // Flag: DGA close requested from redraw thread +static bool emerg_quit = false; // Flag: Ctrl-Esc pressed, emergency quit requested from MacOS thread +static bool emul_suspended = false; // Flag: Emulator suspended + +static bool classic_mode = false; // Flag: Classic Mac video mode + +static bool use_keycodes = false; // Flag: Use keycodes rather than keysyms +static int keycode_table[256]; // X keycode -> Mac keycode translation table + +// SDL variables +SDL_Window * sdl_window = NULL; // Wraps an OS-native window +static SDL_Surface * host_surface = NULL; // Surface in host-OS display format +static SDL_Surface * guest_surface = NULL; // Surface in guest-OS display format +static SDL_Renderer * sdl_renderer = NULL; // Handle to SDL2 renderer +static SDL_threadID sdl_renderer_thread_id = 0; // Thread ID where the SDL_renderer was created, and SDL_renderer ops should run (for compatibility w/ d3d9) +static SDL_Texture * sdl_texture = NULL; // Handle to a GPU texture, with which to draw guest_surface to +static SDL_Rect sdl_update_video_rect = {0,0,0,0}; // Union of all rects to update, when updating sdl_texture +static SDL_mutex * sdl_update_video_mutex = NULL; // Mutex to protect sdl_update_video_rect +static int screen_depth; // Depth of current screen +static SDL_Cursor *sdl_cursor = NULL; // Copy of Mac cursor +static SDL_Palette *sdl_palette = NULL; // Color palette to be used as CLUT and gamma table +static bool sdl_palette_changed = false; // Flag: Palette changed, redraw thread must set new colors +static bool toggle_fullscreen = false; +static bool did_add_event_watch = false; + +static bool mouse_grabbed = false; + +// Mutex to protect SDL events +static SDL_mutex *sdl_events_lock = NULL; +#define LOCK_EVENTS SDL_LockMutex(sdl_events_lock) +#define UNLOCK_EVENTS SDL_UnlockMutex(sdl_events_lock) + +// Mutex to protect palette +static SDL_mutex *sdl_palette_lock = NULL; +#define LOCK_PALETTE SDL_LockMutex(sdl_palette_lock) +#define UNLOCK_PALETTE SDL_UnlockMutex(sdl_palette_lock) + +// Mutex to protect frame buffer +static SDL_mutex *frame_buffer_lock = NULL; +#define LOCK_FRAME_BUFFER SDL_LockMutex(frame_buffer_lock) +#define UNLOCK_FRAME_BUFFER SDL_UnlockMutex(frame_buffer_lock) + +// Video refresh function +static void VideoRefreshInit(void); +static void (*video_refresh)(void); + + +// Prototypes +static int redraw_func(void *arg); +static int present_sdl_video(); +static int SDLCALL on_sdl_event_generated(void *userdata, SDL_Event * event); +static bool is_fullscreen(SDL_Window *); + +// From sys_unix.cpp +extern void SysMountFirstFloppy(void); + + +/* + * SDL surface locking glue + */ + +#ifdef ENABLE_VOSF +#define SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE) do { \ + if (sdl_window && SDL_GetWindowFlags(sdl_window) & (SDL_WINDOW_FULLSCREEN)) \ + the_host_buffer = (uint8 *)(SURFACE)->pixels; \ +} while (0) +#else +#define SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE) +#endif + +#define SDL_VIDEO_LOCK_SURFACE(SURFACE) do { \ + if (SDL_MUSTLOCK(SURFACE)) { \ + SDL_LockSurface(SURFACE); \ + SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE); \ + } \ +} while (0) + +#define SDL_VIDEO_UNLOCK_SURFACE(SURFACE) do { \ + if (SDL_MUSTLOCK(SURFACE)) \ + SDL_UnlockSurface(SURFACE); \ +} while (0) + + +/* + * Framebuffer allocation routines + */ + +static void *vm_acquire_framebuffer(uint32 size) +{ + // always try to reallocate framebuffer at the same address + static void *fb = VM_MAP_FAILED; + if (fb != VM_MAP_FAILED) { + if (vm_acquire_fixed(fb, size) < 0) { +#ifndef SHEEPSHAVER + printf("FATAL: Could not reallocate framebuffer at previous address\n"); +#endif + fb = VM_MAP_FAILED; + } + } + if (fb == VM_MAP_FAILED) + fb = vm_acquire(size, VM_MAP_DEFAULT | VM_MAP_32BIT); + return fb; +} + +static inline void vm_release_framebuffer(void *fb, uint32 size) +{ + vm_release(fb, size); +} + +static inline int get_customized_color_depth(int default_depth) +{ + int display_color_depth = PrefsFindInt32("displaycolordepth"); + + D(bug("Get displaycolordepth %d\n", display_color_depth)); + + if(0 == display_color_depth) + return default_depth; + else{ + switch (display_color_depth) { + case 8: + return VIDEO_DEPTH_8BIT; + case 15: case 16: + return VIDEO_DEPTH_16BIT; + case 24: case 32: + return VIDEO_DEPTH_32BIT; + default: + return default_depth; + } + } +} + +/* + * Windows message handler + */ + +#ifdef WIN32 +#include +static WNDPROC sdl_window_proc = NULL; // Window proc used by SDL + +extern void SysMediaArrived(void); +extern void SysMediaRemoved(void); +extern HWND GetMainWindowHandle(void); + +static LRESULT CALLBACK windows_message_handler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_DEVICECHANGE: + if (wParam == DBT_DEVICEREMOVECOMPLETE) { + DEV_BROADCAST_HDR *p = (DEV_BROADCAST_HDR *)lParam; + if (p->dbch_devicetype == DBT_DEVTYP_VOLUME) + SysMediaRemoved(); + } + else if (wParam == DBT_DEVICEARRIVAL) { + DEV_BROADCAST_HDR *p = (DEV_BROADCAST_HDR *)lParam; + if (p->dbch_devicetype == DBT_DEVTYP_VOLUME) + SysMediaArrived(); + } + return 0; + + default: + if (sdl_window_proc) + return CallWindowProc(sdl_window_proc, hwnd, msg, wParam, lParam); + } + + return DefWindowProc(hwnd, msg, wParam, lParam); +} +#endif + + +/* + * SheepShaver glue + */ + +#ifdef SHEEPSHAVER +// Color depth modes type +typedef int video_depth; + +// 1, 2, 4 and 8 bit depths use a color palette +static inline bool IsDirectMode(VIDEO_MODE const & mode) +{ + return IsDirectMode(mode.viAppleMode); +} + +// Abstract base class representing one (possibly virtual) monitor +// ("monitor" = rectangular display with a contiguous frame buffer) +class monitor_desc { +public: + monitor_desc(const vector &available_modes, video_depth default_depth, uint32 default_id) {} + virtual ~monitor_desc() {} + + // Get current Mac frame buffer base address + uint32 get_mac_frame_base(void) const {return screen_base;} + + // Set Mac frame buffer base address (called from switch_to_mode()) + void set_mac_frame_base(uint32 base) {screen_base = base;} + + // Get current video mode + const VIDEO_MODE &get_current_mode(void) const {return VModes[cur_mode];} + + // Called by the video driver to switch the video mode on this display + // (must call set_mac_frame_base()) + virtual void switch_to_current_mode(void) = 0; + + // Called by the video driver to set the color palette (in indexed modes) + // or the gamma table (in direct modes) + virtual void set_palette(uint8 *pal, int num) = 0; +}; + +// Vector of pointers to available monitor descriptions, filled by VideoInit() +static vector VideoMonitors; + +// Find Apple mode matching best specified dimensions +static int find_apple_resolution(int xsize, int ysize) +{ + if (xsize == 640 && ysize == 480) + return APPLE_640x480; + if (xsize == 800 && ysize == 600) + return APPLE_800x600; + if (xsize == 1024 && ysize == 768) + return APPLE_1024x768; + if (xsize == 1152 && ysize == 768) + return APPLE_1152x768; + if (xsize == 1152 && ysize == 900) + return APPLE_1152x900; + if (xsize == 1280 && ysize == 1024) + return APPLE_1280x1024; + if (xsize == 1600 && ysize == 1200) + return APPLE_1600x1200; + return APPLE_CUSTOM; +} + +// Display error alert +static void ErrorAlert(int error) +{ + ErrorAlert(GetString(error)); +} +#endif + + +/* + * monitor_desc subclass for SDL display + */ + +class SDL_monitor_desc : public monitor_desc { +public: + SDL_monitor_desc(const vector &available_modes, video_depth default_depth, uint32 default_id) : monitor_desc(available_modes, default_depth, default_id) {} + ~SDL_monitor_desc() {} + + virtual void switch_to_current_mode(void); + virtual void set_palette(uint8 *pal, int num); + + bool video_open(void); + void video_close(void); +}; + + +/* + * Utility functions + */ + +// Find palette size for given color depth +static int palette_size(int mode) +{ + switch (mode) { + case VIDEO_DEPTH_1BIT: return 2; + case VIDEO_DEPTH_2BIT: return 4; + case VIDEO_DEPTH_4BIT: return 16; + case VIDEO_DEPTH_8BIT: return 256; + case VIDEO_DEPTH_16BIT: return 32; + case VIDEO_DEPTH_32BIT: return 256; + default: return 0; + } +} + +// Map video_mode depth ID to numerical depth value +static int mac_depth_of_video_depth(int video_depth) +{ + int depth = -1; + switch (video_depth) { + case VIDEO_DEPTH_1BIT: + depth = 1; + break; + case VIDEO_DEPTH_2BIT: + depth = 2; + break; + case VIDEO_DEPTH_4BIT: + depth = 4; + break; + case VIDEO_DEPTH_8BIT: + depth = 8; + break; + case VIDEO_DEPTH_16BIT: + depth = 16; + break; + case VIDEO_DEPTH_32BIT: + depth = 32; + break; + default: + abort(); + } + return depth; +} + +// Map video_mode depth ID to SDL screen depth +static int sdl_depth_of_video_depth(int video_depth) +{ + return (video_depth <= VIDEO_DEPTH_8BIT) ? 8 : mac_depth_of_video_depth(video_depth); +} + +// Get screen dimensions +static void sdl_display_dimensions(int &width, int &height) +{ + SDL_DisplayMode desktop_mode; + const int display_index = 0; // TODO: try supporting multiple displays + if (SDL_GetDesktopDisplayMode(display_index, &desktop_mode) != 0) { + // TODO: report a warning, here? + width = height = 0; + return; + } + width = desktop_mode.w; + height = desktop_mode.h; +} + +static inline int sdl_display_width(void) +{ + int width, height; + sdl_display_dimensions(width, height); + return width; +} + +static inline int sdl_display_height(void) +{ + int width, height; + sdl_display_dimensions(width, height); + return height; +} + +// Check whether specified mode is available +static bool has_mode(int type, int width, int height, int depth) +{ + // Filter out out-of-bounds resolutions + if (width > sdl_display_width() || height > sdl_display_height()) + return false; + + // Whatever size it is, beyond what we've checked, we'll scale to/from as appropriate. + return true; +} + +// Add mode to list of supported modes +static void add_mode(int type, int width, int height, int resolution_id, int bytes_per_row, int depth) +{ + // Filter out unsupported modes + if (!has_mode(type, width, height, depth)) + return; + + // Fill in VideoMode entry + VIDEO_MODE mode; +#ifdef SHEEPSHAVER + resolution_id = find_apple_resolution(width, height); + mode.viType = type; +#endif + VIDEO_MODE_X = width; + VIDEO_MODE_Y = height; + VIDEO_MODE_RESOLUTION = resolution_id; + VIDEO_MODE_ROW_BYTES = bytes_per_row; + VIDEO_MODE_DEPTH = (video_depth)depth; + VideoModes.push_back(mode); +} + +// Set Mac frame layout and base address (uses the_buffer/MacFrameBaseMac) +static void set_mac_frame_buffer(SDL_monitor_desc &monitor, int depth, bool native_byte_order) +{ +#if !REAL_ADDRESSING && !DIRECT_ADDRESSING + int layout = FLAYOUT_DIRECT; + if (depth == VIDEO_DEPTH_16BIT) + layout = (screen_depth == 15) ? FLAYOUT_HOST_555 : FLAYOUT_HOST_565; + else if (depth == VIDEO_DEPTH_32BIT) + layout = (screen_depth == 24) ? FLAYOUT_HOST_888 : FLAYOUT_DIRECT; + if (native_byte_order) + MacFrameLayout = layout; + else + MacFrameLayout = FLAYOUT_DIRECT; + monitor.set_mac_frame_base(MacFrameBaseMac); + + // Set variables used by UAE memory banking + const VIDEO_MODE &mode = monitor.get_current_mode(); + MacFrameBaseHost = the_buffer; + MacFrameSize = VIDEO_MODE_ROW_BYTES * VIDEO_MODE_Y; + InitFrameBufferMapping(); +#else + monitor.set_mac_frame_base(Host2MacAddr(the_buffer)); +#endif + D(bug("monitor.mac_frame_base = %08x\n", monitor.get_mac_frame_base())); +} + +// Set window name and class +static void set_window_name(int name) +{ + if (!sdl_window) { + return; + } + const char *str = GetString(name); + SDL_SetWindowTitle(sdl_window, str); +} + +static void set_window_name_grabbed() { + if (!sdl_window) return; + int hotkey = PrefsFindInt32("hotkey"); + if (!hotkey) hotkey = 1; + std::string s = GetString(STR_WINDOW_TITLE_GRABBED0); + if (hotkey & 1) s += GetString(STR_WINDOW_TITLE_GRABBED1); + if (hotkey & 2) s += GetString(STR_WINDOW_TITLE_GRABBED2); + if (hotkey & 4) s += GetString(STR_WINDOW_TITLE_GRABBED3); + s += GetString(STR_WINDOW_TITLE_GRABBED4); + SDL_SetWindowTitle(sdl_window, s.c_str()); +} + +// Set mouse grab mode +static void set_grab_mode(bool grab) +{ + if (!sdl_window) { + return; + } + SDL_SetWindowGrab(sdl_window, grab ? SDL_TRUE : SDL_FALSE); +} + +// Migrate preferences items (XXX to be handled in MigratePrefs()) +static void migrate_screen_prefs(void) +{ +#ifdef SHEEPSHAVER + // Look-up priorities are: "screen", "screenmodes", "windowmodes". + if (PrefsFindString("screen")) + return; + + uint32 window_modes = PrefsFindInt32("windowmodes"); + uint32 screen_modes = PrefsFindInt32("screenmodes"); + int width = 0, height = 0; + if (screen_modes) { + static const struct { + int id; + int width; + int height; + } + modes[] = { + { 1, 640, 480 }, + { 2, 800, 600 }, + { 4, 1024, 768 }, + { 64, 1152, 768 }, + { 8, 1152, 900 }, + { 16, 1280, 1024 }, + { 32, 1600, 1200 }, + { 0, } + }; + for (int i = 0; modes[i].id != 0; i++) { + if (screen_modes & modes[i].id) { + if (width < modes[i].width && height < modes[i].height) { + width = modes[i].width; + height = modes[i].height; + } + } + } + } else { + if (window_modes & 1) + width = 640, height = 480; + if (window_modes & 2) + width = 800, height = 600; + } + if (width && height) { + char str[32]; + sprintf(str, "%s/%d/%d", screen_modes ? "dga" : "win", width, height); + PrefsReplaceString("screen", str); + } +#endif +} + + +/* + * Display "driver" classes + */ + +class driver_base { +public: + driver_base(SDL_monitor_desc &m); + ~driver_base(); + + void init(); // One-time init + void set_video_mode(int flags); + void adapt_to_video_mode(); + + void update_palette(void); + void suspend(void) {} + void resume(void) {} + void toggle_mouse_grab(void); + void mouse_moved(int x, int y) { ADBMouseMoved(x, y); } + + void disable_mouse_accel(void); + void restore_mouse_accel(void); + + void grab_mouse(void); + void ungrab_mouse(void); + +public: + SDL_monitor_desc &monitor; // Associated video monitor + const VIDEO_MODE &mode; // Video mode handled by the driver + + bool init_ok; // Initialization succeeded (we can't use exceptions because of -fomit-frame-pointer) + SDL_Surface *s; // The surface we draw into +}; + +#ifdef ENABLE_VOSF +static void update_display_window_vosf(driver_base *drv); +#endif +static void update_display_static(driver_base *drv); + +static driver_base *drv = NULL; // Pointer to currently used driver object + +#ifdef ENABLE_VOSF +# include "video_vosf.h" +#endif + +driver_base::driver_base(SDL_monitor_desc &m) + : monitor(m), mode(m.get_current_mode()), init_ok(false), s(NULL) +{ + the_buffer = NULL; + the_buffer_copy = NULL; +} + +static void delete_sdl_video_surfaces() +{ + if (sdl_texture) { + SDL_DestroyTexture(sdl_texture); + sdl_texture = NULL; + } + + if (host_surface) { + if (host_surface == guest_surface) { + guest_surface = NULL; + } + + SDL_FreeSurface(host_surface); + host_surface = NULL; + } + + if (guest_surface) { + SDL_FreeSurface(guest_surface); + guest_surface = NULL; + } +} + +static void delete_sdl_video_window() +{ + if (sdl_renderer) { + SDL_DestroyRenderer(sdl_renderer); + sdl_renderer = NULL; + } + + if (sdl_window) { + SDL_DestroyWindow(sdl_window); + sdl_window = NULL; + } +} + +static void shutdown_sdl_video() +{ + delete_sdl_video_surfaces(); + delete_sdl_video_window(); +} + +static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags) +{ + if (guest_surface) { + delete_sdl_video_surfaces(); + } + + int window_width = width; + int window_height = height; + Uint32 window_flags = SDL_WINDOW_ALLOW_HIGHDPI; + const int window_flags_to_monitor = SDL_WINDOW_FULLSCREEN; + + if (flags & SDL_WINDOW_FULLSCREEN) { + SDL_DisplayMode desktop_mode; + if (SDL_GetDesktopDisplayMode(0, &desktop_mode) != 0) { + shutdown_sdl_video(); + return NULL; + } +#ifdef __MACOSX__ + window_flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; +#else + window_flags |= SDL_WINDOW_FULLSCREEN; +#endif + window_width = desktop_mode.w; + window_height = desktop_mode.h; + } + + if (sdl_window) { + int old_window_width, old_window_height, old_window_flags; + SDL_GetWindowSize(sdl_window, &old_window_width, &old_window_height); + old_window_flags = SDL_GetWindowFlags(sdl_window); + if (old_window_width != window_width || + old_window_height != window_height || + (old_window_flags & window_flags_to_monitor) != (window_flags & window_flags_to_monitor)) + { + delete_sdl_video_window(); + } + } + + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, PrefsFindBool("scale_nearest") ? "nearest" : "linear"); + +/* + // Always use a resize-able window. This helps allow SDL to manage + // transitions involving fullscreen to or from windowed-mode. + window_flags |= SDL_WINDOW_RESIZABLE; +*/ + if (!sdl_window) { + sdl_window = SDL_CreateWindow( + "Basilisk II", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + window_width, + window_height, + window_flags); + if (!sdl_window) { + shutdown_sdl_video(); + return NULL; + } + } + if (flags & SDL_WINDOW_FULLSCREEN) SDL_SetWindowGrab(sdl_window, SDL_TRUE); + + // Some SDL events (regarding some native-window events), need processing + // as they are generated. SDL2 has a facility, SDL_AddEventWatch(), which + // allows events to be processed as they are generated. + if (!did_add_event_watch) { + SDL_AddEventWatch(&on_sdl_event_generated, NULL); + did_add_event_watch = true; + } + + if (!sdl_renderer) { + const char *render_driver = PrefsFindString("sdlrender"); + if (render_driver) { + SDL_SetHint(SDL_HINT_RENDER_DRIVER, render_driver); + } + else { +#ifdef WIN32 + SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software"); +#else + SDL_SetHint(SDL_HINT_RENDER_DRIVER, ""); +#endif + } + sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0); + if (!sdl_renderer) { + shutdown_sdl_video(); + return NULL; + } + sdl_renderer_thread_id = SDL_ThreadID(); + + SDL_RendererInfo info; + memset(&info, 0, sizeof(info)); + SDL_GetRendererInfo(sdl_renderer, &info); + printf("Using SDL_Renderer driver: %s\n", (info.name ? info.name : "(null)")); + } + + if (!sdl_update_video_mutex) { + sdl_update_video_mutex = SDL_CreateMutex(); + } + + SDL_assert(sdl_texture == NULL); + sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, width, height); + if (!sdl_texture) { + shutdown_sdl_video(); + return NULL; + } + sdl_update_video_rect.x = 0; + sdl_update_video_rect.y = 0; + sdl_update_video_rect.w = 0; + sdl_update_video_rect.h = 0; + + SDL_assert(guest_surface == NULL); + SDL_assert(host_surface == NULL); + switch (bpp) { + case 8: + guest_surface = SDL_CreateRGBSurface(0, width, height, 8, 0, 0, 0, 0); + break; + case 16: + guest_surface = SDL_CreateRGBSurface(0, width, height, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0x00000000); + break; + case 32: + guest_surface = SDL_CreateRGBSurface(0, width, height, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000); + host_surface = guest_surface; + break; + default: + printf("WARNING: An unsupported bpp of %d was used\n", bpp); + break; + } + if (!guest_surface) { + shutdown_sdl_video(); + return NULL; + } + + if (!host_surface) { + Uint32 texture_format; + if (SDL_QueryTexture(sdl_texture, &texture_format, NULL, NULL, NULL) != 0) { + printf("ERROR: Unable to get the SDL texture's pixel format: %s\n", SDL_GetError()); + shutdown_sdl_video(); + return NULL; + } + + int bpp; + Uint32 Rmask, Gmask, Bmask, Amask; + if (!SDL_PixelFormatEnumToMasks(texture_format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) { + printf("ERROR: Unable to determine format for host SDL_surface: %s\n", SDL_GetError()); + shutdown_sdl_video(); + return NULL; + } + + host_surface = SDL_CreateRGBSurface(0, width, height, bpp, Rmask, Gmask, Bmask, Amask); + if (!host_surface) { + printf("ERROR: Unable to create host SDL_surface: %s\n", SDL_GetError()); + shutdown_sdl_video(); + return NULL; + } + } + + if (SDL_RenderSetLogicalSize(sdl_renderer, width, height) != 0) { + printf("ERROR: Unable to set SDL rendeer's logical size (to %dx%d): %s\n", + width, height, SDL_GetError()); + shutdown_sdl_video(); + return NULL; + } + + SDL_RenderSetIntegerScale(sdl_renderer, PrefsFindBool("scale_integer") ? SDL_TRUE : SDL_FALSE); + + return guest_surface; +} + +static int present_sdl_video() +{ + if (SDL_RectEmpty(&sdl_update_video_rect)) return 0; + + if (!sdl_renderer || !sdl_texture || !guest_surface) { + printf("WARNING: A video mode does not appear to have been set.\n"); + return -1; + } + + // Some systems, such as D3D9, can fail if and when they are used across + // certain operations. To address this, only utilize SDL_Renderer in a + // single thread, preferably the main thread. + // + // This was added as part of a fix for https://github.com/DavidLudwig/macemu/issues/21 + // "BasiliskII, Win32: resizing a window does not stretch " + SDL_assert(SDL_ThreadID() == sdl_renderer_thread_id); + + // Make sure the display's internal (to SDL, possibly the OS) buffer gets + // cleared. Not doing so can, if and when letterboxing is applied (whereby + // colored bars are drawn on the screen's sides to help with aspect-ratio + // correction), the colored bars can be an unknown color. + SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 0); // Use black + SDL_RenderClear(sdl_renderer); // Clear the display + + // We're about to work with sdl_update_video_rect, so stop other threads from + // modifying it! + LOCK_PALETTE; + SDL_LockMutex(sdl_update_video_mutex); + // Convert from the guest OS' pixel format, to the host OS' texture, if necessary. + if (host_surface != guest_surface && + host_surface != NULL && + guest_surface != NULL) + { + SDL_Rect destRect = sdl_update_video_rect; + int result = SDL_BlitSurface(guest_surface, &sdl_update_video_rect, host_surface, &destRect); + if (result != 0) { + SDL_UnlockMutex(sdl_update_video_mutex); + UNLOCK_PALETTE; + return -1; + } + } + UNLOCK_PALETTE; // passed potential deadlock, can unlock palette + + // Update the host OS' texture + void * srcPixels = (void *)((uint8_t *)host_surface->pixels + + sdl_update_video_rect.y * host_surface->pitch + + sdl_update_video_rect.x * host_surface->format->BytesPerPixel); + + if (SDL_UpdateTexture(sdl_texture, &sdl_update_video_rect, srcPixels, host_surface->pitch) != 0) { + SDL_UnlockMutex(sdl_update_video_mutex); + return -1; + } + + // We are done working with pixels in host_surface. Reset sdl_update_video_rect, then let + // other threads modify it, as-needed. + sdl_update_video_rect.x = 0; + sdl_update_video_rect.y = 0; + sdl_update_video_rect.w = 0; + sdl_update_video_rect.h = 0; + SDL_UnlockMutex(sdl_update_video_mutex); + + // Copy the texture to the display + if (SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, NULL) != 0) { + return -1; + } + + // Update the display + SDL_RenderPresent(sdl_renderer); + + // Indicate success to the caller! + return 0; +} + +void update_sdl_video(SDL_Surface *s, int numrects, SDL_Rect *rects) +{ + // TODO: make sure SDL_Renderer resources get displayed, if and when + // MacsBug is running (and VideoInterrupt() might not get called) + + SDL_LockMutex(sdl_update_video_mutex); + for (int i = 0; i < numrects; ++i) { + SDL_UnionRect(&sdl_update_video_rect, &rects[i], &sdl_update_video_rect); + } + SDL_UnlockMutex(sdl_update_video_mutex); +} + +void update_sdl_video(SDL_Surface *s, Sint32 x, Sint32 y, Sint32 w, Sint32 h) +{ + SDL_Rect temp = {x, y, w, h}; + update_sdl_video(s, 1, &temp); +} + +#ifdef SHEEPSHAVER +static void MagBits(Uint8 *dst, Uint8 *src, int mag) { + for (int y = 0; y < 16; y++) + for (int x = 0; x < 16; x++) { + int sa = 16 * y + x; + if (!(src[sa >> 3] & 0x80 >> (sa & 7))) continue; + for (int dy = 0; dy < mag; dy++) + for (int dx = 0; dx < mag; dx++) { + int da = 16 * mag * (mag * y + dy) + mag * x + dx; + dst[da >> 3] |= 0x80 >> (da & 7); + } + } +} +static SDL_Cursor *MagCursor(bool hot) { + int w, h; + SDL_GetWindowSize(sdl_window, &w, &h); + int mag = std::min(w / drv->VIDEO_MODE_X, h / drv->VIDEO_MODE_Y); + Uint8 *data = (Uint8 *)SDL_calloc(1, 32 * mag * mag); + Uint8 *mask = (Uint8 *)SDL_calloc(1, 32 * mag * mag); + MagBits(data, &MacCursor[4], mag); + MagBits(mask, &MacCursor[36], mag); + SDL_Cursor *cursor = SDL_CreateCursor(data, mask, 16 * mag, 16 * mag, hot ? MacCursor[2] * mag : 0, hot ? MacCursor[3] * mag : 0); + SDL_free(data); + SDL_free(mask); + return cursor; +} +#endif + +void driver_base::set_video_mode(int flags) +{ + int depth = sdl_depth_of_video_depth(VIDEO_MODE_DEPTH); + if ((s = init_sdl_video(VIDEO_MODE_X, VIDEO_MODE_Y, depth, flags)) == NULL) + return; +#ifdef ENABLE_VOSF + the_host_buffer = (uint8 *)s->pixels; +#endif +} + +void driver_base::init() +{ + set_video_mode(display_type == DISPLAY_SCREEN ? SDL_WINDOW_FULLSCREEN : 0); + int aligned_height = (VIDEO_MODE_Y + 15) & ~15; + +#ifdef ENABLE_VOSF + use_vosf = true; + // Allocate memory for frame buffer (SIZE is extended to page-boundary) + the_buffer_size = page_extend((aligned_height + 2) * s->pitch); + the_buffer = (uint8 *)vm_acquire_framebuffer(the_buffer_size); + the_buffer_copy = (uint8 *)malloc(the_buffer_size); + D(bug("the_buffer = %p, the_buffer_copy = %p, the_host_buffer = %p\n", the_buffer, the_buffer_copy, the_host_buffer)); + + // Check whether we can initialize the VOSF subsystem and it's profitable + if (!video_vosf_init(monitor)) { + WarningAlert(GetString(STR_VOSF_INIT_ERR)); + use_vosf = false; + } + else if (!video_vosf_profitable()) { + video_vosf_exit(); + printf("VOSF acceleration is not profitable on this platform, disabling it\n"); + use_vosf = false; + } + if (!use_vosf) { + free(the_buffer_copy); + vm_release(the_buffer, the_buffer_size); + the_host_buffer = NULL; + } +#endif + if (!use_vosf) { + // Allocate memory for frame buffer + the_buffer_size = (aligned_height + 2) * s->pitch; + the_buffer_copy = (uint8 *)calloc(1, the_buffer_size); + the_buffer = (uint8 *)vm_acquire_framebuffer(the_buffer_size); + D(bug("the_buffer = %p, the_buffer_copy = %p\n", the_buffer, the_buffer_copy)); + } + + // Set frame buffer base + set_mac_frame_buffer(monitor, VIDEO_MODE_DEPTH, true); + + adapt_to_video_mode(); +} + +void driver_base::adapt_to_video_mode() { + ADBSetRelMouseMode(mouse_grabbed); + + // Init blitting routines + SDL_PixelFormat *f = s->format; + VisualFormat visualFormat; + visualFormat.depth = sdl_depth_of_video_depth(VIDEO_MODE_DEPTH); + visualFormat.Rmask = f->Rmask; + visualFormat.Gmask = f->Gmask; + visualFormat.Bmask = f->Bmask; + Screen_blitter_init(visualFormat, true, mac_depth_of_video_depth(VIDEO_MODE_DEPTH)); + + // Load gray ramp to 8->16/32 expand map + if (!IsDirectMode(mode)) + for (int i=0; i<256; i++) + ExpandMap[i] = SDL_MapRGB(f, i, i, i); + + + bool hardware_cursor = false; +#ifdef SHEEPSHAVER + hardware_cursor = video_can_change_cursor(); + if (hardware_cursor) { + // Create cursor + if ((sdl_cursor = MagCursor(false)) != NULL) { + SDL_SetCursor(sdl_cursor); + } + } + // Tell the video driver there's a change in cursor type + if (private_data) + private_data->cursorHardware = hardware_cursor; +#endif + SDL_LockMutex(sdl_update_video_mutex); + sdl_update_video_rect.x = 0; + sdl_update_video_rect.y = 0; + sdl_update_video_rect.w = VIDEO_MODE_X; + sdl_update_video_rect.h = VIDEO_MODE_Y; + SDL_UnlockMutex(sdl_update_video_mutex); + + // Hide cursor + SDL_ShowCursor(hardware_cursor); + + // Set window name/class + mouse_grabbed ? set_window_name_grabbed() : set_window_name((int)STR_WINDOW_TITLE); + + // Everything went well + init_ok = true; +} + +driver_base::~driver_base() +{ + ungrab_mouse(); + restore_mouse_accel(); + + // HACK: Just delete instances of SDL_Surface and SDL_Texture, rather + // than also the SDL_Window and SDL_Renderer. This fixes a bug whereby + // OSX hosts, when in fullscreen, will, on a guest OS resolution change, + // do a series of switches (using OSX's "Spaces" feature) to and from + // the Basilisk II desktop, + delete_sdl_video_surfaces(); // This deletes instances of SDL_Surface and SDL_Texture + //shutdown_sdl_video(); // This deletes SDL_Window, SDL_Renderer, in addition to + // instances of SDL_Surface and SDL_Texture. + + // the_buffer shall always be mapped through vm_acquire_framebuffer() + if (the_buffer != VM_MAP_FAILED) { + D(bug(" releasing the_buffer at %p (%d bytes)\n", the_buffer, the_buffer_size)); + vm_release_framebuffer(the_buffer, the_buffer_size); + the_buffer = NULL; + } + + // Free frame buffer(s) + if (!use_vosf) { + if (the_buffer_copy) { + free(the_buffer_copy); + the_buffer_copy = NULL; + } + } +#ifdef ENABLE_VOSF + else { + if (the_buffer_copy) { + D(bug(" freeing the_buffer_copy at %p\n", the_buffer_copy)); + free(the_buffer_copy); + the_buffer_copy = NULL; + } + + // Deinitialize VOSF + video_vosf_exit(); + } +#endif + + SDL_ShowCursor(1); +} + +// Palette has changed +void driver_base::update_palette(void) +{ + const VIDEO_MODE &mode = monitor.get_current_mode(); + + if ((int)VIDEO_MODE_DEPTH <= VIDEO_DEPTH_8BIT) { + SDL_SetSurfacePalette(s, sdl_palette); + SDL_LockMutex(sdl_update_video_mutex); + sdl_update_video_rect.x = 0; + sdl_update_video_rect.y = 0; + sdl_update_video_rect.w = VIDEO_MODE_X; + sdl_update_video_rect.h = VIDEO_MODE_Y; + SDL_UnlockMutex(sdl_update_video_mutex); + } +} + +// Disable mouse acceleration +void driver_base::disable_mouse_accel(void) +{ +} + +// Restore mouse acceleration to original value +void driver_base::restore_mouse_accel(void) +{ +} + +// Toggle mouse grab +void driver_base::toggle_mouse_grab(void) +{ + if (mouse_grabbed) + ungrab_mouse(); + else + grab_mouse(); +} + +static void update_mouse_grab() +{ + if (mouse_grabbed) { + SDL_SetRelativeMouseMode(SDL_TRUE); + } else { + SDL_SetRelativeMouseMode(SDL_FALSE); + } +} + +// Grab mouse, switch to relative mouse mode +void driver_base::grab_mouse(void) +{ + if (!mouse_grabbed) { + mouse_grabbed = true; + update_mouse_grab(); + set_window_name_grabbed(); + disable_mouse_accel(); + ADBSetRelMouseMode(true); + } +} + +// Ungrab mouse, switch to absolute mouse mode +void driver_base::ungrab_mouse(void) +{ + if (mouse_grabbed) { + mouse_grabbed = false; + update_mouse_grab(); + set_window_name(STR_WINDOW_TITLE); + restore_mouse_accel(); + ADBSetRelMouseMode(false); + } +} + +/* + * Initialization + */ + +// Init keycode translation table +static void keycode_init(void) +{ + bool use_kc = PrefsFindBool("keycodes"); + if (use_kc) { + + // Get keycode file path from preferences + const char *kc_path = PrefsFindString("keycodefile"); + + // Open keycode table + FILE *f = fopen(kc_path && *kc_path ? kc_path : KEYCODE_FILE_NAME, "r"); + if (f == NULL) f = fopen(KEYCODE_FILE_NAME2, "r"); + if (f == NULL) { + char str[256]; + snprintf(str, sizeof(str), GetString(STR_KEYCODE_FILE_WARN), kc_path ? kc_path : KEYCODE_FILE_NAME, strerror(errno)); + WarningAlert(str); + return; + } + + // Default translation table + for (int i=0; i<256; i++) + keycode_table[i] = CODE_INVALID; + + // Search for server vendor string, then read keycodes + const char * video_driver = SDL_GetCurrentVideoDriver(); + bool video_driver_found = false; + char line[256]; + int n_keys = 0; + while (fgets(line, sizeof(line) - 1, f)) { + // Read line + int len = strlen(line); + if (len == 0) + continue; + line[len-1] = 0; + + // Comments begin with "#" or ";" + if (line[0] == '#' || line[0] == ';' || line[0] == 0) + continue; + + if (video_driver_found) { + // Skip aliases as long as we have read keycodes yet + // Otherwise, it's another mapping and we have to stop + static const char sdl_str[] = "sdl"; + if (strncmp(line, sdl_str, sizeof(sdl_str) - 1) == 0 && n_keys == 0) + continue; + + // Read keycode + int x_code, mac_code; + if (sscanf(line, "%d %d", &x_code, &mac_code) == 2) + keycode_table[x_code & 0xff] = mac_code, n_keys++; + else + break; + } else { + // Search for SDL video driver string + static const char sdl_str[] = "sdl"; + if (strncmp(line, sdl_str, sizeof(sdl_str) - 1) == 0) { + char *p = line + sizeof(sdl_str); + if (video_driver && strstr(video_driver, p) == video_driver) + video_driver_found = true; + } + } + } + + // Keycode file completely read + fclose(f); + use_keycodes = video_driver_found; + + // Vendor not found? Then display warning + if (!video_driver_found) { + char str[256]; + snprintf(str, sizeof(str), GetString(STR_KEYCODE_VENDOR_WARN), video_driver ? video_driver : "", kc_path ? kc_path : KEYCODE_FILE_NAME); + WarningAlert(str); + return; + } + + D(bug("Using SDL/%s keycodes table, %d key mappings\n", video_driver ? video_driver : "", n_keys)); + } +} + +// Open display for current mode +bool SDL_monitor_desc::video_open(void) +{ + D(bug("video_open()\n")); +#if DEBUG + const VIDEO_MODE &mode = get_current_mode(); + D(bug("Current video mode:\n")); + D(bug(" %dx%d (ID %02x), %d bpp\n", VIDEO_MODE_X, VIDEO_MODE_Y, VIDEO_MODE_RESOLUTION, 1 << (VIDEO_MODE_DEPTH & 0x0f))); +#endif + + // Create display driver object of requested type + drv = new(std::nothrow) driver_base(*this); + if (drv == NULL) + return false; + drv->init(); + if (!drv->init_ok) { + delete drv; + drv = NULL; + return false; + } + +#ifdef WIN32 + // Chain in a new message handler for WM_DEVICECHANGE + HWND the_window = GetMainWindowHandle(); + sdl_window_proc = (WNDPROC)GetWindowLongPtr(the_window, GWLP_WNDPROC); + SetWindowLongPtr(the_window, GWLP_WNDPROC, (LONG_PTR)windows_message_handler); +#endif + + // Initialize VideoRefresh function + VideoRefreshInit(); + + // Lock down frame buffer + LOCK_FRAME_BUFFER; + + // Start redraw/input thread +#ifndef USE_CPU_EMUL_SERVICES + redraw_thread_cancel = false; + redraw_thread_active = ((redraw_thread = SDL_CreateThread(redraw_func, "Redraw Thread", NULL)) != NULL); + if (!redraw_thread_active) { + printf("FATAL: cannot create redraw thread\n"); + return false; + } +#else + redraw_thread_active = true; +#endif + return true; +} + +#ifdef SHEEPSHAVER +bool VideoInit(void) +{ + const bool classic = false; +#else +bool VideoInit(bool classic) +{ +#endif + classic_mode = classic; + +#ifdef ENABLE_VOSF + // Zero the mainBuffer structure + mainBuffer.dirtyPages = NULL; + mainBuffer.pageInfo = NULL; +#endif + + // Create Mutexes + if ((sdl_events_lock = SDL_CreateMutex()) == NULL) + return false; + if ((sdl_palette_lock = SDL_CreateMutex()) == NULL) + return false; + if ((frame_buffer_lock = SDL_CreateMutex()) == NULL) + return false; + + // Init keycode translation + keycode_init(); + + // Read prefs + frame_skip = PrefsFindInt32("frameskip"); + mouse_wheel_mode = PrefsFindInt32("mousewheelmode"); + mouse_wheel_lines = PrefsFindInt32("mousewheellines"); + + // Get screen mode from preferences + migrate_screen_prefs(); + const char *mode_str = NULL; + if (classic_mode) + mode_str = "win/512/342"; + else + mode_str = PrefsFindString("screen"); + + // Determine display type and default dimensions + int default_width, default_height; + if (classic) { + default_width = 512; + default_height = 384; + } + else { + default_width = 640; + default_height = 480; + } + display_type = DISPLAY_WINDOW; + if (mode_str) { + if (sscanf(mode_str, "win/%d/%d", &default_width, &default_height) == 2) + display_type = DISPLAY_WINDOW; + else if (sscanf(mode_str, "dga/%d/%d", &default_width, &default_height) == 2) + display_type = DISPLAY_SCREEN; + } + if (default_width <= 0) + default_width = sdl_display_width(); + else if (default_width > sdl_display_width()) + default_width = sdl_display_width(); + if (default_height <= 0) + default_height = sdl_display_height(); + else if (default_height > sdl_display_height()) + default_height = sdl_display_height(); + + // Mac screen depth follows X depth + screen_depth = 32; + SDL_DisplayMode desktop_mode; + if (SDL_GetDesktopDisplayMode(0, &desktop_mode) == 0) { + screen_depth = SDL_BITSPERPIXEL(desktop_mode.format); + } + int default_depth; + switch (screen_depth) { + case 8: + default_depth = VIDEO_DEPTH_8BIT; + break; + case 15: case 16: + default_depth = VIDEO_DEPTH_16BIT; + break; + case 24: case 32: + default_depth = VIDEO_DEPTH_32BIT; + break; + default: + default_depth = VIDEO_DEPTH_1BIT; + break; + } + + // Initialize list of video modes to try + struct { + int w; + int h; + int resolution_id; + } +#ifdef SHEEPSHAVER + // Omit Classic resolutions + video_modes[] = { + { -1, -1, 0x80 }, + { 640, 480, 0x81 }, + { 800, 600, 0x82 }, + { 1024, 768, 0x83 }, + { 1152, 870, 0x84 }, + { 1280, 1024, 0x85 }, + { 1600, 1200, 0x86 }, + { 0, } + }; +#else + video_modes[] = { + { -1, -1, 0x80 }, + { 512, 384, 0x80 }, + { 640, 480, 0x81 }, + { 800, 600, 0x82 }, + { 1024, 768, 0x83 }, + { 1152, 870, 0x84 }, + { 1280, 1024, 0x85 }, + { 1600, 1200, 0x86 }, + { 0, } + }; +#endif + video_modes[0].w = default_width; + video_modes[0].h = default_height; + + // Construct list of supported modes + if (display_type == DISPLAY_WINDOW) { + if (classic) + add_mode(display_type, 512, 342, 0x80, 64, VIDEO_DEPTH_1BIT); + else { + for (int i = 0; video_modes[i].w != 0; i++) { + const int w = video_modes[i].w; + const int h = video_modes[i].h; + if (i > 0 && (w >= default_width || h >= default_height)) + continue; + for (int d = VIDEO_DEPTH_1BIT; d <= default_depth; d++) + add_mode(display_type, w, h, video_modes[i].resolution_id, TrivialBytesPerRow(w, (video_depth)d), d); + } + } + } else if (display_type == DISPLAY_SCREEN) { + for (int i = 0; video_modes[i].w != 0; i++) { + const int w = video_modes[i].w; + const int h = video_modes[i].h; + if (i > 0 && (w >= default_width || h >= default_height)) + continue; + for (int d = VIDEO_DEPTH_1BIT; d <= default_depth; d++) + add_mode(display_type, w, h, video_modes[i].resolution_id, TrivialBytesPerRow(w, (video_depth)d), d); + } + } + + if (VideoModes.empty()) { + ErrorAlert(STR_NO_XVISUAL_ERR); + return false; + } + + // Find requested default mode with specified dimensions + uint32 default_id; + std::vector::const_iterator i, end = VideoModes.end(); + for (i = VideoModes.begin(); i != end; ++i) { + const VIDEO_MODE & mode = (*i); + if (VIDEO_MODE_X == default_width && VIDEO_MODE_Y == default_height && VIDEO_MODE_DEPTH == default_depth) { + default_id = VIDEO_MODE_RESOLUTION; +#ifdef SHEEPSHAVER + std::vector::const_iterator begin = VideoModes.begin(); + cur_mode = distance(begin, i); +#endif + break; + } + } + if (i == end) { // not found, use first available mode + const VIDEO_MODE & mode = VideoModes[0]; + default_depth = VIDEO_MODE_DEPTH; + default_id = VIDEO_MODE_RESOLUTION; +#ifdef SHEEPSHAVER + cur_mode = 0; +#endif + } + +#ifdef SHEEPSHAVER + for (int i = 0; i < VideoModes.size(); i++) + VModes[i] = VideoModes[i]; + VideoInfo *p = &VModes[VideoModes.size()]; + p->viType = DIS_INVALID; // End marker + p->viRowBytes = 0; + p->viXsize = p->viYsize = 0; + p->viAppleMode = 0; + p->viAppleID = 0; +#endif + +#if DEBUG + D(bug("Available video modes:\n")); + for (i = VideoModes.begin(); i != end; ++i) { + const VIDEO_MODE & mode = (*i); + int bits = 1 << VIDEO_MODE_DEPTH; + if (bits == 16) + bits = 15; + else if (bits == 32) + bits = 24; + D(bug(" %dx%d (ID %02x), %d colors\n", VIDEO_MODE_X, VIDEO_MODE_Y, VIDEO_MODE_RESOLUTION, 1 << bits)); + } +#endif + + int color_depth = get_customized_color_depth(default_depth); + + D(bug("Return get_customized_color_depth %d\n", color_depth)); + + // Create SDL_monitor_desc for this (the only) display + SDL_monitor_desc *monitor = new SDL_monitor_desc(VideoModes, (video_depth)color_depth, default_id); + VideoMonitors.push_back(monitor); + + // Open display + return monitor->video_open(); +} + + +/* + * Deinitialization + */ + +// Close display +void SDL_monitor_desc::video_close(void) +{ + D(bug("video_close()\n")); + +#ifdef WIN32 + // Remove message handler for WM_DEVICECHANGE + HWND the_window = GetMainWindowHandle(); + SetWindowLongPtr(the_window, GWLP_WNDPROC, (LONG_PTR)sdl_window_proc); +#endif + + // Stop redraw thread +#ifndef USE_CPU_EMUL_SERVICES + if (redraw_thread_active) { + redraw_thread_cancel = true; + SDL_WaitThread(redraw_thread, NULL); + } +#endif + redraw_thread_active = false; + + // Unlock frame buffer + UNLOCK_FRAME_BUFFER; + D(bug(" frame buffer unlocked\n")); + + // Close display + delete drv; + drv = NULL; +} + +void VideoExit(void) +{ + // Close displays + vector::iterator i, end = VideoMonitors.end(); + for (i = VideoMonitors.begin(); i != end; ++i) + dynamic_cast(*i)->video_close(); + + // Destroy locks + if (frame_buffer_lock) + SDL_DestroyMutex(frame_buffer_lock); + if (sdl_palette_lock) + SDL_DestroyMutex(sdl_palette_lock); + if (sdl_events_lock) + SDL_DestroyMutex(sdl_events_lock); +} + + +/* + * Close down full-screen mode (if bringing up error alerts is unsafe while in full-screen mode) + */ + +void VideoQuitFullScreen(void) +{ + D(bug("VideoQuitFullScreen()\n")); + quit_full_screen = true; +} + +static void do_toggle_fullscreen(void) +{ +#ifndef USE_CPU_EMUL_SERVICES + // pause redraw thread + thread_stop_ack = false; + thread_stop_req = true; + while (!thread_stop_ack) ; +#endif + + // Apply fullscreen + if (sdl_window) { + if (display_type == DISPLAY_SCREEN) { + display_type = DISPLAY_WINDOW; + SDL_SetWindowFullscreen(sdl_window, 0); + const VIDEO_MODE &mode = drv->mode; + SDL_SetWindowSize(sdl_window, VIDEO_MODE_X, VIDEO_MODE_Y); + SDL_SetWindowGrab(sdl_window, SDL_FALSE); + } else { + display_type = DISPLAY_SCREEN; +#ifdef __MACOSX__ + SDL_SetWindowFullscreen(sdl_window, SDL_WINDOW_FULLSCREEN_DESKTOP); +#else + SDL_SetWindowFullscreen(sdl_window, SDL_WINDOW_FULLSCREEN); +#endif + SDL_SetWindowGrab(sdl_window, SDL_TRUE); + } + } + + // switch modes + drv->adapt_to_video_mode(); + + // reset the palette +#ifdef SHEEPSHAVER + video_set_palette(); +#endif + drv->update_palette(); + + // reset the video refresh handler + VideoRefreshInit(); + + // while SetVideoMode is happening, control key up may be missed + ADBKeyUp(0x36); + + // resume redraw thread + toggle_fullscreen = false; +#ifndef USE_CPU_EMUL_SERVICES + thread_stop_req = false; +#endif +} + +/* + * Mac VBL interrupt + */ + +/* + * Execute video VBL routine + */ + +static bool is_fullscreen(SDL_Window * window) +{ +#ifdef __MACOSX__ + // On OSX, SDL, at least as of 2.0.5 (and possibly beyond), does not always + // report changes to fullscreen via the SDL_WINDOW_FULLSCREEN flag. + // (Example: https://bugzilla.libsdl.org/show_bug.cgi?id=3766 , which + // involves fullscreen/windowed toggles via window-manager UI controls). + // Until it does, or adds a facility to do so, we'll use a platform-specific + // code path to detect fullscreen changes. + extern bool is_fullscreen_osx(SDL_Window * window); + return is_fullscreen_osx(sdl_window); +#else + if (!window) { + return false; + } + const Uint32 sdl_window_flags = SDL_GetWindowFlags(sdl_window); + return (sdl_window_flags & SDL_WINDOW_FULLSCREEN) != 0; +#endif +} + +#ifdef SHEEPSHAVER +void VideoVBL(void) +{ + // Emergency quit requested? Then quit + if (emerg_quit) + QuitEmulator(); + + if (toggle_fullscreen) + do_toggle_fullscreen(); + + present_sdl_video(); + + // Temporarily give up frame buffer lock (this is the point where + // we are suspended when the user presses Ctrl-Tab) + UNLOCK_FRAME_BUFFER; + LOCK_FRAME_BUFFER; + + // Execute video VBL + if (private_data != NULL && private_data->interruptsEnabled) + VSLDoInterruptService(private_data->vslServiceID); +} +#else +void VideoInterrupt(void) +{ + // We must fill in the events queue in the same thread that did call SDL_SetVideoMode() + SDL_PumpEvents(); + + // Emergency quit requested? Then quit + if (emerg_quit) + QuitEmulator(); + + if (toggle_fullscreen) + do_toggle_fullscreen(); + + present_sdl_video(); + + // Temporarily give up frame buffer lock (this is the point where + // we are suspended when the user presses Ctrl-Tab) + UNLOCK_FRAME_BUFFER; + LOCK_FRAME_BUFFER; +} +#endif + + +/* + * Set palette + */ + +#ifdef SHEEPSHAVER +void video_set_palette(void) +{ + monitor_desc * monitor = VideoMonitors[0]; + int n_colors = palette_size(monitor->get_current_mode().viAppleMode); + uint8 pal[256 * 3]; + for (int c = 0; c < n_colors; c++) { + pal[c*3 + 0] = mac_pal[c].red; + pal[c*3 + 1] = mac_pal[c].green; + pal[c*3 + 2] = mac_pal[c].blue; + } + monitor->set_palette(pal, n_colors); +} +#endif + +void SDL_monitor_desc::set_palette(uint8 *pal, int num_in) +{ + const VIDEO_MODE &mode = get_current_mode(); + + // FIXME: how can we handle the gamma ramp? + if ((int)VIDEO_MODE_DEPTH > VIDEO_DEPTH_8BIT) + return; + + LOCK_PALETTE; + + // Convert colors to XColor array + int num_out = 256; + bool stretch = false; + + if (!sdl_palette) { + sdl_palette = SDL_AllocPalette(num_out); + } + + SDL_Color *p = sdl_palette->colors; + for (int i=0; ir = pal[c*3 + 0] * 0x0101; + p->g = pal[c*3 + 1] * 0x0101; + p->b = pal[c*3 + 2] * 0x0101; + p++; + } + + // Recalculate pixel color expansion map + if (!IsDirectMode(mode)) { + for (int i=0; i<256; i++) { + int c = i & (num_in-1); // If there are less than 256 colors, we repeat the first entries (this makes color expansion easier) + ExpandMap[i] = SDL_MapRGB(drv->s->format, pal[c*3+0], pal[c*3+1], pal[c*3+2]); + } + +#ifdef ENABLE_VOSF + if (use_vosf) { + // We have to redraw everything because the interpretation of pixel values changed + LOCK_VOSF; + PFLAG_SET_ALL; + UNLOCK_VOSF; + memset(the_buffer_copy, 0, VIDEO_MODE_ROW_BYTES * VIDEO_MODE_Y); + } +#endif + } + + // Tell redraw thread to change palette + sdl_palette_changed = true; + + UNLOCK_PALETTE; +} + + +/* + * Switch video mode + */ + +#ifdef SHEEPSHAVER +int16 video_mode_change(VidLocals *csSave, uint32 ParamPtr) +{ + /* return if no mode change */ + if ((csSave->saveData == ReadMacInt32(ParamPtr + csData)) && + (csSave->saveMode == ReadMacInt16(ParamPtr + csMode))) return noErr; + + /* first find video mode in table */ + for (int i=0; VModes[i].viType != DIS_INVALID; i++) { + if ((ReadMacInt16(ParamPtr + csMode) == VModes[i].viAppleMode) && + (ReadMacInt32(ParamPtr + csData) == VModes[i].viAppleID)) { + csSave->saveMode = ReadMacInt16(ParamPtr + csMode); + csSave->saveData = ReadMacInt32(ParamPtr + csData); + csSave->savePage = ReadMacInt16(ParamPtr + csPage); + + // Disable interrupts and pause redraw thread + DisableInterrupt(); + thread_stop_ack = false; + thread_stop_req = true; + while (!thread_stop_ack) ; + + cur_mode = i; + monitor_desc *monitor = VideoMonitors[0]; + monitor->switch_to_current_mode(); + + WriteMacInt32(ParamPtr + csBaseAddr, screen_base); + csSave->saveBaseAddr=screen_base; + csSave->saveData=VModes[cur_mode].viAppleID;/* First mode ... */ + csSave->saveMode=VModes[cur_mode].viAppleMode; + + // Enable interrupts and resume redraw thread + thread_stop_req = false; + EnableInterrupt(); + return noErr; + } + } + return paramErr; +} +#endif + +void SDL_monitor_desc::switch_to_current_mode(void) +{ + // Close and reopen display + LOCK_EVENTS; + video_close(); + video_open(); + UNLOCK_EVENTS; + + if (drv == NULL) { + ErrorAlert(STR_OPEN_WINDOW_ERR); + QuitEmulator(); + } +} + + +/* + * Can we set the MacOS cursor image into the window? + */ + +#ifdef SHEEPSHAVER +bool video_can_change_cursor(void) +{ + return PrefsFindBool("hardcursor") && (display_type == DISPLAY_WINDOW || PrefsFindBool("scale_integer")); +} +#endif + + +/* + * Set cursor image for window + */ + +#ifdef SHEEPSHAVER +void video_set_cursor(void) +{ + // Set new cursor image if it was changed + if (sdl_cursor) { + SDL_FreeCursor(sdl_cursor); + sdl_cursor = MagCursor(true); + if (sdl_cursor) { + SDL_ShowCursor(private_data == NULL || private_data->cursorVisible); + SDL_SetCursor(sdl_cursor); + + // XXX Windows apparently needs an extra mouse event to + // make the new cursor image visible. + // On Mac, if mouse is grabbed, SDL_ShowCursor() recenters the + // mouse, we have to put it back. + bool move = false; +#ifdef WIN32 + move = true; +#elif defined(__APPLE__) + move = mouse_grabbed; +#endif + if (move) { + int visible = SDL_ShowCursor(-1); + if (visible) { + int x, y; + SDL_GetMouseState(&x, &y); + printf("WarpMouse to {%d,%d} via video_set_cursor\n", x, y); + SDL_WarpMouseGlobal(x, y); + } + } + } + } +} +#endif + + +/* + * Keyboard-related utilify functions + */ + +static bool is_hotkey_down(SDL_Keysym const & ks) +{ + int hotkey = PrefsFindInt32("hotkey"); + if (!hotkey) hotkey = 1; + return (ctrl_down || (ks.mod & KMOD_CTRL) || !(hotkey & 1)) && + (opt_down || (ks.mod & KMOD_ALT) || !(hotkey & 2)) && + (cmd_down || (ks.mod & KMOD_GUI) || !(hotkey & 4)); +} + + +/* + * Translate key event to Mac keycode, returns CODE_INVALID if no keycode was found + * and CODE_HOTKEY if the key was recognized as a hotkey + */ + +static int kc_decode(SDL_Keysym const & ks, bool key_down) +{ + switch (ks.sym) { + case SDLK_a: return 0x00; + case SDLK_b: return 0x0b; + case SDLK_c: return 0x08; + case SDLK_d: return 0x02; + case SDLK_e: return 0x0e; + case SDLK_f: return 0x03; + case SDLK_g: return 0x05; + case SDLK_h: return 0x04; + case SDLK_i: return 0x22; + case SDLK_j: return 0x26; + case SDLK_k: return 0x28; + case SDLK_l: return 0x25; + case SDLK_m: return 0x2e; + case SDLK_n: return 0x2d; + case SDLK_o: return 0x1f; + case SDLK_p: return 0x23; + case SDLK_q: return 0x0c; + case SDLK_r: return 0x0f; + case SDLK_s: return 0x01; + case SDLK_t: return 0x11; + case SDLK_u: return 0x20; + case SDLK_v: return 0x09; + case SDLK_w: return 0x0d; + case SDLK_x: return 0x07; + case SDLK_y: return 0x10; + case SDLK_z: return 0x06; + + case SDLK_1: case SDLK_EXCLAIM: return 0x12; + case SDLK_2: case SDLK_AT: return 0x13; + case SDLK_3: case SDLK_HASH: return 0x14; + case SDLK_4: case SDLK_DOLLAR: return 0x15; + case SDLK_5: return 0x17; + case SDLK_6: return 0x16; + case SDLK_7: return 0x1a; + case SDLK_8: return 0x1c; + case SDLK_9: return 0x19; + case SDLK_0: return 0x1d; + + case SDLK_BACKQUOTE: case 167: return 0x32; + case SDLK_MINUS: case SDLK_UNDERSCORE: return 0x1b; + case SDLK_EQUALS: case SDLK_PLUS: return 0x18; + case SDLK_LEFTBRACKET: return 0x21; + case SDLK_RIGHTBRACKET: return 0x1e; + case SDLK_BACKSLASH: return 0x2a; + case SDLK_SEMICOLON: case SDLK_COLON: return 0x29; + case SDLK_QUOTE: case SDLK_QUOTEDBL: return 0x27; + case SDLK_COMMA: case SDLK_LESS: return 0x2b; + case SDLK_PERIOD: case SDLK_GREATER: return 0x2f; + case SDLK_SLASH: case SDLK_QUESTION: return 0x2c; + + case SDLK_TAB: if (is_hotkey_down(ks)) {if (!key_down) drv->suspend(); return CODE_HOTKEY;} else return 0x30; + case SDLK_RETURN: if (is_hotkey_down(ks)) {if (!key_down) toggle_fullscreen = true; return CODE_HOTKEY;} else return 0x24; + case SDLK_SPACE: return 0x31; + case SDLK_BACKSPACE: return 0x33; + + case SDLK_DELETE: return 0x75; + case SDLK_INSERT: return 0x72; + case SDLK_HOME: case SDLK_HELP: return 0x73; + case SDLK_END: return 0x77; + case SDLK_PAGEUP: return 0x74; + case SDLK_PAGEDOWN: return 0x79; + + case SDLK_LCTRL: return 0x36; + case SDLK_RCTRL: return 0x36; + case SDLK_LSHIFT: return 0x38; + case SDLK_RSHIFT: return 0x38; +#ifdef __APPLE__ + case SDLK_LALT: return 0x3a; + case SDLK_RALT: return 0x3a; + case SDLK_LGUI: return 0x37; + case SDLK_RGUI: return 0x37; +#else + case SDLK_LALT: return 0x37; + case SDLK_RALT: return 0x37; + case SDLK_LGUI: return 0x3a; + case SDLK_RGUI: return 0x3a; +#endif + case SDLK_MENU: return 0x32; + case SDLK_CAPSLOCK: return 0x39; + case SDLK_NUMLOCKCLEAR: return 0x47; + + case SDLK_UP: return 0x3e; + case SDLK_DOWN: return 0x3d; + case SDLK_LEFT: return 0x3b; + case SDLK_RIGHT: return 0x3c; + + case SDLK_ESCAPE: if (is_hotkey_down(ks)) {if (!key_down) { quit_full_screen = true; emerg_quit = true; } return CODE_HOTKEY;} else return 0x35; + + case SDLK_F1: if (is_hotkey_down(ks)) {if (!key_down) SysMountFirstFloppy(); return CODE_HOTKEY;} else return 0x7a; + case SDLK_F2: return 0x78; + case SDLK_F3: return 0x63; + case SDLK_F4: return 0x76; + case SDLK_F5: return 0x60; + case SDLK_F6: return 0x61; + case SDLK_F7: return 0x62; + case SDLK_F8: return 0x64; + case SDLK_F9: return 0x65; + case SDLK_F10: return 0x6d; + case SDLK_F11: return 0x67; + case SDLK_F12: return 0x6f; + + case SDLK_PRINTSCREEN: return 0x69; + case SDLK_SCROLLLOCK: return 0x6b; + case SDLK_PAUSE: return 0x71; + + case SDLK_KP_0: return 0x52; + case SDLK_KP_1: return 0x53; + case SDLK_KP_2: return 0x54; + case SDLK_KP_3: return 0x55; + case SDLK_KP_4: return 0x56; + case SDLK_KP_5: return 0x57; + case SDLK_KP_6: return 0x58; + case SDLK_KP_7: return 0x59; + case SDLK_KP_8: return 0x5b; + case SDLK_KP_9: return 0x5c; + case SDLK_KP_PERIOD: return 0x41; + case SDLK_KP_PLUS: return 0x45; + case SDLK_KP_MINUS: return 0x4e; + case SDLK_KP_MULTIPLY: return 0x43; + case SDLK_KP_DIVIDE: return 0x4b; + case SDLK_KP_ENTER: return 0x4c; + case SDLK_KP_EQUALS: return 0x51; + } + D(bug("Unhandled SDL keysym: %d\n", ks.sym)); + return CODE_INVALID; +} + +static int event2keycode(SDL_KeyboardEvent const &ev, bool key_down) +{ + return kc_decode(ev.keysym, key_down); +} + +static void force_complete_window_refresh() +{ + if (display_type == DISPLAY_WINDOW) { +#ifdef ENABLE_VOSF + if (use_vosf) { // VOSF refresh + LOCK_VOSF; + PFLAG_SET_ALL; + UNLOCK_VOSF; + } +#endif + // Ensure each byte of the_buffer_copy differs from the_buffer to force a full update. + const VIDEO_MODE &mode = VideoMonitors[0]->get_current_mode(); + const int len = VIDEO_MODE_ROW_BYTES * VIDEO_MODE_Y; + for (int i = 0; i < len; i++) + the_buffer_copy[i] = !the_buffer[i]; + } +} + +/* + * SDL event handling + */ + +// possible return codes for SDL-registered event watches +enum { + EVENT_DROP_FROM_QUEUE = 0, + EVENT_ADD_TO_QUEUE = 1 +}; + +// Some events need to be processed in the host-app's main thread, due to +// host-OS requirements. +// +// This function is called by SDL, whenever it generates an SDL_Event. It has +// the ability to process events, and optionally, to prevent them from being +// added to SDL's event queue (and retrieve-able via SDL_PeepEvents(), etc.) +static int SDLCALL on_sdl_event_generated(void *userdata, SDL_Event * event) +{ + switch (event->type) { + case SDL_KEYUP: { + SDL_Keysym const & ks = event->key.keysym; + switch (ks.sym) { + case SDLK_F5: { + if (is_hotkey_down(ks) && !PrefsFindBool("hardcursor")) { + drv->toggle_mouse_grab(); + return EVENT_DROP_FROM_QUEUE; + } + } break; + } + } break; + + case SDL_WINDOWEVENT: { + switch (event->window.event) { + case SDL_WINDOWEVENT_RESIZED: { + // Handle changes of fullscreen. This is done here, in + // on_sdl_event_generated() and not the main SDL_Event-processing + // loop, in order to perform this change on the main thread. + // (Some os'es UI APIs, such as OSX's NSWindow, are not + // thread-safe.) + const bool is_full = is_fullscreen(sdl_window); + const bool adjust_fullscreen = \ + (display_type == DISPLAY_WINDOW && is_full) || + (display_type == DISPLAY_SCREEN && !is_full); + if (adjust_fullscreen) { + do_toggle_fullscreen(); + +#if __MACOSX__ + // HACK-FIX: on OSX hosts, make sure that the OSX menu + // bar does not show up in fullscreen mode, when the + // cursor is near the top of the screen, lest the + // guest OS' menu bar be obscured. + if (is_full) { + extern void set_menu_bar_visible_osx(bool); + set_menu_bar_visible_osx(false); + } +#endif + } + } break; + } + } break; + } + + return EVENT_ADD_TO_QUEUE; +} + + +static void handle_events(void) +{ + SDL_Event events[10]; + const int n_max_events = sizeof(events) / sizeof(events[0]); + int n_events; + + while ((n_events = SDL_PeepEvents(events, n_max_events, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) > 0) { + for (int i = 0; i < n_events; i++) { + SDL_Event & event = events[i]; + + switch (event.type) { + + // Mouse button + case SDL_MOUSEBUTTONDOWN: { + unsigned int button = event.button.button; + if (button == SDL_BUTTON_LEFT) + ADBMouseDown(0); + else if (button == SDL_BUTTON_RIGHT) + ADBMouseDown(1); + else if (button == SDL_BUTTON_MIDDLE) + ADBMouseDown(2); + break; + } + case SDL_MOUSEBUTTONUP: { + unsigned int button = event.button.button; + if (button == SDL_BUTTON_LEFT) + ADBMouseUp(0); + else if (button == SDL_BUTTON_RIGHT) + ADBMouseUp(1); + else if (button == SDL_BUTTON_MIDDLE) + ADBMouseUp(2); + break; + } + + // Mouse moved + case SDL_MOUSEMOTION: + if (mouse_grabbed) { + drv->mouse_moved(event.motion.xrel, event.motion.yrel); + } else { + drv->mouse_moved(event.motion.x, event.motion.y); + } + break; + + case SDL_MOUSEWHEEL: + if (!event.wheel.y) break; + if (!mouse_wheel_mode) { + int key = event.wheel.y < 0 ? 0x79 : 0x74; // Page up/down + ADBKeyDown(key); + ADBKeyUp(key); + } + else { + int key = event.wheel.y < 0 ? 0x3d : 0x3e; // Cursor up/down + for (int i = 0; i < mouse_wheel_lines; i++) { + ADBKeyDown(key); + ADBKeyUp(key); + } + } + break; + + // Keyboard + case SDL_KEYDOWN: { + int code = CODE_INVALID; + if (use_keycodes && event2keycode(event.key, true) != CODE_HOTKEY) + code = keycode_table[event.key.keysym.scancode & 0xff]; + if (code == CODE_INVALID) + code = event2keycode(event.key, true); + if (code >= 0) { + if (!emul_suspended) { +#ifdef WIN32 + if (code == 0x39) + (SDL_GetModState() & KMOD_CAPS ? ADBKeyDown : ADBKeyUp)(code); + else + ADBKeyDown(code); +#else + ADBKeyDown(code); +#endif + if (code == 0x36) + ctrl_down = true; +#ifdef __APPLE__ + if (code == 0x3a) + opt_down = true; + if (code == 0x37) + cmd_down = true; +#else + if (code == 0x37) + opt_down = true; + if (code == 0x3a) + cmd_down = true; +#endif + + } else { + if (code == 0x31) + drv->resume(); // Space wakes us up + } + } + break; + } + case SDL_KEYUP: { + int code = CODE_INVALID; + if (use_keycodes && event2keycode(event.key, false) != CODE_HOTKEY) + code = keycode_table[event.key.keysym.scancode & 0xff]; + if (code == CODE_INVALID) + code = event2keycode(event.key, false); + if (code >= 0) { +#ifdef WIN32 + if (code != 0x39) + ADBKeyUp(code); +#else + ADBKeyUp(code); +#endif + if (code == 0x36) + ctrl_down = false; +#ifdef __APPLE__ + if (code == 0x3a) + opt_down = false; + if (code == 0x37) + cmd_down = false; +#else + if (code == 0x37) + opt_down = false; + if (code == 0x3a) + cmd_down = false; +#endif + } + break; + } + + case SDL_WINDOWEVENT: { + switch (event.window.event) { + // Hidden parts exposed, force complete refresh of window + case SDL_WINDOWEVENT_EXPOSED: + force_complete_window_refresh(); + break; + + // Force a complete window refresh when activating, to avoid redraw artifacts otherwise. + case SDL_WINDOWEVENT_RESTORED: + force_complete_window_refresh(); + break; + + } + break; + } + + // Window "close" widget clicked + case SDL_QUIT: + if (SDL_GetModState() & (KMOD_LALT | KMOD_RALT)) break; + ADBKeyDown(0x7f); // Power key + ADBKeyUp(0x7f); + break; + } + } + } +} + + +/* + * Window display update + */ + +// Static display update (fixed frame rate, but incremental) +static void update_display_static(driver_base *drv) +{ + // Incremental update code + int wide = 0, high = 0; + uint32 x1, x2, y1, y2; + const VIDEO_MODE &mode = drv->mode; + int bytes_per_row = VIDEO_MODE_ROW_BYTES; + uint8 *p, *p2; + + // Check for first line from top and first line from bottom that have changed + y1 = 0; + for (uint32 j = 0; j < VIDEO_MODE_Y; j++) { + if (memcmp(&the_buffer[j * bytes_per_row], &the_buffer_copy[j * bytes_per_row], bytes_per_row)) { + y1 = j; + break; + } + } + y2 = y1 - 1; + for (uint32 j = VIDEO_MODE_Y; j-- > y1; ) { + if (memcmp(&the_buffer[j * bytes_per_row], &the_buffer_copy[j * bytes_per_row], bytes_per_row)) { + y2 = j; + break; + } + } + high = y2 - y1 + 1; + + // Check for first column from left and first column from right that have changed + if (high) { + if ((int)VIDEO_MODE_DEPTH < (int)VIDEO_DEPTH_8BIT) { + const int src_bytes_per_row = bytes_per_row; + const int dst_bytes_per_row = drv->s->pitch; + const int pixels_per_byte = VIDEO_MODE_X / src_bytes_per_row; + + x1 = VIDEO_MODE_X / pixels_per_byte; + for (uint32 j = y1; j <= y2; j++) { + p = &the_buffer[j * bytes_per_row]; + p2 = &the_buffer_copy[j * bytes_per_row]; + for (uint32 i = 0; i < x1; i++) { + if (*p != *p2) { + x1 = i; + break; + } + p++; p2++; + } + } + x2 = x1; + for (uint32 j = y1; j <= y2; j++) { + p = &the_buffer[j * bytes_per_row]; + p2 = &the_buffer_copy[j * bytes_per_row]; + p += bytes_per_row; + p2 += bytes_per_row; + for (uint32 i = (VIDEO_MODE_X / pixels_per_byte); i > x2; i--) { + p--; p2--; + if (*p != *p2) { + x2 = i; + break; + } + } + } + x1 *= pixels_per_byte; + x2 *= pixels_per_byte; + wide = (x2 - x1 + pixels_per_byte - 1) & -pixels_per_byte; + + // Update copy of the_buffer + if (high && wide) { + + // Lock surface, if required + if (SDL_MUSTLOCK(drv->s)) + SDL_LockSurface(drv->s); + + // Blit to screen surface + int si = y1 * src_bytes_per_row + (x1 / pixels_per_byte); + int di = y1 * dst_bytes_per_row + x1; + for (uint32 j = y1; j <= y2; j++) { + memcpy(the_buffer_copy + si, the_buffer + si, wide / pixels_per_byte); + Screen_blit((uint8 *)drv->s->pixels + di, the_buffer + si, wide / pixels_per_byte); + si += src_bytes_per_row; + di += dst_bytes_per_row; + } + + // Unlock surface, if required + if (SDL_MUSTLOCK(drv->s)) + SDL_UnlockSurface(drv->s); + + // Refresh display + update_sdl_video(drv->s, x1, y1, wide, high); + } + + } else { + const int bytes_per_pixel = VIDEO_MODE_ROW_BYTES / VIDEO_MODE_X; + const int dst_bytes_per_row = drv->s->pitch; + + x1 = VIDEO_MODE_X; + for (uint32 j = y1; j <= y2; j++) { + p = &the_buffer[j * bytes_per_row]; + p2 = &the_buffer_copy[j * bytes_per_row]; + for (uint32 i = 0; i < x1 * bytes_per_pixel; i++) { + if (*p != *p2) { + x1 = i / bytes_per_pixel; + break; + } + p++; p2++; + } + } + x2 = x1; + for (uint32 j = y1; j <= y2; j++) { + p = &the_buffer[j * bytes_per_row]; + p2 = &the_buffer_copy[j * bytes_per_row]; + p += bytes_per_row; + p2 += bytes_per_row; + for (uint32 i = VIDEO_MODE_X * bytes_per_pixel; i > x2 * bytes_per_pixel; i--) { + p--; + p2--; + if (*p != *p2) { + x2 = i / bytes_per_pixel; + break; + } + } + } + wide = x2 - x1; + + // Update copy of the_buffer + if (high && wide) { + + // Lock surface, if required + if (SDL_MUSTLOCK(drv->s)) + SDL_LockSurface(drv->s); + + // Blit to screen surface + for (uint32 j = y1; j <= y2; j++) { + uint32 i = j * bytes_per_row + x1 * bytes_per_pixel; + int dst_i = j * dst_bytes_per_row + x1 * bytes_per_pixel; + memcpy(the_buffer_copy + i, the_buffer + i, bytes_per_pixel * wide); + Screen_blit((uint8 *)drv->s->pixels + dst_i, the_buffer + i, bytes_per_pixel * wide); + } + + // Unlock surface, if required + if (SDL_MUSTLOCK(drv->s)) + SDL_UnlockSurface(drv->s); + + // Refresh display + update_sdl_video(drv->s, x1, y1, wide, high); + } + } + } +} + +// Static display update (fixed frame rate, bounding boxes based) +// XXX use NQD bounding boxes to help detect dirty areas? +static void update_display_static_bbox(driver_base *drv) +{ + const VIDEO_MODE &mode = drv->mode; + + // Allocate bounding boxes for SDL_UpdateRects() + const uint32 N_PIXELS = 64; + const uint32 n_x_boxes = (VIDEO_MODE_X + N_PIXELS - 1) / N_PIXELS; + const uint32 n_y_boxes = (VIDEO_MODE_Y + N_PIXELS - 1) / N_PIXELS; + SDL_Rect *boxes = (SDL_Rect *)alloca(sizeof(SDL_Rect) * n_x_boxes * n_y_boxes); + uint32 nr_boxes = 0; + + // Lock surface, if required + if (SDL_MUSTLOCK(drv->s)) + SDL_LockSurface(drv->s); + + // Update the surface from Mac screen + const uint32 bytes_per_row = VIDEO_MODE_ROW_BYTES; + const uint32 bytes_per_pixel = bytes_per_row / VIDEO_MODE_X; + const uint32 dst_bytes_per_row = drv->s->pitch; + for (uint32 y = 0; y < VIDEO_MODE_Y; y += N_PIXELS) { + uint32 h = N_PIXELS; + if (h > VIDEO_MODE_Y - y) + h = VIDEO_MODE_Y - y; + for (uint32 x = 0; x < VIDEO_MODE_X; x += N_PIXELS) { + uint32 w = N_PIXELS; + if (w > VIDEO_MODE_X - x) + w = VIDEO_MODE_X - x; + const int xs = w * bytes_per_pixel; + const int xb = x * bytes_per_pixel; + bool dirty = false; + for (uint32 j = y; j < (y + h); j++) { + const uint32 yb = j * bytes_per_row; + const uint32 dst_yb = j * dst_bytes_per_row; + if (memcmp(&the_buffer[yb + xb], &the_buffer_copy[yb + xb], xs) != 0) { + memcpy(&the_buffer_copy[yb + xb], &the_buffer[yb + xb], xs); + Screen_blit((uint8 *)drv->s->pixels + dst_yb + xb, the_buffer + yb + xb, xs); + dirty = true; + } + } + if (dirty) { + boxes[nr_boxes].x = x; + boxes[nr_boxes].y = y; + boxes[nr_boxes].w = w; + boxes[nr_boxes].h = h; + nr_boxes++; + } + } + } + + // Unlock surface, if required + if (SDL_MUSTLOCK(drv->s)) + SDL_UnlockSurface(drv->s); + + // Refresh display + if (nr_boxes) + update_sdl_video(drv->s, nr_boxes, boxes); +} + + +// We suggest the compiler to inline the next two functions so that it +// may specialise the code according to the current screen depth and +// display type. A clever compiler would do that job by itself though... + +// NOTE: update_display_vosf is inlined too + +static inline void possibly_quit_dga_mode() +{ + // Quit DGA mode if requested (something terrible has happened and we + // want to give control back to the user) + if (quit_full_screen) { + quit_full_screen = false; + delete drv; + drv = NULL; + } +} + +static inline void possibly_ungrab_mouse() +{ + // Ungrab mouse if requested (something terrible has happened and we + // want to give control back to the user) + if (quit_full_screen) { + quit_full_screen = false; + if (drv) + drv->ungrab_mouse(); + } +} + +static inline void handle_palette_changes(void) +{ + LOCK_PALETTE; + + if (sdl_palette_changed) { + sdl_palette_changed = false; + drv->update_palette(); + } + + UNLOCK_PALETTE; +} + +static void video_refresh_window_static(void); + +static void video_refresh_dga(void) +{ + // Quit DGA mode if requested + possibly_quit_dga_mode(); + video_refresh_window_static(); +} + +#ifdef ENABLE_VOSF +#if REAL_ADDRESSING || DIRECT_ADDRESSING +static void video_refresh_dga_vosf(void) +{ + // Quit DGA mode if requested + possibly_quit_dga_mode(); + + // Update display (VOSF variant) + static uint32 tick_counter = 0; + if (++tick_counter >= frame_skip) { + tick_counter = 0; + if (mainBuffer.dirty) { + LOCK_VOSF; + update_display_dga_vosf(drv); + UNLOCK_VOSF; + } + } +} +#endif + +static void video_refresh_window_vosf(void) +{ + // Ungrab mouse if requested + possibly_ungrab_mouse(); + + // Update display (VOSF variant) + static uint32 tick_counter = 0; + if (++tick_counter >= frame_skip) { + tick_counter = 0; + if (mainBuffer.dirty) { + LOCK_VOSF; + update_display_window_vosf(drv); + UNLOCK_VOSF; + } + } +} +#endif // def ENABLE_VOSF + +static void video_refresh_window_static(void) +{ + // Ungrab mouse if requested + possibly_ungrab_mouse(); + + // Update display (static variant) + static uint32 tick_counter = 0; + if (++tick_counter >= frame_skip) { + tick_counter = 0; + const VIDEO_MODE &mode = drv->mode; + if ((int)VIDEO_MODE_DEPTH >= VIDEO_DEPTH_8BIT) + update_display_static_bbox(drv); + else + update_display_static(drv); + } +} + + +/* + * Thread for screen refresh, input handling etc. + */ + +static void VideoRefreshInit(void) +{ + // TODO: set up specialised 8bpp VideoRefresh handlers ? + if (display_type == DISPLAY_SCREEN) { +#if ENABLE_VOSF && (REAL_ADDRESSING || DIRECT_ADDRESSING) + if (use_vosf) + video_refresh = video_refresh_dga_vosf; + else +#endif + video_refresh = video_refresh_dga; + } + else { +#ifdef ENABLE_VOSF + if (use_vosf) + video_refresh = video_refresh_window_vosf; + else +#endif + video_refresh = video_refresh_window_static; + } +} + +static inline void do_video_refresh(void) +{ + // Handle SDL events + handle_events(); + + // Update display + video_refresh(); + + + // Set new palette if it was changed + handle_palette_changes(); +} + +// This function is called on non-threaded platforms from a timer interrupt +void VideoRefresh(void) +{ + // We need to check redraw_thread_active to inhibit refreshed during + // mode changes on non-threaded platforms + if (!redraw_thread_active) + return; + + // Process pending events and update display + do_video_refresh(); +} + +const int VIDEO_REFRESH_HZ = 60; +const int VIDEO_REFRESH_DELAY = 1000000 / VIDEO_REFRESH_HZ; + +#ifndef USE_CPU_EMUL_SERVICES +static int redraw_func(void *arg) +{ + uint64 start = GetTicks_usec(); + int64 ticks = 0; + uint64 next = GetTicks_usec() + VIDEO_REFRESH_DELAY; + + while (!redraw_thread_cancel) { + + // Wait + next += VIDEO_REFRESH_DELAY; + int32 delay = int32(next - GetTicks_usec()); + if (delay > 0) + Delay_usec(delay); + else if (delay < -VIDEO_REFRESH_DELAY) + next = GetTicks_usec(); + ticks++; + + // Pause if requested (during video mode switches) + if (thread_stop_req) { + thread_stop_ack = true; + continue; + } + + // Process pending events and update display + do_video_refresh(); + } + + uint64 end = GetTicks_usec(); + D(bug("%lld refreshes in %lld usec = %f refreshes/sec\n", ticks, end - start, ticks * 1000000.0 / (end - start))); + return 0; +} +#endif + + +/* + * Record dirty area from NQD + */ + +#ifdef SHEEPSHAVER +void video_set_dirty_area(int x, int y, int w, int h) +{ +#ifdef ENABLE_VOSF + const VIDEO_MODE &mode = drv->mode; + const unsigned screen_width = VIDEO_MODE_X; + const unsigned screen_height = VIDEO_MODE_Y; + const unsigned bytes_per_row = VIDEO_MODE_ROW_BYTES; + + if (use_vosf) { + vosf_set_dirty_area(x, y, w, h, screen_width, screen_height, bytes_per_row); + return; + } +#endif + + // XXX handle dirty bounding boxes for non-VOSF modes +} +#endif + +#endif // ends: ifdef ENABLE_SDL2 diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index 2f233d7a..fee8b577 100644 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -36,6 +36,7 @@ AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphi AC_ARG_ENABLE(sdl-audio, [ --enable-sdl-audio use SDL for audio [default=no]], [WANT_SDL_AUDIO=$enableval], [WANT_SDL_AUDIO=no]) AC_ARG_ENABLE(sdl-framework, [ --enable-sdl-framework use SDL framework [default=no]], [WANT_SDL_FRAMEWORK=$enableval], [WANT_SDL_FRAMEWORK=no]) AC_ARG_ENABLE(sdl-framework-prefix, [ --enable-sdl-framework-prefix=PFX default=/Library/Frameworks], [SDL_FRAMEWORK="$enableval"], [SDL_FRAMEWORK=/Library/Frameworks]) +AC_ARG_WITH(sdl2, [ --with-sdl2 use SDL 2.x, rather than SDL 1.x [default=no]], [WANT_SDL_VERSION_MAJOR=2], [WANT_SDL_VERSION_MAJOR=1]) dnl JIT compiler options. AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=no]], [WANT_JIT=$enableval], [WANT_JIT=no]) @@ -255,7 +256,7 @@ AC_CHECK_LIB(rt, timer_create) AC_CHECK_LIB(rt, shm_open) AC_CHECK_LIB(m, cos) -dnl AC_CHECK_SDLFRAMEWORK($1=NAME, $2=INCLUDES) +dnl AC_CHECK_SDLFRAMEWORK($1=NAME, $2=INCLUDES, $3=ACTION_IF_SUCCESSFUL, $4=ACTION_IF_UNSUCCESSFUL) dnl AC_TRY_LINK uses main() but SDL needs main to take args, dnl therefore main is undefined with #undef. dnl Framework can be in an custom location. @@ -265,18 +266,16 @@ AC_DEFUN([AC_CHECK_SDLFRAMEWORK], [ ac_Framework, [ saved_LIBS="$LIBS" LIBS="$LIBS -framework $1" - if [[ "x$SDL_FRAMEWORK" != "x/Library/Frameworks" ]]; then - if [[ "x$SDL_FRAMEWORK" != "x/System/Library/Frameworks" ]]; then - LIBS="$saved_LIBS -F$SDL_FRAMEWORK -framework $1" - fi + if [[ "x$SDL_FRAMEWORK" != "x/System/Library/Frameworks" ]]; then + LIBS="$saved_LIBS -F$SDL_FRAMEWORK -framework $1" fi saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I$SDL_FRAMEWORK/SDL.framework/Headers" + CPPFLAGS="$CPPFLAGS -I$SDL_FRAMEWORK/$1.framework/Headers" AC_TRY_LINK( [$2 #undef main], [], - [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); -LIBS="$saved_LIBS"; CPPFLAGS="$saved_CPPFLAGS"] + [AS_VAR_SET(ac_Framework, yes); $3], [AS_VAR_SET(ac_Framework, no); +LIBS="$saved_LIBS"; CPPFLAGS="$saved_CPPFLAGS"; $4] ) ]) AS_IF([test AS_VAR_GET(ac_Framework) = yes], @@ -300,27 +299,66 @@ if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then fi if [[ "x$WANT_SDL" = "xyes" ]]; then if [[ "x$WANT_SDL_FRAMEWORK" = "xyes" ]]; then - AC_CHECK_SDLFRAMEWORK(SDL, [#include ]) + TEMP_WANT_SDL_VERSION_MAJOR=$WANT_SDL_VERSION_MAJOR + if [[ "x$TEMP_WANT_SDL_VERSION_MAJOR" = "x" ]]; then + TEMP_WANT_SDL_VERSION_MAJOR=2 + fi + if [[ "x$TEMP_WANT_SDL_VERSION_MAJOR" = "x2" ]]; then + AC_CHECK_SDLFRAMEWORK(SDL2, [#include ], [ + WANT_SDL_VERSION_MAJOR=2 + ], [ + TEMP_WANT_SDL_VERSION_MAJOR=1 + ]) + fi + if [[ "x$TEMP_WANT_SDL_VERSION_MAJOR" = "x1" ]]; then + AC_CHECK_SDLFRAMEWORK(SDL, [#include ], [ + WANT_SDL_VERSION_MAJOR=1 + ]) + fi else ac_cv_framework_SDL=no fi if [[ "x$ac_cv_framework_SDL" = "xno" ]]; then - AC_PATH_PROG(sdl_config, "sdl-config") - if [[ -n "$sdl_config" ]]; then - sdl_cflags=`$sdl_config --cflags` - if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then - sdl_libs=`$sdl_config --static-libs` + if [[ "x$WANT_SDL_VERSION_MAJOR" = "x1" ]]; then + AC_DEFINE(ENABLE_SDL1, 1, [Define if using SDL1.]) + AC_PATH_PROG(sdl_config, "sdl-config") + if [[ -n "$sdl_config" ]]; then + sdl_cflags=`$sdl_config --cflags` + if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then + sdl_libs=`$sdl_config --static-libs` + else + sdl_libs=`$sdl_config --libs` + fi + CFLAGS="$CFLAGS $sdl_cflags" + CXXFLAGS="$CXXFLAGS $sdl_cflags" + LIBS="$LIBS $sdl_libs" else - sdl_libs=`$sdl_config --libs` + WANT_SDL=no + WANT_SDL_VIDEO=no + WANT_SDL_AUDIO=no + SDL_SUPPORT="none" + fi + fi + + if [[ "x$WANT_SDL_VERSION_MAJOR" = "x2" ]]; then + AC_DEFINE(ENABLE_SDL2, 1, [Define if using SDL2.]) + AC_PATH_PROG(sdl_config, "sdl2-config") + if [[ -n "$sdl_config" ]]; then + sdl_cflags=`$sdl_config --cflags` + if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then + sdl_libs=`$sdl_config --static-libs` + else + sdl_libs=`$sdl_config --libs` + fi + CFLAGS="$CFLAGS $sdl_cflags" + CXXFLAGS="$CXXFLAGS $sdl_cflags" + LIBS="$LIBS $sdl_libs" + else + WANT_SDL=no + WANT_SDL_VIDEO=no + WANT_SDL_AUDIO=no + SDL_SUPPORT="none" fi - CFLAGS="$CFLAGS $sdl_cflags" - CXXFLAGS="$CXXFLAGS $sdl_cflags" - LIBS="$LIBS $sdl_libs" - else - WANT_SDL=no - WANT_SDL_VIDEO=no - WANT_SDL_AUDIO=no - SDL_SUPPORT="none" fi fi SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"` @@ -448,7 +486,7 @@ if [[ "x$WANT_GTK" = "xgtk" ]]; then dnl somehow, would redefine gettext() to nothing if dnl ENABLE_NLS is not set, thusly conflicting with C++ which dnl includes - AM_GNU_GETTEXT + AM_GNU_GETTEXT([external]) B2_PATH_GNOMEUI([ AC_DEFINE(HAVE_GNOMEUI, 1, [Define if libgnomeui is available.]) GUI_CFLAGS="$GUI_CFLAGS $GNOMEUI_CFLAGS" @@ -837,7 +875,7 @@ if [[ "x$WANT_SDL" = "xyes" ]]; then fi if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support]) - VIDEOSRCS="../SDL/video_sdl.cpp" + VIDEOSRCS="../SDL/video_sdl.cpp ../SDL/video_sdl2.cpp" KEYCODES="../SDL/keycodes" if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then AC_MSG_CHECKING([whether __LP64__ is defined]) @@ -863,6 +901,9 @@ if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then EXTRASYSSRCS="$EXTRASYSSRCS ../dummy/clip_dummy.cpp" ;; esac + if [[ "$WANT_GTK" != "no" ]]; then + LIBS="$LIBS -lX11" + fi fi elif [[ "x$WANT_MACOSX_GUI" != "xyes" ]]; then VIDEOSRCS="video_x.cpp" @@ -1863,6 +1904,7 @@ echo echo Mac OS X GUI ........................... : $WANT_MACOSX_GUI echo Mac OS X Sound ......................... : $WANT_MACOSX_SOUND echo SDL support ............................ : $SDL_SUPPORT +echo SDL major-version ...................... : $WANT_SDL_VERSION_MAJOR echo BINCUE support ......................... : $have_bincue echo LIBVHD support ......................... : $have_libvhd echo VDE support ............................ : $have_vdeplug diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp index 0a888ccd..03ef32a2 100644 --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -28,6 +28,7 @@ #ifdef USE_SDL # include +# include #endif #ifndef USE_SDL_VIDEO @@ -62,6 +63,9 @@ struct sigstate { # ifdef HAVE_GNOMEUI # include # endif +# if !defined(GDK_WINDOWING_QUARTZ) && !defined(GDK_WINDOWING_WAYLAND) +# include +# endif #endif #ifdef ENABLE_XF86_DGA @@ -386,6 +390,9 @@ static void usage(const char *prg_name) int main(int argc, char **argv) { +#if defined(ENABLE_GTK) && !defined(GDK_WINDOWING_QUARTZ) && !defined(GDK_WINDOWING_WAYLAND) + XInitThreads(); +#endif const char *vmdir = NULL; char str[256]; @@ -448,6 +455,19 @@ int main(int argc, char **argv) vde_sock = argv[i]; argv[i] = NULL; } + +#if defined(__APPLE__) && defined(__MACH__) + // Mac OS X likes to pass in various options of its own, when launching an app. + // Attempt to ignore these. + if (argv[i]) { + const char * mac_psn_prefix = "-psn_"; + if (strcmp(argv[i], "-NSDocumentRevisionsDebugMode") == 0) { + argv[i] = NULL; + } else if (strncmp(mac_psn_prefix, argv[i], strlen(mac_psn_prefix)) == 0) { + argv[i] = NULL; + } + } +#endif } // Remove processed arguments @@ -531,6 +551,18 @@ int main(int argc, char **argv) QuitEmulator(); } atexit(SDL_Quit); + +#if __MACOSX__ && SDL_VERSION_ATLEAST(2,0,0) + // On Mac OS X hosts, SDL2 will create its own menu bar. This is mostly OK, + // except that it will also install keyboard shortcuts, such as Command + Q, + // which can interfere with keyboard shortcuts in the guest OS. + // + // HACK: disable these shortcuts, while leaving all other pieces of SDL2's + // menu bar in-place. + extern void disable_SDL2_macosx_menu_bar_keyboard_shortcuts(); + disable_SDL2_macosx_menu_bar_keyboard_shortcuts(); +#endif + #endif // Init system routines @@ -643,6 +675,11 @@ int main(int argc, char **argv) D(bug("Mac RAM starts at %p (%08x)\n", RAMBaseHost, RAMBaseMac)); D(bug("Mac ROM starts at %p (%08x)\n", ROMBaseHost, ROMBaseMac)); +#if __MACOSX__ + extern void set_current_directory(); + set_current_directory(); +#endif + // Get rom file path from preferences const char *rom_path = PrefsFindString("rom"); diff --git a/BasiliskII/src/include/user_strings.h b/BasiliskII/src/include/user_strings.h index 9da57e2c..6ac31da9 100644 --- a/BasiliskII/src/include/user_strings.h +++ b/BasiliskII/src/include/user_strings.h @@ -243,6 +243,11 @@ enum { STR_WINDOW_TITLE = 4000, STR_WINDOW_TITLE_FROZEN, STR_WINDOW_TITLE_GRABBED, + STR_WINDOW_TITLE_GRABBED0, + STR_WINDOW_TITLE_GRABBED1, + STR_WINDOW_TITLE_GRABBED2, + STR_WINDOW_TITLE_GRABBED3, + STR_WINDOW_TITLE_GRABBED4, STR_WINDOW_MENU = 4050, STR_WINDOW_ITEM_ABOUT, STR_WINDOW_ITEM_REFRESH, diff --git a/BasiliskII/src/user_strings.cpp b/BasiliskII/src/user_strings.cpp index 2cb9a15e..a9de2b6c 100644 --- a/BasiliskII/src/user_strings.cpp +++ b/BasiliskII/src/user_strings.cpp @@ -241,6 +241,7 @@ user_string_def common_strings[] = { {STR_CPU_68040_LAB, "68040"}, {STR_ROM_FILE_CTRL, "ROM File"}, {STR_IDLEWAIT_CTRL, "Don't Use CPU When Idle"}, + {STR_JIT_PANE_TITLE, "JIT Compiler"}, {STR_JIT_CTRL, "Enable JIT Compiler"}, {STR_JIT_FPU_CTRL, "Compile FPU Instructions"}, @@ -255,6 +256,16 @@ user_string_def common_strings[] = { {STR_WINDOW_TITLE, "Basilisk II"}, {STR_WINDOW_TITLE_FROZEN, "Basilisk II *** FROZEN ***"}, {STR_WINDOW_TITLE_GRABBED, "Basilisk II (mouse grabbed, press Ctrl-F5 to release)"}, + {STR_WINDOW_TITLE_GRABBED0, "Basilisk II (mouse grabbed, press "}, + {STR_WINDOW_TITLE_GRABBED1, "Ctrl-"}, +#ifdef __APPLE__ + {STR_WINDOW_TITLE_GRABBED2, "Opt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Cmd-"}, +#else + {STR_WINDOW_TITLE_GRABBED2, "Alt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Win-"}, +#endif + {STR_WINDOW_TITLE_GRABBED4, "F5 to release)"}, {STR_WINDOW_MENU, "Basilisk II"}, {STR_WINDOW_ITEM_ABOUT, "About Basilisk II" ELLIPSIS}, {STR_WINDOW_ITEM_REFRESH, "Refresh Rate"}, From d28599f49d525128df8ae6176b74384670b73293 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Thu, 25 Jun 2020 15:50:40 -0400 Subject: [PATCH 26/54] Backport MacOSX support. - video_sdl2 for Mac OS X requires MacOSX update. Signed-off-by: Ricky Zhang --- .../AppIcon.appiconset/Contents.json | 58 + BasiliskII/src/MacOSX/BasiliskII.icns | Bin 44909 -> 633200 bytes .../BasiliskII.xcodeproj/project.pbxproj | 1164 +++++++++++++++++ .../contents.xcworkspacedata | 7 + BasiliskII/src/MacOSX/BasiliskII_keycodes | 576 ++++++++ BasiliskII/src/MacOSX/Credits.html | 6 + .../MacOSX/English.lproj/InfoPlist.strings | 2 +- BasiliskII/src/MacOSX/Info.plist | 8 +- BasiliskII/src/MacOSX/Makefile.gencpu | 27 + BasiliskII/src/MacOSX/clip_macosx.cpp | 6 +- BasiliskII/src/MacOSX/clip_macosx64.mm | 8 +- BasiliskII/src/MacOSX/config.h | 820 ++++++++++++ BasiliskII/src/MacOSX/etherhelpertool.c | 580 ++++++++ BasiliskII/src/MacOSX/extfs_macosx.cpp | 4 +- BasiliskII/src/MacOSX/runtool.c | 136 ++ BasiliskII/src/MacOSX/sys_darwin.cpp | 2 +- BasiliskII/src/MacOSX/utils_macosx.mm | 53 + 17 files changed, 3445 insertions(+), 12 deletions(-) create mode 100644 BasiliskII/src/MacOSX/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.pbxproj create mode 100644 BasiliskII/src/MacOSX/BasiliskII.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 BasiliskII/src/MacOSX/BasiliskII_keycodes create mode 100644 BasiliskII/src/MacOSX/Makefile.gencpu create mode 100644 BasiliskII/src/MacOSX/config.h create mode 100644 BasiliskII/src/MacOSX/etherhelpertool.c create mode 100644 BasiliskII/src/MacOSX/runtool.c diff --git a/BasiliskII/src/MacOSX/Assets.xcassets/AppIcon.appiconset/Contents.json b/BasiliskII/src/MacOSX/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..2db2b1c7 --- /dev/null +++ b/BasiliskII/src/MacOSX/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/BasiliskII/src/MacOSX/BasiliskII.icns b/BasiliskII/src/MacOSX/BasiliskII.icns index b26870dd94b59d5f08b0047b5e4a87fc752c8450..ba38cb1f12017c54234016d861c812258eb37f1e 100644 GIT binary patch literal 633200 zcmagFWk6d^us@st#oZlRthl>`mKHBArAVN-TX9I>p@rhbN^x4;3dKDs?oM%ccSsn+N)^6SayiyMXZ6#I!0N~(gEhGg1{OoYF78U|vg>5{Q zqW?z=Ndtg?WS(dd0DwXIsh=bOpi<@NBKkz*X}U$C&f} z-*({tw2S@U`~Sy3N=HkD2%jGRX-pzD)i-(o0Pv{_1mI#n6=q%~c2CUM9hH=H)RdH1 zb-di|99?Vy04cIBhO6$229yd>?s^5(AlCOPkhWe(>4D^+~*lNjz$LiFD`*S?( zTQZVSr3^TW`weBWcpkknTNl>&nj%TZX$_V;k_~Fhyu;lUooC(RD-LU)vTb;5D9ma z!5IE5x>u!1A)i)uRlwj%$`$ODXF(Gl#RTu}oqU9Y7-|1ZTyq@$=x39f^|2?fEuaZK zHA2+QS??v5^y@pWS*`t54=GCrXLuUzd|n=^{g6J4!IoeHD<0Vj#R&z~RkoEp8<~`m z6#Yegp<(Ro_Pg}e!tV?dU4jRZbXkjpes0&+)Xo%^A>tO_pL9di>b(>DoX|?UKzp)< zxo538Gz;HymnV-tVbcc8f!bsQcd!{3&8PJ~Hsr%q_TIc<)1v18I8&-FTcDF8lG5F- zEFs4s(*OBO*N~O)3++jAm*oKIgw4Lsu{AX9{J(SyW&5f;U;}^NgY@TtD3*`4M?wtt z6b03ibD2lD8h>T}5S4%Q21bAXIe6yViRaJ8ByR?s;vhP7Uo#nB&|CPEUwD8F8)xJE3+h)Go@`zp zFMIs;Sn5^+E}@xTm38_|CtJiG!V|*#@G^ueMDRf~`jbh^iwAb|)Q&`fXVR^w?YSIt zK~-QYisfi?hZ*NwaV~wW!JsXg?G#iSsz#2Xnz9+poLs!ses+X+GeY>l)K2>ezt-tp zeGvaS7OfZw2X;30Y_CDj=kia~CX2brMS2qby>nM=#lB`)+ux)8WpbjqRHIH~w7dH@ zL@^q3+7K29&gvq}>&IjYAsLx9S3XUSe$kC=8Be3PSNNYY$4AT|*sH|9)XIJTNeogM z&sUXIapMIKHi?+es6~C;!G=eNAy<=&UH)s#%{jq7Ivb(O!ewL)4s;W@~6fL|Ik~*F|IeV zERyu--;(sQ;1_7>3ENAM3Bc3eg@KpiNp0YHsG4{K00d8U0tz4?Ba0RQPz0#Gd1c@a zJZi`JVLt1#+IpIIs|p<*{-1m9C8+i!J*apLz;Qhdx!8PlUvScX+b-Xy`HAIzpu*I-F+87KSF=>PIffOXx!{yh?j- z!mv)7cXJ{m3F&Hv5M1|pcTTCx-xPn|@pwoU81YZq;w=U2W)I;I(O;!dF=kRf_D*So z9!dp_4fw~)|A&bMm3@7U7y0`?AA9D6t$P8F+s#+S+SxMK{fAXBi`REn&P<7cq$P5^o7RnMcQ|qw~BI?&v8)Jt*o&!Zn(bBq2kVhs(DU; zz*k>qc+@#8C2yKeP6y-K?|OTC52ix(gl{xToB(%khiA3e_B9l8j|RUUFQCEgXPpFx zEqX;6jehJp?RaytUKRg7lE1vH(YD{3A(1V0j|gO_D1+9Nm3myY=va15C&%^RLQhKlHhw2`RHtMTh=478F0&| zQhmvXj5MNvCfexRi0_>TPdwX%JQQD!Yoc_6IKoIHOi<%u$Fb*}+oBe@_1|0nRbVHQ z;M8J=V-w?zXhcran08L}d|Xf8*(mI*dKNyu$prW(MaUyZ`N2t@3snD`ycO@-;OAVM zmX&Ai)^+%blLJN76^}b_*h_Dk?8*oMEeoSYQG5EFlOcW&`r*ZS z&K&o2o!rXO`^%ZfO^yTq zXoFpy@S$^y(Zjp#H(yo{|Be00J}w{GWl^{s7De;q!aN7o7M)(NdpC$cYuH_r!kF?f zgF^*a(`*i2!_(4oM*!ICHV5(F>9Ou_>9lE-hQJFSuZf1v8-BVmgccPlL8?gc!MGHf z)XDDxH9@bZy`Oy!7-W1CoZl?>Im%t=726e$j|E2m;*-XD2P z6Aq}0V+YN}&{p2}e2Gk$Hm(2d=%5z95fQ;y!i|x;b;}X}-*%ho`b+`8A9b8RlpI1? zsxJHdJ6E1d)8V5?_rGzzz~j*6;;Z@l){J1~FK5y@C*?rl(vS9v50iw^;X~=d0&dlC zYVV#6N$fVCef{mSL#Hg)2XtY3`z?<7%RV1;bne5Ey-$iGCTfCOdKo*o-Lv8HYE@rB z^8*LcAiByR_aLI2&n*6}6G&j>hbY!}@`0l;C%tK^kycxPOL;?Ekfzuj z-S5Lk3Anwp;93yEAKHxFWH;**REyNkw3h5{2ReL{7NE=Xy4yKSTlF5?VrpHG-_cVV zH{ewe*E*zNfpDm>DAs|gBs(T$Kr7_Mh1SdLR|$s8faOa>d&=KYRxxn zVZDUH4So>y?iE?X8#VqULwg>TQrYCy1SY8L`Y-cFlX$P9o-`3miv^Dr)`F@#Upq?S zgj94F3#0!@@scFHj`b{3hZ)gv%F+I(&8)K;-&;-JJ!+}#kk5+LW79>`tY%W6n{*}~ zwNb!J1apWDa1)Un63KW@TP?UG#z)x^Xf^O{yDF#UYSHgFj)rKf=+nfOYFy%lhyiMQ zYgq)q!DRPi@pLzs4_&%B*RCJD2?HK|7b1C*H{ek)kk4I*tbIV08PJG%j)91Ha`)Em&L7-uPd%Wpi4e zVFndUg1;O>ZV*Gy`=Ai5kC9F;Qop!7N$yL*^N&*7+y&2_nD4U*Cczhz?~BZ=lzoKw zUkW|b;96lC15CYi^0&I2bh#gik&1Ptc3WJ0*_^~vYW@|{g!qzNx0GFZ`s>E-O!EFS zQD1th5>}@X#nc*V(w7bN;k*N+{%`Y=vwwZGf_vGJDKAuEMUW{dECyAP> zc8Hk{FV2Dvtig@>cR?ZzUba-T6H+NB%_B-F=)de2`?YBh%VisHzKiDbA>r@~`+(D? z&3LMC9Fj-B=)JEbVs8|k)6*9?xCi%#8~xuCWrkEo+O|Uq|t#*sU?kw9$twD-?|-dOoS2Hw&sgPE(i(QBXI>>|fF& z#hq2z%gD*PqF$1o`?sOc7Aiy6jaZf6qo_qy)&Adq(3383zdknyL{QB0G(bFFB2@8! zhRfoyGmSXX+RjkxN0$R?|2V&EPf&{%@!M7jr|t6Ya=l}2MM5Lpd1g$)P12H0jsBom zDyrZWZP;HUw{&E)oPRBC1Pwm=e!oYlH{=pgC>V00lhSBYO8){zPWYj3 zCs3JYbnM3@E@v4qjo$GJfYzy7&u`svh#3)YFa1<+#ZO3J0fFvGBx|!7X@?#klBW=B zkt2UL7&Lzt?R>9dbm9qa_ciVEB}mF=oC5}|1e}$}?oOvRM{<2G1=Gszt(!&^+LL)u zBpNbV1D$92EWbiBgxTo;xeYaw78jZfJ)ZmBu&c<^xw<^;WWzo0Qvc9tw zrRjP&pW?@aXFA--?C77{4f0DkMPU3T`;XCch2@L#8~R*C%VYUXi^av@%f#rs0#T$C z%XhHZv&;21Gu+J_q2=04hjKrQ4@eZ!zsgMfWn>BkeA7Qhi4i*F+PK_cvp4=zFmu%< zu*2%3>HbfRAeU`zcNstd^83zTrE-JkeFv>Es?O6!!I-17oGwnmGyiQVI@e_o937br zA*psR34WDnRDM6BV(V(E0)r3~k|g|XV+UGp7b6l1oizb$ijv~rOU9^;2m4XtBC*&uQpT9o$#8R>Q(i8Rj zOt5GA3l0WZJoz+A{=(K>u&p5)6Fy0Iv!TcPmkFvqK>9;6nZ91RT|$f5;cI}u zo~2lkK=7x5ZyBANqS(a2{_ab7LO5PLr6xl;^jEWPdAryE&wDEyB`bvT=WSdK)c}x{ zc3EGa&+KZZkIys?s3ZO&>Eu!)UU)^OQY?k9w~#D4!Bb5y6C8)sNxJApey17f)As~t zPdX2f~k z+AEkaas&sNKZlUd*WoY%Tg(uA5_l$Ad|m;5ZY zB9QRQ2Ms@r*;D+44sS$ghO|;f<53$W>{UU*LW*!6=ghxd`h0^QFW#NG8#RcA1ugPO#6E=0B=(dfaCpY%9s8DE;ZJ}7bb8KC7 zeyaQqA*vw{5;E7Tf$n@=$IInGfWUw?O-`7KsR@7tGzJ6nEWRf1sI`ad=Sn?pK&6+i z?#_!mPIBWJK0PwEI-f*66UO)>QImngoy0&)md)8C6rj&01Mw9}MgZ&>Ph%?1zE!JuUD;+9tS~w|^+DvkKJEKhkoafu8!x#S zQ4%LbsZ&}ukwmlZs7U{;n`rsFa=KuYXt>+j9Z36+a!|$WN0zHP+FfOEa>zoAb9I6* zJqeS{RbKmr?8qc${LE@=l1hk1C8lTv-W{(Bfu84G<6p*vKI)Y-r)BqtTdpJ4@y;&< zG*0yN^iIQI?~|ow;O+7rTZAIrqH(1=FwJ2sjUICwSr_ z)QhDGE3=2ULSMW(BZuKp1UT8}UCAW`@a3k3v^=2yHl-!I)xHR z5$?5ZQDk$2=W1*mb+RRqrBe^1Cc|FGZ1`0uVSYn*FI!W;Wh-*1&lD|jQO z@yD;#*SQfy4AhIoBvK0!n-qkI#7rw(DMg;*KU;l@@2}yh0wAj_u7jj}2quJZQ_`BW z>#V5gt<_ZGGpnsTmPm%f8%`R|CE8dl?QPSKxP0;Vz$6^0bZa2R;(yt)Zoffi3nN@^ z$S+cMz5K{>m`IzLl_&b|-DBOgxa&)arOjM72EgIlY@%Wb2v;_&e)?5oh1qSX%9qwv zm#UPMMD=1J;1d1dUGL+O33pkgx6>J2<6Oz~I3iznAkR9J|4#sh}=#NcO zAA=p#!-&S8`G&feL$TUo6)`%Ba3R-efi_J50tg{3B#SPsf1ejJDQ6UoNak}K)lvQC2FB%L z@w_NFSmY=dYVW`-%##c{ULb~x%*Bx~B=_HuGt@lRUjA&bc=Big49ez=WC^MtXD1*1 zq4q5$KR*?k8DIDokvwFpSQnWiT{S(uqc47dw1gd{HeQ%uROP(pN&B1x?g2{WpAxaK zP)XsXKH^jA1y||I`knBNWD&^wI@Le1laEcIowI@Ym1-Vs+n`(&gQD#(^6b}^u+V`M!_#P#nT<61H%3Q>Qb zN3@|e3{^o4e7URMY36$E-__fbO{K*bjnya>Q7)a#rz#0jdzNf6u_a>L_b7DQ2PJE$ zc;G9YmpY$fW@oe9G=A3}sGYZn4d2NZI4P3i{_^|PMgUZE_<$A=`@qDF ze6A61@MhTAzW4q=*uNJuf}SFn!OfLBjeQWVQ&S49jzfLAYG5-wcQ-WtQ&=L;3`mji zoy8G9lZTAJDN)<3A?-8s$U&2!t@^bk*M@y z(r8`?yp|@-MiQLU%yeUOUP#mV(~&^wp;LC#Uz}y*J8%5#Lh&=kX=mmCS!m$BW;MSZ z%0Pdayf|h>TS}X$aQE`o?uS}a7W>%?%#^oFw*z{YryGq+=fYxzF zj=3XZM2jQx6CMu0Y6>ZqlQLc^h;k3ISj7@Lsn2=XxgmQ%%Z8Zz|sXRY1 zyQGi)+Qkz5{yc|8ZRoCvcOVx8OX!%e?O>bbU|ucEgu!pOb1szg*yk~}V*z=hckAB{ z$+cx+7!9E{A@?^wOrwiG8J_=W-^?|?^*&DE*`Otfe_U@`AN4+ykNTbS{!*vy1V=8^ zEVNPfVO~J-96(ZyhXT-(Vmf6hj`@g$raWgQfm~qfq)ySUbvwHJ>x!K=;$Tw@DHtFf zC-KE>HC}PYUQ5`#4o0!lhU5NO=rdeJeGPSR`}Tq5BQ5fM@Vc@n#!b;qo4Jow=CYYw zolP7^9mk!kNItdt>nKadf&ROMtJb$qp`fhvQR##AtZV{Y)yN{Ceo*~1B>30NS#j8~dy-nVZ}oZ@xE@B4?+ z!y<9@Kby)4CBZ>Rkv#zBFd9!%x`Y8D*Z^=jgyYQFtgMw$&>jG%_L&kqpzedZ&C7P} zv@>+Z3CdA)YL%Z;dk^bQLoZboL@<)5vVzZ=cU<)A9l8jtW|s`99XLSRa@6&djD@UD zsUYP~yTyyxp}j{P-7=YnGjH#)YSxTeUT{_YuqAjYovYG-dG&ya6ZwFdROqn?w_2}Y zvJqU6wk&8Dn1Rqp64`LKdpTNB{QJ#6;wa6a?7`LV@OE=vsH{-h#C(2&RkHQ3!Im|> z{j4u1cxM?I1cG;40kDESXI`<05u=XDkgWVAbqTo& z>-K)HA6AYbXc#WV%_$*8fLOm(5u-rocqzVNZ-SMwvKtMYGmP)qy+KP;7jqG#3}cZy zMB=FRDM|{~7`z){Ob`AhWH~-up2~cTv7kcJ?vN1OQ(T!=j{M%*&-Lw|UsOeM8vuo@ znT*qnUf=fCe~ zKFL*d_{(T6TA3D8>wkOuz5kunJNbYK=FXC5gU`<8+sP!+3v9sGtkOX@E@n~BmtTU$u?6>m+G*%{f*E5cbcvSlSaFTaaxD)w4Z!wgrQXfzgnT(<7}9g zG1m;9I&u`-w!J9_ktFgpo_ASlvc03YK@nO)_dnqq%zE8BpX`r_!<%`{30$HMt-|Vg^21BB;S+ogWkofbPnV`u*NPn%Tms_d+HE-!6*33 z`nPO>gqXvO2@rxCazjsV;bDbf_E_0!j%n@IKQ@fRed(h1B~g_%sScI=*9y>v?jEIigCH~XO4&4-hy8U5k>FkO@dSW8!b<4NSH+o;O=K7EOpqIDRdzm z1iL%TcrtZ=^>RxIUMw-`Nz-8*M(~uVwuvX?5&(&E1<+`RhAaO|*&k^O>Im zE)#^yg9VI>4D^0K+~4*&yH^dTq?s-Tm-t-o!YKa)PLRMJL**+UUj_x3jZyoiaQRSLV{`>Nz1 z;7u%SL;!$Ph4hc0G=16#g&b(?sXEV=Y+0xHvf_21I^E+X{R8o8QQ*yi_s zeNFy+RlCX+p%r7*dw4j3;4qf*hL3<$y~Du)XV5jhz+GtkvuQ?phDEO0tbnuJ2CP=3 zpWDLq`qj%tSi$UF%T6Dlnhg%{SQb>A;8cG?roNt)ceKyK!X5+9Ooslfo^`O_l`2dT zTWRl}1hQih0wiBu4|s60;r~cJk}D?fOddIID6g~*>dc&SkFvJOYPw<${hxgbRZDb~ zaNjLyBnpj4p)0mQz-J^4!)(czKf;t)?N8Rt08EsE<*%K-+tlt!MN7dd<{Z6Z&EDg?)A2gYENMo&I zT1ALzv9Ml$alF8X2o*)JX&8MsyTuHS4K;#5rxGM4@UGzQ55NvzV7K!&S5J{+2xqWj*_a|RV=@&CDelZXik>SGKevv{^c5s%3P5GTg z-~|!6aog^3Au{-3JB=?mXp?^Qv+jt*mTPpfB>~chL{1*kntY&vD^`<+3zRp9r543!6X%m@D&vrmlbg*S?sr8E69l1ERJn%W2*4QuVk7aJE6Ahly|hry;y-~wd5}?)T=~1q~A4liYYQ~ZBoYL?UU?pZ=|a12ukZLz^=p2NVwl=AST%`JWUEWSfiW;ir3ssOLd*)*FzR z{RGIz!lBL0h4xd00_Cx6dgnNP8t{`0nF%jf{5^o-7|cD*g0G$ar`ti~W{DV}1V9L5 zXv*{gmGaCLQs>F+wup0Uyke^~c2^ME!L!Xz!U;%zrrYkgQmYthNs5 zf&Ju0>iOaQC&+q|&`$GivT=)j(L;<^4T}IKEA1tnJNXarcpM8QRaZr={jXtK*&0!t zexTf18ql)FQv_rBKMe+9FwV3yHmfTa@erqk1-3&?x&sPBHhj`({8l?zvnBV_2A&dm z-Nnx4N6y=PRP61r}nmy2ivKgnf75^T64+ znBPvGP_fk5*S~_qn~EA<(*CvP~GdSxnPJC^10^* z>vmMwm5QVKt>a2nOYqY66#?x*SJLJpg&@oO!ixbT@VmoD_95-6T&7pyjHN2Q->2JL z9_m3N@Bq3^u$f${3;NjS-+z^oZ{0r?7-_x|A*#%3q>3ZfGN<)>-g0tV4%*LLPeKvy_bq?#C=;%g?edUBMVXnd4G#F zC9n~e2CuMC451Jx+oXGbb=GSl0l6koyaNG|=kN0UTOOd+gEdbX9WS&Ac|*gLl3-hf zvgiVCfw44+3$Sc#6Wt7%ZJ8b2CTiXU-C)j-1Bpw%*-OKbzFTX2`0x;d-p9ACviSv# zy_|gKoaA<4mDMwGj73RJ6r0ZcLM$yuwENG_k@A{>Y=C3h@yU;|X+Y?#7j`I9=<2h6 z7t>Go(=^zjQG;$6cROUH6oO|O+$ky)#A&%AQvLT-@p!fngI=!Gn9KdN#RNI!TzTrE zth&PRK4|_VbHKCb(TkW3+ZG^OCn?#379n`M%pffX=$P-TtpAy%fmR_m3nR{7cSm&# zV*JPC|4J%uD4K2GM0u(SU()_OQV!x;rKLZ@1I#{35&pMh>N<&|m>>Y~g$stSO?|z5 zh#@k22D)kv=pGkZTY7u1{;wNLti9rlYr|<9V#duADFKf5jzA6TMpL?DZAA_NzG-V! zzBdT?W$CW}uY}W#NT^vaLJslpCYj`gmf0h1qK3YiiX2!)1$i%Oe(|FbJyKxO@p6dW zQFq0?9J9`L5alBN*3K)buvbG)aN}i8^(1An2kL0{AbwZYp)k7A5b?)ND7KqmSbp`v@p=l}a)Dq&vu=Er`_DC9%2$WZYyNLdjZJ|=qXSWh!s4~qo`OvB1u zA4%V+<%aRcziZwqQX3gE4ruDJ7po|JPEUc_Cst&|X=Hv1SvtKF#T;vV?L+r8VVz2e zKOAWQ5v-RO6a-_*G#R(aEEk^0nryt=0=e8_FD;1uSJ`<{`_UuKe-Z)MU>O=a=DPfp zA5=!bD77r|{R8yfQNa2}p4CrFMP5mXjV-NQg>0mJQ=7|xZ1FttLujumG|BQvCCE5+ zfU;-!2vB!CdmxCZ$WVtjz77CGt_kwbf?&5n*%E*Rg*%7$4SenU-+gb@Eoo?$la2sC z1W$_n69Yl-$MfMLOe((p6S3Td-|AukjPC}*LGD<58ny>Mn3hZe5abXzo?m4B8)aOW zVsyfj<_Q=qm{~MyH z>6}+#_tZGqE*Bf)28k=^Noel}yg-&srSio!aPP>_v`Dc_%Yu~^WkcD;)BWm8XDnI) zcagcDI`q#T43S>Jo4s+y1;CfU;O6)sHXVWG4Hs-{{7YxA=d4f0eb$+Hb?5d%VVQbhjh>pmC#oP52Pd8aILTG$7;y**J{6w;2`oW z7cyI{i-^zw%libr^UbYDjoyn@W^I>xiBCwY6^WER8*+ZoY_oD?pKU@#jWgOHpw@RE zGcdGEP-)E%qXVp_G<#E(X4WL@x@*9i!V? zT5Obdfw&Degp+BQjau2sK+Q#$Cc?0-u4}2Wb#WYvh6`RI#ZfwWKJLL8TN+iIPOs`h z*o|>+iTd#XX@C-|HS5ZkqSX}>eaxY@qBKA^E@}en0k0ph^|vY&j2#;6)xR>L3ID z#?XJ@P<=8B)N?Jx|1cH$88ACHj}{*OeZ0H=>8AMW^)hSaW8JaZ1FM#@V#vkAIWidO zyqrt#YuAI>kp*76ZTp2N!_NEVa3}cF=04ZmC=Fx3^=7e%f8;k>e(nN0R0aA?ap!^A z25|~QKmKU!%DsujNE1*NO*nnoEO+ixCKv#}uO34;Tc1-+5-FC-325x~x>j)<@1S!dQ$E`dG(4<|Slda-2fuzw+Ls??z%asxkBvxi zCxqgRwXSzXM%FveW>EhW6l}J<{r)^pz)`rfrJ{CF|TB!;kLTZT$d9g%pA`=Q~%b$O@6L zLN;sWw%{l&bmr2^Rm!dyS8P@)fB3&i++oEoHVHdo@?s4sY%-m>Pox%CUq5?sZxK}fmM~zz%;4vla4Tq>`?7rp~ZEFRl7|; zKV#3hs>%i9=tLD*92D>Fk909;ajHb!E0oIApLQXlpsfI~^-$BmOM$z7{J!nbEoIID zO4!R~AS3NM7+3dW?=!bCwc*HGjP0jvRvjg<%1=%i<+YXh2%SFG$9_5hO#V_73W zMNe^rb|7yplgUWWdO&F8n95nbqY00JmTW=WhT}ShEMQUI%pS}{?ASu;2kfw@SIauh z9J}KLI3#zPF()g0zEz4fFHxrLltkQVVtD(t zXH8cgLpwOMf@%fP0t>en4E9`tXxuXoI$&6?JGK9%_EwnScvJ!l=*d7%ms!Tu(s1=m z@&acPxyx32gKTde{eOqx#%Le)M}uQ>fRVnOUA-^ws8~z}QYm6zHTjQ{yR0M-u}}*T z)6#nn;J#NZdYyIU1_T+ofDAEN)y%LvTr>i+rP^O_sw5*SMV)G&!gf!Fy5jgIih}DS zFpTkcWxXV}&4*?$+lH2JRZ=e=aGCPiE}WFJjKy#2F<{iipZa9bpS%!X36skxjG4=+%n)E5w~xCJYL^n=Z`77 z6X|Pv|1bD;54jyeq5$ME3@7=41nCk~Y1qYpS>HJVO9Q##$Rz!9rv10=JzO|b>?3seJBR=K=)6CG$q3LoXZ0S64K?=&UeeX2n_Nxd3 z)NBN?p0o$e=ecYiYL^ESy`#G}?1K6~|u56ubN-Fue?v+&GNq-NWwNqmYV4J;$^!Kr(b()SH^kMfwgn8{M{frDJ4H# zZR@VNQWA|t3L_Zj3B1@ENaAmYYw=$UNd=#UvkYH+cb4hJyRuL^qaaZ`E{MjT?Va|B zY$q$}=sB|Ez(T3ZaR>OIiKR?guumIq8;&C!UZnw&;+kxDbBLS!`z-7bs~I9A%s|dr zG?QvL{o6A0buCX&dp3{G$h0?}rd&(A&wVZ=Y_aH{(!f%Oc#v(wUC^2}q1?Ammt)~f zFkfI9^lERymSo%^D~(Zze5{(H-%vHWjKHvzUIX@onL6O;=Eh8LBQuD;cL6GS6Eb{H zr>ziwHlwKoM)*#K+~?wZzD!C;qq?~2HNafS^_MUQ84GXw8(C-Ubp=41FE~7(MDj)a zBOc%UmD!|D;K)*uA@O5%66h=HaUW}c{`J}Kjofv?2dVw`l|xc? zAGi~z@nr$z$ce1^R12%gak5jL{M%klx(_?Nq&vvJDm`#1A zb_D4P3>ri`;V%&XT)6;5kNIHFx1#8vxzVwddSZVMLQw_PCO2{;tJITpA=fH$QC~kG ziA5sMrWmMu`k)q^!auLM%4dFUrEyam2RoPIca#B3Sbuax=NR64(FP9W%v@eGM(f4b zJyf|aKN4JRSiGuxDCP+Rn?l_IbC37-Xk-xsmsen6;)DK>s-A%(o)yZY^nFZ#2$UR5 z`!V==`s=3qwHCs)j#CkgXf{GeGhvU^2SW7UTz2^!TkBg9GCs9y5zRL#{hw%_z4rIH zk>wds6c5xISwV^+t=m%}V)dz$<>&2uVbVb>>Q0(}{uKohKMM8zWl`xH{mNSa$4FyY z15h`hJ%Hx$VhcLV!ex&xA`|cEp%=qb?=y=oWq^a}el~WpdHx2PgRT(j7R_^-Zv(!- z`-VtI`y{BUdTt2XC$L(v>b&Paf@C2leT3Xy#cd48qk|ebvvphaa-s78vO-d0IsE#1?2Dq4G65AMMzQ80f6Ra5sJ$E zt2Z;G%#T-%o$&md50a+nr$BU|r_JYKsWyUmQJ$Ro&;0BWXLn1B8Uj%tZT7V-CZ|XL z;hkiU8Gld`Fc1ewhh5p8MO2QlFG5oaCT~FU2o+D%zx zrE*V~xE-dp>v67==`00?Mhf#lIUQxfP0 zq|pH`HH=#M{x1EAqUh9+l&Ae5U^W=b?#<6;$?;~IFDhtl(>UWp@r_i%2p|w1MQ8>wkH&x07p|y52O(}L?Ci@GLi=zX zXjqlbz6b_CzmNQhJb(Yrm~uwU9DlwZT1jLf;wS+u5b1}X#=-G4%v2&sB?MaJ%|!m* zHP0}LLcfhXPcM}xK?Tn-0IoxM2FcCK^gyb4%iic|NZ?uDcN5-UBDe?)?4>Hg?NQXM z0Q_>)1wHd6CdOT@Eiz8cDz!vNChDWI8)TYLJf%g=aLS{NQpjV;(^A{ta`U#99|WJ( zQiQ}MdIplS1}~+qv0Sf0xSDTvN6`k}p2Ih6bmM9RQQ65Q0_PRbK69(hPI1qU#IT(u z2F%#JFNXQCfLVx_2u8s`B24KCDn4O&Svr}e$4j!W?{@#C*B(iG9R6itCdB}?z>8rR zQSjg9p`8Z-_6_L4pz|9Xic^JRke=nH=c^a7J03~|@q>x-Cm2Z{2FC7`JEm>NFHh!c zMJrZNBonyRcg{F@LqJ8=@ZCP=!YZka-qpEN6jTk?G#xcA`bx-c;K|XS#D!S}+)yel zzZ>du_6wF9wSM{qFEGUf5GS|_IEhotA{ruaPn)jv6*Z&?;tbPrMNbK$8?;PGjWJ13 za;$rCkH$YKKT9FopRb`pP9FWf(;uZ;J~oEPrNuW+jgxZ!3C-;>`8=tEC_xl?mt=p* zCsQ^2BeWudL7so#;EL<_8*O3spd0KfB7!Y~MGvhx@r ztt3OKJ0{9EcVni9=Z795n<{}K<>jSsweg>`ZW(u}FG5KmDfZo8$OmGof+#(&%Fm)*-l3KxtXvSwLkh}!6X5+SjQL_y3wX0QA&-}S$Y$88w$Pm|fBC-E$5l!K86owElCs^yg6vGAD6x((I(DBD zsaN(Yeiyuod8zWhV7Z+!E&DzVbYps4Q1y860(TLrIMxOX%!&ngW@sy725_8Pg=M1+ z_@I2_QMumE3RznVj)cpp-`9+#cqFW1;0a1I8w=Jsl(=t!FM3UV;Ysvit&;6zZb93p zFV^TtBGYRy;ip7-GZ}HFn_MSeWPT4S4|^&%?$ebxwIjlAPnkBv((CM8IFF6YkN$JD zYb!2KS08&Tk^gAL8<)E4vl+>+^3uR*7@la`fN4zs$TzoT(~;yarEe3uK!dunI8a>F z0#FAv{!{4>H8(C0DL;39c>*<#>I*w>1q3m^-x_(Nil2SaMDPUp2O={L^jM!kgOu0e z8!ZSLL6Z+kIeupv!S!ZF#hTBa0#~Q)|C6j*Lf80*QRBX==5UaX zTP0QwZ_bAOXx4y{k7AA+S*=Q#2zFa?o*%m1s^9OY8DjY0KG~t6;$@8(2agZ^C~8NS z`D&^Bxs^AEGJKN2y8<8!yvOzI*&$m0$AWgG4R%mjdIrFkw$T~IwIF5_vY8s|`V2xw z6ZJdfT!%!Q%OMgmwUiSZQF>?Y_x)U59gCnJ$NseWv00&~eW|}u=im|&W;xp0=mr2p znglYLzb~Gnz8uW-t*AcSWoGL{J+F2Vnti{Ux?F|-@+)o+S$~gOGT1U#%JZY$OM`}5 z)RAC;Byr;}4Q{n&{hVVAT#{-Q?smdZ_^UaFFa!B~vZkKFd7rDAxWlgH)%y=W9w!?` z+299b@9PQr!@I-Znji5JBUBX5;|c-=tPw7+H*KC~9Bu=E4w>OUX0zOXnu8rE&1?0o zUJWOVslT=UJ(J6}bVLsDz(i?q-?jo^n5u=&FHS#)mSMvS=8e0Xq33h%4Uee}=>0S( zgWZ$2mABQTz6P`Gb4$h!fIHKWQcTw6v~kReoZNZrEB-&TdBu-qV~meuEHqQ&$C-ur*YwA`L9NYw59 ztuj}XKHKFSRyWE!$PA^znqrt>%DI06RyPm0IMAc)PydgmuMBJQeg9q{ok|Kg5D@|C z&heE7X{1x68w5seAl)4*rIboaOLq%ONW5!=XrhVl6Uwy zt%=NHO`hmseS&q2xW;EWRt^7D-cphJvFpA7Nu83%so;%b-@W=!T-8YBhWJ~Tb%ek`|@_KcC{HS)zkjwn5@(tAYsa{DEEeNl(F{$pqesJNO>~?YC>{a}W z1BZ8i>PV9Rn-Qlcv3a+drOpTB2YAr~5a2)8KlI8vGAJripXnD{WXMHrV~YK-jT-q2 zTg@G9%m8BDvA_Pn|B|o)f(4O`?ny0xc)3#%@LVi)@6RuFc5z$)Cy{qmb^XV9goc73 z{j^NZWC8#KjhisPmdLnopuNLDJHO*~ek3!2Uu5AiM&F^y&1p!6oHQp|fJ8cWpUi^x z{vxZ(sq;dHS!>o7b1~AMc5L?O3cW_R&fT7XQ*xl!`rj{8t2ikUx=}ZIOYigR0z41Em6B|QMW@<|Td~lyC75L|$Wv5}Q8|J&2 zpSX{0O9)wsWzhOK7a5^~E__N0v%}i`Er$vq+-nLyc<{qnLs4Fv-ZqbhHez&{EArR) zz4&YY^G%PP%KBB*9rl;vb3Ejo7f0t3<{%QnjeX@j69zqW7o8%@Y!_oVKP7+=6F_f2 ze@U5cXZ5e!HAKV%&!cVf>RW7h>(Ta`Vt)uoJFBgGko16#+dIaPR6%By2kz~f+D?H| zDYc)9)gSJ7+>QHum3dqC{wUwz0W~wn*>EaBTlYrWSwt}>WXL?Ai;}Bqp9cr)=0#Rx(F)1&PDLwZ|w4Kw;<@Yu-jUZ zRO4ukR!HYwjJ)Ww%GRbWkKf1s`s}-n-zY0WQVx7llcE6 zw(^j>3PKk^<$f@%czQ)mIV_I=(R`*X&+jz#%}WZf_DrORiKg!zrNpJL!Zfp-^20s5 z+pmX=X{mZ#`qg|f2-jtej}M(izSW_jK`0M>>d?o$%C52Ywq`B9t`U(fPlC5r5wwvN zfdZsUzBmt{v6M7O{zehys%*jkCZ1c;nu#Tas~f2Ej6{Lb`1xA;N>fc54<;YjauA*M zKi_1EL-NZG~}z_I0b1^}ljzdq<4FKGMR^X)iD#D6I2zW(1A z|Nd#^Pz&^uougFhlbIDiOYs|$d@{PyQIg+o5m{7}sMX$|Bqx#TNc$tB8z7Xs!^{bA zf7LO7w2yuR4xtYCDCu)#iJJ}oedJcF#MB@FM9kH|KQN(6h}MY%)w7~xdZ z(b9Nu#C|9(-bUDurYGCAWfYyidZCA)BkPKohQuh1aTQKx{&U zpdmB42v=-Mi5Zte+%52&gR{K>U>bzZe}R6}j;{o3H2{K-$=g z_TjpL@7s&uj>nou^Yr~_6i29fC~8Nu)6lxwMJlu@gM;TWNcy{5cTpwR2=~#(IuU5M zcZAbLCq-N-SIg~&;IU61f55(`cL(G#W^4Zo=BR#k^ixvATHTF~T`E=Ugd0oVnlpj_ znG8aDEKcblHyrg>_sPXYOcT%6#2f4)5BDfPTso)4-xUP^3^8B1f&G@DnQ|*`$V=50n`j9*f^^Q{nnIR<_W29J;jnHw z_$9~dW|&qUc0g@0380{l9)PovE_ZOm&$h}?AF9-LpB4Rn8Thz}Td|pF*2Yhjf9VgFYoZ&hCMuw4IwzFIL#zDGh#Ir-zv@%uoCn4^DZMkD~Cr?#}_-=;r!g z&Vt~BhsZu1BTgQTJlWs=)F2FT#lqs^_z4%#%R@<;iR8d z79t3jyI<=RgY`>M-VED44S{kd^r6xxh5F@Vt?w7*xC3!0e2q(U#>DCsHu{b8^eY zBcB}f9atbAKa~{j6sUkp;Px3hSe4{K|v8kSTG{vS42jt!k^^ zGEQbPpzd(v}`FE@k! zWVko6$SP(42Qu-3J2mA_ajOMt8{hhVjZlMQI3c|?w*&{e*L|BGpZ(uE)v%-o@;*4t z0*!vpH>4(rc$!2YbNck2_y=MEAE>C<+(=SYVbXW^k_nu?cin$N7c4c-C>ah0Pet5HX9hBHf>QG#>$+^nvXQcOQX= z5?kF#FB>Lv|Hl?2P7SAjY&kD}mf14A8BHL5giKPyUVw{Fy-ARJ`};yjq7dOw2*+Lm zMTov(pjq%ACtu`WOA5OF*W_aNhnD^FeCr*}4afMzi-``07T>9~!Gic^52uPGc|@*r z?!$wFfApN!5koR=r1bJe!zxnV^zR>JcJI3@_@RyhyO*!glOEPP*`oMz3&ErSI827a8P^Dqf;-oaG&Qy&mIRq)yZtAi*;mA@wdHFyvCcV< zI7N6!KN~xR@6Br7?HYbT6{KVSVtD9>?|nPsp+)0Bcv?O}`t{N~_mNqS-acD9JaK^; zze(TP(~Q-izMZCcoPyv+7ud?Ci7X}NOflr5mS?%}KUuh2tCnS(e}g@lq%#ms*gUB5i(L11BQNd14y^WX z=l}f7Y=@U<>bEs-^!}-!)8ZpG7NnB+d(Urz3O@=T^^r8BagH^7U`nt%2A}w>UG7^D zf6l5Pc3-~794JA&d(8rFSQsT-Zv+6KwzbyKP5@H)8eUm(bQIsbq+>uP*Rr;2_7-M4UdtR?=FjetAy|r##|yFfOOLekW0F|vA-n{`hj@eP?UfHN zf0()SL^wuWy^drk_P0JQd?rO%Y~&nz=u5tnD72cnokyDHS5C1{yGYycyHx}%yJ<@g zgn9vypf)jpT2{(8Jov^E!E9+6ZX8X2MS+kEJjy4>{89UokydSh(5M3>=_W@$9QQI4aTL_Mp6%-V8}+x=Gh}<*|l2^RIg%{?dBZ(rhy)F<*gJL&LV(ZM1wu zBYe&cA_~*ClupQ4L*&@3zN_mJPUyU-qTfjI>KqzjEkG+eeU?>^u_dHu9Hv086Xz|%w#>$_aY zZ-c-sC2rZXQ>3!nC#@!&o@|B=H~s~@m_AtSP^IBo+k_NedebUf!H|JaxliAJB|h4?De9p06x1J|^@5(vh`X_l?T#w?7RL>KEYQLF#V_j|(4?N~o+oH~=~ z*q8zfe49rX%AS6momMgOOxK%3i3^fh;hoH{y*9AuPY~Cj-Or{S7c8%T&Gf|$i?_iH zMXP4Rwv1-|2JU)_{khqY=iJ!M`7oWIuj5j z6%vFJmj#_Eg-GMnrE4!{H(Bbn7B14JHLR|sR~p5#+QeE#kB_Qv6FMmT4(9E41OXL; z+k3CX`H? z)OZ*g)$^AC3h`3`wQU)kzhH>fvqa#|*B5dVIMl=56d|i1Aq;mB7kT^2_n=XZkGJ3t z4QE6;-qAWYr>c7%kdpDBmm>Jf@m|`knhvxi=*hX=vBg+!2Us|Df}NR^8doLMa^%7*yLzC7?CwrB^d!d zYp!DaSc0S|s?x*=aQ^K>2{u;7!I4Tcal5_s|23!3klI5;aiBXv+VIM!wEF=|;1df+ z0)RLkrCfL1^VmYs`@Dfp+xst2-FKIt`Da=;qXkm5X4>`k{XPq*^i!XQB}k)e%zn*# zdHzt!c^5iqpU~Mrc=r7WFHJSORS>`TZYgA~qI?WG>PD%{Tah;NC9ajokxxM*c=d+A zdUvL0s2)N=MzWk@PW%-7{=dk{k<=fzVK|!mvu<91l?}c3{1exoo9je!5^Ce<1zA@| zUz<@dq@Vzhhxau76$>lx@eBE!Z+zrHou%B(JqmQC!eave%+_02(_sXJ!`Ob_2sXOa zl~2Gf5wq@~V9~VB&Q=)&yX{8oDSl>uND;)rF+ydj5POKEEBHPm)u)%gchLegg!TneVaB-msUU?j3lkF8y1n}tuvMX&#gXluoNgM zS0&nKOZY;SsRbx&p)2k4Ss+@qcZk2pwf~ygt?|A5Vr?5zNlY|j3?8CM zpXeh+M8ZFA@As5@+xHAkHt>kM`uo2eXt}T7+FmcGj{n(o|0ACtPWtM?v_M9la>VpW zNTqrfHR|VMcRUCFEipSR(MNCUo|3oU&|CQt%%a%KRg9{hQawKIFa!89I9^u$(r~3So+GlWxrJ3THV^s zd^aWm|IU=KCbamu2ivp*`ckjw^UQQ)WB>13?vQ`S6z}95{q}AOSFau|bn{$Bb#L_e zh8$UQi!bgWi!2jK!k&qG&Ufc~lJr(9qTs6oH(u0lpYY=sZTf*^t8OF|GVJ(4-q^kI zp2$2)f84RmD zW|OkNm>sed%^v?He`b6H@ij-aI5tsc&bU)JC%RF@X)UmZ;y1x6Ei1kxW5qXOSf)25 z{7`Rm*q`f7&1-cR{b%-&@`XKKjkJLM{i%}GSF~kVu)I>Zy4bU%Xa)*z3VUGZ@z6zq zm80;iGmiWP1Zg$pgw>5 z!h45XD?CN(K8b%VVwgk#2>iVbqL)Vv+tW zF68zCdfaLjp5$Y*9U<2Ln?h)unf#h*fyn?O0)EHA5XH7-XKHir{fNrqHg&sqh%%Wq zl1H{S_0CH8VVXPPZ(rjuopU}NRf=!jvSNwM z4L`4bP~jAQ_jo>(V`J#`^M77i&0YiukMwkc*7(qLqu-9x*Ey}ph8__%uWoy!whf8@ zM~@a_7LMyMS90WhAbX?B#I$^T4ayt1&5SaTLQ6%5Y(jyMda6b5H+-B;nh+E(H+*R`d zzeomq@y`o`?Zp(e356vgicFUe=sj}4*k!-A0a*@A5WNdGJT4S+=5 zpG%h*=Vi}$nV7ibmVRxoq<8cj99TwtLZ8L0-e*He?*3uC8cg54gxlMKf2dTNYyD;@jRSn-HDN>N7ilRwP%FvS zu|#*GW6Z=A&owe9bOyU>|0⁡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 z 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
The Official Basilisk II Home Page
+
MacOS X (native windowing) port
by Nigel Pearson <nigel@ind.tansu.com.au> +
+
+SDL2 port +
+by David Ludwig <dludwig@pobox.com>
diff --git a/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings b/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings index fbcc2d40..5b8ae8d0 100755 --- a/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings +++ b/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ /* Localized versions of Info.plist keys */ -NSHumanReadableCopyright = "Copyright © 1997-2006 Christian Bauer et al. Freely distributable under the terms of the GNU GPL."; +NSHumanReadableCopyright = "Copyright © 1997-2017 Christian Bauer et al. Freely distributable under the terms of the GNU GPL."; diff --git a/BasiliskII/src/MacOSX/Info.plist b/BasiliskII/src/MacOSX/Info.plist index 31a02329..da3aae24 100644 --- a/BasiliskII/src/MacOSX/Info.plist +++ b/BasiliskII/src/MacOSX/Info.plist @@ -1,5 +1,5 @@ - + CFBundleDevelopmentRegion @@ -7,11 +7,11 @@ CFBundleExecutable BasiliskII CFBundleGetInfoString - Basilisk II version 1.0, Copyright © 1997-2006 Christian Bauer et al. Mac OS X port 19 + Basilisk II version 1.0, Copyright © 1997-2017 Christian Bauer et al. SDL2 port CFBundleIconFile BasiliskII.icns CFBundleIdentifier - + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -19,7 +19,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - Basilisk II 1.0, Mac OS X port 19 + Basilisk II 1.0, SDL2 port CFBundleSignature ???? NSHelpFile diff --git a/BasiliskII/src/MacOSX/Makefile.gencpu b/BasiliskII/src/MacOSX/Makefile.gencpu new file mode 100644 index 00000000..2e2ec45e --- /dev/null +++ b/BasiliskII/src/MacOSX/Makefile.gencpu @@ -0,0 +1,27 @@ +SRC = $(PROJECT_DIR)/../uae_cpu +DST = $(BUILT_PRODUCTS_DIR)/gencpu_output +VPATH = $(SRC) +CFLAGS = -DUSE_XCODE=1 -I. -I../uae_cpu -I../UNIX +CXXFLAGS = -stdlib=libc++ $(CFLAGS) +OBJS = $(addprefix $(DST)/, defs68k.o gencpu.o readcpu.o) + +all: $(DST)/gencpu + cd $(DST); ./gencpu + +$(DST)/gencpu: $(OBJS) + $(CXX) $(CXXFLAGS) -o $@ $^ + +$(DST)/%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + +$(DST)/%.o: %.cpp + $(CXX) $(CXXFLAGS) -o $@ -c $< + +$(DST)/defs68k.c: $(DST)/build68k + $< < $(SRC)/table68k > $@ + +$(DST)/build68k: $(SRC)/build68k.c + mkdir -p $(DST) + $(CC) $(CFLAGS) -o $@ $< + +clean:; rm -fr $(DST) diff --git a/BasiliskII/src/MacOSX/clip_macosx.cpp b/BasiliskII/src/MacOSX/clip_macosx.cpp index 1d37edfc..a1a3e5da 100644 --- a/BasiliskII/src/MacOSX/clip_macosx.cpp +++ b/BasiliskII/src/MacOSX/clip_macosx.cpp @@ -100,7 +100,8 @@ void GetScrap(void **handle, uint32 type, int32 offset) { #if defined(__LP64__) D(bug("GetScrap handle %p, type %08x, offset %d\n", handle, type, offset)); - #warning Carbon scrapbook function are not implemented in 64-bit mode + #error Carbon scrapbook function are not implemented in 64-bit mode + #error Use clip_macosx64.mm instead. #else D(bug("GetScrap handle %p, type %08x, offset %d\n", handle, type, offset)); ScrapRef theScrap; @@ -177,7 +178,8 @@ void ZeroScrap() void PutScrap(uint32 type, void *scrap, int32 length) { #if defined(__LP64__) - #warning Carbon scrapbook function are not implemented in 64-bit mode + #error Carbon scrapbook function are not implemented in 64-bit mode + #error Use clip_macosx64.mm instead. D(bug("PutScrap type %4.4s, data %08lx, length %ld\n", &type, scrap, length)); #else static bool clear = true; diff --git a/BasiliskII/src/MacOSX/clip_macosx64.mm b/BasiliskII/src/MacOSX/clip_macosx64.mm index 23261890..f5e7fd95 100644 --- a/BasiliskII/src/MacOSX/clip_macosx64.mm +++ b/BasiliskII/src/MacOSX/clip_macosx64.mm @@ -234,8 +234,8 @@ static NSData *ConvertToMacTextEncoding(NSAttributedString *aStr, NSArray **styl [[aStr string] getCharacters:chars range:NSMakeRange(0, length)]; - NSUInteger unicodeLength = length * sizeof(unichar); - NSUInteger bufLen = unicodeLength * 2; + ByteCount unicodeLength = length * sizeof(unichar); + ByteCount bufLen = unicodeLength * 2; uint8_t buf[bufLen]; ByteCount bytesRead; @@ -807,6 +807,8 @@ static NSData *ConvertToMacTEXTAndStyl(NSAttributedString *aStr, NSData **outSty ScriptCode script = [[eachRun objectForKey:@"script"] shortValue]; NSDictionary *attrs = [eachRun objectForKey:@"attributes"]; + if (![attrs count]) continue; + int32_t startChar = CFSwapInt32HostToBig((int32_t)offset); [stylData appendBytes:&startChar length:4]; @@ -1124,7 +1126,7 @@ static void ConvertHostPasteboardToMacScrap() NSData *textData = MacTEXTAndStylDataFromPasteboard(g_pboard, &stylData); if (textData) { - if (stylData) + if (stylData && [stylData length] > 2) WriteDataToMacClipboard(stylData, TYPE_STYL); WriteDataToMacClipboard(textData, TYPE_TEXT); diff --git a/BasiliskII/src/MacOSX/config.h b/BasiliskII/src/MacOSX/config.h new file mode 100644 index 00000000..9b853b47 --- /dev/null +++ b/BasiliskII/src/MacOSX/config.h @@ -0,0 +1,820 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +#if ! USE_XCODE +// HACK, dludwig@pobox.com: Unless we are building with Xcode, use the +// config.h file that Autotools generates. This is located in +// BasiliskII/src/Unix/ +#include "../Unix/config.h" +#else + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +/* #undef CRAY_STACKSEG_END */ + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define is using ESD. */ +/* #undef ENABLE_ESD */ + +/* Define if using DGA with framebuffer device. */ +/* #define ENABLE_FBDEV_DGA 1 */ + +/* Define if using GTK. */ +/* #undef ENABLE_GTK */ + +/* Define if using "mon". */ +/* #undef ENABLE_MON */ + +/* Define if using native 68k mode. */ +/* #undef ENABLE_NATIVE_M68K */ + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +/* #undef ENABLE_NLS */ + +/* Define if your system supports TUN/TAP devices. */ +/* #undef ENABLE_TUNTAP */ + +/* Define if using video enabled on SEGV signals. */ +/* #undef ENABLE_VOSF */ + +/* Define if using XFree86 DGA extension. */ +/* #undef ENABLE_XF86_DGA */ + +/* Define if using XFree86 DGA extension. */ +/* #define ENABLE_XF86_VIDMODE 1 */ + +/* Define to 1 if you have the `acoshl' function. */ +#define HAVE_ACOSHL 1 + +/* Define to 1 if you have the `acosl' function. */ +#define HAVE_ACOSL 1 + +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#define HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_ARGZ_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Define to 1 if you have the `asinhl' function. */ +#define HAVE_ASINHL 1 + +/* Define to 1 if you have the `asinl' function. */ +#define HAVE_ASINL 1 + +/* Define if your system has header. */ +/* #undef HAVE_ASM_UCONTEXT */ + +/* Define to 1 if you have the `asprintf' function. */ +#define HAVE_ASPRINTF 1 + +/* Define to 1 if you have the `atanh' function. */ +#define HAVE_ATANH 1 + +/* Define to 1 if you have the `atanhl' function. */ +#define HAVE_ATANHL 1 + +/* Define to 1 if you have the `atanl' function. */ +#define HAVE_ATANL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_AVAILABILITYMACROS_H 1 + +/* Define to 1 if the system has the type `caddr_t'. */ +#define HAVE_CADDR_T 1 + +/* Define to 1 if you have the `ceill' function. */ +#define HAVE_CEILL 1 + +/* Define to 1 if you have the `cfmakeraw' function. */ +#define HAVE_CFMAKERAW 1 + +/* Define to 1 if you have the `clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the `coshl' function. */ +#define HAVE_COSHL 1 + +/* Define to 1 if you have the `cosl' function. */ +#define HAVE_COSL 1 + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_FEOF_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FGETS_UNLOCKED 0 + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_GETC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#define HAVE_DECL__SNPRINTF 0 + +/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you + don't. */ +#define HAVE_DECL__SNWPRINTF 0 + +/* Define if you have /dev/ptmx */ +/* #undef HAVE_DEV_PTMX */ + +/* Define if you have /dev/ptc */ +/* #undef HAVE_DEV_PTS_AND_PTC */ + +/* Define to 1 if you have the `expl' function. */ +#define HAVE_EXPL 1 + +/* Define to 1 if you have the `fabsl' function. */ +#define HAVE_FABSL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `finite' function. */ +#define HAVE_FINITE 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_FLOATINGPOINT_H */ + +/* Define to 1 if you have the `floorl' function. */ +#define HAVE_FLOORL 1 + +/* Define if framework AppKit is available. */ +#define HAVE_FRAMEWORK_APPKIT 1 + +/* Define if framework Carbon is available. */ +#define HAVE_FRAMEWORK_CARBON 1 + +/* Define if framework CoreFoundation is available. */ +#define HAVE_FRAMEWORK_COREFOUNDATION 1 + +/* Define if framework IOKit is available. */ +#define HAVE_FRAMEWORK_IOKIT 1 + +/* Define if framework SDL is available. */ +/* #undef HAVE_FRAMEWORK_SDL */ + +/* Define to 1 if you have the `fwprintf' function. */ +#define HAVE_FWPRINTF 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if you have the `getegid' function. */ +#define HAVE_GETEGID 1 + +/* Define to 1 if you have the `geteuid' function. */ +#define HAVE_GETEUID 1 + +/* Define to 1 if you have the `getgid' function. */ +#define HAVE_GETGID 1 + +/* Define to 1 if you have the `getpagesize' function. */ +#define HAVE_GETPAGESIZE 1 + +/* Define if the GNU gettext() function is already present or preinstalled. */ +/* #undef HAVE_GETTEXT */ + +/* Define to 1 if you have the `getuid' function. */ +#define HAVE_GETUID 1 + +/* Define if libgnomeui is available. */ +/* #undef HAVE_GNOMEUI */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_HISTORY_H */ + +/* Define if you have the iconv() function. */ +#define HAVE_ICONV 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_IEEE754_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_IEEEFP_H */ + +/* Define to 1 if you have the `inet_aton' function. */ +#define HAVE_INET_ATON 1 + +/* Define if you have the 'intmax_t' type in or . */ +#define HAVE_INTMAX_T 1 + +/* Define if exists and doesn't clash with . */ +#define HAVE_INTTYPES_H 1 + +/* Define if exists, doesn't clash with , and + declares uintmax_t. */ +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the header + file. */ +#define HAVE_IOKIT_STORAGE_IOBLOCKSTORAGEDEVICE_H 1 + +/* Define to 1 if you have the `isinf' function. */ +#define HAVE_ISINF 1 + +/* Define to 1 if you have the `isinfl' function. */ +/* #undef HAVE_ISINFL */ + +/* Define to 1 if you have the `isnan' function. */ +#define HAVE_ISNAN 1 + +/* Define to 1 if you have the `isnanl' function. */ +/* #undef HAVE_ISNANL */ + +/* Define to 1 if you have the `isnormal' function. */ +/* #undef HAVE_ISNORMAL */ + +/* Define if you have and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define if your file defines LC_MESSAGES. */ +#define HAVE_LC_MESSAGES 1 + +/* Define to 1 if you have the `curses' library (-lcurses). */ +/* #undef HAVE_LIBCURSES */ + +/* Define to 1 if you have the `Hcurses' library (-lHcurses). */ +/* #undef HAVE_LIBHCURSES */ + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `ncurses' library (-lncurses). */ +/* #undef HAVE_LIBNCURSES */ + +/* Define to 1 if you have the `posix4' library (-lposix4). */ +/* #undef HAVE_LIBPOSIX4 */ + +/* Define to 1 if you have the `readline' library (-lreadline). */ +/* #undef HAVE_LIBREADLINE */ + +/* Define to 1 if you have the `rt' library (-lrt). */ +/* #undef HAVE_LIBRT */ + +/* Define to 1 if you have the `termcap' library (-ltermcap). */ +/* #undef HAVE_LIBTERMCAP */ + +/* Define to 1 if you have the `terminfo' library (-lterminfo). */ +/* #undef HAVE_LIBTERMINFO */ + +/* Define to 1 if you have the `termlib' library (-ltermlib). */ +/* #undef HAVE_LIBTERMLIB */ + +/* Define to 1 if you have the `vhd' library (-lvhd). */ +/* #undef HAVE_LIBVHD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if there is a linker script to relocate the executable above + 0x70000000. */ +/* #undef HAVE_LINKER_SCRIPT */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LINUX_IF_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LINUX_IF_TUN_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if the system has the type `loff_t'. */ +/* #undef HAVE_LOFF_T */ + +/* Define to 1 if you have the `log10l' function. */ +#define HAVE_LOG10L 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LOGIN_H */ + +/* Define to 1 if you have the `logl' function. */ +#define HAVE_LOGL 1 + +/* Define if you have the 'long double' type. */ +#define HAVE_LONG_DOUBLE 1 + +/* Define if you have the 'long long' type. */ +#define HAVE_LONG_LONG 1 + +/* Define if your system supports Mach exceptions. */ +#define HAVE_MACH_EXCEPTIONS 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MACH_MACH_H 1 + +/* Define to 1 if you have the `mach_task_self' function. */ +#define HAVE_MACH_TASK_SELF 1 + +/* Define if your system has a working vm_allocate()-based memory allocator. + */ +#define HAVE_MACH_VM 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MALLOC_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mempcpy' function. */ +/* #undef HAVE_MEMPCPY */ + +/* Define to 1 if you have the `mmap' function. */ +#define HAVE_MMAP 1 + +/* Define if defines MAP_ANON and mmap()'ing with MAP_ANON works. + */ +/* #undef HAVE_MMAP_ANON */ + +/* Define if defines MAP_ANONYMOUS and mmap()'ing with + MAP_ANONYMOUS works. */ +/* #undef HAVE_MMAP_ANONYMOUS */ + +/* Define if your system has a working mmap()-based memory allocator. */ +/* #undef HAVE_MMAP_VM */ + +/* Define to 1 if you have the `mprotect' function. */ +#define HAVE_MPROTECT 1 + +/* Define to 1 if you have the `munmap' function. */ +#define HAVE_MUNMAP 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NAN_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_NET_IF_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NET_IF_TUN_H */ + +/* Define if you are on NEWS-OS (additions from openssh-3.2.2p1, for + sshpty.c). */ +/* #undef HAVE_NEWS4 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_NL_TYPES_H 1 + +/* Define to 1 if you have the `poll' function. */ +#define HAVE_POLL 1 + +/* Define if your printf() function supports format strings with positions. */ +#define HAVE_POSIX_PRINTF 1 + +/* Define to 1 if you have the `powl' function. */ +#define HAVE_POWL 1 + +/* Define if pthreads are available. */ +#define HAVE_PTHREADS 1 + +/* Define to 1 if you have the `pthread_cancel' function. */ +#define HAVE_PTHREAD_CANCEL 1 + +/* Define to 1 if you have the `pthread_cond_init' function. */ +#define HAVE_PTHREAD_COND_INIT 1 + +/* Define to 1 if you have the `pthread_mutexattr_setprotocol' function. */ +#define HAVE_PTHREAD_MUTEXATTR_SETPROTOCOL 1 + +/* Define to 1 if you have the `pthread_mutexattr_setpshared' function. */ +#define HAVE_PTHREAD_MUTEXATTR_SETPSHARED 1 + +/* Define to 1 if you have the `pthread_mutexattr_settype' function. */ +#define HAVE_PTHREAD_MUTEXATTR_SETTYPE 1 + +/* Define to 1 if you have the `pthread_testcancel' function. */ +#define HAVE_PTHREAD_TESTCANCEL 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_PTY_H */ + +/* Define to 1 if you have the `putenv' function. */ +#define HAVE_PUTENV 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_READLINE_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_READLINE_HISTORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_READLINE_READLINE_H 1 + +/* Define to 1 if you have the `sem_init' function. */ +#define HAVE_SEM_INIT 1 + +/* Define to 1 if you have the `setenv' function. */ +#define HAVE_SETENV 1 + +/* Define to 1 if you have the `setlocale' function. */ +#define HAVE_SETLOCALE 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define if we know a hack to replace siginfo_t->si_addr member. */ +/* #undef HAVE_SIGCONTEXT_SUBTERFUGE */ + +/* Define if your system supports extended signals. */ +/* #undef HAVE_SIGINFO_T */ +//#define HAVE_SIGINFO_T 1 + +/* Define to 1 if you have the `signal' function. */ +#define HAVE_SIGNAL 1 + +/* Define to 1 if you have the `signbit' function. */ +/* #undef HAVE_SIGNBIT */ + +/* Define if we can ignore the fault (instruction skipping in SIGSEGV + handler). */ +#define HAVE_SIGSEGV_SKIP_INSTRUCTION 1 + +/* Define to 1 if you have the `sinhl' function. */ +#define HAVE_SINHL 1 + +/* Define to 1 if you have the `sinl' function. */ +#define HAVE_SINL 1 + +/* Define if slirp library is supported */ +#define HAVE_SLIRP 1 + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the `sqrtl' function. */ +#define HAVE_SQRTL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDDEF_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define if exists, doesn't clash with , and declares + uintmax_t. */ +#define HAVE_STDINT_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `stpcpy' function. */ +#define HAVE_STPCPY 1 + +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the `strerror' function. */ +#define HAVE_STRERROR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strlcpy' function. */ +#define HAVE_STRLCPY 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_STROPTS_H */ + +/* Define to 1 if you have the `strtoul' function. */ +#define HAVE_STRTOUL 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_BITYPES_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_BSDTTY_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_FILIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_IOCTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_POLL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_STROPTS_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the `tanhl' function. */ +#define HAVE_TANHL 1 + +/* Define to 1 if you have the `tanl' function. */ +#define HAVE_TANL 1 + +/* Define to 1 if you have the `task_self' function. */ +/* #undef HAVE_TASK_SELF */ + +/* Define to 1 if you have the `timer_create' function. */ +/* #undef HAVE_TIMER_CREATE */ + +/* Define to 1 if you have the `tsearch' function. */ +#define HAVE_TSEARCH 1 + +/* Define if you have the 'uintmax_t' type in or . */ +#define HAVE_UINTMAX_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the 'unsigned long long' type. */ +#define HAVE_UNSIGNED_LONG_LONG 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UTIL_H 1 + +/* Define to 1 if you have the `vhangup' function. */ +/* #undef HAVE_VHANGUP */ + +/* Define to 1 if you have the `vm_allocate' function. */ +#define HAVE_VM_ALLOCATE 1 + +/* Define to 1 if you have the `vm_deallocate' function. */ +#define HAVE_VM_DEALLOCATE 1 + +/* Define to 1 if you have the `vm_protect' function. */ +#define HAVE_VM_PROTECT 1 + +/* Define if you have the 'wchar_t' type. */ +#define HAVE_WCHAR_T 1 + +/* Define to 1 if you have the `wcslen' function. */ +#define HAVE_WCSLEN 1 + +/* Define if your system supports Windows exceptions. */ +/* #undef HAVE_WIN32_EXCEPTIONS */ + +/* Define if you have the 'wint_t' type. */ +#define HAVE_WINT_T 1 + +/* Define to 1 if you have the `_getpty' function. */ +/* #undef HAVE__GETPTY */ + +/* Define to 1 if you have the `__argz_count' function. */ +/* #undef HAVE___ARGZ_COUNT */ + +/* Define to 1 if you have the `__argz_next' function. */ +/* #undef HAVE___ARGZ_NEXT */ + +/* Define to 1 if you have the `__argz_stringify' function. */ +/* #undef HAVE___ARGZ_STRINGIFY */ + +/* Define to 1 if you have the `__fsetlocking' function. */ +/* #undef HAVE___FSETLOCKING */ + +/* Define to the floating point format of the host machine. */ +#define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT + +/* Define to 1 if the host machine stores floating point numbers in memory + with the word containing the sign bit at the lowest address, or to 0 if it + does it the other way around. This macro should not be defined if the + ordering is the same as for multi-word integers. */ +/* #undef HOST_FLOAT_WORDS_BIG_ENDIAN */ + +/* Define as const if the declaration of iconv() needs const. */ +#define ICONV_CONST + +/* Define if integer division by zero raises signal SIGFPE. */ +#define INTDIV0_RAISES_SIGFPE 0 + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define this program name. */ +#define PACKAGE "Basilisk II" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "Basilisk II" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "Basilisk II 1.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "BasiliskII" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.0" + +/* Define if the __PAGEZERO Mach-O Low Memory Globals hack works on this + system. */ +/* #undef PAGEZERO_HACK */ + +/* Define if exists and defines unusable PRI* macros. */ +/* #undef PRI_MACROS_BROKEN */ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* Define if your system requires sigactions to be reinstalled. */ +/* #undef SIGACTION_NEED_REINSTALL */ + +/* Define if your system requires signals to be reinstalled. */ +/* #undef SIGNAL_NEED_REINSTALL */ + +/* The size of `double', as computed by sizeof. */ +#define SIZEOF_DOUBLE 8 + +/* The size of `float', as computed by sizeof. */ +#define SIZEOF_FLOAT 4 + +/* The size of `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* The size of `long', as computed by sizeof. */ +#define SIZEOF_LONG 8 + +/* The size of `long double', as computed by sizeof. */ +#define SIZEOF_LONG_DOUBLE 16 + +/* The size of `long long', as computed by sizeof. */ +#define SIZEOF_LONG_LONG 8 + +/* The size of `short', as computed by sizeof. */ +#define SIZEOF_SHORT 2 + +/* The size of `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 8 + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +/* #undef SIZE_MAX */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define to 1 if your declares `struct tm'. */ +/* #undef TM_IN_SYS_TIME */ + +/* Define if BSD-style non-blocking I/O is to be used */ +/* #undef USE_FIONBIO */ + +/* Define to enble SDL support */ +#define USE_SDL 1 + +/* Define to enable SDL audio support */ +#define USE_SDL_AUDIO 1 + +/* Define to enable SDL video graphics support */ +#define USE_SDL_VIDEO 1 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Define this program version. */ +#define VERSION "1.0" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define to 1 if the X Window System is missing or not being used. */ +/* #undef X_DISPLAY_MISSING */ + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to 1 if on MINIX. */ +/* #undef _MINIX */ + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +/* #undef ptrdiff_t */ + +/* Define to empty if the C compiler doesn't support this keyword. */ +/* #undef signed */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define to 'int' if doesn't define. */ +/* #undef socklen_t */ + +/* Define to unsigned long or unsigned long long if and + don't define. */ +/* #undef uintmax_t */ + +#define FPU_IEEE + +#endif diff --git a/BasiliskII/src/MacOSX/etherhelpertool.c b/BasiliskII/src/MacOSX/etherhelpertool.c new file mode 100644 index 00000000..2b1073e6 --- /dev/null +++ b/BasiliskII/src/MacOSX/etherhelpertool.c @@ -0,0 +1,580 @@ +/* + * etherhelpertool.c - Reads and writes raw ethernet packets usng bpf + * interface. + * + * Copyright (C) 2010, Daniel Sumorok + * + * Basilisk II (C) 1997-2008 Christian Bauer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include + +#include + +#define STR_MAX 256 +#define MAX_ARGV 10 + +static int open_bpf(char *ifname); +static int open_tap(char *ifname); +static int retreive_auth_info(void); +static int main_loop(int sd, int use_bpf); +static int run_cmd(const char *cmd); +static void handler(int signum); +static int install_signal_handlers(); +static void do_exit(); + +static char remove_bridge[STR_MAX]; +static const char *exec_name = "etherhelpertool"; + +int main(int argc, char **argv) +{ + char *if_name; + int ret = 255; + int sd; + int tapNum; + int use_bpf; + + if (argc != 2) { + return 255; + } + + if_name = argv[1]; + + do { + ret = retreive_auth_info(); + if (ret != 0) { + fprintf(stderr, "%s: authorization failed.\n", + exec_name); + ret = 254; + break; + } + + if (strncmp(if_name, "tap", 3) == 0) { + sd = open_tap(if_name); + use_bpf = 0; + } else { + sd = open_bpf(if_name); + use_bpf = 1; + } + + if (sd < 0) { + fprintf(stderr, "%s: open device failed.\n", + exec_name); + ret = 253; + break; + } + + if (install_signal_handlers() != 0) { + fprintf(stderr, + "%s: failed to install signal handers.\n", + exec_name); + ret = 252; + break; + } + + ret = main_loop(sd, use_bpf); + close(sd); + } while (0); + + do_exit(); + + return ret; +} + +static int main_loop(int sd, int use_bpf) +{ + fd_set readSet; + char *outgoing, *incoming; + unsigned short *out_len; + unsigned short *in_len; + int in_index, out_index; + u_int blen = 0; + int ret; + int fret = 0; + struct bpf_hdr *hdr; + int pkt_len; + int frame_len; + int pad; + char c = 0; + + if (use_bpf) { + if (ioctl(sd, BIOCGBLEN, &blen) < 0) { + fprintf(stderr, + "%s: ioctl() failed.\n", + exec_name); + return -1; + } + } else { + blen = 4096; + } + + incoming = malloc(blen); + if (incoming == NULL) { + fprintf(stderr, + "%s: malloc() failed.\n", + exec_name); + return -2; + } + + outgoing = malloc(blen); + if (outgoing == NULL) { + free(outgoing); + fprintf(stderr, + "%s: malloc() failed.\n", + exec_name); + return -3; + } + + in_index = 0; + out_index = 0; + + out_len = (unsigned short *)outgoing; + + /* Let our parent know we are ready for business. */ + write(0, &c, 1); + + while (1) { + int i; + FD_ZERO(&readSet); + FD_SET(0, &readSet); + FD_SET(sd, &readSet); + + ret = select(sd + 1, &readSet, NULL, NULL, NULL); + if (ret < 0) { + fprintf(stderr, + "%s: select() failed.\n", + exec_name); + fret = -4; + break; + } + + if (FD_ISSET(0, &readSet)) { + if (out_index < 2) { + ret = read(0, outgoing + out_index, 2-out_index); + } else { + ret = read(0, outgoing + out_index, *out_len - out_index + 2); + } + + if (ret < 1) { + if(ret < 0) { + fprintf(stderr, + "%s: read() failed.\n", + exec_name); + } + fret = -5; + break; + } + + out_index += ret; + if (out_index > 1) { + if ((*out_len + 2) > blen) { + fret = -6; + break; + } + + if (out_index == (*out_len + 2)) { + ret = write(sd, out_len + 1, *out_len); + if (ret != *out_len) { + fprintf(stderr, + "%s: write() failed.\n", + exec_name); + fret = -7; + break; + } + out_index = 0; + } + } + + } + + if (use_bpf && FD_ISSET(sd, &readSet)) { + int i; + + ret = read(sd, incoming, blen); + if (ret < 1) { + if(ret < 0) { + fprintf(stderr, + "%s: read() failed %d.\n", + exec_name, errno); + } + fret = -8; + break; + } + + hdr = (struct bpf_hdr *)incoming; + in_len = (unsigned short *)(incoming + 16); + + do { + pkt_len = hdr->bh_caplen; + frame_len = pkt_len + 18; + + if ((pkt_len < 0) || (frame_len > ret) || (frame_len < 0)) { + fret = -9; + break; + } + *in_len = pkt_len; + + if (write(0, in_len, pkt_len + 2) < (pkt_len + 2)) { + fret = -10; + break; + } + + if ((frame_len & 0x03) == 0) { + pad = 0; + } else { + pad = 4 - (frame_len & 0x03); + } + + ret -= (frame_len + pad); + hdr = (struct bpf_hdr *)((unsigned char *)hdr + frame_len + pad); + in_len = (unsigned short *)((unsigned char *)hdr + 16); + } while (ret > 0); + + if (fret != 0) { + fprintf(stderr, + "%s: fret == %d.\n", + exec_name, fret); + break; + } + } + + if (!use_bpf && FD_ISSET(sd, &readSet)) { + in_len = (unsigned short *)incoming; + + pkt_len = read(sd, in_len + 1, blen-2); + if (pkt_len < 14) { + fprintf(stderr, + "%s: read() returned %d.\n", + exec_name, pkt_len); + fret = -8; + break; + } + + *in_len = pkt_len; + if (write(0, in_len, pkt_len + 2) < (pkt_len + 2)) { + fprintf(stderr, + "%s: write() failed\n", + exec_name); + fret = -10; + break; + } + + } + + } + + free(incoming); + free(outgoing); + + return fret; +} + +static int retreive_auth_info(void) +{ + AuthorizationRef aRef; + OSStatus status; + AuthorizationRights myRights; + AuthorizationRights *newRights; + AuthorizationItem *myItem; + AuthorizationItem myItems[1]; + AuthorizationItemSet *mySet; + int i; + + status = AuthorizationCopyPrivilegedReference(&aRef, kAuthorizationFlagDefaults); + if (status != errAuthorizationSuccess) { + return -1; + } + + status = AuthorizationCopyInfo(aRef, NULL, &mySet); + if (status != errAuthorizationSuccess) { + AuthorizationFree(aRef, kAuthorizationFlagDestroyRights); + return -1; + } + + myItems[0].name = "system.privilege.admin"; + myItems[0].valueLength = 0; + myItems[0].value = NULL; + myItems[0].flags = 0; + + myRights.count = sizeof (myItems) / sizeof (myItems[0]); + myRights.items = myItems; + + status = AuthorizationCopyRights(aRef, &myRights, NULL, + kAuthorizationFlagExtendRights, + &newRights); + if (status != errAuthorizationSuccess) { + AuthorizationFreeItemSet(mySet); + AuthorizationFree(aRef, kAuthorizationFlagDestroyRights); + return -2; + } + + AuthorizationFreeItemSet(newRights); + AuthorizationFreeItemSet(mySet); + AuthorizationFree(aRef, kAuthorizationFlagDestroyRights); + + return 0; +} + +static int open_tap(char *ifname) +{ + char str[STR_MAX] = {0}; + char ifstr[STR_MAX] = {0}; + char *interface; + char *address = NULL; + char *netmask = NULL; + char *bridge = NULL; + char *bridged_if = NULL; + int sd; + + snprintf(ifstr, STR_MAX, "%s", ifname); + interface = strtok(ifstr, "/"); + bridge = strtok(NULL, "/"); + if (bridge != NULL) { + bridged_if = strtok(NULL, "/"); + } + interface = strtok(ifstr, ":"); + + address = strtok(NULL, ":"); + + if (address != NULL) { + netmask = strtok(NULL, ":"); + } + + snprintf(str, STR_MAX, "/dev/%s", interface); + + sd = open(str, O_RDWR); + if (sd < 0) { + fprintf(stderr, "%s: Failed to open %s\n", + exec_name, interface); + return -1; + } + + if (address == NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s up", interface); + } else if (netmask == NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s %s", + interface, address); + } else { + snprintf(str, STR_MAX, "/sbin/ifconfig %s %s netmask %s", + interface, address, netmask); + } + + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to configure %s\n", + exec_name, interface); + close(sd); + return -1; + } + + if (bridge != NULL) { + /* Check to see if bridge is alread up */ + snprintf(str, STR_MAX, "/sbin/ifconfig %s", bridge); + if (run_cmd(str) == 0) { + /* bridge is already up */ + if (bridged_if != NULL) { + fprintf(stderr, "%s: Warning: %s already exists, so %s was not added.\n", + exec_name, bridge, bridged_if); + } + } else { + snprintf(str, STR_MAX, "/sbin/ifconfig %s create", bridge); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to create %s\n", + exec_name, bridge); + close(sd); + return -1; + } + strlcpy(remove_bridge, bridge, STR_MAX); + + snprintf(str, STR_MAX, "/sbin/ifconfig %s up", bridge); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to open %s\n", + exec_name, bridge); + close(sd); + return -1; + } + + if (bridged_if != NULL) { + snprintf(str, STR_MAX, "/sbin/ifconfig %s addm %s", + bridge, bridged_if); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to add %s to %s\n", + exec_name, bridged_if, bridge); + close(sd); + return -1; + } + } + } + + snprintf(str, STR_MAX, "/sbin/ifconfig %s addm %s", + bridge, interface); + if (run_cmd(str) != 0) { + fprintf(stderr, "%s: Failed to add %s to %s\n", + exec_name, interface, bridge); + close(sd); + return -1; + } + } + + return sd; +} + +static int open_bpf(char *ifname) +{ + u_int blen = 0; + struct ifreq ifreq; + u_int arg; + + int sd = open("/dev/bpf2", O_RDWR); + + if (sd < 0) { + return -1; + } + + if (ioctl(sd, BIOCGBLEN, &blen) < 0) { + close(sd); + return -2; + } + + bzero(&ifreq, sizeof(ifreq)); + strncpy(ifreq.ifr_name, ifname, IFNAMSIZ); + + arg = 0; + if (ioctl(sd, BIOCSETIF, &ifreq) < 0) { + close(sd); + return -3; + } + + arg = 0; + if (ioctl(sd, BIOCSSEESENT, &arg) < 0) { + close(sd); + return -4; + } + + arg = 1; + if (ioctl(sd, BIOCPROMISC, &arg) < 0) { + close(sd); + return -5; + } + + arg = 1; + if (ioctl(sd, BIOCIMMEDIATE, &arg) < 0) { + close(sd); + return -6; + } + + return sd; +} + +static int run_cmd(const char *cmd) { + char cmd_buffer[STR_MAX] = {0}; + char *argv[MAX_ARGV + 1] = {0}; + int i; + pid_t pid, waitpid; + int status = 0; + + /* Collect arguments */ + strncpy(cmd_buffer, cmd, STR_MAX-1); + + argv[0] = strtok(cmd_buffer, " "); + for (i=1; i +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include + +#include + +FILE * run_tool(const char *if_name, const char *tool_name); + +FILE * run_tool(const char *if_name, const char *tool_name) +{ + OSStatus auth_status; + FILE *fp = NULL; + char *args[] = {NULL, NULL, NULL}; + int ret; + char path_buffer[256]; + AuthorizationFlags auth_flags; + AuthorizationRef auth_ref; + AuthorizationItem auth_items[1]; + AuthorizationRights auth_rights; + CFBundleRef bundle_ref; + CFURLRef url_ref; + CFStringRef path_str; + CFStringRef tool_name_str; + char c; + + bundle_ref = CFBundleGetMainBundle(); + if(bundle_ref == NULL) { + return NULL; + } + + tool_name_str = CFStringCreateWithCString(NULL, tool_name, + kCFStringEncodingUTF8); + + url_ref = CFBundleCopyResourceURL(bundle_ref, tool_name_str, + NULL, NULL); + CFRelease(tool_name_str); + + if(url_ref == NULL) { + return NULL; + } + + path_str = CFURLCopyFileSystemPath(url_ref, kCFURLPOSIXPathStyle); + CFRelease(url_ref); + + if(path_str == NULL) { + return NULL; + } + + if(!CFStringGetCString(path_str, path_buffer, sizeof(path_buffer), + kCFStringEncodingUTF8)) { + CFRelease(path_str); + return NULL; + } + CFRelease(path_str); + + args[0] = (char *)tool_name; + args[1] = (char *)if_name; + + auth_flags = kAuthorizationFlagExtendRights | + kAuthorizationFlagInteractionAllowed | + kAuthorizationFlagPreAuthorize; + + auth_items[0].name = "system.privilege.admin"; + auth_items[0].valueLength = 0; + auth_items[0].value = NULL; + auth_items[0].flags = 0; + + auth_rights.count = sizeof (auth_items) / sizeof (auth_items[0]); + auth_rights.items = auth_items; + + auth_status = AuthorizationCreate(&auth_rights, + kAuthorizationEmptyEnvironment, + auth_flags, + &auth_ref); + + if (auth_status != errAuthorizationSuccess) { + fprintf(stderr, "%s: AuthorizationCreate() failed.\n", + __func__); + return NULL; + } + + auth_status = AuthorizationExecuteWithPrivileges(auth_ref, + path_buffer, + kAuthorizationFlagDefaults, + args + 1, + &fp); + + if (auth_status != errAuthorizationSuccess) { + fprintf(stderr, "%s: AuthorizationExecWithPrivileges() failed.\n", + __func__); + return NULL; + } + + if(fread(&c, 1, 1, fp) != 1) { + fclose(fp); + return NULL; + } + + return fp; +} diff --git a/BasiliskII/src/MacOSX/sys_darwin.cpp b/BasiliskII/src/MacOSX/sys_darwin.cpp index cc6c8a3c..5582fff0 100644 --- a/BasiliskII/src/MacOSX/sys_darwin.cpp +++ b/BasiliskII/src/MacOSX/sys_darwin.cpp @@ -259,7 +259,7 @@ void DarwinAddFloppyPrefs(void) while ((nextFloppy = IOIteratorNext(allFloppies))) { char bsdPath[MAXPATHLEN]; - long size; + long size = 0; Boolean gotSize = FALSE; CFTypeRef sizeAsCFNumber = IORegistryEntryCreateCFProperty(nextFloppy, diff --git a/BasiliskII/src/MacOSX/utils_macosx.mm b/BasiliskII/src/MacOSX/utils_macosx.mm index b653638d..c68d2115 100644 --- a/BasiliskII/src/MacOSX/utils_macosx.mm +++ b/BasiliskII/src/MacOSX/utils_macosx.mm @@ -19,7 +19,13 @@ */ #include +#include "sysdeps.h" #include "utils_macosx.h" +#include + +#if SDL_VERSION_ATLEAST(2,0,0) +#include +#endif // This is used from video_sdl.cpp. void NSAutoReleasePool_wrap(void (*fn)(void)) @@ -28,3 +34,50 @@ void NSAutoReleasePool_wrap(void (*fn)(void)) fn(); [pool release]; } + +#if SDL_VERSION_ATLEAST(2,0,0) + +void disable_SDL2_macosx_menu_bar_keyboard_shortcuts() { + for (NSMenuItem * menu_item in [NSApp mainMenu].itemArray) { + if (menu_item.hasSubmenu) { + for (NSMenuItem * sub_item in menu_item.submenu.itemArray) { + sub_item.keyEquivalent = @""; + sub_item.keyEquivalentModifierMask = 0; + } + } + if ([menu_item.title isEqualToString:@"View"]) { + [[NSApp mainMenu] removeItem:menu_item]; + break; + } + } +} + +bool is_fullscreen_osx(SDL_Window * window) +{ + if (!window) { + return false; + } + + SDL_SysWMinfo wmInfo; + SDL_VERSION(&wmInfo.version); + if (!SDL_GetWindowWMInfo(window, &wmInfo)) { + return false; + } + + const NSWindowStyleMask styleMask = [wmInfo.info.cocoa.window styleMask]; + return (styleMask & NSWindowStyleMaskFullScreen) != 0; +} +#endif + +void set_menu_bar_visible_osx(bool visible) +{ + [NSMenu setMenuBarVisible:(visible ? YES : NO)]; +} + +void set_current_directory() +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + chdir([[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] UTF8String]); + [pool release]; +} + From dc8bb7e2a3e3938a915f9c0f98a510637a3872df Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Thu, 25 Jun 2020 16:56:40 -0400 Subject: [PATCH 27/54] Back out the hack from kanjitalk755 - In 8 bit color game, the hack crashed the app. - After backing out the hack, I can play 256 color game with displaycolordepth 8. - By default, the displaycolordepth is 0. Signed-off-by: Ricky Zhang --- BasiliskII/src/CrossPlatform/video_blit.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/BasiliskII/src/CrossPlatform/video_blit.cpp b/BasiliskII/src/CrossPlatform/video_blit.cpp index 5f1a0ae3..1a6e82e6 100644 --- a/BasiliskII/src/CrossPlatform/video_blit.cpp +++ b/BasiliskII/src/CrossPlatform/video_blit.cpp @@ -523,21 +523,11 @@ bool Screen_blitter_init(VisualFormat const & visual_format, bool native_byte_or #else const bool use_sdl_video = false; #endif -#if REAL_ADDRESSING || DIRECT_ADDRESSING || USE_SDL_VIDEO +#if REAL_ADDRESSING || DIRECT_ADDRESSING if (mac_depth == 1 && !use_sdl_video && !visual_format.fullscreen) { // Windowed 1-bit mode uses a 1-bit X image, so there's no need for special blitting routines Screen_blit = Blit_Copy_Raw; - -#if __MACOSX__ && !defined(SHEEPSHAVER) - // dludwig@pobox.com, HACK: This works on OSX (64-bit, at least), but not Linux (32-bit?). Why? - // To note, __MACOSX__ is an SDL-declared macro (for platform identification at compile time). - } else if (mac_depth == 16) { - - Screen_blit = Blit_Copy_Raw; - -#endif - } else { // Compute RGB shift values From 9ef2f87adb88bfd990d74376bafdda611c1521e6 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sat, 27 Jun 2020 00:01:36 -0400 Subject: [PATCH 28/54] Add CI for SDL1 and SDL2. Signed-off-by: Ricky Zhang --- .travis.yml | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 27c17b7a..53e35f63 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,18 +3,36 @@ language: cpp matrix: include: - os: linux - dist: trusty + dist: bionic sudo: required compiler: gcc + env : + - SDL_MAJOR_VERSION=1 + - os: linux + dist: bionic + sudo: required + compiler: gcc + env : + - SDL_MAJOR_VERSION=2 addons: apt: packages: - - libsdl1.2-dev + - libsdl1.2-dev - libgtk2.0-dev + - libsdl2-dev script: - - cd BasiliskII/src/Unix - - NO_CONFIGURE=1 ./autogen.sh - - ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon - - make -j 4 + - ERR_CODE=0 + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + cd BasiliskII/src/Unix; + NO_CONFIGURE=1 ./autogen.sh; + if [[ $SDL_MAJOR_VERSION == *"1"* ]]; then + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon; + make -j 4 || ERR_CODE=$?; + else + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --with-sdl2; + make -j 4 || ERR_CODE=$?; + fi + fi + - (exit $ERR_CODE) From 1bfb0e94a3099795f80a6688a5527f184b52c272 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sat, 27 Jun 2020 12:13:51 -0400 Subject: [PATCH 29/54] Back out the hack from kanjitalk755 Remove the unused header. Signed-off-by: Ricky Zhang --- BasiliskII/src/CrossPlatform/video_blit.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/BasiliskII/src/CrossPlatform/video_blit.cpp b/BasiliskII/src/CrossPlatform/video_blit.cpp index 1a6e82e6..83c12e07 100644 --- a/BasiliskII/src/CrossPlatform/video_blit.cpp +++ b/BasiliskII/src/CrossPlatform/video_blit.cpp @@ -22,10 +22,6 @@ #include "video.h" #include "video_blit.h" -#if USE_SDL_VIDEO -#include -#endif - #include #include From e6cd178881c54d0a09939b87c21987ba5b1882c0 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sun, 28 Jun 2020 10:29:52 -0400 Subject: [PATCH 30/54] Point CI status to upstream-master branch. Signed-off-by: Ricky Zhang --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dba6c383..6c6227d8 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # BasiliskII -[![Build Status](https://travis-ci.org/rickyzhang82/macemu.svg)](https://travis-ci.org/rickyzhang82/macemu) +[![Build Status](https://travis-ci.org/rickyzhang82/macemu.svg?branch=upstream-master)](https://travis-ci.org/rickyzhang82/macemu) From 8e88e462ee0fe27163ab6c90764425cb4307a5d3 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sun, 28 Jun 2020 18:42:14 -0400 Subject: [PATCH 31/54] Fix code review issues. Signed-off-by: Ricky Zhang --- BasiliskII/src/MacOSX/Info.plist | 2 +- BasiliskII/src/MacOSX/extfs_macosx.cpp | 3 +- BasiliskII/src/MacOSX/runtool.c | 136 ------------------------- BasiliskII/src/MacOSX/utils_macosx.mm | 1 - BasiliskII/src/SDL/video_sdl.cpp | 2 +- BasiliskII/src/SDL/video_sdl2.cpp | 2 +- BasiliskII/src/Unix/main_unix.cpp | 18 ++-- BasiliskII/src/user_strings.cpp | 3 +- 8 files changed, 15 insertions(+), 152 deletions(-) delete mode 100644 BasiliskII/src/MacOSX/runtool.c diff --git a/BasiliskII/src/MacOSX/Info.plist b/BasiliskII/src/MacOSX/Info.plist index da3aae24..b879fccd 100644 --- a/BasiliskII/src/MacOSX/Info.plist +++ b/BasiliskII/src/MacOSX/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable BasiliskII CFBundleGetInfoString - Basilisk II version 1.0, Copyright © 1997-2017 Christian Bauer et al. SDL2 port + Basilisk II version 1.0, Copyright © 1997-2020 Christian Bauer et al. SDL2 port CFBundleIconFile BasiliskII.icns CFBundleIdentifier diff --git a/BasiliskII/src/MacOSX/extfs_macosx.cpp b/BasiliskII/src/MacOSX/extfs_macosx.cpp index dea61b00..34f57058 100644 --- a/BasiliskII/src/MacOSX/extfs_macosx.cpp +++ b/BasiliskII/src/MacOSX/extfs_macosx.cpp @@ -252,7 +252,8 @@ static int open_rsrc(const char *path, int flag) make_rsrc_path(path, rsrc_path); int fd = open(rsrc_path, flag); - if (fd < 0 && flag == O_WRONLY) fd = open(rsrc_path, O_WRONLY | O_CREAT); // for APFS + if (fd < 0 && flag == O_WRONLY) + fd = open(rsrc_path, O_WRONLY | O_CREAT); // for APFS return fd; } diff --git a/BasiliskII/src/MacOSX/runtool.c b/BasiliskII/src/MacOSX/runtool.c deleted file mode 100644 index 77c38a43..00000000 --- a/BasiliskII/src/MacOSX/runtool.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * runtool.m - Run an external program as root for networking - * Copyright (C) 2010, Daniel Sumorok - * - * Basilisk II (C) 1997-2008 Christian Bauer - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include - -#include - -FILE * run_tool(const char *if_name, const char *tool_name); - -FILE * run_tool(const char *if_name, const char *tool_name) -{ - OSStatus auth_status; - FILE *fp = NULL; - char *args[] = {NULL, NULL, NULL}; - int ret; - char path_buffer[256]; - AuthorizationFlags auth_flags; - AuthorizationRef auth_ref; - AuthorizationItem auth_items[1]; - AuthorizationRights auth_rights; - CFBundleRef bundle_ref; - CFURLRef url_ref; - CFStringRef path_str; - CFStringRef tool_name_str; - char c; - - bundle_ref = CFBundleGetMainBundle(); - if(bundle_ref == NULL) { - return NULL; - } - - tool_name_str = CFStringCreateWithCString(NULL, tool_name, - kCFStringEncodingUTF8); - - url_ref = CFBundleCopyResourceURL(bundle_ref, tool_name_str, - NULL, NULL); - CFRelease(tool_name_str); - - if(url_ref == NULL) { - return NULL; - } - - path_str = CFURLCopyFileSystemPath(url_ref, kCFURLPOSIXPathStyle); - CFRelease(url_ref); - - if(path_str == NULL) { - return NULL; - } - - if(!CFStringGetCString(path_str, path_buffer, sizeof(path_buffer), - kCFStringEncodingUTF8)) { - CFRelease(path_str); - return NULL; - } - CFRelease(path_str); - - args[0] = (char *)tool_name; - args[1] = (char *)if_name; - - auth_flags = kAuthorizationFlagExtendRights | - kAuthorizationFlagInteractionAllowed | - kAuthorizationFlagPreAuthorize; - - auth_items[0].name = "system.privilege.admin"; - auth_items[0].valueLength = 0; - auth_items[0].value = NULL; - auth_items[0].flags = 0; - - auth_rights.count = sizeof (auth_items) / sizeof (auth_items[0]); - auth_rights.items = auth_items; - - auth_status = AuthorizationCreate(&auth_rights, - kAuthorizationEmptyEnvironment, - auth_flags, - &auth_ref); - - if (auth_status != errAuthorizationSuccess) { - fprintf(stderr, "%s: AuthorizationCreate() failed.\n", - __func__); - return NULL; - } - - auth_status = AuthorizationExecuteWithPrivileges(auth_ref, - path_buffer, - kAuthorizationFlagDefaults, - args + 1, - &fp); - - if (auth_status != errAuthorizationSuccess) { - fprintf(stderr, "%s: AuthorizationExecWithPrivileges() failed.\n", - __func__); - return NULL; - } - - if(fread(&c, 1, 1, fp) != 1) { - fclose(fp); - return NULL; - } - - return fp; -} diff --git a/BasiliskII/src/MacOSX/utils_macosx.mm b/BasiliskII/src/MacOSX/utils_macosx.mm index c68d2115..6fcb8290 100644 --- a/BasiliskII/src/MacOSX/utils_macosx.mm +++ b/BasiliskII/src/MacOSX/utils_macosx.mm @@ -36,7 +36,6 @@ void NSAutoReleasePool_wrap(void (*fn)(void)) } #if SDL_VERSION_ATLEAST(2,0,0) - void disable_SDL2_macosx_menu_bar_keyboard_shortcuts() { for (NSMenuItem * menu_item in [NSApp mainMenu].itemArray) { if (menu_item.hasSubmenu) { diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index 037d3fab..cbf034d8 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -2279,4 +2279,4 @@ void video_set_dirty_area(int x, int y, int w, int h) // XXX handle dirty bounding boxes for non-VOSF modes } #endif -#endif //end of ifdef ENABLE_SDL1 +#endif //ifdef ENABLE_SDL1 diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 6e497550..ce83ed9d 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -2720,4 +2720,4 @@ void video_set_dirty_area(int x, int y, int w, int h) } #endif -#endif // ends: ifdef ENABLE_SDL2 +#endif //ifdef ENABLE_SDL2 diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp index 03ef32a2..af6f6609 100644 --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -456,17 +456,17 @@ int main(int argc, char **argv) argv[i] = NULL; } -#if defined(__APPLE__) && defined(__MACH__) +#if __MACOSX__ // Mac OS X likes to pass in various options of its own, when launching an app. // Attempt to ignore these. - if (argv[i]) { - const char * mac_psn_prefix = "-psn_"; - if (strcmp(argv[i], "-NSDocumentRevisionsDebugMode") == 0) { - argv[i] = NULL; - } else if (strncmp(mac_psn_prefix, argv[i], strlen(mac_psn_prefix)) == 0) { - argv[i] = NULL; - } - } + if (argv[i]) { + const char * mac_psn_prefix = "-psn_"; + if (strcmp(argv[i], "-NSDocumentRevisionsDebugMode") == 0) { + argv[i] = NULL; + } else if (strncmp(mac_psn_prefix, argv[i], strlen(mac_psn_prefix)) == 0) { + argv[i] = NULL; + } + } #endif } diff --git a/BasiliskII/src/user_strings.cpp b/BasiliskII/src/user_strings.cpp index a9de2b6c..f6b59ed4 100644 --- a/BasiliskII/src/user_strings.cpp +++ b/BasiliskII/src/user_strings.cpp @@ -241,7 +241,6 @@ user_string_def common_strings[] = { {STR_CPU_68040_LAB, "68040"}, {STR_ROM_FILE_CTRL, "ROM File"}, {STR_IDLEWAIT_CTRL, "Don't Use CPU When Idle"}, - {STR_JIT_PANE_TITLE, "JIT Compiler"}, {STR_JIT_CTRL, "Enable JIT Compiler"}, {STR_JIT_FPU_CTRL, "Compile FPU Instructions"}, @@ -258,7 +257,7 @@ user_string_def common_strings[] = { {STR_WINDOW_TITLE_GRABBED, "Basilisk II (mouse grabbed, press Ctrl-F5 to release)"}, {STR_WINDOW_TITLE_GRABBED0, "Basilisk II (mouse grabbed, press "}, {STR_WINDOW_TITLE_GRABBED1, "Ctrl-"}, -#ifdef __APPLE__ +#ifdef __MACOSX__ {STR_WINDOW_TITLE_GRABBED2, "Opt-"}, {STR_WINDOW_TITLE_GRABBED3, "Cmd-"}, #else From 18701c97df4bb54804d580301500ec5800683112 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Mon, 29 Jun 2020 22:10:27 -0400 Subject: [PATCH 32/54] Fix year in project Signed-off-by: Ricky Zhang --- BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings b/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings index 5b8ae8d0..c3ef149e 100755 --- a/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings +++ b/BasiliskII/src/MacOSX/English.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ /* Localized versions of Info.plist keys */ -NSHumanReadableCopyright = "Copyright © 1997-2017 Christian Bauer et al. Freely distributable under the terms of the GNU GPL."; +NSHumanReadableCopyright = "Copyright © 1997-2020 Christian Bauer et al. Freely distributable under the terms of the GNU GPL."; From 56665d30a3caebeed6988203c54408e5a0559b7e Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Tue, 30 Jun 2020 17:55:05 -0400 Subject: [PATCH 33/54] For Darwin, the default addressing mode is memory banks. When the host OS is Mac OS X, direct addressing in BII doesn't guarantee that the allocated memory for frame buffer base address in the host (FrameBaseHost) satisfies the following conditions: - FrameBaseHost > RamBaseHost - (FrameBaseHost - RamBaseHost) + Frame_Size < 4GiB where RamBaseHost refers to the emulated RAM base address in the host. This may cause the random hang problem where the allocated frame address failed to meet the conditions above. Because the direct addressing mapping is a simple math: RamAddrMac = RamAddrHost - RamBaseHost. See details: https://github.com/cebix/macemu/issues/203 Signed-off-by: Ricky Zhang --- BasiliskII/src/Unix/configure.ac | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index fee8b577..e8ad4e1e 100644 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -1428,6 +1428,11 @@ fi AC_TRANSLATE_DEFINE(HAVE_LINKER_SCRIPT, "$ac_cv_linker_script_works", [Define if there is a linker script to relocate the executable above 0x70000000.]) +dnl override the addressing mode test order for Darwin +if [[ "x$OS_TYPE" = "xdarwin" ]]; then + ADDRESSING_TEST_ORDER="banks" +fi + dnl Determine the addressing mode to use if [[ "x$WANT_NATIVE_M68K" = "xyes" ]]; then ADDRESSING_MODE="real" From bdf5a276d33f438c90724a9af37beed0f6ad1017 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Tue, 30 Jun 2020 18:25:50 -0400 Subject: [PATCH 34/54] Abort when frame buffer memory allocation fails. - Remove unused code in vm_acquire_framebuffer function. Signed-off-by: Ricky Zhang --- BasiliskII/src/SDL/video_sdl.cpp | 21 +++++++++------------ BasiliskII/src/SDL/video_sdl2.cpp | 21 +++++++++------------ 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index cbf034d8..103bec13 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -197,18 +197,7 @@ extern void SysMountFirstFloppy(void); static void *vm_acquire_framebuffer(uint32 size) { - // always try to reallocate framebuffer at the same address - static void *fb = VM_MAP_FAILED; - if (fb != VM_MAP_FAILED) { - if (vm_acquire_fixed(fb, size) < 0) { -#ifndef SHEEPSHAVER - printf("FATAL: Could not reallocate framebuffer at previous address\n"); -#endif - fb = VM_MAP_FAILED; - } - } - if (fb == VM_MAP_FAILED) - fb = vm_acquire(size, VM_MAP_DEFAULT | VM_MAP_32BIT); + void *fb = vm_acquire(size, VM_MAP_DEFAULT | VM_MAP_32BIT); return fb; } @@ -667,6 +656,10 @@ void driver_base::init() // Allocate memory for frame buffer (SIZE is extended to page-boundary) the_buffer_size = page_extend((aligned_height + 2) * s->pitch); the_buffer = (uint8 *)vm_acquire_framebuffer(the_buffer_size); + if (VM_MAP_FAILED == the_buffer) { + perror("Failed to allocate frame buffer for guest OS."); + abort(); + } the_buffer_copy = (uint8 *)malloc(the_buffer_size); D(bug("the_buffer = %p, the_buffer_copy = %p, the_host_buffer = %p\n", the_buffer, the_buffer_copy, the_host_buffer)); @@ -691,6 +684,10 @@ void driver_base::init() the_buffer_size = (aligned_height + 2) * s->pitch; the_buffer_copy = (uint8 *)calloc(1, the_buffer_size); the_buffer = (uint8 *)vm_acquire_framebuffer(the_buffer_size); + if (VM_MAP_FAILED == the_buffer) { + perror("Failed to allocate frame buffer for guest OS."); + abort(); + } D(bug("the_buffer = %p, the_buffer_copy = %p\n", the_buffer, the_buffer_copy)); } diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index ce83ed9d..10bd96db 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -214,18 +214,7 @@ extern void SysMountFirstFloppy(void); static void *vm_acquire_framebuffer(uint32 size) { - // always try to reallocate framebuffer at the same address - static void *fb = VM_MAP_FAILED; - if (fb != VM_MAP_FAILED) { - if (vm_acquire_fixed(fb, size) < 0) { -#ifndef SHEEPSHAVER - printf("FATAL: Could not reallocate framebuffer at previous address\n"); -#endif - fb = VM_MAP_FAILED; - } - } - if (fb == VM_MAP_FAILED) - fb = vm_acquire(size, VM_MAP_DEFAULT | VM_MAP_32BIT); + void *fb = vm_acquire(size, VM_MAP_DEFAULT | VM_MAP_32BIT); return fb; } @@ -999,6 +988,10 @@ void driver_base::init() the_buffer_size = page_extend((aligned_height + 2) * s->pitch); the_buffer = (uint8 *)vm_acquire_framebuffer(the_buffer_size); the_buffer_copy = (uint8 *)malloc(the_buffer_size); + if (VM_MAP_FAILED == the_buffer) { + perror("Failed to allocate frame buffer for guest OS."); + abort(); + } D(bug("the_buffer = %p, the_buffer_copy = %p, the_host_buffer = %p\n", the_buffer, the_buffer_copy, the_host_buffer)); // Check whether we can initialize the VOSF subsystem and it's profitable @@ -1022,6 +1015,10 @@ void driver_base::init() the_buffer_size = (aligned_height + 2) * s->pitch; the_buffer_copy = (uint8 *)calloc(1, the_buffer_size); the_buffer = (uint8 *)vm_acquire_framebuffer(the_buffer_size); + if (VM_MAP_FAILED == the_buffer) { + perror("Failed to allocate frame buffer for guest OS."); + abort(); + } D(bug("the_buffer = %p, the_buffer_copy = %p\n", the_buffer, the_buffer_copy)); } From d30528795b77b673aad43ff0aeb9f30ebfb99194 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Tue, 30 Jun 2020 20:43:54 -0400 Subject: [PATCH 35/54] Beef up CI build cases. - Add addressing modes direct and memory banks. Signed-off-by: Ricky Zhang --- .travis.yml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 53e35f63..d1eefd24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,12 +8,28 @@ matrix: compiler: gcc env : - SDL_MAJOR_VERSION=1 + - ADDRESSING_MODE=direct + - os: linux + dist: bionic + sudo: required + compiler: gcc + env : + - SDL_MAJOR_VERSION=1 + - ADDRESSING_MODE=banks - os: linux dist: bionic sudo: required compiler: gcc env : - SDL_MAJOR_VERSION=2 + - ADDRESSING_MODE=direct + - os: linux + dist: bionic + sudo: required + compiler: gcc + env : + - SDL_MAJOR_VERSION=2 + - ADDRESSING_MODE=banks addons: apt: @@ -28,10 +44,10 @@ script: cd BasiliskII/src/Unix; NO_CONFIGURE=1 ./autogen.sh; if [[ $SDL_MAJOR_VERSION == *"1"* ]]; then - ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon; + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --enable-addressing=$ADDRESSING_MODE; make -j 4 || ERR_CODE=$?; else - ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --with-sdl2; + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --with-sdl2 --enable-addressing=$ADDRESSING_MODE; make -j 4 || ERR_CODE=$?; fi fi From 0b38469385787a64878f82ac10dfcd1429203cc4 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Tue, 30 Jun 2020 20:58:28 -0400 Subject: [PATCH 36/54] Add Mac OS X CI. Signed-off-by: Ricky Zhang --- .travis.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d1eefd24..def8cd1b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,9 @@ matrix: env : - SDL_MAJOR_VERSION=2 - ADDRESSING_MODE=banks + - os: osx + compiler: clang + osx_image: xcode12 addons: apt: @@ -37,12 +40,17 @@ addons: - libsdl1.2-dev - libgtk2.0-dev - libsdl2-dev + homebrew: + packages: + - sdl2 + - autoconf + - make script: - ERR_CODE=0 + - cd BasiliskII/src/Unix + - NO_CONFIGURE=1 ./autogen.sh - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - cd BasiliskII/src/Unix; - NO_CONFIGURE=1 ./autogen.sh; if [[ $SDL_MAJOR_VERSION == *"1"* ]]; then ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --enable-addressing=$ADDRESSING_MODE; make -j 4 || ERR_CODE=$?; @@ -50,5 +58,8 @@ script: ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --with-sdl2 --enable-addressing=$ADDRESSING_MODE; make -j 4 || ERR_CODE=$?; fi + else + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-gtk=no --with-mon --with-sdl2 --enable-addressing=banks; + make -j 4 || ERR_CODE=$?; fi - (exit $ERR_CODE) From 6f4da45eebced76dbd3af78eb5654f24ecd3149a Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Thu, 2 Jul 2020 18:24:32 -0400 Subject: [PATCH 37/54] Enhanced scale up and scale down in SDL2. - Enable window mode to be resizable. - When restore the window, restore the scale ratio to 1. Signed-off-by: Ricky Zhang --- BasiliskII/src/SDL/video_sdl2.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 10bd96db..0a11443f 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -690,7 +690,7 @@ static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags int window_width = width; int window_height = height; - Uint32 window_flags = SDL_WINDOW_ALLOW_HIGHDPI; + Uint32 window_flags = SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_RESIZABLE; const int window_flags_to_monitor = SDL_WINDOW_FULLSCREEN; if (flags & SDL_WINDOW_FULLSCREEN) { @@ -2124,9 +2124,17 @@ static int SDLCALL on_sdl_event_generated(void *userdata, SDL_Event * event) } #endif } - } break; + } break; // end of SDL_WINDOWEVENT_RESIZED + case SDL_WINDOWEVENT_RESTORED: { + // When the user minimizes the window and then restore it, + // we restore the scale factor to 1. + if (sdl_window) { + const VIDEO_MODE &mode = drv->mode; + SDL_SetWindowSize(sdl_window, VIDEO_MODE_X, VIDEO_MODE_Y); + } + } break; // end of SDL_WINDOWEVENT_RESTORED } - } break; + } break; // end of SDL_WINDOWEVENT } return EVENT_ADD_TO_QUEUE; From 98f3cab95384d1bc9f93a36580ac9ed05bffc169 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Fri, 3 Jul 2020 09:58:06 -0400 Subject: [PATCH 38/54] Fix indentation. Signed-off-by: Ricky Zhang --- BasiliskII/src/SDL/video_sdl2.cpp | 340 +++++++++++++++--------------- 1 file changed, 170 insertions(+), 170 deletions(-) diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 0a11443f..032023f4 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -187,24 +187,24 @@ extern void SysMountFirstFloppy(void); */ #ifdef ENABLE_VOSF -#define SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE) do { \ +#define SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE) do { \ if (sdl_window && SDL_GetWindowFlags(sdl_window) & (SDL_WINDOW_FULLSCREEN)) \ - the_host_buffer = (uint8 *)(SURFACE)->pixels; \ + the_host_buffer = (uint8 *)(SURFACE)->pixels; \ } while (0) #else #define SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE) #endif -#define SDL_VIDEO_LOCK_SURFACE(SURFACE) do { \ - if (SDL_MUSTLOCK(SURFACE)) { \ - SDL_LockSurface(SURFACE); \ - SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE); \ - } \ +#define SDL_VIDEO_LOCK_SURFACE(SURFACE) do { \ + if (SDL_MUSTLOCK(SURFACE)) { \ + SDL_LockSurface(SURFACE); \ + SDL_VIDEO_LOCK_VOSF_SURFACE(SURFACE); \ + } \ } while (0) #define SDL_VIDEO_UNLOCK_SURFACE(SURFACE) do { \ - if (SDL_MUSTLOCK(SURFACE)) \ - SDL_UnlockSurface(SURFACE); \ + if (SDL_MUSTLOCK(SURFACE)) \ + SDL_UnlockSurface(SURFACE); \ } while (0) @@ -684,10 +684,10 @@ static void shutdown_sdl_video() static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags) { - if (guest_surface) { - delete_sdl_video_surfaces(); - } - + if (guest_surface) { + delete_sdl_video_surfaces(); + } + int window_width = width; int window_height = height; Uint32 window_flags = SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_RESIZABLE; @@ -713,8 +713,8 @@ static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags SDL_GetWindowSize(sdl_window, &old_window_width, &old_window_height); old_window_flags = SDL_GetWindowFlags(sdl_window); if (old_window_width != window_width || - old_window_height != window_height || - (old_window_flags & window_flags_to_monitor) != (window_flags & window_flags_to_monitor)) + old_window_height != window_height || + (old_window_flags & window_flags_to_monitor) != (window_flags & window_flags_to_monitor)) { delete_sdl_video_window(); } @@ -722,19 +722,19 @@ static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, PrefsFindBool("scale_nearest") ? "nearest" : "linear"); -/* + /* // Always use a resize-able window. This helps allow SDL to manage // transitions involving fullscreen to or from windowed-mode. window_flags |= SDL_WINDOW_RESIZABLE; */ if (!sdl_window) { sdl_window = SDL_CreateWindow( - "Basilisk II", - SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, - window_width, - window_height, - window_flags); + "Basilisk II", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + window_width, + window_height, + window_flags); if (!sdl_window) { shutdown_sdl_video(); return NULL; @@ -774,78 +774,78 @@ static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags SDL_GetRendererInfo(sdl_renderer, &info); printf("Using SDL_Renderer driver: %s\n", (info.name ? info.name : "(null)")); } - - if (!sdl_update_video_mutex) { - sdl_update_video_mutex = SDL_CreateMutex(); - } + + if (!sdl_update_video_mutex) { + sdl_update_video_mutex = SDL_CreateMutex(); + } SDL_assert(sdl_texture == NULL); - sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, width, height); - if (!sdl_texture) { - shutdown_sdl_video(); - return NULL; - } - sdl_update_video_rect.x = 0; - sdl_update_video_rect.y = 0; - sdl_update_video_rect.w = 0; - sdl_update_video_rect.h = 0; + sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, width, height); + if (!sdl_texture) { + shutdown_sdl_video(); + return NULL; + } + sdl_update_video_rect.x = 0; + sdl_update_video_rect.y = 0; + sdl_update_video_rect.w = 0; + sdl_update_video_rect.h = 0; SDL_assert(guest_surface == NULL); SDL_assert(host_surface == NULL); - switch (bpp) { - case 8: - guest_surface = SDL_CreateRGBSurface(0, width, height, 8, 0, 0, 0, 0); - break; - case 16: - guest_surface = SDL_CreateRGBSurface(0, width, height, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0x00000000); - break; - case 32: - guest_surface = SDL_CreateRGBSurface(0, width, height, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000); - host_surface = guest_surface; - break; - default: - printf("WARNING: An unsupported bpp of %d was used\n", bpp); - break; - } - if (!guest_surface) { - shutdown_sdl_video(); - return NULL; - } + switch (bpp) { + case 8: + guest_surface = SDL_CreateRGBSurface(0, width, height, 8, 0, 0, 0, 0); + break; + case 16: + guest_surface = SDL_CreateRGBSurface(0, width, height, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0x00000000); + break; + case 32: + guest_surface = SDL_CreateRGBSurface(0, width, height, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000); + host_surface = guest_surface; + break; + default: + printf("WARNING: An unsupported bpp of %d was used\n", bpp); + break; + } + if (!guest_surface) { + shutdown_sdl_video(); + return NULL; + } - if (!host_surface) { - Uint32 texture_format; - if (SDL_QueryTexture(sdl_texture, &texture_format, NULL, NULL, NULL) != 0) { - printf("ERROR: Unable to get the SDL texture's pixel format: %s\n", SDL_GetError()); - shutdown_sdl_video(); - return NULL; - } + if (!host_surface) { + Uint32 texture_format; + if (SDL_QueryTexture(sdl_texture, &texture_format, NULL, NULL, NULL) != 0) { + printf("ERROR: Unable to get the SDL texture's pixel format: %s\n", SDL_GetError()); + shutdown_sdl_video(); + return NULL; + } - int bpp; - Uint32 Rmask, Gmask, Bmask, Amask; - if (!SDL_PixelFormatEnumToMasks(texture_format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) { - printf("ERROR: Unable to determine format for host SDL_surface: %s\n", SDL_GetError()); - shutdown_sdl_video(); - return NULL; - } + int bpp; + Uint32 Rmask, Gmask, Bmask, Amask; + if (!SDL_PixelFormatEnumToMasks(texture_format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) { + printf("ERROR: Unable to determine format for host SDL_surface: %s\n", SDL_GetError()); + shutdown_sdl_video(); + return NULL; + } - host_surface = SDL_CreateRGBSurface(0, width, height, bpp, Rmask, Gmask, Bmask, Amask); - if (!host_surface) { - printf("ERROR: Unable to create host SDL_surface: %s\n", SDL_GetError()); - shutdown_sdl_video(); - return NULL; - } - } + host_surface = SDL_CreateRGBSurface(0, width, height, bpp, Rmask, Gmask, Bmask, Amask); + if (!host_surface) { + printf("ERROR: Unable to create host SDL_surface: %s\n", SDL_GetError()); + shutdown_sdl_video(); + return NULL; + } + } if (SDL_RenderSetLogicalSize(sdl_renderer, width, height) != 0) { printf("ERROR: Unable to set SDL rendeer's logical size (to %dx%d): %s\n", - width, height, SDL_GetError()); + width, height, SDL_GetError()); shutdown_sdl_video(); return NULL; } SDL_RenderSetIntegerScale(sdl_renderer, PrefsFindBool("scale_integer") ? SDL_TRUE : SDL_FALSE); - return guest_surface; + return guest_surface; } static int present_sdl_video() @@ -876,10 +876,10 @@ static int present_sdl_video() // modifying it! LOCK_PALETTE; SDL_LockMutex(sdl_update_video_mutex); - // Convert from the guest OS' pixel format, to the host OS' texture, if necessary. - if (host_surface != guest_surface && - host_surface != NULL && - guest_surface != NULL) + // Convert from the guest OS' pixel format, to the host OS' texture, if necessary. + if (host_surface != guest_surface && + host_surface != NULL && + guest_surface != NULL) { SDL_Rect destRect = sdl_update_video_rect; int result = SDL_BlitSurface(guest_surface, &sdl_update_video_rect, host_surface, &destRect); @@ -891,52 +891,52 @@ static int present_sdl_video() } UNLOCK_PALETTE; // passed potential deadlock, can unlock palette - // Update the host OS' texture - void * srcPixels = (void *)((uint8_t *)host_surface->pixels + - sdl_update_video_rect.y * host_surface->pitch + - sdl_update_video_rect.x * host_surface->format->BytesPerPixel); + // Update the host OS' texture + void * srcPixels = (void *)((uint8_t *)host_surface->pixels + + sdl_update_video_rect.y * host_surface->pitch + + sdl_update_video_rect.x * host_surface->format->BytesPerPixel); - if (SDL_UpdateTexture(sdl_texture, &sdl_update_video_rect, srcPixels, host_surface->pitch) != 0) { - SDL_UnlockMutex(sdl_update_video_mutex); + if (SDL_UpdateTexture(sdl_texture, &sdl_update_video_rect, srcPixels, host_surface->pitch) != 0) { + SDL_UnlockMutex(sdl_update_video_mutex); return -1; } - // We are done working with pixels in host_surface. Reset sdl_update_video_rect, then let - // other threads modify it, as-needed. - sdl_update_video_rect.x = 0; - sdl_update_video_rect.y = 0; - sdl_update_video_rect.w = 0; - sdl_update_video_rect.h = 0; - SDL_UnlockMutex(sdl_update_video_mutex); + // We are done working with pixels in host_surface. Reset sdl_update_video_rect, then let + // other threads modify it, as-needed. + sdl_update_video_rect.x = 0; + sdl_update_video_rect.y = 0; + sdl_update_video_rect.w = 0; + sdl_update_video_rect.h = 0; + SDL_UnlockMutex(sdl_update_video_mutex); - // Copy the texture to the display - if (SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, NULL) != 0) { + // Copy the texture to the display + if (SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, NULL) != 0) { return -1; } - // Update the display + // Update the display SDL_RenderPresent(sdl_renderer); - - // Indicate success to the caller! - return 0; + + // Indicate success to the caller! + return 0; } void update_sdl_video(SDL_Surface *s, int numrects, SDL_Rect *rects) { - // TODO: make sure SDL_Renderer resources get displayed, if and when - // MacsBug is running (and VideoInterrupt() might not get called) - - SDL_LockMutex(sdl_update_video_mutex); - for (int i = 0; i < numrects; ++i) { - SDL_UnionRect(&sdl_update_video_rect, &rects[i], &sdl_update_video_rect); - } - SDL_UnlockMutex(sdl_update_video_mutex); + // TODO: make sure SDL_Renderer resources get displayed, if and when + // MacsBug is running (and VideoInterrupt() might not get called) + + SDL_LockMutex(sdl_update_video_mutex); + for (int i = 0; i < numrects; ++i) { + SDL_UnionRect(&sdl_update_video_rect, &rects[i], &sdl_update_video_rect); + } + SDL_UnlockMutex(sdl_update_video_mutex); } void update_sdl_video(SDL_Surface *s, Sint32 x, Sint32 y, Sint32 w, Sint32 h) { - SDL_Rect temp = {x, y, w, h}; - update_sdl_video(s, 1, &temp); + SDL_Rect temp = {x, y, w, h}; + update_sdl_video(s, 1, &temp); } #ifdef SHEEPSHAVER @@ -1004,7 +1004,7 @@ void driver_base::init() printf("VOSF acceleration is not profitable on this platform, disabling it\n"); use_vosf = false; } - if (!use_vosf) { + if (!use_vosf) { free(the_buffer_copy); vm_release(the_buffer, the_buffer_size); the_host_buffer = NULL; @@ -1088,7 +1088,7 @@ driver_base::~driver_base() // the Basilisk II desktop, delete_sdl_video_surfaces(); // This deletes instances of SDL_Surface and SDL_Texture //shutdown_sdl_video(); // This deletes SDL_Window, SDL_Renderer, in addition to - // instances of SDL_Surface and SDL_Texture. + // instances of SDL_Surface and SDL_Texture. // the_buffer shall always be mapped through vm_acquire_framebuffer() if (the_buffer != VM_MAP_FAILED) { @@ -1793,12 +1793,12 @@ int16 video_mode_change(VidLocals *csSave, uint32 ParamPtr) { /* return if no mode change */ if ((csSave->saveData == ReadMacInt32(ParamPtr + csData)) && - (csSave->saveMode == ReadMacInt16(ParamPtr + csMode))) return noErr; + (csSave->saveMode == ReadMacInt16(ParamPtr + csMode))) return noErr; /* first find video mode in table */ for (int i=0; VModes[i].viType != DIS_INVALID; i++) { if ((ReadMacInt16(ParamPtr + csMode) == VModes[i].viAppleMode) && - (ReadMacInt32(ParamPtr + csData) == VModes[i].viAppleID)) { + (ReadMacInt32(ParamPtr + csData) == VModes[i].viAppleID)) { csSave->saveMode = ReadMacInt16(ParamPtr + csMode); csSave->saveData = ReadMacInt32(ParamPtr + csData); csSave->savePage = ReadMacInt16(ParamPtr + csPage); @@ -2086,55 +2086,55 @@ enum { static int SDLCALL on_sdl_event_generated(void *userdata, SDL_Event * event) { switch (event->type) { - case SDL_KEYUP: { - SDL_Keysym const & ks = event->key.keysym; - switch (ks.sym) { - case SDLK_F5: { - if (is_hotkey_down(ks) && !PrefsFindBool("hardcursor")) { - drv->toggle_mouse_grab(); - return EVENT_DROP_FROM_QUEUE; - } - } break; + case SDL_KEYUP: { + SDL_Keysym const & ks = event->key.keysym; + switch (ks.sym) { + case SDLK_F5: { + if (is_hotkey_down(ks) && !PrefsFindBool("hardcursor")) { + drv->toggle_mouse_grab(); + return EVENT_DROP_FROM_QUEUE; } } break; - - case SDL_WINDOWEVENT: { - switch (event->window.event) { - case SDL_WINDOWEVENT_RESIZED: { - // Handle changes of fullscreen. This is done here, in - // on_sdl_event_generated() and not the main SDL_Event-processing - // loop, in order to perform this change on the main thread. - // (Some os'es UI APIs, such as OSX's NSWindow, are not - // thread-safe.) - const bool is_full = is_fullscreen(sdl_window); - const bool adjust_fullscreen = \ - (display_type == DISPLAY_WINDOW && is_full) || - (display_type == DISPLAY_SCREEN && !is_full); - if (adjust_fullscreen) { - do_toggle_fullscreen(); - + } + } break; + + case SDL_WINDOWEVENT: { + switch (event->window.event) { + case SDL_WINDOWEVENT_RESIZED: { + // Handle changes of fullscreen. This is done here, in + // on_sdl_event_generated() and not the main SDL_Event-processing + // loop, in order to perform this change on the main thread. + // (Some os'es UI APIs, such as OSX's NSWindow, are not + // thread-safe.) + const bool is_full = is_fullscreen(sdl_window); + const bool adjust_fullscreen = \ + (display_type == DISPLAY_WINDOW && is_full) || + (display_type == DISPLAY_SCREEN && !is_full); + if (adjust_fullscreen) { + do_toggle_fullscreen(); + #if __MACOSX__ - // HACK-FIX: on OSX hosts, make sure that the OSX menu - // bar does not show up in fullscreen mode, when the - // cursor is near the top of the screen, lest the - // guest OS' menu bar be obscured. - if (is_full) { - extern void set_menu_bar_visible_osx(bool); - set_menu_bar_visible_osx(false); - } + // HACK-FIX: on OSX hosts, make sure that the OSX menu + // bar does not show up in fullscreen mode, when the + // cursor is near the top of the screen, lest the + // guest OS' menu bar be obscured. + if (is_full) { + extern void set_menu_bar_visible_osx(bool); + set_menu_bar_visible_osx(false); + } #endif - } - } break; // end of SDL_WINDOWEVENT_RESIZED - case SDL_WINDOWEVENT_RESTORED: { - // When the user minimizes the window and then restore it, - // we restore the scale factor to 1. - if (sdl_window) { - const VIDEO_MODE &mode = drv->mode; - SDL_SetWindowSize(sdl_window, VIDEO_MODE_X, VIDEO_MODE_Y); - } - } break; // end of SDL_WINDOWEVENT_RESTORED } - } break; // end of SDL_WINDOWEVENT + } break; // end of SDL_WINDOWEVENT_RESIZED + case SDL_WINDOWEVENT_RESTORED: { + // When the user minimizes the window and then restore it, + // we restore the scale factor to 1. + if (sdl_window) { + const VIDEO_MODE &mode = drv->mode; + SDL_SetWindowSize(sdl_window, VIDEO_MODE_X, VIDEO_MODE_Y); + } + } break; // end of SDL_WINDOWEVENT_RESTORED + } + } break; // end of SDL_WINDOWEVENT } return EVENT_ADD_TO_QUEUE; @@ -2175,7 +2175,7 @@ static void handle_events(void) break; } - // Mouse moved + // Mouse moved case SDL_MOUSEMOTION: if (mouse_grabbed) { drv->mouse_moved(event.motion.xrel, event.motion.yrel); @@ -2198,9 +2198,9 @@ static void handle_events(void) ADBKeyUp(key); } } - break; + break; - // Keyboard + // Keyboard case SDL_KEYDOWN: { int code = CODE_INVALID; if (use_keycodes && event2keycode(event.key, true) != CODE_HOTKEY) @@ -2267,24 +2267,24 @@ static void handle_events(void) } break; } - + case SDL_WINDOWEVENT: { switch (event.window.event) { - // Hidden parts exposed, force complete refresh of window - case SDL_WINDOWEVENT_EXPOSED: - force_complete_window_refresh(); - break; + // Hidden parts exposed, force complete refresh of window + case SDL_WINDOWEVENT_EXPOSED: + force_complete_window_refresh(); + break; // Force a complete window refresh when activating, to avoid redraw artifacts otherwise. - case SDL_WINDOWEVENT_RESTORED: - force_complete_window_refresh(); - break; + case SDL_WINDOWEVENT_RESTORED: + force_complete_window_refresh(); + break; } break; } - // Window "close" widget clicked + // Window "close" widget clicked case SDL_QUIT: if (SDL_GetModState() & (KMOD_LALT | KMOD_RALT)) break; ADBKeyDown(0x7f); // Power key From 7e83b9c49e7c3bb098a5c6e4b9b56a340c8357a9 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Fri, 3 Jul 2020 12:46:34 -0400 Subject: [PATCH 39/54] Fix Indentations. Signed-off-by: Ricky Zhang --- BasiliskII/src/uae_cpu/memory.cpp | 398 +++++++++++++++--------------- 1 file changed, 199 insertions(+), 199 deletions(-) diff --git a/BasiliskII/src/uae_cpu/memory.cpp b/BasiliskII/src/uae_cpu/memory.cpp index 7483f506..81dea568 100644 --- a/BasiliskII/src/uae_cpu/memory.cpp +++ b/BasiliskII/src/uae_cpu/memory.cpp @@ -53,27 +53,27 @@ addrbank mem_banks[65536]; #ifdef NO_INLINE_MEMORY_ACCESS uae_u32 longget (uaecptr addr) { - return call_mem_get_func (get_mem_bank (addr).lget, addr); + return call_mem_get_func (get_mem_bank (addr).lget, addr); } uae_u32 wordget (uaecptr addr) { - return call_mem_get_func (get_mem_bank (addr).wget, addr); + return call_mem_get_func (get_mem_bank (addr).wget, addr); } uae_u32 byteget (uaecptr addr) { - return call_mem_get_func (get_mem_bank (addr).bget, addr); + return call_mem_get_func (get_mem_bank (addr).bget, addr); } void longput (uaecptr addr, uae_u32 l) { - call_mem_put_func (get_mem_bank (addr).lput, addr, l); + call_mem_put_func (get_mem_bank (addr).lput, addr, l); } void wordput (uaecptr addr, uae_u32 w) { - call_mem_put_func (get_mem_bank (addr).wput, addr, w); + call_mem_put_func (get_mem_bank (addr).wput, addr, w); } void byteput (uaecptr addr, uae_u32 b) { - call_mem_put_func (get_mem_bank (addr).bput, addr, b); + call_mem_put_func (get_mem_bank (addr).bput, addr, b); } #endif @@ -88,42 +88,42 @@ static void REGPARAM2 dummy_bput (uaecptr, uae_u32) REGPARAM; uae_u32 REGPARAM2 dummy_lget (uaecptr addr) { - if (illegal_mem) - write_log ("Illegal lget at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal lget at %08x\n", addr); - return 0; + return 0; } uae_u32 REGPARAM2 dummy_wget (uaecptr addr) { - if (illegal_mem) - write_log ("Illegal wget at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal wget at %08x\n", addr); - return 0; + return 0; } uae_u32 REGPARAM2 dummy_bget (uaecptr addr) { - if (illegal_mem) - write_log ("Illegal bget at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal bget at %08x\n", addr); - return 0; + return 0; } void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l) { - if (illegal_mem) - write_log ("Illegal lput at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal lput at %08x\n", addr); } void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w) { - if (illegal_mem) - write_log ("Illegal wput at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal wput at %08x\n", addr); } void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b) { - if (illegal_mem) - write_log ("Illegal bput at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal bput at %08x\n", addr); } /* Mac RAM (32 bit addressing) */ @@ -140,35 +140,35 @@ static uintptr RAMBaseDiff; // RAMBaseHost - RAMBaseMac uae_u32 REGPARAM2 ram_lget(uaecptr addr) { - uae_u32 *m; - m = (uae_u32 *)(RAMBaseDiff + addr); - return do_get_mem_long(m); + uae_u32 *m; + m = (uae_u32 *)(RAMBaseDiff + addr); + return do_get_mem_long(m); } uae_u32 REGPARAM2 ram_wget(uaecptr addr) { - uae_u16 *m; - m = (uae_u16 *)(RAMBaseDiff + addr); - return do_get_mem_word(m); + uae_u16 *m; + m = (uae_u16 *)(RAMBaseDiff + addr); + return do_get_mem_word(m); } uae_u32 REGPARAM2 ram_bget(uaecptr addr) { - return (uae_u32)*(uae_u8 *)(RAMBaseDiff + addr); + return (uae_u32)*(uae_u8 *)(RAMBaseDiff + addr); } void REGPARAM2 ram_lput(uaecptr addr, uae_u32 l) { - uae_u32 *m; - m = (uae_u32 *)(RAMBaseDiff + addr); - do_put_mem_long(m, l); + uae_u32 *m; + m = (uae_u32 *)(RAMBaseDiff + addr); + do_put_mem_long(m, l); } void REGPARAM2 ram_wput(uaecptr addr, uae_u32 w) { - uae_u16 *m; - m = (uae_u16 *)(RAMBaseDiff + addr); - do_put_mem_word(m, w); + uae_u16 *m; + m = (uae_u16 *)(RAMBaseDiff + addr); + do_put_mem_word(m, w); } void REGPARAM2 ram_bput(uaecptr addr, uae_u32 b) @@ -178,7 +178,7 @@ void REGPARAM2 ram_bput(uaecptr addr, uae_u32 b) uae_u8 *REGPARAM2 ram_xlate(uaecptr addr) { - return (uae_u8 *)(RAMBaseDiff + addr); + return (uae_u8 *)(RAMBaseDiff + addr); } /* Mac RAM (24 bit addressing) */ @@ -193,35 +193,35 @@ static uae_u8 *REGPARAM2 ram24_xlate(uaecptr addr) REGPARAM; uae_u32 REGPARAM2 ram24_lget(uaecptr addr) { - uae_u32 *m; - m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff)); - return do_get_mem_long(m); + uae_u32 *m; + m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff)); + return do_get_mem_long(m); } uae_u32 REGPARAM2 ram24_wget(uaecptr addr) { - uae_u16 *m; - m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff)); - return do_get_mem_word(m); + uae_u16 *m; + m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff)); + return do_get_mem_word(m); } uae_u32 REGPARAM2 ram24_bget(uaecptr addr) { - return (uae_u32)*(uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)); + return (uae_u32)*(uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)); } void REGPARAM2 ram24_lput(uaecptr addr, uae_u32 l) { - uae_u32 *m; - m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff)); - do_put_mem_long(m, l); + uae_u32 *m; + m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff)); + do_put_mem_long(m, l); } void REGPARAM2 ram24_wput(uaecptr addr, uae_u32 w) { - uae_u16 *m; - m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff)); - do_put_mem_word(m, w); + uae_u16 *m; + m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff)); + do_put_mem_word(m, w); } void REGPARAM2 ram24_bput(uaecptr addr, uae_u32 b) @@ -231,7 +231,7 @@ void REGPARAM2 ram24_bput(uaecptr addr, uae_u32 b) uae_u8 *REGPARAM2 ram24_xlate(uaecptr addr) { - return (uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)); + return (uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)); } /* Mac ROM (32 bit addressing) */ @@ -248,44 +248,44 @@ static uintptr ROMBaseDiff; // ROMBaseHost - ROMBaseMac uae_u32 REGPARAM2 rom_lget(uaecptr addr) { - uae_u32 *m; - m = (uae_u32 *)(ROMBaseDiff + addr); - return do_get_mem_long(m); + uae_u32 *m; + m = (uae_u32 *)(ROMBaseDiff + addr); + return do_get_mem_long(m); } uae_u32 REGPARAM2 rom_wget(uaecptr addr) { - uae_u16 *m; - m = (uae_u16 *)(ROMBaseDiff + addr); - return do_get_mem_word(m); + uae_u16 *m; + m = (uae_u16 *)(ROMBaseDiff + addr); + return do_get_mem_word(m); } uae_u32 REGPARAM2 rom_bget(uaecptr addr) { - return (uae_u32)*(uae_u8 *)(ROMBaseDiff + addr); + return (uae_u32)*(uae_u8 *)(ROMBaseDiff + addr); } void REGPARAM2 rom_lput(uaecptr addr, uae_u32 b) { - if (illegal_mem) - write_log ("Illegal ROM lput at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal ROM lput at %08x\n", addr); } void REGPARAM2 rom_wput(uaecptr addr, uae_u32 b) { - if (illegal_mem) - write_log ("Illegal ROM wput at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal ROM wput at %08x\n", addr); } void REGPARAM2 rom_bput(uaecptr addr, uae_u32 b) { - if (illegal_mem) - write_log ("Illegal ROM bput at %08x\n", addr); + if (illegal_mem) + write_log ("Illegal ROM bput at %08x\n", addr); } uae_u8 *REGPARAM2 rom_xlate(uaecptr addr) { - return (uae_u8 *)(ROMBaseDiff + addr); + return (uae_u8 *)(ROMBaseDiff + addr); } /* Mac ROM (24 bit addressing) */ @@ -297,26 +297,26 @@ static uae_u8 *REGPARAM2 rom24_xlate(uaecptr addr) REGPARAM; uae_u32 REGPARAM2 rom24_lget(uaecptr addr) { - uae_u32 *m; - m = (uae_u32 *)(ROMBaseDiff + (addr & 0xffffff)); - return do_get_mem_long(m); + uae_u32 *m; + m = (uae_u32 *)(ROMBaseDiff + (addr & 0xffffff)); + return do_get_mem_long(m); } uae_u32 REGPARAM2 rom24_wget(uaecptr addr) { - uae_u16 *m; - m = (uae_u16 *)(ROMBaseDiff + (addr & 0xffffff)); - return do_get_mem_word(m); + uae_u16 *m; + m = (uae_u16 *)(ROMBaseDiff + (addr & 0xffffff)); + return do_get_mem_word(m); } uae_u32 REGPARAM2 rom24_bget(uaecptr addr) { - return (uae_u32)*(uae_u8 *)(ROMBaseDiff + (addr & 0xffffff)); + return (uae_u32)*(uae_u8 *)(ROMBaseDiff + (addr & 0xffffff)); } uae_u8 *REGPARAM2 rom24_xlate(uaecptr addr) { - return (uae_u8 *)(ROMBaseDiff + (addr & 0xffffff)); + return (uae_u8 *)(ROMBaseDiff + (addr & 0xffffff)); } /* Frame buffer */ @@ -347,120 +347,120 @@ static uintptr FrameBaseDiff; // MacFrameBaseHost - MacFrameBaseMac uae_u32 REGPARAM2 frame_direct_lget(uaecptr addr) { - uae_u32 *m; - m = (uae_u32 *)(FrameBaseDiff + addr); - return do_get_mem_long(m); + uae_u32 *m; + m = (uae_u32 *)(FrameBaseDiff + addr); + return do_get_mem_long(m); } uae_u32 REGPARAM2 frame_direct_wget(uaecptr addr) { - uae_u16 *m; - m = (uae_u16 *)(FrameBaseDiff + addr); - return do_get_mem_word(m); + uae_u16 *m; + m = (uae_u16 *)(FrameBaseDiff + addr); + return do_get_mem_word(m); } uae_u32 REGPARAM2 frame_direct_bget(uaecptr addr) { - return (uae_u32)*(uae_u8 *)(FrameBaseDiff + addr); + return (uae_u32)*(uae_u8 *)(FrameBaseDiff + addr); } void REGPARAM2 frame_direct_lput(uaecptr addr, uae_u32 l) { - uae_u32 *m; - m = (uae_u32 *)(FrameBaseDiff + addr); - do_put_mem_long(m, l); + uae_u32 *m; + m = (uae_u32 *)(FrameBaseDiff + addr); + do_put_mem_long(m, l); } void REGPARAM2 frame_direct_wput(uaecptr addr, uae_u32 w) { - uae_u16 *m; - m = (uae_u16 *)(FrameBaseDiff + addr); - do_put_mem_word(m, w); + uae_u16 *m; + m = (uae_u16 *)(FrameBaseDiff + addr); + do_put_mem_word(m, w); } void REGPARAM2 frame_direct_bput(uaecptr addr, uae_u32 b) { - *(uae_u8 *)(FrameBaseDiff + addr) = b; + *(uae_u8 *)(FrameBaseDiff + addr) = b; } uae_u32 REGPARAM2 frame_host_555_lget(uaecptr addr) { - uae_u32 *m, l; - m = (uae_u32 *)(FrameBaseDiff + addr); - l = *m; + uae_u32 *m, l; + m = (uae_u32 *)(FrameBaseDiff + addr); + l = *m; return swap_words(l); } uae_u32 REGPARAM2 frame_host_555_wget(uaecptr addr) { - uae_u16 *m; - m = (uae_u16 *)(FrameBaseDiff + addr); - return *m; + uae_u16 *m; + m = (uae_u16 *)(FrameBaseDiff + addr); + return *m; } void REGPARAM2 frame_host_555_lput(uaecptr addr, uae_u32 l) { - uae_u32 *m; - m = (uae_u32 *)(FrameBaseDiff + addr); - *m = swap_words(l); + uae_u32 *m; + m = (uae_u32 *)(FrameBaseDiff + addr); + *m = swap_words(l); } void REGPARAM2 frame_host_555_wput(uaecptr addr, uae_u32 w) { - uae_u16 *m; - m = (uae_u16 *)(FrameBaseDiff + addr); - *m = w; + uae_u16 *m; + m = (uae_u16 *)(FrameBaseDiff + addr); + *m = w; } uae_u32 REGPARAM2 frame_host_565_lget(uaecptr addr) { - uae_u32 *m, l; - m = (uae_u32 *)(FrameBaseDiff + addr); - l = *m; - l = (l & 0x001f001f) | ((l >> 1) & 0x7fe07fe0); - return swap_words(l); + uae_u32 *m, l; + m = (uae_u32 *)(FrameBaseDiff + addr); + l = *m; + l = (l & 0x001f001f) | ((l >> 1) & 0x7fe07fe0); + return swap_words(l); } uae_u32 REGPARAM2 frame_host_565_wget(uaecptr addr) { - uae_u16 *m, w; - m = (uae_u16 *)(FrameBaseDiff + addr); - w = *m; - return (w & 0x1f) | ((w >> 1) & 0x7fe0); + uae_u16 *m, w; + m = (uae_u16 *)(FrameBaseDiff + addr); + w = *m; + return (w & 0x1f) | ((w >> 1) & 0x7fe0); } void REGPARAM2 frame_host_565_lput(uaecptr addr, uae_u32 l) { - uae_u32 *m; - m = (uae_u32 *)(FrameBaseDiff + addr); - l = (l & 0x001f001f) | ((l << 1) & 0xffc0ffc0); - *m = swap_words(l); + uae_u32 *m; + m = (uae_u32 *)(FrameBaseDiff + addr); + l = (l & 0x001f001f) | ((l << 1) & 0xffc0ffc0); + *m = swap_words(l); } void REGPARAM2 frame_host_565_wput(uaecptr addr, uae_u32 w) { - uae_u16 *m; - m = (uae_u16 *)(FrameBaseDiff + addr); - *m = (w & 0x1f) | ((w << 1) & 0xffc0); + uae_u16 *m; + m = (uae_u16 *)(FrameBaseDiff + addr); + *m = (w & 0x1f) | ((w << 1) & 0xffc0); } uae_u32 REGPARAM2 frame_host_888_lget(uaecptr addr) { - uae_u32 *m, l; - m = (uae_u32 *)(FrameBaseDiff + addr); - return *m; + uae_u32 *m, l; + m = (uae_u32 *)(FrameBaseDiff + addr); + return *m; } void REGPARAM2 frame_host_888_lput(uaecptr addr, uae_u32 l) { - uae_u32 *m; - m = (uae_u32 *)(MacFrameBaseHost + addr - MacFrameBaseMac); - *m = l; + uae_u32 *m; + m = (uae_u32 *)(MacFrameBaseHost + addr - MacFrameBaseMac); + *m = l; } uae_u8 *REGPARAM2 frame_xlate(uaecptr addr) { - return (uae_u8 *)(FrameBaseDiff + addr); + return (uae_u8 *)(FrameBaseDiff + addr); } /* Mac framebuffer RAM (24 bit addressing) @@ -475,110 +475,110 @@ static void REGPARAM2 fram24_bput(uaecptr, uae_u32) REGPARAM; void REGPARAM2 fram24_lput(uaecptr addr, uae_u32 l) { - uaecptr page_off = addr & 0xffff; - if (0xa700 <= page_off && page_off < 0xfc80) { - uae_u32 *fm; - fm = (uae_u32 *)(MacFrameBaseHost + page_off - 0xa700); - do_put_mem_long(fm, l); - } + uaecptr page_off = addr & 0xffff; + if (0xa700 <= page_off && page_off < 0xfc80) { + uae_u32 *fm; + fm = (uae_u32 *)(MacFrameBaseHost + page_off - 0xa700); + do_put_mem_long(fm, l); + } - uae_u32 *m; - m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff)); - do_put_mem_long(m, l); + uae_u32 *m; + m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff)); + do_put_mem_long(m, l); } void REGPARAM2 fram24_wput(uaecptr addr, uae_u32 w) { - uaecptr page_off = addr & 0xffff; - if (0xa700 <= page_off && page_off < 0xfc80) { - uae_u16 *fm; - fm = (uae_u16 *)(MacFrameBaseHost + page_off - 0xa700); - do_put_mem_word(fm, w); - } + uaecptr page_off = addr & 0xffff; + if (0xa700 <= page_off && page_off < 0xfc80) { + uae_u16 *fm; + fm = (uae_u16 *)(MacFrameBaseHost + page_off - 0xa700); + do_put_mem_word(fm, w); + } - uae_u16 *m; - m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff)); - do_put_mem_word(m, w); + uae_u16 *m; + m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff)); + do_put_mem_word(m, w); } void REGPARAM2 fram24_bput(uaecptr addr, uae_u32 b) { - uaecptr page_off = addr & 0xffff; - if (0xa700 <= page_off && page_off < 0xfc80) { - *(uae_u8 *)(MacFrameBaseHost + page_off - 0xa700) = b; - } + uaecptr page_off = addr & 0xffff; + if (0xa700 <= page_off && page_off < 0xfc80) { + *(uae_u8 *)(MacFrameBaseHost + page_off - 0xa700) = b; + } - *(uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)) = b; + *(uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)) = b; } /* Default memory access functions */ uae_u8 *REGPARAM2 default_xlate (uaecptr a) { - write_log("Your Mac program just did something terribly stupid\n"); - return NULL; + write_log("Your Mac program just did something terribly stupid\n"); + return NULL; } /* Address banks */ addrbank dummy_bank = { - dummy_lget, dummy_wget, dummy_bget, - dummy_lput, dummy_wput, dummy_bput, - default_xlate + dummy_lget, dummy_wget, dummy_bget, + dummy_lput, dummy_wput, dummy_bput, + default_xlate }; addrbank ram_bank = { - ram_lget, ram_wget, ram_bget, - ram_lput, ram_wput, ram_bput, - ram_xlate + ram_lget, ram_wget, ram_bget, + ram_lput, ram_wput, ram_bput, + ram_xlate }; addrbank ram24_bank = { - ram24_lget, ram24_wget, ram24_bget, - ram24_lput, ram24_wput, ram24_bput, - ram24_xlate + ram24_lget, ram24_wget, ram24_bget, + ram24_lput, ram24_wput, ram24_bput, + ram24_xlate }; addrbank rom_bank = { - rom_lget, rom_wget, rom_bget, - rom_lput, rom_wput, rom_bput, - rom_xlate + rom_lget, rom_wget, rom_bget, + rom_lput, rom_wput, rom_bput, + rom_xlate }; addrbank rom24_bank = { - rom24_lget, rom24_wget, rom24_bget, - rom_lput, rom_wput, rom_bput, - rom24_xlate + rom24_lget, rom24_wget, rom24_bget, + rom_lput, rom_wput, rom_bput, + rom24_xlate }; addrbank frame_direct_bank = { - frame_direct_lget, frame_direct_wget, frame_direct_bget, - frame_direct_lput, frame_direct_wput, frame_direct_bput, - frame_xlate + frame_direct_lget, frame_direct_wget, frame_direct_bget, + frame_direct_lput, frame_direct_wput, frame_direct_bput, + frame_xlate }; addrbank frame_host_555_bank = { - frame_host_555_lget, frame_host_555_wget, frame_direct_bget, - frame_host_555_lput, frame_host_555_wput, frame_direct_bput, - frame_xlate + frame_host_555_lget, frame_host_555_wget, frame_direct_bget, + frame_host_555_lput, frame_host_555_wput, frame_direct_bput, + frame_xlate }; addrbank frame_host_565_bank = { - frame_host_565_lget, frame_host_565_wget, frame_direct_bget, - frame_host_565_lput, frame_host_565_wput, frame_direct_bput, - frame_xlate + frame_host_565_lget, frame_host_565_wget, frame_direct_bget, + frame_host_565_lput, frame_host_565_wput, frame_direct_bput, + frame_xlate }; addrbank frame_host_888_bank = { - frame_host_888_lget, frame_direct_wget, frame_direct_bget, - frame_host_888_lput, frame_direct_wput, frame_direct_bput, - frame_xlate + frame_host_888_lget, frame_direct_wget, frame_direct_bget, + frame_host_888_lput, frame_direct_wput, frame_direct_bput, + frame_xlate }; addrbank fram24_bank = { - ram24_lget, ram24_wget, ram24_bget, - fram24_lput, fram24_wput, fram24_bput, - ram24_xlate + ram24_lget, ram24_wget, ram24_bget, + fram24_lput, fram24_wput, fram24_bput, + ram24_xlate }; void memory_init(void) @@ -604,38 +604,38 @@ void memory_init(void) map_banks(&ram_bank, RAMBaseMac >> 16, ram_size >> 16); map_banks(&rom_bank, ROMBaseMac >> 16, ROMSize >> 16); - // Map frame buffer + // Map frame buffer switch (MacFrameLayout) { - case FLAYOUT_DIRECT: - map_banks(&frame_direct_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); - break; - case FLAYOUT_HOST_555: - map_banks(&frame_host_555_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); - break; - case FLAYOUT_HOST_565: - map_banks(&frame_host_565_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); - break; - case FLAYOUT_HOST_888: - map_banks(&frame_host_888_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); - break; + case FLAYOUT_DIRECT: + map_banks(&frame_direct_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); + break; + case FLAYOUT_HOST_555: + map_banks(&frame_host_555_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); + break; + case FLAYOUT_HOST_565: + map_banks(&frame_host_565_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); + break; + case FLAYOUT_HOST_888: + map_banks(&frame_host_888_bank, MacFrameBaseMac >> 16, (MacFrameSize >> 16) + 1); + break; } } } void map_banks(addrbank *bank, int start, int size) { - int bnr; - unsigned long int hioffs = 0, endhioffs = 0x100; + int bnr; + unsigned long int hioffs = 0, endhioffs = 0x100; - if (start >= 0x100) { - for (bnr = start; bnr < start + size; bnr++) - put_mem_bank (bnr << 16, bank); - return; - } - if (TwentyFourBitAddressing) endhioffs = 0x10000; - for (hioffs = 0; hioffs < endhioffs; hioffs += 0x100) - for (bnr = start; bnr < start+size; bnr++) - put_mem_bank((bnr + hioffs) << 16, bank); + if (start >= 0x100) { + for (bnr = start; bnr < start + size; bnr++) + put_mem_bank (bnr << 16, bank); + return; + } + if (TwentyFourBitAddressing) endhioffs = 0x10000; + for (hioffs = 0; hioffs < endhioffs; hioffs += 0x100) + for (bnr = start; bnr < start+size; bnr++) + put_mem_bank((bnr + hioffs) << 16, bank); } #endif /* !REAL_ADDRESSING && !DIRECT_ADDRESSING */ From 40f6c7777545d7e297b3186d37d72d011fbd3080 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Fri, 3 Jul 2020 16:02:29 -0400 Subject: [PATCH 40/54] Move the RAM debug message to the proper place. Signed-off-by: Ricky Zhang --- BasiliskII/src/Unix/main_unix.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/BasiliskII/src/Unix/main_unix.cpp b/BasiliskII/src/Unix/main_unix.cpp index af6f6609..ce4db79e 100644 --- a/BasiliskII/src/Unix/main_unix.cpp +++ b/BasiliskII/src/Unix/main_unix.cpp @@ -672,9 +672,7 @@ int main(int argc, char **argv) RAMBaseMac = Host2MacAddr(RAMBaseHost); ROMBaseMac = Host2MacAddr(ROMBaseHost); #endif - D(bug("Mac RAM starts at %p (%08x)\n", RAMBaseHost, RAMBaseMac)); - D(bug("Mac ROM starts at %p (%08x)\n", ROMBaseHost, ROMBaseMac)); - + #if __MACOSX__ extern void set_current_directory(); set_current_directory(); @@ -737,6 +735,9 @@ int main(int argc, char **argv) QuitEmulator(); D(bug("Initialization complete\n")); + D(bug("Mac RAM starts at %p (%08x)\n", RAMBaseHost, RAMBaseMac)); + D(bug("Mac ROM starts at %p (%08x)\n", ROMBaseHost, ROMBaseMac)); + #if !EMULATED_68K // (Virtual) supervisor mode, disable interrupts EmulatedSR = 0x2700; From e63c6b91dc0aaa5fd3731cf17850f3aad546d235 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sat, 4 Jul 2020 14:12:15 -0400 Subject: [PATCH 41/54] Patch SDL2 palette for 24bit ROM. 24bit ROM doesn't invoke video driver control. Therefore, a manual step is required to add a black & white palette for guest_surface in SDL2. Please check out [the screen cast here](https://youtu.be/br5Hjt9F6X4). Signed-off-by: Ricky Zhang --- BasiliskII/src/SDL/video_sdl2.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 032023f4..646c28f5 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -980,6 +980,23 @@ void driver_base::set_video_mode(int flags) void driver_base::init() { set_video_mode(display_type == DISPLAY_SCREEN ? SDL_WINDOW_FULLSCREEN : 0); + // manually set palette for 24bit ROM + // 24 bit ROM Macintosh is BW screen. It doesn't setup palette by the ROM. + if (TwentyFourBitAddressing && !sdl_palette) { + const int nColor = 255; + sdl_palette = SDL_AllocPalette(nColor); + SDL_Color *p = sdl_palette->colors; + for (int i = 0; i < nColor; i++) { + if (0 == i %2) { + p->r = 0; p->g = 0; p->b = 0; + } else { + p->r = 255; p->g = 255; p->b = 255; + } + p++; + } + update_palette(); + } + int aligned_height = (VIDEO_MODE_Y + 15) & ~15; #ifdef ENABLE_VOSF From bae7a4d16bd82bd90d6a4ad98ea2e0b701d14af5 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sat, 4 Jul 2020 14:45:21 -0400 Subject: [PATCH 42/54] Explained why the magic number used in 24bit ROM frame mapping. Signed-off-by: Ricky Zhang --- BasiliskII/src/uae_cpu/memory.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/BasiliskII/src/uae_cpu/memory.cpp b/BasiliskII/src/uae_cpu/memory.cpp index 81dea568..7a8edc31 100644 --- a/BasiliskII/src/uae_cpu/memory.cpp +++ b/BasiliskII/src/uae_cpu/memory.cpp @@ -473,6 +473,34 @@ static void REGPARAM2 fram24_lput(uaecptr, uae_u32) REGPARAM; static void REGPARAM2 fram24_wput(uaecptr, uae_u32) REGPARAM; static void REGPARAM2 fram24_bput(uaecptr, uae_u32) REGPARAM; +/* + * Q: Why the magic number 0xa700 and 0xfc80? + * + * A: The M68K CPU used by the earlier Macintosh models such as + * Macintosh 128K or Macintosh SE, its address space is limited + * to 2^24 = 16MiB. The RAM limits to 4MiB. + * + * With 512x342 1 bit per pixel screen, the size of the frame buffer + * is 0x5580 bytes. + * + * In Macintosh 128K [1], the frame buffer address is mapped from + * 0x1A700 to 0x1FC7F. + * + * In Macintosh SE [2], the frame buffer address is mapped from + * 0x3FA700 to 0x3FFC7F. + * + * The frame24_xxx memory banks mapping used the magic number to + * retrieve the offset. The memory write operation does twice: + * one for the guest OS and another for the host OS (the write operation + * above MacFrameBaseHost). + * + * + * See: + * [1] The Apple Macintosh Computer. http://www.1000bit.it/support/articoli/apple/mac128.pdf + * [2] Capturing Mac SE's video from PDS. http://synack.net/~bbraun/sevideo/ + * + */ + void REGPARAM2 fram24_lput(uaecptr addr, uae_u32 l) { uaecptr page_off = addr & 0xffff; From 2595059146497ad113c74abfc1ddf751b29cfbf9 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sat, 4 Jul 2020 16:47:58 -0400 Subject: [PATCH 43/54] Fix a minor bug for B/W palette. Signed-off-by: Ricky Zhang --- BasiliskII/src/SDL/video_sdl2.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 646c28f5..3e0d8d03 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -983,15 +983,11 @@ void driver_base::init() // manually set palette for 24bit ROM // 24 bit ROM Macintosh is BW screen. It doesn't setup palette by the ROM. if (TwentyFourBitAddressing && !sdl_palette) { - const int nColor = 255; + const int nColor = 256; sdl_palette = SDL_AllocPalette(nColor); SDL_Color *p = sdl_palette->colors; for (int i = 0; i < nColor; i++) { - if (0 == i %2) { - p->r = 0; p->g = 0; p->b = 0; - } else { - p->r = 255; p->g = 255; p->b = 255; - } + p->r = p->g = p->b = i; p++; } update_palette(); From 89bcd3dc3ed663934865f7e9e1b99c13a1c13db7 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Sun, 5 Jul 2020 17:55:46 -0400 Subject: [PATCH 44/54] Add autogen for cxmon Signed-off-by: Ricky Zhang --- cxmon/autogen.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100755 cxmon/autogen.sh diff --git a/cxmon/autogen.sh b/cxmon/autogen.sh new file mode 100755 index 00000000..29f68f58 --- /dev/null +++ b/cxmon/autogen.sh @@ -0,0 +1,57 @@ +#! /bin/sh +# Run this to generate all the initial makefiles, etc. +# This was lifted from the Gimp, and adapted slightly by +# Christian Bauer. + +DIE=0 + +PROG="cxmon" + +# Check how echo works in this /bin/sh +case `echo -n` in +-n) _echo_n= _echo_c='\c';; +*) _echo_n=-n _echo_c=;; +esac + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $PROG." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing aclocal. The version of automake" + echo "installed doesn't appear recent enough." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +aclocalinclude="$ACLOCAL_FLAGS"; \ +(echo $_echo_n " + Running aclocal: $_echo_c"; \ + aclocal $aclocalinclude; \ + echo "done.") && \ +(echo $_echo_n " + Running autoheader: $_echo_c"; \ + autoheader; \ + echo "done.") && \ +(echo $_echo_n " + Running autoconf: $_echo_c"; \ + autoconf; \ + echo "done.") + +rm -f config.cache + +if [ x"$NO_CONFIGURE" = "x" ]; then + echo " + Running 'configure $@':" + if [ -z "$*" ]; then + echo " ** If you wish to pass arguments to ./configure, please" + echo " ** specify them on the command line." + fi + ./configure "$@" +fi From 342fbbce34d134a31382ca66c5ddd50590ae5904 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Mon, 13 Jul 2020 22:57:57 -0400 Subject: [PATCH 45/54] Port mini vMac guest OS screen ROM patch. - Added Mac SE 24 bit ROM screen patch from mini vMac. The guest OS resolution in System 6 can be defined at an arbitrary combination. - Mac frame buffer base mapping is moved out from guest RAM. This creates more leg room for the host frame buffer. - Enable System 6 vscreen support in SDL2. Passed build and test. - Enable System 6 vscreen support in SDL1. Passed build and test. - Eanble System 6 vscreen support in XWidnow. Passed build and test. See my [screen cast demo here](https://youtu.be/aXzM8t_u3zI) Signed-off-by: Ricky Zhang --- BasiliskII/src/SDL/video_sdl.cpp | 27 +++- BasiliskII/src/SDL/video_sdl2.cpp | 26 +++- BasiliskII/src/Unix/video_x.cpp | 33 ++++- BasiliskII/src/include/video.h | 5 +- BasiliskII/src/rom_patches.cpp | 173 +++++++++++++++++++++++++ BasiliskII/src/uae_cpu/cpu_emulation.h | 4 + BasiliskII/src/uae_cpu/memory.cpp | 81 ++++++------ 7 files changed, 287 insertions(+), 62 deletions(-) diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index 103bec13..c1cde5e2 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -92,6 +92,9 @@ const char KEYCODE_FILE_NAME[] = "BasiliskII_keycodes"; const char KEYCODE_FILE_NAME[] = DATADIR "/keycodes"; #endif +// Mac Screen Width and Height +uint32 MacScreenWidth; +uint32 MacScreenHeight; // Global variables static uint32 frame_skip; // Prefs items @@ -494,7 +497,11 @@ static void set_mac_frame_buffer(SDL_monitor_desc &monitor, int depth) else if (depth == VIDEO_DEPTH_32BIT) layout = (screen_depth == 24) ? FLAYOUT_HOST_888 : FLAYOUT_DIRECT; MacFrameLayout = layout; - monitor.set_mac_frame_base(MacFrameBaseMac); + + if (TwentyFourBitAddressing) + monitor.set_mac_frame_base(MacFrameBaseMac24Bit); + else + monitor.set_mac_frame_base(MacFrameBaseMac); // Set variables used by UAE memory banking const VIDEO_MODE &mode = monitor.get_current_mode(); @@ -644,6 +651,10 @@ void driver_base::set_video_mode(int flags) #ifdef ENABLE_VOSF the_host_buffer = (uint8 *)s->pixels; #endif + // set Mac screen global variabls + MacScreenWidth = VIDEO_MODE_X; + MacScreenHeight = VIDEO_MODE_Y; + D(bug("Set Mac Screen Width: %d, Mac Screen Height: %d\n", MacScreenWidth, MacScreenHeight)); } void driver_base::init() @@ -994,16 +1005,13 @@ bool VideoInit(bool classic) // Get screen mode from preferences migrate_screen_prefs(); const char *mode_str = NULL; - if (classic_mode) - mode_str = "win/512/342"; - else - mode_str = PrefsFindString("screen"); + mode_str = PrefsFindString("screen"); // Determine display type and default dimensions int default_width, default_height; if (classic) { default_width = 512; - default_height = 384; + default_height = 342; } else { default_width = 640; @@ -1025,6 +1033,11 @@ bool VideoInit(bool classic) else if (default_height > sdl_display_height()) default_height = sdl_display_height(); + // for classic Mac, make sure the display width is 8 + if (classic) { + default_width = (default_width << 3) >> 3; + } + // Mac screen depth follows X depth screen_depth = SDL_GetVideoInfo()->vfmt->BitsPerPixel; int default_depth; @@ -1066,7 +1079,7 @@ bool VideoInit(bool classic) // Construct list of supported modes if (display_type == DISPLAY_WINDOW) { if (classic) - add_mode(display_type, 512, 342, 0x80, 64, VIDEO_DEPTH_1BIT); + add_mode(display_type, default_width, default_height, 0x80, default_width/8, VIDEO_DEPTH_1BIT); else { for (int i = 0; video_modes[i].w != 0; i++) { const int w = video_modes[i].w; diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index 3e0d8d03..dac7d7b0 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -98,6 +98,9 @@ const char KEYCODE_FILE_NAME[] = DATADIR "/keycodes"; const char KEYCODE_FILE_NAME2[] = DATADIR "/BasiliskII_keycodes"; #endif +// Mac Screen Width and Height +uint32 MacScreenWidth; +uint32 MacScreenHeight; // Global variables static uint32 frame_skip; // Prefs items @@ -496,7 +499,11 @@ static void set_mac_frame_buffer(SDL_monitor_desc &monitor, int depth, bool nati MacFrameLayout = layout; else MacFrameLayout = FLAYOUT_DIRECT; - monitor.set_mac_frame_base(MacFrameBaseMac); + + if (TwentyFourBitAddressing) + monitor.set_mac_frame_base(MacFrameBaseMac24Bit); + else + monitor.set_mac_frame_base(MacFrameBaseMac); // Set variables used by UAE memory banking const VIDEO_MODE &mode = monitor.get_current_mode(); @@ -845,6 +852,10 @@ static SDL_Surface * init_sdl_video(int width, int height, int bpp, Uint32 flags SDL_RenderSetIntegerScale(sdl_renderer, PrefsFindBool("scale_integer") ? SDL_TRUE : SDL_FALSE); + // set Mac screen global variabls + MacScreenWidth = width; + MacScreenHeight = height; + D(bug("Set Mac Screen Width: %d, Mac Screen Height: %d\n", MacScreenWidth, MacScreenHeight)); return guest_surface; } @@ -1367,16 +1378,13 @@ bool VideoInit(bool classic) // Get screen mode from preferences migrate_screen_prefs(); const char *mode_str = NULL; - if (classic_mode) - mode_str = "win/512/342"; - else - mode_str = PrefsFindString("screen"); + mode_str = PrefsFindString("screen"); // Determine display type and default dimensions int default_width, default_height; if (classic) { default_width = 512; - default_height = 384; + default_height = 342; } else { default_width = 640; @@ -1398,6 +1406,10 @@ bool VideoInit(bool classic) else if (default_height > sdl_display_height()) default_height = sdl_display_height(); + // for classic Mac, make sure the display width is 8 + if (classic) { + default_width = (default_width << 3) >> 3; + } // Mac screen depth follows X depth screen_depth = 32; SDL_DisplayMode desktop_mode; @@ -1457,7 +1469,7 @@ bool VideoInit(bool classic) // Construct list of supported modes if (display_type == DISPLAY_WINDOW) { if (classic) - add_mode(display_type, 512, 342, 0x80, 64, VIDEO_DEPTH_1BIT); + add_mode(display_type, default_width, default_height, 0x80, default_width/8, VIDEO_DEPTH_1BIT); else { for (int i = 0; video_modes[i].w != 0; i++) { const int w = video_modes[i].w; diff --git a/BasiliskII/src/Unix/video_x.cpp b/BasiliskII/src/Unix/video_x.cpp index e373719c..6e90e50f 100644 --- a/BasiliskII/src/Unix/video_x.cpp +++ b/BasiliskII/src/Unix/video_x.cpp @@ -84,6 +84,9 @@ const char KEYCODE_FILE_NAME[] = DATADIR "/keycodes"; static const int win_eventmask = KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | EnterWindowMask | ExposureMask | StructureNotifyMask; static const int dga_eventmask = KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask; +// Mac Screen Width and Height +uint32 MacScreenWidth; +uint32 MacScreenHeight; // Global variables static int32 frame_skip; // Prefs items @@ -416,7 +419,10 @@ static void set_mac_frame_buffer(X11_monitor_desc &monitor, video_depth depth, b MacFrameLayout = layout; else MacFrameLayout = FLAYOUT_DIRECT; - monitor.set_mac_frame_base(MacFrameBaseMac); + if (TwentyFourBitAddressing) + monitor.set_mac_frame_base(MacFrameBaseMac24Bit); + else + monitor.set_mac_frame_base(MacFrameBaseMac); // Set variables used by UAE memory banking const video_mode &mode = monitor.get_current_mode(); @@ -1547,6 +1553,10 @@ bool X11_monitor_desc::video_open(void) { D(bug("video_open()\n")); const video_mode &mode = get_current_mode(); + // set Mac screen global variabls + MacScreenWidth = VIDEO_MODE_X; + MacScreenHeight = VIDEO_MODE_Y; + D(bug("Set Mac Screen Width: %d, Mac Screen Height: %d\n", MacScreenWidth, MacScreenHeight)); // Find best available X visual if (!find_visual_for_depth(mode.depth)) { @@ -1763,13 +1773,17 @@ bool VideoInit(bool classic) // Get screen mode from preferences const char *mode_str; - if (classic_mode) - mode_str = "win/512/342"; - else - mode_str = PrefsFindString("screen"); + mode_str = PrefsFindString("screen"); // Determine display type and default dimensions - int default_width = 512, default_height = 384; + int default_width, default_height; + if (classic) { + default_width = 512; + default_height = 342; + } else { + default_width = 640; + default_height = 480; + } display_type = DISPLAY_WINDOW; if (mode_str) { if (sscanf(mode_str, "win/%d/%d", &default_width, &default_height) == 2) { @@ -1794,6 +1808,11 @@ bool VideoInit(bool classic) else if (default_height > DisplayHeight(x_display, screen)) default_height = DisplayHeight(x_display, screen); + // for classic Mac, make sure the display width is 8 + if (classic) { + default_width = (default_width << 3) >> 3; + } + // Mac screen depth follows X depth video_depth default_depth = VDEPTH_1BIT; switch (DefaultDepth(x_display, screen)) { @@ -1811,7 +1830,7 @@ bool VideoInit(bool classic) // Construct list of supported modes if (display_type == DISPLAY_WINDOW) { if (classic) - add_mode(512, 342, 0x80, 64, VDEPTH_1BIT); + add_mode(default_width, default_height, 0x80, default_width/8, VDEPTH_1BIT); else { for (unsigned d=VDEPTH_1BIT; d<=VDEPTH_32BIT; d++) { if (find_visual_for_depth(video_depth(d))) diff --git a/BasiliskII/src/include/video.h b/BasiliskII/src/include/video.h index 78526e67..a9021259 100644 --- a/BasiliskII/src/include/video.h +++ b/BasiliskII/src/include/video.h @@ -253,7 +253,10 @@ public: // Vector of pointers to available monitor descriptions, filled by VideoInit() extern vector VideoMonitors; - +// Guest OS Screen Width +extern uint32 MacScreenWidth; +// Guest OS Screen Height +extern uint32 MacScreenHeight; extern int16 VideoDriverOpen(uint32 pb, uint32 dce); extern int16 VideoDriverControl(uint32 pb, uint32 dce); diff --git a/BasiliskII/src/rom_patches.cpp b/BasiliskII/src/rom_patches.cpp index fdedf5e2..186249d8 100644 --- a/BasiliskII/src/rom_patches.cpp +++ b/BasiliskII/src/rom_patches.cpp @@ -1008,6 +1008,179 @@ static bool patch_rom_classic(void) *wp++ = htons(M68K_EMUL_OP_IRQ); *wp++ = htons(0x4a80); // tst.l d0 *wp = htons(0x67f4); // beq 0x402be2 + + + // Patch guest screen for an arbitary resolution + // We are going to steal the ROM space that runs RAM test + uint32 patchCodeBaseMac; // a stateful variable to keep track of the stolen location of the patched code in guest memory. + uint16* patchwp; // a stateful word pointer pointing to the patch code in host memory. + uint32* patchlp; // a stateful long pointer pointing to the patch code in host memory. + + uint32* lp; // a statless long pointer + + wp = (uint16 *)(ROMBaseHost + 0x5ca); // start to patch P_mInitVideoGlobal route + *wp++ = htons(0x4eb9); /* JSR */ + lp = (uint32 *)wp; + + const uint32 patchCodeOffset = 0x1d3e; // we steal P_mRamTest routine space + patchCodeBaseMac = ROMBaseMac + patchCodeOffset; + uint8* patchCodeBaseHost = ROMBaseHost + patchCodeOffset; + *lp++ = htonl(patchCodeBaseMac); // we JSR to this Mac address + wp = (uint16 *)lp; + + patchwp = (uint16 *)(patchCodeBaseHost); // the host address for the patch + // MOVE.L $MacFrameBaseMac24Bit, ($ScrnBase) + *patchwp++ = htons(0x21fc); /* MOVE.L */ + patchCodeBaseMac += 2; + + patchlp = (uint32 *)patchwp; + *patchlp++ = htonl(MacFrameBaseMac24Bit); + patchCodeBaseMac += 4; + + patchwp = (uint16 *)patchlp; + *patchwp++ = htons(0x0824); /* (ScrnBase) */ + patchCodeBaseMac += 2; + + *patchwp++ = htons(0x4e75); /* RTS */ + patchCodeBaseMac += 2; + patchlp = (uint32 *)patchwp; // keep in sync + + // continue to patch P_mInitVideoGlobal routine + wp = (uint16 *)(ROMBaseHost + 0x5d2); + *wp = htons(MacScreenWidth / 8); + wp = (uint16 *)(ROMBaseHost + 0x60a); + *wp = htons(MacScreenHeight); + wp = (uint16 *)(ROMBaseHost + 0x60e); + *wp = htons(MacScreenWidth); + + wp = (uint16 *)(ROMBaseHost + 0x8cc); + *wp = htons(MacScreenHeight); + wp = (uint16 *)(ROMBaseHost + 0x8ce); + *wp = htons(MacScreenWidth); + + // blink floppy, disk icon + lp = (uint32 *)(ROMBaseHost + 0xf4c); + *lp = htonl(MacFrameBaseMac24Bit + + (((MacScreenHeight / 4) * 2 - 25) * MacScreenWidth + + (MacScreenWidth / 2 - 16)) + / 8); + // blink floppy, question mark + lp = (uint32 *)(ROMBaseHost + 0xf5e); + *lp = htonl(MacFrameBaseMac24Bit + + (((MacScreenHeight / 4) * 2 - 10) * MacScreenWidth + + (MacScreenWidth / 2 - 8)) + / 8); + + lp = (uint32 *)(ROMBaseHost + 0x10a2); + *lp = htonl(MacFrameBaseMac24Bit); + wp = (uint16 *)(ROMBaseHost + 0x10a8); + *wp = htons(MacScreenHeight); + wp = (uint16 *)(ROMBaseHost + 0x10ac); + *wp = htons(MacScreenWidth); + wp = (uint16 *)(ROMBaseHost + 0x10b0); + *wp = htons(MacScreenWidth / 8); + lp = (uint32 *)(ROMBaseHost + 0x10b4); + *lp = htonl(MacScreenWidth * MacScreenHeight / 8);// # of bytes in screen + + // sad mac, mac icon + lp = (uint32 *)(ROMBaseHost + 0x118a); + *lp = htonl(MacFrameBaseMac24Bit + + (((MacScreenHeight / 4) * 2 - 25) * MacScreenWidth + + (MacScreenWidth / 2 - 16)) + / 8); + // sad mac, frown + lp = (uint32 *)(ROMBaseHost + 0x1198); + *lp = htonl(MacFrameBaseMac24Bit + + (((MacScreenHeight / 4) * 2 - 19) * MacScreenWidth + + (MacScreenWidth / 2 - 8)) + / 8); + wp = (uint16 *)(ROMBaseHost + 0x11b0); + *wp = htons(MacScreenWidth / 8); + + // blink floppy and sadmac, position + wp = (uint16 *)(ROMBaseHost + 0x11d8); + *wp = htons(MacScreenWidth / 8); + wp = (uint16 *)(ROMBaseHost + 0x11ea); + *wp = htons(MacScreenWidth / 8); + + // cursor handling + if (MacScreenWidth >= 1024) + { + wp = (uint16 *)(ROMBaseHost + 0x18dfe); // start to patch P_HideCursor routine + *wp++ = htons(0x4eb9); /* JSR */ + lp = (uint32 *)wp; + *lp++ = htonl(patchCodeBaseMac); + wp = (uint16 *)lp; + + *patchwp++ = htons(0x41f8); /* Lea.L (CrsrSave),A0 */ + patchCodeBaseMac += 2; + *patchwp++ = htons(0x088c); + patchCodeBaseMac += 2; + + *patchwp++ = htons(0x203c); /* MOVE.L #$x,D0 */ + patchCodeBaseMac += 2; + patchlp = (uint32 *)patchwp; + *patchlp++ = htonl(MacScreenWidth / 8); + patchCodeBaseMac += 4; + patchwp = (uint16 *)patchlp; + + *patchwp++ = htons(0x4e75); /* RTS */ + patchCodeBaseMac += 2; + patchlp = (uint32 *)patchwp; // keep in sync + } else + { + // P_HideCursor + wp = (uint16 *)(ROMBaseHost + 0x18e02); + *wp = htons(0x7000 + (MacScreenWidth / 8)); + } // end if (MacScreenWidth >= 1024) + + wp = (uint16 *)(ROMBaseHost + 0x18e7a); + *wp = htons(MacScreenWidth - 32); + wp = (uint16 *)(ROMBaseHost + 0x18e80); + *wp = htons(MacScreenWidth - 32); + wp = (uint16 *)(ROMBaseHost + 0x18ea0); + *wp = htons(MacScreenHeight - 16); + wp = (uint16 *)(ROMBaseHost + 0x18ea6); + *wp = htons(MacScreenHeight); + + if (MacScreenWidth >= 1024) + { + wp = (uint16 *)(ROMBaseHost + 0x18ec4); // start to patch P_ShowCursor routine + *wp++ = htons(0x4eb9); /* JSR */ + lp = (uint32 *)wp; + *lp++ = htonl(patchCodeBaseMac); + wp = (uint16 *)lp; + + *patchwp++ = htons(0x2a3c); /* MOVE.L #$x, D5 */ + patchCodeBaseMac += 2; + patchlp = (uint32 *)patchwp; + *patchlp++ = htonl(MacScreenWidth / 8); + patchCodeBaseMac += 4; + patchwp = (uint16 *)patchlp; + + *patchwp++ = htons(0xc2c5); /* MulU D5, D1 */ + patchCodeBaseMac += 2; + + *patchwp++ = htons(0xd3c1); /* AddA.L D1, A1 */ + patchCodeBaseMac += 2; + + *patchwp++ = htons(0x4e75); /* RTS */ + patchCodeBaseMac += 2; + patchlp = (uint32 *)patchwp; // keep in sync + } else + { + wp = (uint16 *)(ROMBaseHost + 0x18ec4); + *wp = htons(0x7A00 + (MacScreenWidth / 8)); + }// end if (MacScreenWidth >= 1024) + + // set up screen bitmap + wp = (uint16 *)(ROMBaseHost + 0x18f9a); + *wp = htons(MacScreenHeight); + wp = (uint16 *)(ROMBaseHost + 0x18fa0); + *wp = htons(MacScreenWidth); + wp = (uint16 *)(ROMBaseHost + 0x18fb4); + *wp = htons(MacScreenHeight); + return true; } diff --git a/BasiliskII/src/uae_cpu/cpu_emulation.h b/BasiliskII/src/uae_cpu/cpu_emulation.h index cd588ec1..669402a1 100644 --- a/BasiliskII/src/uae_cpu/cpu_emulation.h +++ b/BasiliskII/src/uae_cpu/cpu_emulation.h @@ -37,6 +37,10 @@ extern uint32 ROMBaseMac; // ROM base (Mac address space) extern uint8 *ROMBaseHost; // ROM base (host address space) extern uint32 ROMSize; // Size of ROM +// For 24 Bit ROM, we maps the guest OS frame buffer address above 4MiB RAM +// and ROM but less than 16 MiB. +const uint32 MacFrameBaseMac24Bit = 0x00500000; + #if !REAL_ADDRESSING && !DIRECT_ADDRESSING // If we are not using real or direct addressing, the Mac frame buffer gets // mapped to this location. The memory must be allocated by VideoInit(). diff --git a/BasiliskII/src/uae_cpu/memory.cpp b/BasiliskII/src/uae_cpu/memory.cpp index 7a8edc31..fbca3d6e 100644 --- a/BasiliskII/src/uae_cpu/memory.cpp +++ b/BasiliskII/src/uae_cpu/memory.cpp @@ -463,15 +463,13 @@ uae_u8 *REGPARAM2 frame_xlate(uaecptr addr) return (uae_u8 *)(FrameBaseDiff + addr); } -/* Mac framebuffer RAM (24 bit addressing) - * - * This works by duplicating appropriate writes to the 32-bit - * address-space framebuffer. - */ - -static void REGPARAM2 fram24_lput(uaecptr, uae_u32) REGPARAM; -static void REGPARAM2 fram24_wput(uaecptr, uae_u32) REGPARAM; -static void REGPARAM2 fram24_bput(uaecptr, uae_u32) REGPARAM; +/* Mac framebuffer RAM (24 bit addressing) */ +static uae_u32 REGPARAM2 frame24_lget(uaecptr) REGPARAM; +static uae_u32 REGPARAM2 frame24_wget(uaecptr) REGPARAM; +static uae_u32 REGPARAM2 frame24_bget(uaecptr) REGPARAM; +static void REGPARAM2 frame24_lput(uaecptr, uae_u32) REGPARAM; +static void REGPARAM2 frame24_wput(uaecptr, uae_u32) REGPARAM; +static void REGPARAM2 frame24_bput(uaecptr, uae_u32) REGPARAM; /* * Q: Why the magic number 0xa700 and 0xfc80? @@ -501,42 +499,42 @@ static void REGPARAM2 fram24_bput(uaecptr, uae_u32) REGPARAM; * */ -void REGPARAM2 fram24_lput(uaecptr addr, uae_u32 l) +uae_u32 REGPARAM2 frame24_lget(uaecptr addr) { - uaecptr page_off = addr & 0xffff; - if (0xa700 <= page_off && page_off < 0xfc80) { - uae_u32 *fm; - fm = (uae_u32 *)(MacFrameBaseHost + page_off - 0xa700); - do_put_mem_long(fm, l); - } - uae_u32 *m; - m = (uae_u32 *)(RAMBaseDiff + (addr & 0xffffff)); + m = (uae_u32 *)(FrameBaseDiff + (addr & 0xffffff)); + return do_get_mem_long(m); +} + +uae_u32 REGPARAM2 frame24_wget(uaecptr addr) +{ + uae_u16 *m; + m = (uae_u16 *)(FrameBaseDiff + (addr & 0xffffff)); + return do_get_mem_word(m); +} + +uae_u32 REGPARAM2 frame24_bget(uaecptr addr) +{ + return (uae_u32)*(uae_u8 *)(FrameBaseDiff + (addr & 0xffffff)); +} + +void REGPARAM2 frame24_lput(uaecptr addr, uae_u32 l) +{ + uae_u32 *m; + m = (uae_u32 *)(FrameBaseDiff + (addr & 0xffffffff)); do_put_mem_long(m, l); } -void REGPARAM2 fram24_wput(uaecptr addr, uae_u32 w) +void REGPARAM2 frame24_wput(uaecptr addr, uae_u32 w) { - uaecptr page_off = addr & 0xffff; - if (0xa700 <= page_off && page_off < 0xfc80) { - uae_u16 *fm; - fm = (uae_u16 *)(MacFrameBaseHost + page_off - 0xa700); - do_put_mem_word(fm, w); - } - uae_u16 *m; - m = (uae_u16 *)(RAMBaseDiff + (addr & 0xffffff)); + m = (uae_u16 *)(FrameBaseDiff + (addr & 0xffffffff)); do_put_mem_word(m, w); } -void REGPARAM2 fram24_bput(uaecptr addr, uae_u32 b) +void REGPARAM2 frame24_bput(uaecptr addr, uae_u32 b) { - uaecptr page_off = addr & 0xffff; - if (0xa700 <= page_off && page_off < 0xfc80) { - *(uae_u8 *)(MacFrameBaseHost + page_off - 0xa700) = b; - } - - *(uae_u8 *)(RAMBaseDiff + (addr & 0xffffff)) = b; + *(uae_u8 *)(FrameBaseDiff + (addr & 0xffffffff)) = b; } /* Default memory access functions */ @@ -603,10 +601,10 @@ addrbank frame_host_888_bank = { frame_xlate }; -addrbank fram24_bank = { - ram24_lget, ram24_wget, ram24_bget, - fram24_lput, fram24_wput, fram24_bput, - ram24_xlate +addrbank frame24_bank = { + frame24_lget, frame24_wget, frame24_bget, + frame24_lput, frame24_wput, frame24_bput, + default_xlate }; void memory_init(void) @@ -619,7 +617,10 @@ void memory_init(void) RAMBaseDiff = (uintptr)RAMBaseHost - (uintptr)RAMBaseMac; ROMBaseDiff = (uintptr)ROMBaseHost - (uintptr)ROMBaseMac; - FrameBaseDiff = (uintptr)MacFrameBaseHost - (uintptr)MacFrameBaseMac; + if (TwentyFourBitAddressing) + FrameBaseDiff = (uintptr)MacFrameBaseHost - (uintptr)MacFrameBaseMac24Bit; + else + FrameBaseDiff = (uintptr)MacFrameBaseHost - (uintptr)MacFrameBaseMac; // Map RAM, ROM and display if (TwentyFourBitAddressing) { @@ -627,7 +628,7 @@ void memory_init(void) map_banks(&rom24_bank, ROMBaseMac >> 16, ROMSize >> 16); // Map frame buffer at end of RAM. - map_banks(&fram24_bank, ((RAMBaseMac + ram_size) >> 16) - 1, 1); + map_banks(&frame24_bank, MacFrameBaseMac24Bit >> 16, (MacFrameSize >> 16) + 1); } else { map_banks(&ram_bank, RAMBaseMac >> 16, ram_size >> 16); map_banks(&rom_bank, ROMBaseMac >> 16, ROMSize >> 16); From 7513fab5ad0f77e1385bb6dffe29f4313480ed55 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Wed, 15 Jul 2020 19:31:04 -0400 Subject: [PATCH 46/54] Beef up Travis CI with XWindows backend. Signed-off-by: Ricky Zhang --- .travis.yml | 51 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index def8cd1b..105af5c0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ matrix: sudo: required compiler: gcc env : + - WITH_SDL=1 - SDL_MAJOR_VERSION=1 - ADDRESSING_MODE=direct - os: linux @@ -14,6 +15,7 @@ matrix: sudo: required compiler: gcc env : + - WITH_SDL=1 - SDL_MAJOR_VERSION=1 - ADDRESSING_MODE=banks - os: linux @@ -21,6 +23,7 @@ matrix: sudo: required compiler: gcc env : + - WITH_SDL=1 - SDL_MAJOR_VERSION=2 - ADDRESSING_MODE=direct - os: linux @@ -28,12 +31,34 @@ matrix: sudo: required compiler: gcc env : + - WITH_SDL=1 - SDL_MAJOR_VERSION=2 - ADDRESSING_MODE=banks + - os: linux + dist: bionic + sudo: required + compiler: gcc + env : + - WITH_SDL=0 + - ADDRESSING_MODE=direct + - os: linux + dist: bionic + sudo: required + compiler: gcc + env : + - WITH_SDL=0 + - ADDRESSING_MODE=banks - os: osx compiler: clang osx_image: xcode12 - + env : + - WITH_SDL=0 + - os: osx + compiler: clang + osx_image: xcode12 + env : + - WITH_SDL=1 + addons: apt: packages: @@ -51,15 +76,25 @@ script: - cd BasiliskII/src/Unix - NO_CONFIGURE=1 ./autogen.sh - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - if [[ $SDL_MAJOR_VERSION == *"1"* ]]; then - ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --enable-addressing=$ADDRESSING_MODE; - make -j 4 || ERR_CODE=$?; + if [[ $WITH_SDL == *"1"* ]]; then + if [[ $SDL_MAJOR_VERSION == *"1"* ]]; then + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --enable-addressing=$ADDRESSING_MODE; + make -j 4 || ERR_CODE=$?; + else + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --with-sdl2 --enable-addressing=$ADDRESSING_MODE; + make -j 4 || ERR_CODE=$?; + fi else - ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-x --with-gtk --with-mon --with-sdl2 --enable-addressing=$ADDRESSING_MODE; - make -j 4 || ERR_CODE=$?; + ./configure --disable-jit-compiler --with-x --with-gtk --with-mon --enable-addressing=$ADDRESSING_MODE; + make -j 4 || ERR_CODE=$?; fi else - ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-gtk=no --with-mon --with-sdl2 --enable-addressing=banks; - make -j 4 || ERR_CODE=$?; + if [[ $WITH_SDL == *"1"* ]]; then + ./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-gtk=no --with-mon --with-sdl2 --enable-addressing=banks; + make -j 4 || ERR_CODE=$?; + else + ./configure --disable-vosf --disable-jit-compiler --with-gtk=no --with-mon --enable-addressing=banks; + make -j 4 || ERR_CODE=$?; + fi fi - (exit $ERR_CODE) From 03ebc5375ba09d82d71d39d709860ebb96f102c0 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Wed, 15 Jul 2020 20:55:34 -0400 Subject: [PATCH 47/54] Fix comment. Signed-off-by: Ricky Zhang --- BasiliskII/src/SDL/video_sdl.cpp | 4 ++-- BasiliskII/src/SDL/video_sdl2.cpp | 4 ++-- BasiliskII/src/Unix/video_x.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index c1cde5e2..d5ba4f5d 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -1033,9 +1033,9 @@ bool VideoInit(bool classic) else if (default_height > sdl_display_height()) default_height = sdl_display_height(); - // for classic Mac, make sure the display width is 8 + // for classic Mac, make sure the display width is divisible by 8 if (classic) { - default_width = (default_width << 3) >> 3; + default_width = (default_width / 8) * 8; } // Mac screen depth follows X depth diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index dac7d7b0..c90e0177 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -1406,9 +1406,9 @@ bool VideoInit(bool classic) else if (default_height > sdl_display_height()) default_height = sdl_display_height(); - // for classic Mac, make sure the display width is 8 + // for classic Mac, make sure the display width is divisible by 8 if (classic) { - default_width = (default_width << 3) >> 3; + default_width = (default_width / 8) * 8; } // Mac screen depth follows X depth screen_depth = 32; diff --git a/BasiliskII/src/Unix/video_x.cpp b/BasiliskII/src/Unix/video_x.cpp index 6e90e50f..82cb056b 100644 --- a/BasiliskII/src/Unix/video_x.cpp +++ b/BasiliskII/src/Unix/video_x.cpp @@ -1808,9 +1808,9 @@ bool VideoInit(bool classic) else if (default_height > DisplayHeight(x_display, screen)) default_height = DisplayHeight(x_display, screen); - // for classic Mac, make sure the display width is 8 + // for classic Mac, make sure the display width is divisible by 8 if (classic) { - default_width = (default_width << 3) >> 3; + default_width = (default_width / 8) * 8; } // Mac screen depth follows X depth From 5f1b41eb42d93a6aeadce009e72b8b32ebcdbc72 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Wed, 15 Jul 2020 21:14:20 -0400 Subject: [PATCH 48/54] Improve the comment readability. Signed-off-by: Ricky Zhang --- BasiliskII/src/rom_patches.cpp | 45 ++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/BasiliskII/src/rom_patches.cpp b/BasiliskII/src/rom_patches.cpp index 186249d8..9eb48bb7 100644 --- a/BasiliskII/src/rom_patches.cpp +++ b/BasiliskII/src/rom_patches.cpp @@ -1010,25 +1010,35 @@ static bool patch_rom_classic(void) *wp = htons(0x67f4); // beq 0x402be2 - // Patch guest screen for an arbitary resolution - // We are going to steal the ROM space that runs RAM test - uint32 patchCodeBaseMac; // a stateful variable to keep track of the stolen location of the patched code in guest memory. - uint16* patchwp; // a stateful word pointer pointing to the patch code in host memory. - uint32* patchlp; // a stateful long pointer pointing to the patch code in host memory. + // Patch the guest screen for an arbitary resolution + // We are going to steal the abandoned ROM space that runs RAM test + // for patching ROM. - uint32* lp; // a statless long pointer + // a stateful variable to keep track of the stolen location + // of the patched code in guest memory. + uint32 patchCodeBaseMac; + // a stateful word pointer pointing to the patch code in host memory. + uint16* patchwp; + // a stateful long pointer pointing to the patch code in host memory. + uint32* patchlp; + // a statless long pointer + uint32* lp; - wp = (uint16 *)(ROMBaseHost + 0x5ca); // start to patch P_mInitVideoGlobal route + // start to patch P_mInitVideoGlobal route + wp = (uint16 *)(ROMBaseHost + 0x5ca); *wp++ = htons(0x4eb9); /* JSR */ lp = (uint32 *)wp; - const uint32 patchCodeOffset = 0x1d3e; // we steal P_mRamTest routine space + // we steal P_mRamTest routine space + const uint32 patchCodeOffset = 0x1d3e; patchCodeBaseMac = ROMBaseMac + patchCodeOffset; uint8* patchCodeBaseHost = ROMBaseHost + patchCodeOffset; - *lp++ = htonl(patchCodeBaseMac); // we JSR to this Mac address + // we JSR to this Mac address + *lp++ = htonl(patchCodeBaseMac); wp = (uint16 *)lp; - patchwp = (uint16 *)(patchCodeBaseHost); // the host address for the patch + // the host address for the patch + patchwp = (uint16 *)(patchCodeBaseHost); // MOVE.L $MacFrameBaseMac24Bit, ($ScrnBase) *patchwp++ = htons(0x21fc); /* MOVE.L */ patchCodeBaseMac += 2; @@ -1043,7 +1053,8 @@ static bool patch_rom_classic(void) *patchwp++ = htons(0x4e75); /* RTS */ patchCodeBaseMac += 2; - patchlp = (uint32 *)patchwp; // keep in sync + // keep in sync + patchlp = (uint32 *)patchwp; // continue to patch P_mInitVideoGlobal routine wp = (uint16 *)(ROMBaseHost + 0x5d2); @@ -1080,7 +1091,8 @@ static bool patch_rom_classic(void) wp = (uint16 *)(ROMBaseHost + 0x10b0); *wp = htons(MacScreenWidth / 8); lp = (uint32 *)(ROMBaseHost + 0x10b4); - *lp = htonl(MacScreenWidth * MacScreenHeight / 8);// # of bytes in screen + // # of bytes in screen + *lp = htonl(MacScreenWidth * MacScreenHeight / 8); // sad mac, mac icon lp = (uint32 *)(ROMBaseHost + 0x118a); @@ -1106,7 +1118,8 @@ static bool patch_rom_classic(void) // cursor handling if (MacScreenWidth >= 1024) { - wp = (uint16 *)(ROMBaseHost + 0x18dfe); // start to patch P_HideCursor routine + // start to patch P_HideCursor routine + wp = (uint16 *)(ROMBaseHost + 0x18dfe); *wp++ = htons(0x4eb9); /* JSR */ lp = (uint32 *)wp; *lp++ = htonl(patchCodeBaseMac); @@ -1145,7 +1158,8 @@ static bool patch_rom_classic(void) if (MacScreenWidth >= 1024) { - wp = (uint16 *)(ROMBaseHost + 0x18ec4); // start to patch P_ShowCursor routine + // start to patch P_ShowCursor routine + wp = (uint16 *)(ROMBaseHost + 0x18ec4); *wp++ = htons(0x4eb9); /* JSR */ lp = (uint32 *)wp; *lp++ = htonl(patchCodeBaseMac); @@ -1166,7 +1180,8 @@ static bool patch_rom_classic(void) *patchwp++ = htons(0x4e75); /* RTS */ patchCodeBaseMac += 2; - patchlp = (uint32 *)patchwp; // keep in sync + // keep in sync + patchlp = (uint32 *)patchwp; } else { wp = (uint16 *)(ROMBaseHost + 0x18ec4); From 2e96512f26dfd641f9abef6e5d2dc65612d95e70 Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Wed, 15 Jul 2020 21:42:59 -0400 Subject: [PATCH 49/54] Fix if/else format. Signed-off-by: Ricky Zhang --- BasiliskII/src/rom_patches.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/BasiliskII/src/rom_patches.cpp b/BasiliskII/src/rom_patches.cpp index 9eb48bb7..e566eb48 100644 --- a/BasiliskII/src/rom_patches.cpp +++ b/BasiliskII/src/rom_patches.cpp @@ -1116,8 +1116,7 @@ static bool patch_rom_classic(void) *wp = htons(MacScreenWidth / 8); // cursor handling - if (MacScreenWidth >= 1024) - { + if (MacScreenWidth >= 1024) { // start to patch P_HideCursor routine wp = (uint16 *)(ROMBaseHost + 0x18dfe); *wp++ = htons(0x4eb9); /* JSR */ @@ -1140,8 +1139,7 @@ static bool patch_rom_classic(void) *patchwp++ = htons(0x4e75); /* RTS */ patchCodeBaseMac += 2; patchlp = (uint32 *)patchwp; // keep in sync - } else - { + } else { // P_HideCursor wp = (uint16 *)(ROMBaseHost + 0x18e02); *wp = htons(0x7000 + (MacScreenWidth / 8)); @@ -1156,8 +1154,7 @@ static bool patch_rom_classic(void) wp = (uint16 *)(ROMBaseHost + 0x18ea6); *wp = htons(MacScreenHeight); - if (MacScreenWidth >= 1024) - { + if (MacScreenWidth >= 1024) { // start to patch P_ShowCursor routine wp = (uint16 *)(ROMBaseHost + 0x18ec4); *wp++ = htons(0x4eb9); /* JSR */ @@ -1182,8 +1179,7 @@ static bool patch_rom_classic(void) patchCodeBaseMac += 2; // keep in sync patchlp = (uint32 *)patchwp; - } else - { + } else { wp = (uint16 *)(ROMBaseHost + 0x18ec4); *wp = htons(0x7A00 + (MacScreenWidth / 8)); }// end if (MacScreenWidth >= 1024) From 82524ba03408472aea2a9d77cd954ad13e6cf3cc Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Wed, 15 Jul 2020 21:54:06 -0400 Subject: [PATCH 50/54] Unwrap the formula. Signed-off-by: Ricky Zhang --- BasiliskII/src/rom_patches.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/BasiliskII/src/rom_patches.cpp b/BasiliskII/src/rom_patches.cpp index e566eb48..874131c2 100644 --- a/BasiliskII/src/rom_patches.cpp +++ b/BasiliskII/src/rom_patches.cpp @@ -1071,16 +1071,10 @@ static bool patch_rom_classic(void) // blink floppy, disk icon lp = (uint32 *)(ROMBaseHost + 0xf4c); - *lp = htonl(MacFrameBaseMac24Bit - + (((MacScreenHeight / 4) * 2 - 25) * MacScreenWidth - + (MacScreenWidth / 2 - 16)) - / 8); + *lp = htonl(MacFrameBaseMac24Bit + (((MacScreenHeight / 4) * 2 - 25) * MacScreenWidth + (MacScreenWidth / 2 - 16)) / 8); // blink floppy, question mark lp = (uint32 *)(ROMBaseHost + 0xf5e); - *lp = htonl(MacFrameBaseMac24Bit - + (((MacScreenHeight / 4) * 2 - 10) * MacScreenWidth - + (MacScreenWidth / 2 - 8)) - / 8); + *lp = htonl(MacFrameBaseMac24Bit + (((MacScreenHeight / 4) * 2 - 10) * MacScreenWidth + (MacScreenWidth / 2 - 8)) / 8); lp = (uint32 *)(ROMBaseHost + 0x10a2); *lp = htonl(MacFrameBaseMac24Bit); @@ -1096,16 +1090,10 @@ static bool patch_rom_classic(void) // sad mac, mac icon lp = (uint32 *)(ROMBaseHost + 0x118a); - *lp = htonl(MacFrameBaseMac24Bit - + (((MacScreenHeight / 4) * 2 - 25) * MacScreenWidth - + (MacScreenWidth / 2 - 16)) - / 8); + *lp = htonl(MacFrameBaseMac24Bit + (((MacScreenHeight / 4) * 2 - 25) * MacScreenWidth + (MacScreenWidth / 2 - 16)) / 8); // sad mac, frown lp = (uint32 *)(ROMBaseHost + 0x1198); - *lp = htonl(MacFrameBaseMac24Bit - + (((MacScreenHeight / 4) * 2 - 19) * MacScreenWidth - + (MacScreenWidth / 2 - 8)) - / 8); + *lp = htonl(MacFrameBaseMac24Bit + (((MacScreenHeight / 4) * 2 - 19) * MacScreenWidth + (MacScreenWidth / 2 - 8)) / 8); wp = (uint16 *)(ROMBaseHost + 0x11b0); *wp = htons(MacScreenWidth / 8); From 13017f711ff90dea1e2c7a5ab63f3911f97b5f3a Mon Sep 17 00:00:00 2001 From: Ricky Zhang Date: Wed, 15 Jul 2020 21:56:00 -0400 Subject: [PATCH 51/54] Fix a weird whitespace. Signed-off-by: Ricky Zhang --- BasiliskII/src/Unix/video_x.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasiliskII/src/Unix/video_x.cpp b/BasiliskII/src/Unix/video_x.cpp index 82cb056b..70aacb2d 100644 --- a/BasiliskII/src/Unix/video_x.cpp +++ b/BasiliskII/src/Unix/video_x.cpp @@ -1780,7 +1780,7 @@ bool VideoInit(bool classic) if (classic) { default_width = 512; default_height = 342; - } else { + } else { default_width = 640; default_height = 480; } From 4da2082c073582d5524aaa34433ee13df319e2ec Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Sun, 23 Aug 2020 16:47:48 +0100 Subject: [PATCH 52/54] The mono palette hack isn't needed for SheepShaver. --- BasiliskII/src/SDL/video_sdl2.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BasiliskII/src/SDL/video_sdl2.cpp b/BasiliskII/src/SDL/video_sdl2.cpp index c90e0177..a7c5d915 100644 --- a/BasiliskII/src/SDL/video_sdl2.cpp +++ b/BasiliskII/src/SDL/video_sdl2.cpp @@ -991,6 +991,7 @@ void driver_base::set_video_mode(int flags) void driver_base::init() { set_video_mode(display_type == DISPLAY_SCREEN ? SDL_WINDOW_FULLSCREEN : 0); +#ifndef SHEEPSHAVER // manually set palette for 24bit ROM // 24 bit ROM Macintosh is BW screen. It doesn't setup palette by the ROM. if (TwentyFourBitAddressing && !sdl_palette) { @@ -1003,6 +1004,7 @@ void driver_base::init() } update_palette(); } +#endif int aligned_height = (VIDEO_MODE_Y + 15) & ~15; From 0eae77599e7bb3947f03282e96f3f57ec9d2266c Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Sun, 23 Aug 2020 16:59:42 +0100 Subject: [PATCH 53/54] Update SheepShaver for SDL2 support. This imports the SDL2-related changes from BasiliskII. --- SheepShaver/src/Unix/configure.ac | 87 +++++++++++++++++++------- SheepShaver/src/include/user_strings.h | 5 ++ SheepShaver/src/user_strings.cpp | 10 +++ 3 files changed, 78 insertions(+), 24 deletions(-) diff --git a/SheepShaver/src/Unix/configure.ac b/SheepShaver/src/Unix/configure.ac index 006fe872..edfccb9a 100644 --- a/SheepShaver/src/Unix/configure.ac +++ b/SheepShaver/src/Unix/configure.ac @@ -72,6 +72,7 @@ AC_ARG_ENABLE(sdl-video, [ --enable-sdl-video use SDL for video graphic AC_ARG_ENABLE(sdl-audio, [ --enable-sdl-audio use SDL for audio [default=no]], [WANT_SDL_AUDIO=$enableval], [WANT_SDL_AUDIO=no]) AC_ARG_ENABLE(sdl-framework, [ --enable-sdl-framework use SDL framework [default=no]], [WANT_SDL_FRAMEWORK=$enableval], [WANT_SDL_FRAMEWORK=no]) AC_ARG_ENABLE(sdl-framework-prefix, [ --enable-sdl-framework-prefix=PFX default=/Library/Frameworks], [SDL_FRAMEWORK="$enableval"], [SDL_FRAMEWORK=/Library/Frameworks]) +AC_ARG_WITH(sdl2, [ --with-sdl2 use SDL 2.x, rather than SDL 1.x [default=no]], [WANT_SDL_VERSION_MAJOR=2], [WANT_SDL_VERSION_MAJOR=1]) dnl Checks for programs. AC_PROG_CC @@ -144,7 +145,7 @@ dnl Checks for libraries. AC_CHECK_LIB(posix4, sem_init) AC_CHECK_LIB(m, cos) -dnl AC_CHECK_SDLFRAMEWORK($1=NAME, $2=INCLUDES) +dnl AC_CHECK_SDLFRAMEWORK($1=NAME, $2=INCLUDES, $3=ACTION_IF_SUCCESSFUL, $4=ACTION_IF_UNSUCCESSFUL) dnl AC_TRY_LINK uses main() but SDL needs main to take args, dnl therefore main is undefined with #undef. dnl Framework can be in an custom location. @@ -154,18 +155,16 @@ AC_DEFUN([AC_CHECK_SDLFRAMEWORK], [ ac_Framework, [ saved_LIBS="$LIBS" LIBS="$LIBS -framework $1" - if [[ "x$SDL_FRAMEWORK" != "x/Library/Frameworks" ]]; then - if [[ "x$SDL_FRAMEWORK" != "x/System/Library/Frameworks" ]]; then - LIBS="$saved_LIBS -F$SDL_FRAMEWORK -framework $1" - fi + if [[ "x$SDL_FRAMEWORK" != "x/System/Library/Frameworks" ]]; then + LIBS="$saved_LIBS -F$SDL_FRAMEWORK -framework $1" fi saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -I$SDL_FRAMEWORK/SDL.framework/Headers" + CPPFLAGS="$CPPFLAGS -I$SDL_FRAMEWORK/$1.framework/Headers" AC_TRY_LINK( [$2 #undef main], [], - [AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); -LIBS="$saved_LIBS"; CPPFLAGS="$saved_CPPFLAGS"] + [AS_VAR_SET(ac_Framework, yes); $3], [AS_VAR_SET(ac_Framework, no); +LIBS="$saved_LIBS"; CPPFLAGS="$saved_CPPFLAGS"; $4] ) ]) AS_IF([test AS_VAR_GET(ac_Framework) = yes], @@ -189,27 +188,66 @@ if [[ "x$WANT_SDL_AUDIO" = "xyes" ]]; then fi if [[ "x$WANT_SDL" = "xyes" ]]; then if [[ "x$WANT_SDL_FRAMEWORK" = "xyes" ]]; then - AC_CHECK_SDLFRAMEWORK(SDL, [#include ]) + TEMP_WANT_SDL_VERSION_MAJOR=$WANT_SDL_VERSION_MAJOR + if [[ "x$TEMP_WANT_SDL_VERSION_MAJOR" = "x" ]]; then + TEMP_WANT_SDL_VERSION_MAJOR=2 + fi + if [[ "x$TEMP_WANT_SDL_VERSION_MAJOR" = "x2" ]]; then + AC_CHECK_SDLFRAMEWORK(SDL2, [#include ], [ + WANT_SDL_VERSION_MAJOR=2 + ], [ + TEMP_WANT_SDL_VERSION_MAJOR=1 + ]) + fi + if [[ "x$TEMP_WANT_SDL_VERSION_MAJOR" = "x1" ]]; then + AC_CHECK_SDLFRAMEWORK(SDL, [#include ], [ + WANT_SDL_VERSION_MAJOR=1 + ]) + fi else ac_cv_framework_SDL=no fi if [[ "x$ac_cv_framework_SDL" = "xno" ]]; then - AC_PATH_PROG(sdl_config, "sdl-config") - if [[ -n "$sdl_config" ]]; then - sdl_cflags=`$sdl_config --cflags` - if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then - sdl_libs=`$sdl_config --static-libs` + if [[ "x$WANT_SDL_VERSION_MAJOR" = "x1" ]]; then + AC_DEFINE(ENABLE_SDL1, 1, [Define if using SDL1.]) + AC_PATH_PROG(sdl_config, "sdl-config") + if [[ -n "$sdl_config" ]]; then + sdl_cflags=`$sdl_config --cflags` + if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then + sdl_libs=`$sdl_config --static-libs` + else + sdl_libs=`$sdl_config --libs` + fi + CFLAGS="$CFLAGS $sdl_cflags" + CXXFLAGS="$CXXFLAGS $sdl_cflags" + LIBS="$LIBS $sdl_libs" else - sdl_libs=`$sdl_config --libs` + WANT_SDL=no + WANT_SDL_VIDEO=no + WANT_SDL_AUDIO=no + SDL_SUPPORT="none" + fi + fi + + if [[ "x$WANT_SDL_VERSION_MAJOR" = "x2" ]]; then + AC_DEFINE(ENABLE_SDL2, 1, [Define if using SDL2.]) + AC_PATH_PROG(sdl_config, "sdl2-config") + if [[ -n "$sdl_config" ]]; then + sdl_cflags=`$sdl_config --cflags` + if [[ "x$WANT_SDL_STATIC" = "xyes" ]]; then + sdl_libs=`$sdl_config --static-libs` + else + sdl_libs=`$sdl_config --libs` + fi + CFLAGS="$CFLAGS $sdl_cflags" + CXXFLAGS="$CXXFLAGS $sdl_cflags" + LIBS="$LIBS $sdl_libs" + else + WANT_SDL=no + WANT_SDL_VIDEO=no + WANT_SDL_AUDIO=no + SDL_SUPPORT="none" fi - CFLAGS="$CFLAGS $sdl_cflags" - CXXFLAGS="$CXXFLAGS $sdl_cflags" - LIBS="$LIBS $sdl_libs" - else - WANT_SDL=no - WANT_SDL_VIDEO=no - WANT_SDL_AUDIO=no - SDL_SUPPORT="none" fi fi SDL_SUPPORT=`echo "$SDL_SUPPORT" | sed -e "s/^ //"` @@ -711,7 +749,7 @@ if [[ "x$WANT_SDL" = "xyes" ]]; then fi if [[ "x$WANT_SDL_VIDEO" = "xyes" ]]; then AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support.]) - VIDEOSRCS="../SDL/video_sdl.cpp" + VIDEOSRCS="../SDL/video_sdl.cpp ../SDL/video_sdl2.cpp" KEYCODES="../SDL/keycodes" if [[ "x$ac_cv_framework_Carbon" = "xyes" ]]; then AC_MSG_CHECKING([whether __LP64__ is defined]) @@ -1703,6 +1741,7 @@ echo echo SheepShaver configuration summary: echo echo SDL support ...................... : $SDL_SUPPORT +echo SDL major-version ................ : $WANT_SDL_VERSION_MAJOR echo BINCUE support ................... : $have_bincue echo LIBVHD support ................... : $have_libvhd echo FBDev DGA support ................ : $WANT_FBDEV_DGA diff --git a/SheepShaver/src/include/user_strings.h b/SheepShaver/src/include/user_strings.h index c0fbb6dc..1813954a 100644 --- a/SheepShaver/src/include/user_strings.h +++ b/SheepShaver/src/include/user_strings.h @@ -167,6 +167,11 @@ enum { STR_WINDOW_TITLE = 4000, STR_WINDOW_TITLE_FROZEN, STR_WINDOW_TITLE_GRABBED, + STR_WINDOW_TITLE_GRABBED0, + STR_WINDOW_TITLE_GRABBED1, + STR_WINDOW_TITLE_GRABBED2, + STR_WINDOW_TITLE_GRABBED3, + STR_WINDOW_TITLE_GRABBED4, STR_WINDOW_MENU = 4050, STR_WINDOW_ITEM_ABOUT, STR_WINDOW_ITEM_REFRESH, diff --git a/SheepShaver/src/user_strings.cpp b/SheepShaver/src/user_strings.cpp index f4618b55..7da1a8d8 100644 --- a/SheepShaver/src/user_strings.cpp +++ b/SheepShaver/src/user_strings.cpp @@ -173,6 +173,16 @@ user_string_def common_strings[] = { {STR_WINDOW_TITLE, "SheepShaver"}, {STR_WINDOW_TITLE_FROZEN, "SheepShaver *** FROZEN ***"}, {STR_WINDOW_TITLE_GRABBED, "SheepShaver (mouse grabbed, press Ctrl-F5 to release)"}, + {STR_WINDOW_TITLE_GRABBED0, "SheepShaver (mouse grabbed, press "}, + {STR_WINDOW_TITLE_GRABBED1, "Ctrl-"}, +#ifdef __MACOSX__ + {STR_WINDOW_TITLE_GRABBED2, "Opt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Cmd-"}, +#else + {STR_WINDOW_TITLE_GRABBED2, "Alt-"}, + {STR_WINDOW_TITLE_GRABBED3, "Win-"}, +#endif + {STR_WINDOW_TITLE_GRABBED4, "F5 to release)"}, {STR_WINDOW_MENU, "SheepShaver"}, {STR_WINDOW_ITEM_ABOUT, "About SheepShaver" ELLIPSIS}, {STR_WINDOW_ITEM_REFRESH, "Refresh Rate"}, From 413190d12f62be11b34f5ebd79efdef3693114cf Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Sun, 23 Aug 2020 17:15:06 +0100 Subject: [PATCH 54/54] Use openpty if possible. The code this affects in sshpty.c originally came from OpenSSH, which now uses openpty by preference when it's available. openpty is a BSD-ism, but it's been provided by glibc on Linux with the BSD semantics since 1998. --- BasiliskII/src/Unix/configure.ac | 3 ++- SheepShaver/src/Unix/configure.ac | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/BasiliskII/src/Unix/configure.ac b/BasiliskII/src/Unix/configure.ac index e8ad4e1e..b405b2ce 100644 --- a/BasiliskII/src/Unix/configure.ac +++ b/BasiliskII/src/Unix/configure.ac @@ -601,7 +601,8 @@ dnl Check for headers and functions related to pty support (sshpty.c) dnl From openssh-3.2.2p1 configure.ac AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h) -AC_CHECK_FUNCS(_getpty vhangup strlcpy) +AC_SEARCH_LIBS([openpty], [util bsd]) +AC_CHECK_FUNCS(_getpty openpty vhangup strlcpy) case "$host" in *-*-hpux10.26) diff --git a/SheepShaver/src/Unix/configure.ac b/SheepShaver/src/Unix/configure.ac index 006fe872..33fce9c0 100644 --- a/SheepShaver/src/Unix/configure.ac +++ b/SheepShaver/src/Unix/configure.ac @@ -461,7 +461,8 @@ esac dnl Check for headers and functions related to pty support (sshpty.c) dnl From openssh-3.2.2p1 configure.ac AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h) -AC_CHECK_FUNCS(_getpty vhangup strlcpy) +AC_SEARCH_LIBS([openpty], [util bsd]) +AC_CHECK_FUNCS(_getpty openpty vhangup strlcpy) case "$host" in *-*-hpux10.26)

J#>pwsocK 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�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 literal 44909 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�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 dkN@FIYjb1uX-69w+8eZMhyOBE` + + + + diff --git a/BasiliskII/src/MacOSX/BasiliskII_keycodes b/BasiliskII/src/MacOSX/BasiliskII_keycodes new file mode 100644 index 00000000..cfdc7f5f --- /dev/null +++ b/BasiliskII/src/MacOSX/BasiliskII_keycodes @@ -0,0 +1,576 @@ +# /usr/share/BasiliskII/keycodes +# +# Basilisk II (C) 1997-2005 Christian Bauer +# +# This file is used to translate the (server-specific) scancodes to +# Mac keycodes depending on the window server being used. +# +# The format of this file is as follows: +# +# sdl +# +# +# +# ... +# sdl +# +# +# ... +# +# The "driver string" must match the first part of the SDL driver vendor +# description as reported by SDL_VideoDriverName(). If a match is found, +# the keycode translation table is constructed from the following +# lines. Each line contains an SDL scancode followed by its associated +# Mac keycode. Both keycodes have to be given in decimal. Lines +# beginning with "#" or ";" are treated as comments and ignored. +# + +# +# Cocoa French Keyboard +# + +sdl cocoa +41 53 # Esc +58 122 # F1 +59 120 # F2 +60 99 # F3 +61 118 # F4 +62 96 # F5 +63 97 # F6 +64 98 # F7 +65 100 # F8 +66 101 # F9 +67 109 # F10 +68 103 # F11 +69 111 # F12 +70 105 # F13/PrintScrn +71 107 # F14/Scroll Lock +72 113 # F15/Pause +53 10 # ` +30 18 # 1 +31 19 # 2 +32 20 # 3 +33 21 # 4 +34 23 # 5 +35 22 # 6 +36 26 # 7 +37 28 # 8 +38 25 # 9 +39 29 # 0 +45 27 # - +46 24 # = +42 51 # Backspace +73 114 # Help/Insert +74 115 # Home +75 116 # Page Up +83 71 # Num Lock +81 81 # KP = +84 75 # KP / +85 67 # KP * +43 48 # Tab +20 12 # Q +26 13 # W +8 14 # E +21 15 # R +23 17 # T +28 16 # Y +24 32 # U +12 34 # I +18 31 # O +19 35 # P +47 33 # [ +48 30 # ] +40 36 # Return +76 117 # Delete +77 119 # End +78 121 # Page Down +95 89 # KP 7 +96 91 # KP 8 +97 92 # KP 9 +86 78 # KP - +130 57 # Caps Lock +4 0 # A +22 1 # S +7 2 # D +9 3 # F +10 5 # G +11 4 # H +13 38 # J +14 40 # K +15 37 # L +51 41 # ; +52 39 # ' +49 42 # \ +92 86 # KP 4 +93 87 # KP 5 +94 88 # KP 6 +87 69 # KP + +56 56 # Shift +100 50 # International SDL_NONUSBACKSLASH +29 6 # Z +27 7 # X +6 8 # C +25 9 # V +5 11 # B +17 45 # N +16 46 # M +54 43 # , +55 47 # . +56 44 # / +82 62 # Cursor Up +80 59 # Cursor Left +81 61 # Cursor Down +79 60 # Cursor Right +83 83 # KP 1 +84 84 # KP 2 +85 85 # KP 3 +76 76 # KP Enter +228 54 # Ctrl +226 58 # Option +227 55 # Command +224 54 # Ctrl Left +230 58 # Right Alt->option +231 55 # Right cmd +44 49 # Space +82 82 # KP 0 +65 65 # KP . + +# +# X11 server +# +sdl x11 +sdl dga +9 53 # Esc +67 122 # F1 +68 120 # F2 +69 99 # F3 +70 118 # F4 +71 96 # F5 +72 97 # F6 +73 98 # F7 +74 100 # F8 +75 101 # F9 +76 109 # F10 +95 103 # F11 +96 111 # F12 +111 105 # PrintScrn +78 107 # Scroll Lock +110 113 # Pause +49 10 # ` +10 18 # 1 +11 19 # 2 +12 20 # 3 +13 21 # 4 +14 23 # 5 +15 22 # 6 +16 26 # 7 +17 28 # 8 +18 25 # 9 +19 29 # 0 +20 27 # - +21 24 # = +22 51 # Backspace +106 114 # Insert +97 115 # Home +99 116 # Page Up +77 71 # Num Lock +112 75 # KP / +63 67 # KP * +82 78 # KP - +23 48 # Tab +24 12 # Q +25 13 # W +26 14 # E +27 15 # R +28 17 # T +29 16 # Y +30 32 # U +31 34 # I +32 31 # O +33 35 # P +34 33 # [ +35 30 # ] +36 36 # Return +107 117 # Delete +103 119 # End +105 121 # Page Down +79 89 # KP 7 +80 91 # KP 8 +81 92 # KP 9 +86 69 # KP + +66 57 # Caps Lock +38 0 # A +39 1 # S +40 2 # D +41 3 # F +42 5 # G +43 4 # H +44 38 # J +45 40 # K +46 37 # L +47 41 # ; +48 39 # ' +83 86 # KP 4 +84 87 # KP 5 +85 88 # KP 6 +50 56 # Shift Left +94 50 # International +52 6 # Z +53 7 # X +54 8 # C +55 9 # V +56 11 # B +57 45 # N +58 46 # M +59 43 # , +60 47 # . +61 44 # / +62 56 # Shift Right +51 42 # \ +98 62 # Cursor Up +87 83 # KP 1 +88 84 # KP 2 +89 85 # KP 3 +108 76 # KP Enter +37 54 # Ctrl Left +115 58 # Logo Left (-> Option) +64 55 # Alt Left (-> Command) +65 49 # Space +113 55 # Alt Right (-> Command) +116 58 # Logo Right (-> Option) +117 50 # Menu (-> International) +109 54 # Ctrl Right +100 59 # Cursor Left +104 61 # Cursor Down +102 60 # Cursor Right +90 82 # KP 0 +91 65 # KP . + +# +# Linux Framebuffer Console +# +sdl fbcon +1 53 # Esc +59 122 # F1 +60 120 # F2 +61 99 # F3 +62 118 # F4 +63 96 # F5 +64 97 # F6 +65 98 # F7 +66 100 # F8 +67 101 # F9 +68 109 # F10 +87 103 # F11 +88 111 # F12 +99 105 # PrintScrn +70 107 # Scroll Lock +119 113 # Pause +41 10 # ` +2 18 # 1 +3 19 # 2 +4 20 # 3 +5 21 # 4 +6 23 # 5 +7 22 # 6 +8 26 # 7 +9 28 # 8 +10 25 # 9 +11 29 # 0 +12 27 # - +13 24 # = +14 51 # Backspace +110 114 # Insert +102 115 # Home +104 116 # Page Up +69 71 # Num Lock +98 75 # KP / +55 67 # KP * +74 78 # KP - +15 48 # Tab +16 12 # Q +17 13 # W +18 14 # E +19 15 # R +20 17 # T +21 16 # Y +22 32 # U +23 34 # I +24 31 # O +25 35 # P +26 33 # [ +27 30 # ] +28 36 # Return +111 117 # Delete +107 119 # End +109 121 # Page Down +71 89 # KP 7 +72 91 # KP 8 +73 92 # KP 9 +78 69 # KP + +58 57 # Caps Lock +30 0 # A +31 1 # S +32 2 # D +33 3 # F +34 5 # G +35 4 # H +36 38 # J +37 40 # K +38 37 # L +39 41 # ; +40 39 # ' +75 86 # KP 4 +76 87 # KP 5 +77 88 # KP 6 +42 56 # Shift Left +86 50 # International +44 6 # Z +45 7 # X +46 8 # C +47 9 # V +48 11 # B +49 45 # N +50 46 # M +51 43 # , +52 47 # . +53 44 # / +54 56 # Shift Right +43 42 # \ +103 62 # Cursor Up +79 83 # KP 1 +80 84 # KP 2 +81 85 # KP 3 +96 76 # KP Enter +29 54 # Ctrl Left +125 58 # Logo Left (-> Option) +56 55 # Alt Left (-> Command) +57 49 # Space +100 55 # Alt Right (-> Command) +126 58 # Logo Right (-> Option) +97 54 # Ctrl Right +105 59 # Cursor Left +108 61 # Cursor Down +106 60 # Cursor Right +82 82 # KP 0 +83 65 # KP . + +# +# Quartz (1:1 translation actually) +# +sdl Quartz +41 53 # Esc +58 122 # F1 +59 120 # F2 +60 99 # F3 +61 118 # F4 +62 96 # F5 +63 97 # F6 +64 98 # F7 +65 100 # F8 +66 101 # F9 +67 109 # F10 +68 103 # F11 +69 111 # F12 +70 105 # F13/PrintScrn +71 107 # F14/Scroll Lock +72 113 # F15/Pause +52 10 # ` +30 18 # 1 +31 19 # 2 +32 20 # 3 +33 21 # 4 +34 23 # 5 +35 22 # 6 +36 26 # 7 +37 28 # 8 +38 25 # 9 +39 29 # 0 +45 27 # - +24 24 # = +42 51 # Backspace +114 114 # Help/Insert +74 115 # Home +75 116 # Page Up +83 71 # Num Lock +81 81 # KP = +84 75 # KP / +85 67 # KP * +48 48 # Tab +20 12 # Q +26 13 # W +8 14 # E +21 15 # R +23 17 # T +28 16 # Y +24 32 # U +12 34 # I +18 31 # O +19 35 # P +47 33 # [ +48 30 # ] +40 36 # Return +117 117 # Delete +119 119 # End +121 121 # Page Down +95 89 # KP 7 +96 91 # KP 8 +97 92 # KP 9 +86 78 # KP - +57 57 # Caps Lock +4 0 # A +22 1 # S +7 2 # D +9 3 # F +10 5 # G +11 4 # H +13 38 # J +14 40 # K +15 37 # L +51 41 # ; +52 39 # ' +49 42 # \ +92 86 # KP 4 +93 87 # KP 5 +94 88 # KP 6 +87 69 # KP + +56 56 # Shift +100 50 # International SDL_NONUSBACKSLASH +29 6 # Z +27 7 # X +6 8 # C +25 9 # V +5 11 # B +17 45 # N +16 46 # M +54 43 # , +55 47 # . +56 44 # / +126 62 # Cursor Up +123 59 # Cursor Left +125 61 # Cursor Down +124 60 # Cursor Right +83 83 # KP 1 +84 84 # KP 2 +85 85 # KP 3 +76 76 # KP Enter +228 54 # Ctrl +226 58 # Option +227 55 # Command +224 54 # Ctrl Left +230 58 # Right Alt->option +231 55 # Right cmd +44 49 # Space +82 82 # KP 0 +65 65 # KP . + +# +# Windows +# +sdl windib +sdl directx +1 53 # Esc +59 122 # F1 +60 120 # F2 +61 99 # F3 +62 118 # F4 +63 96 # F5 +64 97 # F6 +65 98 # F7 +66 100 # F8 +67 101 # F9 +68 109 # F10 +87 103 # F11 +88 111 # F12 +183 105 # PrintScrn +70 107 # Scroll Lock +197 113 # Pause +41 10 # ` +2 18 # 1 +3 19 # 2 +4 20 # 3 +5 21 # 4 +6 23 # 5 +7 22 # 6 +8 26 # 7 +9 28 # 8 +10 25 # 9 +11 29 # 0 +12 27 # - +13 24 # = +14 51 # Backspace +210 114 # Insert +199 115 # Home +75 116 # Page Up +69 71 # Num Lock +181 75 # KP / +55 67 # KP * +74 78 # KP - +15 48 # Tab +16 12 # Q +17 13 # W +18 14 # E +19 15 # R +20 17 # T +21 16 # Y +22 32 # U +23 34 # I +24 31 # O +25 35 # P +26 33 # [ +27 30 # ] +28 36 # Return +211 117 # Delete +207 119 # End +209 121 # Page Down +71 89 # KP 7 +72 91 # KP 8 +73 92 # KP 9 +78 69 # KP + +58 57 # Caps Lock +30 0 # A +31 1 # S +32 2 # D +33 3 # F +34 5 # G +35 4 # H +36 38 # J +37 40 # K +38 37 # L +39 41 # ; +40 39 # ' +75 86 # KP 4 +76 87 # KP 5 +77 88 # KP 6 +225 56 # Shift Left +100 50 # International +44 6 # Z +45 7 # X +46 8 # C +47 9 # V +48 11 # B +49 45 # N +50 46 # M +51 43 # , +52 47 # . +53 44 # / +229 56 # Shift Right +43 42 # \ +200 62 # Cursor Up +79 83 # KP 1 +80 84 # KP 2 +81 85 # KP 3 +156 76 # KP Enter +224 54 # Ctrl Left +227 58 # Logo Left (-> Option) +226 55 # Alt Left (-> Command) +57 49 # Space +230 55 # Alt Right (-> Command) +231 58 # Logo Right (-> Option) +221 50 # Menu (-> International) +157 54 # Ctrl Right +80 59 # Cursor Left +81 61 # Cursor Down +79 60 # Cursor Right +98 82 # KP 0 +99 65 # KP . diff --git a/BasiliskII/src/MacOSX/Credits.html b/BasiliskII/src/MacOSX/Credits.html index 29ee57a9..aa43da65 100644 --- a/BasiliskII/src/MacOSX/Credits.html +++ b/BasiliskII/src/MacOSX/Credits.html @@ -4,8 +4,14 @@ It enables you to run 68k MacOS software on your computer, even if you are using