mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2025-04-27 15:51:25 +02:00
[Wii/Gamecube]
.fixed "Cartridge Hot-Swap" option being locked .fixed L/R buttons being inverted in cheat menu .fixed corrupted screen capture when saving Mega CD state files .fixed RAM cartridge file saving .added DSP halt/unhalt call when exiting/entering main menu
This commit is contained in:
parent
70e96409c3
commit
e9d5f20992
@ -129,7 +129,24 @@ void slot_autoload(int slot, int device)
|
|||||||
fp = fopen(CART_BRAM, "rb");
|
fp = fopen(CART_BRAM, "rb");
|
||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
fread(scd.cartridge.area, scd.cartridge.mask + 1, 1, fp);
|
int filesize = scd.cartridge.mask + 1;
|
||||||
|
int done = 0;
|
||||||
|
|
||||||
|
/* Read into buffer (2k blocks) */
|
||||||
|
while (filesize > CHUNKSIZE)
|
||||||
|
{
|
||||||
|
fread(scd.cartridge.area + done, CHUNKSIZE, 1, fp);
|
||||||
|
done += CHUNKSIZE;
|
||||||
|
filesize -= CHUNKSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read remaining bytes */
|
||||||
|
if (filesize)
|
||||||
|
{
|
||||||
|
fread(scd.cartridge.area + done, filesize, 1, fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* close file */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
/* update CRC */
|
/* update CRC */
|
||||||
@ -194,7 +211,24 @@ void slot_autosave(int slot, int device)
|
|||||||
FILE *fp = fopen(CART_BRAM, "wb");
|
FILE *fp = fopen(CART_BRAM, "wb");
|
||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
fwrite(scd.cartridge.area, scd.cartridge.mask + 1, 1, fp);
|
int filesize = scd.cartridge.mask + 1;
|
||||||
|
int done = 0;
|
||||||
|
|
||||||
|
/* Write to file (2k blocks) */
|
||||||
|
while (filesize > CHUNKSIZE)
|
||||||
|
{
|
||||||
|
fwrite(scd.cartridge.area + done, CHUNKSIZE, 1, fp);
|
||||||
|
done += CHUNKSIZE;
|
||||||
|
filesize -= CHUNKSIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write remaining bytes */
|
||||||
|
if (filesize)
|
||||||
|
{
|
||||||
|
fwrite(scd.cartridge.area + done, filesize, 1, fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Close file */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
/* update CRC */
|
/* update CRC */
|
||||||
@ -622,6 +656,9 @@ int slot_save(int slot, int device)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
|
||||||
|
/* Close message box */
|
||||||
|
GUI_MsgBoxClose();
|
||||||
|
|
||||||
/* Save state screenshot */
|
/* Save state screenshot */
|
||||||
if (slot > 0)
|
if (slot > 0)
|
||||||
{
|
{
|
||||||
@ -768,8 +805,10 @@ int slot_save(int slot, int device)
|
|||||||
CARD_Unmount(device);
|
CARD_Unmount(device);
|
||||||
free(out);
|
free(out);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
|
||||||
|
|
||||||
GUI_MsgBoxClose();
|
/* Close message box */
|
||||||
|
GUI_MsgBoxClose();
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -52,8 +52,8 @@
|
|||||||
extern const u8 Key_Minus_wii_png[];
|
extern const u8 Key_Minus_wii_png[];
|
||||||
extern const u8 Key_Plus_wii_png[];
|
extern const u8 Key_Plus_wii_png[];
|
||||||
#else
|
#else
|
||||||
extern const u8 Key_L_gcn_png[];
|
|
||||||
extern const u8 Key_R_gcn_png[];
|
extern const u8 Key_R_gcn_png[];
|
||||||
|
extern const u8 Key_L_gcn_png[];
|
||||||
#endif
|
#endif
|
||||||
extern const u8 Key_DPAD_png[];
|
extern const u8 Key_DPAD_png[];
|
||||||
|
|
||||||
@ -784,19 +784,19 @@ static void cheatmenu_cb(void)
|
|||||||
gui_image key_enable;
|
gui_image key_enable;
|
||||||
gui_image key_delete;
|
gui_image key_delete;
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
key_delete.texture = gxTextureOpenPNG(Key_Minus_wii_png,0);
|
|
||||||
key_enable.texture = gxTextureOpenPNG(Key_Plus_wii_png,0);
|
key_enable.texture = gxTextureOpenPNG(Key_Plus_wii_png,0);
|
||||||
gxDrawTexture(key_delete.texture,152,424,24,24,255);
|
key_delete.texture = gxTextureOpenPNG(Key_Minus_wii_png,0);
|
||||||
gxDrawTexture(key_enable.texture,372,424,24,24,255);
|
gxDrawTexture(key_enable.texture,152,424,24,24,255);
|
||||||
FONT_write("Delete\nCheat",16,184,436,640,(GXColor)WHITE);
|
gxDrawTexture(key_delete.texture,372,424,24,24,255);
|
||||||
FONT_write(cheatlist[offset + selection].enable ? "Disable\nCheat":"Enable\nCheat",16,404,436,640,(GXColor)WHITE);
|
FONT_write(cheatlist[offset + selection].enable ? "Disable\nCheat":"Enable\nCheat",16,184,436,640,(GXColor)WHITE);
|
||||||
|
FONT_write("Delete\nCheat",16,404,436,640,(GXColor)WHITE);
|
||||||
#else
|
#else
|
||||||
key_delete.texture = gxTextureOpenPNG(Key_L_gcn_png,0);
|
key_enable.texture = gxTextureOpenPNG(Key_L_gcn_png,0);
|
||||||
key_enable.texture = gxTextureOpenPNG(Key_R_gcn_png,0);
|
key_delete.texture = gxTextureOpenPNG(Key_R_gcn_png,0);
|
||||||
gxDrawTexture(key_delete.texture,136,426,44,20,255);
|
gxDrawTexture(key_enable.texture,136,426,44,20,255);
|
||||||
gxDrawTexture(key_enable.texture,368,426,44,20,255);
|
gxDrawTexture(key_delete.texture,368,426,44,20,255);
|
||||||
FONT_write("Delete\nCheat",16,188,436,640,(GXColor)WHITE);
|
FONT_write(cheatlist[offset + selection].enable ? "Disable\nCheat":"Enable\nCheat",16,188,436,640,(GXColor)WHITE);
|
||||||
FONT_write(cheatlist[offset + selection].enable ? "Disable\nCheat":"Enable\nCheat",16,420,436,640,(GXColor)WHITE);
|
FONT_write("Delete\nCheat",16,420,436,640,(GXColor)WHITE);
|
||||||
#endif
|
#endif
|
||||||
gxTextureClose(&key_enable.texture);
|
gxTextureClose(&key_enable.texture);
|
||||||
gxTextureClose(&key_delete.texture);
|
gxTextureClose(&key_delete.texture);
|
||||||
@ -1191,7 +1191,7 @@ void CheatMenu(void)
|
|||||||
if ((offset + selection) < maxcheats)
|
if ((offset + selection) < maxcheats)
|
||||||
{
|
{
|
||||||
/* Special inputs */
|
/* Special inputs */
|
||||||
if (m_input.keys & PAD_TRIGGER_L)
|
if (m_input.keys & PAD_TRIGGER_R)
|
||||||
{
|
{
|
||||||
/* sort cheat list */
|
/* sort cheat list */
|
||||||
for (i = offset + selection + 1; i < maxcheats; i++)
|
for (i = offset + selection + 1; i < maxcheats; i++)
|
||||||
@ -1223,7 +1223,7 @@ void CheatMenu(void)
|
|||||||
/* reset scrolling */
|
/* reset scrolling */
|
||||||
string_offset = 0;
|
string_offset = 0;
|
||||||
}
|
}
|
||||||
else if (m_input.keys & PAD_TRIGGER_R)
|
else if (m_input.keys & PAD_TRIGGER_L)
|
||||||
{
|
{
|
||||||
/* cheat ON/OFF */
|
/* cheat ON/OFF */
|
||||||
cheatlist[offset + selection].enable ^= 1;
|
cheatlist[offset + selection].enable ^= 1;
|
||||||
|
@ -1145,7 +1145,7 @@ static void systemmenu ()
|
|||||||
else
|
else
|
||||||
sprintf (items[7].text, "Lock-On: OFF");
|
sprintf (items[7].text, "Lock-On: OFF");
|
||||||
|
|
||||||
sprintf (items[8].text, "Cartridge Swap: %s", config.hot_swap ? "ON":"OFF");
|
sprintf (items[8].text, "Cartridge Swap: %s", (config.hot_swap & 1) ? "ON":"OFF");
|
||||||
|
|
||||||
if (svp)
|
if (svp)
|
||||||
{
|
{
|
||||||
@ -1389,7 +1389,7 @@ static void systemmenu ()
|
|||||||
case 8: /*** Cartridge Hot Swap ***/
|
case 8: /*** Cartridge Hot Swap ***/
|
||||||
{
|
{
|
||||||
config.hot_swap ^= 1;
|
config.hot_swap ^= 1;
|
||||||
sprintf (items[8].text, "Cartridge Swap: %s", config.hot_swap ? "ON":"OFF");
|
sprintf (items[8].text, "Cartridge Swap: %s", (config.hot_swap & 1) ? "ON":"OFF");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1421,6 +1421,12 @@ static void systemmenu ()
|
|||||||
{
|
{
|
||||||
system_init();
|
system_init();
|
||||||
system_reset();
|
system_reset();
|
||||||
|
|
||||||
|
/* restore SRAM */
|
||||||
|
if (config.s_auto & 1)
|
||||||
|
{
|
||||||
|
slot_autoload(0,config.s_device);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -182,6 +182,7 @@ void gx_audio_Start(void)
|
|||||||
ASND_End();
|
ASND_End();
|
||||||
AUDIO_StopDMA();
|
AUDIO_StopDMA();
|
||||||
AUDIO_RegisterDMACallback(NULL);
|
AUDIO_RegisterDMACallback(NULL);
|
||||||
|
DSP_Halt();
|
||||||
|
|
||||||
/* when VSYNC is forced OFF or AUTO with TV mode not matching emulated video mode, emulation is synchronized with Audio Hardware */
|
/* when VSYNC is forced OFF or AUTO with TV mode not matching emulated video mode, emulation is synchronized with Audio Hardware */
|
||||||
if (!config.vsync || (config.tv_mode == !vdp_pal))
|
if (!config.vsync || (config.tv_mode == !vdp_pal))
|
||||||
@ -206,6 +207,7 @@ void gx_audio_Start(void)
|
|||||||
void gx_audio_Stop(void)
|
void gx_audio_Stop(void)
|
||||||
{
|
{
|
||||||
/* restart menu audio processing */
|
/* restart menu audio processing */
|
||||||
|
DSP_Unhalt();
|
||||||
ASND_Init();
|
ASND_Init();
|
||||||
ASND_Pause(0);
|
ASND_Pause(0);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user