add --inhibit-shutdown as a quick and crude temporary fix for #15
This commit is contained in:
parent
ecc2c22712
commit
6a358490d4
4 changed files with 96 additions and 38 deletions
2
dist/x48ng.man.1
vendored
2
dist/x48ng.man.1
vendored
|
@ -116,6 +116,8 @@ where options include (depending on compiled front-ends):
|
||||||
\-\-gray make the UI grayscale (default: false)
|
\-\-gray make the UI grayscale (default: false)
|
||||||
.br
|
.br
|
||||||
\-\-leave\-shift\-keys _not_ mapping the shift keys to let them free for numbers (default: false)
|
\-\-leave\-shift\-keys _not_ mapping the shift keys to let them free for numbers (default: false)
|
||||||
|
.br
|
||||||
|
\-\-inhibit\-shutdown __tentative fix for stuck-on-OFF bug__ (default: false)
|
||||||
|
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "runtime_options.h" /* only for inhibit_shutdown in do_shutdown() */
|
||||||
#include "emulator.h"
|
#include "emulator.h"
|
||||||
#include "emulator_inner.h"
|
#include "emulator_inner.h"
|
||||||
#include "romio.h"
|
#include "romio.h"
|
||||||
|
@ -251,6 +252,49 @@ int get_identification( void )
|
||||||
|
|
||||||
void do_shutdown( void )
|
void do_shutdown( void )
|
||||||
{
|
{
|
||||||
|
if ( inhibit_shutdown )
|
||||||
|
return;
|
||||||
|
|
||||||
|
/***************************/
|
||||||
|
/* hpemu/src/opcodes.c:367 */
|
||||||
|
/***************************/
|
||||||
|
/* static void op807( byte* opc ) // SHUTDN */
|
||||||
|
/* { */
|
||||||
|
/* // TODO: Fix SHUTDN */
|
||||||
|
/* if ( !cpu.in[ 0 ] && !cpu.in[ 1 ] && !cpu.in[ 3 ] ) { */
|
||||||
|
/* cpu.shutdown = true; */
|
||||||
|
/* } */
|
||||||
|
/* cpu.pc += 3; */
|
||||||
|
/* cpu.cycles += 5; */
|
||||||
|
/* } */
|
||||||
|
|
||||||
|
/***********************************/
|
||||||
|
/* saturn_bertolotti/src/cpu.c:364 */
|
||||||
|
/***********************************/
|
||||||
|
/* static void ExecSHUTDN( void ) */
|
||||||
|
/* { */
|
||||||
|
/* debug1( DEBUG_C_TRACE, CPU_I_CALLED, "SHUTDN" ); */
|
||||||
|
|
||||||
|
/* #ifdef CPU_SPIN_SHUTDN */
|
||||||
|
/* /\* If the CPU_SPIN_SHUTDN symbol is defined, the CPU module implements */
|
||||||
|
/* SHUTDN as a spin loop; the program counter is reset to the starting */
|
||||||
|
/* nibble of the SHUTDN opcode. */
|
||||||
|
/* *\/ */
|
||||||
|
/* cpu_status.PC -= 3; */
|
||||||
|
/* #endif */
|
||||||
|
|
||||||
|
/* /\* Set shutdown flag *\/ */
|
||||||
|
/* cpu_status.shutdn = 1; */
|
||||||
|
|
||||||
|
/* #ifndef CPU_SPIN_SHUTDN */
|
||||||
|
/* /\* If the CPU_SPIN_SHUTDN symbol is not defined, the CPU module implements */
|
||||||
|
/* SHUTDN signalling the condition CPU_I_SHUTDN */
|
||||||
|
/* *\/ */
|
||||||
|
/* ChfCondition CPU_I_SHUTDN, CHF_INFO ChfEnd; */
|
||||||
|
/* ChfSignal(); */
|
||||||
|
/* #endif */
|
||||||
|
/* } */
|
||||||
|
|
||||||
if ( device.display_touched ) {
|
if ( device.display_touched ) {
|
||||||
device.display_touched = 0;
|
device.display_touched = 0;
|
||||||
ui_refresh_LCD();
|
ui_refresh_LCD();
|
||||||
|
@ -478,7 +522,7 @@ void press_key( int hpkey )
|
||||||
keyboard[ hpkey ].pressed = 1;
|
keyboard[ hpkey ].pressed = 1;
|
||||||
|
|
||||||
int code = keyboard[ hpkey ].code;
|
int code = keyboard[ hpkey ].code;
|
||||||
if ( code == 0x8000 ) {
|
if ( code == 0x8000 ) { /* HPKEY_ON */
|
||||||
for ( int i = 0; i < 9; i++ )
|
for ( int i = 0; i < 9; i++ )
|
||||||
saturn.keybuf.rows[ i ] |= 0x8000;
|
saturn.keybuf.rows[ i ] |= 0x8000;
|
||||||
do_kbd_int();
|
do_kbd_int();
|
||||||
|
|
|
@ -38,6 +38,7 @@ char* port2FileName = NULL;
|
||||||
int frontend_type = FRONTEND_TEXT;
|
int frontend_type = FRONTEND_TEXT;
|
||||||
|
|
||||||
bool leave_shift_keys = false;
|
bool leave_shift_keys = false;
|
||||||
|
bool inhibit_shutdown = false;
|
||||||
|
|
||||||
bool mono = false;
|
bool mono = false;
|
||||||
bool gray = false;
|
bool gray = false;
|
||||||
|
@ -247,55 +248,57 @@ int parse_args( int argc, char* argv[] )
|
||||||
int clopt_small = -1;
|
int clopt_small = -1;
|
||||||
int clopt_tiny = -1;
|
int clopt_tiny = -1;
|
||||||
int clopt_leave_shift_keys = -1;
|
int clopt_leave_shift_keys = -1;
|
||||||
|
int clopt_inhibit_shutdown = -1;
|
||||||
|
|
||||||
char* optstring = "c:hvVtsirT";
|
char* optstring = "c:hvVtsirT";
|
||||||
struct option long_options[] = {
|
struct option long_options[] = {
|
||||||
{"config", required_argument, NULL, 'c' },
|
{"config", required_argument, NULL, 'c' },
|
||||||
{ "config-dir", required_argument, NULL, 1000 },
|
{"config-dir", required_argument, NULL, 1000 },
|
||||||
{ "rom", required_argument, NULL, 1010 },
|
{"rom", required_argument, NULL, 1010 },
|
||||||
{ "ram", required_argument, NULL, 1011 },
|
{"ram", required_argument, NULL, 1011 },
|
||||||
{ "state", required_argument, NULL, 1012 },
|
{"state", required_argument, NULL, 1012 },
|
||||||
{ "port1", required_argument, NULL, 1013 },
|
{"port1", required_argument, NULL, 1013 },
|
||||||
{ "port2", required_argument, NULL, 1014 },
|
{"port2", required_argument, NULL, 1014 },
|
||||||
|
|
||||||
{ "serial-line", required_argument, NULL, 1015 },
|
{"serial-line", required_argument, NULL, 1015 },
|
||||||
|
|
||||||
{ "help", no_argument, NULL, 'h' },
|
{"help", no_argument, NULL, 'h' },
|
||||||
{ "version", no_argument, NULL, 'v' },
|
{"version", no_argument, NULL, 'v' },
|
||||||
|
|
||||||
{ "print-config", no_argument, ( int* )&print_config, true },
|
{"print-config", no_argument, ( int* )&print_config, true },
|
||||||
{ "verbose", no_argument, &clopt_verbose, true },
|
{"verbose", no_argument, &clopt_verbose, true },
|
||||||
{ "terminal", no_argument, &clopt_useTerminal, true },
|
{"terminal", no_argument, &clopt_useTerminal, true },
|
||||||
{ "serial", no_argument, &clopt_useSerial, true },
|
{"serial", no_argument, &clopt_useSerial, true },
|
||||||
|
|
||||||
{ "reset", no_argument, ( int* )&resetOnStartup, true },
|
{"reset", no_argument, ( int* )&resetOnStartup, true },
|
||||||
{ "throttle", no_argument, &clopt_throttle, true },
|
{"throttle", no_argument, &clopt_throttle, true },
|
||||||
|
|
||||||
{ "debug", no_argument, &clopt_useDebugger, true },
|
{"debug", no_argument, &clopt_useDebugger, true },
|
||||||
|
|
||||||
{ "sdl", no_argument, &clopt_frontend_type, FRONTEND_SDL},
|
{"sdl", no_argument, &clopt_frontend_type, FRONTEND_SDL},
|
||||||
{ "no-chrome", no_argument, &clopt_hide_chrome, true },
|
{"no-chrome", no_argument, &clopt_hide_chrome, true },
|
||||||
{ "fullscreen", no_argument, &clopt_show_ui_fullscreen, true },
|
{"fullscreen", no_argument, &clopt_show_ui_fullscreen, true },
|
||||||
|
|
||||||
{ "x11", no_argument, &clopt_frontend_type, FRONTEND_X11},
|
{"x11", no_argument, &clopt_frontend_type, FRONTEND_X11},
|
||||||
{ "netbook", no_argument, &clopt_netbook, true },
|
{"netbook", no_argument, &clopt_netbook, true },
|
||||||
{ "visual", required_argument, NULL, 8110 },
|
{"visual", required_argument, NULL, 8110 },
|
||||||
{ "small-font", required_argument, NULL, 8111 },
|
{"small-font", required_argument, NULL, 8111 },
|
||||||
{ "medium-font", required_argument, NULL, 8112 },
|
{"medium-font", required_argument, NULL, 8112 },
|
||||||
{ "large-font", required_argument, NULL, 8113 },
|
{"large-font", required_argument, NULL, 8113 },
|
||||||
{ "connection-font", required_argument, NULL, 8114 },
|
{"connection-font", required_argument, NULL, 8114 },
|
||||||
|
|
||||||
{ "tui", no_argument, NULL, 9100 },
|
{"tui", no_argument, NULL, 9100 },
|
||||||
{ "tui-small", no_argument, NULL, 9110 },
|
{"tui-small", no_argument, NULL, 9110 },
|
||||||
{ "tui-tiny", no_argument, NULL, 9120 },
|
{"tui-tiny", no_argument, NULL, 9120 },
|
||||||
{ "small", no_argument, NULL, 9109 }, /* DEPRECATED */
|
{"small", no_argument, NULL, 9109 }, /* DEPRECATED */
|
||||||
{ "tiny", no_argument, NULL, 9119 }, /* DEPRECATED */
|
{"tiny", no_argument, NULL, 9119 }, /* DEPRECATED */
|
||||||
|
|
||||||
{ "mono", no_argument, &clopt_mono, true },
|
{"mono", no_argument, &clopt_mono, true },
|
||||||
{ "gray", no_argument, &clopt_gray, true },
|
{"gray", no_argument, &clopt_gray, true },
|
||||||
{ "leave-shift-keys", no_argument, &clopt_leave_shift_keys, true },
|
{"leave-shift-keys", no_argument, &clopt_leave_shift_keys, true },
|
||||||
|
{"inhibit-shutdown", no_argument, &clopt_inhibit_shutdown, true },
|
||||||
|
|
||||||
{ 0, 0, 0, 0 }
|
{0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
char* help_text = "usage: %s [options]\n"
|
char* help_text = "usage: %s [options]\n"
|
||||||
|
@ -355,7 +358,9 @@ int parse_args( int argc, char* argv[] )
|
||||||
"false)\n"
|
"false)\n"
|
||||||
" --gray make the UI grayscale (default: "
|
" --gray make the UI grayscale (default: "
|
||||||
"false)\n"
|
"false)\n"
|
||||||
" --leave-shift-keys _not_ mapping the shift keys to let them free for numbers (default: "
|
" --leave-shift-keys _not_ mapping the shift keys to let them free for numbers (default: "
|
||||||
|
"false)\n"
|
||||||
|
" --inhibit-shutdown __tentative fix for stuck-on-OFF bug__ (default: "
|
||||||
"false)\n";
|
"false)\n";
|
||||||
while ( c != EOF ) {
|
while ( c != EOF ) {
|
||||||
c = getopt_long( argc, argv, optstring, long_options, &option_index );
|
c = getopt_long( argc, argv, optstring, long_options, &option_index );
|
||||||
|
@ -564,6 +569,9 @@ int parse_args( int argc, char* argv[] )
|
||||||
lua_getglobal( config_lua_values, "leave_shift_keys" );
|
lua_getglobal( config_lua_values, "leave_shift_keys" );
|
||||||
leave_shift_keys = lua_toboolean( config_lua_values, -1 );
|
leave_shift_keys = lua_toboolean( config_lua_values, -1 );
|
||||||
|
|
||||||
|
lua_getglobal( config_lua_values, "inhibit_shutdown" );
|
||||||
|
inhibit_shutdown = lua_toboolean( config_lua_values, -1 );
|
||||||
|
|
||||||
lua_getglobal( config_lua_values, "x11_visual" );
|
lua_getglobal( config_lua_values, "x11_visual" );
|
||||||
x11_visual = ( char* )luaL_optstring( config_lua_values, -1, "default" );
|
x11_visual = ( char* )luaL_optstring( config_lua_values, -1, "default" );
|
||||||
|
|
||||||
|
@ -635,6 +643,8 @@ int parse_args( int argc, char* argv[] )
|
||||||
tiny = clopt_tiny;
|
tiny = clopt_tiny;
|
||||||
if ( clopt_leave_shift_keys != -1 )
|
if ( clopt_leave_shift_keys != -1 )
|
||||||
leave_shift_keys = clopt_leave_shift_keys;
|
leave_shift_keys = clopt_leave_shift_keys;
|
||||||
|
if ( clopt_inhibit_shutdown != -1 )
|
||||||
|
inhibit_shutdown = clopt_inhibit_shutdown;
|
||||||
|
|
||||||
/* After getting configs and params */
|
/* After getting configs and params */
|
||||||
/* normalize config_dir again in case it's been modified */
|
/* normalize config_dir again in case it's been modified */
|
||||||
|
@ -690,6 +700,7 @@ int parse_args( int argc, char* argv[] )
|
||||||
fprintf( stdout, "mono = %s\n", mono ? "true" : "false" );
|
fprintf( stdout, "mono = %s\n", mono ? "true" : "false" );
|
||||||
fprintf( stdout, "gray = %s\n", gray ? "true" : "false" );
|
fprintf( stdout, "gray = %s\n", gray ? "true" : "false" );
|
||||||
fprintf( stdout, "leave_shift_keys = %s\n", leave_shift_keys ? "true" : "false" );
|
fprintf( stdout, "leave_shift_keys = %s\n", leave_shift_keys ? "true" : "false" );
|
||||||
|
fprintf( stdout, "inhibit_shutdown = %s\n", inhibit_shutdown ? "true" : "false" );
|
||||||
fprintf( stdout, "\n" );
|
fprintf( stdout, "\n" );
|
||||||
fprintf( stdout, "x11_visual = \"%s\"\n", x11_visual );
|
fprintf( stdout, "x11_visual = \"%s\"\n", x11_visual );
|
||||||
fprintf( stdout, "netbook = %s\n", netbook ? "true" : "false" );
|
fprintf( stdout, "netbook = %s\n", netbook ? "true" : "false" );
|
||||||
|
|
|
@ -20,6 +20,7 @@ extern int frontend_type;
|
||||||
extern char* serialLine;
|
extern char* serialLine;
|
||||||
|
|
||||||
extern bool leave_shift_keys;
|
extern bool leave_shift_keys;
|
||||||
|
extern bool inhibit_shutdown;
|
||||||
|
|
||||||
extern bool mono;
|
extern bool mono;
|
||||||
extern bool gray;
|
extern bool gray;
|
||||||
|
|
Loading…
Add table
Reference in a new issue