Skip to content

Commit 1e777d8

Browse files
JoeMattclaude
andcommitted
Fix CD boot sequencing: open disc image before JaguarInit()
CDROMInit() (called by JaguarInit()) checks CDIntfIsImageLoaded() to set haveCDGoodness. The disc image must be opened before that check runs, otherwise the CD drive is never activated. Co-Authored-By: Claude Opus 4.6 <[email protected]>
1 parent 379ee16 commit 1e777d8

1 file changed

Lines changed: 15 additions & 13 deletions

File tree

libretro.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,21 +1045,13 @@ bool retro_load_game(const struct retro_game_info *info)
10451045
vjs.useCDBIOS = true;
10461046
}
10471047

1048-
JaguarInit(); // set up hardware
1049-
1048+
/* For CD mode, open the disc image BEFORE JaguarInit() so that
1049+
* CDROMInit() -> CDIntfInit() -> CDIntfIsImageLoaded() returns true
1050+
* and haveCDGoodness is set correctly. */
10501051
if (jaguar_cd_mode)
10511052
{
1052-
// Load CD BIOS at $E00000 (256 KB = 0x40000 bytes)
1053-
// The CD BIOS is larger than the standard 128 KB boot ROM
1054-
uint8_t *cdBios = (vjs.cdBiosType == CDBIOS_DEV)
1055-
? jaguarDevCDBootROM : jaguarCDBootROM;
1056-
memcpy(jagMemSpace + 0xE00000, cdBios, 0x40000);
1057-
1058-
// Open the disc image
10591053
if (!CDIntfOpenImage(cd_image_path))
10601054
{
1061-
// Failed to open disc image
1062-
JaguarDone();
10631055
if (videoBuffer)
10641056
{
10651057
free(videoBuffer);
@@ -1073,12 +1065,22 @@ bool retro_load_game(const struct retro_game_info *info)
10731065
return false;
10741066
}
10751067
}
1068+
1069+
JaguarInit(); // set up hardware
1070+
1071+
if (jaguar_cd_mode)
1072+
{
1073+
/* Load CD BIOS at $E00000 (256 KB = 0x40000 bytes) */
1074+
uint8_t *cdBios = (vjs.cdBiosType == CDBIOS_DEV)
1075+
? jaguarDevCDBootROM : jaguarCDBootROM;
1076+
memcpy(jagMemSpace + 0xE00000, cdBios, 0x40000);
1077+
}
10761078
else
10771079
{
1078-
// Standard cartridge mode
1080+
/* Standard cartridge mode */
10791081
memcpy(jagMemSpace + 0xE00000,
10801082
((vjs.biosType == BT_K_SERIES) ? jaguarBootROM : jaguarBootROM2),
1081-
0x20000); // Use the stock BIOS (128 KB)
1083+
0x20000);
10821084
}
10831085

10841086
JaguarSetScreenPitch(videoWidth);

0 commit comments

Comments
 (0)