multiMAN ver 04.19.07 UPD (20130212).zip (21.77MB) (CEX/DEX/STEALTH updates)
multiMAN ver 04.19.07 UPD (20130212).zip
* Added support for multi-disc games when using PS1_NETEMU emulator
With this update the ps1 backups support saga should be concluded.
Dean
p.s. Here are the two major patches in ps1_netemu. Iris no longer uses 'patched emulators' but provides syscall emulation, but I prefer to keep it this way - it is much clear and simple.
ATAPI 0x4A GET EVENT/STATUS NOTIFICATION
//case 8 = [fill sector buffer with 0xFF]
//case 7 = [0xBE READ CD]
//case 6 = [0x51 READ DISC INFORMATION]
//case 5 = [0x4A GET EVENT/STATUS NOTIFICATION]
//case 4 = [fill sector buffer with 0xFF]
//case 3 = [0x00 TEST UNIT READY]
//case 2 = [sys_storage_close()]
//case 1 = [sys_storage_open() ]
//4.30
//#define BASE (0x11C8F8) // GET EVENT/STATUS NOTIFICATION in ps1_netemu
//#define RETURN (0x11CA10) //+118 // case 5 return
//#define RETURN_ERR (0x11CFC4) //+6CC // case 5 return
//4.20
//#define BASE (0x11C7E8) // GET EVENT/STATUS NOTIFICATION in ps1_netemu
//#define RETURN (0x11C900) // case 5 return
//#define RETURN_ERR (0x11CEB4) // case 5 return
//3.55
//#define BASE (0x11B038) // GET EVENT/STATUS NOTIFICATION in ps1_netemu
//#define RETURN (0x11B150) // case 5 return
//#define RETURN_ERR (0x11B704) // case 5 return
//3.41
#define BASE (0x11B2D8) // GET EVENT/STATUS NOTIFICATION in ps1_netemu
#define RETURN (0x11B3F0) // case 5 return
#define RETURN_ERR (0x11B9A4) // case 5 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 DISC (0xE0) // address in lv2 memory to store current disc number (0..7)
#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;
#define SLEEP(ms) \
li %r3, ms; \
li %r11, 0x8D; \
sc;
#define RED 0
#define GREEN 1
#define YELLOW 2
#define OFF 0
#define ON 1
#define BLINK 2
#define LED(color, mode) \
li %r3, color; \
li %r4, mode; \
li %r11, 386; \
sc;
// IN:
// %r26 -> address of local stack buffer
// %r27 -> reserved
// %r28 -> reserved
.org 0
MEM_BASE(%r25)
lis %r4, 0x0002
stw %r4, 0x78(%sp) // 00 02 00 00 = packet length
stw %r4, 0x7C(%sp) // 00 02 00 00 = disc in tray, tray closed
li %r3, 0
LOAD_LABEL2(%r3, %r3, disc_name)
ld %r4, 0(%r3)
std %r4, 0(%r26)
ld %r4, 8(%r3)
std %r4, 8(%r26)
mr %r3, %r26
addi %r4, %r26, 0x10
li %r11, 805 // opendir
sc
cmplwi %r3, 0
bne next_disc
lwz %r3, 0x10(%r26)
li %r11, 807 // closedir
sc
b ABS(RETURN)
next_disc:
PEEK(HANDLE)
cmplwi %r3, 0
beq file_closed
li %r11, 804 // close
sc
li %r4, 0 // invalidate handle
POKE(HANDLE)
PEEK(DISC)
addi %r4, %r3, 1
andi. %r4, %r4, 7
POKE(DISC)
file_closed:
lis %r4, 0x0001 // tray open
stw %r4, 0x7C(%sp) // 00 01 00 00 = no disc in tray, tray opened
SLEEP(1000)
b ABS(RETURN_ERR)
.align 2
disc_name:
.string "/psx_cdrom0"
//4.30
//#define BASE (0x11C310) // READCD+0x10 in ps1_netemu
//#define RETURN (0x11BFDC) // +334 // 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
//case 8 = [fill sector buffer with 0xFF]
//case 7 = [0xBE READ CD]
//case 6 = [0x51 READ DISC INFORMATION]
//case 5 = [0x4A GET EVENT/STATUS NOTIFICATION]
//case 4 = [fill sector buffer with 0xFF]
//case 3 = [0x00 TEST UNIT READY]
//case 2 = [sys_storage_close()]
//case 1 = [sys_storage_open() ]
#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 DISC (0xE0) // address in lv2 memory to store current disc number (0..7)
#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)
PEEK(DISC)
sldi %r3, %r3, 8
add %r4, %r4, %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"
***
With multiMAN 05.00.00 only 4.30 and higher firmwares will be supported. Supporting 14 different firmwares is too hard to maintain compatibility with.
These will no longer be supported:
3.41 OFW
3.41 OFW + DONGLE
3.41 MFW (HERMES)
3.55 OFW
3.55 CFW KMEAW
3.55 CFW COBRA
3.55 CFW TB
3.55 CFW REBUG/ROGERO
3.55 OFW DEX
3.55 CFW DEX
4.21 OFW DEX
4.21 CFW REBUG
4.21 CFW ROGERO 1.00..2.03
These and later will be supported:
4.30 CFW ROGERO 2.05..
4.30 CFW REBUG
4.31 CFW
In the beginning mM used to support 1.90/3.00/3.14/3.21 firmwares but then suddenly the new additions started to cause issues with these old firmwares so I leveled up at 3.41. Now 2 years and 6 months later I think it is time to go up again.
Users of unsupported firmwares can stay with 04.19.00 or lower multiMAN version - anyway - it has more than everything one may need. Or switch to Iris.
Showtime 04.03.010 [CEX].pkg (5.58MB)
Download Showtime 04.03.010 [CEX].pkg from Sendspace.com - send big files the easy way
Showtime 04.03.010 [DEX].pkg (5.64MB)
Download Showtime 04.03.010 [DEX].pkg from Sendspace.com - send big files the easy way
Dean
multiMAN
Download: multiMAN ver 04.19.07 UPD (20130212).zip (21.77MB) (CEX/DEX/STEALTH)
Source: Deank via PS3Crunch
Showtime for multiMAN
Download CEX: Showtime 04.03.010 [CEX].pkg (5.58MB)
Download DEX: Showtime 04.03.010 [DEX].pkg (5.64MB)
Source: Deank via PS3Crunch
● Latest News ● Report News ● Search Forums ● Hall of Fame ●
● Facebook.com/PSXScene ● RSS ● Twitter.com/psx_scene ●







Recent Threads
So is
Recent Comments
vBulletin Message