diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..aed8e5e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Jeff St. Jean + +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. \ No newline at end of file diff --git a/main.axf b/main.axf deleted file mode 100644 index bcb102b..0000000 Binary files a/main.axf and /dev/null differ diff --git a/main.axf.objdump b/main.axf.objdump deleted file mode 100644 index 8e3e1a1..0000000 --- a/main.axf.objdump +++ /dev/null @@ -1,2143 +0,0 @@ - -main.axf: file format elf32-littlearm - - -Disassembly of section .text: - -00000000 <__cs3_interrupt_vector>: - 0: 18 f0 9f e5 18 f0 9f e5 18 f0 9f e5 18 f0 9f e5 ................ - 10: 18 f0 9f e5 18 f0 9f e5 18 f0 9f e5 18 f0 9f e5 ................ - 20: 60 08 00 00 64 08 00 00 68 08 00 00 6c 08 00 00 `...d...h...l... - 30: 70 08 00 00 4c 15 00 00 94 09 00 00 74 08 00 00 p...L.......t... - -00000040 <__cs3_reset_generic>: - 40: ea000026 b e0 <__cs3_start_asm_sim> - -00000044 <__cs3_start_c>: - 44: e59f608c ldr r6, [pc, #140] ; d8 <__cs3_region_zero_size_ram+0x30> - 48: e3560000 cmp r6, #0 - 4c: e92d4080 push {r7, lr} - 50: e2466001 sub r6, r6, #1 - 54: 0a00001e beq d4 <__cs3_region_zero_size_ram+0x2c> - 58: e59f507c ldr r5, [pc, #124] ; dc <__cs3_region_zero_size_ram+0x34> - 5c: e3a00000 mov r0, #0 - 60: e3a01000 mov r1, #0 - 64: e515200c ldr r2, [r5, #-12] - 68: e515e010 ldr lr, [r5, #-16] - 6c: e5154008 ldr r4, [r5, #-8] - 70: e15e0002 cmp lr, r2 - 74: 00822004 addeq r2, r2, r4 - 78: 0a000009 beq a4 <__cs3_start_c+0x60> - 7c: e3540000 cmp r4, #0 - 80: 0a000007 beq a4 <__cs3_start_c+0x60> - 84: e1a07002 mov r7, r2 - 88: e1a0c002 mov ip, r2 - 8c: e8be000c ldm lr!, {r2, r3} - 90: e8ac000c stmia ip!, {r2, r3} - 94: e067300c rsb r3, r7, ip - 98: e1540003 cmp r4, r3 - 9c: e1a0200c mov r2, ip - a0: 1afffff9 bne 8c <__cs3_start_c+0x48> - a4: e515e004 ldr lr, [r5, #-4] - a8: e35e0000 cmp lr, #0 - ac: 11a03002 movne r3, r2 - b0: 0a000003 beq c4 <__cs3_region_zero_size_ram+0x1c> - b4: e8a30003 stmia r3!, {r0, r1} - b8: e062c003 rsb ip, r2, r3 - bc: e15e000c cmp lr, ip - c0: 1afffffb bne b4 <__cs3_region_zero_size_ram+0xc> - c4: e2466001 sub r6, r6, #1 - c8: e3760001 cmn r6, #1 - cc: e2855014 add r5, r5, #20 - d0: 1affffe3 bne 64 <__cs3_start_c+0x20> - d4: eb000503 bl 14e8 <__cs3_premain> - d8: 00000001 .word 0x00000001 - dc: 00001690 .word 0x00001690 - -000000e0 <__cs3_start_asm_sim>: - e0: e28f103c add r1, pc, #60 ; 0x3c - e4: e3a00016 mov r0, #22 - e8: ef123456 svc 0x00123456 - ec: e3500000 cmp r0, #0 - f0: ba000008 blt 118 <__cs3_start_asm_sim+0x38> - f4: e59f2028 ldr r2, [pc, #40] ; 124 <__cs3_heap_start_ptr> - f8: e59fd01c ldr sp, [pc, #28] ; 11c <__cs3_start_asm_sim+0x3c> - fc: e5920008 ldr r0, [r2, #8] - 100: e3500000 cmp r0, #0 - 104: 11a0d000 movne sp, r0 - 108: e59f1010 ldr r1, [pc, #16] ; 120 <__cs3_start_asm_sim+0x40> - 10c: e5920004 ldr r0, [r2, #4] - 110: e3500000 cmp r0, #0 - 114: 15810000 strne r0, [r1] - 118: eaffffc9 b 44 <__cs3_start_c> - 11c: 3ffffff8 .word 0x3ffffff8 - 120: 00001ad0 .word 0x00001ad0 - -00000124 <__cs3_heap_start_ptr>: - 124: 00001b80 .word 0x00001b80 - -00000128 <_start>: - 128: e51fd000 ldr sp, [pc, #-0] ; 130 <_start+0x8> - 12c: eaffffc4 b 44 <__cs3_start_c> - 130: 3ffffff8 .word 0x3ffffff8 - -00000134 : - 134: e92d4008 push {r3, lr} - 138: e59f002c ldr r0, [pc, #44] ; 16c - 13c: e59f302c ldr r3, [pc, #44] ; 170 - 140: e0603003 rsb r3, r0, r3 - 144: e3530006 cmp r3, #6 - 148: 8a000001 bhi 154 - 14c: e8bd4008 pop {r3, lr} - 150: e12fff1e bx lr - 154: e59f3018 ldr r3, [pc, #24] ; 174 - 158: e3530000 cmp r3, #0 - 15c: 0afffffa beq 14c - 160: e1a0e00f mov lr, pc - 164: e12fff13 bx r3 - 168: eafffff7 b 14c - 16c: 00001ad8 .word 0x00001ad8 - 170: 00001adb .word 0x00001adb - 174: 00000000 .word 0x00000000 - -00000178 : - 178: e92d4008 push {r3, lr} - 17c: e59f0034 ldr r0, [pc, #52] ; 1b8 - 180: e59f3034 ldr r3, [pc, #52] ; 1bc - 184: e0603003 rsb r3, r0, r3 - 188: e1a03143 asr r3, r3, #2 - 18c: e0833fa3 add r3, r3, r3, lsr #31 - 190: e1b010c3 asrs r1, r3, #1 - 194: 1a000001 bne 1a0 - 198: e8bd4008 pop {r3, lr} - 19c: e12fff1e bx lr - 1a0: e59f2018 ldr r2, [pc, #24] ; 1c0 - 1a4: e3520000 cmp r2, #0 - 1a8: 0afffffa beq 198 - 1ac: e1a0e00f mov lr, pc - 1b0: e12fff12 bx r2 - 1b4: eafffff7 b 198 - 1b8: 00001ad8 .word 0x00001ad8 - 1bc: 00001ad8 .word 0x00001ad8 - 1c0: 00000000 .word 0x00000000 - -000001c4 <__do_global_dtors_aux>: - 1c4: e92d4010 push {r4, lr} - 1c8: e59f402c ldr r4, [pc, #44] ; 1fc <__do_global_dtors_aux+0x38> - 1cc: e5d43000 ldrb r3, [r4] - 1d0: e3530000 cmp r3, #0 - 1d4: 1a000006 bne 1f4 <__do_global_dtors_aux+0x30> - 1d8: ebffffd5 bl 134 - 1dc: e59f301c ldr r3, [pc, #28] ; 200 <__do_global_dtors_aux+0x3c> - 1e0: e3530000 cmp r3, #0 - 1e4: 159f0018 ldrne r0, [pc, #24] ; 204 <__do_global_dtors_aux+0x40> - 1e8: 1320f000 nopne {0} - 1ec: e3a03001 mov r3, #1 - 1f0: e5c43000 strb r3, [r4] - 1f4: e8bd4010 pop {r4, lr} - 1f8: e12fff1e bx lr - 1fc: 00001ad8 .word 0x00001ad8 - 200: 00000000 .word 0x00000000 - 204: 000015d8 .word 0x000015d8 - -00000208 : - 208: e92d4008 push {r3, lr} - 20c: e59f3034 ldr r3, [pc, #52] ; 248 - 210: e3530000 cmp r3, #0 - 214: 159f0030 ldrne r0, [pc, #48] ; 24c - 218: 159f1030 ldrne r1, [pc, #48] ; 250 - 21c: 1320f000 nopne {0} - 220: e59f002c ldr r0, [pc, #44] ; 254 - 224: e5903000 ldr r3, [r0] - 228: e3530000 cmp r3, #0 - 22c: 0a000003 beq 240 - 230: e59f3020 ldr r3, [pc, #32] ; 258 - 234: e3530000 cmp r3, #0 - 238: 11a0e00f movne lr, pc - 23c: 112fff13 bxne r3 - 240: e8bd4008 pop {r3, lr} - 244: eaffffcb b 178 - 248: 00000000 .word 0x00000000 - 24c: 000015d8 .word 0x000015d8 - 250: 00001adc .word 0x00001adc - 254: 00001690 .word 0x00001690 - 258: 00000000 .word 0x00000000 - -0000025c : - -void vga_init() { - vga_set_screen(BLACK); -} - -int map(int value, int from_low, int from_high, int to_low, int to_high) { - 25c: e92d41f0 push {r4, r5, r6, r7, r8, lr} - 260: e1a05001 mov r5, r1 - 264: e1a08002 mov r8, r2 - 268: e1a04003 mov r4, r3 - float slope = (float)(to_high - to_low)/(float)(from_high - from_low); - return to_low + (int)(slope*(value - from_low)); - 26c: e0610000 rsb r0, r1, r0 - 270: eb0002c5 bl d8c <__aeabi_i2f> - 274: e1a06000 mov r6, r0 -void vga_init() { - vga_set_screen(BLACK); -} - -int map(int value, int from_low, int from_high, int to_low, int to_high) { - float slope = (float)(to_high - to_low)/(float)(from_high - from_low); - 278: e59d0018 ldr r0, [sp, #24] - 27c: e0640000 rsb r0, r4, r0 - 280: eb0002c1 bl d8c <__aeabi_i2f> - 284: e1a07000 mov r7, r0 - 288: e0650008 rsb r0, r5, r8 - 28c: eb0002be bl d8c <__aeabi_i2f> - 290: e1a01000 mov r1, r0 - 294: e1a00007 mov r0, r7 - 298: eb000358 bl 1000 <__aeabi_fdiv> - 29c: e1a01000 mov r1, r0 - return to_low + (int)(slope*(value - from_low)); - 2a0: e1a00006 mov r0, r6 - 2a4: eb0002ef bl e68 <__aeabi_fmul> - 2a8: eb0003ac bl 1160 <__aeabi_f2iz> -} - 2ac: e0800004 add r0, r0, r4 - 2b0: e8bd81f0 pop {r4, r5, r6, r7, r8, pc} - -000002b4 : - -short vga_pixel_to_short(colour_t colour) { - 2b4: e92d4070 push {r4, r5, r6, lr} - 2b8: e24dd018 sub sp, sp, #24 - 2bc: e28d3018 add r3, sp, #24 - 2c0: e9030007 stmdb r3, {r0, r1, r2} - short result = 0; - result |= map(colour.blue, 0, 255, 0, 31) & 0x1F; - 2c4: e3a0401f mov r4, #31 - 2c8: e58d4000 str r4, [sp] - 2cc: e59d0014 ldr r0, [sp, #20] - 2d0: e3a01000 mov r1, #0 - 2d4: e3a020ff mov r2, #255 ; 0xff - 2d8: e1a03001 mov r3, r1 - 2dc: ebffffde bl 25c - 2e0: e1a06000 mov r6, r0 - result |= (map(colour.green, 0, 255, 0, 63) & 0x3F) << 5; - 2e4: e3a0303f mov r3, #63 ; 0x3f - 2e8: e58d3000 str r3, [sp] - 2ec: e59d0010 ldr r0, [sp, #16] - 2f0: e3a01000 mov r1, #0 - 2f4: e3a020ff mov r2, #255 ; 0xff - 2f8: e1a03001 mov r3, r1 - 2fc: ebffffd6 bl 25c - 300: e1a05000 mov r5, r0 - result |= (map(colour.red, 0, 255, 0, 31) & 0x1F) << 11; - 304: e58d4000 str r4, [sp] - 308: e59d000c ldr r0, [sp, #12] - 30c: e3a01000 mov r1, #0 - 310: e3a020ff mov r2, #255 ; 0xff - 314: e1a03001 mov r3, r1 - 318: ebffffcf bl 25c - return to_low + (int)(slope*(value - from_low)); -} - -short vga_pixel_to_short(colour_t colour) { - short result = 0; - result |= map(colour.blue, 0, 255, 0, 31) & 0x1F; - 31c: e0066004 and r6, r6, r4 - result |= (map(colour.green, 0, 255, 0, 63) & 0x3F) << 5; - 320: e1860580 orr r0, r6, r0, lsl #11 - 324: e6ff6070 uxth r6, r0 - 328: e205503f and r5, r5, #63 ; 0x3f - result |= (map(colour.red, 0, 255, 0, 31) & 0x1F) << 11; - 32c: e1860285 orr r0, r6, r5, lsl #5 - return result; -} - 330: e6bf0070 sxth r0, r0 - 334: e28dd018 add sp, sp, #24 - 338: e8bd8070 pop {r4, r5, r6, pc} - -0000033c : - - -void vga_set_pixel(int x, int y, colour_t colour) { - 33c: e24dd008 sub sp, sp, #8 - 340: e24dc004 sub ip, sp, #4 - 344: e98c000c stmib ip, {r2, r3} - volatile short *address=(volatile short*)(FPGA_PIXEL_BUF_BASE + (y << 10) + (x << 1)); - 348: e1a00080 lsl r0, r0, #1 - 34c: e2800332 add r0, r0, #-939524096 ; 0xc8000000 - 350: e1a01501 lsl r1, r1, #10 - *address = (colour.blue & 0x1F) | (colour.green & 0x3F) << 5 | (colour.red & 0x1F) << 11; - 354: e59d2008 ldr r2, [sp, #8] - 358: e202201f and r2, r2, #31 - 35c: e59d3000 ldr r3, [sp] - 360: e1822583 orr r2, r2, r3, lsl #11 - 364: e59d3004 ldr r3, [sp, #4] - 368: e203303f and r3, r3, #63 ; 0x3f - 36c: e1823283 orr r3, r2, r3, lsl #5 - 370: e6ff3073 uxth r3, r3 - 374: e18030b1 strh r3, [r0, r1] -} - 378: e28dd008 add sp, sp, #8 - 37c: e12fff1e bx lr - -00000380 : - -void vga_set_screen(colour_t colour) { - 380: e92d0030 push {r4, r5} - 384: e24dd010 sub sp, sp, #16 - 388: e28d3010 add r3, sp, #16 - 38c: e9030007 stmdb r3, {r0, r1, r2} - 390: e3a03000 mov r3, #0 - int i; - for(i = 0; i < VGA_WIDTH_BINS*VGA_HEIGHT_BINS; i++) { - colour_buffer[i] = colour; - 394: e3014af4 movw r4, #6900 ; 0x1af4 - 398: e3404000 movt r4, #0 - 39c: e084c003 add ip, r4, r3 - 3a0: e28d5010 add r5, sp, #16 - 3a4: e9150007 ldmdb r5, {r0, r1, r2} - 3a8: e88c0007 stm ip, {r0, r1, r2} - 3ac: e283300c add r3, r3, #12 - *address = (colour.blue & 0x1F) | (colour.green & 0x3F) << 5 | (colour.red & 0x1F) << 11; -} - -void vga_set_screen(colour_t colour) { - int i; - for(i = 0; i < VGA_WIDTH_BINS*VGA_HEIGHT_BINS; i++) { - 3b0: e3530060 cmp r3, #96 ; 0x60 - 3b4: 1afffff8 bne 39c - colour_buffer[i] = colour; - } -} - 3b8: e28dd010 add sp, sp, #16 - 3bc: e8bd0030 pop {r4, r5} - 3c0: e12fff1e bx lr - -000003c4 : -void vga_draw_current_segment(); -void vga_draw_segment(int segment); -colour_t get_inverted_colour(colour_t colour); -void vga_set_border_thickness(int thickness); - -void vga_init() { - 3c4: e92d4008 push {r3, lr} - vga_set_screen(BLACK); - 3c8: e30135dc movw r3, #5596 ; 0x15dc - 3cc: e3403000 movt r3, #0 - 3d0: e8930007 ldm r3, {r0, r1, r2} - 3d4: ebffffe9 bl 380 - 3d8: e8bd8008 pop {r3, pc} - -000003dc : - for(segment = 0; segment < VGA_WIDTH_BINS*VGA_HEIGHT_BINS; segment++) { - vga_draw_segment(segment); - } -} - -colour_t get_inverted_colour(colour_t colour) { - 3dc: e52d4004 push {r4} ; (str r4, [sp, #-4]!) - 3e0: e24dd014 sub sp, sp, #20 - 3e4: e28d4010 add r4, sp, #16 - 3e8: e904000e stmdb r4, {r1, r2, r3} - colour_t inverted = { VGA_MAX_RED - colour.red, VGA_MAX_GREEN - colour.green, VGA_MAX_BLUE - colour.blue }; - 3ec: e59d2008 ldr r2, [sp, #8] - 3f0: e262203f rsb r2, r2, #63 ; 0x3f - 3f4: e59d300c ldr r3, [sp, #12] - 3f8: e263301f rsb r3, r3, #31 - 3fc: e59d1004 ldr r1, [sp, #4] - 400: e261101f rsb r1, r1, #31 - return inverted; - 404: e5801000 str r1, [r0] - 408: e5802004 str r2, [r0, #4] - 40c: e5803008 str r3, [r0, #8] -} - 410: e28dd014 add sp, sp, #20 - 414: e8bd0010 ldmfd sp!, {r4} - 418: e12fff1e bx lr - -0000041c : - -void vga_draw_segment(int segment) { - 41c: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 420: e24dd02c sub sp, sp, #44 ; 0x2c - 424: e1a09000 mov r9, r0 - const int bin_width_size = VGA_WIDTH/VGA_WIDTH_BINS; - const int bin_height_size = VGA_HEIGHT/VGA_HEIGHT_BINS; - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - 428: e1a03fc0 asr r3, r0, #31 - 42c: e1a03f23 lsr r3, r3, #30 - 430: e0802003 add r2, r0, r3 - 434: e2022003 and r2, r2, #3 - 438: e0633002 rsb r3, r3, r2 - 43c: e0833103 add r3, r3, r3, lsl #2 - 440: e1a03203 lsl r3, r3, #4 - 444: e58d3010 str r3, [sp, #16] - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - 448: e2802003 add r2, r0, #3 - 44c: e3500000 cmp r0, #0 - 450: a1a02000 movge r2, r0 - 454: e1a02142 asr r2, r2, #2 - 458: e0622202 rsb r2, r2, r2, lsl #4 - 45c: e1a02182 lsl r2, r2, #3 - 460: e1a08002 mov r8, r2 - 464: e2822078 add r2, r2, #120 ; 0x78 - 468: e58d2014 str r2, [sp, #20] - -void vga_draw_segment(int segment) { - const int bin_width_size = VGA_WIDTH/VGA_WIDTH_BINS; - const int bin_height_size = VGA_HEIGHT/VGA_HEIGHT_BINS; - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - 46c: e2832050 add r2, r3, #80 ; 0x50 - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - 470: e1530002 cmp r3, r2 - 474: ba00002c blt 52c - 478: ea00003c b 570 -colour_t get_inverted_colour(colour_t colour) { - colour_t inverted = { VGA_MAX_RED - colour.red, VGA_MAX_GREEN - colour.green, VGA_MAX_BLUE - colour.blue }; - return inverted; -} - -void vga_draw_segment(int segment) { - 47c: e0846008 add r6, r4, r8 - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - for(y = y_start; y < y_end; y++) { - if(segment == vga_segment_selection && (x - x_start <= (border_thickness-1) || (x_end-1)-x <= (border_thickness-1) || y - y_start <= (border_thickness-1) || (y_end-1)-y <= (border_thickness-1))) { - 480: e59b3060 ldr r3, [fp, #96] ; 0x60 - 484: e1590003 cmp r9, r3 - 488: 1a000018 bne 4f0 - 48c: e59d100c ldr r1, [sp, #12] - 490: e5913000 ldr r3, [r1] - 494: e2433001 sub r3, r3, #1 - 498: e59d2008 ldr r2, [sp, #8] - 49c: e1520003 cmp r2, r3 - 4a0: da000007 ble 4c4 -colour_t get_inverted_colour(colour_t colour) { - colour_t inverted = { VGA_MAX_RED - colour.red, VGA_MAX_GREEN - colour.green, VGA_MAX_BLUE - colour.blue }; - return inverted; -} - -void vga_draw_segment(int segment) { - 4a4: e262204f rsb r2, r2, #79 ; 0x4f - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - for(y = y_start; y < y_end; y++) { - if(segment == vga_segment_selection && (x - x_start <= (border_thickness-1) || (x_end-1)-x <= (border_thickness-1) || y - y_start <= (border_thickness-1) || (y_end-1)-y <= (border_thickness-1))) { - 4a8: e1530002 cmp r3, r2 - 4ac: aa000004 bge 4c4 - 4b0: e1530004 cmp r3, r4 - 4b4: aa000002 bge 4c4 -colour_t get_inverted_colour(colour_t colour) { - colour_t inverted = { VGA_MAX_RED - colour.red, VGA_MAX_GREEN - colour.green, VGA_MAX_BLUE - colour.blue }; - return inverted; -} - -void vga_draw_segment(int segment) { - 4b8: e2642077 rsb r2, r4, #119 ; 0x77 - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - for(y = y_start; y < y_end; y++) { - if(segment == vga_segment_selection && (x - x_start <= (border_thickness-1) || (x_end-1)-x <= (border_thickness-1) || y - y_start <= (border_thickness-1) || (y_end-1)-y <= (border_thickness-1))) { - 4bc: e1530002 cmp r3, r2 - 4c0: ba00000a blt 4f0 - vga_set_pixel(x,y,get_inverted_colour(colour_buffer[segment])); - 4c4: e28d701c add r7, sp, #28 - 4c8: e1a00007 mov r0, r7 - 4cc: e895000e ldm r5, {r1, r2, r3} - 4d0: ebffffc1 bl 3dc - 4d4: e59d3024 ldr r3, [sp, #36] ; 0x24 - 4d8: e58d3000 str r3, [sp] - 4dc: e897000c ldm r7, {r2, r3} - 4e0: e1a0000a mov r0, sl - 4e4: e1a01006 mov r1, r6 - 4e8: ebffff93 bl 33c - 4ec: ea000005 b 508 - } - else { - vga_set_pixel(x,y,colour_buffer[segment]); - 4f0: e5953008 ldr r3, [r5, #8] - 4f4: e58d3000 str r3, [sp] - 4f8: e895000c ldm r5, {r2, r3} - 4fc: e1a0000a mov r0, sl - 500: e1a01006 mov r1, r6 - 504: ebffff8c bl 33c - 508: e2844001 add r4, r4, #1 - const int bin_height_size = VGA_HEIGHT/VGA_HEIGHT_BINS; - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - for(y = y_start; y < y_end; y++) { - 50c: e3540078 cmp r4, #120 ; 0x78 - 510: 1affffd9 bne 47c - 514: e59d3008 ldr r3, [sp, #8] - 518: e2833001 add r3, r3, #1 - 51c: e58d3008 str r3, [sp, #8] - const int bin_width_size = VGA_WIDTH/VGA_WIDTH_BINS; - const int bin_height_size = VGA_HEIGHT/VGA_HEIGHT_BINS; - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - 520: e3530050 cmp r3, #80 ; 0x50 - 524: 1a000009 bne 550 - 528: ea000010 b 570 - 52c: e3a01000 mov r1, #0 - 530: e58d1008 str r1, [sp, #8] - for(y = y_start; y < y_end; y++) { - if(segment == vga_segment_selection && (x - x_start <= (border_thickness-1) || (x_end-1)-x <= (border_thickness-1) || y - y_start <= (border_thickness-1) || (y_end-1)-y <= (border_thickness-1))) { - 534: e301baf4 movw fp, #6900 ; 0x1af4 - 538: e340b000 movt fp, #0 - vga_set_pixel(x,y,get_inverted_colour(colour_buffer[segment])); - } - else { - vga_set_pixel(x,y,colour_buffer[segment]); - 53c: e0805080 add r5, r0, r0, lsl #1 - 540: e08b5105 add r5, fp, r5, lsl #2 - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - for(y = y_start; y < y_end; y++) { - if(segment == vga_segment_selection && (x - x_start <= (border_thickness-1) || (x_end-1)-x <= (border_thickness-1) || y - y_start <= (border_thickness-1) || (y_end-1)-y <= (border_thickness-1))) { - 544: e3012698 movw r2, #5784 ; 0x1698 - 548: e3402000 movt r2, #0 - 54c: e58d200c str r2, [sp, #12] -colour_t get_inverted_colour(colour_t colour) { - colour_t inverted = { VGA_MAX_RED - colour.red, VGA_MAX_GREEN - colour.green, VGA_MAX_BLUE - colour.blue }; - return inverted; -} - -void vga_draw_segment(int segment) { - 550: e59d3008 ldr r3, [sp, #8] - 554: e59d1010 ldr r1, [sp, #16] - 558: e083a001 add sl, r3, r1 - const int bin_height_size = VGA_HEIGHT/VGA_HEIGHT_BINS; - int x, y; - int x_start = (segment%VGA_WIDTH_BINS)*bin_width_size, x_end = x_start + bin_width_size; - int y_start = (segment/VGA_WIDTH_BINS)*bin_height_size, y_end = y_start + bin_height_size; - for(x = x_start; x < x_end; x++) { - for(y = y_start; y < y_end; y++) { - 55c: e59d2014 ldr r2, [sp, #20] - 560: e1580002 cmp r8, r2 - 564: b3a04000 movlt r4, #0 - 568: baffffc3 blt 47c - 56c: eaffffe8 b 514 - else { - vga_set_pixel(x,y,colour_buffer[segment]); - } - } - } -} - 570: e28dd02c add sp, sp, #44 ; 0x2c - 574: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc} - -00000578 : - for(i = 0; i < VGA_WIDTH_BINS*VGA_HEIGHT_BINS; i++) { - colour_buffer[i] = colour; - } -} - -void vga_show_screen() { - 578: e92d4010 push {r4, lr} - int segment; - for(segment = 0; segment < VGA_WIDTH_BINS*VGA_HEIGHT_BINS; segment++) { - 57c: e3a04000 mov r4, #0 - vga_draw_segment(segment); - 580: e1a00004 mov r0, r4 - 584: ebffffa4 bl 41c - } -} - -void vga_show_screen() { - int segment; - for(segment = 0; segment < VGA_WIDTH_BINS*VGA_HEIGHT_BINS; segment++) { - 588: e2844001 add r4, r4, #1 - 58c: e3540008 cmp r4, #8 - 590: 1afffffa bne 580 - vga_draw_segment(segment); - } -} - 594: e8bd8010 pop {r4, pc} - -00000598 : - } - } - } -} - -void vga_increment_selection() { - 598: e92d4008 push {r3, lr} - vga_previous_segment_selection = vga_segment_selection; - 59c: e3013af4 movw r3, #6900 ; 0x1af4 - 5a0: e3403000 movt r3, #0 - 5a4: e5930060 ldr r0, [r3, #96] ; 0x60 - 5a8: e5830064 str r0, [r3, #100] ; 0x64 - if(vga_segment_selection != VGA_WIDTH_BINS*VGA_HEIGHT_BINS - 1) vga_segment_selection++; - 5ac: e3500007 cmp r0, #7 - 5b0: 13013af4 movwne r3, #6900 ; 0x1af4 - 5b4: 13403000 movtne r3, #0 - 5b8: 12802001 addne r2, r0, #1 - 5bc: 15832060 strne r2, [r3, #96] ; 0x60 - vga_draw_segment(vga_previous_segment_selection); - 5c0: ebffff95 bl 41c - vga_draw_segment(vga_segment_selection); - 5c4: e3013af4 movw r3, #6900 ; 0x1af4 - 5c8: e3403000 movt r3, #0 - 5cc: e5930060 ldr r0, [r3, #96] ; 0x60 - 5d0: ebffff91 bl 41c - 5d4: e8bd8008 pop {r3, pc} - -000005d8 : -} - -void vga_decrement_selection() { - 5d8: e92d4008 push {r3, lr} - vga_previous_segment_selection = vga_segment_selection; - 5dc: e3013af4 movw r3, #6900 ; 0x1af4 - 5e0: e3403000 movt r3, #0 - 5e4: e5930060 ldr r0, [r3, #96] ; 0x60 - 5e8: e5830064 str r0, [r3, #100] ; 0x64 - if(vga_segment_selection != 0) vga_segment_selection--; - 5ec: e3500000 cmp r0, #0 - 5f0: 13013af4 movwne r3, #6900 ; 0x1af4 - 5f4: 13403000 movtne r3, #0 - 5f8: 12402001 subne r2, r0, #1 - 5fc: 15832060 strne r2, [r3, #96] ; 0x60 - vga_draw_segment(vga_previous_segment_selection); - 600: ebffff85 bl 41c - vga_draw_segment(vga_segment_selection); - 604: e3013af4 movw r3, #6900 ; 0x1af4 - 608: e3403000 movt r3, #0 - 60c: e5930060 ldr r0, [r3, #96] ; 0x60 - 610: ebffff81 bl 41c - 614: e8bd8008 pop {r3, pc} - -00000618 : -} - -void vga_set_segment(int segment, colour_t colour) { - 618: e52d4004 push {r4} ; (str r4, [sp, #-4]!) - 61c: e24dd014 sub sp, sp, #20 - 620: e28dc004 add ip, sp, #4 - 624: e88c000e stm ip, {r1, r2, r3} - colour_buffer[segment] = colour; - 628: e3012af4 movw r2, #6900 ; 0x1af4 - 62c: e3402000 movt r2, #0 - 630: e0800080 add r0, r0, r0, lsl #1 - 634: e0824100 add r4, r2, r0, lsl #2 - 638: e89c0007 ldm ip, {r0, r1, r2} - 63c: e884000b stm r4, {r0, r1, r3} -} - 640: e28dd014 add sp, sp, #20 - 644: e8bd0010 ldmfd sp!, {r4} - 648: e12fff1e bx lr - -0000064c : - -void vga_set_current_segment(colour_t colour) { - 64c: e52de004 push {lr} ; (str lr, [sp, #-4]!) - 650: e24dd014 sub sp, sp, #20 - 654: e28d3004 add r3, sp, #4 - 658: e8830007 stm r3, {r0, r1, r2} - vga_set_segment(vga_segment_selection, colour); - 65c: e3012af4 movw r2, #6900 ; 0x1af4 - 660: e3402000 movt r2, #0 - 664: e5920060 ldr r0, [r2, #96] ; 0x60 - 668: e893000e ldm r3, {r1, r2, r3} - 66c: ebffffe9 bl 618 -} - 670: e28dd014 add sp, sp, #20 - 674: e8bd8000 ldmfd sp!, {pc} - -00000678 : - -colour_t vga_get_current_segment() { - 678: e1a03000 mov r3, r0 - return colour_buffer[vga_segment_selection]; - 67c: e3012af4 movw r2, #6900 ; 0x1af4 - 680: e3402000 movt r2, #0 - 684: e5921060 ldr r1, [r2, #96] ; 0x60 - 688: e0811081 add r1, r1, r1, lsl #1 - 68c: e0822101 add r2, r2, r1, lsl #2 - 690: e8920007 ldm r2, {r0, r1, r2} - 694: e8830007 stm r3, {r0, r1, r2} -} - 698: e1a00003 mov r0, r3 - 69c: e12fff1e bx lr - -000006a0 : - -void vga_draw_current_segment() { - 6a0: e92d4008 push {r3, lr} - vga_draw_segment(vga_segment_selection); - 6a4: e3013af4 movw r3, #6900 ; 0x1af4 - 6a8: e3403000 movt r3, #0 - 6ac: e5930060 ldr r0, [r3, #96] ; 0x60 - 6b0: ebffff59 bl 41c - 6b4: e8bd8008 pop {r3, pc} - -000006b8 : -} - -void vga_set_border_thickness(int thickness) { - border_thickness = thickness; - 6b8: e3013698 movw r3, #5784 ; 0x1698 - 6bc: e3403000 movt r3, #0 - 6c0: e5830000 str r0, [r3] - 6c4: e12fff1e bx lr - -000006c8 : -} - -void jtag_fifo_flush() { - int data; - do { - data = jtag->data; - 6c8: e3012fff movw r2, #8191 ; 0x1fff - 6cc: e34f2f21 movt r2, #65313 ; 0xff21 - 6d0: e5123fdf ldr r3, [r2, #-4063] ; 0xfffff021 - } while(data & JTAG_READY_MASK); - 6d4: e3130902 tst r3, #32768 ; 0x8000 - 6d8: 1afffffc bne 6d0 -} - 6dc: e12fff1e bx lr - -000006e0 : - int data_ready; -} carworld; - -volatile jtag_t* const jtag = (jtag_t*)JTAG_BASE; - -void jtag_start_request() { - 6e0: e92d4008 push {r3, lr} - carworld.buffer_index = 0; - 6e4: e3013af4 movw r3, #6900 ; 0x1af4 - 6e8: e3403000 movt r3, #0 - 6ec: e3a02000 mov r2, #0 - 6f0: e583206c str r2, [r3, #108] ; 0x6c - carworld.data_ready = 0; - 6f4: e5832070 str r2, [r3, #112] ; 0x70 - - jtag_fifo_flush(); - 6f8: ebfffff2 bl 6c8 - - // request sliders - jtag->data = JTAG_REQUEST_SLIDERS; - 6fc: e3013fff movw r3, #8191 ; 0x1fff - 700: e34f3f21 movt r3, #65313 ; 0xff21 - 704: e3a02003 mov r2, #3 - 708: e5032fdf str r2, [r3, #-4063] ; 0xfffff021 - 70c: e8bd8008 pop {r3, pc} - -00000710 : - data = jtag->data; - } while(data & JTAG_READY_MASK); -} - -void jtag_read_fifo() { - int data = jtag->data; - 710: e3013fff movw r3, #8191 ; 0x1fff - 714: e34f3f21 movt r3, #65313 ; 0xff21 - 718: e5132fdf ldr r2, [r3, #-4063] ; 0xfffff021 - if(data & JTAG_READY_MASK) { - 71c: e3120902 tst r2, #32768 ; 0x8000 - 720: 012fff1e bxeq lr - if(carworld.buffer_index == 0) { - 724: e3013af4 movw r3, #6900 ; 0x1af4 - 728: e3403000 movt r3, #0 - 72c: e593306c ldr r3, [r3, #108] ; 0x6c - 730: e3530000 cmp r3, #0 - 734: 1a000004 bne 74c - carworld.buffer_index++; - 738: e3013af4 movw r3, #6900 ; 0x1af4 - 73c: e3403000 movt r3, #0 - 740: e3a02001 mov r2, #1 - 744: e583206c str r2, [r3, #108] ; 0x6c - 748: e12fff1e bx lr - } - else if(carworld.buffer_index == 1) { - 74c: e3530001 cmp r3, #1 - 750: 1a000005 bne 76c - carworld.x = data & JTAG_DATA_MASK; - 754: e3013af4 movw r3, #6900 ; 0x1af4 - 758: e3403000 movt r3, #0 - 75c: e5c32068 strb r2, [r3, #104] ; 0x68 - carworld.buffer_index++; - 760: e3a02002 mov r2, #2 - 764: e583206c str r2, [r3, #108] ; 0x6c - 768: e12fff1e bx lr - } - else if(carworld.buffer_index == 2) { - 76c: e3530002 cmp r3, #2 - 770: 1a000005 bne 78c - carworld.y = data & JTAG_DATA_MASK; - 774: e3013af4 movw r3, #6900 ; 0x1af4 - 778: e3403000 movt r3, #0 - 77c: e5c32069 strb r2, [r3, #105] ; 0x69 - carworld.buffer_index++; - 780: e3a02003 mov r2, #3 - 784: e583206c str r2, [r3, #108] ; 0x6c - 788: e12fff1e bx lr - } - else if(carworld.buffer_index == 3) { - 78c: e3530003 cmp r3, #3 - 790: 112fff1e bxne lr - carworld.z = data & JTAG_DATA_MASK; - 794: e3013af4 movw r3, #6900 ; 0x1af4 - 798: e3403000 movt r3, #0 - 79c: e5c3206a strb r2, [r3, #106] ; 0x6a - carworld.buffer_index = 0; - 7a0: e3a02000 mov r2, #0 - 7a4: e583206c str r2, [r3, #108] ; 0x6c - carworld.data_ready = 1; - 7a8: e3a02001 mov r2, #1 - 7ac: e5832070 str r2, [r3, #112] ; 0x70 - 7b0: e12fff1e bx lr - -000007b4 : - } - } -} - -struct _carworld* get_carworld_data() { - carworld.data_ready = 0; - 7b4: e3010af4 movw r0, #6900 ; 0x1af4 - 7b8: e3400000 movt r0, #0 - 7bc: e3a03000 mov r3, #0 - 7c0: e5803070 str r3, [r0, #112] ; 0x70 - return &carworld; -} - 7c4: e2800068 add r0, r0, #104 ; 0x68 - 7c8: e12fff1e bx lr - -000007cc : - -void carworld_to_colour(struct _carworld* car, colour_t* colour) { - 7cc: e92d4070 push {r4, r5, r6, lr} - 7d0: e24dd008 sub sp, sp, #8 - 7d4: e1a05000 mov r5, r0 - 7d8: e1a04001 mov r4, r1 - colour->red = map((car->x+CARWORLD_SLIDER_OFFSET), 0, CARWORLD_MAX_SLIDER, 0, VGA_MAX_RED); - 7dc: e1d000d0 ldrsb r0, [r0] - 7e0: e3a0601f mov r6, #31 - 7e4: e58d6000 str r6, [sp] - 7e8: e2800080 add r0, r0, #128 ; 0x80 - 7ec: e3a01000 mov r1, #0 - 7f0: e3a020ff mov r2, #255 ; 0xff - 7f4: e1a03001 mov r3, r1 - 7f8: ebfffe97 bl 25c - 7fc: e5840000 str r0, [r4] - colour->green = map((car->y+CARWORLD_SLIDER_OFFSET), 0, CARWORLD_MAX_SLIDER, 0, VGA_MAX_GREEN); - 800: e1d500d1 ldrsb r0, [r5, #1] - 804: e3a0303f mov r3, #63 ; 0x3f - 808: e58d3000 str r3, [sp] - 80c: e2800080 add r0, r0, #128 ; 0x80 - 810: e3a01000 mov r1, #0 - 814: e3a020ff mov r2, #255 ; 0xff - 818: e1a03001 mov r3, r1 - 81c: ebfffe8e bl 25c - 820: e5840004 str r0, [r4, #4] - colour->blue = map((car->z+CARWORLD_SLIDER_OFFSET), 0, CARWORLD_MAX_SLIDER, 0, VGA_MAX_BLUE); - 824: e1d500d2 ldrsb r0, [r5, #2] - 828: e58d6000 str r6, [sp] - 82c: e2800080 add r0, r0, #128 ; 0x80 - 830: e3a01000 mov r1, #0 - 834: e3a020ff mov r2, #255 ; 0xff - 838: e1a03001 mov r3, r1 - 83c: ebfffe86 bl 25c - 840: e5840008 str r0, [r4, #8] - 844: e28dd008 add sp, sp, #8 - 848: e8bd8070 pop {r4, r5, r6, pc} - -0000084c : -/*setup the KEY interrupts in the FPGA*/ -void config_KEYs() -{ - volatile int * KEY_ptr = (int*) 0xFF200050; // KEY base address - - *(KEY_ptr + 2) = 0xF; // enable interrupts for all four KEYs - 84c: e3a03000 mov r3, #0 - 850: e34f3f20 movt r3, #65312 ; 0xff20 - 854: e3a0200f mov r2, #15 - 858: e5832058 str r2, [r3, #88] ; 0x58 - 85c: e12fff1e bx lr - -00000860 <__cs3_reset>: - *((int*) 0xFFFEC110) = interrupt_ID; -} - -// Define the remaining exception handlers -void __attribute__ ((interrupt)) __cs3_reset (void) -{ - 860: eafffffe b 860 <__cs3_reset> - -00000864 <__cs3_isr_undef>: - while(1); -} -void __attribute__ ((interrupt)) __cs3_isr_undef (void) -{ - 864: eafffffe b 864 <__cs3_isr_undef> - -00000868 <__cs3_isr_swi>: - while(1); -} -void __attribute__ ((interrupt)) __cs3_isr_swi (void) -{ - 868: eafffffe b 868 <__cs3_isr_swi> - -0000086c <__cs3_isr_pabort>: - while(1); -} -void __attribute__ ((interrupt)) __cs3_isr_pabort (void) -{ - 86c: eafffffe b 86c <__cs3_isr_pabort> - -00000870 <__cs3_isr_dabort>: - while(1); -} -void __attribute__ ((interrupt)) __cs3_isr_dabort (void) -{ - 870: eafffffe b 870 <__cs3_isr_dabort> - -00000874 <__cs3_isr_fiq>: - while(1); -} -void __attribute__ ((interrupt)) __cs3_isr_fiq (void) -{ - 874: eafffffe b 874 <__cs3_isr_fiq> - -00000878 : - *Turn off interrupts in the ARM processor -*/ -void disable_A9_interrupts(void) -{ - int status = 0b11010011; - asm("msr cpsr, %[ps]" : : [ps]"r"(status)); - 878: e3a030d3 mov r3, #211 ; 0xd3 - 87c: e129f003 msr CPSR_fc, r3 - 880: e12fff1e bx lr - -00000884 : -{ - int stack, mode; - stack = 0xFFFFFFFF - 7; // top of A9 onchip memory, aligned to 8 bytes - /*change processor to IRQ mode with interrupts disabled*/ - mode = 0b11010010; - asm("msr cpsr, %[ps]" : : [ps] "r" (mode)); - 884: e3a030d2 mov r3, #210 ; 0xd2 - 888: e129f003 msr CPSR_fc, r3 - /*set banked stack pointer*/ - asm("mov sp, %[ps]" : : [ps] "r" (stack)); - 88c: e3e03007 mvn r3, #7 - 890: e1a0d003 mov sp, r3 - - /*go back to SVC mode before executing subroutine return!*/ - mode = 0b11010011; - asm("msr cpsr, %[ps]" : : [ps] "r" (mode)); - 894: e3a030d3 mov r3, #211 ; 0xd3 - 898: e129f003 msr CPSR_fc, r3 - 89c: e12fff1e bx lr - -000008a0 : - *Turn on interrupts in the ARM processor -*/ -void enable_A9_interrupts(void) -{ - int status = 0b01010011; - asm("msr cpsr, %[ps]" : : [ps]"r"(status)); - 8a0: e3a03053 mov r3, #83 ; 0x53 - 8a4: e129f003 msr CPSR_fc, r3 - 8a8: e12fff1e bx lr - -000008ac : - *configure only the Interrupt Set Enable Registers (ICDISERn) and - *Interrupt Processor Target Registers (ICDIPTRn). The default (reset) - *values are used for other registers in the GIC -*/ -void config_interrupt (int N, int CPU_target) -{ - 8ac: e52d4004 push {r4} ; (str r4, [sp, #-4]!) - int reg_offset, index, value, address; - - /* Configure the Interrupt Set-Enable Registers (ICDISERn). - * reg_offset = (integer_div(N / 32)*4; value = 1 << (N mod 32)*/ - reg_offset = (N >> 3) & 0xFFFFFFFC; - 8b0: e1a031c0 asr r3, r0, #3 - 8b4: e3c33003 bic r3, r3, #3 - index = N & 0x1F; - value = 0x1 << index; - address = 0xFFFED100 + reg_offset; - 8b8: e2433b4b sub r3, r3, #76800 ; 0x12c00 - int reg_offset, index, value, address; - - /* Configure the Interrupt Set-Enable Registers (ICDISERn). - * reg_offset = (integer_div(N / 32)*4; value = 1 << (N mod 32)*/ - reg_offset = (N >> 3) & 0xFFFFFFFC; - index = N & 0x1F; - 8bc: e200201f and r2, r0, #31 - value = 0x1 << index; - address = 0xFFFED100 + reg_offset; - /* Using the address and value, set the appropriate bit */ - *(int*)address |= value; - 8c0: e513c300 ldr ip, [r3, #-768] ; 0xfffffd00 - 8c4: e3a04001 mov r4, #1 - 8c8: e18c2214 orr r2, ip, r4, lsl r2 - 8cc: e5032300 str r2, [r3, #-768] ; 0xfffffd00 - reg_offset = (N & 0xFFFFFFFC); - index = N & 0x3; - address = 0xFFFED800 + reg_offset + index; - - /*Using the address and value, write to (only) the appropriate byte*/ - *(char*)address = (char) CPU_target; - 8d0: e2400b4a sub r0, r0, #75776 ; 0x12800 - 8d4: e5c01000 strb r1, [r0] -} - 8d8: e8bd0010 ldmfd sp!, {r4} - 8dc: e12fff1e bx lr - -000008e0 : - -/* - *Configure the Generic Interrupt Controller (GIC) -*/ -void config_GIC(void) -{ - 8e0: e92d4008 push {r3, lr} - config_interrupt (73, 1); // configure the FPGA KEYs interrupt (73) - 8e4: e3a00049 mov r0, #73 ; 0x49 - 8e8: e3a01001 mov r1, #1 - 8ec: ebffffee bl 8ac - - // Set Interrupt Priority Mask Register (ICCPMR). Enable all priorities - *((int*) 0xFFFEC104) = 0xFFFF; - 8f0: e3e02a13 mvn r2, #77824 ; 0x13000 - 8f4: e30f3fff movw r3, #65535 ; 0xffff - 8f8: e5023efb str r3, [r2, #-3835] ; 0xfffff105 - - // Set the enable in the CPU Interface Control Register (ICCICR) - *((int*) 0xFFFEC100) = 1; - 8fc: e3a03001 mov r3, #1 - 900: e5023eff str r3, [r2, #-3839] ; 0xfffff101 - - // Set the enable in the Distributor Control Register (ICDDCR) - *((int*) 0xFFFED000) = 1; - 904: e3e02a12 mvn r2, #73728 ; 0x12000 - 908: e5023fff str r3, [r2, #-4095] ; 0xfffff001 - 90c: e8bd8008 pop {r3, pc} - -00000910 : - * Pushbutton - Interrupt Service Routine - * - * This routine checks which KEY has been pressed. It writes to HEX0 - *******************************************************************/ -void pushbutton_ISR( void ) -{ - 910: e92d4008 push {r3, lr} - volatile int*KEY_ptr = (int*) 0xFF200050; - /*HEX display base address*/ - volatile int*HEX3_HEX0_ptr = (int*) 0xFF200020; - int press, HEX_bits; - - press =*(KEY_ptr + 3); // read the pushbutton interrupt register - 914: e3a02000 mov r2, #0 - 918: e34f2f20 movt r2, #65312 ; 0xff20 - 91c: e592305c ldr r3, [r2, #92] ; 0x5c - *(KEY_ptr + 3) = press; // Clear the interrupt - 920: e582305c str r3, [r2, #92] ; 0x5c - - if (press & 0x1) { // KEY0 - 924: e3130001 tst r3, #1 - 928: 0a000002 beq 938 - HEX_bits = 0b00111111; - vga_increment_selection(); - 92c: ebffff19 bl 598 - - press =*(KEY_ptr + 3); // read the pushbutton interrupt register - *(KEY_ptr + 3) = press; // Clear the interrupt - - if (press & 0x1) { // KEY0 - HEX_bits = 0b00111111; - 930: e3a0203f mov r2, #63 ; 0x3f - 934: ea000012 b 984 - vga_increment_selection(); - } - else if (press & 0x2) { // KEY1 - 938: e3130002 tst r3, #2 - 93c: 0a00000a beq 96c - HEX_bits = 0b00000110; - if(is_editing == 1) { - 940: e3013af4 movw r3, #6900 ; 0x1af4 - 944: e3403000 movt r3, #0 - 948: e5933074 ldr r3, [r3, #116] ; 0x74 - 94c: e3530001 cmp r3, #1 - is_editing = 0; - 950: e3013af4 movw r3, #6900 ; 0x1af4 - 954: e3403000 movt r3, #0 - 958: 03a02000 moveq r2, #0 - } - else { - is_editing = 1; - 95c: 13a02001 movne r2, #1 - 960: e5832074 str r2, [r3, #116] ; 0x74 - if (press & 0x1) { // KEY0 - HEX_bits = 0b00111111; - vga_increment_selection(); - } - else if (press & 0x2) { // KEY1 - HEX_bits = 0b00000110; - 964: e3a02006 mov r2, #6 - 968: ea000005 b 984 - } - else { - is_editing = 1; - } - } - else if (press & 0x4) { // KEY2 - 96c: e3130004 tst r3, #4 - HEX_bits = 0b01011011; - vga_decrement_selection(); - } - else { // press & 0x8, which is KEY3 - HEX_bits = 0b01001111; - 970: 03a0204f moveq r2, #79 ; 0x4f - } - else { - is_editing = 1; - } - } - else if (press & 0x4) { // KEY2 - 974: 0a000002 beq 984 - HEX_bits = 0b01011011; - vga_decrement_selection(); - 978: ebffff16 bl 5d8 - else { - is_editing = 1; - } - } - else if (press & 0x4) { // KEY2 - HEX_bits = 0b01011011; - 97c: e3a0205b mov r2, #91 ; 0x5b - 980: eaffffff b 984 - } - else { // press & 0x8, which is KEY3 - HEX_bits = 0b01001111; - } - - *HEX3_HEX0_ptr = HEX_bits; - 984: e3a03000 mov r3, #0 - 988: e34f3f20 movt r3, #65312 ; 0xff20 - 98c: e5832020 str r2, [r3, #32] - 990: e8bd8008 pop {r3, pc} - -00000994 <__cs3_isr_irq>: -void pushbutton_ISR (void); -void config_interrupt (int, int); - -// Define the IRQ exception handler -void __attribute__ ((interrupt)) __cs3_isr_irq (void) -{ - 994: e24ee004 sub lr, lr, #4 - 998: e92d500f push {r0, r1, r2, r3, ip, lr} - // Read the ICCIAR from the CPU Interface in the GIC - int interrupt_ID = *((int*) 0xFFFEC10C); - 99c: e3e03a13 mvn r3, #77824 ; 0x13000 - - if (interrupt_ID == 73) // check if interrupt is from the KEYs - 9a0: e5133ef3 ldr r3, [r3, #-3827] ; 0xfffff10d - 9a4: e3530049 cmp r3, #73 ; 0x49 - 9a8: 1a000004 bne 9c0 <__cs3_isr_irq+0x2c> - pushbutton_ISR (); - 9ac: ebffffd7 bl 910 - else - while (1); // if unexpected, then stay here - - // Write to the End of Interrupt Register (ICCEOIR) - *((int*) 0xFFFEC110) = interrupt_ID; - 9b0: e3a02049 mov r2, #73 ; 0x49 - 9b4: e3e03a13 mvn r3, #77824 ; 0x13000 - 9b8: e5032eef str r2, [r3, #-3823] ; 0xfffff111 - 9bc: e8fd900f ldm sp!, {r0, r1, r2, r3, ip, pc}^ - 9c0: eafffffe b 9c0 <__cs3_isr_irq+0x2c> - -000009c4 : - -void hex_display(int display_num, int value); - -// displays a hex digit accounting for an offset into the next register -void hex_display(int display_num, int value) { - int address = display_num <= 3 ? HEX3_HEX0_BASE : HEX5_HEX4_BASE; - 9c4: e3500003 cmp r0, #3 - 9c8: ca00000c bgt a00 - 9cc: e3a03020 mov r3, #32 - 9d0: e34f3f20 movt r3, #65312 ; 0xff20 - - // make sure we're using the right offset with the given word - if(display_num <= 3) offset = display_num; - else offset = display_num - 4; - - *((int*)address) &= ~(0xFF << offset*8); // clear the two bytes of interest - 9d4: e1a00180 lsl r0, r0, #3 - 9d8: e5932000 ldr r2, [r3] - 9dc: e3a0c0ff mov ip, #255 ; 0xff - 9e0: e1c2c01c bic ip, r2, ip, lsl r0 - *((int*)address) |= (sevenseglookup[value] << offset*8); // set the two bytes - 9e4: e30125dc movw r2, #5596 ; 0x15dc - 9e8: e3402000 movt r2, #0 - 9ec: e0822101 add r2, r2, r1, lsl #2 - 9f0: e592200c ldr r2, [r2, #12] - 9f4: e18c0012 orr r0, ip, r2, lsl r0 - 9f8: e5830000 str r0, [r3] - 9fc: e12fff1e bx lr - int address = display_num <= 3 ? HEX3_HEX0_BASE : HEX5_HEX4_BASE; - int offset = 0; - - // make sure we're using the right offset with the given word - if(display_num <= 3) offset = display_num; - else offset = display_num - 4; - a00: e2400004 sub r0, r0, #4 - -void hex_display(int display_num, int value); - -// displays a hex digit accounting for an offset into the next register -void hex_display(int display_num, int value) { - int address = display_num <= 3 ? HEX3_HEX0_BASE : HEX5_HEX4_BASE; - a04: e3a03030 mov r3, #48 ; 0x30 - a08: e34f3f20 movt r3, #65312 ; 0xff20 - a0c: eafffff0 b 9d4 - -00000a10
: -static colour_t current_colour; -static struct _carworld* data; -static struct _carworld* last_saved; -int first_run = 1; - -int main(void) { - a10: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} - a14: e24dd01c sub sp, sp, #28 - set_A9_IRQ_stack(); - a18: ebffff99 bl 884 - config_GIC(); - a1c: ebffffaf bl 8e0 - config_KEYs(); - a20: ebffff89 bl 84c - enable_A9_interrupts(); - a24: ebffff9d bl 8a0 - vga_init(); - a28: ebfffe65 bl 3c4 - vga_set_border_thickness(BORDER_THICKNESS); - a2c: e3a00001 mov r0, #1 - a30: ebffff20 bl 6b8 - vga_set_screen(GREY); - a34: e59f317c ldr r3, [pc, #380] ; bb8 - a38: e8930007 ldm r3, {r0, r1, r2} - a3c: ebfffe4f bl 380 - vga_show_screen(); - a40: ebfffecc bl 578 - jtag_start_request(); - a44: ebffff25 bl 6e0 - while(1) { - - if(carworld.data_ready == 1) { - a48: e3015af4 movw r5, #6900 ; 0x1af4 - a4c: e3405000 movt r5, #0 - vga_set_border_thickness(EDIT_BORDER_THICKNESS); - carworld_to_colour(data, ¤t_colour); - vga_set_current_segment(current_colour); - } - else { - vga_set_border_thickness(BORDER_THICKNESS); - a50: e3a0b001 mov fp, #1 - - if(carworld.data_ready == 1) { - data = get_carworld_data(); - jtag_start_request(); - if(is_editing == 1) { - first_run = 0; - a54: e3019698 movw r9, #5784 ; 0x1698 - a58: e3409000 movt r9, #0 - a5c: e3a04000 mov r4, #0 - last_saved = data; - vga_set_border_thickness(EDIT_BORDER_THICKNESS); - carworld_to_colour(data, ¤t_colour); - a60: e2857080 add r7, r5, #128 ; 0x80 - vga_set_screen(GREY); - vga_show_screen(); - jtag_start_request(); - while(1) { - - if(carworld.data_ready == 1) { - a64: e5953070 ldr r3, [r5, #112] ; 0x70 - a68: e3530001 cmp r3, #1 - a6c: 1a000014 bne ac4 - data = get_carworld_data(); - a70: ebffff4f bl 7b4 - a74: e1a06000 mov r6, r0 - a78: e5850078 str r0, [r5, #120] ; 0x78 - jtag_start_request(); - a7c: ebffff17 bl 6e0 - if(is_editing == 1) { - a80: e5953074 ldr r3, [r5, #116] ; 0x74 - a84: e3530001 cmp r3, #1 - a88: 1a000009 bne ab4 - first_run = 0; - a8c: e5894004 str r4, [r9, #4] - last_saved = data; - a90: e585607c str r6, [r5, #124] ; 0x7c - vga_set_border_thickness(EDIT_BORDER_THICKNESS); - a94: e3a00002 mov r0, #2 - a98: ebffff06 bl 6b8 - carworld_to_colour(data, ¤t_colour); - a9c: e1a00006 mov r0, r6 - aa0: e1a01007 mov r1, r7 - aa4: ebffff48 bl 7cc - vga_set_current_segment(current_colour); - aa8: e8970007 ldm r7, {r0, r1, r2} - aac: ebfffee6 bl 64c - ab0: ea000001 b abc - } - else { - vga_set_border_thickness(BORDER_THICKNESS); - ab4: e1a0000b mov r0, fp - ab8: ebfffefe bl 6b8 - } - vga_draw_current_segment(); - abc: ebfffef7 bl 6a0 - ac0: ea000000 b ac8 - - } - else { - jtag_read_fifo(); - ac4: ebffff11 bl 710 - } - if(first_run) { - ac8: e5993004 ldr r3, [r9, #4] - acc: e3530000 cmp r3, #0 - ad0: 0a000007 beq af4 - ad4: e1a06004 mov r6, r4 - int i; - for(i = 0; i < 6; i++) { - hex_display(i, 0); - ad8: e1a00006 mov r0, r6 - adc: e1a01004 mov r1, r4 - ae0: ebffffb7 bl 9c4 - else { - jtag_read_fifo(); - } - if(first_run) { - int i; - for(i = 0; i < 6; i++) { - ae4: e2866001 add r6, r6, #1 - ae8: e3560006 cmp r6, #6 - aec: 1afffff9 bne ad8 - af0: eaffffdb b a64 - hex_display(i, 0); - } - } - else { - current_colour = vga_get_current_segment(); - af4: e28d6008 add r6, sp, #8 - af8: e1a00006 mov r0, r6 - afc: ebfffedd bl 678 - b00: e8960007 ldm r6, {r0, r1, r2} - b04: e8870007 stm r7, {r0, r1, r2} - int red = map(current_colour.red, 0, VGA_MAX_RED, 0, 0xFF); - b08: e5950080 ldr r0, [r5, #128] ; 0x80 - b0c: e3a060ff mov r6, #255 ; 0xff - b10: e58d6000 str r6, [sp] - b14: e1a01004 mov r1, r4 - b18: e3a0201f mov r2, #31 - b1c: e1a03004 mov r3, r4 - b20: ebfffdcd bl 25c - b24: e1a08000 mov r8, r0 - int green = map(current_colour.green, 0, VGA_MAX_GREEN, 0, 0xFF); - b28: e5950084 ldr r0, [r5, #132] ; 0x84 - b2c: e58d6000 str r6, [sp] - b30: e1a01004 mov r1, r4 - b34: e3a0203f mov r2, #63 ; 0x3f - b38: e1a03004 mov r3, r4 - b3c: ebfffdc6 bl 25c - b40: e1a06000 mov r6, r0 - if(green == 0xFE) green = 0xFF; - b44: e35000fe cmp r0, #254 ; 0xfe - b48: 03a060ff moveq r6, #255 ; 0xff - int blue = map(current_colour.blue, 0, VGA_MAX_BLUE, 0, 0xFF); - b4c: e5950088 ldr r0, [r5, #136] ; 0x88 - b50: e3a030ff mov r3, #255 ; 0xff - b54: e58d3000 str r3, [sp] - b58: e1a01004 mov r1, r4 - b5c: e3a0201f mov r2, #31 - b60: e1a03004 mov r3, r4 - b64: ebfffdbc bl 25c - b68: e1a0a000 mov sl, r0 - hex_display(0, blue & 0xF); - b6c: e1a00004 mov r0, r4 - b70: e20a100f and r1, sl, #15 - b74: ebffff92 bl 9c4 - hex_display(1, (blue >> 4) & 0xF); - b78: e1a0000b mov r0, fp - b7c: e7e3125a ubfx r1, sl, #4, #4 - b80: ebffff8f bl 9c4 - hex_display(2, green & 0xF); - b84: e3a00002 mov r0, #2 - b88: e206100f and r1, r6, #15 - b8c: ebffff8c bl 9c4 - hex_display(3, (green >> 4) & 0xF); - b90: e3a00003 mov r0, #3 - b94: e7e31256 ubfx r1, r6, #4, #4 - b98: ebffff89 bl 9c4 - hex_display(4, red & 0xF); - b9c: e3a00004 mov r0, #4 - ba0: e208100f and r1, r8, #15 - ba4: ebffff86 bl 9c4 - hex_display(5, (red >> 4) & 0xF); - ba8: e3a00005 mov r0, #5 - bac: e7e31258 ubfx r1, r8, #4, #4 - bb0: ebffff83 bl 9c4 - bb4: eaffffaa b a64 - bb8: 00001628 .word 0x00001628 - -00000bbc <__aeabi_frsub>: - bbc: e2200102 eor r0, r0, #-2147483648 ; 0x80000000 - bc0: ea000000 b bc8 <__addsf3> - -00000bc4 <__aeabi_fsub>: - bc4: e2211102 eor r1, r1, #-2147483648 ; 0x80000000 - -00000bc8 <__addsf3>: - bc8: e1b02080 lsls r2, r0, #1 - bcc: 11b03081 lslsne r3, r1, #1 - bd0: 11320003 teqne r2, r3 - bd4: 11f0cc42 mvnsne ip, r2, asr #24 - bd8: 11f0cc43 mvnsne ip, r3, asr #24 - bdc: 0a000047 beq d00 <__addsf3+0x138> - be0: e1a02c22 lsr r2, r2, #24 - be4: e0723c23 rsbs r3, r2, r3, lsr #24 - be8: c0822003 addgt r2, r2, r3 - bec: c0201001 eorgt r1, r0, r1 - bf0: c0210000 eorgt r0, r1, r0 - bf4: c0201001 eorgt r1, r0, r1 - bf8: b2633000 rsblt r3, r3, #0 - bfc: e3530019 cmp r3, #25 - c00: 812fff1e bxhi lr - c04: e3100102 tst r0, #-2147483648 ; 0x80000000 - c08: e3800502 orr r0, r0, #8388608 ; 0x800000 - c0c: e3c004ff bic r0, r0, #-16777216 ; 0xff000000 - c10: 12600000 rsbne r0, r0, #0 - c14: e3110102 tst r1, #-2147483648 ; 0x80000000 - c18: e3811502 orr r1, r1, #8388608 ; 0x800000 - c1c: e3c114ff bic r1, r1, #-16777216 ; 0xff000000 - c20: 12611000 rsbne r1, r1, #0 - c24: e1320003 teq r2, r3 - c28: 0a00002e beq ce8 <__addsf3+0x120> - c2c: e2422001 sub r2, r2, #1 - c30: e0900351 adds r0, r0, r1, asr r3 - c34: e2633020 rsb r3, r3, #32 - c38: e1a01311 lsl r1, r1, r3 - c3c: e2003102 and r3, r0, #-2147483648 ; 0x80000000 - c40: 5a000001 bpl c4c <__addsf3+0x84> - c44: e2711000 rsbs r1, r1, #0 - c48: e2e00000 rsc r0, r0, #0 - c4c: e3500502 cmp r0, #8388608 ; 0x800000 - c50: 3a00000b bcc c84 <__addsf3+0xbc> - c54: e3500401 cmp r0, #16777216 ; 0x1000000 - c58: 3a000004 bcc c70 <__addsf3+0xa8> - c5c: e1b000a0 lsrs r0, r0, #1 - c60: e1a01061 rrx r1, r1 - c64: e2822001 add r2, r2, #1 - c68: e35200fe cmp r2, #254 ; 0xfe - c6c: 2a000038 bcs d54 <__addsf3+0x18c> - c70: e3510102 cmp r1, #-2147483648 ; 0x80000000 - c74: e0a00b82 adc r0, r0, r2, lsl #23 - c78: 03c00001 biceq r0, r0, #1 - c7c: e1800003 orr r0, r0, r3 - c80: e12fff1e bx lr - c84: e1b01081 lsls r1, r1, #1 - c88: e0a00000 adc r0, r0, r0 - c8c: e3100502 tst r0, #8388608 ; 0x800000 - c90: e2422001 sub r2, r2, #1 - c94: 1afffff5 bne c70 <__addsf3+0xa8> - c98: e1b0c620 lsrs ip, r0, #12 - c9c: 01a00600 lsleq r0, r0, #12 - ca0: 0242200c subeq r2, r2, #12 - ca4: e31008ff tst r0, #16711680 ; 0xff0000 - ca8: 01a00400 lsleq r0, r0, #8 - cac: 02422008 subeq r2, r2, #8 - cb0: e310060f tst r0, #15728640 ; 0xf00000 - cb4: 01a00200 lsleq r0, r0, #4 - cb8: 02422004 subeq r2, r2, #4 - cbc: e3100503 tst r0, #12582912 ; 0xc00000 - cc0: 01a00100 lsleq r0, r0, #2 - cc4: 02422002 subeq r2, r2, #2 - cc8: e3500502 cmp r0, #8388608 ; 0x800000 - ccc: 31a00080 lslcc r0, r0, #1 - cd0: e2d22000 sbcs r2, r2, #0 - cd4: a0800b82 addge r0, r0, r2, lsl #23 - cd8: b2622000 rsblt r2, r2, #0 - cdc: a1800003 orrge r0, r0, r3 - ce0: b1830230 orrlt r0, r3, r0, lsr r2 - ce4: e12fff1e bx lr - ce8: e3320000 teq r2, #0 - cec: e2211502 eor r1, r1, #8388608 ; 0x800000 - cf0: 02200502 eoreq r0, r0, #8388608 ; 0x800000 - cf4: 02822001 addeq r2, r2, #1 - cf8: 12433001 subne r3, r3, #1 - cfc: eaffffca b c2c <__addsf3+0x64> - d00: e1a03081 lsl r3, r1, #1 - d04: e1f0cc42 mvns ip, r2, asr #24 - d08: 11f0cc43 mvnsne ip, r3, asr #24 - d0c: 0a000013 beq d60 <__addsf3+0x198> - d10: e1320003 teq r2, r3 - d14: 0a000002 beq d24 <__addsf3+0x15c> - d18: e3320000 teq r2, #0 - d1c: 01a00001 moveq r0, r1 - d20: e12fff1e bx lr - d24: e1300001 teq r0, r1 - d28: 13a00000 movne r0, #0 - d2c: 112fff1e bxne lr - d30: e31204ff tst r2, #-16777216 ; 0xff000000 - d34: 1a000002 bne d44 <__addsf3+0x17c> - d38: e1b00080 lsls r0, r0, #1 - d3c: 23800102 orrcs r0, r0, #-2147483648 ; 0x80000000 - d40: e12fff1e bx lr - d44: e2922402 adds r2, r2, #33554432 ; 0x2000000 - d48: 32800502 addcc r0, r0, #8388608 ; 0x800000 - d4c: 312fff1e bxcc lr - d50: e2003102 and r3, r0, #-2147483648 ; 0x80000000 - d54: e383047f orr r0, r3, #2130706432 ; 0x7f000000 - d58: e3800502 orr r0, r0, #8388608 ; 0x800000 - d5c: e12fff1e bx lr - d60: e1f02c42 mvns r2, r2, asr #24 - d64: 11a00001 movne r0, r1 - d68: 01f03c43 mvnseq r3, r3, asr #24 - d6c: 11a01000 movne r1, r0 - d70: e1b02480 lsls r2, r0, #9 - d74: 01b03481 lslseq r3, r1, #9 - d78: 01300001 teqeq r0, r1 - d7c: 13800501 orrne r0, r0, #4194304 ; 0x400000 - d80: e12fff1e bx lr - -00000d84 <__aeabi_ui2f>: - d84: e3a03000 mov r3, #0 - d88: ea000001 b d94 <__aeabi_i2f+0x8> - -00000d8c <__aeabi_i2f>: - d8c: e2103102 ands r3, r0, #-2147483648 ; 0x80000000 - d90: 42600000 rsbmi r0, r0, #0 - d94: e1b0c000 movs ip, r0 - d98: 012fff1e bxeq lr - d9c: e383344b orr r3, r3, #1258291200 ; 0x4b000000 - da0: e1a01000 mov r1, r0 - da4: e3a00000 mov r0, #0 - da8: ea00000f b dec <__aeabi_l2f+0x30> - -00000dac <__aeabi_ul2f>: - dac: e1902001 orrs r2, r0, r1 - db0: 012fff1e bxeq lr - db4: e3a03000 mov r3, #0 - db8: ea000005 b dd4 <__aeabi_l2f+0x18> - -00000dbc <__aeabi_l2f>: - dbc: e1902001 orrs r2, r0, r1 - dc0: 012fff1e bxeq lr - dc4: e2113102 ands r3, r1, #-2147483648 ; 0x80000000 - dc8: 5a000001 bpl dd4 <__aeabi_l2f+0x18> - dcc: e2700000 rsbs r0, r0, #0 - dd0: e2e11000 rsc r1, r1, #0 - dd4: e1b0c001 movs ip, r1 - dd8: 01a0c000 moveq ip, r0 - ddc: 01a01000 moveq r1, r0 - de0: 03a00000 moveq r0, #0 - de4: e383345b orr r3, r3, #1526726656 ; 0x5b000000 - de8: 02433201 subeq r3, r3, #268435456 ; 0x10000000 - dec: e2433502 sub r3, r3, #8388608 ; 0x800000 - df0: e3a02017 mov r2, #23 - df4: e35c0801 cmp ip, #65536 ; 0x10000 - df8: 21a0c82c lsrcs ip, ip, #16 - dfc: 22422010 subcs r2, r2, #16 - e00: e35c0c01 cmp ip, #256 ; 0x100 - e04: 21a0c42c lsrcs ip, ip, #8 - e08: 22422008 subcs r2, r2, #8 - e0c: e35c0010 cmp ip, #16 - e10: 21a0c22c lsrcs ip, ip, #4 - e14: 22422004 subcs r2, r2, #4 - e18: e35c0004 cmp ip, #4 - e1c: 22422002 subcs r2, r2, #2 - e20: 304220ac subcc r2, r2, ip, lsr #1 - e24: e05221ac subs r2, r2, ip, lsr #3 - e28: e0433b82 sub r3, r3, r2, lsl #23 - e2c: ba000006 blt e4c <__aeabi_l2f+0x90> - e30: e0833211 add r3, r3, r1, lsl r2 - e34: e1a0c210 lsl ip, r0, r2 - e38: e2622020 rsb r2, r2, #32 - e3c: e35c0102 cmp ip, #-2147483648 ; 0x80000000 - e40: e0a30230 adc r0, r3, r0, lsr r2 - e44: 03c00001 biceq r0, r0, #1 - e48: e12fff1e bx lr - e4c: e2822020 add r2, r2, #32 - e50: e1a0c211 lsl ip, r1, r2 - e54: e2622020 rsb r2, r2, #32 - e58: e190008c orrs r0, r0, ip, lsl #1 - e5c: e0a30231 adc r0, r3, r1, lsr r2 - e60: 01c00fac biceq r0, r0, ip, lsr #31 - e64: e12fff1e bx lr - -00000e68 <__aeabi_fmul>: - e68: e3a0c0ff mov ip, #255 ; 0xff - e6c: e01c2ba0 ands r2, ip, r0, lsr #23 - e70: 101c3ba1 andsne r3, ip, r1, lsr #23 - e74: 1132000c teqne r2, ip - e78: 1133000c teqne r3, ip - e7c: 0a00003e beq f7c <__aeabi_fmul+0x114> - e80: e0822003 add r2, r2, r3 - e84: e020c001 eor ip, r0, r1 - e88: e1b00480 lsls r0, r0, #9 - e8c: 11b01481 lslsne r1, r1, #9 - e90: 0a000010 beq ed8 <__aeabi_fmul+0x70> - e94: e3a03302 mov r3, #134217728 ; 0x8000000 - e98: e18302a0 orr r0, r3, r0, lsr #5 - e9c: e18312a1 orr r1, r3, r1, lsr #5 - ea0: e0813190 umull r3, r1, r0, r1 - ea4: e20c0102 and r0, ip, #-2147483648 ; 0x80000000 - ea8: e3510502 cmp r1, #8388608 ; 0x800000 - eac: 31a01081 lslcc r1, r1, #1 - eb0: 31811fa3 orrcc r1, r1, r3, lsr #31 - eb4: 31a03083 lslcc r3, r3, #1 - eb8: e1800001 orr r0, r0, r1 - ebc: e2c2207f sbc r2, r2, #127 ; 0x7f - ec0: e35200fd cmp r2, #253 ; 0xfd - ec4: 8a00000f bhi f08 <__aeabi_fmul+0xa0> - ec8: e3530102 cmp r3, #-2147483648 ; 0x80000000 - ecc: e0a00b82 adc r0, r0, r2, lsl #23 - ed0: 03c00001 biceq r0, r0, #1 - ed4: e12fff1e bx lr - ed8: e3300000 teq r0, #0 - edc: e20cc102 and ip, ip, #-2147483648 ; 0x80000000 - ee0: 01a01481 lsleq r1, r1, #9 - ee4: e18c04a0 orr r0, ip, r0, lsr #9 - ee8: e18004a1 orr r0, r0, r1, lsr #9 - eec: e252207f subs r2, r2, #127 ; 0x7f - ef0: c27230ff rsbsgt r3, r2, #255 ; 0xff - ef4: c1800b82 orrgt r0, r0, r2, lsl #23 - ef8: c12fff1e bxgt lr - efc: e3800502 orr r0, r0, #8388608 ; 0x800000 - f00: e3a03000 mov r3, #0 - f04: e2522001 subs r2, r2, #1 - f08: ca000035 bgt fe4 <__aeabi_fmul+0x17c> - f0c: e3720019 cmn r2, #25 - f10: d2000102 andle r0, r0, #-2147483648 ; 0x80000000 - f14: d12fff1e bxle lr - f18: e2622000 rsb r2, r2, #0 - f1c: e1b01080 lsls r1, r0, #1 - f20: e1a01231 lsr r1, r1, r2 - f24: e2622020 rsb r2, r2, #32 - f28: e1a0c210 lsl ip, r0, r2 - f2c: e1b00061 rrxs r0, r1 - f30: e2a00000 adc r0, r0, #0 - f34: e193308c orrs r3, r3, ip, lsl #1 - f38: 01c00fac biceq r0, r0, ip, lsr #31 - f3c: e12fff1e bx lr - f40: e3320000 teq r2, #0 - f44: e200c102 and ip, r0, #-2147483648 ; 0x80000000 - f48: 01a00080 lsleq r0, r0, #1 - f4c: 03100502 tsteq r0, #8388608 ; 0x800000 - f50: 02422001 subeq r2, r2, #1 - f54: 0afffffb beq f48 <__aeabi_fmul+0xe0> - f58: e180000c orr r0, r0, ip - f5c: e3330000 teq r3, #0 - f60: e201c102 and ip, r1, #-2147483648 ; 0x80000000 - f64: 01a01081 lsleq r1, r1, #1 - f68: 03110502 tsteq r1, #8388608 ; 0x800000 - f6c: 02433001 subeq r3, r3, #1 - f70: 0afffffb beq f64 <__aeabi_fmul+0xfc> - f74: e181100c orr r1, r1, ip - f78: eaffffc0 b e80 <__aeabi_fmul+0x18> - f7c: e00c3ba1 and r3, ip, r1, lsr #23 - f80: e132000c teq r2, ip - f84: 1133000c teqne r3, ip - f88: 0a000005 beq fa4 <__aeabi_fmul+0x13c> - f8c: e3d0c102 bics ip, r0, #-2147483648 ; 0x80000000 - f90: 13d1c102 bicsne ip, r1, #-2147483648 ; 0x80000000 - f94: 1affffe9 bne f40 <__aeabi_fmul+0xd8> - f98: e0200001 eor r0, r0, r1 - f9c: e2000102 and r0, r0, #-2147483648 ; 0x80000000 - fa0: e12fff1e bx lr - fa4: e3300000 teq r0, #0 - fa8: 13300102 teqne r0, #-2147483648 ; 0x80000000 - fac: 01a00001 moveq r0, r1 - fb0: 13310000 teqne r1, #0 - fb4: 13310102 teqne r1, #-2147483648 ; 0x80000000 - fb8: 0a00000d beq ff4 <__aeabi_fmul+0x18c> - fbc: e132000c teq r2, ip - fc0: 1a000001 bne fcc <__aeabi_fmul+0x164> - fc4: e1b02480 lsls r2, r0, #9 - fc8: 1a000009 bne ff4 <__aeabi_fmul+0x18c> - fcc: e133000c teq r3, ip - fd0: 1a000002 bne fe0 <__aeabi_fmul+0x178> - fd4: e1b03481 lsls r3, r1, #9 - fd8: 11a00001 movne r0, r1 - fdc: 1a000004 bne ff4 <__aeabi_fmul+0x18c> - fe0: e0200001 eor r0, r0, r1 - fe4: e2000102 and r0, r0, #-2147483648 ; 0x80000000 - fe8: e380047f orr r0, r0, #2130706432 ; 0x7f000000 - fec: e3800502 orr r0, r0, #8388608 ; 0x800000 - ff0: e12fff1e bx lr - ff4: e380047f orr r0, r0, #2130706432 ; 0x7f000000 - ff8: e3800503 orr r0, r0, #12582912 ; 0xc00000 - ffc: e12fff1e bx lr - -00001000 <__aeabi_fdiv>: - 1000: e3a0c0ff mov ip, #255 ; 0xff - 1004: e01c2ba0 ands r2, ip, r0, lsr #23 - 1008: 101c3ba1 andsne r3, ip, r1, lsr #23 - 100c: 1132000c teqne r2, ip - 1010: 1133000c teqne r3, ip - 1014: 0a00003a beq 1104 <__aeabi_fdiv+0x104> - 1018: e0422003 sub r2, r2, r3 - 101c: e020c001 eor ip, r0, r1 - 1020: e1b01481 lsls r1, r1, #9 - 1024: e1a00480 lsl r0, r0, #9 - 1028: 0a00001c beq 10a0 <__aeabi_fdiv+0xa0> - 102c: e3a03201 mov r3, #268435456 ; 0x10000000 - 1030: e1831221 orr r1, r3, r1, lsr #4 - 1034: e1833220 orr r3, r3, r0, lsr #4 - 1038: e20c0102 and r0, ip, #-2147483648 ; 0x80000000 - 103c: e1530001 cmp r3, r1 - 1040: 31a03083 lslcc r3, r3, #1 - 1044: e2a2207d adc r2, r2, #125 ; 0x7d - 1048: e3a0c502 mov ip, #8388608 ; 0x800000 - 104c: e1530001 cmp r3, r1 - 1050: 20433001 subcs r3, r3, r1 - 1054: 2180000c orrcs r0, r0, ip - 1058: e15300a1 cmp r3, r1, lsr #1 - 105c: 204330a1 subcs r3, r3, r1, lsr #1 - 1060: 218000ac orrcs r0, r0, ip, lsr #1 - 1064: e1530121 cmp r3, r1, lsr #2 - 1068: 20433121 subcs r3, r3, r1, lsr #2 - 106c: 2180012c orrcs r0, r0, ip, lsr #2 - 1070: e15301a1 cmp r3, r1, lsr #3 - 1074: 204331a1 subcs r3, r3, r1, lsr #3 - 1078: 218001ac orrcs r0, r0, ip, lsr #3 - 107c: e1b03203 lsls r3, r3, #4 - 1080: 11b0c22c lsrsne ip, ip, #4 - 1084: 1afffff0 bne 104c <__aeabi_fdiv+0x4c> - 1088: e35200fd cmp r2, #253 ; 0xfd - 108c: 8affff9d bhi f08 <__aeabi_fmul+0xa0> - 1090: e1530001 cmp r3, r1 - 1094: e0a00b82 adc r0, r0, r2, lsl #23 - 1098: 03c00001 biceq r0, r0, #1 - 109c: e12fff1e bx lr - 10a0: e20cc102 and ip, ip, #-2147483648 ; 0x80000000 - 10a4: e18c04a0 orr r0, ip, r0, lsr #9 - 10a8: e292207f adds r2, r2, #127 ; 0x7f - 10ac: c27230ff rsbsgt r3, r2, #255 ; 0xff - 10b0: c1800b82 orrgt r0, r0, r2, lsl #23 - 10b4: c12fff1e bxgt lr - 10b8: e3800502 orr r0, r0, #8388608 ; 0x800000 - 10bc: e3a03000 mov r3, #0 - 10c0: e2522001 subs r2, r2, #1 - 10c4: eaffff8f b f08 <__aeabi_fmul+0xa0> - 10c8: e3320000 teq r2, #0 - 10cc: e200c102 and ip, r0, #-2147483648 ; 0x80000000 - 10d0: 01a00080 lsleq r0, r0, #1 - 10d4: 03100502 tsteq r0, #8388608 ; 0x800000 - 10d8: 02422001 subeq r2, r2, #1 - 10dc: 0afffffb beq 10d0 <__aeabi_fdiv+0xd0> - 10e0: e180000c orr r0, r0, ip - 10e4: e3330000 teq r3, #0 - 10e8: e201c102 and ip, r1, #-2147483648 ; 0x80000000 - 10ec: 01a01081 lsleq r1, r1, #1 - 10f0: 03110502 tsteq r1, #8388608 ; 0x800000 - 10f4: 02433001 subeq r3, r3, #1 - 10f8: 0afffffb beq 10ec <__aeabi_fdiv+0xec> - 10fc: e181100c orr r1, r1, ip - 1100: eaffffc4 b 1018 <__aeabi_fdiv+0x18> - 1104: e00c3ba1 and r3, ip, r1, lsr #23 - 1108: e132000c teq r2, ip - 110c: 1a000005 bne 1128 <__aeabi_fdiv+0x128> - 1110: e1b02480 lsls r2, r0, #9 - 1114: 1affffb6 bne ff4 <__aeabi_fmul+0x18c> - 1118: e133000c teq r3, ip - 111c: 1affffaf bne fe0 <__aeabi_fmul+0x178> - 1120: e1a00001 mov r0, r1 - 1124: eaffffb2 b ff4 <__aeabi_fmul+0x18c> - 1128: e133000c teq r3, ip - 112c: 1a000003 bne 1140 <__aeabi_fdiv+0x140> - 1130: e1b03481 lsls r3, r1, #9 - 1134: 0affff97 beq f98 <__aeabi_fmul+0x130> - 1138: e1a00001 mov r0, r1 - 113c: eaffffac b ff4 <__aeabi_fmul+0x18c> - 1140: e3d0c102 bics ip, r0, #-2147483648 ; 0x80000000 - 1144: 13d1c102 bicsne ip, r1, #-2147483648 ; 0x80000000 - 1148: 1affffde bne 10c8 <__aeabi_fdiv+0xc8> - 114c: e3d02102 bics r2, r0, #-2147483648 ; 0x80000000 - 1150: 1affffa2 bne fe0 <__aeabi_fmul+0x178> - 1154: e3d13102 bics r3, r1, #-2147483648 ; 0x80000000 - 1158: 1affff8e bne f98 <__aeabi_fmul+0x130> - 115c: eaffffa4 b ff4 <__aeabi_fmul+0x18c> - -00001160 <__aeabi_f2iz>: - 1160: e1a02080 lsl r2, r0, #1 - 1164: e352047f cmp r2, #2130706432 ; 0x7f000000 - 1168: 3a000008 bcc 1190 <__aeabi_f2iz+0x30> - 116c: e3a0309e mov r3, #158 ; 0x9e - 1170: e0532c22 subs r2, r3, r2, lsr #24 - 1174: 9a000007 bls 1198 <__aeabi_f2iz+0x38> - 1178: e1a03400 lsl r3, r0, #8 - 117c: e3833102 orr r3, r3, #-2147483648 ; 0x80000000 - 1180: e3100102 tst r0, #-2147483648 ; 0x80000000 - 1184: e1a00233 lsr r0, r3, r2 - 1188: 12600000 rsbne r0, r0, #0 - 118c: e12fff1e bx lr - 1190: e3a00000 mov r0, #0 - 1194: e12fff1e bx lr - 1198: e3720061 cmn r2, #97 ; 0x61 - 119c: 1a000001 bne 11a8 <__aeabi_f2iz+0x48> - 11a0: e1b02480 lsls r2, r0, #9 - 11a4: 1a000002 bne 11b4 <__aeabi_f2iz+0x54> - 11a8: e2100102 ands r0, r0, #-2147483648 ; 0x80000000 - 11ac: 03e00102 mvneq r0, #-2147483648 ; 0x80000000 - 11b0: e12fff1e bx lr - 11b4: e3a00000 mov r0, #0 - 11b8: e12fff1e bx lr - -000011bc : - 11bc: e1a01000 mov r1, r0 - 11c0: e3a00000 mov r0, #0 - 11c4: e92d4008 push {r3, lr} - 11c8: e1a02000 mov r2, r0 - 11cc: e1a03000 mov r3, r0 - 11d0: eb00000e bl 1210 <__register_exitproc> - 11d4: e8bd4008 pop {r3, lr} - 11d8: e12fff1e bx lr - -000011dc : - 11dc: e92d4008 push {r3, lr} - 11e0: e3a01000 mov r1, #0 - 11e4: e1a04000 mov r4, r0 - 11e8: eb000045 bl 1304 <__call_exitprocs> - 11ec: e59f3018 ldr r3, [pc, #24] ; 120c - 11f0: e5930000 ldr r0, [r3] - 11f4: e590303c ldr r3, [r0, #60] ; 0x3c - 11f8: e3530000 cmp r3, #0 - 11fc: 11a0e00f movne lr, pc - 1200: 112fff13 bxne r3 - 1204: e1a00004 mov r0, r4 - 1208: eb0000c9 bl 1534 <_exit> - 120c: 00001638 .word 0x00001638 - -00001210 <__register_exitproc>: - 1210: e59fc0e4 ldr ip, [pc, #228] ; 12fc <__register_exitproc+0xec> - 1214: e92d41f0 push {r4, r5, r6, r7, r8, lr} - 1218: e59c4000 ldr r4, [ip] - 121c: e594c148 ldr ip, [r4, #328] ; 0x148 - 1220: e35c0000 cmp ip, #0 - 1224: 0284cf53 addeq ip, r4, #332 ; 0x14c - 1228: e59c5004 ldr r5, [ip, #4] - 122c: 0584c148 streq ip, [r4, #328] ; 0x148 - 1230: e355001f cmp r5, #31 - 1234: e24dd010 sub sp, sp, #16 - 1238: e1a06000 mov r6, r0 - 123c: da000015 ble 1298 <__register_exitproc+0x88> - 1240: e59f00b8 ldr r0, [pc, #184] ; 1300 <__register_exitproc+0xf0> - 1244: e3500000 cmp r0, #0 - 1248: 1a000001 bne 1254 <__register_exitproc+0x44> - 124c: e3e00000 mvn r0, #0 - 1250: ea000018 b 12b8 <__register_exitproc+0xa8> - 1254: e3a00e19 mov r0, #400 ; 0x190 - 1258: e58d100c str r1, [sp, #12] - 125c: e58d2008 str r2, [sp, #8] - 1260: e58d3004 str r3, [sp, #4] - 1264: e320f000 nop {0} - 1268: e250c000 subs ip, r0, #0 - 126c: e59d100c ldr r1, [sp, #12] - 1270: e59d2008 ldr r2, [sp, #8] - 1274: e59d3004 ldr r3, [sp, #4] - 1278: 0afffff3 beq 124c <__register_exitproc+0x3c> - 127c: e5945148 ldr r5, [r4, #328] ; 0x148 - 1280: e3a00000 mov r0, #0 - 1284: e58c0004 str r0, [ip, #4] - 1288: e58c5000 str r5, [ip] - 128c: e584c148 str ip, [r4, #328] ; 0x148 - 1290: e58c0188 str r0, [ip, #392] ; 0x188 - 1294: e58c018c str r0, [ip, #396] ; 0x18c - 1298: e3560000 cmp r6, #0 - 129c: e59c4004 ldr r4, [ip, #4] - 12a0: 1a000007 bne 12c4 <__register_exitproc+0xb4> - 12a4: e2843002 add r3, r4, #2 - 12a8: e2844001 add r4, r4, #1 - 12ac: e78c1103 str r1, [ip, r3, lsl #2] - 12b0: e58c4004 str r4, [ip, #4] - 12b4: e3a00000 mov r0, #0 - 12b8: e28dd010 add sp, sp, #16 - 12bc: e8bd41f0 pop {r4, r5, r6, r7, r8, lr} - 12c0: e12fff1e bx lr - 12c4: e3a00001 mov r0, #1 - 12c8: e1a00410 lsl r0, r0, r4 - 12cc: e08c8104 add r8, ip, r4, lsl #2 - 12d0: e3560002 cmp r6, #2 - 12d4: e59c7188 ldr r7, [ip, #392] ; 0x188 - 12d8: e5883108 str r3, [r8, #264] ; 0x108 - 12dc: 059c318c ldreq r3, [ip, #396] ; 0x18c - 12e0: e1877000 orr r7, r7, r0 - 12e4: 01830000 orreq r0, r3, r0 - 12e8: e1a05008 mov r5, r8 - 12ec: e5882088 str r2, [r8, #136] ; 0x88 - 12f0: e58c7188 str r7, [ip, #392] ; 0x188 - 12f4: 058c018c streq r0, [ip, #396] ; 0x18c - 12f8: eaffffe9 b 12a4 <__register_exitproc+0x94> - 12fc: 00001638 .word 0x00001638 - 1300: 00000000 .word 0x00000000 - -00001304 <__call_exitprocs>: - 1304: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 1308: e59f3168 ldr r3, [pc, #360] ; 1478 <__call_exitprocs+0x174> - 130c: e5933000 ldr r3, [r3] - 1310: e24dd014 sub sp, sp, #20 - 1314: e58d3004 str r3, [sp, #4] - 1318: e2833f52 add r3, r3, #328 ; 0x148 - 131c: e58d0008 str r0, [sp, #8] - 1320: e58d300c str r3, [sp, #12] - 1324: e1a07001 mov r7, r1 - 1328: e3a08001 mov r8, #1 - 132c: e59d3004 ldr r3, [sp, #4] - 1330: e5936148 ldr r6, [r3, #328] ; 0x148 - 1334: e3560000 cmp r6, #0 - 1338: e59db00c ldr fp, [sp, #12] - 133c: 0a000033 beq 1410 <__call_exitprocs+0x10c> - 1340: e5965004 ldr r5, [r6, #4] - 1344: e2554001 subs r4, r5, #1 - 1348: 5286a088 addpl sl, r6, #136 ; 0x88 - 134c: 5285501f addpl r5, r5, #31 - 1350: 508a5105 addpl r5, sl, r5, lsl #2 - 1354: 5a000007 bpl 1378 <__call_exitprocs+0x74> - 1358: ea000029 b 1404 <__call_exitprocs+0x100> - 135c: e5953000 ldr r3, [r5] - 1360: e1530007 cmp r3, r7 - 1364: 0a000005 beq 1380 <__call_exitprocs+0x7c> - 1368: e2444001 sub r4, r4, #1 - 136c: e3740001 cmn r4, #1 - 1370: e2455004 sub r5, r5, #4 - 1374: 0a000022 beq 1404 <__call_exitprocs+0x100> - 1378: e3570000 cmp r7, #0 - 137c: 1afffff6 bne 135c <__call_exitprocs+0x58> - 1380: e5963004 ldr r3, [r6, #4] - 1384: e06a2005 rsb r2, sl, r5 - 1388: e2433001 sub r3, r3, #1 - 138c: e0862002 add r2, r6, r2 - 1390: e1530004 cmp r3, r4 - 1394: e5123078 ldr r3, [r2, #-120] ; 0xffffff88 - 1398: 13a01000 movne r1, #0 - 139c: 05864004 streq r4, [r6, #4] - 13a0: 15021078 strne r1, [r2, #-120] ; 0xffffff88 - 13a4: e3530000 cmp r3, #0 - 13a8: 0affffee beq 1368 <__call_exitprocs+0x64> - 13ac: e1a02418 lsl r2, r8, r4 - 13b0: e5961188 ldr r1, [r6, #392] ; 0x188 - 13b4: e1120001 tst r2, r1 - 13b8: e5969004 ldr r9, [r6, #4] - 13bc: 0a000016 beq 141c <__call_exitprocs+0x118> - 13c0: e596118c ldr r1, [r6, #396] ; 0x18c - 13c4: e1120001 tst r2, r1 - 13c8: 1a000016 bne 1428 <__call_exitprocs+0x124> - 13cc: e59d0008 ldr r0, [sp, #8] - 13d0: e5151080 ldr r1, [r5, #-128] ; 0xffffff80 - 13d4: e1a0e00f mov lr, pc - 13d8: e12fff13 bx r3 - 13dc: e5963004 ldr r3, [r6, #4] - 13e0: e1530009 cmp r3, r9 - 13e4: 1affffd0 bne 132c <__call_exitprocs+0x28> - 13e8: e59b3000 ldr r3, [fp] - 13ec: e1530006 cmp r3, r6 - 13f0: 1affffcd bne 132c <__call_exitprocs+0x28> - 13f4: e2444001 sub r4, r4, #1 - 13f8: e3740001 cmn r4, #1 - 13fc: e2455004 sub r5, r5, #4 - 1400: 1affffdc bne 1378 <__call_exitprocs+0x74> - 1404: e59f1070 ldr r1, [pc, #112] ; 147c <__call_exitprocs+0x178> - 1408: e3510000 cmp r1, #0 - 140c: 1a000009 bne 1438 <__call_exitprocs+0x134> - 1410: e28dd014 add sp, sp, #20 - 1414: e8bd4ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 1418: e12fff1e bx lr - 141c: e1a0e00f mov lr, pc - 1420: e12fff13 bx r3 - 1424: eaffffec b 13dc <__call_exitprocs+0xd8> - 1428: e5150080 ldr r0, [r5, #-128] ; 0xffffff80 - 142c: e1a0e00f mov lr, pc - 1430: e12fff13 bx r3 - 1434: eaffffe8 b 13dc <__call_exitprocs+0xd8> - 1438: e5963004 ldr r3, [r6, #4] - 143c: e3530000 cmp r3, #0 - 1440: e5963000 ldr r3, [r6] - 1444: 1a000008 bne 146c <__call_exitprocs+0x168> - 1448: e3530000 cmp r3, #0 - 144c: 0a000006 beq 146c <__call_exitprocs+0x168> - 1450: e1a00006 mov r0, r6 - 1454: e58b3000 str r3, [fp] - 1458: e320f000 nop {0} - 145c: e59b6000 ldr r6, [fp] - 1460: e3560000 cmp r6, #0 - 1464: 1affffb5 bne 1340 <__call_exitprocs+0x3c> - 1468: eaffffe8 b 1410 <__call_exitprocs+0x10c> - 146c: e1a0b006 mov fp, r6 - 1470: e1a06003 mov r6, r3 - 1474: eafffff9 b 1460 <__call_exitprocs+0x15c> - 1478: 00001638 .word 0x00001638 - 147c: 00000000 .word 0x00000000 - -00001480 : - 1480: e92d4008 push {r3, lr} - 1484: e59f3010 ldr r3, [pc, #16] ; 149c - 1488: e3530000 cmp r3, #0 - 148c: 159f000c ldrne r0, [pc, #12] ; 14a0 - 1490: 1bffff49 blne 11bc - 1494: e8bd4008 pop {r3, lr} - 1498: e12fff1e bx lr - 149c: 00001660 .word 0x00001660 - 14a0: 000014a4 .word 0x000014a4 - -000014a4 <__libc_fini_array>: - 14a4: e92d4038 push {r3, r4, r5, lr} - 14a8: e59f5030 ldr r5, [pc, #48] ; 14e0 <__libc_fini_array+0x3c> - 14ac: e59f4030 ldr r4, [pc, #48] ; 14e4 <__libc_fini_array+0x40> - 14b0: e0654004 rsb r4, r5, r4 - 14b4: e1b04144 asrs r4, r4, #2 - 14b8: 10855104 addne r5, r5, r4, lsl #2 - 14bc: 0a000004 beq 14d4 <__libc_fini_array+0x30> - 14c0: e5353004 ldr r3, [r5, #-4]! - 14c4: e1a0e00f mov lr, pc - 14c8: e12fff13 bx r3 - 14cc: e2544001 subs r4, r4, #1 - 14d0: 1afffffa bne 14c0 <__libc_fini_array+0x1c> - 14d4: eb000061 bl 1660 <__libc_fini> - 14d8: e8bd4038 pop {r3, r4, r5, lr} - 14dc: e12fff1e bx lr - 14e0: 00001678 .word 0x00001678 - 14e4: 0000167c .word 0x0000167c - -000014e8 <__cs3_premain>: - 14e8: e92d4008 push {r3, lr} - 14ec: eb000017 bl 1550 <__libc_init_array> - 14f0: e59f3030 ldr r3, [pc, #48] ; 1528 <__cs3_premain+0x40> - 14f4: e3530000 cmp r3, #0 - 14f8: 15930000 ldrne r0, [r3] - 14fc: 01a00003 moveq r0, r3 - 1500: e59f3024 ldr r3, [pc, #36] ; 152c <__cs3_premain+0x44> - 1504: e3530000 cmp r3, #0 - 1508: 15931000 ldrne r1, [r3] - 150c: 01a01003 moveq r1, r3 - 1510: e3a02000 mov r2, #0 - 1514: ebfffd3d bl a10
- 1518: e59f3010 ldr r3, [pc, #16] ; 1530 <__cs3_premain+0x48> - 151c: e3530000 cmp r3, #0 - 1520: 1bffff2d blne 11dc - 1524: eafffffe b 1524 <__cs3_premain+0x3c> - ... - 1530: 000011dc .word 0x000011dc - -00001534 <_exit>: - 1534: e52de004 push {lr} ; (str lr, [sp, #-4]!) - 1538: e3a00018 mov r0, #24 - 153c: e59f1004 ldr r1, [pc, #4] ; 1548 <_exit+0x14> - 1540: ef123456 svc 0x00123456 - 1544: eafffffe b 1544 <_exit+0x10> - 1548: 00020026 .word 0x00020026 - -0000154c <__cs3_isr_interrupt>: - 154c: eafffffe b 154c <__cs3_isr_interrupt> - -00001550 <__libc_init_array>: - 1550: e92d4070 push {r4, r5, r6, lr} - 1554: e59f506c ldr r5, [pc, #108] ; 15c8 <__libc_init_array+0x78> - 1558: e59f606c ldr r6, [pc, #108] ; 15cc <__libc_init_array+0x7c> - 155c: e0656006 rsb r6, r5, r6 - 1560: e1b06146 asrs r6, r6, #2 - 1564: 12455004 subne r5, r5, #4 - 1568: 13a04000 movne r4, #0 - 156c: 0a000005 beq 1588 <__libc_init_array+0x38> - 1570: e5b53004 ldr r3, [r5, #4]! - 1574: e2844001 add r4, r4, #1 - 1578: e1a0e00f mov lr, pc - 157c: e12fff13 bx r3 - 1580: e1560004 cmp r6, r4 - 1584: 1afffff9 bne 1570 <__libc_init_array+0x20> - 1588: e59f5040 ldr r5, [pc, #64] ; 15d0 <__libc_init_array+0x80> - 158c: e59f6040 ldr r6, [pc, #64] ; 15d4 <__libc_init_array+0x84> - 1590: e0656006 rsb r6, r5, r6 - 1594: eb000029 bl 1640 <_init> - 1598: e1b06146 asrs r6, r6, #2 - 159c: 12455004 subne r5, r5, #4 - 15a0: 13a04000 movne r4, #0 - 15a4: 0a000005 beq 15c0 <__libc_init_array+0x70> - 15a8: e5b53004 ldr r3, [r5, #4]! - 15ac: e2844001 add r4, r4, #1 - 15b0: e1a0e00f mov lr, pc - 15b4: e12fff13 bx r3 - 15b8: e1560004 cmp r6, r4 - 15bc: 1afffff9 bne 15a8 <__libc_init_array+0x58> - 15c0: e8bd4070 pop {r4, r5, r6, lr} - 15c4: e12fff1e bx lr - 15c8: 00001658 .word 0x00001658 - 15cc: 00001658 .word 0x00001658 - 15d0: 00001658 .word 0x00001658 - 15d4: 00001660 .word 0x00001660 - -Disassembly of section .rodata: - -000015dc : - ... - -000015e8 : - 15e8: 0000003f 00000006 0000005b 0000004f ?.......[...O... - 15f8: 00000066 0000006d 0000007d 00000007 f...m...}....... - 1608: 0000007f 00000067 00000077 0000007c ....g...w...|... - 1618: 00000058 0000005e 00000079 00000071 X...^...y...q... - -00001628 : - 1628: 0000000a 00000014 0000000a ............ - -00001634 : - 1634: ff211020 .!. - -00001638 <_global_impure_ptr>: - 1638: 000016a8 00000043 ....C... - -00001640 <_init>: - 1640: e1a0c00d mov ip, sp - 1644: e92ddff8 push {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} - 1648: e24cb004 sub fp, ip, #4 - 164c: e24bd028 sub sp, fp, #40 ; 0x28 - 1650: e89d6ff0 ldm sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr} - 1654: e12fff1e bx lr - -00001658 <__init_array_start>: - 1658: 00001480 .word 0x00001480 - -0000165c <__frame_dummy_init_array_entry>: - 165c: 00000208 .... - -00001660 <__libc_fini>: - 1660: e1a0c00d mov ip, sp - 1664: e92ddff8 push {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} - 1668: e24cb004 sub fp, ip, #4 - 166c: e24bd028 sub sp, fp, #40 ; 0x28 - 1670: e89d6ff0 ldm sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr} - 1674: e12fff1e bx lr - -00001678 <__fini_array_start>: - 1678: 000001c4 .word 0x000001c4 - -0000167c <__cs3_regions>: - ... - 1688: 00001ad8 .word 0x00001ad8 - 168c: 000000a8 .word 0x000000a8 diff --git a/main.c.o b/main.c.o deleted file mode 100644 index 1360e1a..0000000 Binary files a/main.c.o and /dev/null differ diff --git a/main.srec b/main.srec deleted file mode 100644 index bc4dc9a..0000000 --- a/main.srec +++ /dev/null @@ -1,434 +0,0 @@ -S00C00006D61696E2E7372656373 -S113000018F09FE518F09FE518F09FE518F09FE5BC -S113001018F09FE518F09FE518F09FE518F09FE5AC -S11300206008000064080000680800006C08000014 -S1130030700800004C1500009409000074080000CA -S1130040260000EA8C609FE5000056E380402DE91D -S1130050016046E21E00000A7C509FE50000A0E318 -S11300600010A0E30C2015E510E015E5084015E5A7 -S113007002005EE1042082000900000A000054E34B -S11300800700000A0270A0E102C0A0E10C00BEE873 -S11300900C00ACE80C3067E0030054E10C20A0E154 -S11300A0F9FFFF1A04E015E500005EE30230A01139 -S11300B00300000A0300A3E803C062E00C005EE151 -S11300C0FBFFFF1A016046E2010076E3145085E26B -S11300D0E3FFFF1A030500EB010000009016000087 -S11300E03C108FE21600A0E3563412EF000050E3F8 -S11300F0080000BA28209FE51CD09FE5080092E57F -S1130100000050E300D0A01110109FE5040092E518 -S1130110000050E300008115C9FFFFEAF8FFFF3F2C -S1130120D01A0000801B000000D01FE5C4FFFFEAC6 -S1130130F8FFFF3F08402DE92C009FE52C309FE598 -S1130140033060E0060053E30100008A0840BDE884 -S11301501EFF2FE118309FE5000053E3FAFFFF0A6A -S11301600FE0A0E113FF2FE1F7FFFFEAD81A000028 -S1130170DB1A00000000000008402DE934009FE570 -S113018034309FE5033060E04331A0E1A33F83E0D6 -S1130190C310B0E10100001A0840BDE81EFF2FE1C2 -S11301A018209FE5000052E3FAFFFF0A0FE0A0E1E8 -S11301B012FF2FE1F7FFFFEAD81A0000D81A000057 -S11301C00000000010402DE92C409FE50030D4E5EC -S11301D0000053E30600001AD5FFFFEB1C309FE537 -S11301E0000053E318009F1500F020130130A0E332 -S11301F00030C4E51040BDE81EFF2FE1D81A00000E -S113020000000000D815000008402DE934309FE5B7 -S1130210000053E330009F1530109F1500F02013A9 -S11302202C009FE5003090E5000053E30300000A32 -S113023020309FE5000053E30FE0A01113FF2F11BE -S11302400840BDE8CBFFFFEA00000000D81500001D -S1130250DC1A00009016000000000000F0412DE9B7 -S11302600150A0E10280A0E10340A0E1000061E0B0 -S1130270C50200EB0060A0E118009DE5000064E009 -S1130280C10200EB0070A0E1080065E0BE0200EBD3 -S11302900010A0E10700A0E1580300EB0010A0E16A -S11302A00600A0E1EF0200EBAC0300EB040080E0E9 -S11302B0F081BDE870402DE918D04DE218308DE290 -S11302C0070003E91F40A0E300408DE514009DE50D -S11302D00010A0E3FF20A0E30130A0E1DEFFFFEB6C -S11302E00060A0E13F30A0E300308DE510009DE503 -S11302F00010A0E3FF20A0E30130A0E1D6FFFFEB54 -S11303000050A0E100408DE50C009DE50010A0E345 -S1130310FF20A0E30130A0E1CFFFFFEB046006E083 -S1130320800586E17060FFE63F5005E2850286E1C4 -S11303307000BFE618D08DE27080BDE808D04DE2B1 -S113034004C04DE20C008CE98000A0E1320380E29D -S11303500115A0E108209DE51F2002E200309DE583 -S1130360832582E104309DE53F3003E2833282E15C -S11303707330FFE6B13080E108D08DE21EFF2FE13B -S113038030002DE910D04DE210308DE2070003E972 -S11303900030A0E3F44A01E3004040E303C084E0FA -S11303A010508DE2070015E907008CE80C3083E259 -S11303B0600053E3F8FFFF1A10D08DE23000BDE86F -S11303C01EFF2FE108402DE9DC3501E3003040E356 -S11303D0070093E8E9FFFFEB0880BDE804402DE542 -S11303E014D04DE210408DE20E0004E908209DE592 -S11303F03F2062E20C309DE51F3063E204109DE56E -S11304001F1061E2001080E5042080E5083080E5DB -S113041014D08DE21000BDE81EFF2FE1F04F2DE94E -S11304202CD04DE20090A0E1C03FA0E1233FA0E129 -S1130430032080E0032002E2023063E0033183E022 -S11304400332A0E110308DE5032080E2000050E388 -S11304500020A0A14221A0E1022262E08221A0E1C9 -S11304600280A0E1782082E214208DE5502083E20E -S1130470020053E12C0000BA3C0000EA086084E06A -S113048060309BE5030059E11800001A0C109DE54B -S1130490003091E5013043E208209DE5030052E17C -S11304A0070000DA4F2062E2020053E1040000AAD0 -S11304B0040053E1020000AA772064E2020053E141 -S11304C00A0000BA1C708DE20700A0E10E0095E856 -S11304D0C1FFFFEB24309DE500308DE50C0097E86B -S11304E00A00A0E10610A0E193FFFFEB050000EA7B -S11304F0083095E500308DE50C0095E80A00A0E190 -S11305000610A0E18CFFFFEB014084E2780054E385 -S1130510D9FFFF1A08309DE5013083E208308DE5EC -S1130520500053E30900001A100000EA0010A0E391 -S113053008108DE5F4BA01E300B040E3805080E098 -S113054005518BE0982601E3002040E30C208DE563 -S113055008309DE510109DE501A083E014209DE581 -S1130560020058E10040A0B3C3FFFFBAE8FFFFEA6E -S11305702CD08DE2F08FBDE810402DE90040A0E3BF -S11305800400A0E1A4FFFFEB014084E2080054E36F -S1130590FAFFFF1A1080BDE808402DE9F43A01E3A0 -S11305A0003040E3600093E5640083E5070050E316 -S11305B0F43A0113003040130120801260208315A7 -S11305C095FFFFEBF43A01E3003040E3600093E56C -S11305D091FFFFEB0880BDE808402DE9F43A01E300 -S11305E0003040E3600093E5640083E5000050E3DD -S11305F0F43A0113003040130120401260208315A7 -S113060085FFFFEBF43A01E3003040E3600093E53B -S113061081FFFFEB0880BDE804402DE514D04DE2D6 -S113062004C08DE20E008CE8F42A01E3002040E3CC -S1130630800080E0004182E007009CE80B0084E831 -S113064014D08DE21000BDE81EFF2FE104E02DE57B -S113065014D04DE204308DE2070083E8F42A01E36C -S1130660002040E3600092E50E0093E8E9FFFFEB11 -S113067014D08DE20080BDE80030A0E1F42A01E34B -S1130680002040E3601092E5811081E0012182E0C6 -S1130690070092E8070083E80300A0E11EFF2FE1B2 -S11306A008402DE9F43A01E3003040E3600093E5AB -S11306B059FFFFEB0880BDE8983601E3003040E3C2 -S11306C0000083E51EFF2FE1FF2F01E3212F4FE3FD -S11306D0DF3F12E5020913E3FCFFFF1A1EFF2FE1BF -S11306E008402DE9F43A01E3003040E30020A0E3A0 -S11306F06C2083E5702083E5F2FFFFEBFF3F01E30D -S1130700213F4FE30320A0E3DF2F03E50880BDE88A -S1130710FF3F01E3213F4FE3DF2F13E5020912E31B -S11307201EFF2F01F43A01E3003040E36C3093E5FF -S1130730000053E30400001AF43A01E3003040E3FC -S11307400120A0E36C2083E51EFF2FE1010053E3A9 -S11307500500001AF43A01E3003040E36820C3E5E1 -S11307600220A0E36C2083E51EFF2FE1020053E387 -S11307700500001AF43A01E3003040E36920C3E5C0 -S11307800320A0E36C2083E51EFF2FE1030053E365 -S11307901EFF2F11F43A01E3003040E36A20C3E561 -S11307A00020A0E36C2083E50120A0E3702083E512 -S11307B01EFF2FE1F40A01E3000040E30030A0E350 -S11307C0703080E5680080E21EFF2FE170402DE963 -S11307D008D04DE20050A0E10140A0E1D000D0E1FA -S11307E01F60A0E300608DE5800080E20010A0E3BC -S11307F0FF20A0E30130A0E197FEFFEB000084E5B9 -S1130800D100D5E13F30A0E300308DE5800080E2E7 -S11308100010A0E3FF20A0E30130A0E18EFEFFEB77 -S1130820040084E5D200D5E100608DE5800080E21B -S11308300010A0E3FF20A0E30130A0E186FEFFEB5F -S1130840080084E508D08DE27080BDE80030A0E3A4 -S1130850203F4FE30F20A0E3582083E51EFF2FE144 -S1130860FEFFFFEAFEFFFFEAFEFFFFEAFEFFFFEAEC -S1130870FEFFFFEAFEFFFFEAD330A0E303F029E125 -S11308801EFF2FE1D230A0E303F029E10730E0E3BB -S113089003D0A0E1D330A0E303F029E11EFF2FE150 -S11308A05330A0E303F029E11EFF2FE104402DE5BE -S11308B0C031A0E10330C3E34B3B43E21F2000E21D -S11308C000C313E50140A0E314228CE1002303E5F7 -S11308D04A0B40E20010C0E51000BDE81EFF2FE106 -S11308E008402DE94900A0E30110A0E3EEFFFFEB6F -S11308F0132AE0E3FF3F0FE3FB3E02E50130A0E3F0 -S1130900FF3E02E5122AE0E3FF3F02E50880BDE86E -S113091008402DE90020A0E3202F4FE35C3092E54E -S11309205C3082E5010013E30200000A19FFFFEBCB -S11309303F20A0E3120000EA020013E30A00000AC9 -S1130940F43A01E3003040E3743093E5010053E3EB -S1130950F43A01E3003040E30020A0030120A01397 -S1130960742083E50620A0E3050000EA040013E3F5 -S11309704F20A0030200000A16FFFFEB5B20A0E358 -S1130980FFFFFFEA0030A0E3203F4FE3202083E590 -S11309900880BDE804E04EE20F502DE9133AE0E38D -S11309A0F33E13E5490053E30400001AD7FFFFEBBD -S11309B04920A0E3133AE0E3EF2E03E50F90FDE8AE -S11309C0FEFFFFEA030050E30C0000CA2030A0E35E -S11309D0203F4FE38001A0E1002093E5FFC0A0E3A6 -S11309E01CC0C2E1DC2501E3002040E3012182E0D8 -S11309F00C2092E512008CE1000083E51EFF2FE13C -S1130A00040040E23030A0E3203F4FE3F0FFFFEA70 -S1130A10F04F2DE91CD04DE299FFFFEBAFFFFFEB48 -S1130A2089FFFFEB9DFFFFEB65FEFFEB0100A0E3F9 -S1130A3020FFFFEB7C319FE5070093E84FFEFFEBBF -S1130A40CCFEFFEB25FFFFEBF45A01E3005040E33B -S1130A5001B0A0E3989601E3009040E30040A0E3D6 -S1130A60807085E2703095E5010053E31400001AAC -S1130A704FFFFFEB0060A0E1780085E517FFFFEB77 -S1130A80743095E5010053E30900001A044089E538 -S1130A907C6085E50200A0E306FFFFEB0600A0E111 -S1130AA00710A0E148FFFFEB070097E8E6FEFFEB25 -S1130AB0010000EA0B00A0E1FEFEFFEBF7FEFFEBF6 -S1130AC0000000EA11FFFFEB043099E5000053E356 -S1130AD00700000A0460A0E10600A0E10410A0E100 -S1130AE0B7FFFFEB016086E2060056E3F9FFFF1A49 -S1130AF0DBFFFFEA08608DE20600A0E1DDFEFFEB0C -S1130B00070096E8070087E8800095E5FF60A0E30A -S1130B1000608DE50410A0E11F20A0E30430A0E1F3 -S1130B20CDFDFFEB0080A0E1840095E500608DE53C -S1130B300410A0E13F20A0E30430A0E1C6FDFFEBD8 -S1130B400060A0E1FE0050E3FF60A003880095E58B -S1130B50FF30A0E300308DE50410A0E11F20A0E3E6 -S1130B600430A0E1BCFDFFEB00A0A0E10400A0E183 -S1130B700F100AE292FFFFEB0B00A0E15A12E3E729 -S1130B808FFFFFEB0200A0E30F1006E28CFFFFEBE8 -S1130B900300A0E35612E3E789FFFFEB0400A0E3A0 -S1130BA00F1008E286FFFFEB0500A0E35812E3E70D -S1130BB083FFFFEBAAFFFFEA28160000020120E2F0 -S1130BC0000000EA021121E28020B0E18130B0117E -S1130BD00300321142CCF01143CCF0114700000A5B -S1130BE0222CA0E1233C72E0032082C0011020C02B -S1130BF0000021C0011020C0003063B2190053E38B -S1130C001EFF2F81020110E3020580E3FF04C0E30D -S1130C1000006012020111E3021581E3FF14C1E335 -S1130C2000106112030032E12E00000A012042E2AA -S1130C30510390E0203063E21113A0E1023100E29D -S1130C400100005A001071E20000E0E2020550E3E6 -S1130C500B00003A010450E30400003AA000B0E1A4 -S1130C606110A0E1012082E2FE0052E33800002A74 -S1130C70020151E3820BA0E00100C003030080E104 -S1130C801EFF2FE18110B0E10000A0E0020510E397 -S1130C90012042E2F5FFFF1A20C6B0E10006A001E0 -S1130CA00C204202FF0810E30004A00108204202C5 -S1130CB00F0610E30002A00104204202030510E322 -S1130CC00001A00102204202020550E38000A0318D -S1130CD00020D2E2820B80A0002062B2030080A137 -S1130CE0300283B11EFF2FE1000032E3021521E23E -S1130CF0020520020120820201304312CAFFFFEAEA -S1130D008130A0E142CCF0E143CCF0111300000AA1 -S1130D10030032E10200000A000032E30100A001F6 -S1130D201EFF2FE1010030E10000A0131EFF2F1170 -S1130D30FF0412E30200001A8000B0E102018023E4 -S1130D401EFF2FE1022492E2020580321EFF2F31A2 -S1130D50023100E27F0483E3020580E31EFF2FE1FA -S1130D60422CF0E10100A011433CF0010010A0115D -S1130D708024B0E18134B001010030010105801309 -S1130D801EFF2FE10030A0E3010000EA023110E26F -S1130D900000604200C0B0E11EFF2F014B3483E32A -S1130DA00010A0E10000A0E30F0000EA012090E1A0 -S1130DB01EFF2F010030A0E3050000EA012090E1AE -S1130DC01EFF2F01023111E20100005A000070E2FF -S1130DD00010E1E201C0B0E100C0A0010010A001D8 -S1130DE00000A0035B3483E301324302023543E293 -S1130DF01720A0E301085CE32CC8A02110204222A4 -S1130E00010C5CE32CC4A0210820422210005CE306 -S1130E102CC2A0210420422204005CE302204222CE -S1130E20AC204230AC2152E0823B43E0060000BAE1 -S1130E30113283E010C2A0E1202062E202015CE3EF -S1130E403002A3E00100C0031EFF2FE1202082E254 -S1130E5011C2A0E1202062E28C0090E13102A3E003 -S1130E60AC0FC0011EFF2FE1FFC0A0E3A02B1CE0CC -S1130E70A13B1C100C0032110C0033113E00000A7F -S1130E80032082E001C020E08004B0E18114B011AD -S1130E901000000A0233A0E3A00283E1A11283E15F -S1130EA0903181E002010CE2020551E38110A0318E -S1130EB0A31F81318330A031010080E17F20C2E291 -S1130EC0FD0052E30F00008A020153E3820BA0E00D -S1130ED00100C0031EFF2FE1000030E302C10CE259 -S1130EE08114A001A0048CE1A10480E17F2052E2DE -S1130EF0FF3072C2820B80C11EFF2FC1020580E346 -S1130F000030A0E3012052E2350000CA190072E368 -S1130F10020100D21EFF2FD1002062E28010B0E156 -S1130F203112A0E1202062E210C2A0E16100B0E130 -S1130F300000A0E28C3093E1AC0FC0011EFF2FE152 -S1130F40000032E302C100E28000A00102051003A8 -S1130F5001204202FBFFFF0A0C0080E1000033E3A2 -S1130F6002C101E28110A001020511030130430214 -S1130F70FBFFFF0A0C1081E1C0FFFFEAA13B0CE07C -S1130F800C0032E10C0033110500000A02C1D0E369 -S1130F9002C1D113E9FFFF1A010020E0020100E2BF -S1130FA01EFF2FE1000030E3020130130100A00115 -S1130FB000003113020131130D00000A0C0032E16C -S1130FC00100001A8024B0E10900001A0C0033E18A -S1130FD00200001A8134B0E10100A0110400001ADB -S1130FE0010020E0020100E27F0480E3020580E3C7 -S1130FF01EFF2FE17F0480E3030580E31EFF2FE142 -S1131000FFC0A0E3A02B1CE0A13B1C100C0032117C -S11310100C0033113A00000A032042E001C020E032 -S11310208114B0E18004A0E11C00000A0132A0E3B5 -S1131030211283E1203283E102010CE2010053E139 -S11310408330A0317D20A2E202C5A0E3010053E178 -S1131050013043200C008021A10053E1A130432042 -S1131060AC008021210153E1213143202C01802156 -S1131070A10153E1A1314320AC0180210332B0E14D -S11310802CC2B011F0FFFF1AFD0052E39DFFFF8A4E -S1131090010053E1820BA0E00100C0031EFF2FE119 -S11310A002C10CE2A0048CE17F2092E2FF3072C204 -S11310B0820B80C11EFF2FC1020580E30030A0E334 -S11310C0012052E28FFFFFEA000032E302C100E296 -S11310D08000A0010205100301204202FBFFFF0A69 -S11310E00C0080E1000033E302C101E28110A001A1 -S11310F00205110301304302FBFFFF0A0C1081E1DA -S1131100C4FFFFEAA13B0CE00C0032E10500001A29 -S11311108024B0E1B6FFFF1A0C0033E1AFFFFF1AE1 -S11311200100A0E1B2FFFFEA0C0033E10300001A62 -S11311308134B0E197FFFF0A0100A0E1ACFFFFEAB0 -S113114002C1D0E302C1D113DEFFFF1A0221D0E3B2 -S1131150A2FFFF1A0231D1E38EFFFF1AA4FFFFEAB8 -S11311608020A0E17F0452E30800003A9E30A0E30F -S1131170222C53E00700009A0034A0E1023183E3FB -S1131180020110E33302A0E1000060121EFF2FE110 -S11311900000A0E31EFF2FE1610072E30100001ACA -S11311A08024B0E10200001A020110E20201E0030F -S11311B01EFF2FE10000A0E31EFF2FE10010A0E1BD -S11311C00000A0E308402DE90020A0E10030A0E1E8 -S11311D00E0000EB0840BDE81EFF2FE108402DE99A -S11311E00010A0E30040A0E1450000EB18309FE5AB -S11311F0000093E53C3090E5000053E30FE0A011BC -S113120013FF2F110400A0E1C90000EB3816000001 -S1131210E4C09FE5F0412DE900409CE548C194E518 -S113122000005CE353CF840204509CE548C184056C -S11312301F0055E310D04DE20060A0E1150000DA74 -S1131240B8009FE5000050E30100001A0000E0E34D -S1131250180000EA190EA0E30C108DE508208DE5B6 -S113126004308DE500F020E300C050E20C109DE551 -S113127008209DE504309DE5F3FFFF0A485194E5FD -S11312800000A0E304008CE500508CE548C184E52F -S113129088018CE58C018CE5000056E304409CE554 -S11312A00700001A023084E2014084E203118CE753 -S11312B004408CE50000A0E310D08DE2F041BDE8CD -S11312C01EFF2FE10100A0E31004A0E104818CE0E3 -S11312D0020056E388719CE5083188E58C319C0551 -S11312E0007087E1000083010850A0E1882088E5B0 -S11312F088718CE58C018C05E9FFFFEA3816000043 -S113130000000000F04F2DE968319FE5003093E5BF -S113131014D04DE204308DE5523F83E208008DE5A0 -S11313200C308DE50170A0E10180A0E304309DE55F -S1131330486193E5000056E30CB09DE53300000AD4 -S1131340045096E5014055E288A086521F5085520C -S113135005518A500700005A290000EA003095E53B -S1131360070053E10500000A014044E2010074E370 -S1131370045045E22200000A000057E3F6FFFF1A7A -S1131380043096E505206AE0013043E2022086E05D -S1131390040053E1783012E50010A01304408605E0 -S11313A078100215000053E3EEFFFF0A1824A0E1B1 -S11313B0881196E5010012E1049096E51600000AF2 -S11313C08C1196E5010012E11600001A08009DE553 -S11313D0801015E50FE0A0E113FF2FE1043096E53E -S11313E0090053E1D0FFFF1A00309BE5060053E1EA -S11313F0CDFFFF1A014044E2010074E3045045E2CA -S1131400DCFFFF1A70109FE5000051E30900001A89 -S113141014D08DE2F04FBDE81EFF2FE10FE0A0E1F4 -S113142013FF2FE1ECFFFFEA800015E50FE0A0E1D8 -S113143013FF2FE1E8FFFFEA043096E5000053E3D1 -S1131440003096E50800001A000053E30600000A85 -S11314500600A0E100308BE500F020E300609BE58E -S1131460000056E3B5FFFF1AE8FFFFEA06B0A0E16B -S11314700360A0E1F9FFFFEA381600000000000055 -S113148008402DE910309FE5000053E30C009F1540 -S113149049FFFF1B0840BDE81EFF2FE16016000056 -S11314A0A414000038402DE930509FE530409FE5FA -S11314B0044065E04441B0E1045185100400000A91 -S11314C0043035E50FE0A0E113FF2FE1014054E2C1 -S11314D0FAFFFF1A610000EB3840BDE81EFF2FE160 -S11314E0781600007C16000008402DE9170000EB78 -S11314F030309FE5000053E3000093150300A00182 -S113150024309FE5000053E3001093150310A0015D -S11315100020A0E33DFDFFEB10309FE5000053E306 -S11315202DFFFF1BFEFFFFEA00000000000000008B -S1131530DC11000004E02DE51800A0E304109FE591 -S1131540563412EFFEFFFFEA26000200FEFFFFEA18 -S113155070402DE96C509FE56C609FE5066065E086 -S11315604661B0E1045045120040A0130500000A92 -S11315700430B5E5014084E20FE0A0E113FF2FE160 -S1131580040056E1F9FFFF1A40509FE540609FE5D3 -S1131590066065E0290000EB4661B0E104504512A5 -S11315A00040A0130500000A0430B5E5014084E2C0 -S11315B00FE0A0E113FF2FE1040056E1F9FFFF1A49 -S11315C07040BDE81EFF2FE15816000058160000B9 -S10B15D058160000601600002B -S10715D8000000000B -S11315DC0000000000000000000000003F000000BC -S11315EC060000005B0000004F00000066000000D5 -S11315FC6D0000007D000000070000007F0000006B -S113160C67000000770000007C0000005800000018 -S113161C5E00000079000000710000000A00000068 -S113162C140000000A000000201021FFA81600007E -S113163C430000000DC0A0E1F8DF2DE904B04CE23A -S113164C28D04BE2F06F9DE81EFF2FE180140000C0 -S113165C080200000DC0A0E1F8DF2DE904B04CE253 -S113166C28D04BE2F06F9DE81EFF2FE1C40100006F -S113167C000000000000000000000000D81A000068 -S107168CA8000000AE -S11316900000000000000000050000000100000040 -S11316A0A8160000000000000000000094190000CB -S11316B0FC190000641A0000000000000000000093 -S11316C00000000000000000000000000000000016 -S11316D00000000000000000000000003C160000B4 -S11316E000000000000000000000000000000000F6 -S11316F000000000000000000000000000000000E6 -S113170000000000000000000000000000000000D5 -S113171000000000000000000000000000000000C5 -S113172000000000000000000000000000000000B5 -S113173000000000000000000000000000000000A5 -S11317400000000000000000000000000000000095 -S113175001000000000000000E33CDAB34126DE632 -S1131760ECDE05000B00000000000000000000009B -S11317700000000000000000000000000000000065 -S11317800000000000000000000000000000000055 -S11317900000000000000000000000000000000045 -S11317A00000000000000000000000000000000035 -S11317B00000000000000000000000000000000025 -S11317C00000000000000000000000000000000015 -S11317D00000000000000000000000000000000005 -S11317E000000000000000000000000000000000F5 -S11317F000000000000000000000000000000000E5 -S113180000000000000000000000000000000000D4 -S113181000000000000000000000000000000000C4 -S113182000000000000000000000000000000000B4 -S113183000000000000000000000000000000000A4 -S11318400000000000000000000000000000000094 -S11318500000000000000000000000000000000084 -S11318600000000000000000000000000000000074 -S11318700000000000000000000000000000000064 -S11318800000000000000000000000000000000054 -S11318900000000000000000000000000000000044 -S11318A00000000000000000000000000000000034 -S11318B00000000000000000000000000000000024 -S11318C00000000000000000000000000000000014 -S11318D00000000000000000000000000000000004 -S11318E000000000000000000000000000000000F4 -S11318F000000000000000000000000000000000E4 -S113190000000000000000000000000000000000D3 -S113191000000000000000000000000000000000C3 -S113192000000000000000000000000000000000B3 -S113193000000000000000000000000000000000A3 -S11319400000000000000000000000000000000093 -S11319500000000000000000000000000000000083 -S11319600000000000000000000000000000000073 -S11319700000000000000000000000000000000063 -S11319800000000000000000000000000000000053 -S11319900000000000000000000000000000000043 -S11319A00000000000000000000000000000000033 -S11319B00000000000000000000000000000000023 -S11319C00000000000000000000000000000000013 -S11319D00000000000000000000000000000000003 -S11319E000000000000000000000000000000000F3 -S11319F000000000000000000000000000000000E3 -S1131A0000000000000000000000000000000000D2 -S1131A1000000000000000000000000000000000C2 -S1131A2000000000000000000000000000000000B2 -S1131A3000000000000000000000000000000000A2 -S1131A400000000000000000000000000000000092 -S1131A500000000000000000000000000000000082 -S1131A600000000000000000000000000000000072 -S1131A700000000000000000000000000000000062 -S1131A800000000000000000000000000000000052 -S1131A900000000000000000000000000000000042 -S1131AA00000000000000000000000000000000032 -S1131AB00000000000000000000000000000000022 -S1131AC00000000000000000000000000000000012 -S10B1AD0F8FFFF3F00000000D5 -S9030128D3