Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 11.70 KB | None | 0 0
  1. firmware.elf:     file format elf32-littlearm
  2.  
  3.  
  4. Disassembly of section .text:
  5.  
  6. 08000000 <_start-0x8>:
  7.  8000000:   20002000    .word   0x20002000
  8.  8000004:   08000009    .word   0x08000009
  9.  
  10. 08000008 <_start>:
  11.  8000008:   f000 f834   bl  8000074 <main>
  12.  800000c:   e7fe        b.n 800000c <_start+0x4>
  13.     ...
  14.  
  15. 08000010 <lcd_write>:
  16.  *  PB5 = MOSI
  17.  */
  18.  
  19. inline static void lcd_cmd()     { GPIOC->ODR &= ~BIT(0); }
  20. inline static void lcd_data()    { GPIOC->ODR |=  BIT(0); }
  21. inline static void lcd_enable()  { GPIOC->ODR &= ~BIT(1); }
  22.  8000010:   f44f 5380   mov.w   r3, #4096   ; 0x1000
  23.  8000014:   f2c4 0301   movt    r3, #16385  ; 0x4001
  24.  8000018:   68da        ldr r2, [r3, #12]
  25.  800001a:   f022 0202   bic.w   r2, r2, #2
  26.  800001e:   60da        str r2, [r3, #12]
  27.     GPIOC->ODR |= BIT(2);
  28. }
  29.  
  30. static void lcd_write(u8 byte) {
  31.     lcd_enable();
  32.     while(!(SPI1->SR & SPI_TXE));
  33.  8000020:   f44f 5240   mov.w   r2, #12288  ; 0x3000
  34.  8000024:   f2c4 0201   movt    r2, #16385  ; 0x4001
  35.  8000028:   6893        ldr r3, [r2, #8]
  36.  800002a:   f013 0f02   tst.w   r3, #2
  37.  800002e:   d0fb        beq.n   8000028 <lcd_write+0x18>
  38.     SPI1->DR = byte;
  39.  8000030:   f44f 5340   mov.w   r3, #12288  ; 0x3000
  40.  8000034:   f2c4 0301   movt    r3, #16385  ; 0x4001
  41.  8000038:   60d8        str r0, [r3, #12]
  42.     while(!(SPI1->SR & SPI_RXNE));
  43.  800003a:   f44f 5240   mov.w   r2, #12288  ; 0x3000
  44.  800003e:   f2c4 0201   movt    r2, #16385  ; 0x4001
  45.  8000042:   6893        ldr r3, [r2, #8]
  46.  8000044:   f013 0f01   tst.w   r3, #1
  47.  8000048:   d0fb        beq.n   8000042 <lcd_write+0x32>
  48.     SPI1->DR;
  49.  800004a:   f44f 5340   mov.w   r3, #12288  ; 0x3000
  50.  800004e:   f2c4 0301   movt    r3, #16385  ; 0x4001
  51.  8000052:   68db        ldr r3, [r3, #12]
  52.  */
  53.  
  54. inline static void lcd_cmd()     { GPIOC->ODR &= ~BIT(0); }
  55. inline static void lcd_data()    { GPIOC->ODR |=  BIT(0); }
  56. inline static void lcd_enable()  { GPIOC->ODR &= ~BIT(1); }
  57. inline static void lcd_disable() { GPIOC->ODR |=  BIT(1); }
  58.  8000054:   f44f 5380   mov.w   r3, #4096   ; 0x1000
  59.  8000058:   f2c4 0301   movt    r3, #16385  ; 0x4001
  60.  800005c:   68da        ldr r2, [r3, #12]
  61.  800005e:   f042 0202   orr.w   r2, r2, #2
  62.  8000062:   60da        str r2, [r3, #12]
  63.     while(!(SPI1->SR & SPI_TXE));
  64.     SPI1->DR = byte;
  65.     while(!(SPI1->SR & SPI_RXNE));
  66.     SPI1->DR;
  67.     lcd_disable();
  68. }
  69.  8000064:   4770        bx  lr
  70.  8000066:   bf00        nop
  71.  
  72. 08000068 <delay>:
  73. #include <stm32/afio.h>
  74. #include <stm32/spi.h>
  75. #include "fixed.h"
  76.  
  77. void delay(unsigned timeout) {
  78.     while(timeout--) asm volatile("nop");
  79.  8000068:   b118        cbz r0, 8000072 <delay+0xa>
  80.  800006a:   bf00        nop
  81.  800006c:   f110 30ff   adds.w  r0, r0, #4294967295
  82.  8000070:   d1fb        bne.n   800006a <delay+0x2>
  83. }
  84.  8000072:   4770        bx  lr
  85.  
  86. 08000074 <main>:
  87.             }
  88. }
  89.  
  90. s16 rand;
  91.  
  92. void main() {
  93.  8000074:   e92d 4ff0   stmdb   sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  94.  8000078:   b085        sub sp, #20
  95.     RCC->CR = HSEON;
  96.  800007a:   f44f 5380   mov.w   r3, #4096   ; 0x1000
  97.  800007e:   f2c4 0302   movt    r3, #16386  ; 0x4002
  98.  8000082:   f44f 3280   mov.w   r2, #65536  ; 0x10000
  99.  8000086:   601a        str r2, [r3, #0]
  100.     while((RCC->CR & HSERDY) == 0);
  101.  8000088:   f44f 5380   mov.w   r3, #4096   ; 0x1000
  102.  800008c:   f2c4 0302   movt    r3, #16386  ; 0x4002
  103.  8000090:   681a        ldr r2, [r3, #0]
  104.  8000092:   f412 3f00   tst.w   r2, #131072 ; 0x20000
  105.  8000096:   d0fb        beq.n   8000090 <main+0x1c>
  106.  
  107.     W_SW(RCC->CFGR, SW_HSE);
  108.  8000098:   f44f 5380   mov.w   r3, #4096   ; 0x1000
  109.  800009c:   f2c4 0302   movt    r3, #16386  ; 0x4002
  110.  80000a0:   685a        ldr r2, [r3, #4]
  111.  80000a2:   f022 0203   bic.w   r2, r2, #3
  112.  80000a6:   f042 0201   orr.w   r2, r2, #1
  113.  80000aa:   605a        str r2, [r3, #4]
  114.     while(R_SW(RCC->CFGR) != SW_HSE);
  115.  80000ac:   f44f 5380   mov.w   r3, #4096   ; 0x1000
  116.  80000b0:   f2c4 0302   movt    r3, #16386  ; 0x4002
  117.  80000b4:   685a        ldr r2, [r3, #4]
  118.  80000b6:   f002 0203   and.w   r2, r2, #3
  119.  80000ba:   2a01        cmp r2, #1
  120.  80000bc:   d1fa        bne.n   80000b4 <main+0x40>
  121.     SPI1->DR;
  122.     lcd_disable();
  123. }
  124.  
  125. static void lcd_init() {
  126.     RCC->APB2ENR = IOPCEN | IOPBEN | SPI1EN | AFIOEN;
  127.  80000be:   f44f 5580   mov.w   r5, #4096   ; 0x1000
  128.  80000c2:   f2c4 0502   movt    r5, #16386  ; 0x4002
  129.  80000c6:   f241 0319   movw    r3, #4121   ; 0x1019
  130.  80000ca:   61ab        str r3, [r5, #24]
  131.     AFIO->MAPR = SWJ_CFG(SWJ_CFG_SW) | SPI1_REMAP;
  132.  80000cc:   f04f 0300   mov.w   r3, #0
  133.  80000d0:   f2c4 0301   movt    r3, #16385  ; 0x4001
  134.  80000d4:   f2c0 2200   movt    r2, #512    ; 0x200
  135.  80000d8:   605a        str r2, [r3, #4]
  136.     GPIOC->CRL = 0x44444111; // PC[0-2] as outputs
  137.  80000da:   f44f 5480   mov.w   r4, #4096   ; 0x1000
  138.  80000de:   f2c4 0401   movt    r4, #16385  ; 0x4001
  139.  80000e2:   f244 1311   movw    r3, #16657  ; 0x4111
  140.  80000e6:   f2c4 4344   movt    r3, #17476  ; 0x4444
  141.  80000ea:   6023        str r3, [r4, #0]
  142.     GPIOB->CRL = 0x44949444; // PB3, PB5 as AF outputs
  143.  80000ec:   f44f 6340   mov.w   r3, #3072   ; 0xc00
  144.  80000f0:   f2c4 0301   movt    r3, #16385  ; 0x4001
  145.  80000f4:   f249 4244   movw    r2, #37956  ; 0x9444
  146.  80000f8:   f2c4 4294   movt    r2, #17556  ; 0x4494
  147.  80000fc:   601a        str r2, [r3, #0]
  148.  
  149.     SPI1->CR1 = SPI_MSTR | SPI_BR(0) | SPI_SSM | SPI_SSI | SPI_SPE;
  150.  80000fe:   f44f 5340   mov.w   r3, #12288  ; 0x3000
  151.  8000102:   f2c4 0301   movt    r3, #16385  ; 0x4001
  152.  8000106:   f44f 7251   mov.w   r2, #836    ; 0x344
  153.  800010a:   601a        str r2, [r3, #0]
  154. inline static void lcd_data()    { GPIOC->ODR |=  BIT(0); }
  155. inline static void lcd_enable()  { GPIOC->ODR &= ~BIT(1); }
  156. inline static void lcd_disable() { GPIOC->ODR |=  BIT(1); }
  157.  
  158. inline static void lcd_reset() {
  159.     GPIOC->ODR &= ~BIT(2);
  160.  800010c:   68e3        ldr r3, [r4, #12]
  161.  800010e:   f023 0304   bic.w   r3, r3, #4
  162.  8000112:   60e3        str r3, [r4, #12]
  163.     delay_ms(10);
  164.  8000114:   f244 101a   movw    r0, #16666  ; 0x411a
  165.  8000118:   f7ff ffa6   bl  8000068 <delay>
  166.     GPIOC->ODR |= BIT(2);
  167.  800011c:   68e3        ldr r3, [r4, #12]
  168.  800011e:   f043 0304   orr.w   r3, r3, #4
  169.  8000122:   60e3        str r3, [r4, #12]
  170.  *  PC2 = !RST
  171.  *  PB3 = CLK
  172.  *  PB5 = MOSI
  173.  */
  174.  
  175. inline static void lcd_cmd()     { GPIOC->ODR &= ~BIT(0); }
  176.  8000124:   68e3        ldr r3, [r4, #12]
  177.  8000126:   f023 0301   bic.w   r3, r3, #1
  178.  800012a:   60e3        str r3, [r4, #12]
  179.     SPI1->CR1 = SPI_MSTR | SPI_BR(0) | SPI_SSM | SPI_SSI | SPI_SPE;
  180.  
  181.     lcd_reset();
  182.  
  183.     lcd_cmd();
  184.     lcd_write(0x21); // !PD=ChipActive H=ExtendedCmd
  185.  800012c:   f04f 0021   mov.w   r0, #33 ; 0x21
  186.  8000130:   f7ff ff6e   bl  8000010 <lcd_write>
  187.     lcd_write(0xe0); // set value of Vop (controls contrast) = 0x80 | 0x60 (arbitrary)
  188.  8000134:   f04f 00e0   mov.w   r0, #224    ; 0xe0
  189.  8000138:   f7ff ff6a   bl  8000010 <lcd_write>
  190.     lcd_write(0x04); // set temperature coefficient
  191.  800013c:   f04f 0004   mov.w   r0, #4
  192.  8000140:   f7ff ff66   bl  8000010 <lcd_write>
  193.     lcd_write(0x14); // set bias mode to 1:48.
  194.  8000144:   f04f 0014   mov.w   r0, #20
  195.  8000148:   f7ff ff62   bl  8000010 <lcd_write>
  196.     lcd_write(0x22); // !PD=ChipActive !H=NormalCmd
  197.  800014c:   f04f 0022   mov.w   r0, #34 ; 0x22
  198.  8000150:   f7ff ff5e   bl  8000010 <lcd_write>
  199.     lcd_write(0x0c); // D=NormalMode
  200.  8000154:   f04f 000c   mov.w   r0, #12
  201.  8000158:   f7ff ff5a   bl  8000010 <lcd_write>
  202.     W_SW(RCC->CFGR, SW_HSE);
  203.     while(R_SW(RCC->CFGR) != SW_HSE);
  204.  
  205.     lcd_init();
  206.  
  207.     GPIOC->CRH = 0x44444411;
  208.  800015c:   f244 4311   movw    r3, #17425  ; 0x4411
  209.  8000160:   f2c4 4344   movt    r3, #17476  ; 0x4444
  210.  8000164:   6063        str r3, [r4, #4]
  211.  
  212.     RCC->APB2ENR |= IOPAEN;
  213.  8000166:   69ab        ldr r3, [r5, #24]
  214.  8000168:   f043 0304   orr.w   r3, r3, #4
  215.  800016c:   61ab        str r3, [r5, #24]
  216.     GPIOA->CRL = 0x44444448;
  217.  800016e:   f44f 6300   mov.w   r3, #2048   ; 0x800
  218.  8000172:   f2c4 0301   movt    r3, #16385  ; 0x4001
  219.  8000176:   f244 4248   movw    r2, #17480  ; 0x4448
  220.  800017a:   f2c4 4244   movt    r2, #17476  ; 0x4444
  221.  800017e:   601a        str r2, [r3, #0]
  222.  
  223.     fixed bx = f(50, 0), by = f(5, 0);
  224.  8000180:   f44f 5948   mov.w   r9, #12800  ; 0x3200
  225.             }
  226. }
  227.  
  228. s16 rand;
  229.  
  230. void main() {
  231.  8000184:   4d3d        ldr r5, [pc, #244]  ; (800027c <main+0x208>)
  232.     fixed vx = f(1, 0), vy = f(2, 0);
  233.     fixed g  = f(0, 0.1);
  234.  
  235.     while(1) {
  236.         for(int i = 0; i < 6*84; i++)
  237.             framebuffer[i] = 0;
  238.  8000186:   f04f 0600   mov.w   r6, #0
  239.             }
  240. }
  241.  
  242. s16 rand;
  243.  
  244. void main() {
  245.  800018a:   f64f 13f4   movw    r3, #63988  ; 0xf9f4
  246.  800018e:   f2c0 13ff   movt    r3, #511    ; 0x1ff
  247.  8000192:   9301        str r3, [sp, #4]
  248. static void draw_ball(u8 x, u8 y) {
  249.     for(s8 dx = -8; dx <= 8; dx++)
  250.         for(s8 dy = -8; dy <= 8; dy++)
  251.             if(sq(dy)+sq(dx)<=sq(4)) {
  252.                 if(y+dy >= 0 && y+dy < 84 && x+dx >= 0 && x+dx < 48)
  253.                     frameband[((int)(y+dy))*W+((int)(x+dx))] = 1;
  254.  8000194:   f04f 0701   mov.w   r7, #1
  255.             }
  256. }
  257.  
  258. s16 rand;
  259.  
  260. void main() {
  261.  8000198:   f06f 0807   mvn.w   r8, #7
  262.     lcd_init();
  263.  
  264.     GPIOC->CRH = 0x44444411;
  265.  
  266.     RCC->APB2ENR |= IOPAEN;
  267.     GPIOA->CRL = 0x44444448;
  268.  800019c:   4c38        ldr r4, [pc, #224]  ; (8000280 <main+0x20c>)
  269.             }
  270. }
  271.  
  272. s16 rand;
  273.  
  274. void main() {
  275.  800019e:   4623        mov r3, r4
  276.     fixed vx = f(1, 0), vy = f(2, 0);
  277.     fixed g  = f(0, 0.1);
  278.  
  279.     while(1) {
  280.         for(int i = 0; i < 6*84; i++)
  281.             framebuffer[i] = 0;
  282.  80001a0:   f803 6f01   strb.w  r6, [r3, #1]!
  283.     fixed bx = f(50, 0), by = f(5, 0);
  284.     fixed vx = f(1, 0), vy = f(2, 0);
  285.     fixed g  = f(0, 0.1);
  286.  
  287.     while(1) {
  288.         for(int i = 0; i < 6*84; i++)
  289.  80001a4:   42ab        cmp r3, r5
  290.  80001a6:   d1fb        bne.n   80001a0 <main+0x12c>
  291.             }
  292. }
  293.  
  294. s16 rand;
  295.  
  296. void main() {
  297.  80001a8:   f509 7980   add.w   r9, r9, #256    ; 0x100
  298.  80001ac:   fa1f f989   uxth.w  r9, r9
  299.             p = f(m - d, 0); \
  300.             while(1); \
  301.         }
  302. */
  303.  
  304.         volatile int k = f_i(bx);
  305.  80001b0:   ea4f 2b19   mov.w   fp, r9, lsr #8
  306.  80001b4:   fa4f f38b   sxtb.w  r3, fp
  307.  80001b8:   9303        str r3, [sp, #12]
  308.             }
  309. }
  310.  
  311. s16 rand;
  312.  
  313. void main() {
  314.  80001ba:   fa5f fb8b   uxtb.w  fp, fp
  315.  80001be:   eb0b 0a4b   add.w   sl, fp, fp, lsl #1
  316.  80001c2:   9b01        ldr r3, [sp, #4]
  317.  80001c4:   eb03 1a8a   add.w   sl, r3, sl, lsl #6
  318.  80001c8:   f240 0300   movw    r3, #0
  319.  80001cc:   f2c2 0300   movt    r3, #8192   ; 0x2000
  320.  80001d0:   449a        add sl, r3
  321.  80001d2:   f06f 0e02   mvn.w   lr, #2
  322.  80001d6:   e01b        b.n 8000210 <main+0x19c>
  323. #define sq(f) ((f)*(f))
  324.  
  325. static void draw_ball(u8 x, u8 y) {
  326.     for(s8 dx = -8; dx <= 8; dx++)
  327.         for(s8 dy = -8; dy <= 8; dy++)
  328.             if(sq(dy)+sq(dx)<=sq(4)) {
  329.  80001d8:   fb03 c003   mla r0, r3, r3, ip
  330.  80001dc:   2810        cmp r0, #16
  331.  80001de:   dc08        bgt.n   80001f2 <main+0x17e>
  332.                 if(y+dy >= 0 && y+dy < 84 && x+dx >= 0 && x+dx < 48)
  333.  80001e0:   2a53        cmp r2, #83 ; 0x53
  334.  80001e2:   d806        bhi.n   80001f2 <main+0x17e>
  335.  80001e4:   f1be 0f00   cmp.w   lr, #0
  336.  80001e8:   db03        blt.n   80001f2 <main+0x17e>
  337.  80001ea:   f1be 0f2f   cmp.w   lr, #47 ; 0x2f
  338.                     frameband[((int)(y+dy))*W+((int)(x+dx))] = 1;
  339.  80001ee:   bfd8        it  le
  340.  80001f0:   600f        strle   r7, [r1, #0]
  341.  80001f2:   f103 0301   add.w   r3, r3, #1
  342.  80001f6:   f102 0201   add.w   r2, r2, #1
  343.  80001fa:   f101 01c0   add.w   r1, r1, #192    ; 0xc0
  344. #define abs(f) ((f)>=0?(f):-(f))
  345. #define sq(f) ((f)*(f))
  346.  
  347. static void draw_ball(u8 x, u8 y) {
  348.     for(s8 dx = -8; dx <= 8; dx++)
  349.         for(s8 dy = -8; dy <= 8; dy++)
  350.  80001fe:   2b09        cmp r3, #9
  351.  8000200:   d1ea        bne.n   80001d8 <main+0x164>
  352.  8000202:   f10a 0a04   add.w   sl, sl, #4
  353.  8000206:   f10e 0e01   add.w   lr, lr, #1
  354.  
  355. #define abs(f) ((f)>=0?(f):-(f))
  356. #define sq(f) ((f)*(f))
  357.  
  358. static void draw_ball(u8 x, u8 y) {
  359.     for(s8 dx = -8; dx <= 8; dx++)
  360.  800020a:   f1be 0f0e   cmp.w   lr, #14
  361.  800020e:   d008        beq.n   8000222 <main+0x1ae>
  362.             }
  363. }
  364.  
  365. s16 rand;
  366.  
  367. void main() {
  368.  8000210:   f1ae 0c05   sub.w   ip, lr, #5
  369. #define sq(f) ((f)*(f))
  370.  
  371. static void draw_ball(u8 x, u8 y) {
  372.     for(s8 dx = -8; dx <= 8; dx++)
  373.         for(s8 dy = -8; dy <= 8; dy++)
  374.             if(sq(dy)+sq(dx)<=sq(4)) {
  375.  8000214:   fb0c fc0c   mul.w   ip, ip, ip
  376.             }
  377. }
  378.  
  379. s16 rand;
  380.  
  381. void main() {
  382.  8000218:   f1ab 0208   sub.w   r2, fp, #8
  383.  800021c:   4651        mov r1, sl
  384.  800021e:   4643        mov r3, r8
  385.  8000220:   e7da        b.n 80001d8 <main+0x164>
  386.  *  PC2 = !RST
  387.  *  PB3 = CLK
  388.  *  PB5 = MOSI
  389.  */
  390.  
  391. inline static void lcd_cmd()     { GPIOC->ODR &= ~BIT(0); }
  392.  8000222:   f44f 5a80   mov.w   sl, #4096   ; 0x1000
  393.  8000226:   f2c4 0a01   movt    sl, #16385  ; 0x4001
  394.  800022a:   f8da 300c   ldr.w   r3, [sl, #12]
  395.  800022e:   f023 0301   bic.w   r3, r3, #1
  396.  8000232:   f8ca 300c   str.w   r3, [sl, #12]
  397.     lcd_write(0x0c); // D=NormalMode
  398. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement