From b5fad7ebda3167f1c9be460137b368804ec180df Mon Sep 17 00:00:00 2001 From: "simon.kagstrom" Date: Sat, 13 Mar 2010 12:56:34 +0000 Subject: [PATCH] More dead code --- Src/C64_Embedded.h | 320 --------------------------------------------- Src/Prefs_glade.h | 250 ----------------------------------- 2 files changed, 570 deletions(-) delete mode 100644 Src/C64_Embedded.h delete mode 100644 Src/Prefs_glade.h diff --git a/Src/C64_Embedded.h b/Src/C64_Embedded.h deleted file mode 100644 index 66b1869..0000000 --- a/Src/C64_Embedded.h +++ /dev/null @@ -1,320 +0,0 @@ -/* - * C64_x.h - Put the pieces together, X specific stuff - * - * Frodo (C) 1994-1997,2002-2004 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 "main.h" - - -static struct timeval tv_start; - -#ifndef HAVE_USLEEP -/* - * NAME: - * usleep -- This is the precision timer for Test Set - * Automation. It uses the select(2) system - * call to delay for the desired number of - * micro-seconds. This call returns ZERO - * (which is usually ignored) on successful - * completion, -1 otherwise. - * - * ALGORITHM: - * 1) We range check the passed in microseconds and log a - * warning message if appropriate. We then return without - * delay, flagging an error. - * 2) Load the Seconds and micro-seconds portion of the - * interval timer structure. - * 3) Call select(2) with no file descriptors set, just the - * timer, this results in either delaying the proper - * ammount of time or being interupted early by a signal. - * - * HISTORY: - * Added when the need for a subsecond timer was evident. - * - * AUTHOR: - * Michael J. Dyer Telephone: AT&T 414.647.4044 - * General Electric Medical Systems GE DialComm 8 *767.4044 - * P.O. Box 414 Mail Stop 12-27 Sect'y AT&T 414.647.4584 - * Milwaukee, Wisconsin USA 53201 8 *767.4584 - * internet: mike@sherlock.med.ge.com GEMS WIZARD e-mail: DYER - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -int usleep(unsigned long int microSeconds) -{ - unsigned int Seconds, uSec; - int nfds, readfds, writefds, exceptfds; - struct timeval Timer; - - nfds = readfds = writefds = exceptfds = 0; - - if( (microSeconds == (unsigned long) 0) - || microSeconds > (unsigned long) 4000000 ) - { - errno = ERANGE; /* value out of range */ - perror( "usleep time out of range ( 0 -> 4000000 ) " ); - return -1; - } - - Seconds = microSeconds / (unsigned long) 1000000; - uSec = microSeconds % (unsigned long) 1000000; - - Timer.tv_sec = Seconds; - Timer.tv_usec = uSec; - - if( select( nfds, &readfds, &writefds, &exceptfds, &Timer ) < 0 ) - { - perror( "usleep (select) failed" ); - return -1; - } - - return 0; -} -#endif - -#ifdef __linux__ -// select() timing is much more accurate under Linux -static void Delay_usec(unsigned long usec) -{ - int was_error; - struct timeval tv; - - tv.tv_sec = 0; - tv.tv_usec = usec; - do { - errno = 0; - was_error = select(0, NULL, NULL, NULL, &tv); - } while (was_error && (errno == EINTR)); -} -#else -static void Delay_usec(unsigned long usec) -{ - usleep(usec); -} -#endif - -/* - * Constructor, system-dependent things - */ - -void C64::c64_ctor1(void) -{ - // Initialize joystick variables - joy_minx[0] = joy_miny[0] = 32767; - joy_maxx[0] = joy_maxy[0] = -32768; - joy_minx[1] = joy_miny[1] = 32767; - joy_maxx[1] = joy_maxy[1] = -32768; -} - -void C64::c64_ctor2(void) -{ - gettimeofday(&tv_start, NULL); -} - - -/* - * Destructor, system-dependent things - */ - -void C64::c64_dtor(void) -{ -} - - -/* - * Start main emulation thread - */ - -void C64::Run(void) -{ - // Reset chips - TheCPU->Reset(); - TheSID->Reset(); - TheCIA1->Reset(); - TheCIA2->Reset(); - TheCPU1541->Reset(); - - // Patch kernal IEC routines - orig_kernal_1d84 = Kernal[0x1d84]; - orig_kernal_1d85 = Kernal[0x1d85]; - PatchKernal(ThePrefs.FastReset, ThePrefs.Emul1541Proc); - - quit_thyself = false; - thread_func(); -} - - -/* - * Vertical blank: Poll keyboard and joysticks, update window - */ - -void C64::VBlank(bool draw_frame) -{ - // Poll keyboard - TheDisplay->PollKeyboard(TheCIA1->KeyMatrix, TheCIA1->RevMatrix, &joykey); - if (TheDisplay->quit_requested) - quit_thyself = true; - - // Poll joysticks - TheCIA1->Joystick1 = poll_joystick(0); - TheCIA1->Joystick2 = poll_joystick(1); - - if (ThePrefs.JoystickSwap) { - uint8 tmp = TheCIA1->Joystick1; - TheCIA1->Joystick1 = TheCIA1->Joystick2; - TheCIA1->Joystick2 = tmp; - } - - // Joystick keyboard emulation - if (TheDisplay->NumLock()) - TheCIA1->Joystick1 &= joykey; - else - TheCIA1->Joystick2 &= joykey; - - // Count TOD clocks - TheCIA1->CountTOD(); - TheCIA2->CountTOD(); - - // Update window if needed - if (draw_frame) { - TheDisplay->Update(); - - // Calculate time between VBlanks, display speedometer - struct timeval tv; - gettimeofday(&tv, NULL); - if ((tv.tv_usec -= tv_start.tv_usec) < 0) { - tv.tv_usec += 1000000; - tv.tv_sec -= 1; - } - tv.tv_sec -= tv_start.tv_sec; - double elapsed_time = (double)tv.tv_sec * 1000000 + tv.tv_usec; - speed_index = 20000 / (elapsed_time + 1) * ThePrefs.SkipFrames * 100; - - // Limit speed to 100% if desired - if ((speed_index > 100) && ThePrefs.LimitSpeed) { - Delay_usec((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time)); - speed_index = 100; - } - - gettimeofday(&tv_start, NULL); - - TheDisplay->Speedometer((int)speed_index); - } -} - - -/* - * The emulation's main loop - */ - -void C64::thread_func(void) -{ - int linecnt = 0; - -#ifdef FRODO_SC - while (!quit_thyself) { - - // The order of calls is important here - if (TheVIC->EmulateCycle()) - TheSID->EmulateLine(); - TheCIA1->CheckIRQs(); - TheCIA2->CheckIRQs(); - TheCIA1->EmulateCycle(); - TheCIA2->EmulateCycle(); - TheCPU->EmulateCycle(); - - if (ThePrefs.Emul1541Proc) { - TheCPU1541->CountVIATimers(1); - if (!TheCPU1541->Idle) - TheCPU1541->EmulateCycle(); - } - CycleCounter++; -#else - while (!quit_thyself) { - - // The order of calls is important here - int cycles = TheVIC->EmulateLine(); - TheSID->EmulateLine(); -#if !PRECISE_CIA_CYCLES - TheCIA1->EmulateLine(ThePrefs.CIACycles); - TheCIA2->EmulateLine(ThePrefs.CIACycles); -#endif - - if (ThePrefs.Emul1541Proc) { - int cycles_1541 = ThePrefs.FloppyCycles; - TheCPU1541->CountVIATimers(cycles_1541); - - if (!TheCPU1541->Idle) { - // 1541 processor active, alternately execute - // 6502 and 6510 instructions until both have - // used up their cycles - while (cycles >= 0 || cycles_1541 >= 0) - if (cycles > cycles_1541) - cycles -= TheCPU->EmulateLine(1); - else - cycles_1541 -= TheCPU1541->EmulateLine(1); - } else - TheCPU->EmulateLine(cycles); - } else - // 1541 processor disabled, only emulate 6510 - TheCPU->EmulateLine(cycles); -#endif - linecnt++; -#if !defined(__svgalib__) - if ((linecnt & 0xfff) == 0 && gui) { - - // check for command from GUI process - // fprintf(stderr,":"); - while (gui->probe()) { - char c; - if (gui->eread(&c, 1) != 1) { - delete gui; - gui = 0; - fprintf(stderr,"Oops, GUI process died...\n"); - } else { - // fprintf(stderr,"%c",c); - switch (c) { - case 'q': - quit_thyself = true; - break; - case 'r': - Reset(); - break; - case 'p':{ - Prefs *np = Frodo::reload_prefs(); - NewPrefs(np); - ThePrefs = *np; - break; - } - default: - break; - } - } - } - } -#endif - } -} diff --git a/Src/Prefs_glade.h b/Src/Prefs_glade.h deleted file mode 100644 index 13fabdb..0000000 --- a/Src/Prefs_glade.h +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Prefs_glade.h - Global preferences, Glade/Gnome/Gtk+ specific stuff - * - * Frodo (C) 1994-1997,2002-2005 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 - - -// Glade XML tree -static GladeXML *xml = NULL; - -// Result of ShowEditor() -static bool result = false; - -// Pointer to preferences being edited -static Prefs *prefs = NULL; - -// Prefs file name -static char *prefs_path = NULL; - -// Prototypes -static void set_values(); -static void get_values(); -static void ghost_widgets(); - - -/* - * Show preferences editor (synchronously) - * prefs_name points to the file name of the preferences (which may be changed) - */ - -bool Prefs::ShowEditor(bool startup, char *path) -{ - prefs = this; - prefs_path = path; - - // Load XML user interface file on startup - if (startup) { - xml = glade_xml_new(DATADIR "Frodo.glade", NULL, NULL); - if (xml) { - glade_xml_signal_autoconnect(xml); - set_values(); - } - } - - // No XML means no prefs editor - if (!xml) - return startup; - - // Run editor - result = false; - gtk_main(); - return result; -} - - -/* - * Set the values of the widgets - */ - -static void create_joystick_menu(const char *widget_name) -{ - GtkWidget *w = glade_xml_get_widget(xml, widget_name); - gtk_option_menu_remove_menu(GTK_OPTION_MENU(w)); - - GtkWidget *menu = gtk_menu_new(); - - for (int i = -1; i < SDL_NumJoysticks(); ++i) { - GtkWidget *item = gtk_menu_item_new_with_label(i < 0 ? "None" : SDL_JoystickName(i)); - gtk_widget_show(item); - gtk_menu_append(GTK_MENU(menu), item); - } - - gtk_option_menu_set_menu(GTK_OPTION_MENU(w), menu); -} - -static void set_values() -{ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "emul1541_proc")), prefs->Emul1541Proc); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "map_slash")), prefs->MapSlash); - - gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive8_path")))), prefs->DrivePath[0]); - gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive9_path")))), prefs->DrivePath[1]); - gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive10_path")))), prefs->DrivePath[2]); - gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive11_path")))), prefs->DrivePath[3]); - - gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "display_type")), prefs->DisplayType); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprites_on")), prefs->SpritesOn); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprite_collisions")), prefs->SpriteCollisions); - - gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "sid_type")), prefs->SIDType); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sid_filters")), prefs->SIDFilters); - - create_joystick_menu("joystick1_port"); - create_joystick_menu("joystick2_port"); - - gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick1_port")), prefs->Joystick1Port); - gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick2_port")), prefs->Joystick2Port); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "joystick_swap")), prefs->JoystickSwap); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "skip_frames")), prefs->SkipFrames); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "limit_speed")), prefs->LimitSpeed); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "fast_reset")), prefs->FastReset); - - gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "reu_size")), prefs->REUSize); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "normal_cycles")), prefs->NormalCycles); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "bad_line_cycles")), prefs->BadLineCycles); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "cia_cycles")), prefs->CIACycles); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "floppy_cycles")), prefs->FloppyCycles); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "cia_irq_hack")), prefs->CIAIRQHack); - - ghost_widgets(); -} - - -/* - * Get the values of the widgets - */ - -static void get_drive_path(int num, const char *widget_name) -{ - prefs->DrivePath[num][0] = 0; - const char *path = gnome_file_entry_get_full_path(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, widget_name)), false); - if (path) - strncpy(prefs->DrivePath[num], path, 255); - prefs->DrivePath[num][255] = 0; -} - -static void get_values() -{ - prefs->Emul1541Proc = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "emul1541_proc"))); - prefs->MapSlash = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "map_slash"))); - - get_drive_path(0, "drive8_path"); - get_drive_path(1, "drive9_path"); - get_drive_path(2, "drive10_path"); - get_drive_path(3, "drive11_path"); - - prefs->DisplayType = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "display_type"))); - prefs->SpritesOn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprites_on"))); - prefs->SpriteCollisions = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprite_collisions"))); - - prefs->SIDType = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "sid_type"))); - prefs->SIDFilters = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sid_filters"))); - - prefs->Joystick1Port = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick1_port"))); - prefs->Joystick2Port = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick2_port"))); - prefs->JoystickSwap = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "joystick_swap"))); - - prefs->SkipFrames = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "skip_frames"))); - prefs->LimitSpeed = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "limit_speed"))); - prefs->FastReset = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "fast_reset"))); - - prefs->REUSize = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "reu_size"))); - - prefs->NormalCycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "normal_cycles"))); - prefs->BadLineCycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "bad_line_cycles"))); - prefs->CIACycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "cia_cycles"))); - prefs->FloppyCycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "floppy_cycles"))); - - prefs->CIAIRQHack = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "cia_irq_hack"))); -} - - -/* - * Ghost/unghost widgets - */ - -static void ghost_widget(const char *name, bool ghosted) -{ - gtk_widget_set_sensitive(glade_xml_get_widget(xml, name), !ghosted); -} - -static void ghost_widgets() -{ - ghost_widget("drive9_path", prefs->Emul1541Proc); - ghost_widget("drive10_path", prefs->Emul1541Proc); - ghost_widget("drive11_path", prefs->Emul1541Proc); - - ghost_widget("sid_filters", prefs->SIDType != SIDTYPE_DIGITAL); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sid_filters")), prefs->SIDType == SIDTYPE_DIGITAL ? prefs->SIDFilters : (prefs->SIDType == SIDTYPE_SIDCARD ? true : false)); -} - - -/* - * Signal handlers - */ - -extern "C" gboolean on_prefs_win_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) -{ - return false; -} - -extern "C" void on_ok_clicked(GtkButton *button, gpointer user_data) -{ - result = true; - get_values(); - prefs->Save(prefs_path); - gtk_main_quit(); -} - -extern "C" void on_quit_clicked(GtkButton *button, gpointer user_data) -{ - result = false; - gtk_main_quit(); -} - -extern "C" void on_about_activate(GtkMenuItem *menuitem, gpointer user_data) -{ - GladeXML *about_xml = glade_xml_new(DATADIR "Frodo.glade", "about_win", NULL); - if (about_xml) - gtk_widget_show(glade_xml_get_widget(about_xml, "about_win")); -} - -extern "C" void on_emul1541_proc_toggled(GtkToggleButton *button, gpointer user_data) -{ - prefs->Emul1541Proc = gtk_toggle_button_get_active(button); - ghost_widgets(); -} - -extern "C" void on_sid_type_activate(GtkMenuItem *menuitem, gpointer user_data) -{ - prefs->SIDType = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "sid_type"))); - ghost_widgets(); -} - -extern "C" void on_sid_filters_toggled(GtkToggleButton *button, gpointer user_data) -{ - prefs->SIDFilters = gtk_toggle_button_get_active(button); -}