revision 167:71c0cc416a64
summary |
tree |
shortlog |
changelog |
graph |
changeset |
raw | bz2 | zip | gz changeset | 167:71c0cc416a64 |
parent | 166:8aa70cf503a2 |
child | 168:203a72138e16 |
author | nkeynes |
date | Mon Jun 19 11:00:42 2006 +0000 (17 years ago) |
Add config value retrieval for pathnames
Implement default path for disc + save state loaders
Dump disc ID when mounting a CD
Implement default path for disc + save state loaders
Dump disc ID when mounting a CD
![]() | src/bootstrap.c | view | annotate | diff | log | |
![]() | src/bootstrap.h | view | annotate | diff | log | |
![]() | src/dreamcast.c | view | annotate | diff | log | |
![]() | src/dreamcast.h | view | annotate | diff | log | |
![]() | src/gdrom/gdrom.c | view | annotate | diff | log | |
![]() | src/gui/callbacks.c | view | annotate | diff | log | |
![]() | src/gui/gui.c | view | annotate | diff | log | |
![]() | src/gui/gui.h | view | annotate | diff | log |
1.1 --- a/src/bootstrap.c Sun Jun 18 12:01:53 2006 +00001.2 +++ b/src/bootstrap.c Mon Jun 19 11:00:42 2006 +00001.3 @@ -1,5 +1,5 @@1.4 /**1.5 - * $Id: bootstrap.c,v 1.5 2005-12-26 03:54:52 nkeynes Exp $1.6 + * $Id: bootstrap.c,v 1.6 2006-06-19 11:00:40 nkeynes Exp $1.7 *1.8 * CD Bootstrap header parsing. Mostly for informational purposes.1.9 *1.10 @@ -103,8 +103,10 @@1.11 /**1.12 * Dump the bootstrap info to the output log for infomational/debugging1.13 * purposes.1.14 + * @param detail true to include a ful information dump, false for just1.15 + * the facts, maam.1.16 */1.17 -void bootstrap_dump( char *data )1.18 +void bootstrap_dump( char *data, gboolean detail )1.19 {1.20 struct dc_bootstrap_head *head;1.21 int i, got, periph, crc, hcrc;1.22 @@ -118,42 +120,39 @@1.23 for( i=127; i>0 && buf[i] == ' '; i-- );1.24 buf[i] = '\0';1.25 periph = strtol( head->peripherals, NULL, 16 );1.26 - INFO( "Bootstrap Name: %s Author: %-16.16s",1.27 + INFO( "Name: %s Author: %-16.16s",1.28 buf, head->vendor_id );1.29 sprintf( buf, "%4.4s", head->crc );1.30 crc = compute_crc16(head);1.31 hcrc = strtol( buf, NULL, 16 );1.32 - emit( NULL, crc == hcrc ? EMIT_INFO : EMIT_WARN, "File",1.33 - " Header CRC: %04X (Computed %04X)", hcrc, crc );1.34 - INFO( " Boot File: %-16.16s", head->boot_file );1.35 INFO( " Product ID: %-10.10s Product Ver: %-6.6s Date: %-8.8s",1.36 head->product_id, head->product_ver, head->product_date );1.37 - INFO( " Disc ID: %-11.11s Regions: %-8.8s Peripherals: %07X",1.38 - head->gdrom_id, head->regions, periph );1.39 - strcpy( buf, " Supports: " );1.40 - got = 0;1.41 - for( i=0; i<28; i++ ) {1.42 - if( periph & (1<<i) ){1.43 - if( got ) strcat( buf, ", " );1.44 - strcat( buf, dc_peripherals[i] );1.45 - got = 1;1.46 - }1.47 - if( i == 11 ) i = 23; /* Skip 8-23 */1.48 + if( detail ) {1.49 + emit( NULL, crc == hcrc ? EMIT_INFO : EMIT_WARN, "File",1.50 + " Header CRC: %04X (Computed %04X)", hcrc, crc );1.51 + INFO( " Boot File: %-16.16s", head->boot_file );1.52 + INFO( " Disc ID: %-11.11s Regions: %-8.8s Peripherals: %07X",1.53 + head->gdrom_id, head->regions, periph );1.54 + strcpy( buf, " Supports: " );1.55 + got = 0;1.56 + for( i=0; i<28; i++ ) {1.57 + if( periph & (1<<i) ){1.58 + if( got ) strcat( buf, ", " );1.59 + strcat( buf, dc_peripherals[i] );1.60 + got = 1;1.61 + }1.62 + if( i == 11 ) i = 23; /* Skip 8-23 */1.63 + }1.64 + INFO( buf, NULL );1.65 + strcpy( buf, " Requires: " );1.66 + got = 0;1.67 + for( i=12; i<24; i++ ) {1.68 + if( periph & (1<<i) ) {1.69 + if( got ) strcat( buf, ", " );1.70 + strcat( buf, dc_peripherals[i] );1.71 + got = 1;1.72 + }1.73 + }1.74 + INFO( buf, NULL );1.75 }1.76 - INFO( buf, NULL );1.77 - strcpy( buf, " Requires: " );1.78 - got = 0;1.79 - for( i=12; i<24; i++ ) {1.80 - if( periph & (1<<i) ) {1.81 - if( got ) strcat( buf, ", " );1.82 - strcat( buf, dc_peripherals[i] );1.83 - got = 1;1.84 - }1.85 - }1.86 - INFO( buf, NULL );1.87 -#if 01.88 - INFO( " Area protection symbols:", NULL );1.89 - for( i=0; i<8; i++ )1.90 - INFO( " %d: %28.28s", i, &prot_symbols[(i*32)+4] );1.91 -#endif1.92 }
2.1 --- a/src/bootstrap.h Sun Jun 18 12:01:53 2006 +00002.2 +++ b/src/bootstrap.h Mon Jun 19 11:00:42 2006 +00002.3 @@ -1,5 +1,5 @@2.4 /**2.5 - * $Id: bootstrap.h,v 1.3 2006-01-22 22:41:40 nkeynes Exp $2.6 + * $Id: bootstrap.h,v 1.4 2006-06-19 11:00:40 nkeynes Exp $2.7 *2.8 * CD Bootstrap header parsing. Mostly for informational purposes.2.9 *2.10 @@ -26,13 +26,13 @@2.11 extern "C" {2.12 #endif2.14 -#define DEFAULT_BOOTSTRAP_FILE "IP.BIN"2.15 +#include "dream.h"2.17 /**2.18 * Dump the bootstrap info to the output log for infomational/debugging2.19 * purposes.2.20 */2.21 -void bootstrap_dump(char *data);2.22 +void bootstrap_dump(char *data, gboolean detail);2.24 #ifdef __cplusplus2.25 }
3.1 --- a/src/dreamcast.c Sun Jun 18 12:01:53 2006 +00003.2 +++ b/src/dreamcast.c Mon Jun 19 11:00:42 2006 +00003.3 @@ -1,5 +1,5 @@3.4 /**3.5 - * $Id: dreamcast.c,v 1.16 2006-05-20 02:38:58 nkeynes Exp $3.6 + * $Id: dreamcast.c,v 1.17 2006-06-19 11:00:40 nkeynes Exp $3.7 * Central switchboard for the system. This pulls all the individual modules3.8 * together into some kind of coherent structure. This is also where you'd3.9 * add Naomi support, if I ever get a board to play with...3.10 @@ -66,10 +66,11 @@3.11 mem_create_ram_region( 0x00800000, 2 MB, MEM_REGION_AUDIO );3.12 mem_create_ram_region( 0x00703000, 8 KB, MEM_REGION_AUDIO_SCRATCH );3.13 mem_create_ram_region( 0x05000000, 8 MB, MEM_REGION_VIDEO );3.14 - mem_load_rom( "dcboot.rom", 0x00000000, 0x00200000, 0x89f2b1a1 );3.15 + mem_load_rom( dreamcast_get_config_value(CONFIG_BIOS_PATH),3.16 + 0x00000000, 0x00200000, 0x89f2b1a1 );3.17 mem_create_ram_region( 0x00200000, 0x00020000, MEM_REGION_FLASH );3.18 - mem_load_block( "../bios/dcflash.rom", 0x00200000, 0x00020000 );3.19 - // mem_load_rom( "dcflash.rom",0x00200000, 0x00020000, 0x357c3568 );3.20 + mem_load_block( dreamcast_get_config_value(CONFIG_FLASH_PATH),3.21 + 0x00200000, 0x00020000 );3.23 /* Load in the rest of the core modules */3.24 dreamcast_register_module( &sh4_module );3.25 @@ -78,14 +79,6 @@3.26 dreamcast_register_module( &aica_module );3.27 dreamcast_register_module( &maple_module );3.28 dreamcast_register_module( &ide_module );3.29 -3.30 - /* Attach any default maple devices, ie a pair of controllers */3.31 - /*3.32 - maple_device_t controller1 = maple_new_device("Sega Controller");3.33 - maple_device_t controller2 = maple_new_device("Sega Controller");3.34 - maple_attach_device( controller1, 0, 0 );3.35 - maple_attach_device( controller2, 1, 0 );3.36 - */3.37 }3.39 /**3.40 @@ -164,6 +157,7 @@3.42 /***************************** User Configuration **************************/3.44 +3.45 static struct dreamcast_config_entry global_config[] =3.46 {{ "bios", CONFIG_TYPE_FILE, "dcboot.rom" },3.47 { "flash", CONFIG_TYPE_FILE, "dcflash.rom" },3.48 @@ -202,6 +196,11 @@3.49 maple_detach_all();3.50 }3.52 +const gchar *dreamcast_get_config_value( int key )3.53 +{3.54 + return global_config[key].value;3.55 +}3.56 +3.57 gboolean dreamcast_load_config( const gchar *filename )3.58 {3.59 FILE *f = fopen(filename, "ro");
4.1 --- a/src/dreamcast.h Sun Jun 18 12:01:53 2006 +00004.2 +++ b/src/dreamcast.h Mon Jun 19 11:00:42 2006 +00004.3 @@ -1,5 +1,5 @@4.4 /**4.5 - * $Id: dreamcast.h,v 1.9 2006-05-15 08:28:48 nkeynes Exp $4.6 + * $Id: dreamcast.h,v 1.10 2006-06-19 11:00:40 nkeynes Exp $4.7 *4.8 * Public interface for dreamcast.c -4.9 * Central switchboard for the system. This pulls all the individual modules4.10 @@ -63,6 +63,14 @@4.12 extern struct dreamcast_config_group dreamcast_config_root[];4.14 +/* Global config values */4.15 +const gchar *dreamcast_get_config_value( int key );4.16 +#define CONFIG_BIOS_PATH 04.17 +#define CONFIG_FLASH_PATH 14.18 +#define CONFIG_DEFAULT_PATH 24.19 +#define CONFIG_SAVE_PATH 34.20 +#define CONFIG_BOOTSTRAP 44.21 +4.22 #ifdef __cplusplus4.23 }4.24 #endif
5.1 --- a/src/gdrom/gdrom.c Sun Jun 18 12:01:53 2006 +00005.2 +++ b/src/gdrom/gdrom.c Mon Jun 19 11:00:42 2006 +00005.3 @@ -1,5 +1,5 @@5.4 /**5.5 - * $Id: gdrom.c,v 1.7 2006-06-15 10:32:42 nkeynes Exp $5.6 + * $Id: gdrom.c,v 1.8 2006-06-19 11:00:42 nkeynes Exp $5.7 *5.8 * GD-Rom access functions.5.9 *5.10 @@ -124,15 +124,35 @@5.11 }5.14 -void gdrom_dump_disc( gdrom_disc_t disc ) {5.15 +void gdrom_dump_disc_info( gdrom_disc_t disc ) {5.16 int i;5.17 + int last_session = disc->track[disc->track_count-1].session;5.18 + gboolean is_bootable = FALSE;5.19 +5.20 INFO( "Disc ID: %s, %d tracks in %d sessions", disc->mcn, disc->track_count,5.21 disc->track[disc->track_count-1].session + 1 );5.22 - for( i=0; i<disc->track_count; i++ ) {5.23 - INFO( "Sess %d Trk %d: Start %06X Length %06X, %s",5.24 - disc->track[i].session+1, i+1, disc->track[i].lba,5.25 - disc->track[i].sector_count, gdrom_mode_names[disc->track[i].mode] );5.26 + if( last_session > 0 ) {5.27 + /* Boot track is the first data track of the last session, provided that it5.28 + * cannot be a single-session disc.5.29 + */5.30 + int boot_track = -1;5.31 + for( i=disc->track_count-1; i>=0 && disc->track[i].session == last_session; i-- ) {5.32 + if( disc->track[i].flags & TRACK_DATA ) {5.33 + boot_track = i;5.34 + }5.35 + }5.36 + if( boot_track != -1 ) {5.37 + char boot_sector[2048];5.38 + uint32_t length = sizeof(boot_sector);5.39 + if( disc->read_sectors( disc, disc->track[boot_track].lba, 1, GDROM_MODE1,5.40 + boot_sector, &length ) == PKT_ERR_OK ) {5.41 + bootstrap_dump(boot_sector, FALSE);5.42 + is_bootable = TRUE;5.43 + }5.44 + }5.45 }5.46 + if( !is_bootable )5.47 + WARN( "Disc does not appear to be bootable" );5.48 }5.50 gdrom_error_t gdrom_get_toc( char *buf )5.51 @@ -192,7 +212,7 @@5.52 gdrom_unmount_disc();5.53 gdrom_disc = disc;5.54 idereg.disc = disc->disc_type | IDE_DISC_READY;5.55 - gdrom_dump_disc( disc );5.56 + gdrom_dump_disc_info( disc );5.57 }5.59 gdrom_disc_t gdrom_mount_image( const gchar *filename )
6.1 --- a/src/gui/callbacks.c Sun Jun 18 12:01:53 2006 +00006.2 +++ b/src/gui/callbacks.c Mon Jun 19 11:00:42 2006 +00006.3 @@ -1,5 +1,5 @@6.4 /**6.5 - * $Id: callbacks.c,v 1.14 2006-04-30 01:51:29 nkeynes Exp $6.6 + * $Id: callbacks.c,v 1.15 2006-06-19 11:00:42 nkeynes Exp $6.7 *6.8 * All GTK callbacks go here (stubs are autogenerated by Glade)6.9 *6.10 @@ -45,7 +45,8 @@6.11 on_open1_activate (GtkMenuItem *menuitem,6.12 gpointer user_data)6.13 {6.14 - open_file_dialog( "Open...", file_load_magic, NULL, NULL );6.15 + const gchar *dir = dreamcast_get_config_value(CONFIG_DEFAULT_PATH);6.16 + open_file_dialog( "Open...", file_load_magic, NULL, NULL, dir );6.17 }6.20 @@ -94,7 +95,8 @@6.21 on_load_btn_clicked (GtkButton *button,6.22 gpointer user_data)6.23 {6.24 - open_file_dialog( "Open...", gdrom_mount_image, NULL, NULL );6.25 + const gchar *dir = dreamcast_get_config_value(CONFIG_DEFAULT_PATH);6.26 + open_file_dialog( "Open...", gdrom_mount_image, NULL, NULL, dir );6.27 }6.30 @@ -320,7 +322,8 @@6.31 on_loadstate_button_clicked (GtkToolButton *toolbutton,6.32 gpointer user_data)6.33 {6.34 - open_file_dialog( "Load state...", dreamcast_load_state, "*.dst", "DreamOn Save State (*.dst)" );6.35 + const gchar *dir = dreamcast_get_config_value(CONFIG_SAVE_PATH);6.36 + open_file_dialog( "Load state...", dreamcast_load_state, "*.dst", "DreamOn Save State (*.dst)", dir );6.37 }6.40 @@ -328,6 +331,7 @@6.41 on_savestate_button_clicked (GtkToolButton *toolbutton,6.42 gpointer user_data)6.43 {6.44 - save_file_dialog( "Save state...", dreamcast_save_state, "*.dst", "DreamOn Save State (*.dst)" );6.45 + const gchar *dir = dreamcast_get_config_value(CONFIG_SAVE_PATH);6.46 + save_file_dialog( "Save state...", dreamcast_save_state, "*.dst", "DreamOn Save State (*.dst)", dir );6.47 }
7.1 --- a/src/gui/gui.c Sun Jun 18 12:01:53 2006 +00007.2 +++ b/src/gui/gui.c Mon Jun 19 11:00:42 2006 +00007.3 @@ -1,5 +1,5 @@7.4 /**7.5 - * $Id: gui.c,v 1.11 2006-03-15 13:17:23 nkeynes Exp $7.6 + * $Id: gui.c,v 1.12 2006-06-19 11:00:42 nkeynes Exp $7.7 *7.8 * Top-level GUI (GTK2) module.7.9 *7.10 @@ -166,10 +166,10 @@7.11 }7.12 }7.14 -void open_file_dialog( char *title, file_callback_t action, char *pattern, char *patname )7.15 +void open_file_dialog( char *title, file_callback_t action, char *pattern, char *patname,7.16 + gchar const *initial_dir )7.17 {7.18 GtkWidget *file;7.19 -7.20 file = gtk_file_chooser_dialog_new( title, NULL,7.21 GTK_FILE_CHOOSER_ACTION_OPEN,7.22 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,7.23 @@ -179,13 +179,14 @@7.24 g_signal_connect( GTK_OBJECT(file), "response",7.25 GTK_SIGNAL_FUNC(open_file_callback), file );7.26 gtk_object_set_data( GTK_OBJECT(file), "file_action", action );7.27 + gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(file), initial_dir );7.28 gtk_widget_show( file );7.29 }7.31 -void save_file_dialog( char *title, file_callback_t action, char *pattern, char *patname )7.32 +void save_file_dialog( char *title, file_callback_t action, char *pattern, char *patname,7.33 + gchar const *initial_dir )7.34 {7.35 GtkWidget *file;7.36 -7.37 file = gtk_file_chooser_dialog_new( title, NULL,7.38 GTK_FILE_CHOOSER_ACTION_SAVE,7.39 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,7.40 @@ -195,6 +196,7 @@7.41 g_signal_connect( GTK_OBJECT(file), "response",7.42 GTK_SIGNAL_FUNC(open_file_callback), file );7.43 gtk_object_set_data( GTK_OBJECT(file), "file_action", action );7.44 + gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(file), initial_dir );7.45 gtk_widget_show( file );7.46 }
8.1 --- a/src/gui/gui.h Sun Jun 18 12:01:53 2006 +00008.2 +++ b/src/gui/gui.h Mon Jun 19 11:00:42 2006 +00008.3 @@ -1,5 +1,5 @@8.4 /**8.5 - * $Id: gui.h,v 1.14 2005-12-27 08:41:22 nkeynes Exp $8.6 + * $Id: gui.h,v 1.15 2006-06-19 11:00:42 nkeynes Exp $8.7 *8.8 * General GUI definitions8.9 *8.10 @@ -39,8 +39,8 @@8.11 extern debug_info_t main_debug;8.13 typedef int (*file_callback_t)( const gchar *filename );8.14 -void open_file_dialog( char *title, file_callback_t file_handler, char *pattern, char *patname );8.15 -void save_file_dialog( char *title, file_callback_t file_handler, char *pattern, char *patname );8.16 +void open_file_dialog( char *title, file_callback_t file_handler, char *pattern, char *patname, const gchar *initial_dir );8.17 +void save_file_dialog( char *title, file_callback_t file_handler, char *pattern, char *patname, const gchar *initial_dir );8.19 void update_mmr_win( void );8.20 void init_mmr_win( void );
.