Long over due commit...

-Updated STM devices to always run @ 48MHz
 Doesn't seem to cause any problems with SNES flashing couple thousand SF2
 boards have been flashed with this build without issues
-Added note to usb_operations.c as manf/prod ID can't be read if drivers
 aren't installed.  Caused issues for Todd as he hadn't installed drivers
 for new hardware.
-STM swim operations are working pretty well for SNES v2 and v3 boards
 Haven't even touched SWIM on AVR core yet...
 SWIM is pretty pin independent but only implemented on EXP0 so far
 Reads "ROTF" aren't bullet proof but they're pretty good.  Biggest
 room for improvement aside from adding a legit pullup would be to have
 an interrupt trigger the device header bit falling edge instead of the
 current polling method which has decent amount of jitter.
 Implementing interrupts would also probably allow for more easily
 supporing reads longer than a single byte...
This commit is contained in:
Paul Molloy 2017-10-22 17:09:21 -05:00
parent 49b4639aa4
commit 0dd8828744
15 changed files with 2053 additions and 991 deletions

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +1,69 @@
Archive member included to satisfy reference by file (symbol)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o (__aeabi_unwind_cpp_pr0)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(libunwind.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o) (restore_core_regs)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o) (__gnu_unwind_execute)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o) (abort)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o (exit)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o) (_global_impure_ptr)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-init.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o (__libc_init_array)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o) (memcpy)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memset.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o (memset)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o) (raise)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o) (_kill_r)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__call_atexit.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o) (__call_exitprocs)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-atexit.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__call_atexit.o) (atexit)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-fini.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__call_atexit.o) (__libc_fini_array)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o) (_malloc_r)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o) (__malloc_lock)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o) (errno)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o) (_sbrk_r)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__atexit.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-atexit.o) (__register_exitproc)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o) (_free_r)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o) (_getpid)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o) (_kill)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o) (_sbrk)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o) (_exit)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o) (_exit)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o (__gnu_thumb1_case_uqi)
C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o (__gnu_thumb1_case_uqi)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o (__gnu_thumb1_case_shi)
C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o (__gnu_thumb1_case_shi)
c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o (__gnu_thumb1_case_uhi)
C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o (__gnu_thumb1_case_uhi)
Allocating common symbols
Common symbol size file
errno 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
incoming_bytes_remain
0x1 source/buffer.o (symbol from plugin)
raw_bank_status 0x10 source/buffer.o (symbol from plugin)
raw_buffer16 0x200 source/buffer.o (symbol from plugin)
swim_pin 0x1 source/swim.o (symbol from plugin)
cur_usb_load_buff 0x4 source/buffer.o (symbol from plugin)
Discarded input sections
@ -55,20 +87,23 @@ Discarded input sections
.ARM.exidx 0x00000000 0x8 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o
.ARM.attributes
0x00000000 0x1b c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
.text 0x00000000 0x0 source/buffer.o (symbol from plugin)
.text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.rodata.oper_info
0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.text 0x00000000 0x0 source/dump.o (symbol from plugin)
.text 0x00000000 0x0 source/flash.o (symbol from plugin)
.text 0x00000000 0x0 source/io.o (symbol from plugin)
@ -77,9 +112,33 @@ Discarded input sections
.text 0x00000000 0x0 source/operation.o (symbol from plugin)
.text 0x00000000 0x0 source/pinport.o (symbol from plugin)
.text 0x00000000 0x0 source/snes.o (symbol from plugin)
.text 0x00000000 0x0 source/swim.o (symbol from plugin)
.text 0x00000000 0x0 source/usb.o (symbol from plugin)
.text 0x00000000 0x0 source_stm_only/stm_init.o (symbol from plugin)
.text 0x00000000 0x0 source_stm_only/usbstm.o (symbol from plugin)
.data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.ARM.extab 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
.debug_frame 0x00000000 0x2c4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(libunwind.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(libunwind.o)
.ARM.attributes
0x00000000 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(libunwind.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
.debug_frame 0x00000000 0xf4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
.debug_frame 0x00000000 0x28 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-exit.o)
@ -90,10 +149,6 @@ Discarded input sections
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
.data._impure_ptr
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
.data.impure_data
0x00000000 0x428 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
.rodata._global_impure_ptr
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
.ARM.attributes
@ -106,6 +161,12 @@ Discarded input sections
.debug_frame 0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-init.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-init.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
.debug_frame 0x00000000 0x30 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memset.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memset.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memset.o)
@ -113,6 +174,31 @@ Discarded input sections
.debug_frame 0x00000000 0x30 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memset.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memset.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text._init_signal_r.part.0
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text._init_signal_r
0x00000000 0x1c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text._signal_r
0x00000000 0x3c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text.__sigtramp_r
0x00000000 0x50 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text.signal 0x00000000 0x18 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text._init_signal
0x00000000 0x20 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text.__sigtramp
0x00000000 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.debug_frame 0x00000000 0xf8 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
.debug_frame 0x00000000 0x44 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__call_atexit.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__call_atexit.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__call_atexit.o)
@ -140,6 +226,55 @@ Discarded input sections
.debug_frame 0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-fini.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-fini.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.text._malloc_r
0x00000000 0x568 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.bss.__malloc_current_mallinfo
0x00000000 0x28 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.bss.__malloc_max_sbrked_mem
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.bss.__malloc_max_total_mem
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.bss.__malloc_top_pad
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.data.__malloc_av_
0x00000000 0x408 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.data.__malloc_sbrk_base
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.data.__malloc_trim_threshold
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.debug_frame 0x00000000 0x3c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mallocr.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
.text.__malloc_lock
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
.text.__malloc_unlock
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
.debug_frame 0x00000000 0x30 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-mlock.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
.text.cleanup_glue
0x00000000 0x1c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
.text._reclaim_reent
0x00000000 0x94 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
.debug_frame 0x00000000 0x48 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o)
.text._sbrk_r 0x00000000 0x24 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o)
.debug_frame 0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-sbrkr.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__atexit.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__atexit.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__atexit.o)
@ -148,10 +283,42 @@ Discarded input sections
.debug_frame 0x00000000 0x3c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__atexit.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-__atexit.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
.text._malloc_trim_r
0x00000000 0xa0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
.text._free_r 0x00000000 0x1bc c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
.debug_frame 0x00000000 0x50 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-freer.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
.stab 0x00000000 0x24 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
.debug_frame 0x00000000 0x20 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
.stab 0x00000000 0x18 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
0x24 (size before relaxing)
.debug_frame 0x00000000 0x20 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
.text._sbrk 0x00000000 0x1c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
.bss.heap_end.4116
0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
.debug_frame 0x00000000 0x20 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(sbrk.o)
.text 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
.data 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
.bss 0x00000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
.text._exit 0x00000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
.debug_frame 0x00000000 0x20 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
.ARM.attributes
0x00000000 0x2c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
@ -188,11 +355,12 @@ Linker script and memory map
LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o
LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o
LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
LOAD source/buffer.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
LOAD C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
LOAD source/dump.o
LOAD source/flash.o
LOAD source/io.o
@ -201,9 +369,11 @@ LOAD source/nes.o
LOAD source/operation.o
LOAD source/pinport.o
LOAD source/snes.o
LOAD source/swim.o
LOAD source/usb.o
LOAD source_stm_only/stm_init.o
LOAD source_stm_only/usbstm.o
LOAD C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
START GROUP
LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a
LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a
@ -217,12 +387,12 @@ END GROUP
LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtend.o
LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtn.o
.text 0x08000000 0x20d8
.text 0x08000000 0x364c
*(.isr_vector)
.isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
0x08000000 __isr_vector
*(.text*)
.text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
0x080000c0 Reset_Handler
0x080000fc TSC_IRQHandler
0x080000fc ADC1_COMP_IRQHandler
@ -261,57 +431,141 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm
0x080000fc FLASH_IRQHandler
0x080000fc USART1_IRQHandler
0x080000fc TIM1_BRK_UP_TRG_COM_IRQHandler
.text.USB_IRQHandler
0x08000100 0x1510 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x08000100 USB_IRQHandler
.text.unlikely.append_pairity
0x08000100 0x1e C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
*fill* 0x0800011e 0x2
.text.snes_rom_wr
0x08001610 0x50 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x08001610 snes_rom_wr
0x08000120 0x50 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000120 snes_rom_wr
.text.snes_rom_rd
0x08001660 0x30 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x08001660 snes_rom_rd
0x08000170 0x30 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000170 snes_rom_rd
.text.nes_ppu_wr
0x08001690 0x58 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x08001690 nes_ppu_wr
0x080001a0 0x58 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x080001a0 nes_ppu_wr
.text.nes_ppu_rd
0x080016e8 0x38 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x080016e8 nes_ppu_rd
0x080001f8 0x38 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x080001f8 nes_ppu_rd
.text.nes_cpu_rd
0x08001720 0x40 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x08001720 nes_cpu_rd
0x08000230 0x40 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000230 nes_cpu_rd
.text.discrete_exp0_prgrom_wr
0x08001760 0x60 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x08001760 discrete_exp0_prgrom_wr
0x08000270 0x60 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000270 discrete_exp0_prgrom_wr
.text.get_next_buff
0x080017c0 0x54 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.text.control_xfr_in.lto_priv.24
0x08001814 0xbc C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x08001814 control_xfr_in.lto_priv.24
0x080002d0 0x54 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.text.control_xfr_in.lto_priv.25
0x08000324 0xbc C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000324 control_xfr_in.lto_priv.25
.text.HardFault_Handler
0x080018d0 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x080018d0 HardFault_Handler
*fill* 0x080018d2 0x2
0x080003e0 0x2 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x080003e0 HardFault_Handler
*fill* 0x080003e2 0x2
.text.unlikely.swim_wotf
0x080003e4 0x8c C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x080003e4 swim_wotf
.text.unlikely.swim_rotf
0x08000470 0x94 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000470 swim_rotf
.text.unlikely.delay
0x08000504 0x12 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000504 delay
*fill* 0x08000516 0x2
.text.io_reset
0x080018d4 0x148 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x080018d4 io_reset
0x08000518 0x148 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000518 io_reset
.text.startup.main
0x08001a1c 0x558 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x08001a1c main
.text.nes_cpu_page_rd_poll.constprop.15
0x08001f74 0x68 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
0x08001f74 nes_cpu_page_rd_poll.constprop.15
.text 0x08001fdc 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
0x08001fdc __gnu_thumb1_case_uqi
.text 0x08001ff0 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
0x08001ff0 __gnu_thumb1_case_shi
.text 0x08002004 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
0x08002004 __gnu_thumb1_case_uhi
0x08000660 0x59c C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x08000660 main
.text.USB_IRQHandler
0x08000bfc 0xafc C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x08000bfc USB_IRQHandler
.text.pinport_call.constprop.7
0x080016f8 0xc14 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
0x080016f8 pinport_call.constprop.7
.text.nes_cpu_page_rd_poll.constprop.16
0x0800230c 0x68 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
0x0800230c nes_cpu_page_rd_poll.constprop.16
*fill* 0x08002374 0xc
.text 0x08002380 0x154 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
0x08002380 swim_xfr
.text 0x080024d4 0xa38 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
0x080027a4 _Unwind_GetCFA
0x080027a8 __gnu_Unwind_RaiseException
0x080027fc __gnu_Unwind_ForcedUnwind
0x08002810 __gnu_Unwind_Resume
0x08002858 __gnu_Unwind_Resume_or_Rethrow
0x08002874 _Unwind_Complete
0x08002878 _Unwind_DeleteException
0x08002888 _Unwind_VRS_Get
0x080028d4 _Unwind_VRS_Set
0x08002920 __gnu_Unwind_Backtrace
0x08002c80 __aeabi_unwind_cpp_pr0
0x08002c8c __aeabi_unwind_cpp_pr1
0x08002c98 __aeabi_unwind_cpp_pr2
0x08002ca4 _Unwind_VRS_Pop
.text 0x08002f0c 0x144 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(libunwind.o)
0x08002f0c __restore_core_regs
0x08002f0c restore_core_regs
0x08002f38 __gnu_Unwind_Restore_VFP
0x08002f3c __gnu_Unwind_Save_VFP
0x08002f40 __gnu_Unwind_Restore_VFP_D
0x08002f44 __gnu_Unwind_Save_VFP_D
0x08002f48 __gnu_Unwind_Restore_VFP_D_16_to_31
0x08002f4c __gnu_Unwind_Save_VFP_D_16_to_31
0x08002f50 __gnu_Unwind_Restore_WMMXD
0x08002f54 __gnu_Unwind_Save_WMMXD
0x08002f58 __gnu_Unwind_Restore_WMMXC
0x08002f5c __gnu_Unwind_Save_WMMXC
0x08002f60 ___Unwind_RaiseException
0x08002f60 _Unwind_RaiseException
0x08002f90 _Unwind_Resume
0x08002f90 ___Unwind_Resume
0x08002fc0 _Unwind_Resume_or_Rethrow
0x08002fc0 ___Unwind_Resume_or_Rethrow
0x08002ff0 _Unwind_ForcedUnwind
0x08002ff0 ___Unwind_ForcedUnwind
0x08003020 ___Unwind_Backtrace
0x08003020 _Unwind_Backtrace
.text 0x08003050 0x3a8 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
0x080030a4 __gnu_unwind_execute
0x080033a0 __gnu_unwind_frame
0x080033c8 _Unwind_GetRegionStart
0x080033d4 _Unwind_GetLanguageSpecificData
0x080033e8 _Unwind_GetTextRelBase
0x080033f0 _Unwind_GetDataRelBase
.text.abort 0x080033f8 0x10 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
0x080033f8 abort
.text.memcpy 0x08003408 0x84 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
0x08003408 memcpy
.text._raise_r
0x0800348c 0x5c c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
0x0800348c _raise_r
.text.raise 0x080034e8 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
0x080034e8 raise
.text._kill_r 0x080034fc 0x28 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
0x080034fc _kill_r
.text._getpid_r
0x08003524 0x8 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
0x08003524 _getpid_r
.text._getpid 0x0800352c 0x10 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
0x0800352c _getpid
.text._kill 0x0800353c 0x10 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
0x0800353c _kill
.text._exit 0x0800354c 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
0x0800354c _exit
.text 0x08003550 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
0x08003550 __gnu_thumb1_case_uqi
.text 0x08003564 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
0x08003564 __gnu_thumb1_case_shi
.text 0x08003578 0x14 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
0x08003578 __gnu_thumb1_case_uhi
*(.init)
.init 0x08002018 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o
0x08002018 _init
.init 0x0800358c 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o
0x0800358c _init
*(.fini)
.fini 0x0800201c 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o
0x0800201c _fini
.fini 0x08003590 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o
0x08003590 _fini
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors)
@ -324,134 +578,158 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm
*(.dtors)
*(.rodata*)
.rodata.config_desc
0x08002020 0x12 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x08003594 0x12 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.rodata.device_desc
0x08002032 0x12 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x080035a6 0x12 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.rodata.string0_desc
0x08002044 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x080035b8 0x4 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.rodata.string1_desc
0x08002048 0x54 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x080035bc 0x54 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.rodata.string2_desc
0x0800209c 0x3c C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x08003610 0x3c C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
*(.eh_frame*)
.glue_7 0x080020d8 0x0
.glue_7 0x080020d8 0x0 linker stubs
.glue_7 0x0800364c 0x0
.glue_7 0x0800364c 0x0 linker stubs
.glue_7t 0x080020d8 0x0
.glue_7t 0x080020d8 0x0 linker stubs
.glue_7t 0x0800364c 0x0
.glue_7t 0x0800364c 0x0 linker stubs
.vfp11_veneer 0x080020d8 0x0
.vfp11_veneer 0x080020d8 0x0 linker stubs
.vfp11_veneer 0x0800364c 0x0
.vfp11_veneer 0x0800364c 0x0 linker stubs
.v4_bx 0x080020d8 0x0
.v4_bx 0x080020d8 0x0 linker stubs
.v4_bx 0x0800364c 0x0
.v4_bx 0x0800364c 0x0 linker stubs
.iplt 0x080020d8 0x0
.iplt 0x080020d8 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o
.iplt 0x0800364c 0x0
.iplt 0x0800364c 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o
.rel.dyn 0x080020d8 0x0
.rel.iplt 0x080020d8 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o
.ARM.extab
.ARM.extab 0x0800364c 0x30
*(.ARM.extab* .gnu.linkonce.armextab.*)
0x080020d8 __exidx_start = .
.ARM.extab 0x0800364c 0x24 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
.ARM.extab 0x08003670 0xc c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
0x0800367c __exidx_start = .
.ARM.exidx
.ARM.exidx 0x0800367c 0xd0
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
0x080020d8 __exidx_end = .
0x080020d8 __etext = ALIGN (0x4)
.ARM.exidx 0x0800367c 0x8 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
0x10 (size before relaxing)
.ARM.exidx 0x08003684 0x98 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(unwind-arm.o)
0xd8 (size before relaxing)
.ARM.exidx 0x0800371c 0x30 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(pr-support.o)
0x48 (size before relaxing)
0x0800374c __exidx_end = .
0x0800374c __etext = ALIGN (0x4)
.data 0x20000000 0x0 load address 0x080020d8
.rel.dyn 0x0800374c 0x0
.rel.iplt 0x0800374c 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o
.data 0x20000000 0x430 load address 0x0800374c
0x20000000 __data_start__ = .
*(vtable)
*(.data*)
0x20000000 . = ALIGN (0x4)
0x20000000 PROVIDE (__preinit_array_start, .)
.data._impure_ptr
0x20000000 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
0x20000000 _impure_ptr
*fill* 0x20000004 0x4
.data.impure_data
0x20000008 0x428 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-impure.o)
0x20000430 . = ALIGN (0x4)
0x20000430 PROVIDE (__preinit_array_start, .)
*(.preinit_array)
0x20000000 PROVIDE (__preinit_array_end, .)
0x20000000 . = ALIGN (0x4)
0x20000000 PROVIDE (__init_array_start, .)
0x20000430 PROVIDE (__preinit_array_end, .)
0x20000430 . = ALIGN (0x4)
0x20000430 PROVIDE (__init_array_start, .)
*(SORT(.init_array.*))
*(.init_array)
0x20000000 PROVIDE (__init_array_end, .)
0x20000000 . = ALIGN (0x4)
0x20000000 PROVIDE (__fini_array_start, .)
0x20000430 PROVIDE (__init_array_end, .)
0x20000430 . = ALIGN (0x4)
0x20000430 PROVIDE (__fini_array_start, .)
*(SORT(.fini_array.*))
*(.fini_array)
0x20000000 PROVIDE (__fini_array_end, .)
0x20000430 PROVIDE (__fini_array_end, .)
*(.jcr)
0x20000000 . = ALIGN (0x4)
0x20000000 __data_end__ = .
0x20000430 . = ALIGN (0x4)
0x20000430 __data_end__ = .
.igot.plt 0x20000000 0x0
.igot.plt 0x20000000 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o
.igot.plt 0x20000430 0x0 load address 0x08003b7c
.igot.plt 0x20000430 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o
.bss 0x20000000 0x2ac
0x20000000 . = ALIGN (0x4)
0x20000000 __bss_start__ = .
.bss 0x20000430 0x2b8 load address 0x08003b7c
0x20000430 . = ALIGN (0x4)
0x20000430 __bss_start__ = .
*(.bss*)
.bss.buff0 0x20000000 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000000 buff0
.bss.buff1 0x20000014 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000014 buff1
.bss.buff2 0x20000028 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000028 buff2
.bss.buff3 0x2000003c 0x14 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x2000003c buff3
.bss.cur_buff 0x20000050 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000050 cur_buff
.bss.num_buff.4922
0x20000430 0x1 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
*fill* 0x20000431 0x3
.bss.buff0 0x20000434 0x14 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x20000434 buff0
.bss.buff1 0x20000448 0x14 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x20000448 buff1
.bss.buff2 0x2000045c 0x14 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x2000045c buff2
.bss.buff3 0x20000470 0x14 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x20000470 buff3
.bss.cur_buff 0x20000484 0x4 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x20000484 cur_buff
.bss.cur_usb_load_buff
0x20000054 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000488 0x4 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss.incoming_bytes_remain
0x20000058 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
*fill* 0x20000059 0x3
.bss.log 0x2000005c 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x2000048c 0x1 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
*fill* 0x2000048d 0x3
.bss.log 0x20000490 0x4 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss.new_address
0x20000060 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
*fill* 0x20000061 0x1
.bss.num_bytes_req.lto_priv.27
0x20000062 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000062 num_bytes_req.lto_priv.27
.bss.num_bytes_sending.lto_priv.26
0x20000064 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000064 num_bytes_sending.lto_priv.26
.bss.num_bytes_xfrd.lto_priv.25
0x20000066 0x2 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000066 num_bytes_xfrd.lto_priv.25
0x20000494 0x1 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
*fill* 0x20000495 0x1
.bss.num_bytes_req.lto_priv.28
0x20000496 0x2 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x20000496 num_bytes_req.lto_priv.28
.bss.num_bytes_sending.lto_priv.27
0x20000498 0x2 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x20000498 num_bytes_sending.lto_priv.27
.bss.num_bytes_xfrd.lto_priv.26
0x2000049a 0x2 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x2000049a num_bytes_xfrd.lto_priv.26
.bss.oper_info_struct
0x20000068 0x20 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x20000068 oper_info_struct
0x2000049c 0x20 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x2000049c oper_info_struct
.bss.raw_bank_status
0x20000088 0x10 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x200004bc 0x10 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss.raw_buffer16
0x20000098 0x200 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.bss.req_dir 0x20000298 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.bss.reqdir 0x20000299 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.bss.reqtype 0x2000029a 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
*fill* 0x2000029b 0x1
.bss.rv16.4816
0x2000029c 0x8 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x200004cc 0x200 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss.req_dir 0x200006cc 0x1 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss.reqdir 0x200006cd 0x1 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss.reqtype 0x200006ce 0x1 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
*fill* 0x200006cf 0x1
.bss.rv16.4842
0x200006d0 0x8 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.bss.swim_base
0x200006d8 0x4 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x200006d8 swim_base
.bss.swim_mask
0x200006dc 0x2 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x200006dc swim_mask
.bss.swim_pin 0x200006de 0x1 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
*fill* 0x200006df 0x1
.bss.usbMsgPtr
0x200002a4 0x4 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x200002a4 usbMsgPtr
.bss.num_buff.4896
0x200002a8 0x1 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x200006e0 0x4 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x200006e0 usbMsgPtr
*(COMMON)
0x200002ac . = ALIGN (0x4)
*fill* 0x200002a9 0x3
0x200002ac __bss_end__ = .
COMMON 0x200006e4 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
0x200006e4 errno
0x200006e8 . = ALIGN (0x4)
0x200006e8 __bss_end__ = .
.heap 0x200002b0 0x0
0x200002b0 __end__ = .
[!provide] PROVIDE (end, .)
.heap 0x200006e8 0x0
0x200006e8 __end__ = .
0x200006e8 PROVIDE (end, .)
*(.heap*)
.heap 0x200002b0 0x0 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
0x200002b0 __HeapLimit = .
.heap 0x200006e8 0x0 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
0x200006e8 __HeapLimit = .
.stack_dummy 0x200002b0 0xc00
.stack_dummy 0x200006e8 0xc00
*(.stack*)
.stack 0x200002b0 0xc00 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.stack 0x200006e8 0xc00 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
0x20001800 __StackTop = (ORIGIN (RAM) + LENGTH (RAM))
0x20000c00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy))
0x20001800 PROVIDE (__stack, __StackTop)
@ -463,73 +741,96 @@ OUTPUT(build_stm/inlretro_stm.elf elf32-littlearm)
.ARM.attributes
0x00000000 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o
.ARM.attributes
0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
.ARM.attributes
0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.ARM.attributes
0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.ARM.attributes
0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.ARM.attributes
0x000000c6 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
0x000000c6 0x2f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.ARM.attributes
0x000000e4 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
0x000000f5 0x21 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.ARM.attributes
0x00000102 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
0x00000116 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
.ARM.attributes
0x00000134 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
.ARM.attributes
0x00000152 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
.comment 0x00000000 0x6e
.comment 0x00000000 0x6e C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.comment 0x00000000 0x6e C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x6f (size before relaxing)
.comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.comment 0x0000006e 0x6f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.debug_line 0x00000000 0x1003
.debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.debug_line 0x0000006f 0x8cd C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.debug_line 0x0000093c 0x593 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.debug_line 0x00000ecf 0x134 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.debug_line 0x00000000 0x134a
.debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
.debug_line 0x0000006f 0x643 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.debug_line 0x000006b2 0x563 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.debug_line 0x00000c15 0x50e C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.debug_line 0x00001123 0x134 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.debug_line 0x00001257 0xf3 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.debug_info 0x00000000 0x1e03
.debug_info 0x00000000 0x83 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.debug_info 0x00000083 0x1080 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.debug_info 0x00001103 0xc0a C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.debug_info 0x00001d0d 0xf6 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.debug_info 0x00000000 0x252c
.debug_info 0x00000000 0x83 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
.debug_info 0x00000083 0xeca C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.debug_info 0x00000f4d 0x1367 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.debug_info 0x000022b4 0x106 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.debug_info 0x000023ba 0xf6 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.debug_info 0x000024b0 0x7c C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.debug_abbrev 0x00000000 0x7a3
.debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
.debug_abbrev 0x00000014 0x319 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.debug_abbrev 0x0000032d 0x3da C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.debug_abbrev 0x00000707 0x9c C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.debug_abbrev 0x00000000 0x91a
.debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
.debug_abbrev 0x00000014 0x44f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.debug_abbrev 0x00000463 0x378 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.debug_abbrev 0x000007db 0x8f C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.debug_abbrev 0x0000086a 0x9c C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.debug_abbrev 0x00000906 0x14 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.debug_aranges 0x00000000 0xd0
.debug_aranges 0x00000000 0x130
.debug_aranges
0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\ccELTyUg.o
0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\ccOGntZJ.o
.debug_aranges
0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x00000020 0x90 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.debug_aranges
0x00000040 0x70 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x000000b0 0x20 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.debug_aranges
0x000000b0 0x20 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
0x000000d0 0x20 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.debug_aranges
0x000000f0 0x20 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.debug_aranges
0x00000110 0x20 C:\Users\Paul\AppData\Local\Temp\cce1HaeA.o
.debug_loc 0x00000000 0x288f
.debug_loc 0x00000000 0x1ec9 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.debug_loc 0x00001ec9 0x91c C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.debug_loc 0x000027e5 0xaa C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.debug_loc 0x00000000 0x3e21
.debug_loc 0x00000000 0xc53 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.debug_loc 0x00000c53 0xcc3 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.debug_loc 0x00001916 0x2461 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.debug_loc 0x00003d77 0xaa C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.debug_ranges 0x00000000 0x13a0
.debug_ranges 0x00000000 0x1190 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.debug_ranges 0x00001190 0x200 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.debug_ranges 0x00001390 0x10 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.debug_ranges 0x00000000 0x858
.debug_ranges 0x00000000 0x220 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.debug_ranges 0x00000220 0x618 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.debug_ranges 0x00000838 0x10 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.debug_ranges 0x00000848 0x10 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.debug_str 0x00000000 0x92e
.debug_str 0x00000000 0x72d C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
0x794 (size before relaxing)
.debug_str 0x0000072d 0x1ca C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
0x44e (size before relaxing)
.debug_str 0x000008f7 0x37 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.debug_str 0x00000000 0xa3e
.debug_str 0x00000000 0x458 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
0x4b7 (size before relaxing)
.debug_str 0x00000458 0x589 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
0x832 (size before relaxing)
.debug_str 0x000009e1 0x26 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
0x1f9 (size before relaxing)
.debug_str 0x00000a07 0x37 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
0x1d1 (size before relaxing)
.debug_frame 0x00000000 0x14c
.debug_frame 0x00000000 0x30 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans0.ltrans.o
.debug_frame 0x00000030 0xec C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans1.ltrans.o
.debug_frame 0x0000011c 0x30 C:\Users\Paul\AppData\Local\Temp\ccWmX1Gm.ltrans2.ltrans.o
.debug_frame 0x00000000 0x1e0
.debug_frame 0x00000000 0x154 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans0.ltrans.o
.debug_frame 0x00000154 0x30 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans1.ltrans.o
.debug_frame 0x00000184 0x2c C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans2.ltrans.o
.debug_frame 0x000001b0 0x30 C:\Users\Paul\AppData\Local\Temp\ccMUWKGh.ltrans3.ltrans.o
.stabstr 0x00000000 0x76
.stabstr 0x00000000 0x76 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)

View File

@ -312,7 +312,16 @@ poll_header:
//; seemed to be a little early at times..
swim_pp
nop
swim_od
//; adding delay to extend header bit which always seems 250nsec longer than it should be
nop //; 1x NOP fails pretty hard header errors @ slow speed
//; moved second NOP between pp->od to try and reduce header errors @ low speed
//; nop //; 2x NOP seems pretty good, sometimes fails in slow speed, but pretty good @ high speed
//; can usually get 1 out of 12 low speed to fail, and sometimes HS will fail hard
//; nop //; 3x NOP seems more likely to fail @ low speed than 3x
//; hard to say if 3x NOP is actually better, it might succeed more on reads, but switching to HS seems to fail more often
b read_next_bit
.p2align 4
@ -386,6 +395,11 @@ always_send_ack:
swim_hi
swim_od
//; check that SWIM is actually high
//; if device failed it's possible pairity still passed
//; but device sensed reset condition due to lack of legit pullup
//; in which case it would likely be outputing low now for 16usec
//; organize return data
//; MSB NAK/NORESP from last write
//; if ACK, then return read result

View File

@ -215,10 +215,15 @@ uint8_t write_page_snes( uint8_t bank, uint8_t addrH, buffer *buff, write_funcpt
//retry if write failed
//this helped but still seeing similar fails to dumps
// if (read == buff->data[n]) {
if (read == buff->data[n]) {
n++;
cur++;
// }
LED_IP_PU();
LED_LO();
} else {
LED_OP();
LED_HI();
}
}

View File

@ -57,6 +57,13 @@ int main(void)
//Default clock is in operation
//Change system clock as needed
init_clock();
//trying to move to 48Mhz clock for all STM32 cores
//If >24Mhz SYSCLK, must add wait state to flash
//can also enable prefetch buffer
FLASH->ACR = FLASH_ACR_PRFTBE | 0x0001;
//switch to 48Mhz
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_PLL;
//Initialize periphery clocks as needed
init_usb_clock();
@ -73,6 +80,7 @@ int main(void)
init_usb();
//Initialize board/system
#endif
//intialize i/o and LED to pullup state

View File

@ -9,6 +9,10 @@
//
//=================================================================================================
uint8_t swim_pin;
uint16_t swim_mask;
GPIO_TypeDef *swim_base;
/* Desc:Function takes an opcode which was transmitted via USB
* then decodes it to call designated function.
* shared_dict_swim.h is used in both host and fw to ensure opcodes/names align
@ -31,16 +35,26 @@ uint8_t swim_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *
case SWIM_RESET: swim_reset(); break;
case SWIM_SRST:
rdata[RD_LEN] = BYTE_LEN;
rdata[RD0] = swim_out( 0x0000, 4); break;
//assumes low speed
rdata[RD0] = swim_xfr( 0x0000, ((SWIM_WR<<16) | 4), swim_base, swim_mask); break;
case WOTF:
rdata[RD_LEN] = BYTE_LEN;
rdata[RD0] = swim_woft( operand, miscdata ); break;
rdata[RD0] = swim_wotf( SWIM_LS, operand, miscdata ); break;
case WOTF_HS:
rdata[RD_LEN] = BYTE_LEN;
rdata[RD0] = swim_wotf( SWIM_HS, operand, miscdata ); break;
case ROTF:
rdata[RD_LEN] = HWORD_LEN;
//this assignment actually undoes the byte swap
//first index of data includes NAK/ACK just like write routines which only return ACK/NAK
//second index of data includes actual byte read back
*ret_hword = swim_roft( operand ); break;
*ret_hword = swim_rotf( SWIM_LS, operand ); break;
case ROTF_HS:
rdata[RD_LEN] = HWORD_LEN;
//this assignment actually undoes the byte swap
//first index of data includes NAK/ACK just like write routines which only return ACK/NAK
//second index of data includes actual byte read back
*ret_hword = swim_rotf( SWIM_HS, operand ); break;
default:
//opcode doesn't exist
return ERR_UNKN_SWIM_OPCODE;
@ -50,9 +64,6 @@ uint8_t swim_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *
}
uint8_t swim_pin;
uint16_t swim_mask;
GPIO_TypeDef *swim_base;
void delay( uint16_t delay )
{
@ -82,7 +93,7 @@ void swim_activate()
//pulse low for 16usec spec says 16usec
//but looking at working programmers they do twice the delays below
pinport_call( CTL_SET_LO_, 0, swim_pin, 0);
delay(16);
delay(3*16);
pinport_call( CTL_SET_HI_, 0, swim_pin, 0);
//toggle high->low T=1msec 4x
@ -91,22 +102,22 @@ void swim_activate()
//TODO move this timed code into a timer to make timing more stable
//between boards, pinport.c code, etc....
#ifdef STM_INL6
delay(719);
delay(3*719);
#endif
#ifdef STM_ADAPTER
delay(720);
delay(3*720);
#endif
pinport_call( CTL_SET_LO_, 0, swim_pin, 0);
delay(718);
delay(3*718);
pinport_call( CTL_SET_HI_, 0, swim_pin, 0);
}
//toggle high->low T=0.5msec 4x
for( i = 0; i < 4; i++) {
//STM adapter 358 = 256usec
delay(356);
delay(3*356);
pinport_call( CTL_SET_LO_, 0, swim_pin, 0);
delay(355);
delay(3*355);
pinport_call( CTL_SET_HI_, 0, swim_pin, 0);
}
@ -137,7 +148,7 @@ void swim_reset()
//pulse low for 16usec spec says 16usec
//but looking at working programmers they do very long resets
pinport_call( CTL_SET_LO_, 0, swim_pin, 0);
delay(16);
delay(3*16);
pinport_call( CTL_SET_HI_, 0, swim_pin, 0);
}
@ -159,6 +170,146 @@ void swim_reset()
#define NO_RESP 0xFF
#define ACK 0x01
#define NAK 0x00
/* Function to get parity of number n. It returns 0
* if n has odd parity, and returns 0xFF if n has even
* parity */
uint16_t append_pairity(uint8_t n)
{
//shift incoming data to upper byte
uint16_t data_pb = (n<<8);
uint8_t parity = 0;
while (n) {
parity = ~parity;
n = n & (n - 1);
}
if ( parity ) {
return (data_pb | 0x80);
} else {
return data_pb;
}
}
/* Desc:read byte from SWIM
* Pre: swim must be activated
* Post:
* Rtn: should return success/error and value read
*/
uint16_t swim_rotf(uint8_t speed, uint16_t addr)
{
uint32_t ack_data = 0;
#ifdef STM_CORE
uint16_t data_pb;
uint32_t spddir_len;
//bit sequence:
//1bit header "0" Host comm
//3bit command b2-1-0 "001" ROTF
//1bit pairity xor of cmd "1"
//1bit ACK "1" or NAK "0" from device
// 0b0_0011
data_pb = 0x3000;
spddir_len = ((SWIM_WR|speed)<<16) | 4; //data + pairity ( '0' header not included)
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write N "number of bytes for ROTF"
data_pb = 0x0180;
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @E extended address of write
//always 0x00 since targetting stm8s003 which only has one section
data_pb = 0x0000;
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @H high address of write
data_pb = append_pairity( addr>>8 );
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @L high address of write
data_pb = append_pairity( addr );
//this is a read xfr because device will output data immediately after
//writting last byte of command info
spddir_len = ((SWIM_RD|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
//read DATA portion of write
//More bytes can be written
//any time NAK is recieved must resend byte
end_swim:
#endif
return ack_data;
}
uint8_t swim_wotf(uint8_t speed, uint16_t addr, uint8_t data)
{
uint32_t ack_data = 0;
#ifdef STM_CORE
uint16_t data_pb;
uint32_t spddir_len;
//bit sequence:
//1bit header "0" Host comm
//3bit command b2-1-0 "010" WOTF
//1bit pairity xor of cmd "1"
//1bit ACK "1" or NAK "0" from device
// 0b0_0101
data_pb = 0x5000;
spddir_len = ((SWIM_WR|speed)<<16) | 4; //data + pairity ( '0' header not included)
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write N "number of bytes for ROTF"
data_pb = 0x0180;
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @E extended address of write
//always 0x00 since targetting stm8s003 which only has one section
data_pb = 0x0000;
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @H high address of write
data_pb = append_pairity( addr>>8 );
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @L high address of write
data_pb = append_pairity( addr );
//writting last byte of command info
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
//DATA portion of write
data_pb = append_pairity( data );
spddir_len = ((SWIM_WR|speed)<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
//More bytes can be written
//any time NAK is recieved must resend byte
end_swim:
#endif
return ack_data;
}
/* Desc:Transfer SWIM bit stream
* Always outputs '0' as first bit for header "from host"
* Will output len number of bits plus one for header
@ -169,10 +320,12 @@ void swim_reset()
* Post:STM8 mcu SWIM active
* Rtn: 0xFF if no response, 0-NAK, 1-ACK.
*/
/*
uint8_t swim_out(uint16_t stream, uint8_t len)//, GPIO_TypeDef *base)
{
//__asm("swim_out_begin:\n\t");
#ifdef STM_CORE
uint8_t return_val;
uint16_t pushpull = swim_base->OTYPER & ~swim_mask;
@ -304,170 +457,8 @@ __asm("stream_end:\n\t");
return NAK;
}
#endif
//made it to here then we got an ACK
return ACK;
}
/* Function to get parity of number n. It returns 0
* if n has odd parity, and returns 0xFF if n has even
* parity */
uint16_t append_pairity(uint8_t n)
{
//shift incoming data to upper byte
uint16_t data_pb = (n<<8);
uint8_t parity = 0;
while (n) {
parity = ~parity;
n = n & (n - 1);
}
if ( parity ) {
return (data_pb | 0x80);
} else {
return data_pb;
}
}
/* Desc:read byte from SWIM
* Pre: swim must be activated
* Post:
* Rtn: should return success/error and value read
*/
//must match swim.s .equ statements!!!
#define SWIM_RD_LS 0x01
#define SWIM_WR_LS 0x02
#define SWIM_RD_HS 0x11
#define SWIM_WR_HS 0x12
uint16_t swim_roft(uint16_t addr)
{
//If >24Mhz SYSCLK, must add wait state to flash
//can also enable prefetch buffer
FLASH->ACR = FLASH_ACR_PRFTBE | 0x0001;
//switch to 48Mhz
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_PLL;
uint16_t data_pb;
uint32_t ack_data;
uint32_t spddir_len;
//bit sequence:
//1bit header "0" Host comm
//3bit command b2-1-0 "001" ROTF
//1bit pairity xor of cmd "1"
//1bit ACK "1" or NAK "0" from device
// 0b0_0011
data_pb = 0x3000;
spddir_len = (SWIM_WR_LS<<16) | 4; //data + pairity ( '0' header not included)
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write N "number of bytes for ROTF"
data_pb = 0x0180;
spddir_len = (SWIM_WR_LS<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @E extended address of write
//always 0x00 since targetting stm8s003 which only has one section
data_pb = 0x0000;
spddir_len = (SWIM_WR_LS<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @H high address of write
data_pb = append_pairity( addr>>8 );
spddir_len = (SWIM_WR_LS<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
if (ack_data != ACK) goto end_swim;
//write @L high address of write
data_pb = append_pairity( addr );
//this is a read xfr because device will output data immediately after
//writting last byte of command info
spddir_len = (SWIM_RD_LS<<16) | 9;
ack_data = swim_xfr( data_pb, spddir_len, swim_base, swim_mask);
//read DATA portion of write
//More bytes can be written
//any time NAK is recieved must resend byte
end_swim:
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSE;
//Don't need wait states or prefetch buffer anymore
FLASH->ACR = 0x0000;
return ack_data;
}
/* Desc:write byte to SWIM
* Pre: swim must be activated
* Post:
* Rtn: 0-NAK, 1-ACK, 0xFF no response
*/
uint8_t swim_woft(uint16_t addr, uint8_t data)
{
uint16_t data_pb;
uint8_t ack;
uint8_t len = 0;
//bit sequence:
//1bit header "0" Host comm
//3bit command b2-1-0 "010" WOTF
//1bit pairity xor of cmd "1"
//1bit ACK "1" or NAK "0" from device
// 0b0_0101
data_pb = 0x5000;
// data_pb = 0x4000; //test wrong pairity
len = 4; //data + pairity ( '0' header not included)
ack = swim_out( data_pb, len);
if (ack == NO_RESP) {
return NO_RESP;
} else if (ack == NAK) {
return NAK;
//wait and resend WOFT command
}
//write N "number of bytes for WOTF"
data_pb = 0x0180;
len = 9;
ack = swim_out( data_pb, len);
if (ack == NO_RESP) return NO_RESP;
//write @E extended address of write
//always 0x00 since targetting stm8s003 which only has one section
data_pb = 0x0000;
len = 9;
ack = swim_out( data_pb, len);
if (ack == NO_RESP) return NO_RESP;
//write @H high address of write
data_pb = append_pairity( addr>>8 );
len = 9;
ack = swim_out( data_pb, len);
if (ack == NO_RESP) return NO_RESP;
//write @L high address of write
data_pb = append_pairity( addr );
len = 9;
ack = swim_out( data_pb, len);
if (ack == NO_RESP) return NO_RESP;
//write DATA portion of write
data_pb = append_pairity( data );
len = 9;
ack = swim_out( data_pb, len);
//More bytes can be written
//any time NAK is recieved must resend byte
return ack;
}
*/

View File

@ -9,12 +9,20 @@ extern uint8_t swim_pin;
extern GPIO_TypeDef *swim_base;
extern uint16_t swim_mask;
//must match swim.s .equ statements!!!
#define SWIM_RD 0x01
#define SWIM_WR 0x02
//#define SWIM_RD_HS 0x11
//#define SWIM_WR_HS 0x12
#define SWIM_LS 0x00
#define SWIM_HS 0x10
uint8_t swim_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
void swim_activate();
void swim_reset();
uint8_t swim_out(uint16_t stream, uint8_t len);
uint16_t swim_roft(uint16_t addr);
uint8_t swim_woft(uint16_t addr, uint8_t data);
//uint8_t swim_out(uint16_t stream, uint8_t len);
uint16_t swim_rotf(uint8_t speed, uint16_t addr);
uint8_t swim_wotf(uint8_t speed, uint16_t addr, uint8_t data);
uint16_t append_pairity(uint8_t n);
//assembly functions from swim.s

BIN
host/inlretro.exe Normal file

Binary file not shown.

View File

@ -59,30 +59,17 @@ local function read_flashID( debug )
dict.pinport("CTL_SET_HI", "SNES_RST")
--read manf ID
rv = dict.snes("SNES_ROM_RD", 0x0000)
if debug then print("attempted read SNES ROM manf ID:", string.format("%X", rv)) end
-- if ( rv[RV_DATA0_IDX] != SST_MANF_ID ) {
-- return GEN_FAIL;
-- //no need for software exit since failed to enter
-- }
--
local manf_id = dict.snes("SNES_ROM_RD", 0x0000)
if debug then print("attempted read SNES ROM manf ID:", string.format("%X", manf_id)) end
--read prod ID
rv = dict.snes("SNES_ROM_RD", 0x0002)
if debug then print("attempted read SNES ROM prod ID:", string.format("%X", rv)) end
rv = dict.snes("SNES_ROM_RD", 0x001C)
if debug then print("attempted read SNES density ID: ", string.format("%X", rv)) end
rv = dict.snes("SNES_ROM_RD", 0x001E)
if debug then print("attempted read SNES boot sect ID:", string.format("%X", rv)) end
-- if ( (rv[RV_DATA0_IDX] == SST_PROD_128)
-- || (rv[RV_DATA0_IDX] == SST_PROD_256)
-- || (rv[RV_DATA0_IDX] == SST_PROD_512) ) {
-- //found expected manf and prod ID
-- flash->manf = SST_MANF_ID;
-- flash->part = rv[RV_DATA0_IDX];
-- flash->wr_dict = DICT_NES;
-- flash->wr_opcode = NES_PPU_WR;
-- }
--
local prod_id = dict.snes("SNES_ROM_RD", 0x0002)
if debug then print("attempted read SNES ROM prod ID:", string.format("%X", prod_id)) end
local density_id = dict.snes("SNES_ROM_RD", 0x001C)
if debug then print("attempted read SNES density ID: ", string.format("%X", density_id)) end
local boot_sect = dict.snes("SNES_ROM_RD", 0x001E)
if debug then print("attempted read SNES boot sect ID:", string.format("%X", boot_sect)) end
--put cart in program mode
dict.pinport("CTL_SET_LO", "SNES_RST")
@ -93,7 +80,12 @@ local function read_flashID( debug )
dict.pinport("CTL_SET_HI", "SNES_RST")
--return true
--return true if detected flash chip
if (manf_id == 0x01 and prod_id == 0x49) then
return true
else
return false
end
end

347
host/scripts/app/swim.lua Normal file
View File

@ -0,0 +1,347 @@
-- create the module's table
local swim = {}
-- import required modules
local dict = require "scripts.app.dict"
--local buffers = require "scripts.app.buffers"
-- file constants
-- firmware assembly return error code definitions
--.equ NO_RESP, 0xFF device didn't appear to respond
--.equ ACK, 0x01 transfer successful
--.equ NAK, 0x00 device couldn't complete operation
--.equ HERR, 0x0E header error
--.equ PERR, 0x09 pairity error
local ECODE = {}
ECODE.NORESP = 0xFF
ECODE.ACK = 0x01
ECODE.NAK = 0x00
ECODE.PERR = 0x0E
ECODE.HERR = 0x09
--local NRESP = 0xFF
--local ACK = 0x01
--local NAK = 0x00
--local PERR = 0x0E
--local HERR = 0x09
local cur_CSR = 0x00
local SWIM_CSR = 0x7F80
-- local functions
local function get_key_for_value( t, value )
for k,v in pairs(t) do
if v==value then
return k
end
end
return nil
end
local function stm8_system_reset()
--if cur_CSR has bit 2 set, SWIM must be reactivated
end
local function reset_swim()
print("resetting SWIM")
dict.swim("SWIM_RESET")
-- wotf(SWIM_CSR, cur_CSR)
--must rewrite current value of SWIM_CSR register as HIGHSPEED is cleared during SWIM RESET
dict.swim("WOTF", SWIM_CSR, cur_CSR)
end
local function rotf(addr, hspeed, num)
local result = ECODE.NAK
local data
local tries = 5
local resets = 3
local opcode = "ROTF"
if hspeed then
opcode = "ROTF_HS"
end
while result ~= "ACK" and tries > 0 do
result, data = dict.swim(opcode, addr)
--convert the value to the key string
result = get_key_for_value( ECODE, result)
print("rotf", string.format(" %X: %X, result ", addr, data), result)
if result == "NORESP" then
reset_swim()
end
tries = tries - 1
if tries == 0 then
print("ERROR max tries exceeded")
reset_swim()
resets = resets - 1
if resets > 0 then
tries = 5
end
end
end
end
local function wotf(addr, data, hspeed, num)
local result = ECODE.NAK
local tries = 5
local resets = 3
local opcode = "WOTF"
if hspeed then
opcode = "WOTF_HS"
end
while result ~= "ACK" and tries > 0 do
result = dict.swim(opcode, addr, data)
result = get_key_for_value( ECODE, result)
print("wotf", string.format(" %X: %X, result ", addr, data), result)
tries = tries - 1
if result == "NORESP" then
reset_swim()
end
if tries == 0 then
print("ERROR max tries exceeded")
reset_swim()
resets = resets - 1
if resets > 0 then
tries = 5
end
end
end
end
local function start()
dict.io("IO_RESET")
dict.io("SNES_INIT")
dict.io("SWIM_INIT", "SWIM_ON_EXP0")
dict.swim("SWIM_ACTIVATE")
--holds SWIM pin low for 16usec+ to reset SWIM comms incase of error
--also verifies that device has SWIM active
dict.swim("SWIM_RESET")
--write 0A0h to SWIM_CSR
--bit 5: allows entire memory range to be read & swim reset to be accessed
--bit 7: masks internal reset sources (like WDT..?)
--print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
-- print("wotf SWIM_CSR:", dict.swim("WOTF", 0x7F80, 0xA0))
cur_CSR = 0xA0
wotf(SWIM_CSR, cur_CSR)
--print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
--read SWIM_CSR
--dict.swim("SWIM_RESET")
--print("wotf SRST:", dict.swim("SWIM_SRST"))
--print("wotf SWIM_CSR:", dict.swim("WOTF", 0x7F80, 0xA0))
--now the SRST command is available, whole memory range available, and internal resets disabled
--by default there is now a breakpoint set at reset vector
--reset the STM8 core
print("wotf SRST:", dict.swim("SWIM_SRST"))
--the STM8 core is now stalled @ reset vector
--can read/write to any address on STM8 core
--if CIC ROP bit is set, we can only r/w to periph & SRAM
--bit 2: SWIM is reset (exits active mode) when chip reset
--this forces successful SWIM entry on each execution of script
-- print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
--print("wotf SWIM_CSR:", dict.swim("WOTF", 0x7F80, 0xA4))
-- cur_CSR = cur_CSR | 0x04
-- wotf(SWIM_CSR, cur_CSR)
-- print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
wotf(0x0000, 0x00)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
rotf(0x0000)
print("switch to HS")
--bit 4: SWIM HIGH SPEED (set for high speed) SWIM RESET will set back to low speed
--print("wotf SWIM_CSR:", dict.swim("WOTF", 0x7F80, 0xB4))
cur_CSR = cur_CSR | 0x10
wotf(SWIM_CSR, cur_CSR)
-- print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF_HS", 0x7F80)))
--print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF_HS", 0x7F80)))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x8028)))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x8029)))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x802A)))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x802B)))
--print("wotf :", dict.swim("WOTF_HS", 0x8028, 0x49))
--print("wotf :", dict.swim("WOTF_HS", 0x8029, 0x4E))
--print("wotf :", dict.swim("WOTF_HS", 0x802A, 0x4C))
--print("wotf :", dict.swim("WOTF_HS", 0x802B, 0x20))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x8028)))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x8029)))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x802A)))
--print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x802B)))
--read then write to SRAM
-- print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x0000)))
--print("wotf :", dict.swim("WOTF_HS", 0x0000, 0x00))
--high speed now, enable flag with true
wotf(0x0000, 0x00, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
rotf(0x0000, true)
wotf(0x0000, 0xEE, true)
rotf(0x0000, true)
wotf(0x0000, 0xAA, true)
rotf(0x0000, true)
wotf(0x0000, 0x55, true)
rotf(0x0000, true)
-- print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x0000)))
--read then write to eeprom
-- print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x4000)))
--
-- --need to unlock the eeprom first!
-- --Write 0xAE then 56h in
-- --FLASH_DUKR (0x00 5064)(1)(2)
-- print("wotf :", dict.swim("WOTF_HS", 0x5064, 0xAE))
-- print("wotf :", dict.swim("WOTF_HS", 0x5064, 0x56))
-- --write data
-- print("wotf :", dict.swim("WOTF_HS", 0x4000, 0x00))
--
-- --lock eeprom
-- --Reset bit 3 (DUL)
-- --in FLASH_IAPSR (0x00 505F)
-- print("wotf :", dict.swim("WOTF_HS", 0x505F, 0x00))
--
-- print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x4000)))
--read then write to flash
-- print("rotf :", string.format("%X %X", dict.swim("ROTF_HS", 0x8028)))
--need to unlock the flash first!
--Write 0x56 then 0xAE in
--FLASH_PUKR (0x00 5062)(3)
-- print("wotf :", dict.swim("WOTF_HS", 0x5062, 0x56))
-- print("wotf :", dict.swim("WOTF_HS", 0x5062, 0xAE))
-- --write data
-- byte = 0x8028
-- data = 0x12
-- while byte < 0x8030 do
-- while (dict.swim("WOTF_HS", byte, data) ~= 1) do
-- print("woft nak ", byte)
-- end
--
-- byte = byte + 1
-- data = data + 0x11
--
-- end
-- print("wotf 28:", dict.swim("WOTF_HS", 0x8028, 0xEE))
-- print("wotf 29:", dict.swim("WOTF_HS", 0x8029, 0x11))
-- print("wotf 2A:", dict.swim("WOTF_HS", 0x802A, 0x22))
-- print("wotf 2B:", dict.swim("WOTF_HS", 0x802B, 0x33))
-- print("wotf 2C:", dict.swim("WOTF_HS", 0x802C, 0x44))
-- print("wotf 2D:", dict.swim("WOTF_HS", 0x802D, 0x55))
-- print("wotf 2E:", dict.swim("WOTF_HS", 0x802E, 0x66))
-- print("wotf 2F:", dict.swim("WOTF_HS", 0x802F, 0x77))
--lock flash
--Reset bit 1 (PUL)
-- --in FLASH_IAPSR (0x00 505F)
-- print("wotf :", dict.swim("WOTF_HS", 0x505F, 0x00))
--
-- print("rotf 28 :", string.format("%X %X", dict.swim("ROTF_HS", 0x8028)))
-- print("rotf 29 :", string.format("%X %X", dict.swim("ROTF_HS", 0x8029)))
-- print("rotf 2A :", string.format("%X %X", dict.swim("ROTF_HS", 0x802A)))
-- print("rotf 2B :", string.format("%X %X", dict.swim("ROTF_HS", 0x802B)))
-- print("rotf 2C :", string.format("%X %X", dict.swim("ROTF_HS", 0x802C)))
-- print("rotf 2D :", string.format("%X %X", dict.swim("ROTF_HS", 0x802D)))
-- print("rotf 2E :", string.format("%X %X", dict.swim("ROTF_HS", 0x802E)))
-- print("rotf 2F :", string.format("%X %X", dict.swim("ROTF_HS", 0x802F)))
--
--
-- --print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
--print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
--print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
--print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
--print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
--test by blinking LED via periph register access
--v2 board has LED on hi_lo_sel PA2
-- print("wotf LED PA_CR1:", dict.swim("WOTF", 0x5003, 0xFF)) --default is input w/o pullup, now pullups enabled
-- --LED should be dimly lit
-- --set pin to pushpull
-- print("wotf LED PA_DDR:", dict.swim("WOTF", 0x5002, 0x04)) --PA2 is output CR1 set above makes pushpull
-- --LED is push/pull, ODR default to 0, so LED OFF
-- print("wotf LED PA_ODR:", dict.swim("WOTF", 0x5000, 0x04)) --PA2 output set LED ON!
-- print("wotf LED PA_ODR:", dict.swim("WOTF", 0x5000, 0x00)) --PA2 output set LED OFF!
--HIGH SPEED
print("wotf LED PA_CR1:", dict.swim("WOTF_HS", 0x5003, 0xFF)) --default is input w/o pullup, now pullups enabled
--LED should be dimly lit
--set pin to pushpull
print("wotf LED PA_DDR:", dict.swim("WOTF_HS", 0x5002, 0x04)) --PA2 is output CR1 set above makes pushpull
--LED is push/pull, ODR default to 0, so LED OFF
print("wotf LED PA_ODR:", dict.swim("WOTF_HS", 0x5000, 0x04)) --PA2 output set LED ON!
print("wotf LED PA_ODR:", dict.swim("WOTF_HS", 0x5000, 0x00)) --PA2 output set LED OFF!
--holds SWIM pin low for 16usec+ to reset SWIM comms incase of error
-- dict.swim("SWIM_RESET")
--reset the chip, if bit2 set in CSR the SWIM exits active mode with this reset
-- print("wotf SRST:", dict.swim("SWIM_SRST"))
--SWIM is now inactive chip is executing it's program code
--indicate to logic analyzer that test sequence above is complete
-- dict.pinport("CTL_SET_LO", "EXP0")
dict.io("IO_RESET")
end
-- global variables so other modules can use them
-- call functions desired to run when script is called/imported
-- functions other modules are able to call
swim.start = start
swim.wotf = wotf
swim.rotf = rotf
-- return the module's table
return swim

View File

@ -12,6 +12,8 @@ function main ()
local dump = require "scripts.app.dump"
local erase = require "scripts.app.erase"
local flash = require "scripts.app.flash"
local swim = require "scripts.app.swim"
-- local crc32 = require "scripts.app.crc32"
local rv
-- rv = dict.pinport( "CTL_ENABLE" )
@ -32,72 +34,13 @@ function main ()
-- print(dict.io("EXP0_PULLUP_TEST"))
--
dict.io("IO_RESET")
dict.io("SNES_INIT")
dict.io("SWIM_INIT", "SWIM_ON_EXP0")
dict.swim("SWIM_ACTIVATE")
--holds SWIM pin low for 16usec+ to reset SWIM comms incase of error
dict.swim("SWIM_RESET")
--write 0A0h to SWIM_CSR
--bit 5: allows entire memory range to be read & swim reset to be accessed
--bit 7: masks internal reset sources (like WDT..?)
print("wotf SWIM_CSR:", dict.swim("WOTF", 0x7F80, 0xA0))
--read SWIM_CSR
print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
print("rotf SWIM_CSR:", string.format("%X %X", dict.swim("ROTF", 0x7F80)))
dict.swim("SWIM_RESET")
print("wotf SRST:", dict.swim("SWIM_SRST"))
print("wotf SWIM_CSR:", dict.swim("WOTF", 0x7F80, 0xA0))
--now the SRST command is available, whole memory range available, and internal resets disabled
--by default there is now a breakpoint set at reset vector
--reset the STM8 core
print("wotf SRST:", dict.swim("SWIM_SRST"))
--the STM8 core is now stalled @ reset vector
--can read/write to any address on STM8 core
--if CIC ROP bit is set, we can only r/w to periph & SRAM
--bit 2: SWIM is reset (exits active mode) when chip reset
--this forces successful SWIM entry on each execution of script
print("wotf SWIM_CSR:", dict.swim("WOTF", 0x7F80, 0xA4))
--test by blinking LED via periph register access
--v2 board has LED on hi_lo_sel PA2
print("wotf LED PA_CR1:", dict.swim("WOTF", 0x5003, 0xFF)) --default is input w/o pullup, now pullups enabled
--LED should be dimly lit
--set pin to pushpull
print("wotf LED PA_DDR:", dict.swim("WOTF", 0x5002, 0x04)) --PA2 is output CR1 set above makes pushpull
--LED is push/pull, ODR default to 0, so LED OFF
print("wotf LED PA_ODR:", dict.swim("WOTF", 0x5000, 0x04)) --PA2 output set LED ON!
print("wotf LED PA_ODR:", dict.swim("WOTF", 0x5000, 0x00)) --PA2 output set LED OFF!
--holds SWIM pin low for 16usec+ to reset SWIM comms incase of error
dict.swim("SWIM_RESET")
--reset the chip, if bit2 set in CSR the SWIM exits active mode with this reset
print("wotf SRST:", dict.swim("SWIM_SRST"))
--SWIM is now inactive chip is executing it's program code
--indicate to logic analyzer that test sequence above is complete
dict.pinport("CTL_SET_LO", "EXP0")
dict.io("IO_RESET")
-- debug = true
-- rv = cart.detect(debug)
local force_cart = true
-- local force_cart = true
-- cart_console = "SNES"
if (force_cart or cart.detect_console(true)) then
if cart_console == "NES" or cart_console == "Famicom" then
@ -134,7 +77,7 @@ function main ()
erase.erase_nes( true )
--open file
local file
file = assert(io.open("flash.bin", "rb"))
file = assert(io.open("inltest.bin", "rb"))
--determine if auto-doubling, deinterleaving, etc,
--needs done to make board compatible with rom
--flash cart
@ -156,6 +99,9 @@ function main ()
dict.io("IO_RESET")
elseif cart_console == "SNES" then
swim.start()
dict.io("IO_RESET")
dict.io("SNES_INIT")
@ -166,16 +112,38 @@ function main ()
--SNES detect if there's save ram and size
--SNES detect if able to read flash ID's
snes.read_flashID(true)
if not snes.read_flashID(true) then
print("ERROR unable to read flash ID")
return
end
--quick lame check to see if chip erased
if snes.read_reset_vector(0, true) ~= 0xFFFF then
erase.erase_snes( false )
end
if snes.read_reset_vector(1, true) ~= 0xFFFF then
erase.erase_snes( false )
end
if snes.read_reset_vector(20, true) ~= 0xFFFF then
erase.erase_snes( false )
end
if snes.read_reset_vector(63, true) ~= 0xFFFF then
erase.erase_snes( false )
end
--FLASHING:
--erase cart
-- erase.erase_snes( false )
-- erase.erase_snes( false )
--open file
local file
file = assert(io.open("flash.bin", "rb"))
-- file = assert(io.open("flash.bin", "rb"))
file = assert(io.open("SF2_PTdump_capcomFINAL.bin", "rb"))
--calculate checksum
--local data = file:read("*all")
--print(crc32.hash(data))
--determine if auto-doubling, deinterleaving, etc,
--needs done to make board compatible with rom
--flash cart
@ -195,7 +163,7 @@ function main ()
--trick to do this at end while debugging so don't have to wait for it before starting
-- erase.erase_snes( false )
erase.erase_snes( false )
dict.io("IO_RESET")

