Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- firmware.elf: file format elf32-littlearm
- Disassembly of section .text:
- 08000000 <_start-0x8>:
- 8000000: 20002000 .word 0x20002000
- 8000004: 08000009 .word 0x08000009
- 08000008 <_start>:
- 8000008: f000 f834 bl 8000074 <main>
- 800000c: e7fe b.n 800000c <_start+0x4>
- ...
- 08000010 <lcd_write>:
- * PB5 = MOSI
- */
- inline static void lcd_cmd() { GPIOC->ODR &= ~BIT(0); }
- inline static void lcd_data() { GPIOC->ODR |= BIT(0); }
- inline static void lcd_enable() { GPIOC->ODR &= ~BIT(1); }
- 8000010: f44f 5380 mov.w r3, #4096 ; 0x1000
- 8000014: f2c4 0301 movt r3, #16385 ; 0x4001
- 8000018: 68da ldr r2, [r3, #12]
- 800001a: f022 0202 bic.w r2, r2, #2
- 800001e: 60da str r2, [r3, #12]
- GPIOC->ODR |= BIT(2);
- }
- static void lcd_write(u8 byte) {
- lcd_enable();
- while(!(SPI1->SR & SPI_TXE));
- 8000020: f44f 5240 mov.w r2, #12288 ; 0x3000
- 8000024: f2c4 0201 movt r2, #16385 ; 0x4001
- 8000028: 6893 ldr r3, [r2, #8]
- 800002a: f013 0f02 tst.w r3, #2
- 800002e: d0fb beq.n 8000028 <lcd_write+0x18>
- SPI1->DR = byte;
- 8000030: f44f 5340 mov.w r3, #12288 ; 0x3000
- 8000034: f2c4 0301 movt r3, #16385 ; 0x4001
- 8000038: 60d8 str r0, [r3, #12]
- while(!(SPI1->SR & SPI_RXNE));
- 800003a: f44f 5240 mov.w r2, #12288 ; 0x3000
- 800003e: f2c4 0201 movt r2, #16385 ; 0x4001
- 8000042: 6893 ldr r3, [r2, #8]
- 8000044: f013 0f01 tst.w r3, #1
- 8000048: d0fb beq.n 8000042 <lcd_write+0x32>
- SPI1->DR;
- 800004a: f44f 5340 mov.w r3, #12288 ; 0x3000
- 800004e: f2c4 0301 movt r3, #16385 ; 0x4001
- 8000052: 68db ldr r3, [r3, #12]
- */
- inline static void lcd_cmd() { GPIOC->ODR &= ~BIT(0); }
- inline static void lcd_data() { GPIOC->ODR |= BIT(0); }
- inline static void lcd_enable() { GPIOC->ODR &= ~BIT(1); }
- inline static void lcd_disable() { GPIOC->ODR |= BIT(1); }
- 8000054: f44f 5380 mov.w r3, #4096 ; 0x1000
- 8000058: f2c4 0301 movt r3, #16385 ; 0x4001
- 800005c: 68da ldr r2, [r3, #12]
- 800005e: f042 0202 orr.w r2, r2, #2
- 8000062: 60da str r2, [r3, #12]
- while(!(SPI1->SR & SPI_TXE));
- SPI1->DR = byte;
- while(!(SPI1->SR & SPI_RXNE));
- SPI1->DR;
- lcd_disable();
- }
- 8000064: 4770 bx lr
- 8000066: bf00 nop
- 08000068 <delay>:
- #include <stm32/afio.h>
- #include <stm32/spi.h>
- #include "fixed.h"
- void delay(unsigned timeout) {
- while(timeout--) asm volatile("nop");
- 8000068: b118 cbz r0, 8000072 <delay+0xa>
- 800006a: bf00 nop
- 800006c: f110 30ff adds.w r0, r0, #4294967295
- 8000070: d1fb bne.n 800006a <delay+0x2>
- }
- 8000072: 4770 bx lr
- 08000074 <main>:
- }
- }
- s16 rand;
- void main() {
- 8000074: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- 8000078: b085 sub sp, #20
- RCC->CR = HSEON;
- 800007a: f44f 5380 mov.w r3, #4096 ; 0x1000
- 800007e: f2c4 0302 movt r3, #16386 ; 0x4002
- 8000082: f44f 3280 mov.w r2, #65536 ; 0x10000
- 8000086: 601a str r2, [r3, #0]
- while((RCC->CR & HSERDY) == 0);
- 8000088: f44f 5380 mov.w r3, #4096 ; 0x1000
- 800008c: f2c4 0302 movt r3, #16386 ; 0x4002
- 8000090: 681a ldr r2, [r3, #0]
- 8000092: f412 3f00 tst.w r2, #131072 ; 0x20000
- 8000096: d0fb beq.n 8000090 <main+0x1c>
- W_SW(RCC->CFGR, SW_HSE);
- 8000098: f44f 5380 mov.w r3, #4096 ; 0x1000
- 800009c: f2c4 0302 movt r3, #16386 ; 0x4002
- 80000a0: 685a ldr r2, [r3, #4]
- 80000a2: f022 0203 bic.w r2, r2, #3
- 80000a6: f042 0201 orr.w r2, r2, #1
- 80000aa: 605a str r2, [r3, #4]
- while(R_SW(RCC->CFGR) != SW_HSE);
- 80000ac: f44f 5380 mov.w r3, #4096 ; 0x1000
- 80000b0: f2c4 0302 movt r3, #16386 ; 0x4002
- 80000b4: 685a ldr r2, [r3, #4]
- 80000b6: f002 0203 and.w r2, r2, #3
- 80000ba: 2a01 cmp r2, #1
- 80000bc: d1fa bne.n 80000b4 <main+0x40>
- SPI1->DR;
- lcd_disable();
- }
- static void lcd_init() {
- RCC->APB2ENR = IOPCEN | IOPBEN | SPI1EN | AFIOEN;
- 80000be: f44f 5580 mov.w r5, #4096 ; 0x1000
- 80000c2: f2c4 0502 movt r5, #16386 ; 0x4002
- 80000c6: f241 0319 movw r3, #4121 ; 0x1019
- 80000ca: 61ab str r3, [r5, #24]
- AFIO->MAPR = SWJ_CFG(SWJ_CFG_SW) | SPI1_REMAP;
- 80000cc: f04f 0300 mov.w r3, #0
- 80000d0: f2c4 0301 movt r3, #16385 ; 0x4001
- 80000d4: f2c0 2200 movt r2, #512 ; 0x200
- 80000d8: 605a str r2, [r3, #4]
- GPIOC->CRL = 0x44444111; // PC[0-2] as outputs
- 80000da: f44f 5480 mov.w r4, #4096 ; 0x1000
- 80000de: f2c4 0401 movt r4, #16385 ; 0x4001
- 80000e2: f244 1311 movw r3, #16657 ; 0x4111
- 80000e6: f2c4 4344 movt r3, #17476 ; 0x4444
- 80000ea: 6023 str r3, [r4, #0]
- GPIOB->CRL = 0x44949444; // PB3, PB5 as AF outputs
- 80000ec: f44f 6340 mov.w r3, #3072 ; 0xc00
- 80000f0: f2c4 0301 movt r3, #16385 ; 0x4001
- 80000f4: f249 4244 movw r2, #37956 ; 0x9444
- 80000f8: f2c4 4294 movt r2, #17556 ; 0x4494
- 80000fc: 601a str r2, [r3, #0]
- SPI1->CR1 = SPI_MSTR | SPI_BR(0) | SPI_SSM | SPI_SSI | SPI_SPE;
- 80000fe: f44f 5340 mov.w r3, #12288 ; 0x3000
- 8000102: f2c4 0301 movt r3, #16385 ; 0x4001
- 8000106: f44f 7251 mov.w r2, #836 ; 0x344
- 800010a: 601a str r2, [r3, #0]
- inline static void lcd_data() { GPIOC->ODR |= BIT(0); }
- inline static void lcd_enable() { GPIOC->ODR &= ~BIT(1); }
- inline static void lcd_disable() { GPIOC->ODR |= BIT(1); }
- inline static void lcd_reset() {
- GPIOC->ODR &= ~BIT(2);
- 800010c: 68e3 ldr r3, [r4, #12]
- 800010e: f023 0304 bic.w r3, r3, #4
- 8000112: 60e3 str r3, [r4, #12]
- delay_ms(10);
- 8000114: f244 101a movw r0, #16666 ; 0x411a
- 8000118: f7ff ffa6 bl 8000068 <delay>
- GPIOC->ODR |= BIT(2);
- 800011c: 68e3 ldr r3, [r4, #12]
- 800011e: f043 0304 orr.w r3, r3, #4
- 8000122: 60e3 str r3, [r4, #12]
- * PC2 = !RST
- * PB3 = CLK
- * PB5 = MOSI
- */
- inline static void lcd_cmd() { GPIOC->ODR &= ~BIT(0); }
- 8000124: 68e3 ldr r3, [r4, #12]
- 8000126: f023 0301 bic.w r3, r3, #1
- 800012a: 60e3 str r3, [r4, #12]
- SPI1->CR1 = SPI_MSTR | SPI_BR(0) | SPI_SSM | SPI_SSI | SPI_SPE;
- lcd_reset();
- lcd_cmd();
- lcd_write(0x21); // !PD=ChipActive H=ExtendedCmd
- 800012c: f04f 0021 mov.w r0, #33 ; 0x21
- 8000130: f7ff ff6e bl 8000010 <lcd_write>
- lcd_write(0xe0); // set value of Vop (controls contrast) = 0x80 | 0x60 (arbitrary)
- 8000134: f04f 00e0 mov.w r0, #224 ; 0xe0
- 8000138: f7ff ff6a bl 8000010 <lcd_write>
- lcd_write(0x04); // set temperature coefficient
- 800013c: f04f 0004 mov.w r0, #4
- 8000140: f7ff ff66 bl 8000010 <lcd_write>
- lcd_write(0x14); // set bias mode to 1:48.
- 8000144: f04f 0014 mov.w r0, #20
- 8000148: f7ff ff62 bl 8000010 <lcd_write>
- lcd_write(0x22); // !PD=ChipActive !H=NormalCmd
- 800014c: f04f 0022 mov.w r0, #34 ; 0x22
- 8000150: f7ff ff5e bl 8000010 <lcd_write>
- lcd_write(0x0c); // D=NormalMode
- 8000154: f04f 000c mov.w r0, #12
- 8000158: f7ff ff5a bl 8000010 <lcd_write>
- W_SW(RCC->CFGR, SW_HSE);
- while(R_SW(RCC->CFGR) != SW_HSE);
- lcd_init();
- GPIOC->CRH = 0x44444411;
- 800015c: f244 4311 movw r3, #17425 ; 0x4411
- 8000160: f2c4 4344 movt r3, #17476 ; 0x4444
- 8000164: 6063 str r3, [r4, #4]
- RCC->APB2ENR |= IOPAEN;
- 8000166: 69ab ldr r3, [r5, #24]
- 8000168: f043 0304 orr.w r3, r3, #4
- 800016c: 61ab str r3, [r5, #24]
- GPIOA->CRL = 0x44444448;
- 800016e: f44f 6300 mov.w r3, #2048 ; 0x800
- 8000172: f2c4 0301 movt r3, #16385 ; 0x4001
- 8000176: f244 4248 movw r2, #17480 ; 0x4448
- 800017a: f2c4 4244 movt r2, #17476 ; 0x4444
- 800017e: 601a str r2, [r3, #0]
- fixed bx = f(50, 0), by = f(5, 0);
- 8000180: f44f 5948 mov.w r9, #12800 ; 0x3200
- }
- }
- s16 rand;
- void main() {
- 8000184: 4d3d ldr r5, [pc, #244] ; (800027c <main+0x208>)
- fixed vx = f(1, 0), vy = f(2, 0);
- fixed g = f(0, 0.1);
- while(1) {
- for(int i = 0; i < 6*84; i++)
- framebuffer[i] = 0;
- 8000186: f04f 0600 mov.w r6, #0
- }
- }
- s16 rand;
- void main() {
- 800018a: f64f 13f4 movw r3, #63988 ; 0xf9f4
- 800018e: f2c0 13ff movt r3, #511 ; 0x1ff
- 8000192: 9301 str r3, [sp, #4]
- static void draw_ball(u8 x, u8 y) {
- for(s8 dx = -8; dx <= 8; dx++)
- for(s8 dy = -8; dy <= 8; dy++)
- if(sq(dy)+sq(dx)<=sq(4)) {
- if(y+dy >= 0 && y+dy < 84 && x+dx >= 0 && x+dx < 48)
- frameband[((int)(y+dy))*W+((int)(x+dx))] = 1;
- 8000194: f04f 0701 mov.w r7, #1
- }
- }
- s16 rand;
- void main() {
- 8000198: f06f 0807 mvn.w r8, #7
- lcd_init();
- GPIOC->CRH = 0x44444411;
- RCC->APB2ENR |= IOPAEN;
- GPIOA->CRL = 0x44444448;
- 800019c: 4c38 ldr r4, [pc, #224] ; (8000280 <main+0x20c>)
- }
- }
- s16 rand;
- void main() {
- 800019e: 4623 mov r3, r4
- fixed vx = f(1, 0), vy = f(2, 0);
- fixed g = f(0, 0.1);
- while(1) {
- for(int i = 0; i < 6*84; i++)
- framebuffer[i] = 0;
- 80001a0: f803 6f01 strb.w r6, [r3, #1]!
- fixed bx = f(50, 0), by = f(5, 0);
- fixed vx = f(1, 0), vy = f(2, 0);
- fixed g = f(0, 0.1);
- while(1) {
- for(int i = 0; i < 6*84; i++)
- 80001a4: 42ab cmp r3, r5
- 80001a6: d1fb bne.n 80001a0 <main+0x12c>
- }
- }
- s16 rand;
- void main() {
- 80001a8: f509 7980 add.w r9, r9, #256 ; 0x100
- 80001ac: fa1f f989 uxth.w r9, r9
- p = f(m - d, 0); \
- while(1); \
- }
- */
- volatile int k = f_i(bx);
- 80001b0: ea4f 2b19 mov.w fp, r9, lsr #8
- 80001b4: fa4f f38b sxtb.w r3, fp
- 80001b8: 9303 str r3, [sp, #12]
- }
- }
- s16 rand;
- void main() {
- 80001ba: fa5f fb8b uxtb.w fp, fp
- 80001be: eb0b 0a4b add.w sl, fp, fp, lsl #1
- 80001c2: 9b01 ldr r3, [sp, #4]
- 80001c4: eb03 1a8a add.w sl, r3, sl, lsl #6
- 80001c8: f240 0300 movw r3, #0
- 80001cc: f2c2 0300 movt r3, #8192 ; 0x2000
- 80001d0: 449a add sl, r3
- 80001d2: f06f 0e02 mvn.w lr, #2
- 80001d6: e01b b.n 8000210 <main+0x19c>
- #define sq(f) ((f)*(f))
- static void draw_ball(u8 x, u8 y) {
- for(s8 dx = -8; dx <= 8; dx++)
- for(s8 dy = -8; dy <= 8; dy++)
- if(sq(dy)+sq(dx)<=sq(4)) {
- 80001d8: fb03 c003 mla r0, r3, r3, ip
- 80001dc: 2810 cmp r0, #16
- 80001de: dc08 bgt.n 80001f2 <main+0x17e>
- if(y+dy >= 0 && y+dy < 84 && x+dx >= 0 && x+dx < 48)
- 80001e0: 2a53 cmp r2, #83 ; 0x53
- 80001e2: d806 bhi.n 80001f2 <main+0x17e>
- 80001e4: f1be 0f00 cmp.w lr, #0
- 80001e8: db03 blt.n 80001f2 <main+0x17e>
- 80001ea: f1be 0f2f cmp.w lr, #47 ; 0x2f
- frameband[((int)(y+dy))*W+((int)(x+dx))] = 1;
- 80001ee: bfd8 it le
- 80001f0: 600f strle r7, [r1, #0]
- 80001f2: f103 0301 add.w r3, r3, #1
- 80001f6: f102 0201 add.w r2, r2, #1
- 80001fa: f101 01c0 add.w r1, r1, #192 ; 0xc0
- #define abs(f) ((f)>=0?(f):-(f))
- #define sq(f) ((f)*(f))
- static void draw_ball(u8 x, u8 y) {
- for(s8 dx = -8; dx <= 8; dx++)
- for(s8 dy = -8; dy <= 8; dy++)
- 80001fe: 2b09 cmp r3, #9
- 8000200: d1ea bne.n 80001d8 <main+0x164>
- 8000202: f10a 0a04 add.w sl, sl, #4
- 8000206: f10e 0e01 add.w lr, lr, #1
- #define abs(f) ((f)>=0?(f):-(f))
- #define sq(f) ((f)*(f))
- static void draw_ball(u8 x, u8 y) {
- for(s8 dx = -8; dx <= 8; dx++)
- 800020a: f1be 0f0e cmp.w lr, #14
- 800020e: d008 beq.n 8000222 <main+0x1ae>
- }
- }
- s16 rand;
- void main() {
- 8000210: f1ae 0c05 sub.w ip, lr, #5
- #define sq(f) ((f)*(f))
- static void draw_ball(u8 x, u8 y) {
- for(s8 dx = -8; dx <= 8; dx++)
- for(s8 dy = -8; dy <= 8; dy++)
- if(sq(dy)+sq(dx)<=sq(4)) {
- 8000214: fb0c fc0c mul.w ip, ip, ip
- }
- }
- s16 rand;
- void main() {
- 8000218: f1ab 0208 sub.w r2, fp, #8
- 800021c: 4651 mov r1, sl
- 800021e: 4643 mov r3, r8
- 8000220: e7da b.n 80001d8 <main+0x164>
- * PC2 = !RST
- * PB3 = CLK
- * PB5 = MOSI
- */
- inline static void lcd_cmd() { GPIOC->ODR &= ~BIT(0); }
- 8000222: f44f 5a80 mov.w sl, #4096 ; 0x1000
- 8000226: f2c4 0a01 movt sl, #16385 ; 0x4001
- 800022a: f8da 300c ldr.w r3, [sl, #12]
- 800022e: f023 0301 bic.w r3, r3, #1
- 8000232: f8ca 300c str.w r3, [sl, #12]
- lcd_write(0x0c); // D=NormalMode
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement