Zipit Z1

逆向loader.bin


整理如下:

  .text
  b reset
  dcd 0xc0000000
  dcd 0xc0028000
  dcd 0x00002000
  dcd 0x000f0000
  dcd 0xc0020000
  dcd 0xc0700000
  dcd 0x00090000
  dcd 0x00170000
  dcd 0x00001000
  dcd 0x00000000
  dcd 0x00000000

reset:
  mov sp, #0x60009600
  mov r0, #0x80000000
  mov r1, #0x40100
  str r1, [r0, #0x100] ; SYSCON1 = 0x40100
  mov r0, #0x80002200
  ldr r1, [r0]
  orr r1, r1, #6 ; SYSCON3|= 6
  str r1, [r0]
  nop
  nop
  nop
  nop
  nop
  nop
  mov r0, #0x80002600
  mov r1, #0x31000000
  str r1, [r0, #0x10] ; DAI64Fs = 0x31000000
  nop
  nop
  nop
  nop
  mov r0, #0x80000000
  mov r1, #0x60004
  str r1, [r0, #0x4c0] ; UBRLCR1 = 0x60004
  add r0, r0, #0x1000
  str r1, [r0, #0x4c0] ; UBRLCR2 = 0x1000
  mov r1, #0x100
  str r1, [r0, #0x100] ; SYSCON2 = 0x100
  mrc p15, 0, r5, c1, c0, 0 ; co-processor MMU
  bic r5, r5, #0xd
  mcr p15, 0, r5, c1, c0, 0
  nop
  nop
  nop
  nop
  ldr r0, =loader_aeronix7312boo ; "aeronix 7312 bootloader\r\n with zipitp"...
  bl uart2_send_string
  mov r0, #0x80000000
  mov r1, #0xc00000c
  str r1, [r0, #0x180] ; MEMCFG1 = 0xc00000c
  mov r0, #0x80000000
  ldr r1, =0x29000200
  str r1, [r0] ; PADR = 0x29000200
  ldr r1, =0x200
  str r1, [r0, #0x40] ; PADDR = 0x200
  ldr r0, =loader_sizingmemory ; "sizing memory...\r\n"
  bl uart2_send_string
  mov r0, #0x80001100
  ldr r1, [r0]
  orr r1, r1, #4
  str r1, [r0] ; SYSCON2|= 4
  mov r0, #0x80002300
  mov r1, #0x4e2
  str r1, [r0] ; SDCONF = 0x4e2
  mov r1, #0x168
  str r1, [r0, #0x40] ; SDRFPR = 0x168
  mov r0, #0xc0000000
  ldr r1, =0x55aa55aa
  str r1, [r0]
  ldr r2, [r0]
  cmp r1, r2
  beq main
  ldr r0, =loader_nomemorydetect ; "no memory detected - system halted!!\r\"...
  bl uart2_send_string
  mov r0, #0x80000000
  ldr r1, [r0]
  bic r1, r1, #0x300
  str r1, [r0] ; PADR&= ~0x00000300

halt:
  b halt

main:
  mov r1, #0
  mov r0, #0xc0000000
  str r1, [r0]
  mov r0, #0xc0000200
  str r1, [r0]
  mov r0, #0xc0000400
  str r1, [r0]
  mov r0, #0xc0400000
  str r1, [r0]
  mov r0, #0xc0800000
  str r1, [r0]
  mov r8, #8
  mov r9, #0xb
  ldr r1, =0x55aa55aa
  mov r0, #0xc0000000
  str r1, [r0]
  mov r0, #0xc0000200
  ldr r2, [r0]
  cmp r1, r2
  addne r8, r8, #1
  mov r0, #0xc0000400
  ldr r2, [r0]
  cmp r1, r2
  addne r8, r8, #1
  mov r0, #0xc0400000
  ldr r2, [r0]
  cmp r1, r2
  addne r9, r9, #1
  mov r0, #0xc0800000
  ldr r2, [r0]
  cmp r1, r2
  addne r9, r9, #1
  orr r9, r9, r8, lsl#4
  cmp r9, #0x9d
  ldreq r0, =loader_sdram256mbit16 ; "sdram: 256mbit, 16mb x 16\r\n"
  moveq r8, #0x562
  moveq r10, #0x2000000
  cmp r9, #0xad
  ldreq r0, =loader_sdram256mbit32 ; "sdram: 256mbit, 32mb x 8\r\n"
  moveq r8, #0x4e2
  moveq r10, #0x2000000
  cmp r9, #0x8c
  ldreq r0, =loader_sdram64mbit4mb ; "sdram: 64mbit, 4mb x 16\r\n"
  moveq r8, #0x522
  moveq r10, #0x800000
  cmp r9, #0x9c
  ldreq r0, =loader_sdram128mbit8m ; "sdram: 128mbit, 8mb x 16\r\n"
  moveq r8, #0x542
  moveq r10, #0x1000000
  bl uart2_send_string
  mov r0, #0x80001100
  ldr r1, [r0]
  bic r1, r1, #4
  str r1, [r0] ; SYSCON2&= ~0x00000004
  mov r0, #0x80002300
  mov r1, #0
  str r1, [r0] ; SDCONF = 0
  str r8, [r0]
  mov r0, #0xc0000000
  ldr r1, =0x55aa55aa
  str r1, [r0]
  ldr r2, [r0]
  cmp r1, r2
  addeq r10, r10, r10
  movne r0, #0x80001100
  ldrne r1, [r0]
  orrne r1, r1, #4
  strne r1, [r0] ; SYSCON2
  ldreq r0, =loader_memorywidth32b ; "memory width: 32 bits\r\n"
  ldrne r0, =loader_memorywidth16b ; "memory width: 16 bits\r\n"
  bl uart2_send_string
  ldr r0, =loader_memorysize ; "memory size: "
  bl uart2_send_string
  mov r0, r10, lsr #20
  bl uart2_print_ulong
  ldr r0, =loader_megs ; " megs\r\n"
  bl uart2_send_string
  ldr r0, =loader_clearingmemory ; "clearing memory\r\n"
  bl uart2_send_string
  mov r0, r10, lsr #16
  mov r3, r10
  and r0, r0, #0x200
  and r3, r3, #0x1000000
  mov r1, #0x80000000
  ldr r2, [r1]
  bic r2, r2, #0x200
  bic r2, r2, #0x1000000
  orr r2, r2, r0
  orr r2, r2, r3
  str r2, [r1]
  ldr r1, =0xc0000000
  mov r2, #0x100000
  mov r0, #0
0:
  str r0, [r1]
  add r1, r1, #4
  subs r2, r2, #4
  bne 0b
  ldr r0, =byte_820
  mov r1, #0xc0000000
  ldr r2, =0x4fa
1:
  ldrb r3, [r0]
  ldrb r4, [r0,#(byte_821 - 0x820)]
2:
  strb r4, [r1]
  add r1, r1, #1
  sub r3, r3, #1
  ands r3, r3, #0xff
  bne 2b
  add r0, r0, #2
  subs r2, r2, #2
  bne 1b
  mov r0, #0x80000000
  ldr r1, [r0, #0x100]
  bic r1, r1, #0x1000
  str r1, [r0, #0x100]
  ldr r1, =0xe03a695f
  str r1, [r0, #0x2c0]
  mov r1, #0xc
  add r0, r0, #0x1000
  str r1, [r0]
  sub r0, r0, #0x1000
  ldr r1, =0x89abcdef
  str r1, [r0,#0x540]
  ldr r1, =0x1234567
  str r1, [r0,#0x580]
  ldr r1, [r0,#0x100]
  orr r1, r1, #0x1000
  str r1, [r0,#0x100]
  ldr r0, =loader_copyingramdisk ; "copying ramdisk\r\n"
  bl uart2_send_string
  ldr r0, =0x90000
  ldr r1, =0xc0700000
  ldr r2, =0x170000
3:
  ldr r3, [r0]
  str r3, [r1]
  add r0, r0, #4
  add r1, r1, #4
  subs r2, r2, #4
  bne 3b
  ldr r0, =loader_copyingkernel ; "copying kernel\r\n"
  bl uart2_send_string
  ldr r0, =0x2000
  ldr r1, =0xc0028000
  ldr r2, =0xf0000
4:
  ldr r3, [r0]
  str r3, [r1]
  add r0, r0, #4
  add r1, r1, #4
  subs r2, r2, #4
  bne 4b
  ldr r0, =loader_creatingatags ; "creating atags\r\n"
  bl uart2_send_string
  ldr r0, =0xc0020000
  mov r1, #5
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0x54410001
  str r1, [r0]
  add r0, r0, #4
  mov r1, #0
  str r1, [r0]
  add r0, r0, #4
  str r1, [r0]
  add r0, r0, #4
  mov r1, #0x100
  str r1, [r0]
  add r0, r0, #4
  mov r1, #4
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0x54410002
  str r1, [r0]
  add r0, r0, #4
  mov r1, r10
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0xc0000000
  str r1, [r0]
  add r0, r0, #4
  mov r1, #5
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0x54410004
  str r1, [r0]
  add r0, r0, #4
  mov r1, #0
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0x1000
  str r1, [r0]
  add r0, r0, #4
  mov r1, #0
  str r1, [r0]
  add r0, r0, #4
  mov r1, #4
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0x54420005
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0xc0700000
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0x170000
  str r1, [r0]
  add r0, r0, #4
  mov r1, #0
  str r1, [r0]
  add r0, r0, #4
  ldr r1, =0
  str r1, [r0]
  add r0, r0, #4
  ldr r0, =loader_bootinglinux ; "booting linux\r\n"
  bl uart2_send_string
  ldr r4, =0xc0028000
  mov r0, #0
  mov r1, #0x83
  mov pc, r4

uart2_send_string:
  stmfd sp!, {lr}
  mov r3, r0
0:
  ldrb r0, [r3]
  cmp r0, #0
  beq 1f
  bl uart2_send_char
  add r3, r3, #1
  b 0b
1:
  ldmfd sp!, {pc}
  
uart2_send_char:
  mov r1, #0x80001000
1:
  ldr r2, [r1, #0x140]
  tst r2, #0x800000 ; SYSYFLG2.UTX2FF
  bne 1b
  str r0, [r1, #0x480]
  ret

uart2_print_hex:
  stmfd sp!, {lr}
  and r0, r0, #0xf
  cmp r0, #9
  bls 1f
  sub r0, r0, #0xa
  add r0, r0, #0x41
  b 2f
1:
  add r0, r0, #0x30
2:
  bl uart2_send_char
  ldmfd sp!, {pc}

uart2_print_ulong:
  stmfd sp!, {lr}
  mov r5, r0
  mov r0, #0x20 ; ' '
  bl uart2_send_char
  mov r0, #0x20 ; ' '
  bl uart2_send_char
  mov r0, #0x30 ; '0'
  bl uart2_send_char
  mov r0, #0x78 ; 'x'
  bl uart2_send_char
  mov r0, r5, lsr #28
  bl uart2_print_hex
  mov r0, r5, lsr #24
  bl uart2_print_hex
  mov r0, r5, lsr #20
  bl uart2_print_hex
  mov r0, r5, lsr #16
  bl uart2_print_hex
  mov r0, r5, lsr #12
  bl uart2_print_hex
  mov r0, r5, lsr #8
  bl uart2_print_hex
  mov r0, r5, lsr #4
  bl uart2_print_hex
  mov r0, r5
  bl uart2_print_hex
  mov r0, r5
  ldmfd sp!, {pc}

  align 8
byte_820: dcb 0xff
byte_821: dcb 0xff

  .align
loader_aeronix7312boo: .asciz "Aeronix 7312 BootLoader\r\n with ZipitPet mods (1.16)\r\n"
loader_sizingmemory:   .asciz "Sizing Memory...\r\n"
loader_nomemorydetect: .asciz "No Memory Detected - System Halted!!\r\n"
loader_sdram256mbit16: .asciz "SDRAM: 256Mbit, 16MB x 16\r\n"
loader_sdram256mbit32: .asciz "SDRAM: 256Mbit, 32MB x 8\r\n"
loader_sdram64mbit4mb: .asciz "SDRAM: 64Mbit, 4MB x 16\r\n"
loader_sdram128mbit8m: .asciz "SDRAM: 64Mbit, 8MB x 8\r\n"
loader_memorywidth32b: .asciz "Memory Width: 32 bits\r\n"
loader_memorywidth16b: .asciz "Memory Width: 16 bits\r\n"
loader_memorysize:     .asciz "Memory Size: "
loader_megs:           .asciz " Megs\r\n"
loader_clearingmemory: .asciz "Clearing Memory\r\n"
loader_copyingramdisk: .asciz "Copying Ramdisk\r\n"
loader_copyingkernel:  .asciz "Copying Kernel\r\n"
loader_creatingatags:  .asciz "Creating ATAGS\r\n"
loader_bootinglinux:   .asciz "Booting Linux\r\n"
  end



返回上一頁