.syntax unified
.cpu cortex-m4
.thumb

.section .isr_vector,"a",%progbits
.balign 1024
.global g_pfnVectors
.type g_pfnVectors,%object
g_pfnVectors:
  .word _estack
  .word Reset_Handler
  .word Default_Handler  /* NMI */
  .word Default_Handler  /* HardFault */
  .word Default_Handler  /* MemManage */
  .word Default_Handler  /* BusFault */
  .word Default_Handler  /* UsageFault */
  .word 0
  .word 0
  .word 0
  .word 0
  .word Default_Handler  /* SVCall */
  .word Default_Handler  /* DebugMonitor */
  .word 0
  .word Default_Handler  /* PendSV */
  .word SysTick_Handler  /* foreground heartbeat only */
  /* No peripheral IRQ is enabled by this image; reserve the architectural
     maximum number of external vectors and route unexpected IRQs to a halt. */
  .rept 240
  .word Default_Handler
  .endr
.size g_pfnVectors, .-g_pfnVectors

.section .text.Reset_Handler,"ax",%progbits
.global Reset_Handler
.type Reset_Handler,%function
.thumb_func
Reset_Handler:
  ldr r0, =_estack
  mov sp, r0

  ldr r0, =_sidata
  ldr r1, =_sdata
  ldr r2, =_edata
1:
  cmp r1, r2
  bcs 2f
  ldr r3, [r0]
  str r3, [r1]
  adds r0, #4
  adds r1, #4
  b 1b
2:
  ldr r1, =_sbss
  ldr r2, =_ebss
  movs r3, #0
3:
  cmp r1, r2
  bcs 4f
  str r3, [r1]
  adds r1, #4
  b 3b
4:
  bl SystemInit
  dsb
  isb
  bl main
5:
  b 5b
.size Reset_Handler, .-Reset_Handler

.section .text.Default_Handler,"ax",%progbits
.global Default_Handler
.type Default_Handler,%function
.thumb_func
Default_Handler:
  b Default_Handler
.size Default_Handler, .-Default_Handler

.section .note.GNU-stack,"",%progbits
