Nw BBS 壬天堂世界

 找回密码
 注册
搜索
热搜: 资料集合
查看: 983|回复: 3
收起左侧

NDS Loader Source, A Good Thing(TM)

[复制链接]
人造人 该用户已被删除
发表于 2005-6-25 08:08:13 | 显示全部楼层 |阅读模式
NDS Loader Source, A Good Thing(TM)



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ GBA movie player NDS loader
@ by Rafael Vuijk (aka DarkFader)
@
@ Boot method: PassMe/WifiMe/FlashMe
@ Tested filesystems:
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

.equ save_REGS,    0x027FF000
.equ NewARM9Loop_dest,  0x027FF100
.equ RAM_HEADER,    0x027FFE00
.equ BOOTSECTOR_DATA,  0x02000000
.equ DIRECTORY_DATA,   0x02000200

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

.global _start
_start:
adr  r0, _start_thumb + 1
bx  r0
.thumb
_start_thumb:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ load boot sector
mov   r0, #0
ldr   r1, =BOOTSECTOR_DATA
ldr   r2, =0x200
bl   CF_Read_LBA
ldr   r7, =BOOTSECTOR_DATA @       ***

@ calculate root directory sector
ldrb  r1, [r7, #0x10]  @ number of FATs (2)
ldrh  r2, [r7, #0x16]  @ sectors per FAT (250)
mul   r1, r1, r2   @ FAT sectors
ldrh  r3, [r7, #0x0E]  @ reserved sectors (4)
add   r6, r1, r3   @ root directory sector   ***
push  {r6}
b  _matching_filename  @ !!!

_directory_sector:
mov   r0, r6
ldr   r1, =DIRECTORY_DATA
ldr   r2, =0x200
bl   CF_Read_LBA
ldr   r4, =DIRECTORY_DATA

_find_entry:
ldr   r1, =filename
mov   r2, #0     @ filename character 0..12

_compare_filename:
cmp   r2, #13
beq   _matching_filename
ldrb  r0, [r4, r2]   @ compare directory entry
ldrb  r3, [r1, r2]   @ with filename we look for
add   r2, r2, #1
cmp   r0, r3
beq   _compare_filename

@ not found
add   r4, r4, #32    @ next entry
lsr   r0, r4, #9    @ sector done?
bcc   _find_entry    @ same sector
add   r6, r6, #1    @ next sector
b   _directory_sector

_matching_filename:
add   r4, r4, r2    @ found entry

@ calculate file sector
ldrh  r0, [r4, #0x1A]   @ cluster lo
@ldrh  r1, [r4, #0x14]   @ cluster hi
@lsl   r1, r1, #16
@orr   r0, r0, r1    @ cluster
sub   r0, r0, #2    @ cluster - 2
ldrb  r1, [r7, #0x0D]   @ sectors per cluster (32)
mul   r1, r1, r0    @ file sector

ldr  r1, =0

@
pop   {r6}     @ root directory sector
add   r6, r6, r1    @ root directory sector + file sector   ***

@ calculate root directory sectors
ldrb  r0, [r7, #0x11]   @ root directory entries lo
ldrb  r1, [r7, #0x12]   @ root directory entries hi
lsl   r1, r1, #8
orr   r0, r0, r1    @ root directory entries
lsl   r0, r0, #5    @ root directory size
ldr   r1, =0x1FF
add   r0, r0, r1    @ sector align
bic   r0, r0, r1    @ sector align
lsr   r0, r0, #9    @ number of root directory sectors

@
add   r6, r6, r0    @ root directory sector + file sector + root directory sectors

@
ldr  r7, =RAM_HEADER

@ copy new ARM9 loop
ldr  r0, NewARM9Loop
ldr  r4, =NewARM9Loop_dest
str  r0, [r4, #0]    @ place ldr instruction
str  r4, [r4, #4]    @ address of ldr instruction
str  r4, [r7, #0x24]    @ go to new loop

@ load NDS header
mov  r0, r6      @ file sector
mov  r1, r7      @ RAM header
ldr  r2, =0x200
bl  CF_Read_LBA

adr  r0, AfterPass
mov  pc, r0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

.pool

.ds.b 0xAC - .
.arm
.ascii "PASS"    @ gamecode for FlashMe autoboot

filename:
.ascii  "START   NDS"
.align

NewARM9Loop:
ldr  pc, . + 4

.ds.b 0xC0 - .
b  _start

.thumb

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

AfterPass:

@ clear RAM
mov  r0, #0
mov  r1, #0
mov  r2, #0
mov  r3, #0
ldr  r4, =0x02000000
ldr  r5, =0x023FF000
_clear_loop:
stmia r4!, {r0-r3}
cmp  r4, r5
bne  _clear_loop

@ copy ARM9 binary
ldr  r0, [r7, #0x20]    @ ROM offset
lsr  r0, r0, #9     @ offset to sectors
add  r0, r6, r0     @ add file sector
ldr  r1, [r7, #0x28]    @ RAM address
ldr  r2, [r7, #0x2C]    @ code size
bl  CF_Read_LBA

@ copy ARM7 binary
ldr  r0, [r7, #0x30]    @ ROM offset
lsr  r0, r0, #9     @ offset to sectors
add  r0, r0, r6     @ add file sector
ldr  r1, [r7, #0x38]    @ RAM address
ldr  r2, [r7, #0x3C]    @ code size
bl  CF_Read_LBA

@ start ARM9
ldr  r0, [r7, #0x24]
ldr  r1, =NewARM9Loop_dest
str  r0, [r1, #0x4]

@ start ARM7
ldr  r0, [r7, #0x34]
bx  r0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ r0 = sector
@ r1 = dest address
@ r2 = length, aligned to 0x200 bytes
@ destroys r0-r5

CF_Read_LBA:
ldr  r4, =0x09000000  @ reg 0

_sector_loop: @ r4 = reg 0

ldr  r5, =7<<17
add  r4, r4, r5   @ reg 7

_wait_ready:
ldrh r3, [r4]
lsr  r5, r3, #7+1  @ 0x80
bcs  _wait_ready   @ busy
lsr  r5, r3, #6+1  @ 0x40
bcc  _wait_ready   @ ready

ldr  r5, =5<<17
sub  r4, r4, r5   @ reg 2
mov  r3, #1
strh r3, [r4]
ldr  r5, =1<<17
add  r4, r4, r5   @ reg 3
lsr  r3, r0, #0
strh r3, [r4]
add  r4, r4, r5   @ reg 4
lsr  r3, r0, #8
strh r3, [r4]
add  r4, r4, r5   @ reg 5
lsr  r3, r0, #16
strh r3, [r4]
add  r4, r4, r5   @ reg 6
lsr  r3, r0, #24
add  r3, r3, #0xE0
strh r3, [r4]
add  r4, r4, r5   @ reg 7
mov  r3, #0x20
strh r3, [r4]

_wait_data:
ldrh r3, [r4]
lsr  r5, r3, #7+1  @ 0x80
bcs  _wait_data   @ busy
lsr  r5, r3, #3+1  @ 0x08
bcc  _wait_data   @ data request

ldr  r5, =7<<17
sub  r4, r4, r5   @ reg 0
ldr  r5, =0x200   @ sector size
_copy_sector:
ldrh r3, [r4]
strh r3, [r1]
add  r1, r1, #2   @ dest += 2
sub  r2, r2, #2   @ length -= 2
sub  r5, r5, #2
bne  _copy_sector

cmp  r2, #0    @ finished?
ble  _bx_lr

add  r0, r0, #1   @ sector += 1
b  _sector_loop

_bx_lr:
bx  lr

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

.end



消息来源:http://ds.darkain.com/hack/
下载NDS Loader
下载HACK ver
回复

使用道具 举报

发表于 2005-6-25 09:01:48 | 显示全部楼层
汇编惨念
回复

使用道具 举报

人造人 该用户已被删除
 楼主| 发表于 2005-6-25 09:23:51 | 显示全部楼层
Loader的出现标志着NDS的合卡制作已经变成了可能!
回复

使用道具 举报

发表于 2005-6-25 23:44:32 | 显示全部楼层
残念,我可真是落爪就忘啊,原来汇编过的可牛了,这大学真是他妈的白念
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|Nw壬天堂世界 ( 京ICP备05022083号-1 京公网安备11010202001397号 )

GMT+8, 2025-1-12 07:42 , Processed in 0.068792 second(s), 6 queries , Redis On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表