From 11e7b38f4be0b2777ac36e5337edac9361a6eb7d Mon Sep 17 00:00:00 2001 From: David Welch Date: Fri, 6 Jul 2012 02:36:01 -0400 Subject: [PATCH] adding two examples that are somewhat position independent, wherever the GPU places this code it will work (so long as it is not too close to zero, and a 4 byte aligned address of course). --- zero_start/Makefile | 53 ++++++++ zero_start/README | 23 ++++ zero_start/blinker05.bin | Bin 0 -> 772 bytes zero_start/blinker05.c | 115 ++++++++++++++++ zero_start/blinker05.elf | Bin 0 -> 34840 bytes zero_start/blinker05.list | 278 ++++++++++++++++++++++++++++++++++++++ zero_start/blinker05.o | Bin 0 -> 1784 bytes zero_start/bvectors.o | Bin 0 -> 1560 bytes zero_start/bvectors.s | 110 +++++++++++++++ zero_start/memmap | 13 ++ zero_start/uart02.bin | Bin 0 -> 784 bytes zero_start/uart02.c | 130 ++++++++++++++++++ zero_start/uart02.elf | Bin 0 -> 34557 bytes zero_start/uart02.list | 262 +++++++++++++++++++++++++++++++++++ zero_start/uart02.o | Bin 0 -> 1936 bytes zero_start/vectors.o | Bin 0 -> 1112 bytes zero_start/vectors.s | 71 ++++++++++ 17 files changed, 1055 insertions(+) create mode 100644 zero_start/Makefile create mode 100644 zero_start/README create mode 100755 zero_start/blinker05.bin create mode 100644 zero_start/blinker05.c create mode 100755 zero_start/blinker05.elf create mode 100644 zero_start/blinker05.list create mode 100644 zero_start/blinker05.o create mode 100644 zero_start/bvectors.o create mode 100644 zero_start/bvectors.s create mode 100644 zero_start/memmap create mode 100755 zero_start/uart02.bin create mode 100644 zero_start/uart02.c create mode 100755 zero_start/uart02.elf create mode 100644 zero_start/uart02.list create mode 100644 zero_start/uart02.o create mode 100644 zero_start/vectors.o create mode 100644 zero_start/vectors.s diff --git a/zero_start/Makefile b/zero_start/Makefile new file mode 100644 index 0000000..a4a1dbb --- /dev/null +++ b/zero_start/Makefile @@ -0,0 +1,53 @@ + +ARMGNU ?= arm-none-eabi + +COPS = -Wall -O2 -nostdlib -nostartfiles -ffreestanding + +all : uart02.bin blinker05.bin + +clean : + rm -f *.o + rm -f *.bin + rm -f *.hex + rm -f *.elf + rm -f *.list + rm -f *.img + rm -f *.bc + rm -f *.clang.opt.s + +vectors.o : vectors.s + $(ARMGNU)-as vectors.s -o vectors.o + +uart02.o : uart02.c + $(ARMGNU)-gcc $(COPS) -c uart02.c -o uart02.o + +uart02.elf : memmap vectors.o uart02.o + $(ARMGNU)-ld vectors.o uart02.o -T memmap -o uart02.elf + $(ARMGNU)-objdump -D uart02.elf > uart02.list + +uart02.bin : uart02.elf + $(ARMGNU)-objcopy uart02.elf -O binary uart02.bin + +uart02.hex : uart02.elf + $(ARMGNU)-objcopy uart02.elf -O ihex uart02.hex + + + + + +bvectors.o : bvectors.s + $(ARMGNU)-as bvectors.s -o bvectors.o + +blinker05.o : blinker05.c + $(ARMGNU)-gcc $(COPS) -c blinker05.c -o blinker05.o + +blinker05.elf : memmap bvectors.o blinker05.o + $(ARMGNU)-ld bvectors.o blinker05.o -T memmap -o blinker05.elf + $(ARMGNU)-objdump -D blinker05.elf > blinker05.list + +blinker05.bin : blinker05.elf + $(ARMGNU)-objcopy blinker05.elf -O binary blinker05.bin + +blinker05.hex : blinker05.elf + $(ARMGNU)-objcopy blinker05.elf -O ihex blinker05.hex + diff --git a/zero_start/README b/zero_start/README new file mode 100644 index 0000000..07164bb --- /dev/null +++ b/zero_start/README @@ -0,0 +1,23 @@ + +See the top level README for information on where to find the +schematic and programmers reference manual for the ARM processor +on the raspberry pi. Also find information on how to load and run +these programs. + +There are two programs here one is blinker05 and the other uart02. +The difference from their originals is the boot code. In attempt +to not care about where the gpu loads our program (so long as it is +not really close to zero), the startup code looks to see if we booted +at zero, if not, it copies the program from where it is to zero, then +branches to zero. Some linker script items were required to make this +work. First ram starts at 0x0000, that is where we are going to +copy our file. Second, the size of .text is added as a variable. +We can use this variable to connect to the startup code (vectors.s). + +The bootcode for blinker05 had another modification, since the linker +is going to think that 0x0000 is the entry point it is going to make +the reset_handler variable contain some number like 0x0040, so right after +you start running that program it branches to zero which has who knows +what code, and you are stuck. That first instruction needs to be a +branch not an ldr pc of some linker filled in value. + diff --git a/zero_start/blinker05.bin b/zero_start/blinker05.bin new file mode 100755 index 0000000000000000000000000000000000000000..f7fe0984eb15105e8dc8db6769d530f793ec13b1 GIT binary patch literal 772 zcmZ{iv1=4T6vn^Ni&+j~SB&J4kW4~~6bW8oVPjmZu1FE&iWFiR3;zU*Kyp#A5iwl~ zVaJd(Vi6^Upus~B1VxCsLaeeo8N5rHZAEeX-Z^Omi^u!Dk8j?-nYS@;G*o8pfAJi^ zztIU=C7`qpEkh~xG)V{If!0~VIkC3dmQJw)F_w!$l^A)uFJ*4)FGd)GWU)=3h z%3H;iBy(u5Ii(*KQ99FuZaLIh26p0$vvl_^$6qa z4s^mEik>Bvxo`B{4S8_5ZPjqg-eKLLew$hP?vZbjXUU(*O>*;G=01|=$qn)ca)bPX zeczK)vdr<0tjU+@c}pHhjh$vKeP6SlBukce=bKieaBhd%A@3r-7vx`L$tS*paL;Gd zRN5?h+{YVgU-?#B)LxN4kvGVd#N^woGqQN(?oY@vi;A0}TySHf;0?gor&*JIR} bM;NlN4b1lUH$+~(KZ+X9fZ?O7klp?Ps=9y$ literal 0 HcmV?d00001 diff --git a/zero_start/blinker05.c b/zero_start/blinker05.c new file mode 100644 index 0000000..3a3be59 --- /dev/null +++ b/zero_start/blinker05.c @@ -0,0 +1,115 @@ + +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- + +extern void PUT32 ( unsigned int, unsigned int ); +extern unsigned int GET32 ( unsigned int ); +extern void dummy ( unsigned int ); +extern void enable_irq ( void ); +extern void enable_fiq ( void ); + + +#define ARM_TIMER_LOD 0x2000B400 +#define ARM_TIMER_VAL 0x2000B404 +#define ARM_TIMER_CTL 0x2000B408 +#define ARM_TIMER_CLI 0x2000B40C +#define ARM_TIMER_RIS 0x2000B410 +#define ARM_TIMER_MIS 0x2000B414 +#define ARM_TIMER_RLD 0x2000B418 +#define ARM_TIMER_DIV 0x2000B41C +#define ARM_TIMER_CNT 0x2000B420 + +#define SYSTIMERCLO 0x20003004 +#define GPFSEL1 0x20200004 +#define GPSET0 0x2020001C +#define GPCLR0 0x20200028 + +#define IRQ_BASIC 0x2000B200 +#define IRQ_PEND1 0x2000B204 +#define IRQ_PEND2 0x2000B208 +#define IRQ_FIQ_CONTROL 0x2000B210 +#define IRQ_ENABLE_BASIC 0x2000B218 +#define IRQ_DISABLE_BASIC 0x2000B224 + +volatile unsigned int icount; + +//------------------------------------------------------------------------- +void c_irq_handler ( void ) +{ + icount++; + if(icount&1) + { + PUT32(GPCLR0,1<<16); + } + else + { + PUT32(GPSET0,1<<16); + } + PUT32(ARM_TIMER_CLI,0); +} +//------------------------------------------------------------------------- +int notmain ( void ) +{ + unsigned int ra; + + PUT32(IRQ_DISABLE_BASIC,1); + + ra=GET32(GPFSEL1); + ra&=~(7<<18); + ra|=1<<18; + PUT32(GPFSEL1,ra); + PUT32(GPSET0,1<<16); + + PUT32(ARM_TIMER_CTL,0x003E0000); + PUT32(ARM_TIMER_LOD,1000000-1); + PUT32(ARM_TIMER_RLD,1000000-1); + PUT32(ARM_TIMER_DIV,0x000000F9); + PUT32(ARM_TIMER_CLI,0); + PUT32(ARM_TIMER_CTL,0x003E00A2); + + for(ra=0;ra<5;ra++) + { + PUT32(GPCLR0,1<<16); + while(1) if(GET32(ARM_TIMER_MIS)) break; + PUT32(ARM_TIMER_CLI,0); + PUT32(GPSET0,1<<16); + while(1) if(GET32(ARM_TIMER_MIS)) break; + PUT32(ARM_TIMER_CLI,0); + } + + PUT32(ARM_TIMER_LOD,2000000-1); + PUT32(ARM_TIMER_RLD,2000000-1); + PUT32(ARM_TIMER_CLI,0); + PUT32(IRQ_ENABLE_BASIC,1); + for(ra=0;ra<5;ra++) + { + PUT32(GPCLR0,1<<16); + while(1) if(GET32(IRQ_BASIC)&1) break; + PUT32(ARM_TIMER_CLI,0); + PUT32(GPSET0,1<<16); + while(1) if(GET32(IRQ_BASIC)&1) break; + PUT32(ARM_TIMER_CLI,0); + } + + PUT32(ARM_TIMER_LOD,4000000-1); + PUT32(ARM_TIMER_RLD,4000000-1); + icount=0; + enable_irq(); + while(1) continue; + return(0); +} +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- + + +//------------------------------------------------------------------------- +// +// Copyright (c) 2012 David Welch dwelch@dwelch.com +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//------------------------------------------------------------------------- diff --git a/zero_start/blinker05.elf b/zero_start/blinker05.elf new file mode 100755 index 0000000000000000000000000000000000000000..929c1c1cb19a28b8e81aa9f99dfb6c5261e49f0e GIT binary patch literal 34840 zcmeH{QD|FL7{|ZUrfoKaW^-d@mhH9_snEuB#<7WR+2*!BR4B89J&55pxwT_x>r>4VU0=!+;+*~37mMHGaIIJ*bg)7mW9Z7$6D=v zm!KDCzXKgkTwB%s^ga8+f z0sS2GKIm_u$DqeH%~!8Ok3tVae+@kh{VVqU3OWI;=lBBJf{vr-bLh52xiSE+`+fr7 z2d!DTgXzYwx9$pRcknLS_Yw5((3<_e+unP=kD5u0t=z?Ze2Ur+VD%nqSE0Xwz6>3T zl$RIa=b^Pn-~AnEJxf_Vp7A#PyU?1AMCxZb4X^KT5w#Ou-y6_c*X;L=d3_hO=A9*m z+6g@WENTPLBhY7{hhx|?ajrTCt=~i6$6|%Ny9wiN1hM~Mr*t8ABlNy5%f9;kZGk>> zeus2njUZ~_r$q1ezyLmC+p)(pVtOIl4jg;NdMQ38?JZ%m!E6p~Fb(h4@0A8+Mm+CLEj+jvvll6sE(<@7($<~)$5$bCIt3t4jX;@n{ItS z?QIFvZ=V-QpwNMuzN4Nmg4lov?q^*P`2{t9=sy28TD`Z>Z$L-uU!JT!_yqN#`iiF; z?f5nIb2TkI{`=OHq4xxQ7TOB< zX=wewZVV$O2>riq3?nlTPx==7y$YQOc;y^?zt`c<2j<^`o(lL&O|5tHQ%%?3Y1WMB z`TC4sXz+>$yv{E+FWkt7@LziE5uEQTw1y7#pCK>QUBhdy-d_lL6YlRivhM#KVl(=e zyk1SZ{uZ)--w~Ww&#Ezs(Egv17ZEzNUkXmqai!0eQZDUGWO7bAIcew8Q%*sOFK3#1 zy5LMWZfdewNZYR6G^Jdr7+9Doyx5$Y$gJzWv|#TS1oNW*4as8W6(@O0ius8NJw@?k zW;&V5PtS<{B&YKEX&Il&H+a;sN^*58sm+)7T%ez@S Ylapl8wF~b010dkve_B=6AOAQtpET3 literal 0 HcmV?d00001 diff --git a/zero_start/blinker05.list b/zero_start/blinker05.list new file mode 100644 index 0000000..dafcb66 --- /dev/null +++ b/zero_start/blinker05.list @@ -0,0 +1,278 @@ + +blinker05.elf: file format elf32-littlearm + + +Disassembly of section .text: + +00000000 <_start>: + 0: ea00000f b 44 + 4: e59ff014 ldr pc, [pc, #20] ; 20 + 8: e59ff014 ldr pc, [pc, #20] ; 24 + c: e59ff014 ldr pc, [pc, #20] ; 28 + 10: e59ff014 ldr pc, [pc, #20] ; 2c + 14: e59ff014 ldr pc, [pc, #20] ; 30 + 18: e59ff014 ldr pc, [pc, #20] ; 34 + 1c: e59ff014 ldr pc, [pc, #20] ; 38 + +00000020 : + 20: 000000ac andeq r0, r0, ip, lsr #1 + +00000024 : + 24: 000000ac andeq r0, r0, ip, lsr #1 + +00000028 : + 28: 000000ac andeq r0, r0, ip, lsr #1 + +0000002c : + 2c: 000000ac andeq r0, r0, ip, lsr #1 + +00000030 : + 30: 000000ac andeq r0, r0, ip, lsr #1 + +00000034 : + 34: 000000d4 ldrdeq r0, [r0], -r4 + +00000038 : + 38: 000000ac andeq r0, r0, ip, lsr #1 + +0000003c : + 3c: 00000304 andeq r0, r0, r4, lsl #6 + +00000040 : + 40: 0000004c andeq r0, r0, ip, asr #32 + +00000044 : + 44: e1a0000f mov r0, pc + 48: e51f1010 ldr r1, [pc, #-16] ; 40 + 4c: e0400001 sub r0, r0, r1 + 50: e3500000 cmp r0, #0 + 54: 0a00000a beq 84 + 58: e3a01000 mov r1, #0 + 5c: e51f2028 ldr r2, [pc, #-40] ; 3c + 60: e28220ff add r2, r2, #255 ; 0xff + 64: e282200f add r2, r2, #15 + 68: e1a02222 lsr r2, r2, #4 + +0000006c : + 6c: e8b000f0 ldm r0!, {r4, r5, r6, r7} + 70: e8a100f0 stmia r1!, {r4, r5, r6, r7} + 74: e2522001 subs r2, r2, #1 + 78: 1afffffb bne 6c + 7c: e3a00000 mov r0, #0 + 80: e12fff10 bx r0 + +00000084 : + 84: e3a000d2 mov r0, #210 ; 0xd2 + 88: e121f000 msr CPSR_c, r0 + 8c: e3a0d406 mov sp, #100663296 ; 0x6000000 + 90: e3a000d1 mov r0, #209 ; 0xd1 + 94: e121f000 msr CPSR_c, r0 + 98: e3a0d407 mov sp, #117440512 ; 0x7000000 + 9c: e3a000d3 mov r0, #211 ; 0xd3 + a0: e121f000 msr CPSR_c, r0 + a4: e3a0d302 mov sp, #134217728 ; 0x8000000 + a8: eb000021 bl 134 + +000000ac : + ac: eafffffe b ac + +000000b0 : + b0: e5801000 str r1, [r0] + b4: e12fff1e bx lr + +000000b8 : + b8: e5900000 ldr r0, [r0] + bc: e12fff1e bx lr + +000000c0 : + c0: e12fff1e bx lr + +000000c4 : + c4: e10f0000 mrs r0, CPSR + c8: e3c00080 bic r0, r0, #128 ; 0x80 + cc: e121f000 msr CPSR_c, r0 + d0: e12fff1e bx lr + +000000d4 : + d4: e92d5fff push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + d8: eb000001 bl e4 + dc: e8bd5fff pop {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr} + e0: e25ef004 subs pc, lr, #4 + +000000e4 : + e4: e59f1038 ldr r1, [pc, #56] ; 124 + e8: e591c000 ldr ip, [r1] + ec: e28c2001 add r2, ip, #1 + f0: e92d4008 push {r3, lr} + f4: e5812000 str r2, [r1] + f8: e5913000 ldr r3, [r1] + fc: e3130001 tst r3, #1 + 100: 159f0020 ldrne r0, [pc, #32] ; 128 + 104: 059f0020 ldreq r0, [pc, #32] ; 12c + 108: e3a01801 mov r1, #65536 ; 0x10000 + 10c: ebffffe7 bl b0 + 110: e59f0018 ldr r0, [pc, #24] ; 130 + 114: e3a01000 mov r1, #0 + 118: ebffffe4 bl b0 + 11c: e8bd4008 pop {r3, lr} + 120: e12fff1e bx lr + 124: 00000304 andeq r0, r0, r4, lsl #6 + 128: 20200028 eorcs r0, r0, r8, lsr #32 + 12c: 2020001c eorcs r0, r0, ip, lsl r0 + 130: 2000b40c andcs fp, r0, ip, lsl #8 + +00000134 : + 134: e92d4010 push {r4, lr} + 138: e3a01001 mov r1, #1 + 13c: e59f017c ldr r0, [pc, #380] ; 2c0 + 140: ebffffda bl b0 + 144: e59f0178 ldr r0, [pc, #376] ; 2c4 + 148: ebffffda bl b8 + 14c: e3c01707 bic r1, r0, #1835008 ; 0x1c0000 + 150: e3811701 orr r1, r1, #262144 ; 0x40000 + 154: e59f0168 ldr r0, [pc, #360] ; 2c4 + 158: ebffffd4 bl b0 + 15c: e59f0164 ldr r0, [pc, #356] ; 2c8 + 160: e3a01801 mov r1, #65536 ; 0x10000 + 164: ebffffd1 bl b0 + 168: e59f015c ldr r0, [pc, #348] ; 2cc + 16c: e3a0183e mov r1, #4063232 ; 0x3e0000 + 170: ebffffce bl b0 + 174: e59f0154 ldr r0, [pc, #340] ; 2d0 + 178: e59f1154 ldr r1, [pc, #340] ; 2d4 + 17c: ebffffcb bl b0 + 180: e59f0150 ldr r0, [pc, #336] ; 2d8 + 184: e59f1148 ldr r1, [pc, #328] ; 2d4 + 188: ebffffc8 bl b0 + 18c: e59f0148 ldr r0, [pc, #328] ; 2dc + 190: e3a010f9 mov r1, #249 ; 0xf9 + 194: ebffffc5 bl b0 + 198: e59f0140 ldr r0, [pc, #320] ; 2e0 + 19c: e3a01000 mov r1, #0 + 1a0: ebffffc2 bl b0 + 1a4: e59f0120 ldr r0, [pc, #288] ; 2cc + 1a8: e59f1134 ldr r1, [pc, #308] ; 2e4 + 1ac: ebffffbf bl b0 + 1b0: e3a04005 mov r4, #5 + 1b4: e59f012c ldr r0, [pc, #300] ; 2e8 + 1b8: e3a01801 mov r1, #65536 ; 0x10000 + 1bc: ebffffbb bl b0 + 1c0: e59f0124 ldr r0, [pc, #292] ; 2ec + 1c4: ebffffbb bl b8 + 1c8: e3500000 cmp r0, #0 + 1cc: 0afffffb beq 1c0 + 1d0: e59f0108 ldr r0, [pc, #264] ; 2e0 + 1d4: e3a01000 mov r1, #0 + 1d8: ebffffb4 bl b0 + 1dc: e59f00e4 ldr r0, [pc, #228] ; 2c8 + 1e0: e3a01801 mov r1, #65536 ; 0x10000 + 1e4: ebffffb1 bl b0 + 1e8: e59f00fc ldr r0, [pc, #252] ; 2ec + 1ec: ebffffb1 bl b8 + 1f0: e3500000 cmp r0, #0 + 1f4: 0afffffb beq 1e8 + 1f8: e59f00e0 ldr r0, [pc, #224] ; 2e0 + 1fc: e3a01000 mov r1, #0 + 200: ebffffaa bl b0 + 204: e2544001 subs r4, r4, #1 + 208: 1affffe9 bne 1b4 + 20c: e59f00bc ldr r0, [pc, #188] ; 2d0 + 210: e59f10d8 ldr r1, [pc, #216] ; 2f0 + 214: ebffffa5 bl b0 + 218: e59f00b8 ldr r0, [pc, #184] ; 2d8 + 21c: e59f10cc ldr r1, [pc, #204] ; 2f0 + 220: ebffffa2 bl b0 + 224: e1a01004 mov r1, r4 + 228: e59f00b0 ldr r0, [pc, #176] ; 2e0 + 22c: ebffff9f bl b0 + 230: e59f00bc ldr r0, [pc, #188] ; 2f4 + 234: e3a01001 mov r1, #1 + 238: ebffff9c bl b0 + 23c: e3a04005 mov r4, #5 + 240: e59f00a0 ldr r0, [pc, #160] ; 2e8 + 244: e3a01801 mov r1, #65536 ; 0x10000 + 248: ebffff98 bl b0 + 24c: e59f00a4 ldr r0, [pc, #164] ; 2f8 + 250: ebffff98 bl b8 + 254: e3100001 tst r0, #1 + 258: 0afffffb beq 24c + 25c: e59f007c ldr r0, [pc, #124] ; 2e0 + 260: e3a01000 mov r1, #0 + 264: ebffff91 bl b0 + 268: e59f0058 ldr r0, [pc, #88] ; 2c8 + 26c: e3a01801 mov r1, #65536 ; 0x10000 + 270: ebffff8e bl b0 + 274: e59f007c ldr r0, [pc, #124] ; 2f8 + 278: ebffff8e bl b8 + 27c: e3100001 tst r0, #1 + 280: 0afffffb beq 274 + 284: e59f0054 ldr r0, [pc, #84] ; 2e0 + 288: e3a01000 mov r1, #0 + 28c: ebffff87 bl b0 + 290: e2544001 subs r4, r4, #1 + 294: 1affffe9 bne 240 + 298: e59f0030 ldr r0, [pc, #48] ; 2d0 + 29c: e59f1058 ldr r1, [pc, #88] ; 2fc + 2a0: ebffff82 bl b0 + 2a4: e59f002c ldr r0, [pc, #44] ; 2d8 + 2a8: e59f104c ldr r1, [pc, #76] ; 2fc + 2ac: ebffff7f bl b0 + 2b0: e59f3048 ldr r3, [pc, #72] ; 300 + 2b4: e5834000 str r4, [r3] + 2b8: ebffff81 bl c4 + 2bc: eafffffe b 2bc + 2c0: 2000b224 andcs fp, r0, r4, lsr #4 + 2c4: 20200004 eorcs r0, r0, r4 + 2c8: 2020001c eorcs r0, r0, ip, lsl r0 + 2cc: 2000b408 andcs fp, r0, r8, lsl #8 + 2d0: 2000b400 andcs fp, r0, r0, lsl #8 + 2d4: 000f423f andeq r4, pc, pc, lsr r2 ; + 2d8: 2000b418 andcs fp, r0, r8, lsl r4 + 2dc: 2000b41c andcs fp, r0, ip, lsl r4 + 2e0: 2000b40c andcs fp, r0, ip, lsl #8 + 2e4: 003e00a2 eorseq r0, lr, r2, lsr #1 + 2e8: 20200028 eorcs r0, r0, r8, lsr #32 + 2ec: 2000b414 andcs fp, r0, r4, lsl r4 + 2f0: 001e847f andseq r8, lr, pc, ror r4 + 2f4: 2000b218 andcs fp, r0, r8, lsl r2 + 2f8: 2000b200 andcs fp, r0, r0, lsl #4 + 2fc: 003d08ff ldrshteq r0, [sp], -pc + 300: 00000304 andeq r0, r0, r4, lsl #6 + +Disassembly of section .bss: + +00000304 : + 304: 00000000 andeq r0, r0, r0 + +Disassembly of section .ARM.attributes: + +00000000 <.ARM.attributes>: + 0: 00002c41 andeq r2, r0, r1, asr #24 + 4: 61656100 cmnvs r5, r0, lsl #2 + 8: 01006962 tsteq r0, r2, ror #18 + c: 00000022 andeq r0, r0, r2, lsr #32 + 10: 4d524105 ldfmie f4, [r2, #-20] ; 0xffffffec + 14: 54347620 ldrtpl r7, [r4], #-1568 ; 0xfffff9e0 + 18: 08020600 stmdaeq r2, {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} + 28: 2c011a01 stccs 10, cr1, [r1], {1} + 2c: Address 0x0000002c is out of bounds. + + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 bcc 10d0d24 + 4: 6f532820 svcvs 0x00532820 + 8: 65637275 strbvs r7, [r3, #-629]! ; 0xfffffd8b + c: 43207972 teqmi r0, #1867776 ; 0x1c8000 + 10: 4265646f rsbmi r6, r5, #1862270976 ; 0x6f000000 + 14: 68636e65 stmdavs r3!, {r0, r2, r5, r6, r9, sl, fp, sp, lr}^ + 18: 74694c20 strbtvc r4, [r9], #-3104 ; 0xfffff3e0 + 1c: 30322065 eorscc r2, r2, r5, rrx + 20: 302e3131 eorcc r3, lr, r1, lsr r1 + 24: 39362d39 ldmdbcc r6!, {r0, r3, r4, r5, r8, sl, fp, sp} + 28: 2e342029 cdpcs 0, 3, cr2, cr4, cr9, {1} + 2c: 00312e36 eorseq r2, r1, r6, lsr lr diff --git a/zero_start/blinker05.o b/zero_start/blinker05.o new file mode 100644 index 0000000000000000000000000000000000000000..2ea7b108a42b2249d08f4bf07abca266b14b50ed GIT binary patch literal 1784 zcma)6J!n%=6h5~}+O$@h{?VwRJ|SYo_L!aoQd~sw`JLq4^f~E;lkYp{e&^hCe_pPSjGt9X zksgY=Xv;&?SDp#$g9^BwkU1S&$SmQG?La3pjSyaoLoHH+2*YT>PI&PMx#ZLou-OJ!7 zWQ_!PqPdbg2|gx#4E%?z9S7Ha7~uV)3B-$~Zuq)x6r6h?nk@Zv-G-ni?*sOtb-%#9 zx^>S!RXp+jlk4tWL2M0Y#kv>ZuZ8MD&l=u4Yq*yp`?9Y`qEQqo_p%6I@8Ob1 z$8pZrx`aokdx;@-N!ITM9~V9rL(TZDaz1K&jy@&BFLx8f-4N{L=_U#TBQU7#n zW*jRCbP5%m)~sM>O~;;h$V^*~MP_n#mdsRsX2#AThSH|xIE74d&ar1J{r<=AZfN+s zs1+@L4@QkR0Kd>(!1}E)eGCwVkQhXa^I6AyulSYEizwl#g{kT{cmSOB|I)=Ihmi-@ z<5Sgx*Jc}pq1II$zXM&Lc7Uwm(G1gTvi}^qb4+At9izAPyVxM_m(O4ujQ1OYvG1){ z#JP+jriZSleU09@pT4>}&giRlTZ#JqT7l>NwB4HkJ@*o?##DKJ(&O{|yXvA2f+1U{g8Hm>{BwE$z8DvvBPGH zq83Hdl$y#Eu1!r_xpdYp(B#F$p+3r_@^g6Ixx6!DWpXq+!a+M{C9^iG`Tv$E(n!Sb zmXX)tSR7V^L%Iy)c$%?^$PxdB;F912!AF8m1Xl!C1=j@E8By=M_r`z~)@?#qM8=_#cYd{ana zPXT3DbYJQeq|k>L;=t~a*7N4y{3UA-`i2*iHq-PtYV|~7sHrf%1pw>vV&)2^Y(K=m^ZPXf{J>EmU?(xWat?{ef z{z2bGVyStGdw{1Mba}kKgtbl&(QWPAcd2h{?{>Ocx3(va@sPTqXH2L=q_Ie^>Qkc% zX}el*^bFClTwL&(W#rS2vFIS3)g2w_jBO)5F?%DeJC0>$Dvn{Z)Bo8J%jD`~Ub)== zH;)T+dHe*i&*K8MZeWqvLzn$h*GoU+=_pZb!2Mla!PS>%$))~Zbz^Q#nb0xmH{c7R z-|sNF-%HYCOpFWh%&!xS_(9?(#TJ8dmZNm}js#u4HQaBNi6&#d`TczTCyWNCbFHH9k4RbR6HG5L5%%Y1~t?+NvzQ2rTtKBNOm5=A$b zLxBYQzu2dNR|oVP>J=|0^=ss-A^m||Vq%j2NPOQ>uKwzA0ht3>hHW?)(NQU8jhtCD zvf6@P%;pUX_B}J;Wy{DJ&iq0Ukf#}lO0i;xHk#JmAeA%s_(&G)eH+X}9=K+k_YG|k zb}5&WQ`mRRvNm5TS0Rg*FO|yBY)7}8y>b*wPC++|n3=nI@dB<-%9^bd3RM_IJ(D*y z={_%Oa0Y&6k{(g+YzfLt3Cb)9$_xq0> ram + text_size = SIZEOF(.text); + .bss : { *(.bss*) } > ram + +} diff --git a/zero_start/uart02.bin b/zero_start/uart02.bin new file mode 100755 index 0000000000000000000000000000000000000000..205930720b9a058d38141e95b6be62120464c3fc GIT binary patch literal 784 zcmZ9KF=!M)6o%jKZQ|vKxgn&`L(CdPY{V;sq{|j5EK)2Itt?We5n>^vyd0NO2r)fcR(iD-p*uvWHKk^bL2KNQo-&cj94kE41MUHK-FP0mR-`<>_gP>f@bnjsI2O@6>k^tPwH z3-N_8LW4Eom`z6bucov%rlr;H(|d8$CUueYB+r!ZDjzNJugYhXS4wI_;)(Ha?JtIv>vTj+sR&HGzAH1i3VMBQ+ literal 0 HcmV?d00001 diff --git a/zero_start/uart02.c b/zero_start/uart02.c new file mode 100644 index 0000000..bd2e64b --- /dev/null +++ b/zero_start/uart02.c @@ -0,0 +1,130 @@ + +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- + +extern void PUT32 ( unsigned int, unsigned int ); +extern unsigned int GET32 ( unsigned int ); +extern void dummy ( unsigned int ); + +#define GPFSEL1 0x20200004 +#define GPSET0 0x2020001C +#define GPCLR0 0x20200028 +#define GPPUD 0x20200094 +#define GPPUDCLK0 0x20200098 + +#define AUX_ENABLES 0x20215004 +#define AUX_MU_IO_REG 0x20215040 +#define AUX_MU_IER_REG 0x20215044 +#define AUX_MU_IIR_REG 0x20215048 +#define AUX_MU_LCR_REG 0x2021504C +#define AUX_MU_MCR_REG 0x20215050 +#define AUX_MU_LSR_REG 0x20215054 +#define AUX_MU_MSR_REG 0x20215058 +#define AUX_MU_SCRATCH 0x2021505C +#define AUX_MU_CNTL_REG 0x20215060 +#define AUX_MU_STAT_REG 0x20215064 +#define AUX_MU_BAUD_REG 0x20215068 + +//GPIO14 TXD0 and TXD1 +//GPIO15 RXD0 and RXD1 +//alt function 5 for uart1 +//alt function 0 for uart0 + +//((250,000,000/115200)/8)-1 = 270 +//------------------------------------------------------------------------ +void uart_putc ( unsigned int c ) +{ + while(1) + { + if(GET32(AUX_MU_LSR_REG)&0x20) break; + } + PUT32(AUX_MU_IO_REG,c); +} +//------------------------------------------------------------------------ +void hexstrings ( unsigned int d ) +{ + //unsigned int ra; + unsigned int rb; + unsigned int rc; + + rb=32; + while(1) + { + rb-=4; + rc=(d>>rb)&0xF; + if(rc>9) rc+=0x37; else rc+=0x30; + uart_putc(rc); + if(rb==0) break; + } + uart_putc(0x20); +} +//------------------------------------------------------------------------ +void hexstring ( unsigned int d ) +{ + hexstrings(d); + uart_putc(0x0D); + uart_putc(0x0A); +} +//------------------------------------------------------------------------ +int notmain ( unsigned int earlypc ) +{ + unsigned int ra; + + PUT32(AUX_ENABLES,1); + PUT32(AUX_MU_IER_REG,0); + PUT32(AUX_MU_CNTL_REG,0); + PUT32(AUX_MU_LCR_REG,3); + PUT32(AUX_MU_MCR_REG,0); + PUT32(AUX_MU_IER_REG,0); + PUT32(AUX_MU_IIR_REG,0xC6); + PUT32(AUX_MU_BAUD_REG,270); + + ra=GET32(GPFSEL1); + ra&=~(7<<12); //gpio14 + ra|=2<<12; //alt5 + ra&=~(7<<15); //gpio15 + ra|=2<<15; //alt5 + PUT32(GPFSEL1,ra); + + PUT32(GPPUD,0); + for(ra=0;ra<150;ra++) dummy(ra); + PUT32(GPPUDCLK0,(1<<14)|(1<<15)); + for(ra=0;ra<150;ra++) dummy(ra); + PUT32(GPPUDCLK0,0); + + PUT32(AUX_MU_CNTL_REG,3); + + hexstring(0x12345678); + hexstring(earlypc); + + while(1) + { + while(1) + { + if(GET32(AUX_MU_LSR_REG)&0x01) break; + } + ra=GET32(AUX_MU_IO_REG); + //while(1) + //{ + //if(GET32(AUX_MU_LSR_REG)&0x20) break; + //} + PUT32(AUX_MU_IO_REG,ra); + } + + return(0); +} +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- + + +//------------------------------------------------------------------------- +// +// Copyright (c) 2012 David Welch dwelch@dwelch.com +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//------------------------------------------------------------------------- diff --git a/zero_start/uart02.elf b/zero_start/uart02.elf new file mode 100755 index 0000000000000000000000000000000000000000..6b25e77c3468a4a09944e788092d1184cd05bcb8 GIT binary patch literal 34557 zcmeIyUuau(6bJBglXPp#T(4#7R)@PSMJlc_t#SWA%hQL)e;ldTeJuUEVyM9g42dbH*1Z|-15 z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3cwe+%@A+}euRg6Khn5J5x$VIWKt5j?_xxK-2K(=a4rzajUoG(%NnLY|XHa*ZyiYheX`E*?g=TxbD{V9MdA}e>a=A z#H=(PLSN)UYu4P1jsGe!x4K)F8-F&N>z0^xoTJ}F9WveO9rVoDw`;n0CO&M%5Z*D? zcDLGx`-({A;(n?<% z6ZI#^Z*=CThF0r?LucwgqW%E=Ynb)e3&8Yj=yv<}42)wZBMkNhJ!QU3$q zyNmt7U2c8puKikj`_K6H=R4;wqjyA)#kESvUqO!NUk~B@Ut^A=ejT&Xc{g-#7B%jz zdH{JE`S0)w;oUfbIEk1>#1YRTw&SHvV-AUBeTeuNQGO{p=)F&e_u^$w+R53B7$Zn~ z4j+HsdLud`TLQgCpD`HPVccgt5Zq}D8GDUmQ&Wemu@`ftLdq^ISW~$<`)PYVmA0lc zj%`gwCMLp>gX8-SK4L|~`@$0<;o?HpNzP(+3hg=VWsY5TB#f(tla5o!%$6LxDB)Bt zo3-a1+{k|%4`Lr4QSf_ikBW%?hP{E`cWVse6YYGb6!WaexL07-bLhZLw{rat(D5Yp zdAZiQPvc&M?=q6bzC-AF!#khO_;1-5t4ku6(A4`KMCkpQh(3h>eED}o&ZFlI?|feU zZ*y?tDcY;St}E;L+dIZK4mJe;g}!0nPfoUDj{d)b&zFOB;eYLLtya8;;6zWQ6-Gs+;$jiR^1>~!UYluOt zzl?bWxM_sev#7nH$7fLJ{X`MEUep?UcX#TyFnjNtiTi&S^?L{%db||uqV33NQuKvS z6f: + 0: ea000008 b 28 + 4: ea000007 b 28 + 8: ea000006 b 28 + c: ea000005 b 28 + 10: ea000004 b 28 + 14: ea000003 b 28 + 18: ea000002 b 28 + 1c: ea000001 b 28 + +00000020 : + 20: 00000310 andeq r0, r0, r0, lsl r3 + +00000024 : + 24: 00000030 andeq r0, r0, r0, lsr r0 + +00000028 : + 28: e1a0000f mov r0, pc + 2c: e51f1010 ldr r1, [pc, #-16] ; 24 + 30: e0400001 sub r0, r0, r1 + 34: e3500000 cmp r0, #0 + 38: 0a00000a beq 68 + 3c: e3a01000 mov r1, #0 + 40: e51f2028 ldr r2, [pc, #-40] ; 20 + 44: e28220ff add r2, r2, #255 ; 0xff + 48: e282200f add r2, r2, #15 + 4c: e1a02222 lsr r2, r2, #4 + +00000050 : + 50: e8b000f0 ldm r0!, {r4, r5, r6, r7} + 54: e8a100f0 stmia r1!, {r4, r5, r6, r7} + 58: e2522001 subs r2, r2, #1 + 5c: 1afffffb bne 50 + 60: e3a00000 mov r0, #0 + 64: e12fff10 bx r0 + +00000068 : + 68: e3a0d902 mov sp, #32768 ; 0x8000 + 6c: e1a0000f mov r0, pc + 70: eb00004c bl 1a8 + +00000074 : + 74: eafffffe b 74 + +00000078 : + 78: e5801000 str r1, [r0] + 7c: e12fff1e bx lr + +00000080 : + 80: e5900000 ldr r0, [r0] + 84: e12fff1e bx lr + +00000088 : + 88: e12fff1e bx lr + +0000008c : + 8c: e92d4010 push {r4, lr} + 90: e1a04000 mov r4, r0 + 94: e59f001c ldr r0, [pc, #28] ; b8 + 98: ebfffff8 bl 80 + 9c: e3100020 tst r0, #32 + a0: 0afffffb beq 94 + a4: e59f0010 ldr r0, [pc, #16] ; bc + a8: e1a01004 mov r1, r4 + ac: ebfffff1 bl 78 + b0: e8bd4010 pop {r4, lr} + b4: e12fff1e bx lr + b8: 20215054 eorcs r5, r1, r4, asr r0 + bc: 20215040 eorcs r5, r1, r0, asr #32 + +000000c0 : + c0: e92d4010 push {r4, lr} + c4: e1a04000 mov r4, r0 + c8: e1a00e20 lsr r0, r0, #28 + cc: e3500009 cmp r0, #9 + d0: 92800030 addls r0, r0, #48 ; 0x30 + d4: 82800037 addhi r0, r0, #55 ; 0x37 + d8: ebffffeb bl 8c + dc: e1a00c24 lsr r0, r4, #24 + e0: e200000f and r0, r0, #15 + e4: e3500009 cmp r0, #9 + e8: 92800030 addls r0, r0, #48 ; 0x30 + ec: 82800037 addhi r0, r0, #55 ; 0x37 + f0: ebffffe5 bl 8c + f4: e1a0ca24 lsr ip, r4, #20 + f8: e20c000f and r0, ip, #15 + fc: e3500009 cmp r0, #9 + 100: 92800030 addls r0, r0, #48 ; 0x30 + 104: 82800037 addhi r0, r0, #55 ; 0x37 + 108: ebffffdf bl 8c + 10c: e1a03824 lsr r3, r4, #16 + 110: e203000f and r0, r3, #15 + 114: e3500009 cmp r0, #9 + 118: 92800030 addls r0, r0, #48 ; 0x30 + 11c: 82800037 addhi r0, r0, #55 ; 0x37 + 120: ebffffd9 bl 8c + 124: e1a02624 lsr r2, r4, #12 + 128: e202000f and r0, r2, #15 + 12c: e3500009 cmp r0, #9 + 130: 92800030 addls r0, r0, #48 ; 0x30 + 134: 82800037 addhi r0, r0, #55 ; 0x37 + 138: ebffffd3 bl 8c + 13c: e1a01424 lsr r1, r4, #8 + 140: e201000f and r0, r1, #15 + 144: e3500009 cmp r0, #9 + 148: 92800030 addls r0, r0, #48 ; 0x30 + 14c: 82800037 addhi r0, r0, #55 ; 0x37 + 150: ebffffcd bl 8c + 154: e1a00224 lsr r0, r4, #4 + 158: e200000f and r0, r0, #15 + 15c: e3500009 cmp r0, #9 + 160: 92800030 addls r0, r0, #48 ; 0x30 + 164: 82800037 addhi r0, r0, #55 ; 0x37 + 168: e204400f and r4, r4, #15 + 16c: ebffffc6 bl 8c + 170: e3540009 cmp r4, #9 + 174: 82840037 addhi r0, r4, #55 ; 0x37 + 178: 92840030 addls r0, r4, #48 ; 0x30 + 17c: ebffffc2 bl 8c + 180: e3a00020 mov r0, #32 + 184: e8bd4010 pop {r4, lr} + 188: eaffffbf b 8c + +0000018c : + 18c: e92d4008 push {r3, lr} + 190: ebffffca bl c0 + 194: e3a0000d mov r0, #13 + 198: ebffffbb bl 8c + 19c: e3a0000a mov r0, #10 + 1a0: e8bd4008 pop {r3, lr} + 1a4: eaffffb8 b 8c + +000001a8 : + 1a8: e92d4070 push {r4, r5, r6, lr} + 1ac: e3a01001 mov r1, #1 + 1b0: e1a04000 mov r4, r0 + 1b4: e59f011c ldr r0, [pc, #284] ; 2d8 + 1b8: ebffffae bl 78 + 1bc: e59f0118 ldr r0, [pc, #280] ; 2dc + 1c0: e3a01000 mov r1, #0 + 1c4: ebffffab bl 78 + 1c8: e59f0110 ldr r0, [pc, #272] ; 2e0 + 1cc: e3a01000 mov r1, #0 + 1d0: ebffffa8 bl 78 + 1d4: e59f0108 ldr r0, [pc, #264] ; 2e4 + 1d8: e3a01003 mov r1, #3 + 1dc: ebffffa5 bl 78 + 1e0: e59f0100 ldr r0, [pc, #256] ; 2e8 + 1e4: e3a01000 mov r1, #0 + 1e8: ebffffa2 bl 78 + 1ec: e59f00e8 ldr r0, [pc, #232] ; 2dc + 1f0: e3a01000 mov r1, #0 + 1f4: ebffff9f bl 78 + 1f8: e59f00ec ldr r0, [pc, #236] ; 2ec + 1fc: e3a010c6 mov r1, #198 ; 0xc6 + 200: ebffff9c bl 78 + 204: e59f10e4 ldr r1, [pc, #228] ; 2f0 + 208: e59f00e4 ldr r0, [pc, #228] ; 2f4 + 20c: ebffff99 bl 78 + 210: e59f00e0 ldr r0, [pc, #224] ; 2f8 + 214: ebffff99 bl 80 + 218: e3c01a3f bic r1, r0, #258048 ; 0x3f000 + 21c: e3811a12 orr r1, r1, #73728 ; 0x12000 + 220: e59f00d0 ldr r0, [pc, #208] ; 2f8 + 224: ebffff93 bl 78 + 228: e59f00cc ldr r0, [pc, #204] ; 2fc + 22c: e3a01000 mov r1, #0 + 230: ebffff90 bl 78 + 234: e3a05000 mov r5, #0 + 238: e1a00005 mov r0, r5 + 23c: e2856001 add r6, r5, #1 + 240: ebffff90 bl 88 + 244: e2855002 add r5, r5, #2 + 248: e1a00006 mov r0, r6 + 24c: ebffff8d bl 88 + 250: e3550096 cmp r5, #150 ; 0x96 + 254: 1afffff7 bne 238 + 258: e59f00a0 ldr r0, [pc, #160] ; 300 + 25c: e3a01903 mov r1, #49152 ; 0xc000 + 260: ebffff84 bl 78 + 264: e3a05000 mov r5, #0 + 268: e1a00005 mov r0, r5 + 26c: e2856001 add r6, r5, #1 + 270: ebffff84 bl 88 + 274: e2855002 add r5, r5, #2 + 278: e1a00006 mov r0, r6 + 27c: ebffff81 bl 88 + 280: e3550096 cmp r5, #150 ; 0x96 + 284: 1afffff7 bne 268 + 288: e59f0070 ldr r0, [pc, #112] ; 300 + 28c: e3a01000 mov r1, #0 + 290: ebffff78 bl 78 + 294: e59f0044 ldr r0, [pc, #68] ; 2e0 + 298: e3a01003 mov r1, #3 + 29c: ebffff75 bl 78 + 2a0: e59f005c ldr r0, [pc, #92] ; 304 + 2a4: ebffffb8 bl 18c + 2a8: e1a00004 mov r0, r4 + 2ac: ebffffb6 bl 18c + 2b0: e59f0050 ldr r0, [pc, #80] ; 308 + 2b4: ebffff71 bl 80 + 2b8: e3100001 tst r0, #1 + 2bc: 0afffffb beq 2b0 + 2c0: e59f0044 ldr r0, [pc, #68] ; 30c + 2c4: ebffff6d bl 80 + 2c8: e1a01000 mov r1, r0 + 2cc: e59f0038 ldr r0, [pc, #56] ; 30c + 2d0: ebffff68 bl 78 + 2d4: eafffff5 b 2b0 + 2d8: 20215004 eorcs r5, r1, r4 + 2dc: 20215044 eorcs r5, r1, r4, asr #32 + 2e0: 20215060 eorcs r5, r1, r0, rrx + 2e4: 2021504c eorcs r5, r1, ip, asr #32 + 2e8: 20215050 eorcs r5, r1, r0, asr r0 + 2ec: 20215048 eorcs r5, r1, r8, asr #32 + 2f0: 0000010e andeq r0, r0, lr, lsl #2 + 2f4: 20215068 eorcs r5, r1, r8, rrx + 2f8: 20200004 eorcs r0, r0, r4 + 2fc: 20200094 mlacs r0, r4, r0, r0 + 300: 20200098 mlacs r0, r8, r0, r0 + 304: 12345678 eorsne r5, r4, #120, 12 ; 0x7800000 + 308: 20215054 eorcs r5, r1, r4, asr r0 + 30c: 20215040 eorcs r5, r1, r0, asr #32 + +Disassembly of section .ARM.attributes: + +00000000 <.ARM.attributes>: + 0: 00002c41 andeq r2, r0, r1, asr #24 + 4: 61656100 cmnvs r5, r0, lsl #2 + 8: 01006962 tsteq r0, r2, ror #18 + c: 00000022 andeq r0, r0, r2, lsr #32 + 10: 4d524105 ldfmie f4, [r2, #-20] ; 0xffffffec + 14: 54347620 ldrtpl r7, [r4], #-1568 ; 0xfffff9e0 + 18: 08020600 stmdaeq r2, {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} + 28: 2c011a01 stccs 10, cr1, [r1], {1} + 2c: Address 0x0000002c is out of bounds. + + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 bcc 10d0d24 + 4: 6f532820 svcvs 0x00532820 + 8: 65637275 strbvs r7, [r3, #-629]! ; 0xfffffd8b + c: 43207972 teqmi r0, #1867776 ; 0x1c8000 + 10: 4265646f rsbmi r6, r5, #1862270976 ; 0x6f000000 + 14: 68636e65 stmdavs r3!, {r0, r2, r5, r6, r9, sl, fp, sp, lr}^ + 18: 74694c20 strbtvc r4, [r9], #-3104 ; 0xfffff3e0 + 1c: 30322065 eorscc r2, r2, r5, rrx + 20: 302e3131 eorcc r3, lr, r1, lsr r1 + 24: 39362d39 ldmdbcc r6!, {r0, r3, r4, r5, r8, sl, fp, sp} + 28: 2e342029 cdpcs 0, 3, cr2, cr4, cr9, {1} + 2c: 00312e36 eorseq r2, r1, r6, lsr lr diff --git a/zero_start/uart02.o b/zero_start/uart02.o new file mode 100644 index 0000000000000000000000000000000000000000..6f5588d925c91f44747f050c5fa692178057f2eb GIT binary patch literal 1936 zcma)7&uQG~G%8jDW2ZB9fE?rZI&`j%3l$6B60jD{QHDB6}?* z5>itXq@Gb!abpi0Irh*?B@R^&RSrG$4~Vlt;zti4fjAV^{od|dXH!>#k=}go`{vDi zGqW@Hcb9WtDWxcEic+-Ch>CH4q-)BD6!p?aq-V}Pqm0`er3X*`X|-M$q~B zrn^nn^vo|$$6B8^7xSMP8CW>S7;u|Cl=srKac`P7?r`jQpW8e{wA-Qo&U#;`KEryv zQ$N9atWzIiU3Ka))(_S_l+kv1O+B>eP1EL`G;Q7s_UL-NC-~13*gtFiP{_bu!IIrVJy6(MgwURF4;H}{2+ z`g)~NE7-MlV{WBre`!|>B_mgMY-2J#F=3`>&z_$>WlWjp%?Y|Rfg5bu)^eHDNw{5? zt}RS2W*6qEJC;yAYETDX%ynMKR7 z$Xu@1$t+r5yWq=TY~w`ZN`KEG;v3OJ^L~(VL}=c z6VP}*$FYB0c<_XYevahAQ2U*qhR^Zui%ZKKMsA#sPc>{@n{5_`T&tn}3~`eo0dfqt z!?3U>^AV7FcBF-IjM1gP#s&?Dd#(TNt5$R{-d=5> z#t&5BdK!KcqfJpi=$W>p{PE!Tlf_^>*WOUHI_K+Z&txZ#+rWF{#yJKtKk2ie<1ynu z`~*11Zo@d<|3)Y?D*OU)6uboE@j39Y`L!BW%}Gz11sb<#yhu!Mt~Q(kUAeq?Zj$oX zxi8skcn#(1t@^%8)fJ~=m8(>2R4VJ7vkx|k&S1pBq=0NW=J*~ zAE0MyLEcqU;3tDeQ(d!-ax}{xY~tX_kGyaohP=db-z{L*PhQ#|7Qi3 z$%r_M&}2@ZA})@z3GFh!xrmD^Ga)nL9K-ce$GPHqq&d&fCXqL8c^$wF2BiL9b+QL* zdS?BEWWxx0)9)O)=_ToJL`6tsrcONXIkpi+g+V#XSwjB9BII9_{U#J1W5!HBqyOg9 z@#&V?^ofqreOmBf`WNJ*gm%b3CN%n