Geo's hardware trick convinces the bootrom that the bootloader is empty. Here is the bootrom code that's being tricked by the A17 pullup.
004004B0 ; if values at these locations are all FFFFFFFF: A0000030,A000A5A0,A0015C58,A0017370 004004B0 ; return 0 004004B0 ; else if value at A0000030 is complement of value at A0000034 004004B0 ; return 1 004004B0 ; else 004004B0 ; return -1 004004B0 ; 004004B0 004004B0 checkblank 004004B0 STMFD SP!, {R3-R5,LR} 004004B4 MOV R0, #0 004004B8 BL setup_nor 004004B8 004004BC LDR R0, =0xA0000030 004004C0 BL readnor 004004C0 004004C4 MOV R4, R0 004004C8 CMN R4, #1 004004CC BNE loc_400520 004004CC 004004D0 LDR R0, =0xA000A5A0 004004D4 BL readnor 004004D4 004004D8 CMN R0, #1 004004DC BEQ loc_4004E8 004004DC 004004E0 MVN R0, #0 ; return -1 004004E0 004004E4 004004E4 locret_4004E4 004004E4 LDMFD SP!, {R3-R5,PC} 004004E4 004004E8 ; --------------------------------------------------------------------------- 004004E8 004004E8 loc_4004E8 ; CODE XREF: checkblank+2Cj 004004E8 LDR R0, =0xA0015C58 004004EC BL readnor 004004EC 004004F0 CMN R0, #1 004004F4 BEQ loc_400500 004004F4 004004F8 MOVL R0, 0xFFFFFFFF ; return -1 004004FC B locret_4004E4 004004FC 00400500 ; --------------------------------------------------------------------------- 00400500 00400500 loc_400500 ; CODE XREF: checkblank+44j 00400500 LDR R0, =0xA0017370 00400504 BL readnor 00400504 00400508 CMN R0, #1 0040050C BEQ return0 0040050C 00400510 MOVL R0, 0xFFFFFFFF ; return -1 00400514 B locret_4004E4 00400514 00400518 ; --------------------------------------------------------------------------- 00400518 00400518 return0 ; CODE XREF: checkblank+5Cj 00400518 MOV R0, #0 0040051C B locret_4004E4 0040051C 00400520 ; --------------------------------------------------------------------------- 00400520 00400520 loc_400520 ; CODE XREF: checkblank+1Cj 00400520 LDR R0, =0xA0000034 00400524 BL readnor 00400524 00400528 MOV R5, R0 0040052C if (*(0xA0000030)&0x3) 0040052C return -1 0040052C TST R4, #3 00400530 BNE loc_400540 ; return -1 00400530 00400534 MVN R0, R5 00400538 if (*(0xA0000030) == ~(0xA0000034)) 00400538 return 1 00400538 00400538 CMP R4, R0 0040053C BEQ return1 0040053C 00400540 00400540 loc_400540 ; CODE XREF: checkblank+80j 00400540 MOVL R0, 0xFFFFFFFF ; return -1 00400544 B locret_4004E4 00400544 00400548 ; --------------------------------------------------------------------------- 00400548 00400548 return1 ; CODE XREF: checkblank+8Cj 00400548 MOV R0, #1 0040054C B locret_4004E4 0040054C 0040054C ; End of function checkblank