filename | src/bios.c |
changeset | 736:a02d1475ccfd |
prev | 586:2a3ba82cf243 |
next | 1065:bc1cc0c54917 |
author | nkeynes |
date | Wed Nov 05 10:05:08 2008 +0000 (15 years ago) |
permissions | -rw-r--r-- |
last change | Fix (extremely boneheaded) failure to convert pc to physical address before storing in the translation cache (in other words, the translation cache was effectively disabled for MMU code). MMU code is now about 3 times faster... |
file | annotate | diff | log | raw |
1.1 --- a/src/bios.c Tue Jan 15 20:50:23 2008 +00001.2 +++ b/src/bios.c Wed Nov 05 10:05:08 2008 +00001.3 @@ -71,13 +71,13 @@1.4 DEBUG( "BIOS GD command %d", cmd->cmd_code );1.5 switch( cmd->cmd_code ) {1.6 case GD_CMD_INIT:1.7 - /* *shrug* */1.8 - cmd->status = GD_CMD_STATUS_DONE;1.9 - break;1.10 + /* *shrug* */1.11 + cmd->status = GD_CMD_STATUS_DONE;1.12 + break;1.13 default:1.14 - cmd->status = GD_CMD_STATUS_ERROR;1.15 - cmd->result[0] = GD_ERROR_SYSTEM;1.16 - break;1.17 + cmd->status = GD_CMD_STATUS_ERROR;1.18 + cmd->result[0] = GD_ERROR_SYSTEM;1.19 + break;1.20 }1.21 }1.23 @@ -90,12 +90,12 @@1.24 {1.25 int i;1.26 for( i=0; i<COMMAND_QUEUE_LENGTH; i++ ) {1.27 - if( gdrom_cmd_queue[i].status != GD_CMD_STATUS_ACTIVE ) {1.28 - gdrom_cmd_queue[i].status = GD_CMD_STATUS_ACTIVE;1.29 - gdrom_cmd_queue[i].cmd_code = cmd;1.30 - gdrom_cmd_queue[i].data = ptr;1.31 - return i;1.32 - }1.33 + if( gdrom_cmd_queue[i].status != GD_CMD_STATUS_ACTIVE ) {1.34 + gdrom_cmd_queue[i].status = GD_CMD_STATUS_ACTIVE;1.35 + gdrom_cmd_queue[i].cmd_code = cmd;1.36 + gdrom_cmd_queue[i].data = ptr;1.37 + return i;1.38 + }1.39 }1.40 return -1;1.41 }1.42 @@ -104,17 +104,17 @@1.43 {1.44 int i;1.45 for( i=0; i<COMMAND_QUEUE_LENGTH; i++ ) {1.46 - if( gdrom_cmd_queue[i].status == GD_CMD_STATUS_ACTIVE ) {1.47 - bios_gdrom_run_command( &gdrom_cmd_queue[i] );1.48 - }1.49 + if( gdrom_cmd_queue[i].status == GD_CMD_STATUS_ACTIVE ) {1.50 + bios_gdrom_run_command( &gdrom_cmd_queue[i] );1.51 + }1.52 }1.53 }1.55 gdrom_command_t bios_gdrom_get_command( uint32_t id )1.56 {1.57 if( id >= COMMAND_QUEUE_LENGTH ||1.58 - gdrom_cmd_queue[id].status == GD_CMD_STATUS_NONE )1.59 - return NULL;1.60 + gdrom_cmd_queue[id].status == GD_CMD_STATUS_NONE )1.61 + return NULL;1.62 return &gdrom_cmd_queue[id];1.63 }1.65 @@ -128,78 +128,78 @@1.67 switch( syscallid ) {1.68 case 0xB0: /* sysinfo */1.69 - break;1.70 + break;1.71 case 0xB4: /* Font */1.72 - break;1.73 + break;1.74 case 0xB8: /* Flash */1.75 - break;1.76 + break;1.77 case 0xBC: /* Misc/GD-Rom */1.78 - switch( sh4r.r[6] ) {1.79 - case 0: /* GD-Rom */1.80 - switch( sh4r.r[7] ) {1.81 - case 0: /* Send command */1.82 - if( sh4r.r[5] == 0 )1.83 - sh4r.r[0] = bios_gdrom_enqueue( sh4r.r[4], NULL );1.84 - else1.85 - sh4r.r[0] = bios_gdrom_enqueue( sh4r.r[4], mem_get_region(sh4r.r[5]) );1.86 - break;1.87 - case 1: /* Check command */1.88 - cmd = bios_gdrom_get_command( sh4r.r[4] );1.89 - if( cmd == NULL ) {1.90 - sh4r.r[0] = GD_CMD_STATUS_NONE;1.91 - } else {1.92 - sh4r.r[0] = cmd->status;1.93 - if( cmd->status == GD_CMD_STATUS_ERROR &&1.94 - sh4r.r[5] != 0 ) {1.95 - mem_copy_to_sh4( sh4r.r[5], (sh4ptr_t)&cmd->result, sizeof(cmd->result) );1.96 - }1.97 - }1.98 - break;1.99 - case 2: /* Mainloop */1.100 - bios_gdrom_run_queue();1.101 - break;1.102 - case 3: /* Init */1.103 - bios_gdrom_init();1.104 - break;1.105 - case 4: /* Drive status */1.106 - if( sh4r.r[4] != 0 ) {1.107 - mem_copy_to_sh4( sh4r.r[4], (sh4ptr_t)&bios_gdrom_status,1.108 - sizeof(bios_gdrom_status) );1.109 - }1.110 - sh4r.r[0] = 0;1.111 - break;1.112 - case 8: /* Abort command */1.113 - cmd = bios_gdrom_get_command( sh4r.r[4] );1.114 - if( cmd == NULL || cmd->status != GD_CMD_STATUS_ACTIVE ) {1.115 - sh4r.r[0] = -1;1.116 - } else {1.117 - cmd->status = GD_CMD_STATUS_ABORT;1.118 - sh4r.r[0] = 0;1.119 - }1.120 - break;1.121 - case 9: /* Reset */1.122 - break;1.123 - case 10: /* Set mode */1.124 - sh4r.r[0] = 0;1.125 - break;1.126 - }1.127 - break;1.128 - case -1: /* Misc */1.129 - break;1.130 - default: /* ??? */1.131 - break;1.132 - }1.133 - break;1.134 - case 0xE0: /* Menu */1.135 - switch( sh4r.r[7] ) {1.136 - case 0:1.137 - WARN( "Entering main program" );1.138 - break;1.139 - case 1:1.140 - WARN( "Program aborted to DC menu");1.141 - dreamcast_stop();1.142 - break;1.143 - }1.144 + switch( sh4r.r[6] ) {1.145 + case 0: /* GD-Rom */1.146 + switch( sh4r.r[7] ) {1.147 + case 0: /* Send command */1.148 + if( sh4r.r[5] == 0 )1.149 + sh4r.r[0] = bios_gdrom_enqueue( sh4r.r[4], NULL );1.150 + else1.151 + sh4r.r[0] = bios_gdrom_enqueue( sh4r.r[4], mem_get_region(sh4r.r[5]) );1.152 + break;1.153 + case 1: /* Check command */1.154 + cmd = bios_gdrom_get_command( sh4r.r[4] );1.155 + if( cmd == NULL ) {1.156 + sh4r.r[0] = GD_CMD_STATUS_NONE;1.157 + } else {1.158 + sh4r.r[0] = cmd->status;1.159 + if( cmd->status == GD_CMD_STATUS_ERROR &&1.160 + sh4r.r[5] != 0 ) {1.161 + mem_copy_to_sh4( sh4r.r[5], (sh4ptr_t)&cmd->result, sizeof(cmd->result) );1.162 + }1.163 + }1.164 + break;1.165 + case 2: /* Mainloop */1.166 + bios_gdrom_run_queue();1.167 + break;1.168 + case 3: /* Init */1.169 + bios_gdrom_init();1.170 + break;1.171 + case 4: /* Drive status */1.172 + if( sh4r.r[4] != 0 ) {1.173 + mem_copy_to_sh4( sh4r.r[4], (sh4ptr_t)&bios_gdrom_status,1.174 + sizeof(bios_gdrom_status) );1.175 + }1.176 + sh4r.r[0] = 0;1.177 + break;1.178 + case 8: /* Abort command */1.179 + cmd = bios_gdrom_get_command( sh4r.r[4] );1.180 + if( cmd == NULL || cmd->status != GD_CMD_STATUS_ACTIVE ) {1.181 + sh4r.r[0] = -1;1.182 + } else {1.183 + cmd->status = GD_CMD_STATUS_ABORT;1.184 + sh4r.r[0] = 0;1.185 + }1.186 + break;1.187 + case 9: /* Reset */1.188 + break;1.189 + case 10: /* Set mode */1.190 + sh4r.r[0] = 0;1.191 + break;1.192 + }1.193 + break;1.194 + case -1: /* Misc */1.195 + break;1.196 + default: /* ??? */1.197 + break;1.198 + }1.199 + break;1.200 + case 0xE0: /* Menu */1.201 + switch( sh4r.r[7] ) {1.202 + case 0:1.203 + WARN( "Entering main program" );1.204 + break;1.205 + case 1:1.206 + WARN( "Program aborted to DC menu");1.207 + dreamcast_stop();1.208 + break;1.209 + }1.210 }1.211 }
.