Main » 2013 » February » 18 » multiMAN ver 04.19.07/ Showtime 04.03.010 mM edition Updates
12:32 PM
multiMAN ver 04.19.07/ Showtime 04.03.010 mM edition Updates

multiMANreceives another minor update today by deank bringing it to version 04.19.07. This update provides support for multi-disc games when using the PS1_NETEMU emulator for PSone games. Also below you will find an announcement by deank about future support of lower CFW's starting in the v05.00.00 release of multiMAN. Deank has also updated Showtime (multiMAN edition) to v04.03.010 following the works of Andreas Öman. For all the details check all the release quotes and announcements below


multiMAN 04.19.07 minor update is available online and in the web column.

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

Code:
//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"
ATAPI 0xBE READ CD

Code:
//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"
Announcement from Deank

mM's main source file would become over 100 000 if I spend the time to follow the 'break line' rule when more than 50-60 characters are used per line and if I used comments. I started with mM as a tool for myself so I don't really care if other people can continue with it, nor I'm weary about someone adopting the code to turn it into a bigger mess. It contains about 200 lines from the original "Open Backup Manager" (which afaik was ~3000 lines) - if you wish you can start with it.

***

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 for multiMAN Update

Showtime by Andreas Öman 4.03.010 (for mM and Standalone) are available online and in the web column.

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)
Mirror: Brewology




Showtime for multiMAN
Download CEX: Showtime 04.03.010 [CEX].pkg (5.58MB)
Download DEX: Showtime 04.03.010 [DEX].pkg (5.64MB)
Mirror: Brewology (CEX/DEX)

Category: PS3 | Views: 480 | Added by: Kenpachi | Rating: 0.0/0
Total comments: 0
Name *:
Email *:
Code *:
Section categories
Tag Board
Statistics

Total online: 1
Guests: 1
Users: 0