中身が Opera だけあって使えないこともない
NintendoDS のウェブブラウザ "DSブラウザ" ですが、
DSメモリー拡張カートリッジを挿さないと立ち上がらないところが非常にうざいです。
無線LANが使える環境で縛られるのでほとんど使用しないのは確かですが、
いざというとき(?)のために何とかならないものかと思っていましたが、
国内最大の某掲示板(のキャッシュ)にパッチを発見しました。
なんでもDSブラウザのROMイメージにこのパッチをあて R4 から起動すると、
M3 Perfect Lite を拡張カートリッジ代わりに利用することができるそうです。
内容は以下のとおりです。
アドレス 00004800 - 00004803
EE 30 05 EA
アドレス 00150BC0 - 00150C9F
B4 00 9F E5 1A 1B A0 E3 B0 10 C0 E1 68 00 8F E2
00 20 A0 E3 02 30 90 E7 B0 30 D3 E1 04 20 82 E2
3C 00 52 E3 FA FF FF 1A 88 00 9F E5 AA 1C A0 E3
55 10 81 E2 B0 10 C0 E1 80 10 9F E5 80 00 8F E2
00 20 A0 E3 02 30 90 E7 02 30 81 E7 04 20 82 E2
10 00 52 E3 FA FF FF 1A 74 10 9F E5 02 01 A0 E3
01 00 40 E2 00 00 81 E5 68 10 9F E5 01 00 A0 E3
00 00 81 E5 01 C3 A0 E3 F1 CE FA EA 00 00 00 08
02 00 E0 08 0E 00 00 08 FC 1F 80 08 4A 10 00 08
12 06 80 08 00 00 00 08 66 1B 80 08 0C 00 80 08
0E 08 00 08 00 00 00 08 E4 01 00 08 E4 01 00 08
88 01 00 08 88 01 00 08 FE EF FF 09 04 02 00 04
B0 00 00 08 FF FF 00 00 00 24 24 24 FF FF FF FF
FF FF FF 7F FC FF 01 08 00 00 24 08 00 00 00 00
これだけだとなんなのでちょっと中身を確認してみました。
NintendoDS のCPUはARM系なのですが、
ARMの場合、データの羅列を見ているだけで命令とデータの区別がある程度つきます。
DSブラウザのROMイメージを眺めていると、
0x480000 からプログラムが始まっているようで、
パッチでもここを変更しています。
つまり、0x480000 からどこかにジャンプして何らかの処理をした後、
もともと0x480000で行っていた処理を実行し、
ARM(32ビット)モードなので 0x480004 に戻してあげれば、
何事もなかったかのようにオリジナルの動作をすることとなります。
もちろん追加処理部分はオリジナルで未使用なメモリ領域に格納する必要があります。
さて、上記を逆アセンブルすると以下のような感じになります。
0x00004800:
b 0x150bc0
0x00150bc0:
ldr r0,0x00150c7c ; = #0x04000204
mov r1,#0x6800
strh r1,[r0,#0]
add r0,pc,#0x68 ; #0x150c3c
mov r2,#0
ldr r3,[r0,r2]
ldrh r3,[r3,#0]
add r2,r2,#4
cmp r2,#0x3c
bne 0x150bd4
ldr r0,0x00150c78 ; = #0x09ffeffe
mov r1,#0xaa00
add r1,r1,#0x55
strh r1,[r0,#0]
ldr r1,0x00150c80 ; = #0x080000b0
add r0,pc,#0x80 ; #0x150c84
mov r2,#0
ldr r3,[r0,r2]
str r3,[r1,r2]
add r2,r2,#4
cmp r2,#0x10
bne 0x150c04
ldr r1,0x00150c94 ; = #0x0801fffc
mov r0,#0x80000000
sub r0,r0,#1
str r0,[r1,#0]
ldr r1,0x00150c98 ; = #0x08240000
mov r0,#1
str r0,[r1,#0]
mov r12,#0x04000000
b 0x4804
0x00150c3c:
0x08000000
0x08e00002
0x0800000e
0x08801ffc
0x0800104a
0x08800612
0x08000000
0x08801b66
0x0880000c
0x0800080e
0x08000000
0x080001e4
0x080001e4
0x08000188
0x08000188
0x09ffeffe
0x04000204
0x080000b0
0x0000ffff
0x24242400
0xffffffff
0x7fffffff
0x0801fffc
0x08240000
0x00000000
0x00150ca0:
追加処理部分をC言語風に書くと以下のようになります。
(volatile unsigned short int*)0x04000204=0x6800;
volatile unsigned short int* data1[]={
0x08000000,0x08e00002,0x0800000e,0x08801ffc
0x0800104a,0x08800612,0x08000000,0x08801b66
0x0880000c,0x0800080e,0x08000000,0x080001e4
0x080001e4,0x08000188,0x08000188};
unsigned int data2[]={0x0000ffff,0x24242400,0xffffffff,0x7fffffff};
int i;
unsigned short int s;
for(i=0;i<sizeof(data1)/sizeof(data1[0]);i++)
s=*(data1[i]);
(volatile unsigned short int*)0x09ffeffe=0xaa55;
memcpy((volatile unsigned int*)0x080000b0,data2,sizeof(data2));
(volatile unsigned int*)0x0801fffc=0x7fffffff;
(volatile unsigned int*)0x08240000=0x00000001;
return;
よくわかりませんが 0x04000204 はDSの内部レジスタ、
0x08000000台 は M3 Perfect Lite のレジスタなのでしょうか、
いろいろレジスタを操作しているようです。
で、実際パッチを当てると見事動作。
これで完璧です。
ちなみにG6を拡張カートリッジ代わりにする場合のパッチは以下だそうです。
アドレス 00004800 - 00004803:
EE 30 05 EA
アドレス 00150BC0 - 00150C9F
B4 00 9F E5 1A 1B A0 E3 B0 10 C0 E1 68 00 8F E2
00 20 A0 E3 02 30 90 E7 B0 30 D3 E1 04 20 82 E2
38 00 52 E3 FA FF FF 1A 88 00 9F E5 AA 1C A0 E3
55 10 81 E2 B0 10 C0 E1 80 10 9F E5 80 00 8F E2
00 20 A0 E3 02 30 90 E7 02 30 81 E7 04 20 82 E2
10 00 52 E3 FA FF FF 1A 74 10 9F E5 02 01 A0 E3
01 00 40 E2 00 00 81 E5 68 10 9F E5 01 00 A0 E3
00 00 81 E5 01 C3 A0 E3 F1 CE FA EA 00 00 00 09
E0 FF FF 09 EC FF FF 09 EC FF FF 09 EC FF FF 09
FC FF FF 09 FC FF FF 09 FC FF FF 09 4A FF FF 09
4A FF FF 09 4A FF FF 09 0C 00 20 09 F0 FF FF 09
E8 FF FF 09 88 01 00 08 FE EF FF 09 04 02 00 04
B0 00 00 08 FF FF 00 00 00 24 24 24 FF FF FF FF
FF FF FF 7F FC FF 01 08 00 00 24 08 00 00 00 00
NintendoDS のウェブブラウザ "DSブラウザ" ですが、
DSメモリー拡張カートリッジを挿さないと立ち上がらないところが非常にうざいです。
無線LANが使える環境で縛られるのでほとんど使用しないのは確かですが、
いざというとき(?)のために何とかならないものかと思っていましたが、
国内最大の某掲示板(のキャッシュ)にパッチを発見しました。
なんでもDSブラウザのROMイメージにこのパッチをあて R4 から起動すると、
M3 Perfect Lite を拡張カートリッジ代わりに利用することができるそうです。
内容は以下のとおりです。
アドレス 00004800 - 00004803
EE 30 05 EA
アドレス 00150BC0 - 00150C9F
B4 00 9F E5 1A 1B A0 E3 B0 10 C0 E1 68 00 8F E2
00 20 A0 E3 02 30 90 E7 B0 30 D3 E1 04 20 82 E2
3C 00 52 E3 FA FF FF 1A 88 00 9F E5 AA 1C A0 E3
55 10 81 E2 B0 10 C0 E1 80 10 9F E5 80 00 8F E2
00 20 A0 E3 02 30 90 E7 02 30 81 E7 04 20 82 E2
10 00 52 E3 FA FF FF 1A 74 10 9F E5 02 01 A0 E3
01 00 40 E2 00 00 81 E5 68 10 9F E5 01 00 A0 E3
00 00 81 E5 01 C3 A0 E3 F1 CE FA EA 00 00 00 08
02 00 E0 08 0E 00 00 08 FC 1F 80 08 4A 10 00 08
12 06 80 08 00 00 00 08 66 1B 80 08 0C 00 80 08
0E 08 00 08 00 00 00 08 E4 01 00 08 E4 01 00 08
88 01 00 08 88 01 00 08 FE EF FF 09 04 02 00 04
B0 00 00 08 FF FF 00 00 00 24 24 24 FF FF FF FF
FF FF FF 7F FC FF 01 08 00 00 24 08 00 00 00 00
これだけだとなんなのでちょっと中身を確認してみました。
NintendoDS のCPUはARM系なのですが、
ARMの場合、データの羅列を見ているだけで命令とデータの区別がある程度つきます。
DSブラウザのROMイメージを眺めていると、
0x480000 からプログラムが始まっているようで、
パッチでもここを変更しています。
つまり、0x480000 からどこかにジャンプして何らかの処理をした後、
もともと0x480000で行っていた処理を実行し、
ARM(32ビット)モードなので 0x480004 に戻してあげれば、
何事もなかったかのようにオリジナルの動作をすることとなります。
もちろん追加処理部分はオリジナルで未使用なメモリ領域に格納する必要があります。
さて、上記を逆アセンブルすると以下のような感じになります。
0x00004800:
b 0x150bc0
0x00150bc0:
ldr r0,0x00150c7c ; = #0x04000204
mov r1,#0x6800
strh r1,[r0,#0]
add r0,pc,#0x68 ; #0x150c3c
mov r2,#0
ldr r3,[r0,r2]
ldrh r3,[r3,#0]
add r2,r2,#4
cmp r2,#0x3c
bne 0x150bd4
ldr r0,0x00150c78 ; = #0x09ffeffe
mov r1,#0xaa00
add r1,r1,#0x55
strh r1,[r0,#0]
ldr r1,0x00150c80 ; = #0x080000b0
add r0,pc,#0x80 ; #0x150c84
mov r2,#0
ldr r3,[r0,r2]
str r3,[r1,r2]
add r2,r2,#4
cmp r2,#0x10
bne 0x150c04
ldr r1,0x00150c94 ; = #0x0801fffc
mov r0,#0x80000000
sub r0,r0,#1
str r0,[r1,#0]
ldr r1,0x00150c98 ; = #0x08240000
mov r0,#1
str r0,[r1,#0]
mov r12,#0x04000000
b 0x4804
0x00150c3c:
0x08000000
0x08e00002
0x0800000e
0x08801ffc
0x0800104a
0x08800612
0x08000000
0x08801b66
0x0880000c
0x0800080e
0x08000000
0x080001e4
0x080001e4
0x08000188
0x08000188
0x09ffeffe
0x04000204
0x080000b0
0x0000ffff
0x24242400
0xffffffff
0x7fffffff
0x0801fffc
0x08240000
0x00000000
0x00150ca0:
追加処理部分をC言語風に書くと以下のようになります。
(volatile unsigned short int*)0x04000204=0x6800;
volatile unsigned short int* data1[]={
0x08000000,0x08e00002,0x0800000e,0x08801ffc
0x0800104a,0x08800612,0x08000000,0x08801b66
0x0880000c,0x0800080e,0x08000000,0x080001e4
0x080001e4,0x08000188,0x08000188};
unsigned int data2[]={0x0000ffff,0x24242400,0xffffffff,0x7fffffff};
int i;
unsigned short int s;
for(i=0;i<sizeof(data1)/sizeof(data1[0]);i++)
s=*(data1[i]);
(volatile unsigned short int*)0x09ffeffe=0xaa55;
memcpy((volatile unsigned int*)0x080000b0,data2,sizeof(data2));
(volatile unsigned int*)0x0801fffc=0x7fffffff;
(volatile unsigned int*)0x08240000=0x00000001;
return;
よくわかりませんが 0x04000204 はDSの内部レジスタ、
0x08000000台 は M3 Perfect Lite のレジスタなのでしょうか、
いろいろレジスタを操作しているようです。
で、実際パッチを当てると見事動作。
これで完璧です。
ちなみにG6を拡張カートリッジ代わりにする場合のパッチは以下だそうです。
アドレス 00004800 - 00004803:
EE 30 05 EA
アドレス 00150BC0 - 00150C9F
B4 00 9F E5 1A 1B A0 E3 B0 10 C0 E1 68 00 8F E2
00 20 A0 E3 02 30 90 E7 B0 30 D3 E1 04 20 82 E2
38 00 52 E3 FA FF FF 1A 88 00 9F E5 AA 1C A0 E3
55 10 81 E2 B0 10 C0 E1 80 10 9F E5 80 00 8F E2
00 20 A0 E3 02 30 90 E7 02 30 81 E7 04 20 82 E2
10 00 52 E3 FA FF FF 1A 74 10 9F E5 02 01 A0 E3
01 00 40 E2 00 00 81 E5 68 10 9F E5 01 00 A0 E3
00 00 81 E5 01 C3 A0 E3 F1 CE FA EA 00 00 00 09
E0 FF FF 09 EC FF FF 09 EC FF FF 09 EC FF FF 09
FC FF FF 09 FC FF FF 09 FC FF FF 09 4A FF FF 09
4A FF FF 09 4A FF FF 09 0C 00 20 09 F0 FF FF 09
E8 FF FF 09 88 01 00 08 FE EF FF 09 04 02 00 04
B0 00 00 08 FF FF 00 00 00 24 24 24 FF FF FF FF
FF FF FF 7F FC FF 01 08 00 00 24 08 00 00 00 00
wow gold!All wow gold US Server 24.99$/1000G on sell! Cheap wow gold,wow gold,wow gold,Buy Cheapest/Safe/Fast WoW US EU wow gold Power leveling wow gold from the time you wWorld of Warcraft gold ordered!
返信削除wow power leveling wow power leveling power leveling wow power leveling wow powerleveling wow power levelingcheap wow power leveling wow power leveling buy wow power leveling wow power leveling buy power leveling wow power leveling cheap power leveling wow power leveling wow power leveling wow power leveling wow powerleveling wow power leveling power leveling wow power leveling wow powerleveling wow power leveling buy rolex cheap rolex wow gold wow gold wow gold wow gold -20149530999064
Hi,Do you need digital signages, advertising displays, digital sign, advertisement displays and advertising players? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.
返信削除amberdigital Contact Us
website:www.amberdigital.com.hk
alibaba:amberdigital.en.alibaba.com[gfcagfifeihddb]