diff --git a/boards/pi3/aarch32/SVC/README b/boards/pi3/aarch32/SVC/README index 07e8f52..137d3c2 100644 --- a/boards/pi3/aarch32/SVC/README +++ b/boards/pi3/aarch32/SVC/README @@ -9,24 +9,74 @@ flavors of raspberry pi. This directory is for aarch32 mode (dont use a config.txt) and switches from HYP back to SVC mode. -I am going to run with this until it breaks. The solution still doesnt -work everywhere and way it should, so that is still a mystery. Thanks -to the folks at the raspberry pi bare metal forum and BSD and Linux and -other sources that all use eret to change the spsr +The bootloader is one level up and shared for both SVC and HYP as I +want the applications loaded to make the changes not the bootloader. + +For now this seems to work switching back to SVC and to secure mode .globl _start _start: + ldr pc,reset_handler + ldr pc,undefined_handler + ldr pc,swi_handler + ldr pc,prefetch_handler + ldr pc,data_handler + ldr pc,hyp_handler + ldr pc,irq_handler + ldr pc,fiq_handler +reset_handler: .word reset +undefined_handler: .word hang +swi_handler: .word smc +prefetch_handler: .word hang +data_handler: .word hang +hyp_handler: .word hang +irq_handler: .word hang +fiq_handler: .word hang + +reset: + ;@ b skip mrs r0,cpsr - and r1,r0,#0x1F - cmp r1,#0x1A - bne skip bic r0,r0,#0x1F orr r0,r0,#0x13 msr spsr_cxsf,r0 add r0,pc,#4 - msr ELR_hyp,r0 ;@ .word 0xe12ef300 - eret ;@ .word 0xe160006e + msr ELR_hyp,r0 + eret +skip: -So I cant access the VBAR or SCR or others yet so more work to be done. + mrc p15, 0, r1, c12, c0, 0 ;@ get vbar + mov r0,#0x8000 + ;@ mov r1,#0x0000 + ldmia r0!,{r2,r3,r4,r5,r6,r7,r8,r9} + stmia r1!,{r2,r3,r4,r5,r6,r7,r8,r9} + ldmia r0!,{r2,r3,r4,r5,r6,r7,r8,r9} + stmia r1!,{r2,r3,r4,r5,r6,r7,r8,r9} + + mov r12,#0 + mcr p15, 0, r12, c7, c10, 1 + dsb + mov r12, #0 + mcr p15, 0, r12, c7, c5, 0 + mov r12, #0 + mcr p15, 0, r12, c7, c5, 6 + dsb + isb + smc #0 + + mrc p15,0,r2,c1,c0,0 + bic r2,#0x1000 + bic r2,#0x0004 + mcr p15,0,r2,c1,c0,0 + + mov sp,#0x8000 + mov r0,pc + bl notmain +hang: b hang + +smc: + mrc p15, 0, r1, c1, c1, 0 + bic r1, r1, #1 + mcr p15, 0, r1, c1, c1, 0 + movs pc, lr diff --git a/boards/pi3/aarch32/SVC/uart05/start.s b/boards/pi3/aarch32/SVC/uart05/start.s index 723c131..3925297 100644 --- a/boards/pi3/aarch32/SVC/uart05/start.s +++ b/boards/pi3/aarch32/SVC/uart05/start.s @@ -4,24 +4,70 @@ .globl _start _start: + ldr pc,reset_handler + ldr pc,undefined_handler + ldr pc,swi_handler + ldr pc,prefetch_handler + ldr pc,data_handler + ldr pc,hyp_handler + ldr pc,irq_handler + ldr pc,fiq_handler +reset_handler: .word reset +undefined_handler: .word hang +swi_handler: .word smc +prefetch_handler: .word hang +data_handler: .word hang +hyp_handler: .word hang +irq_handler: .word hang +fiq_handler: .word hang + +reset: ;@ b skip mrs r0,cpsr - and r1,r0,#0x1F - cmp r1,#0x1A - bne skip bic r0,r0,#0x1F orr r0,r0,#0x13 msr spsr_cxsf,r0 add r0,pc,#4 - msr ELR_hyp,r0 ;@ .word 0xe12ef300 - eret ;@ .word 0xe160006e + msr ELR_hyp,r0 + eret skip: + mrc p15, 0, r1, c12, c0, 0 ;@ get vbar + mov r0,#0x8000 + ;@ mov r1,#0x0000 + ldmia r0!,{r2,r3,r4,r5,r6,r7,r8,r9} + stmia r1!,{r2,r3,r4,r5,r6,r7,r8,r9} + ldmia r0!,{r2,r3,r4,r5,r6,r7,r8,r9} + stmia r1!,{r2,r3,r4,r5,r6,r7,r8,r9} + + mov r12,#0 + mcr p15, 0, r12, c7, c10, 1 + dsb + mov r12, #0 + mcr p15, 0, r12, c7, c5, 0 + mov r12, #0 + mcr p15, 0, r12, c7, c5, 6 + dsb + isb + smc #0 + + mrc p15,0,r2,c1,c0,0 + bic r2,#0x1000 + bic r2,#0x0004 + mcr p15,0,r2,c1,c0,0 + mov sp,#0x8000 + mov r0,pc bl notmain hang: b hang +smc: + mrc p15, 0, r1, c1, c1, 0 + bic r1, r1, #1 + mcr p15, 0, r1, c1, c1, 0 + movs pc, lr + .globl PUT32 PUT32: str r1,[r0] @@ -46,6 +92,20 @@ GETCPSR: mrs r0,cpsr bx lr +.globl GETVBAR +GETVBAR: + mrc p15, 0, r0, c12, c0, 0 + bx lr + +.globl GETSCR +GETSCR: + mcr p15, 0, r0, c1, c1, 0 + bx lr + +.globl GETSCTLR +GETSCTLR: + mrc p15,0,r0,c1,c0,0 + bx lr ;@------------------------------------------------------------------------- diff --git a/boards/pi3/aarch32/SVC/uart05/uart05.c b/boards/pi3/aarch32/SVC/uart05/uart05.c index 056079a..a97620f 100644 --- a/boards/pi3/aarch32/SVC/uart05/uart05.c +++ b/boards/pi3/aarch32/SVC/uart05/uart05.c @@ -17,6 +17,9 @@ extern void dummy ( unsigned int ); extern unsigned int BRANCHTO ( unsigned int ); extern unsigned int GETCPSR ( void ); +extern unsigned int GETVBAR ( void ); +extern unsigned int GETSCTLR ( void ); +extern unsigned int GETSCR ( void ); extern void uart_init ( void ); extern unsigned int uart_lcr ( void ); @@ -39,6 +42,11 @@ int notmain ( void ) hexstring(0x12345678); hexstring(GETPC()); hexstring(GETCPSR()); + hexstring(GETVBAR()); + hexstring(GETSCTLR()); + hexstring(GETSCR()); //this one hangs if not in the right mode + hexstring(0x87654321); + return(0); } //------------------------------------------------------------------------- diff --git a/boards/pi3/aarch32/bootloader07/Makefile b/boards/pi3/aarch32/bootloader07/Makefile index 74cc612..dfd8030 100644 --- a/boards/pi3/aarch32/bootloader07/Makefile +++ b/boards/pi3/aarch32/bootloader07/Makefile @@ -31,3 +31,4 @@ kernel7.img : loader vectors.o periph.o bootloader07.o $(ARMGNU)-objcopy bootloader07.elf -O ihex bootloader07.hex $(ARMGNU)-objcopy bootloader07.elf -O binary kernel7.img + diff --git a/boards/pi3/aarch32/bootloader07/README b/boards/pi3/aarch32/bootloader07/README index 388d34b..e113874 100644 --- a/boards/pi3/aarch32/bootloader07/README +++ b/boards/pi3/aarch32/bootloader07/README @@ -3,9 +3,8 @@ See the top level README for information on where to find documentation for the raspberry pi and the ARM processor inside. Also find information on how to load and run these programs. -This example is for the pi3, see other directories for other flavors -of raspberry pi. I want to let the examples switch from HYP to SVC -mode so this bootloader does not make a switch. +This example is for the pi3 in aarch32 bit mode, see other directories +for other flavors of raspberry pi. This is a very simple bootloader. Instead of the sd dance (see top level README), this makes life a bit simpler and greatly reduces @@ -48,4 +47,7 @@ will reset the board, and released allow it to boot again. Then you can use this bootloader and simply press the button to try another program. - +Wow, forgot that the GPU planted bootstrap turns on the caches. And +I was seeing the cache coherency problems with doing that. In theory +I have that fixed, it invalidates I and D and branch prediction +before launching the downloaded code. diff --git a/boards/pi3/aarch32/bootloader07/bootloader07.c b/boards/pi3/aarch32/bootloader07/bootloader07.c index 0b35d9d..5a39a87 100644 --- a/boards/pi3/aarch32/bootloader07/bootloader07.c +++ b/boards/pi3/aarch32/bootloader07/bootloader07.c @@ -13,9 +13,10 @@ extern void PUT16 ( unsigned int, unsigned int ); extern void PUT8 ( unsigned int, unsigned int ); extern unsigned int GET32 ( unsigned int ); extern unsigned int GETPC ( void ); +extern unsigned int GETCPSR ( void ); +extern unsigned int GETSCTLR ( void ); extern void BRANCHTO ( unsigned int ); extern void dummy ( unsigned int ); -extern unsigned int GETCPSR ( void ); extern void uart_init ( void ); extern unsigned int uart_lcr ( void ); @@ -50,6 +51,7 @@ int notmain ( void ) hexstring(0x12345678); hexstring(GETPC()); hexstring(GETCPSR()); + hexstring(GETSCTLR()); uart_send('I'); uart_send('H'); @@ -148,11 +150,16 @@ int notmain ( void ) } case 0x01: { + for(ra=0;ra<20;ra++) hexstring(sum); - state=0; segment=0; sum=0; + data=0; + record_type=0; address=0; + byte_count=0; + + state=0; break; } case 0x02: diff --git a/boards/pi3/aarch32/bootloader07/bootloader07.elf b/boards/pi3/aarch32/bootloader07/bootloader07.elf index 6b7a401..38568ff 100755 Binary files a/boards/pi3/aarch32/bootloader07/bootloader07.elf and b/boards/pi3/aarch32/bootloader07/bootloader07.elf differ diff --git a/boards/pi3/aarch32/bootloader07/bootloader07.hex b/boards/pi3/aarch32/bootloader07/bootloader07.hex index 6741249..d933b7b 100644 --- a/boards/pi3/aarch32/bootloader07/bootloader07.hex +++ b/boards/pi3/aarch32/bootloader07/bootloader07.hex @@ -129055,94 +129055,92 @@ :10FFE0000000000000000000000000000000000011 :10FFF0000000000000000000000000000000000001 :020000040020DA -:1000000002D3A0E3C20000EBFEFFFFEA001080E590 +:1000000002D3A0E3B40000EBFEFFFFEA001080E59E :100010001EFF2FE1B010C0E11EFF2FE10010C0E570 :100020001EFF2FE1000090E51EFF2FE10E00A0E172 -:100030001EFF2FE110FF2FE11EFF2FE100000FE157 -:100040001EFF2FE110402DE908009FE5F4FFFFEBB4 -:100050001040BDE81EFF2FE15450213F10402DE914 -:100060001C009FE5EEFFFFEB010010E3FBFFFF0A22 -:1000700010009FE5EAFFFFEB1040BDE8FF0000E243 -:100080001EFF2FE15450213F4050213F10402DE9E9 -:100090000C009FE5E2FFFFEB1040BDE8010000E22D -:1000A0001EFF2FE15450213F10402DE90040A0E1F8 -:1000B0001C009FE5DAFFFFEB200010E3FBFFFF0AC7 -:1000C0000410A0E10C009FE5CFFFFFEB1040BDE85E -:1000D0001EFF2FE15450213F4050213F10402DE999 -:1000E00010009FE5CEFFFFEB010C10E3FBFFFF1AB2 -:1000F0001040BDE81EFF2FE15450213F70402DE914 -:100100000050A0E12040A0E3044044E23504A0E117 -:100110000F0000E2090050E3370080823000809237 -:10012000E0FFFFEB000054E3F6FFFF1A2000A0E31E -:100130007040BDE8DBFFFFEA10402DE9EEFFFFEB6A -:100140000D00A0E3D7FFFFEB0A00A0E31040BDE8DD -:10015000D4FFFFEA10402DE90110A0E3D4009FE591 -:10016000A9FFFFEB0010A0E3CC009FE5A6FFFFEB8B -:100170000010A0E3C4009FE5A3FFFFEB0310A0E382 -:10018000BC009FE5A0FFFFEB0010A0E3B4009FE5DB -:100190009DFFFFEB0010A0E39C009FE59AFFFFEBA3 -:1001A000C610A0E3A0009FE597FFFFEB9C109FE522 -:1001B0009C009FE594FFFFEB98009FE598FFFFEB05 -:1001C0003F1AC0E3121A81E388009FE58EFFFFEB20 -:1001D0000010A0E380009FE58BFFFFEB0040A0E351 -:1001E0000400A0E1014084E292FFFFEB960054E39B -:1001F000FAFFFF1A0319A0E360009FE582FFFFEBFF -:100200000040A0E30400A0E1014084E289FFFFEB8D -:10021000960054E3FAFFFF1A0010A0E33C009FE5AC -:1002200079FFFFEB0310A0E310009FE576FFFFEBE3 -:100230001040BDE81EFF2FE10450213F4450213FF4 -:100240006050213F4C50213F5050213F4850213FAA -:100250000E0100006850213F0400203F9400203F21 -:100260009800203F10402DE91C409FE5F918A0E3BD -:100270000400A0E164FFFFEB0400A0E10C109FE587 -:1002800061FFFFEB1040BDE81EFF2FE108B4003F07 -:100290000002F90010402DE908009FE560FFFFEB28 -:1002A0001040BDE81EFF2FE120B4003F70402DE953 -:1002B00054409FE50400A0E159FFFFEB4C509FE53F -:1002C0000E16C0E3021681E30400A0E14EFFFFEB2F -:1002D0000500A0E152FFFFEB0E19C0E31C4084E2D1 -:1002E0000500A0E1021981E347FFFFEB0400A0E154 -:1002F0000219A0E344FFFFEB0400A0E10810A0E313 -:1003000041FFFFEB7040BDE81EFF2FE11000203FD2 -:100310000C00203FF0472DE90080A0E3E2FFFFEB57 -:100320008BFFFFEB54029FE582FFFFEB3EFFFFEBED -:1003300080FFFFEB40FFFFEB7EFFFFEB4900A0E3F8 -:1003400058FFFFEB4800A0E356FFFFEB4500A0E39A -:1003500054FFFFEB5800A0E352FFFFEB0D00A0E3BA -:1003600050FFFFEB0A00A0E30890A0E10860A0E1C5 -:100370000850A0E10870A0E10840A0E149FFFFEBB0 -:1003800035FFFFEB3A0050E32B00000A0D0050E36D -:100390000A00501301A0A00300A0A0132900000A26 -:1003A0002030C0E3470053E35000000A013044E22C -:1003B000140053E303F19F97F0FFFFEA2C042000A1 -:1003C0002C042000CC042000CC042000CC0420000D -:1003D000CC042000AC042000740420005004200051 -:1003E0005004200050042000500420004404200049 -:1003F000100420001004200010042000100420002D -:10040000100420001004200010042000100420001C -:10041000390050E3070040820992A0E10F0000E29A -:10042000150054E3099080E14800000A0AFFFFEB41 -:100430003A0050E3014084E2D3FFFF1A0140A0E3F9 -:10044000CEFFFFEA0662A0E10040A0E3CBFFFFEA97 -:10045000390050E3070040820662A0E10F0000E28D -:10046000066080E10668A0E12668A0E1014084E220 -:10047000C2FFFFEA390050E3070040820552A0E1C5 -:100480000F0000E2055080E1FF5005E2010055E356 -:100490002700000A0E40A033B8FFFF3A020055E3E0 -:1004A0000940A0030040A013B4FFFFEA390050E365 -:1004B000070040820552A0E10F0000E2055080E1F4 -:1004C000FF5005E20840A0E3ACFFFFEA390050E32B -:1004D000070040820772A0E10F0000E2077080E190 -:1004E0000778A0E1277886E1014084E2A3FFFFEAD4 -:1004F0000D00A0E3EBFEFFEB2D00A0E3E9FEFFEB18 -:100500002D00A0E3E7FEFFEB0D00A0E3E5FEFFEB0F -:100510000A00A0E3E3FEFFEB0A00A0E3E1FEFFEB2D -:100520000209A0E3C2FEFFEB0A00A0E1F047BDE82C -:100530001EFF2FE10800A0E10080A0E3FDFEFFEB1D -:100540000860A0E10870A0E10840A0E18BFFFFEA8D -:10055000693829E02334A0E1FF3CC3E3699423E038 -:100560000700A0E1088087E00910A0E1A6FEFFEBEC -:10057000088089E0047087E20E40A0E37FFFFFEA75 -:040580007856341263 +:100030001EFF2FE100C0A0E33ACF07EE4FF07FF59F +:1000400000C0A0E315CF07EE00C0A0E3D5CF07EEB8 +:100050004FF07FF56FF07FF510FF2FE11EFF2FE1CE +:1000600000000FE11EFF2FE1100F11EE1EFF2FE128 +:1000700010402DE908009FE5E9FFFFEB1040BDE8C7 +:100080001EFF2FE15450213F10402DE91C009FE539 +:10009000E3FFFFEB010010E3FBFFFF0A10009FE509 +:1000A000DFFFFFEB1040BDE8FF0000E21EFF2FE185 +:1000B0005450213F4050213F10402DE90C009FE556 +:1000C000D7FFFFEB1040BDE8010000E21EFF2FE16B +:1000D0005450213F10402DE90040A0E11C009FE555 +:1000E000CFFFFFEB200010E3FBFFFF0A0410A0E1AD +:1000F0000C009FE5C4FFFFEB1040BDE81EFF2FE1A1 +:100100005450213F4050213F10402DE910009FE501 +:10011000C3FFFFEB010C10E3FBFFFF1A1040BDE82B +:100120001EFF2FE15450213F70402DE90050A0E107 +:100130002040A0E3044044E23504A0E10F0000E2C7 +:10014000090050E33700808230008092E0FFFFEB2F +:10015000000054E3F6FFFF1A2000A0E37040BDE862 +:10016000DBFFFFEA10402DE9EEFFFFEB0D00A0E3FF +:10017000D7FFFFEB0A00A0E31040BDE8D4FFFFEA81 +:1001800010402DE90110A0E3D4009FE59EFFFFEB96 +:100190000010A0E3CC009FE59BFFFFEB0010A0E365 +:1001A000C4009FE598FFFFEB0310A0E3BC009FE5B0 +:1001B00095FFFFEB0010A0E3B4009FE592FFFFEB7B +:1001C0000010A0E39C009FE58FFFFFEBC610A0E3AB +:1001D000A0009FE58CFFFFEB9C109FE59C009FE536 +:1001E00089FFFFEB98009FE58DFFFFEB3F1AC0E30F +:1001F000121A81E388009FE583FFFFEB0010A0E364 +:1002000080009FE580FFFFEB0040A0E30400A0E139 +:10021000014084E290FFFFEB960054E3FAFFFF1ADF +:100220000319A0E360009FE577FFFFEB0040A0E328 +:100230000400A0E1014084E287FFFFEB960054E355 +:10024000FAFFFF1A0010A0E33C009FE56EFFFFEBF2 +:100250000310A0E310009FE56BFFFFEB1040BDE82B +:100260001EFF2FE10450213F4450213F6050213FA9 +:100270004C50213F5050213F4850213F0E0100007B +:100280006850213F0400203F9400203F9800203F09 +:1002900010402DE91C409FE5F918A0E30400A0E1FF +:1002A00059FFFFEB0400A0E10C109FE556FFFFEBA8 +:1002B0001040BDE81EFF2FE108B4003F0002F90026 +:1002C00010402DE908009FE555FFFFEB1040BDE809 +:1002D0001EFF2FE120B4003F1EFF2FE1F0472DE964 +:1002E0000070A0E3FBFFFFEBA4FFFFEB6C029FE5B8 +:1002F0009BFFFFEB4CFFFFEB99FFFFEB57FFFFEB83 +:1003000097FFFFEB57FFFFEB95FFFFEB4900A0E3E3 +:100310006FFFFFEB4800A0E36DFFFFEB4500A0E39C +:100320006BFFFFEB5800A0E369FFFFEB0D00A0E3BC +:1003300067FFFFEB0A00A0E30790A0E10760A0E1E0 +:100340000750A0E10780A0E10740A0E160FFFFEBBC +:100350004CFFFFEB3A0050E32B00000A0A0050E389 +:100360000D00501301A0A00300A0A0132900000A53 +:100370002030C0E3470053E35000000A013044E25C +:10038000140053E303F19F97F0FFFFEAFC03200002 +:10039000FC0320009C0420009C0420009C042000FE +:1003A0009C0420007C042000440420002004200041 +:1003B0002004200020042000200420001404200039 +:1003C000E0032000E0032000E0032000E003200021 +:1003D000E0032000E0032000E0032000E003200011 +:1003E000390050E3070040820992A0E10F0000E2CB +:1003F000150054E3099080E14C00000A21FFFFEB57 +:100400003A0050E3014084E2D3FFFF1A0140A0E329 +:10041000CEFFFFEA0662A0E10040A0E3CBFFFFEAC7 +:10042000390050E3070040820662A0E10F0000E2BD +:10043000066080E10668A0E12668A0E1014084E250 +:10044000C2FFFFEA390050E3070040820552A0E1F5 +:100450000F0000E2055080E1FF5005E2010055E386 +:100460002700000A0E40A033B8FFFF3A020055E310 +:100470000940A0030040A013B4FFFFEA390050E395 +:10048000070040820552A0E10F0000E2055080E124 +:10049000FF5005E20840A0E3ACFFFFEA390050E35B +:1004A000070040820882A0E10F0000E2088080E19E +:1004B0000888A0E1288886E1014084E2A3FFFFEAE2 +:1004C0000D00A0E302FFFFEB2D00A0E300FFFFEB18 +:1004D0002D00A0E3FEFEFFEB0D00A0E3FCFEFFEB12 +:1004E0000A00A0E3FAFEFFEB0A00A0E3F8FEFFEB30 +:1004F0000209A0E3CEFEFFEB0A00A0E1F047BDE851 +:100500001EFF2FE11440A0E30700A0E114FFFFEB62 +:10051000014054E2FBFFFF1A0470A0E10490A0E147 +:100520000460A0E10450A0E10480A0E187FFFFEA9D +:10053000693829E02334A0E1FF3CC3E3699423E058 +:100540000800A0E1077088E00910A0E1AEFEFFEB13 +:10055000077089E0048088E20E40A0E37BFFFFEA99 +:040560007856341283 :040000030000800079 :00000001FF diff --git a/boards/pi3/aarch32/bootloader07/bootloader07.list b/boards/pi3/aarch32/bootloader07/bootloader07.list index a735ff9..7e37d62 100644 --- a/boards/pi3/aarch32/bootloader07/bootloader07.list +++ b/boards/pi3/aarch32/bootloader07/bootloader07.list @@ -10,7 +10,7 @@ Disassembly of section .text: 00200000 : 200000: e3a0d302 mov sp, #134217728 ; 0x8000000 - 200004: eb0000c2 bl 200314 + 200004: eb0000b4 bl 2002dc 00200008 : 200008: eafffffe b 200008 @@ -36,374 +36,368 @@ Disassembly of section .text: 200030: e12fff1e bx lr 00200034 : - 200034: e12fff10 bx r0 + 200034: e3a0c000 mov ip, #0 + 200038: ee07cf3a mcr 15, 0, ip, cr7, cr10, {1} + 20003c: f57ff04f dsb sy + 200040: e3a0c000 mov ip, #0 + 200044: ee07cf15 mcr 15, 0, ip, cr7, cr5, {0} + 200048: e3a0c000 mov ip, #0 + 20004c: ee07cfd5 mcr 15, 0, ip, cr7, cr5, {6} + 200050: f57ff04f dsb sy + 200054: f57ff06f isb sy + 200058: e12fff10 bx r0 -00200038 : - 200038: e12fff1e bx lr +0020005c : + 20005c: e12fff1e bx lr -0020003c : - 20003c: e10f0000 mrs r0, CPSR - 200040: e12fff1e bx lr +00200060 : + 200060: e10f0000 mrs r0, CPSR + 200064: e12fff1e bx lr -00200044 : - 200044: e92d4010 push {r4, lr} - 200048: e59f0008 ldr r0, [pc, #8] ; 200058 - 20004c: ebfffff4 bl 200024 - 200050: e8bd4010 pop {r4, lr} - 200054: e12fff1e bx lr - 200058: 3f215054 svccc 0x00215054 +00200068 : + 200068: ee110f10 mrc 15, 0, r0, cr1, cr0, {0} + 20006c: e12fff1e bx lr -0020005c : - 20005c: e92d4010 push {r4, lr} - 200060: e59f001c ldr r0, [pc, #28] ; 200084 - 200064: ebffffee bl 200024 - 200068: e3100001 tst r0, #1 - 20006c: 0afffffb beq 200060 - 200070: e59f0010 ldr r0, [pc, #16] ; 200088 - 200074: ebffffea bl 200024 - 200078: e8bd4010 pop {r4, lr} - 20007c: e20000ff and r0, r0, #255 ; 0xff +00200070 : + 200070: e92d4010 push {r4, lr} + 200074: e59f0008 ldr r0, [pc, #8] ; 200084 + 200078: ebffffe9 bl 200024 + 20007c: e8bd4010 pop {r4, lr} 200080: e12fff1e bx lr 200084: 3f215054 svccc 0x00215054 - 200088: 3f215040 svccc 0x00215040 -0020008c : - 20008c: e92d4010 push {r4, lr} - 200090: e59f000c ldr r0, [pc, #12] ; 2000a4 - 200094: ebffffe2 bl 200024 - 200098: e8bd4010 pop {r4, lr} - 20009c: e2000001 and r0, r0, #1 - 2000a0: e12fff1e bx lr - 2000a4: 3f215054 svccc 0x00215054 +00200088 : + 200088: e92d4010 push {r4, lr} + 20008c: e59f001c ldr r0, [pc, #28] ; 2000b0 + 200090: ebffffe3 bl 200024 + 200094: e3100001 tst r0, #1 + 200098: 0afffffb beq 20008c + 20009c: e59f0010 ldr r0, [pc, #16] ; 2000b4 + 2000a0: ebffffdf bl 200024 + 2000a4: e8bd4010 pop {r4, lr} + 2000a8: e20000ff and r0, r0, #255 ; 0xff + 2000ac: e12fff1e bx lr + 2000b0: 3f215054 svccc 0x00215054 + 2000b4: 3f215040 svccc 0x00215040 -002000a8 : - 2000a8: e92d4010 push {r4, lr} - 2000ac: e1a04000 mov r4, r0 - 2000b0: e59f001c ldr r0, [pc, #28] ; 2000d4 - 2000b4: ebffffda bl 200024 - 2000b8: e3100020 tst r0, #32 - 2000bc: 0afffffb beq 2000b0 - 2000c0: e1a01004 mov r1, r4 - 2000c4: e59f000c ldr r0, [pc, #12] ; 2000d8 - 2000c8: ebffffcf bl 20000c - 2000cc: e8bd4010 pop {r4, lr} - 2000d0: e12fff1e bx lr - 2000d4: 3f215054 svccc 0x00215054 - 2000d8: 3f215040 svccc 0x00215040 +002000b8 : + 2000b8: e92d4010 push {r4, lr} + 2000bc: e59f000c ldr r0, [pc, #12] ; 2000d0 + 2000c0: ebffffd7 bl 200024 + 2000c4: e8bd4010 pop {r4, lr} + 2000c8: e2000001 and r0, r0, #1 + 2000cc: e12fff1e bx lr + 2000d0: 3f215054 svccc 0x00215054 -002000dc : - 2000dc: e92d4010 push {r4, lr} - 2000e0: e59f0010 ldr r0, [pc, #16] ; 2000f8 - 2000e4: ebffffce bl 200024 - 2000e8: e3100c01 tst r0, #256 ; 0x100 - 2000ec: 1afffffb bne 2000e0 - 2000f0: e8bd4010 pop {r4, lr} - 2000f4: e12fff1e bx lr - 2000f8: 3f215054 svccc 0x00215054 +002000d4 : + 2000d4: e92d4010 push {r4, lr} + 2000d8: e1a04000 mov r4, r0 + 2000dc: e59f001c ldr r0, [pc, #28] ; 200100 + 2000e0: ebffffcf bl 200024 + 2000e4: e3100020 tst r0, #32 + 2000e8: 0afffffb beq 2000dc + 2000ec: e1a01004 mov r1, r4 + 2000f0: e59f000c ldr r0, [pc, #12] ; 200104 + 2000f4: ebffffc4 bl 20000c + 2000f8: e8bd4010 pop {r4, lr} + 2000fc: e12fff1e bx lr + 200100: 3f215054 svccc 0x00215054 + 200104: 3f215040 svccc 0x00215040 -002000fc : - 2000fc: e92d4070 push {r4, r5, r6, lr} - 200100: e1a05000 mov r5, r0 - 200104: e3a04020 mov r4, #32 - 200108: e2444004 sub r4, r4, #4 - 20010c: e1a00435 lsr r0, r5, r4 - 200110: e200000f and r0, r0, #15 - 200114: e3500009 cmp r0, #9 - 200118: 82800037 addhi r0, r0, #55 ; 0x37 - 20011c: 92800030 addls r0, r0, #48 ; 0x30 - 200120: ebffffe0 bl 2000a8 - 200124: e3540000 cmp r4, #0 - 200128: 1afffff6 bne 200108 - 20012c: e3a00020 mov r0, #32 - 200130: e8bd4070 pop {r4, r5, r6, lr} - 200134: eaffffdb b 2000a8 +00200108 : + 200108: e92d4010 push {r4, lr} + 20010c: e59f0010 ldr r0, [pc, #16] ; 200124 + 200110: ebffffc3 bl 200024 + 200114: e3100c01 tst r0, #256 ; 0x100 + 200118: 1afffffb bne 20010c + 20011c: e8bd4010 pop {r4, lr} + 200120: e12fff1e bx lr + 200124: 3f215054 svccc 0x00215054 -00200138 : - 200138: e92d4010 push {r4, lr} - 20013c: ebffffee bl 2000fc - 200140: e3a0000d mov r0, #13 - 200144: ebffffd7 bl 2000a8 - 200148: e3a0000a mov r0, #10 - 20014c: e8bd4010 pop {r4, lr} - 200150: eaffffd4 b 2000a8 +00200128 : + 200128: e92d4070 push {r4, r5, r6, lr} + 20012c: e1a05000 mov r5, r0 + 200130: e3a04020 mov r4, #32 + 200134: e2444004 sub r4, r4, #4 + 200138: e1a00435 lsr r0, r5, r4 + 20013c: e200000f and r0, r0, #15 + 200140: e3500009 cmp r0, #9 + 200144: 82800037 addhi r0, r0, #55 ; 0x37 + 200148: 92800030 addls r0, r0, #48 ; 0x30 + 20014c: ebffffe0 bl 2000d4 + 200150: e3540000 cmp r4, #0 + 200154: 1afffff6 bne 200134 + 200158: e3a00020 mov r0, #32 + 20015c: e8bd4070 pop {r4, r5, r6, lr} + 200160: eaffffdb b 2000d4 -00200154 : - 200154: e92d4010 push {r4, lr} - 200158: e3a01001 mov r1, #1 - 20015c: e59f00d4 ldr r0, [pc, #212] ; 200238 - 200160: ebffffa9 bl 20000c - 200164: e3a01000 mov r1, #0 - 200168: e59f00cc ldr r0, [pc, #204] ; 20023c - 20016c: ebffffa6 bl 20000c - 200170: e3a01000 mov r1, #0 - 200174: e59f00c4 ldr r0, [pc, #196] ; 200240 - 200178: ebffffa3 bl 20000c - 20017c: e3a01003 mov r1, #3 - 200180: e59f00bc ldr r0, [pc, #188] ; 200244 - 200184: ebffffa0 bl 20000c - 200188: e3a01000 mov r1, #0 - 20018c: e59f00b4 ldr r0, [pc, #180] ; 200248 - 200190: ebffff9d bl 20000c - 200194: e3a01000 mov r1, #0 - 200198: e59f009c ldr r0, [pc, #156] ; 20023c - 20019c: ebffff9a bl 20000c - 2001a0: e3a010c6 mov r1, #198 ; 0xc6 - 2001a4: e59f00a0 ldr r0, [pc, #160] ; 20024c - 2001a8: ebffff97 bl 20000c - 2001ac: e59f109c ldr r1, [pc, #156] ; 200250 - 2001b0: e59f009c ldr r0, [pc, #156] ; 200254 - 2001b4: ebffff94 bl 20000c - 2001b8: e59f0098 ldr r0, [pc, #152] ; 200258 - 2001bc: ebffff98 bl 200024 - 2001c0: e3c01a3f bic r1, r0, #258048 ; 0x3f000 - 2001c4: e3811a12 orr r1, r1, #73728 ; 0x12000 - 2001c8: e59f0088 ldr r0, [pc, #136] ; 200258 - 2001cc: ebffff8e bl 20000c - 2001d0: e3a01000 mov r1, #0 - 2001d4: e59f0080 ldr r0, [pc, #128] ; 20025c - 2001d8: ebffff8b bl 20000c - 2001dc: e3a04000 mov r4, #0 - 2001e0: e1a00004 mov r0, r4 - 2001e4: e2844001 add r4, r4, #1 - 2001e8: ebffff92 bl 200038 - 2001ec: e3540096 cmp r4, #150 ; 0x96 - 2001f0: 1afffffa bne 2001e0 - 2001f4: e3a01903 mov r1, #49152 ; 0xc000 - 2001f8: e59f0060 ldr r0, [pc, #96] ; 200260 - 2001fc: ebffff82 bl 20000c - 200200: e3a04000 mov r4, #0 - 200204: e1a00004 mov r0, r4 - 200208: e2844001 add r4, r4, #1 - 20020c: ebffff89 bl 200038 - 200210: e3540096 cmp r4, #150 ; 0x96 - 200214: 1afffffa bne 200204 - 200218: e3a01000 mov r1, #0 - 20021c: e59f003c ldr r0, [pc, #60] ; 200260 - 200220: ebffff79 bl 20000c - 200224: e3a01003 mov r1, #3 - 200228: e59f0010 ldr r0, [pc, #16] ; 200240 - 20022c: ebffff76 bl 20000c - 200230: e8bd4010 pop {r4, lr} - 200234: e12fff1e bx lr - 200238: 3f215004 svccc 0x00215004 - 20023c: 3f215044 svccc 0x00215044 - 200240: 3f215060 svccc 0x00215060 - 200244: 3f21504c svccc 0x0021504c - 200248: 3f215050 svccc 0x00215050 - 20024c: 3f215048 svccc 0x00215048 - 200250: 0000010e andeq r0, r0, lr, lsl #2 - 200254: 3f215068 svccc 0x00215068 - 200258: 3f200004 svccc 0x00200004 - 20025c: 3f200094 svccc 0x00200094 - 200260: 3f200098 svccc 0x00200098 +00200164 : + 200164: e92d4010 push {r4, lr} + 200168: ebffffee bl 200128 + 20016c: e3a0000d mov r0, #13 + 200170: ebffffd7 bl 2000d4 + 200174: e3a0000a mov r0, #10 + 200178: e8bd4010 pop {r4, lr} + 20017c: eaffffd4 b 2000d4 -00200264 : - 200264: e92d4010 push {r4, lr} - 200268: e59f401c ldr r4, [pc, #28] ; 20028c - 20026c: e3a018f9 mov r1, #16318464 ; 0xf90000 - 200270: e1a00004 mov r0, r4 - 200274: ebffff64 bl 20000c - 200278: e1a00004 mov r0, r4 - 20027c: e59f100c ldr r1, [pc, #12] ; 200290 - 200280: ebffff61 bl 20000c - 200284: e8bd4010 pop {r4, lr} - 200288: e12fff1e bx lr - 20028c: 3f00b408 svccc 0x0000b408 - 200290: 00f90200 rscseq r0, r9, r0, lsl #4 +00200180 : + 200180: e92d4010 push {r4, lr} + 200184: e3a01001 mov r1, #1 + 200188: e59f00d4 ldr r0, [pc, #212] ; 200264 + 20018c: ebffff9e bl 20000c + 200190: e3a01000 mov r1, #0 + 200194: e59f00cc ldr r0, [pc, #204] ; 200268 + 200198: ebffff9b bl 20000c + 20019c: e3a01000 mov r1, #0 + 2001a0: e59f00c4 ldr r0, [pc, #196] ; 20026c + 2001a4: ebffff98 bl 20000c + 2001a8: e3a01003 mov r1, #3 + 2001ac: e59f00bc ldr r0, [pc, #188] ; 200270 + 2001b0: ebffff95 bl 20000c + 2001b4: e3a01000 mov r1, #0 + 2001b8: e59f00b4 ldr r0, [pc, #180] ; 200274 + 2001bc: ebffff92 bl 20000c + 2001c0: e3a01000 mov r1, #0 + 2001c4: e59f009c ldr r0, [pc, #156] ; 200268 + 2001c8: ebffff8f bl 20000c + 2001cc: e3a010c6 mov r1, #198 ; 0xc6 + 2001d0: e59f00a0 ldr r0, [pc, #160] ; 200278 + 2001d4: ebffff8c bl 20000c + 2001d8: e59f109c ldr r1, [pc, #156] ; 20027c + 2001dc: e59f009c ldr r0, [pc, #156] ; 200280 + 2001e0: ebffff89 bl 20000c + 2001e4: e59f0098 ldr r0, [pc, #152] ; 200284 + 2001e8: ebffff8d bl 200024 + 2001ec: e3c01a3f bic r1, r0, #258048 ; 0x3f000 + 2001f0: e3811a12 orr r1, r1, #73728 ; 0x12000 + 2001f4: e59f0088 ldr r0, [pc, #136] ; 200284 + 2001f8: ebffff83 bl 20000c + 2001fc: e3a01000 mov r1, #0 + 200200: e59f0080 ldr r0, [pc, #128] ; 200288 + 200204: ebffff80 bl 20000c + 200208: e3a04000 mov r4, #0 + 20020c: e1a00004 mov r0, r4 + 200210: e2844001 add r4, r4, #1 + 200214: ebffff90 bl 20005c + 200218: e3540096 cmp r4, #150 ; 0x96 + 20021c: 1afffffa bne 20020c + 200220: e3a01903 mov r1, #49152 ; 0xc000 + 200224: e59f0060 ldr r0, [pc, #96] ; 20028c + 200228: ebffff77 bl 20000c + 20022c: e3a04000 mov r4, #0 + 200230: e1a00004 mov r0, r4 + 200234: e2844001 add r4, r4, #1 + 200238: ebffff87 bl 20005c + 20023c: e3540096 cmp r4, #150 ; 0x96 + 200240: 1afffffa bne 200230 + 200244: e3a01000 mov r1, #0 + 200248: e59f003c ldr r0, [pc, #60] ; 20028c + 20024c: ebffff6e bl 20000c + 200250: e3a01003 mov r1, #3 + 200254: e59f0010 ldr r0, [pc, #16] ; 20026c + 200258: ebffff6b bl 20000c + 20025c: e8bd4010 pop {r4, lr} + 200260: e12fff1e bx lr + 200264: 3f215004 svccc 0x00215004 + 200268: 3f215044 svccc 0x00215044 + 20026c: 3f215060 svccc 0x00215060 + 200270: 3f21504c svccc 0x0021504c + 200274: 3f215050 svccc 0x00215050 + 200278: 3f215048 svccc 0x00215048 + 20027c: 0000010e andeq r0, r0, lr, lsl #2 + 200280: 3f215068 svccc 0x00215068 + 200284: 3f200004 svccc 0x00200004 + 200288: 3f200094 svccc 0x00200094 + 20028c: 3f200098 svccc 0x00200098 -00200294 : - 200294: e92d4010 push {r4, lr} - 200298: e59f0008 ldr r0, [pc, #8] ; 2002a8 - 20029c: ebffff60 bl 200024 - 2002a0: e8bd4010 pop {r4, lr} - 2002a4: e12fff1e bx lr - 2002a8: 3f00b420 svccc 0x0000b420 +00200290 : + 200290: e92d4010 push {r4, lr} + 200294: e59f401c ldr r4, [pc, #28] ; 2002b8 + 200298: e3a018f9 mov r1, #16318464 ; 0xf90000 + 20029c: e1a00004 mov r0, r4 + 2002a0: ebffff59 bl 20000c + 2002a4: e1a00004 mov r0, r4 + 2002a8: e59f100c ldr r1, [pc, #12] ; 2002bc + 2002ac: ebffff56 bl 20000c + 2002b0: e8bd4010 pop {r4, lr} + 2002b4: e12fff1e bx lr + 2002b8: 3f00b408 svccc 0x0000b408 + 2002bc: 00f90200 rscseq r0, r9, r0, lsl #4 -002002ac : - 2002ac: e92d4070 push {r4, r5, r6, lr} - 2002b0: e59f4054 ldr r4, [pc, #84] ; 20030c - 2002b4: e1a00004 mov r0, r4 - 2002b8: ebffff59 bl 200024 - 2002bc: e59f504c ldr r5, [pc, #76] ; 200310 - 2002c0: e3c0160e bic r1, r0, #14680064 ; 0xe00000 - 2002c4: e3811602 orr r1, r1, #2097152 ; 0x200000 - 2002c8: e1a00004 mov r0, r4 - 2002cc: ebffff4e bl 20000c - 2002d0: e1a00005 mov r0, r5 - 2002d4: ebffff52 bl 200024 - 2002d8: e3c0190e bic r1, r0, #229376 ; 0x38000 - 2002dc: e284401c add r4, r4, #28 - 2002e0: e1a00005 mov r0, r5 - 2002e4: e3811902 orr r1, r1, #32768 ; 0x8000 - 2002e8: ebffff47 bl 20000c - 2002ec: e1a00004 mov r0, r4 - 2002f0: e3a01902 mov r1, #32768 ; 0x8000 - 2002f4: ebffff44 bl 20000c - 2002f8: e1a00004 mov r0, r4 - 2002fc: e3a01008 mov r1, #8 - 200300: ebffff41 bl 20000c - 200304: e8bd4070 pop {r4, r5, r6, lr} - 200308: e12fff1e bx lr - 20030c: 3f200010 svccc 0x00200010 - 200310: 3f20000c svccc 0x0020000c +002002c0 : + 2002c0: e92d4010 push {r4, lr} + 2002c4: e59f0008 ldr r0, [pc, #8] ; 2002d4 + 2002c8: ebffff55 bl 200024 + 2002cc: e8bd4010 pop {r4, lr} + 2002d0: e12fff1e bx lr + 2002d4: 3f00b420 svccc 0x0000b420 -00200314 : - 200314: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} - 200318: e3a08000 mov r8, #0 - 20031c: ebffffe2 bl 2002ac - 200320: ebffff8b bl 200154 - 200324: e59f0254 ldr r0, [pc, #596] ; 200580 - 200328: ebffff82 bl 200138 - 20032c: ebffff3e bl 20002c - 200330: ebffff80 bl 200138 - 200334: ebffff40 bl 20003c - 200338: ebffff7e bl 200138 - 20033c: e3a00049 mov r0, #73 ; 0x49 - 200340: ebffff58 bl 2000a8 - 200344: e3a00048 mov r0, #72 ; 0x48 - 200348: ebffff56 bl 2000a8 - 20034c: e3a00045 mov r0, #69 ; 0x45 - 200350: ebffff54 bl 2000a8 - 200354: e3a00058 mov r0, #88 ; 0x58 - 200358: ebffff52 bl 2000a8 - 20035c: e3a0000d mov r0, #13 - 200360: ebffff50 bl 2000a8 - 200364: e3a0000a mov r0, #10 - 200368: e1a09008 mov r9, r8 - 20036c: e1a06008 mov r6, r8 - 200370: e1a05008 mov r5, r8 - 200374: e1a07008 mov r7, r8 - 200378: e1a04008 mov r4, r8 - 20037c: ebffff49 bl 2000a8 - 200380: ebffff35 bl 20005c - 200384: e350003a cmp r0, #58 ; 0x3a - 200388: 0a00002b beq 20043c - 20038c: e350000d cmp r0, #13 - 200390: 1350000a cmpne r0, #10 - 200394: 03a0a001 moveq sl, #1 - 200398: 13a0a000 movne sl, #0 - 20039c: 0a000029 beq 200448 - 2003a0: e3c03020 bic r3, r0, #32 - 2003a4: e3530047 cmp r3, #71 ; 0x47 - 2003a8: 0a000050 beq 2004f0 - 2003ac: e2443001 sub r3, r4, #1 - 2003b0: e3530014 cmp r3, #20 - 2003b4: 979ff103 ldrls pc, [pc, r3, lsl #2] - 2003b8: eafffff0 b 200380 - 2003bc: 0020042c eoreq r0, r0, ip, lsr #8 - 2003c0: 0020042c eoreq r0, r0, ip, lsr #8 - 2003c4: 002004cc eoreq r0, r0, ip, asr #9 - 2003c8: 002004cc eoreq r0, r0, ip, asr #9 - 2003cc: 002004cc eoreq r0, r0, ip, asr #9 - 2003d0: 002004cc eoreq r0, r0, ip, asr #9 - 2003d4: 002004ac eoreq r0, r0, ip, lsr #9 - 2003d8: 00200474 eoreq r0, r0, r4, ror r4 - 2003dc: 00200450 eoreq r0, r0, r0, asr r4 - 2003e0: 00200450 eoreq r0, r0, r0, asr r4 - 2003e4: 00200450 eoreq r0, r0, r0, asr r4 - 2003e8: 00200450 eoreq r0, r0, r0, asr r4 - 2003ec: 00200444 eoreq r0, r0, r4, asr #8 - 2003f0: 00200410 eoreq r0, r0, r0, lsl r4 - 2003f4: 00200410 eoreq r0, r0, r0, lsl r4 - 2003f8: 00200410 eoreq r0, r0, r0, lsl r4 - 2003fc: 00200410 eoreq r0, r0, r0, lsl r4 - 200400: 00200410 eoreq r0, r0, r0, lsl r4 - 200404: 00200410 eoreq r0, r0, r0, lsl r4 - 200408: 00200410 eoreq r0, r0, r0, lsl r4 - 20040c: 00200410 eoreq r0, r0, r0, lsl r4 - 200410: e3500039 cmp r0, #57 ; 0x39 - 200414: 82400007 subhi r0, r0, #7 - 200418: e1a09209 lsl r9, r9, #4 - 20041c: e200000f and r0, r0, #15 - 200420: e3540015 cmp r4, #21 - 200424: e1809009 orr r9, r0, r9 - 200428: 0a000048 beq 200550 - 20042c: ebffff0a bl 20005c - 200430: e350003a cmp r0, #58 ; 0x3a - 200434: e2844001 add r4, r4, #1 - 200438: 1affffd3 bne 20038c - 20043c: e3a04001 mov r4, #1 - 200440: eaffffce b 200380 - 200444: e1a06206 lsl r6, r6, #4 - 200448: e3a04000 mov r4, #0 - 20044c: eaffffcb b 200380 - 200450: e3500039 cmp r0, #57 ; 0x39 - 200454: 82400007 subhi r0, r0, #7 - 200458: e1a06206 lsl r6, r6, #4 - 20045c: e200000f and r0, r0, #15 - 200460: e1806006 orr r6, r0, r6 - 200464: e1a06806 lsl r6, r6, #16 - 200468: e1a06826 lsr r6, r6, #16 - 20046c: e2844001 add r4, r4, #1 - 200470: eaffffc2 b 200380 - 200474: e3500039 cmp r0, #57 ; 0x39 - 200478: 82400007 subhi r0, r0, #7 - 20047c: e1a05205 lsl r5, r5, #4 - 200480: e200000f and r0, r0, #15 - 200484: e1805005 orr r5, r0, r5 - 200488: e20550ff and r5, r5, #255 ; 0xff - 20048c: e3550001 cmp r5, #1 - 200490: 0a000027 beq 200534 - 200494: 33a0400e movcc r4, #14 - 200498: 3affffb8 bcc 200380 - 20049c: e3550002 cmp r5, #2 - 2004a0: 03a04009 moveq r4, #9 - 2004a4: 13a04000 movne r4, #0 - 2004a8: eaffffb4 b 200380 - 2004ac: e3500039 cmp r0, #57 ; 0x39 - 2004b0: 82400007 subhi r0, r0, #7 - 2004b4: e1a05205 lsl r5, r5, #4 - 2004b8: e200000f and r0, r0, #15 - 2004bc: e1805005 orr r5, r0, r5 - 2004c0: e20550ff and r5, r5, #255 ; 0xff - 2004c4: e3a04008 mov r4, #8 - 2004c8: eaffffac b 200380 - 2004cc: e3500039 cmp r0, #57 ; 0x39 - 2004d0: 82400007 subhi r0, r0, #7 - 2004d4: e1a07207 lsl r7, r7, #4 - 2004d8: e200000f and r0, r0, #15 - 2004dc: e1807007 orr r7, r0, r7 - 2004e0: e1a07807 lsl r7, r7, #16 - 2004e4: e1867827 orr r7, r6, r7, lsr #16 - 2004e8: e2844001 add r4, r4, #1 - 2004ec: eaffffa3 b 200380 - 2004f0: e3a0000d mov r0, #13 - 2004f4: ebfffeeb bl 2000a8 - 2004f8: e3a0002d mov r0, #45 ; 0x2d - 2004fc: ebfffee9 bl 2000a8 - 200500: e3a0002d mov r0, #45 ; 0x2d - 200504: ebfffee7 bl 2000a8 - 200508: e3a0000d mov r0, #13 - 20050c: ebfffee5 bl 2000a8 - 200510: e3a0000a mov r0, #10 - 200514: ebfffee3 bl 2000a8 - 200518: e3a0000a mov r0, #10 - 20051c: ebfffee1 bl 2000a8 - 200520: e3a00902 mov r0, #32768 ; 0x8000 - 200524: ebfffec2 bl 200034 - 200528: e1a0000a mov r0, sl - 20052c: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr} - 200530: e12fff1e bx lr - 200534: e1a00008 mov r0, r8 - 200538: e3a08000 mov r8, #0 - 20053c: ebfffefd bl 200138 - 200540: e1a06008 mov r6, r8 - 200544: e1a07008 mov r7, r8 - 200548: e1a04008 mov r4, r8 - 20054c: eaffff8b b 200380 - 200550: e0293869 eor r3, r9, r9, ror #16 - 200554: e1a03423 lsr r3, r3, #8 - 200558: e3c33cff bic r3, r3, #65280 ; 0xff00 - 20055c: e0239469 eor r9, r3, r9, ror #8 - 200560: e1a00007 mov r0, r7 - 200564: e0878008 add r8, r7, r8 - 200568: e1a01009 mov r1, r9 - 20056c: ebfffea6 bl 20000c - 200570: e0898008 add r8, r9, r8 - 200574: e2877004 add r7, r7, #4 - 200578: e3a0400e mov r4, #14 - 20057c: eaffff7f b 200380 - 200580: 12345678 eorsne r5, r4, #120, 12 ; 0x7800000 +002002d8 : + 2002d8: e12fff1e bx lr + +002002dc : + 2002dc: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr} + 2002e0: e3a07000 mov r7, #0 + 2002e4: ebfffffb bl 2002d8 + 2002e8: ebffffa4 bl 200180 + 2002ec: e59f026c ldr r0, [pc, #620] ; 200560 + 2002f0: ebffff9b bl 200164 + 2002f4: ebffff4c bl 20002c + 2002f8: ebffff99 bl 200164 + 2002fc: ebffff57 bl 200060 + 200300: ebffff97 bl 200164 + 200304: ebffff57 bl 200068 + 200308: ebffff95 bl 200164 + 20030c: e3a00049 mov r0, #73 ; 0x49 + 200310: ebffff6f bl 2000d4 + 200314: e3a00048 mov r0, #72 ; 0x48 + 200318: ebffff6d bl 2000d4 + 20031c: e3a00045 mov r0, #69 ; 0x45 + 200320: ebffff6b bl 2000d4 + 200324: e3a00058 mov r0, #88 ; 0x58 + 200328: ebffff69 bl 2000d4 + 20032c: e3a0000d mov r0, #13 + 200330: ebffff67 bl 2000d4 + 200334: e3a0000a mov r0, #10 + 200338: e1a09007 mov r9, r7 + 20033c: e1a06007 mov r6, r7 + 200340: e1a05007 mov r5, r7 + 200344: e1a08007 mov r8, r7 + 200348: e1a04007 mov r4, r7 + 20034c: ebffff60 bl 2000d4 + 200350: ebffff4c bl 200088 + 200354: e350003a cmp r0, #58 ; 0x3a + 200358: 0a00002b beq 20040c + 20035c: e350000a cmp r0, #10 + 200360: 1350000d cmpne r0, #13 + 200364: 03a0a001 moveq sl, #1 + 200368: 13a0a000 movne sl, #0 + 20036c: 0a000029 beq 200418 + 200370: e3c03020 bic r3, r0, #32 + 200374: e3530047 cmp r3, #71 ; 0x47 + 200378: 0a000050 beq 2004c0 + 20037c: e2443001 sub r3, r4, #1 + 200380: e3530014 cmp r3, #20 + 200384: 979ff103 ldrls pc, [pc, r3, lsl #2] + 200388: eafffff0 b 200350 + 20038c: 002003fc strdeq r0, [r0], -ip ; + 200390: 002003fc strdeq r0, [r0], -ip ; + 200394: 0020049c mlaeq r0, ip, r4, r0 + 200398: 0020049c mlaeq r0, ip, r4, r0 + 20039c: 0020049c mlaeq r0, ip, r4, r0 + 2003a0: 0020049c mlaeq r0, ip, r4, r0 + 2003a4: 0020047c eoreq r0, r0, ip, ror r4 + 2003a8: 00200444 eoreq r0, r0, r4, asr #8 + 2003ac: 00200420 eoreq r0, r0, r0, lsr #8 + 2003b0: 00200420 eoreq r0, r0, r0, lsr #8 + 2003b4: 00200420 eoreq r0, r0, r0, lsr #8 + 2003b8: 00200420 eoreq r0, r0, r0, lsr #8 + 2003bc: 00200414 eoreq r0, r0, r4, lsl r4 + 2003c0: 002003e0 eoreq r0, r0, r0, ror #7 + 2003c4: 002003e0 eoreq r0, r0, r0, ror #7 + 2003c8: 002003e0 eoreq r0, r0, r0, ror #7 + 2003cc: 002003e0 eoreq r0, r0, r0, ror #7 + 2003d0: 002003e0 eoreq r0, r0, r0, ror #7 + 2003d4: 002003e0 eoreq r0, r0, r0, ror #7 + 2003d8: 002003e0 eoreq r0, r0, r0, ror #7 + 2003dc: 002003e0 eoreq r0, r0, r0, ror #7 + 2003e0: e3500039 cmp r0, #57 ; 0x39 + 2003e4: 82400007 subhi r0, r0, #7 + 2003e8: e1a09209 lsl r9, r9, #4 + 2003ec: e200000f and r0, r0, #15 + 2003f0: e3540015 cmp r4, #21 + 2003f4: e1809009 orr r9, r0, r9 + 2003f8: 0a00004c beq 200530 + 2003fc: ebffff21 bl 200088 + 200400: e350003a cmp r0, #58 ; 0x3a + 200404: e2844001 add r4, r4, #1 + 200408: 1affffd3 bne 20035c + 20040c: e3a04001 mov r4, #1 + 200410: eaffffce b 200350 + 200414: e1a06206 lsl r6, r6, #4 + 200418: e3a04000 mov r4, #0 + 20041c: eaffffcb b 200350 + 200420: e3500039 cmp r0, #57 ; 0x39 + 200424: 82400007 subhi r0, r0, #7 + 200428: e1a06206 lsl r6, r6, #4 + 20042c: e200000f and r0, r0, #15 + 200430: e1806006 orr r6, r0, r6 + 200434: e1a06806 lsl r6, r6, #16 + 200438: e1a06826 lsr r6, r6, #16 + 20043c: e2844001 add r4, r4, #1 + 200440: eaffffc2 b 200350 + 200444: e3500039 cmp r0, #57 ; 0x39 + 200448: 82400007 subhi r0, r0, #7 + 20044c: e1a05205 lsl r5, r5, #4 + 200450: e200000f and r0, r0, #15 + 200454: e1805005 orr r5, r0, r5 + 200458: e20550ff and r5, r5, #255 ; 0xff + 20045c: e3550001 cmp r5, #1 + 200460: 0a000027 beq 200504 + 200464: 33a0400e movcc r4, #14 + 200468: 3affffb8 bcc 200350 + 20046c: e3550002 cmp r5, #2 + 200470: 03a04009 moveq r4, #9 + 200474: 13a04000 movne r4, #0 + 200478: eaffffb4 b 200350 + 20047c: e3500039 cmp r0, #57 ; 0x39 + 200480: 82400007 subhi r0, r0, #7 + 200484: e1a05205 lsl r5, r5, #4 + 200488: e200000f and r0, r0, #15 + 20048c: e1805005 orr r5, r0, r5 + 200490: e20550ff and r5, r5, #255 ; 0xff + 200494: e3a04008 mov r4, #8 + 200498: eaffffac b 200350 + 20049c: e3500039 cmp r0, #57 ; 0x39 + 2004a0: 82400007 subhi r0, r0, #7 + 2004a4: e1a08208 lsl r8, r8, #4 + 2004a8: e200000f and r0, r0, #15 + 2004ac: e1808008 orr r8, r0, r8 + 2004b0: e1a08808 lsl r8, r8, #16 + 2004b4: e1868828 orr r8, r6, r8, lsr #16 + 2004b8: e2844001 add r4, r4, #1 + 2004bc: eaffffa3 b 200350 + 2004c0: e3a0000d mov r0, #13 + 2004c4: ebffff02 bl 2000d4 + 2004c8: e3a0002d mov r0, #45 ; 0x2d + 2004cc: ebffff00 bl 2000d4 + 2004d0: e3a0002d mov r0, #45 ; 0x2d + 2004d4: ebfffefe bl 2000d4 + 2004d8: e3a0000d mov r0, #13 + 2004dc: ebfffefc bl 2000d4 + 2004e0: e3a0000a mov r0, #10 + 2004e4: ebfffefa bl 2000d4 + 2004e8: e3a0000a mov r0, #10 + 2004ec: ebfffef8 bl 2000d4 + 2004f0: e3a00902 mov r0, #32768 ; 0x8000 + 2004f4: ebfffece bl 200034 + 2004f8: e1a0000a mov r0, sl + 2004fc: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr} + 200500: e12fff1e bx lr + 200504: e3a04014 mov r4, #20 + 200508: e1a00007 mov r0, r7 + 20050c: ebffff14 bl 200164 + 200510: e2544001 subs r4, r4, #1 + 200514: 1afffffb bne 200508 + 200518: e1a07004 mov r7, r4 + 20051c: e1a09004 mov r9, r4 + 200520: e1a06004 mov r6, r4 + 200524: e1a05004 mov r5, r4 + 200528: e1a08004 mov r8, r4 + 20052c: eaffff87 b 200350 + 200530: e0293869 eor r3, r9, r9, ror #16 + 200534: e1a03423 lsr r3, r3, #8 + 200538: e3c33cff bic r3, r3, #65280 ; 0xff00 + 20053c: e0239469 eor r9, r3, r9, ror #8 + 200540: e1a00008 mov r0, r8 + 200544: e0887007 add r7, r8, r7 + 200548: e1a01009 mov r1, r9 + 20054c: ebfffeae bl 20000c + 200550: e0897007 add r7, r9, r7 + 200554: e2888004 add r8, r8, #4 + 200558: e3a0400e mov r4, #14 + 20055c: eaffff7b b 200350 + 200560: 12345678 eorsne r5, r4, #120, 12 ; 0x7800000 Disassembly of section .ARM.attributes: @@ -413,8 +407,8 @@ Disassembly of section .ARM.attributes: 8: 01006962 tsteq r0, r2, ror #18 c: 00000020 andeq r0, r0, r0, lsr #32 10: 4d524105 ldfmie f4, [r2, #-20] ; 0xffffffec - 14: 54347620 ldrtpl r7, [r4], #-1568 ; 0xfffff9e0 - 18: 08020600 stmdaeq r2, {r9, sl} + 14: 4b367620 blmi d9d89c + 18: 08090600 stmdaeq r9, {r9, sl} 1c: 12010901 andne r0, r1, #16384 ; 0x4000 20: 15011404 strne r1, [r1, #-1028] ; 0xfffffbfc 24: 18031701 stmdane r3, {r0, r8, r9, sl, ip} @@ -424,7 +418,7 @@ Disassembly of section .ARM.attributes: Disassembly of section .comment: 00000000 <.comment>: - 0: 3a434347 bcc 10d0d24 + 0: 3a434347 bcc 10d0d24 4: 4e472820 cdpmi 8, 4, cr2, cr7, cr0, {1} 8: 35202955 strcc r2, [r0, #-2389]! ; 0xfffff6ab c: 302e332e eorcc r3, lr, lr, lsr #6 diff --git a/boards/pi3/aarch32/bootloader07/bootloader07.o b/boards/pi3/aarch32/bootloader07/bootloader07.o index c9d6f66..0ccb4c7 100644 Binary files a/boards/pi3/aarch32/bootloader07/bootloader07.o and b/boards/pi3/aarch32/bootloader07/bootloader07.o differ diff --git a/boards/pi3/aarch32/bootloader07/kernel7.img b/boards/pi3/aarch32/bootloader07/kernel7.img index 74e80c3..738ea8c 100755 Binary files a/boards/pi3/aarch32/bootloader07/kernel7.img and b/boards/pi3/aarch32/bootloader07/kernel7.img differ diff --git a/boards/pi3/aarch32/bootloader07/periph.c b/boards/pi3/aarch32/bootloader07/periph.c index 069d433..98b57c4 100644 --- a/boards/pi3/aarch32/bootloader07/periph.c +++ b/boards/pi3/aarch32/bootloader07/periph.c @@ -138,24 +138,6 @@ unsigned int timer_tick ( void ) //------------------------------------------------------------------------- void leds_off ( void ) { -#define GPFSEL3 0x3F20000C -#define GPFSEL4 0x3F200010 -#define GPSET1 0x3F200020 -#define GPCLR1 0x3F20002C - unsigned int ra; - - ra=GET32(GPFSEL4); - ra&=~(7<<21); - ra|=1<<21; - PUT32(GPFSEL4,ra); - - ra=GET32(GPFSEL3); - ra&=~(7<<15); - ra|=1<<15; - PUT32(GPFSEL3,ra); - - PUT32(GPCLR1,1<<(47-32)); - PUT32(GPCLR1,1<<(35-32)); } //------------------------------------------------------------------------- //------------------------------------------------------------------------- diff --git a/boards/pi3/aarch32/bootloader07/periph.o b/boards/pi3/aarch32/bootloader07/periph.o index 2aa7864..effe43d 100644 Binary files a/boards/pi3/aarch32/bootloader07/periph.o and b/boards/pi3/aarch32/bootloader07/periph.o differ diff --git a/boards/pi3/aarch32/bootloader07/vectors.o b/boards/pi3/aarch32/bootloader07/vectors.o index 5e75fb1..f195fdb 100644 Binary files a/boards/pi3/aarch32/bootloader07/vectors.o and b/boards/pi3/aarch32/bootloader07/vectors.o differ diff --git a/boards/pi3/aarch32/bootloader07/vectors.s b/boards/pi3/aarch32/bootloader07/vectors.s index e4c64a5..90435ad 100644 --- a/boards/pi3/aarch32/bootloader07/vectors.s +++ b/boards/pi3/aarch32/bootloader07/vectors.s @@ -9,6 +9,13 @@ _start: .space 0x200000-0x8004,0 skip: + + ;@ stop caching !!! + ;@ mrc p15,0,r2,c1,c0,0 + ;@ bic r2,#0x1000 + ;@ bic r2,#0x0004 + ;@ mcr p15,0,r2,c1,c0,0 + mov sp,#0x08000000 bl notmain hang: b hang @@ -40,6 +47,15 @@ GETPC: .globl BRANCHTO BRANCHTO: + mov r12,#0 + mcr p15, 0, r12, c7, c10, 1 + dsb + mov r12, #0 + mcr p15, 0, r12, c7, c5, 0 + mov r12, #0 + mcr p15, 0, r12, c7, c5, 6 + dsb + isb bx r0 .globl dummy @@ -51,6 +67,13 @@ GETCPSR: mrs r0,cpsr bx lr +.globl GETSCTLR +GETSCTLR: + mrc p15,0,r0,c1,c0,0 + bx lr + + + ;@------------------------------------------------------------------------- ;@-------------------------------------------------------------------------