-------------------------------------
* Added support for PSXEMU/PSXNETEMU emulator selection for PS1 BIN+CUE backups (Press [Triangle] -> Game Settings)
* When using PSX NETEMU option the disc backups must be in MODE1 or MODE2 / 2352 (or more) bytes sector
* Multi-disc games are not supported in this initial PS1_NETEMU-support version
The default launch mode for PS1 file backups is "AUTO" = PSX EMU. Some games may require or look/perform better when using PSX NETEMU. The patched versions were tested on 4.30 and 4.21, but hopefully 3.41 and 3.55 versions will work too.
This method is similar to the ps1_emu.self patching and doesn't affect other apps nor uses system calls which make break other apps.
The patch is quite simple (just 244 bytes for ATAPI 0xBE READ CD command)
//4.30
//#define BASE (0x11C310) // READCD+0x10 in ps1_netemu
//#define RETURN (0x11BFDC) // case 7 return
//4.20
//#define BASE (0x11C200) // READCD+0x10 in ps1_netemu
//#define RETURN (0x11BECC) // case 7 return
//3.55
//#define BASE (0x11AA50) // READCD+0x10 in ps1_netemu
//#define RETURN (0x11A71C) // case 7 return
//3.41
#define BASE (0x11ACF0) // READCD+0x10 in ps1_netemu
#define RETURN (0x11A9BC) // case 7 return
#define SECTOR_SIZE (0xD0) // address in lv2 memory to store sector size
#define HANDLE (0xD8) // address in lv2 memory to store fd (open handle)
#define ABS(target) ((target) - (BASE) - .)
#define ABS2(target) ((target) - .)
#define MEM_BASE(dest) \
li dest, 1; \
rldicr dest, dest, 63, 0;
#define LOAD_LABEL(base, dest, source, address) \
oris dest, source, ((base) + (address))@h; \
ori dest, dest, ((base) + (address))@l;
#define LOAD_LABEL2(dest, source, address) \
LOAD_LABEL(BASE, dest, source, address)
#define PEEK(address) \
ori %r3, %r25, address; \
li %r11, 6; \
sc;
#define POKE(address) \
ori %r3, %r25, address; \
li %r11, 7; \
sc;
// IN:
// %r24 -> address of local stack buffer
// %r29 -> address of readcd data buffer
// %r9 -> sector number
.org 0
MEM_BASE(%r25)
PEEK(SECTOR_SIZE)
mullw %r30, %r9, %r3
PEEK(HANDLE)
mr %r27, %r3
cmplwi %r3, 0
bne read_sector // handle is valid, file already opened
LOAD_LABEL2(%r3, %r3, iso_name)
ld %r4, 0(%r3)
std %r4, 0(%r24)
mr %r3, %r24
li %r4, 0
addi %r5, %sp, 0xE0
li %r6, 511
li %r7, 0
li %r8, 0
li %r11, 801 // open
sc
cmpldi %r3, 0
bne abort
lwz %r4, 0xE0(%sp) // store file handle
POKE(HANDLE)
mr %r27, %r4
read_sector:
mr %r3, %r27
mr %r4, %r30
li %r5, 0
addi %r6, %sp, 0xE8
li %r11, 818 // seek
sc
cmpldi %r3, 0
bne close
mr %r3, %r27
mr %r4, %r29
li %r5, 0x940
addi %r6, %sp, 0xE8
li %r11, 802 // read
sc
cmpldi %r3, 0
beq return
close:
mr %r3, %r27
li %r11, 804 // close
sc
li %r4, 0 // invalidate handle
POKE(HANDLE)
abort:
lis %r3, 0x8001
ori %r3, %r3, 0x000A // (BUSY 0x8001000A)
extsw %r3, %r3
return:
mr %r25, %r3
b ABS(RETURN)
.align 2
iso_name:
.string "/psx_d0"
Download multiMAN ver 04.19.06 UPD (20130211).zip
D
Download: multiMAN ver 04.19.06 UPD (20130211).zip (21.77MB) (CEX/DEX/STEALTH)
Source: Deank @ PSX-Scene
- Additional multiMAN Info: Click Here
- multiMAN Support Link: Click Here
● Latest News ● Report News ● Search Forums ● Hall of Fame ●
● Facebook.com/PSXScene ● RSS ● Twitter.com/psx_scene ●








Recent Threads


Recent Comments
vBulletin Message