<html>
<body>
<div id="body" style="background-color:#ffffff;" >
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head" style="border-bottom-width:1px;border-bottom-style:solid;" ><td class="headtd" style="padding:0;padding-top:.2em;" colspan="4">Commit in <b><tt>lxdream/src</tt></b></td></tr>
<tr><td><tt><a href="#file1">bios.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+80</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-30</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">50e702af9373 -> 78e762cec843</td></tr>
<tr class="alt" style=";" ><td><tt>gdrom/<a href="#file2">gdrom.c</a></tt></td><td></td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-5</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">50e702af9373 -> 78e762cec843</td></tr>
<tr><td><tt> /<a href="#file3">gdrom.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+5</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">50e702af9373 -> 78e762cec843</td></tr>
<tr><td></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+85</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-35</td><td></td></tr>
</table>
<small id="info" style="color: #888888;" >3 modified files</small><br />
<pre class="comment" style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd;" >
Implement BIOS read cd + read toc2 functions
</pre>
<hr /><a name="file1" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>bios.c</b></big> <small id="info" style="color: #888888;" >50e702af9373 -> 78e762cec843</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/bios.c
+++ lxdream/src/bios.c
@@ -56,24 +56,28 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #define GD_ERROR_DISC_CHANGE 6
#define GD_ERROR_SYSTEM 1
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+struct gdrom_toc2_params {
+ uint32_t session;
+ sh4addr_t buffer;
+};
+
+struct gdrom_readcd_params {
+ cdrom_lba_t lba;
+ cdrom_count_t count;
+ sh4addr_t buffer;
+ uint32_t unknown;
+};
+
+struct gdrom_playcd_params {
+ cdrom_lba_t start;
+ cdrom_lba_t end;
+ uint32_t repeat;
+};
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > typedef union gdrom_cmd_params {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- struct gdrom_toc2_params {
- uint32_t session;
- sh4addr_t buffer;
- } toc2;
-
- struct gdrom_readcd_params {
- cdrom_lba_t sector;
- cdrom_count_t count;
- sh4addr_t buffer;
- uint32_t unknown;
- } readcd;
-
- struct gdrom_playcd_params {
- cdrom_lba_t start;
- cdrom_lba_t end;
- uint32_t repeat;
- } playcd;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ struct gdrom_toc2_params toc2;
+ struct gdrom_readcd_params readcd;
+ struct gdrom_playcd_params playcd;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > } *gdrom_cmd_params_t;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -82,7 +86,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > typedef struct gdrom_queue_entry {
int status;
uint32_t cmd_code;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- sh4ptr_t data;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ union gdrom_cmd_params params;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > uint32_t result[4];
} *gdrom_queue_entry_t;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -93,34 +97,83 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > uint32_t disk_type;
} bios_gdrom_status;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void bios_gdrom_init( void )
+{
+ memset( &gdrom_cmd_queue, 0, sizeof(gdrom_cmd_queue) );
+}
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void bios_gdrom_run_command( gdrom_queue_entry_t cmd )
{
DEBUG( "BIOS GD command %d", cmd->cmd_code );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ cdrom_error_t status = CDROM_ERROR_OK;
+ sh4ptr_t ptr;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > switch( cmd->cmd_code ) {
case GD_CMD_INIT:
/* *shrug* */
cmd->status = GD_CMD_STATUS_DONE;
break;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ case GD_CMD_GETTOC2:
+ ptr = mem_get_region( cmd->params.toc2.buffer );
+ status = gdrom_read_toc( ptr );
+ if( status == CDROM_ERROR_OK ) {
+ /* Convert data to little-endian */
+ struct gdrom_toc *toc = (struct gdrom_toc *)ptr;
+ for( unsigned i=0; i<99; i++ ) {
+ toc->track[i] = ntohl(toc->track[i]);
+ }
+ toc->first = ntohl(toc->first);
+ toc->last = ntohl(toc->last);
+ toc->leadout = ntohl(toc->leadout);
+ }
+ break;
+ case GD_CMD_PIOREAD:
+ case GD_CMD_DMAREAD:
+ ptr = mem_get_region( cmd->params.readcd.buffer );
+ status = gdrom_read_cd( cmd->params.readcd.lba,
+ cmd->params.readcd.count, 0x28, ptr, NULL );
+ break;
+ default:
+ WARN( "Unknown BIOS GD command %d\n", cmd->cmd_code );
+ cmd->status = GD_CMD_STATUS_ERROR;
+ cmd->result[0] = GD_ERROR_SYSTEM;
+ return;
+ }
+
+ switch( status ) {
+ case CDROM_ERROR_OK:
+ cmd->status = GD_CMD_STATUS_DONE;
+ cmd->result[0] = GD_ERROR_OK;
+ break;
+ case CDROM_ERROR_NODISC:
+ cmd->status = GD_CMD_STATUS_ERROR;
+ cmd->result[0] = GD_ERROR_NO_DISC;
+ break;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > default:
cmd->status = GD_CMD_STATUS_ERROR;
cmd->result[0] = GD_ERROR_SYSTEM;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- break;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
}
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void bios_gdrom_init( void )
-{
- memset( &gdrom_cmd_queue, 0, sizeof(gdrom_cmd_queue) );
-}
-
-uint32_t bios_gdrom_enqueue( uint32_t cmd, sh4ptr_t ptr )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+uint32_t bios_gdrom_enqueue( uint32_t cmd, sh4addr_t data )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
int i;
for( i=0; i<COMMAND_QUEUE_LENGTH; i++ ) {
if( gdrom_cmd_queue[i].status != GD_CMD_STATUS_ACTIVE ) {
gdrom_cmd_queue[i].status = GD_CMD_STATUS_ACTIVE;
gdrom_cmd_queue[i].cmd_code = cmd;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- gdrom_cmd_queue[i].data = ptr;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ switch( cmd ) {
+ case GD_CMD_PIOREAD:
+ case GD_CMD_DMAREAD:
+ mem_copy_from_sh4( (unsigned char *)&gdrom_cmd_queue[i].params.readcd, data, sizeof(struct gdrom_readcd_params) );
+ break;
+ case GD_CMD_GETTOC2:
+ mem_copy_from_sh4( (unsigned char *)&gdrom_cmd_queue[i].params.toc2, data, sizeof(struct gdrom_toc2_params) );
+ break;
+ case GD_CMD_PLAY:
+ case GD_CMD_PLAY2:
+ mem_copy_from_sh4( (unsigned char *)&gdrom_cmd_queue[i].params.playcd, data, sizeof(struct gdrom_playcd_params) );
+ break;
+ }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > return i;
}
}
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -165,10 +218,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > case 0: /* GD-Rom */
switch( sh4r.r[7] ) {
case 0: /* Send command */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- if( sh4r.r[5] == 0 )
- sh4r.r[0] = bios_gdrom_enqueue( sh4r.r[4], NULL );
- else
- sh4r.r[0] = bios_gdrom_enqueue( sh4r.r[4], mem_get_region(sh4r.r[5]) );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ sh4r.r[0] = bios_gdrom_enqueue( sh4r.r[4], sh4r.r[5] );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > break;
case 1: /* Check command */
cmd = bios_gdrom_get_command( sh4r.r[4] );
</pre></div>
<hr /><a name="file2" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/gdrom</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>gdrom.c</b></big> <small id="info" style="color: #888888;" >50e702af9373 -> 78e762cec843</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/gdrom/gdrom.c
+++ lxdream/src/gdrom/gdrom.c
@@ -112,11 +112,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >
cdrom_error_t gdrom_read_toc( unsigned char *buf )
{
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- struct gdrom_toc {
- uint32_t track[99];
- uint32_t first, last, leadout;
- };
-
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > struct gdrom_toc *toc = (struct gdrom_toc *)buf;
int i;
</pre></div>
<hr /><a name="file3" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/gdrom</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>gdrom.h</b></big> <small id="info" style="color: #888888;" >50e702af9373 -> 78e762cec843</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/gdrom/gdrom.h
+++ lxdream/src/gdrom/gdrom.h
@@ -29,6 +29,11 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > extern "C" {
#endif
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+struct gdrom_toc {
+ uint32_t track[99];
+ uint32_t first, last, leadout;
+};
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #define GDROM_TOC_SIZE (102*4) /* Size of GDROM TOC structure */
#define GDROM_SESSION_INFO_SIZE 6 /* Size of GDROM session info structure */
#define GDROM_SHORT_STATUS_SIZE 14 /* Size of GDROM short status structure */
</pre></div>
<center><small>Chaos Theory</small></center>
</div></body></html>