From e39289ae99472913891384786e535d121e301ae1 Mon Sep 17 00:00:00 2001 From: tpu Date: Sat, 18 Mar 2023 22:29:56 +0800 Subject: [PATCH] gamepatch update: wakuwaku7 speedup --- Firm_Saturn/cdblock.c | 27 +++++++++++++++++---------- Firm_Saturn/game_patch.c | 14 ++++++++++++++ Firm_Saturn/main.h | 6 +++++- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/Firm_Saturn/cdblock.c b/Firm_Saturn/cdblock.c index 1a8b1a6..5c43251 100644 --- a/Firm_Saturn/cdblock.c +++ b/Firm_Saturn/cdblock.c @@ -901,6 +901,7 @@ int bios_cd_cmd(void) *(u32*)(0x06000290) = 3; ip_size = bios_loadcd_read();//1912¶ÁÈ¡ipÎļþ *(u32*)(0x06002270) = read_1st; + *(u32*)(0x02000f04) = cdc_read_sector; *(u16*)(0x0600220c) = 9; retv = my_bios_loadcd_boot(ip_size, 0x18be);//Ìøµ½18be @@ -960,31 +961,37 @@ void cdc_init(void) } -int cdc_read_sector(u8 *buf, int fad, int num) +int cdc_read_sector(int fad, int size, u8 *buf) { - int nsec, retv, status; + int nsec, retv, status, num; + num = (size+3)&0xfffffffc; cdc_set_size(0); cdc_reset_selector(0, 0); cdc_cddev_connect(0); - cdc_play_fad(0, fad, num); + cdc_play_fad(0, fad, (size+0x7ff)>>11); while(num>0){ retv = cdc_get_numsector(0, &nsec); if(retv<0) - break; + return retv; if(nsec==0) continue; - - cdc_get_del_data(0, 0, nsec); - cdc_trans_data(buf, 2048*nsec); + + if(num>=2048) + nsec=2048; + else + nsec=num; + cdc_get_del_data(0, 0, 1); + cdc_trans_data(buf, nsec); + cdc_end_trans(&status); - buf += 2048*nsec; + buf += nsec; num -= nsec; } - return retv; + return size; } void cdc_read_test(void) @@ -1076,7 +1083,7 @@ void cd_cmd(void) cdc_read_test(); - //cdc_read_sector(0x06040000, 0xd5, 0x195); + //cdc_read_sector(0xd5, 0x195, 0x06040000); } diff --git a/Firm_Saturn/game_patch.c b/Firm_Saturn/game_patch.c index c34fb5e..0c323b6 100644 --- a/Firm_Saturn/game_patch.c +++ b/Firm_Saturn/game_patch.c @@ -327,6 +327,20 @@ void WAKU7_patch(void) SS_CTRL = (SAROO_EN | CS0_RAM1M); *(u32*)(0x0601C19C) = 0x34403440; *(u16*)(0x0601C16C) = 0x9; + *(u8*) (0x0601244d) = 0xa; + + + *(u32*)(0x06011E64+0x00) = 0xD207D108; + *(u32*)(0x06011E64+0x04) = 0x60436322; + *(u32*)(0x06011E64+0x08) = 0x44087370; + *(u32*)(0x06011E64+0x0c) = 0x40084000; + *(u32*)(0x06011E64+0x10) = 0x4408523C; + *(u32*)(0x06011E64+0x14) = 0x340C6312; + *(u32*)(0x06011E64+0x18) = 0x324C5521; + *(u32*)(0x06011E64+0x1c) = 0x432B6422; + *(u32*)(0x06011E64+0x20) = 0x0603439C; + *(u32*)(0x06011E64+0x24) = 0x02000F04; + } diff --git a/Firm_Saturn/main.h b/Firm_Saturn/main.h index ebbde3f..82c9891 100644 --- a/Firm_Saturn/main.h +++ b/Firm_Saturn/main.h @@ -9,6 +9,7 @@ typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64; + #define REG(x) (*(volatile unsigned int*)(x)) #define REG32(x) (*(volatile unsigned int*)(x)) #define REG16(x) (*(volatile unsigned short*)(x)) @@ -48,7 +49,10 @@ typedef unsigned long long u64; #define bios_run_cd_player INDIRECT_CALL(0x0600026C, void, void) int bios_cd_cmd(void); - +int read_1st(void); +void CHEAT_patch(void); +void RUN_CHEAT(void); +int cdc_read_sector(int fad, int size, u8 *buf); /*****************************************************************************/