View File

@ -147,7 +147,7 @@ libusb_device_handle * open_usb_device( libusb_context *context, int log_level )
//Getting here means the device was opened because it matched V-USB
//VID/PID, but it wasn't a compatible device.
//Can't use this device, so close it
if (log_level>0) printf("VID/PID matched, but manf/prod didn't match, closing device\n");
if (log_level>0) printf("VID/PID matched, but manf/prod didn't match, closing device.\n It's likely that the drivers haven't been installed...\n");
libusb_close(handle);
handle = NULL; //Don't want to try and reclose
}

View File

@ -29,6 +29,7 @@
#define SWIM_SRST 2 //reset device RL=3 (error, len, NAK/ACK)
#define ROTF 0x11 //read on the fly only one byte RL=4 (usberror, len, swimerror, data)
#define ROTF_HS 0x12 //RL=4
//#define ROTF_8B 0x18 //read on the fly RL=8
//#define ROTF_128B 0x1F //read on the fly RL=128 (current max due to 254B limit)
@ -36,6 +37,7 @@
//operand = address (extended addr always 0)
//miscdata = data to write @ address
#define WOTF 0x21 //RL=3 (error code, data len, 0-NAK 1-ACK)
#define WOTF_HS 0x22 //RL=3
//#define WOTF_8B 0x28 //write 8Bytes on the fly
//#define WOTF_128B 0x2F //write 128Bytes on the fly