mirror of
https://github.com/holub/mame
synced 2025-05-29 17:13:05 +03:00
actually allow avalon13 gdrom to be processed.
filename inside gdrom isn't 8.3, so it wasn't being found, or decrypted....
This commit is contained in:
parent
ae256a7fec
commit
e45b415aa3
@ -320,6 +320,8 @@ WRITE64_DEVICE_HANDLER( naomibd_w )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
#define FILENAME_LENGTH 16
|
||||||
|
|
||||||
static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
||||||
{
|
{
|
||||||
UINT32 result;
|
UINT32 result;
|
||||||
@ -328,10 +330,10 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
UINT8 *ptr;
|
UINT8 *ptr;
|
||||||
UINT32 start,size,sectors,dir;
|
UINT32 start,size,sectors,dir;
|
||||||
int pos,len,a;
|
int pos,len,a;
|
||||||
char name[15];
|
char name[128];
|
||||||
UINT64 key;
|
UINT64 key;
|
||||||
|
|
||||||
memset(name, 15, 0);
|
memset(name, '\0',128);
|
||||||
memcpy(name, v->picdata+33, 7);
|
memcpy(name, v->picdata+33, 7);
|
||||||
memcpy(name+7, v->picdata+25, 7);
|
memcpy(name+7, v->picdata+25, 7);
|
||||||
gdromfile = cdrom_open(v->gdromchd);
|
gdromfile = cdrom_open(v->gdromchd);
|
||||||
@ -355,17 +357,18 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
// find data of file
|
// find data of file
|
||||||
start = 0;
|
start = 0;
|
||||||
size = 0;
|
size = 0;
|
||||||
|
printf("Looking for file %s\n", name);
|
||||||
for (pos = 0;pos < 2048;pos += buffer[pos])
|
for (pos = 0;pos < 2048;pos += buffer[pos])
|
||||||
{
|
{
|
||||||
a=0;
|
a=0;
|
||||||
if (!(buffer[pos+25] & 2))
|
if (!(buffer[pos+25] & 2))
|
||||||
{
|
{
|
||||||
len=buffer[pos+32];
|
len=buffer[pos+32];
|
||||||
for (a=0;a < 15;a++)
|
for (a=0;a < FILENAME_LENGTH;a++)
|
||||||
{
|
{
|
||||||
if ((buffer[pos+33+a] == ';') && (name[a] == 0))
|
if ((buffer[pos+33+a] == ';') && (name[a] == 0))
|
||||||
{
|
{
|
||||||
a=16;
|
a=FILENAME_LENGTH+1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (buffer[pos+33+a] != name[a])
|
if (buffer[pos+33+a] != name[a])
|
||||||
@ -373,13 +376,13 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
if (a == len)
|
if (a == len)
|
||||||
{
|
{
|
||||||
if (name[a] == 0)
|
if (name[a] == 0)
|
||||||
a = 16;
|
a = FILENAME_LENGTH+1;
|
||||||
else
|
else
|
||||||
a = 15;
|
a = FILENAME_LENGTH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (a == 16)
|
if (a == FILENAME_LENGTH+1)
|
||||||
{
|
{
|
||||||
// start sector and size of file
|
// start sector and size of file
|
||||||
start=((buffer[pos+2] << 0) |
|
start=((buffer[pos+2] << 0) |
|
||||||
@ -395,28 +398,34 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
if (buffer[pos] == 0)
|
if (buffer[pos] == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((start != 0) && (size == 0x100))
|
if ((start != 0) && (size == 0x100))
|
||||||
{
|
{
|
||||||
// read file
|
// read file
|
||||||
result = cdrom_read_data(gdromfile, start, buffer, CD_TRACK_MODE1);
|
result = cdrom_read_data(gdromfile, start, buffer, CD_TRACK_MODE1);
|
||||||
// get "rom" file name
|
// get "rom" file name
|
||||||
memcpy(name, buffer+0xc0, 14);
|
memset(name,'\0', 128);
|
||||||
|
memcpy(name, buffer+0xc0, FILENAME_LENGTH-1);
|
||||||
|
|
||||||
|
|
||||||
// directory
|
// directory
|
||||||
result = cdrom_read_data(gdromfile, dir, buffer, CD_TRACK_MODE1);
|
result = cdrom_read_data(gdromfile, dir, buffer, CD_TRACK_MODE1);
|
||||||
// find data of "rom" file
|
// find data of "rom" file
|
||||||
start = 0;
|
start = 0;
|
||||||
size = 0;
|
size = 0;
|
||||||
|
|
||||||
|
printf("Looking for file %s\n", name);
|
||||||
for (pos = 0;pos < 2048;pos += buffer[pos])
|
for (pos = 0;pos < 2048;pos += buffer[pos])
|
||||||
{
|
{
|
||||||
a = 0;
|
a = 0;
|
||||||
if (!(buffer[pos+25] & 2))
|
if (!(buffer[pos+25] & 2))
|
||||||
{
|
{
|
||||||
len = buffer[pos+32];
|
len = buffer[pos+32];
|
||||||
for (a=0;a < 15;a++)
|
for (a=0;a < FILENAME_LENGTH;a++)
|
||||||
{
|
{
|
||||||
if ((buffer[pos+33+a] == ';') && (name[a] == 0))
|
if ((buffer[pos+33+a] == ';') && (name[a] == 0))
|
||||||
{
|
{
|
||||||
a=16;
|
a=FILENAME_LENGTH+1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (buffer[pos+33+a] != name[a])
|
if (buffer[pos+33+a] != name[a])
|
||||||
@ -424,13 +433,13 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
if (a == len)
|
if (a == len)
|
||||||
{
|
{
|
||||||
if (name[a] == 0)
|
if (name[a] == 0)
|
||||||
a = 16;
|
a = (FILENAME_LENGTH+1);
|
||||||
else
|
else
|
||||||
a = 15;
|
a = FILENAME_LENGTH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (a == 16)
|
if (a == (FILENAME_LENGTH+1))
|
||||||
{
|
{
|
||||||
// start sector and size of file
|
// start sector and size of file
|
||||||
start=((buffer[pos+2] << 0) |
|
start=((buffer[pos+2] << 0) |
|
||||||
|
Loading…
Reference in New Issue
Block a user