copy to do direct boot ROM bugfixes
authorDan White <dan@whiteaudio.com>
Thu, 25 Apr 2013 20:20:15 +0000 (15:20 -0500)
committerDan White <dan@whiteaudio.com>
Thu, 25 Apr 2013 20:20:15 +0000 (15:20 -0500)
rom-bugfix.asm [new file with mode: 0644]

diff --git a/rom-bugfix.asm b/rom-bugfix.asm
new file mode 100644 (file)
index 0000000..e23e554
--- /dev/null
@@ -0,0 +1,2153 @@
+Symbol Table:
+  PC_AFTER_RESET: 0x3000
+  CRCDI: 0x0000
+  CRCDI_L: 0x0000
+  CRCDI_H: 0x0001
+  CRCDIRB: 0x0002
+  CRCDIRB_L: 0x0002
+  CRCDIRB_H: 0x0002
+  CRCINIRES: 0x0004
+  CRCINIRES_L: 0x0004
+  CRCINIRES_L: 0x0005
+  CRCRESR: 0x0006
+  CRCRESR_L: 0x0006
+  CRCRESR_L: 0x0007
+  MPY: 0x0130
+  MPYS: 0x0132
+  MAC: 0x0134
+  MACS: 0x0136
+  OP2: 0x0138
+  RESLO: 0x013a
+  RESHI: 0x013c
+  SUMEXT: 0x013e
+  AES_CR: 0x0400
+  AES_SR: 0x0402
+  AES_STATE: 0x0410
+  AES_STATE_SIZE: 0x0010
+  AES_KEY: 0x0700
+  AES_KEY_SIZE: 0x0020
+  AES_EXPKEY: 0x0720
+  AES_EXPKEY_SIZE: 0x00e0
+  PADSR: 0x1a00
+  PBDSR: 0x1a02
+  PAOEN: 0x1a04
+  PBOEN: 0x1a06
+  PAOUT: 0x1a08
+  PBOUT: 0x1a0a
+  PAPER: 0x1a0c
+  PBPER: 0x1a0e
+  PAIER: 0x1a10
+  PBIER: 0x1a12
+  PAIMR: 0x1a14
+  PBIMR: 0x1a16
+  PAPUE: 0x1a18
+  PBPUE: 0x1a1a
+  PBTSD: 0x1a1c
+  PBPSR: 0x1a1e
+  PAOCEN: 0x1a20
+  PAOCEN: 0x1a22
+  TMR0_CR: 0x1c00
+  TMR0_SR: 0x1c02
+  TMR0_CNT: 0x1c04
+  TMR0_RA: 0x1c06
+  TMR0_RB: 0x1c08
+  TMR0_RC: 0x1c0a
+  TMR0_CAP0: 0x1c0c
+  TMR0_CAP1: 0x1c0e
+  TMR1_CR: 0x1c10
+  TMR1_SR: 0x1c12
+  TMR1_CNT: 0x1c14
+  TMR1_RA: 0x1c16
+  TMR1_RB: 0x1c18
+  TMR1_RC: 0x1c1a
+  TMR1_CAP0: 0x1c1c
+  TMR1_CAP1: 0x1c1e
+  TMR2_CR: 0x1e00
+  TMR2_SR: 0x1e02
+  TMR2_CNT: 0x1e04
+  TMR2_RA: 0x1e06
+  TMR2_RB: 0x1e08
+  TMR2_RC: 0x1e0a
+  TMR2_CAP0: 0x1e0c
+  TMR2_CAP1: 0x1e0e
+  TMR3_CR: 0x1e10
+  TMR3_SR: 0x1e12
+  TMR3_CNT: 0x1e14
+  TMR3_RA: 0x1e16
+  TMR3_RB: 0x1e18
+  TMR3_RC: 0x1e1a
+  TMR3_CAP0: 0x1e1c
+  TMR3_CAP1: 0x1e1e
+  SPI0_CR: 0x2000
+  SPI0_RDR: 0x2002
+  SPI0_TDR: 0x2004
+  SPI0_SR: 0x2006
+  SPI1_CR: 0x2008
+  SPI1_RDR: 0x200a
+  SPI1_TDR: 0x200c
+  SPI1_SR: 0x200e
+  UART0_CR: 0x2200
+  UART0_BCR: 0x2202
+  UART0_SR: 0x2204
+  UART0_RDR: 0x2206
+  UART0_TDR: 0x2208
+  UART1_CR: 0x2210
+  UART1_BCR: 0x2212
+  UART1_SR: 0x2214
+  UART1_RDR: 0x2216
+  UART1_TDR: 0x2218
+  ADC_CR: 0x2400
+  GPIN0: 0x2402
+  GPIN1: 0x2404
+  GPOUT0: 0x2406
+  GPOUT1: 0x2408
+  GPOUT2: 0x240a
+  GPOUT3: 0x240c
+  I2CM_CR: 0x2a00
+  I2CM_TCFG: 0x2a02
+  I2CM_SR: 0x2a04
+  I2CM_WCR: 0x2a06
+  I2CM_TDR_ST: 0x2a08
+  I2CM_TDR: 0x2a0a
+  I2CM_TDR_SP: 0x2a0c
+  I2CM_RDR: 0x2a0e
+  I2CS_CR: 0x2a10
+  I2CS_SR: 0x2a12
+  I2CS_TDR: 0x2a14
+  I2CS_RDR: 0x2a16
+  ROMStart: 0x3000
+  ROMSize: 0x0800
+  RAMStart: 0x4000
+  RAMSize: 0xc000
+
+
+RAM_global_variables:
+  pageAdr: 0x4006
+  commandmode: 0x400a
+  length: 0x400e
+  readLineInProgress: 0x4010
+  line[64]: 0x4012
+
+  __bss_start: 0x403f
+  crc: 0x4052
+  end: 0x446e
+  ringBufferIn: 0x4470
+  ringBufferOut: 0x4478
+  outRingBuffer[256]: 0x447a
+  error: 0x457a
+  packetNum: 0x4a96
+  pageD[256]: 0x4a9a
+  start: 0x4b9a
+  __bss_end: 0x4b9f
+
+rom.hex:     file format ihex
+
+
+Disassembly of section .sec1:
+
+00003000 <.sec1>:
+;setup stack pointer to end of RAM
+    3000:       31 40 b0 ff     mov     #-80,sp ;#0xffb0
+
+;set PA(0) = 0 and enable output
+;(should be) wired to flash /CS pin
+    3004:       92 43 08 1a     mov     #1,     &PAOUT  ;r3 As==01
+    3008:       82 43 0a 1a     mov     #0,     &PBOUT  ;r3 As==00
+    300c:       92 43 04 1a     mov     #1,     &PAOEN  ;r3 As==01
+    3010:       b2 40 00 80     mov     #-32768,&PBOEN  ;#0x8000
+    3014:       06 1a 
+
+;enable peripherals:
+; MISO0
+; MOSI0
+; SCLK0
+    3016:       b2 40 0e 00     mov     #14,    &PAPER  ;#0x000e
+    301a:       0c 1a 
+    301c:       0e 43           clr     r14             
+
+;check PA(8), setup oscillator
+; NOT CONTROLLING FABBED HARDWARE
+    301e:       b2 b0 00 01     bit     #256,   &PADSR  ;#0x0100
+    3022:       00 1a 
+    3024:       04 24           jz      $+10            ;abs 0x302e
+    3026:       1e 43           mov     #1,     r14     ;r3 As==01
+;from above
+; effect here is GPOUT0 = 0x00ca
+    3028:       b2 40 ca 00     mov     #202,   &0x2416 ;#0x00ca
+    302c:       16 24 
+
+;enable SPI0
+; set CPOL,CPHA = 1,1
+; 8-bit transfers
+    302e:       b2 40 70 00     mov     #112,   &SPI0_CR        ;#0x0070
+    3032:       00 20 
+;bring flash /CS pin low
+    3034:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+;release flash from deep sleep
+    3038:       b2 40 00 ab     mov     #-21760,&SPI0_TDR       ;#0xab00
+    303c:       04 20 
+; wait until command done sending
+    303e:       a2 b3 06 20     bit     #2,     &SPI0_SR        ;r3 As==10
+    3042:       fd 27           jz      $-4             ;abs 0x303e
+;now use 16-bit transfers
+    3044:       b2 40 f0 00     mov     #240,   &SPI0_CR        ;#0x00f0
+    3048:       00 20 
+;de-select flash /CS
+    304a:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+
+;check RAM for errors
+;writes error count to 0x263e
+;address is not present in fabbed mmap
+; r9 is not modified later in bootcode
+;  (to read count later in early user code)
+;  all function calls push/pop r9
+;  user code may initially read r9 to get the RAM error count
+    304e:       09 43           clr     r9              
+    3050:       35 40 aa aa     mov     #-21846,r5      ;#0xaaaa
+    3054:       37 40 00 40     mov     #16384, r7      ;#RAMStart
+    3058:       38 40 00 60     mov     #24576, r8      ;#0x6000
+    305c:       18 83           dec     r8              
+    305e:       c8 1e 07 45     .rpt    r8
+                                movx    r5,     r7      
+    3062:       38 c0 0f 00     bic     #15,    r8      ;#0x000f
+    3066:       08 93           tst     r8              
+    3068:       f9 23           jnz     $-12            ;abs 0x305c
+    306a:       37 40 00 40     mov     #16384, r7      ;#RAMStart
+    306e:       38 40 00 60     mov     #24576, r8      ;#0x6000
+    3072:       0b 45           mov     r5,     r11     
+    3074:       5b 0e           rlam    #4,     r11     
+    3076:       0a 43           clr     r10             
+    3078:       18 83           dec     r8              
+    307a:       c8 18 3a 57     addx    @r7+,   r10     
+    307e:       0b 9a           cmp     r10,    r11     
+    3080:       01 24           jz      $+4             ;abs 0x3084
+    3082:       19 53           inc     r9              
+    3084:       38 c0 0f 00     bic     #15,    r8      ;#0x000f
+    3088:       08 93           tst     r8              
+    308a:       f5 23           jnz     $-20            ;abs 0x3076
+    308c:       35 93           cmp     #-1,    r5      ;r3 As==11
+    308e:       08 24           jz      $+18            ;abs 0x30a0
+    3090:       35 90 55 55     cmp     #21845, r5      ;#0x5555
+    3094:       03 24           jz      $+8             ;abs 0x309c
+    3096:       35 40 55 55     mov     #21845, r5      ;#0x5555
+    309a:       dc 3f           jmp     $-70            ;abs 0x3054
+    309c:       35 43           mov     #-1,    r5      ;r3 As==11
+    309e:       da 3f           jmp     $-74            ;abs 0x3054
+    30a0:       82 49 3e 26     mov     r9,     &0x263e 
+
+;check state of PA(7)
+; PA.7 low -> invoke bootstrap loader
+; PA.7 high -> copy code from flash
+    30a4:       b2 b0 80 00     bit     #128,   &PADSR  ;#0x0080
+    30a8:       00 1a 
+    30aa:       4e 24           jz      $+158   ;#gotoMain    ;abs 0x3148
+
+CopyFromFlash:
+;setup CRC
+    30ac:       82 43 04 00     mov     #0,     &CRCINIRES    ;r3 As==00
+;no effect, port B is NC
+    30b0:       82 43 0a 1a     mov     #0,     &PBOUT  ;r3 As==00
+    30b4:       b2 40 00 80     mov     #-32768,&PBOEN  ;#0x8000
+    30b8:       06 1a 
+;check state of PA.9 (aka I2C SCL)
+;r13 holds the flag
+; PA.9 low -> do not byteswap
+; PA.9 high -> byteswap words from flash
+    30ba:       0d 43           clr     r13             
+    30bc:       b2 b0 00 02     bit     #512,   &PADSR  ;#0x0200
+    30c0:       00 1a 
+    30c2:       01 24           jz      $+4             ;abs 0x30c6
+    30c4:       1d 43           mov     #1,     r13     ;r3 As==01
+;no effect, port B is NC
+    30c6:       82 43 06 1a     mov     #0,     &PBOEN  ;r3 As==00
+;r7 holds start of RAM address
+;r8 (end of RAM)+1
+    30ca:       37 40 00 40     mov     #16384, r7      ;#RAMStart
+    30ce:       88 01 00 00     mova    #0x10000,r8     
+;select flash /CS line
+    30d2:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+;flash command 0x03 - read data bytes
+;                00 - address MSB
+;                r7 - address low word (=RAMStart)
+    30d6:       b2 40 00 03     mov     #768,   &SPI0_TDR       ;#0x0300
+    30da:       04 20 
+    30dc:       82 47 04 20     mov     r7,     &SPI0_TDR       
+;wait for transmissions to finish
+    30e0:       92 b3 06 20     bit     #1,     &SPI0_SR        ;r3 As==01
+    30e4:       fd 27           jz      $-4             ;abs 0x30e0
+;send 0x0000 to flash
+    30e6:       82 43 04 20     mov     #0,     &SPI0_TDR       ;r3 As==00
+    30ea:       92 b3 06 20     bit     #1,     &SPI0_SR        ;r3 As==01
+    30ee:       fd 27           jz      $-4             ;abs 0x30ea
+;send second 0x0000 to flash
+    30f0:       82 43 04 20     mov     #0,     &SPI0_TDR       ;r3 As==00
+;clear status register (any r/w does so)
+    30f4:       82 43 06 20     mov     #0,     &SPI0_SR        ;r3 As==00
+
+MainLoop1:
+;wait for return word
+    30f8:       a2 b2 06 20     bit     #4,     &SPI0_SR        ;r2 As==10
+    30fc:       fd 27           jz      $-4             ;abs 0x30f8
+;store received word
+    30fe:       15 42 02 20     mov     &SPI0_RDR,r5    
+;send another 0x0000 to SPI
+    3102:       82 43 04 20     mov     #0,     &SPI0_TDR       ;r3 As==00
+;?swap bytes?
+    3106:       0d 93           tst     r13             
+    3108:       01 24           jz      $+4     ;#SPINoSwap        ;abs 0x310c
+    310a:       85 10           swpb    r5              
+SPINoSwap:
+;copy received word to RAM address in r7 (ini=RAMStart)
+    310c:       87 45 00 00     mov     r5,     0(r7)   ;CRCDI_L(r7)
+;compute CRC of data
+;increment r7
+    3110:       b2 47 00 00     mov     @r7+,   &CRCDI        
+;?reached end of RAM?
+    3114:       d8 07           cmpa    r7,     r8      
+    3116:       f0 23           jnz     $-30    ;#MainLoop1     ;abs 0x30f8
+
+;wait for last transmission to finish
+    3118:       a2 b3 06 20     bit     #2,     &SPI0_SR        ;r3 As==10
+    311c:       fd 27           jz      $-4             ;abs 0x3118
+;deselect flash /CS line
+    311e:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+
+;enable SPI0
+; set CPOL,CPHA = 1,1
+; 8-bit transfers
+    3122:       b2 40 70 00     mov     #112,   &SPI0_CR        ;#0x0070
+    3126:       00 20 
+;select flash /CS line
+    3128:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+;flash command: deep power down
+    312c:       b2 40 00 b9     mov     #-18176,&SPI0_TDR       ;#0xb900
+    3130:       04 20 
+;wait for completion
+;deselect flash /CS line
+    3132:       a2 b3 06 20     bit     #2,     &SPI0_SR        ;r3 As==10
+    3136:       fd 27           jz      $-4             ;abs 0x3132
+    3138:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+
+;disable PA peripherals
+    313c:       82 43 0c 1a     mov     #0,     &PAPER  ;r3 As==00
+;disable PA output drivers
+    3140:       82 43 04 1a     mov     #0,     &PAOEN  ;r3 As==00
+;execute user code starting at address pointed to by 0xfffe
+    3144:       10 42 fe ff     br      &0xfffe 
+
+
+
+;-----------------------------------------------------------------------
+; Bootloader through UART0
+gotoMain:
+;disable PB output drivers (none fabbed)
+    3148:       82 43 06 1a     mov     #0,     &PBOEN  ;r3 As==00
+;r14 is state of PA.8
+    314c:       0e 93           tst     r14             
+    314e:       04 20           jnz     $+10            ;abs 0x3158
+; PA.8 = 0
+;  orig intention: set CG_SR = 0x2004
+;  effect here: GPIN0 = 0x2004 (writes have no effect)
+    3150:       b0 40 04 20     mov     #8196,  0xf2ac  ;#SPI0_TDR, PC rel. 0x02402
+    3154:       ac f2 
+    3156:       03 3c           jmp     $+8             ;abs 0x315e
+; PA.8 = 1
+;  orig intention: set CG_SR = 0x2008
+;  effect here: GPIN0 = 0x2008 (writes have no effect)
+    3158:       b0 40 08 20     mov     #8200,  0xf2a4  ;#SPI1_CR, PC rel. 0x02402
+    315c:       a4 f2 
+;set SCG1 = 1
+    315e:       32 d0 80 00     bis     #128,sr ;#0x0080
+; FIXME: ^^^ BUG ^^^ BUG ^^^ BUG ^^^ BUG ^^^ BUG ^^^ BUG ^^^
+; *** IN FABBED CHIP: ***
+; this makes SCG[1:0] = 10b
+; SCG0 = 0 **selects** the HF crystal
+; SCG1 = 1 **disables** the HF crystal oscillator
+;          by stopping the inverter FB loop.
+;          The crystal output will likely continue for a few cycles,
+;          depending on the trail-off of the tank.
+; The tank will NOT oscillate long enough to continue execution to a point
+; where SCG[1:0] can be written to again.
+;
+; Options:
+;  a) Directly drive the HFXTAL PI pin externally.
+;  b) Couple the LFXTAL to the PI pin weakly to drive enough to switch.
+;       May not be fast enough for UART0 baud rate-setting code operation.
+;  c) ???
+
+Assembly_Code:
+    3162:       b2 40 8e 34     mov     #UART_ISR, &0xffea ;#0x348e
+    3166:       ea ff 
+    3168:       b2 40 da 33     mov     #TMR0_INT, &0xfff0 ;#0x33da
+    316c:       f0 ff 
+    316e:       30 40 d2 31     br      #main ;#0x31d2 
+
+
+
+init:
+    3172:       7c 46           mov.b   @r6+,   r12     
+    3174:       54 40 3f 40     mov.b   __bss_start, r4 ;0x403f, r4   ;PC rel. 0x071b7
+    3178:       00 40           brpc            
+;   3176:       3f 40 00 40     mov #16384, r15
+    317a:       8f 43 00 00     mov     #0,     0(r15)  ;r3 As==00, CRCDI_L(r15)
+    317e:       2f 53           incd    r15             
+    3180:       3f 90 9f 4b     cmp     #19359, r15     ;#0x4b9f
+    3184:       fa 2b           jnc     $-10            ;abs 0x317a
+    3186:       92 43 9a 4b     mov     #1,     &start  ;&0x4b9a ;r3 As==01
+    318a:       92 43 96 4a     mov     #1,     &packetNum ;&0x4a96 ;r3 As==01
+    318e:       30 41           ret                     
+
+string0:
+; "\nSend via XMODEM (CRC or 1K) the extended hex file to program.\n>"
+    3190:       0a 53
+    3192:       65 6e
+    3194:       64 20
+    3196:       76 69
+    3198:       61 20
+    319a:       58 4d
+    319c:       4f 44
+    319e:       45 4d
+    31a0:       20 28
+    31a2:       43 52
+    31a4:       43 20
+    31a6:       6f 72
+    31a8:       20 31
+    31aa:       4b 29
+    31ac:       20 74
+    31ae:       68 65
+    31b0:       20 65
+    31b2:       78 74
+    31b4:       65 6e
+    31b6:       64 65
+    31b8:       64 20
+    31ba:       68 65
+    31bc:       78 20
+    31be:       66 69
+    31c0:       6c 65
+    31c2:       20 74
+    31c4:       6f 20
+    31c6:       70 72
+    31c8:       6f 67
+    31ca:       72 61
+    31cc:       6d 2e
+    31ce:       0a 3e
+    31d0:       00 00
+
+
+;-----------------------------------------------------------------------
+main:
+;setup stack pointer
+    31d2:       31 40 00 c0     mov     #-16384,sp       ;#RAMSize
+    31d6:       31 40 b0 ff     mov     #-80,sp ;#0xffb0
+
+;PAPER = 0000 0000 0011 1110
+; PA(1) - MISO0
+; PA(2) - MOSI0
+; PA(3) - SCLK0
+; PA(4) - TXD0
+; PA(5) - RXD0
+    31da:       b2 40 3e 00     mov     #62,    &PAPER  ;#0x003e
+    31de:       0c 1a 
+    31e0:       b0 12 76 31     call    #0x3176 
+; FIXME: ^^^ BUG ^^^ BUG ^^^ BUG ^^^ BUG ^^^ BUG ^^^ BUG ^^^
+; *** IN FABBED CHIP: ***
+; The call to #0x3176 should be init() or #0x3172.
+; As-is, this jumps into the middle of a 3-word instruction within init().
+; -> Death by foot-shooting.
+
+;setup SPI0
+; SPI_En = 1
+; CPOL = 1 ;clock inactive high
+; CPHA = 1 ;changed on lead edge, sampled next
+; DL = 0 ;8b data
+    31e4:       b2 40 70 00     mov     #112,   &SPI0_CR        ;#0x0070
+    31e8:       00 20 
+
+;setup UART0 baudrate
+; 'send a space character (0x20)
+    31ea:       b0 12 2e 32     call    #timeSetup ;#0x322e 
+    31ee:       82 4f 02 22     mov     r15,    &UART0_BCR      
+;enable UART0
+;enable receive reg full interrupt
+    31f2:       b2 40 84 00     mov     #132,   &UART0_CR       ;#0x0084
+    31f6:       00 22 
+    31f8:       32 d2           eint                    
+
+;PrintString("\nSend via XMODEM (CRC or 1K) the extended hex file to program.\n>");
+    31fa:       3f 40 90 31     mov     #string0, r15     ;#0x3190
+    31fe:       b0 12 ea 32     call    #PrintString ;#0x32ea 
+
+;set timer0 prescale = clk/1024
+    3202:       b2 40 00 0a     mov     #2560,  &TMR0_SR        ;#0x0a00
+    3206:       02 1c 
+
+;??? watchdog timer ???
+;enable RC compare interrupt
+;cap1,2 capture enable
+    3208:       b2 40 c4 00     mov     #196,   &TMR0_CR        ;#0x00c4
+    320c:       00 1c 
+;TMR0_RC = 50000
+    320e:       b2 40 50 c3     mov     #-15536,&TMR0_RC        ;#0xc350
+    3212:       0a 1c 
+;clear timer0 count
+    3214:       82 43 04 1c     mov     #0,     &TMR0_CNT       ;r3 As==00
+
+;infinite loop
+; set CPUOFF bit
+; set GIE bit (enable)
+; r4 += 0 (nop)
+    3218:       32 d0 18 00     bis     #24,sr  ;#0x0018
+    321c:       04 53           add     #0,     r4      ;r3 As==00
+    321e:       fc 3f           jmp     $-6             ;abs 0x3218
+                            ;never reaches here
+    3220:       30 40 d2 31     br      #main ;#0x31d2 
+                            ;
+;end #main
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+waitForUARTEmpty:
+    3224:       32 d2           eint                    
+    3226:       a2 b3 00 22     bit     #2,     &UART0_CR       ;r3 As==10
+    322a:       fc 23           jnz     $-6             ;abs 0x3224
+    322c:       30 41           ret                     
+;end waitForUARTEmpty
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+timeSetup:
+    322e:       0b 12           push    r11             
+    3230:       0a 12           push    r10             
+    3232:       82 43 00 1c     mov     #0,     &TMR0_CR        ;r3 As==00
+    3236:       82 43 04 1c     mov     #0,     &TMR0_CNT       ;r3 As==00
+    323a:       82 43 02 1c     mov     #0,     &TMR0_SR        ;r3 As==00
+
+                            ;wait for RXD0 to go high
+    323e:       b2 b0 20 00     bit     #32,    &PADSR  ;#RXD0
+    3242:       00 1a 
+    3244:       fc 23           jnz     $-6 ;#timeSetup_while1  ;abs 0x323e
+
+                            ;start timer
+    3246:       b2 40 40 00     mov     #64,    &TMR0_CR        ;#0x0040
+    324a:       00 1c 
+
+                            ;wait for RXD0 to go low
+    324c:       b2 b0 20 00     bit     #32,    &PADSR  ;#RXD0
+    3250:       00 1a 
+    3252:       fc 27           jz      $-6             ;abs 0x324c
+
+                            ;wait for RXD to go high
+    3254:       b2 b0 20 00     bit     #32,    &PADSR  ;#RXD0
+    3258:       00 1a 
+    325a:       fc 23           jnz     $-6             ;abs 0x3254
+
+                            ;wait for RXD0 to go low
+    325c:       b2 b0 20 00     bit     #32,    &PADSR  ;#RXD0
+    3260:       00 1a 
+    3262:       fc 27           jz      $-6             ;abs 0x325c
+
+                            ;read timer0 count
+                            ; time = uint32[r14, r13] 
+    3264:       1d 42 04 1c     mov     &TMR0_CNT,r13   
+    3268:       0e 43           clr     r14             
+
+                            ;check if timer overflowed
+    326a:       b2 b2 02 1c     bit     #8,     &TMR0_SR        ;r2 As==11
+    326e:       02 24           jz      $+6             ;abs 0x3274
+    3270:       0d 53           add     #0,     r13     ;r3 As==00
+    3272:       1e 63           addc    #1,     r14     ;r3 As==01
+
+                            ; (uint32) time += 75
+    3274:       0f 4e           mov     r14,    r15     
+    3276:       0e 4d           mov     r13,    r14     
+    3278:       3e 50 4b 00     add     #75,    r14     ;#0x004b
+    327c:       0f 63           adc     r15             
+    327e:       12 c3           clrc                    
+
+                            ; (unit32) time >>= 4
+    3280:       0f 10           rrc     r15             
+    3282:       0e 10           rrc     r14             
+    3284:       0f 11           rra     r15             
+    3286:       0e 10           rrc     r14             
+    3288:       0f 11           rra     r15             
+    328a:       0e 10           rrc     r14             
+    328c:       0f 11           rra     r15             
+    328e:       0e 10           rrc     r14             
+
+                            ;r15 = divide(r14, 9)
+    3290:       0c 4e           mov     r14,    r12     
+    3292:       3a 40 09 00     mov     #9,     r10     ;#0x0009
+    3296:       b0 12 a6 3f     call    #divide ;#0x3fa6 
+    329a:       0f 4c           mov     r12,    r15     
+
+                            ; time--
+    329c:       3f 53           add     #-1,    r15     ;r3 As==11
+
+                            ;stop timer0
+    329e:       82 43 00 1c     mov     #0,     &TMR0_CR        ;r3 As==00
+    32a2:       3a 41           pop     r10             
+    32a4:       3b 41           pop     r11             
+                            ;return r15 (time)
+    32a6:       30 41           ret                     
+; end timeSetup
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+emit:
+    32a8:       4d 4f           mov.b   r15,    r13     
+    32aa:       1e 42 70 44     mov     &ringBufferIn,r14 ;&0x4470,r14     
+    32ae:       1e 53           inc     r14             
+    32b0:       0c 4e           mov     r14,    r12     
+    32b2:       7c f3           and.b   #-1,    r12     ;r3 As==11
+    32b4:       3e 53           add     #-1,    r14     ;r3 As==11
+;wait for output buffer to have space
+    32b6:       32 d2           eint                    
+    32b8:       82 9c 78 44     cmp     r12,    &ringBufferOut ;&0x4478 
+    32bc:       fc 27           jz      $-6             ;abs 0x32b6
+    32be:       a2 b3 00 22     bit     #2,     &UART0_CR       ;r3 As==10
+    32c2:       0e 20           jnz     $+30            ;abs 0x32e0
+    32c4:       4f 4d           mov.b   r13,    r15     
+    32c6:       82 4f 08 22     mov     r15,    &UART0_TDR      
+    32ca:       a2 d3 00 22     bis     #2,     &UART0_CR       ;r3 As==10
+    32ce:       7d 90 0a 00     cmp.b   #10,    r13     ;#0x000a
+    32d2:       01 24           jz      $+4             ;abs 0x32d6
+    32d4:       30 41           ret                     
+    32d6:       7f 40 0d 00     mov.b   #13,    r15     ;#0x000d
+    32da:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    32de:       fa 3f           jmp     $-10            ;abs 0x32d4
+    32e0:       ce 4d 7a 44     mov.b   r13,    17530(r14);0x447a(r14)
+    32e4:       82 4c 70 44     mov     r12,    &ringBufferIn ;&0x4470 
+    32e8:       f2 3f           jmp     $-26            ;abs 0x32ce
+;end emit
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+PrintString:
+    32ea:       0b 12           push    r11             
+    32ec:       0b 4f           mov     r15,    r11     
+    32ee:       cf 93 00 00     tst.b   0(r15)          ;CRCDI_L(r15)
+    32f2:       07 24           jz      $+16            ;abs 0x3302
+    32f4:       6f 4b           mov.b   @r11,   r15     
+    32f6:       1b 53           inc     r11             
+    32f8:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    32fc:       cb 93 00 00     tst.b   0(r11)          ;CRCDI_L(r11)
+    3300:       f9 23           jnz     $-12            ;abs 0x32f4
+    3302:       3b 41           pop     r11             
+    3304:       30 41           ret                     
+;end PrintString
+;-----------------------------------------------------------------------
+
+
+;string errorMessages[0] = "Incomplete hex file"
+    3306:       49 6e
+    3308:       63 6f
+    330a:       6d 70
+    330c:       6c 65
+    330e:       74 65
+    3310:       20 68
+    3312:       65 78
+    3314:       20 66
+    3316:       69 6c
+    3318:       65 00
+
+;string errorMessages[2] = "Non-hex character found in file"
+    331a:       4e 6f
+    331c:       6e 2d
+    331e:       68 65
+    3320:       78 20
+    3322:       63 68
+    3324:       61 72
+    3326:       61 63
+    3328:       74 65
+    332a:       72 20
+    332c:       66 6f
+    332e:       75 6e
+    3330:       64 20
+    3332:       69 6e
+    3334:       20 66
+    3336:       69 6c
+    3338:       65 00
+    
+;string errorMessages[3] = "Hex code length error"
+    333a:       48 65
+    333c:       78 20
+    333e:       63 6f
+    3340:       64 65
+    3342:       20 6c
+    3344:       65 6e
+    3346:       67 74
+    3348:       68 20
+    334a:       65 72
+    334c:       72 6f
+    334e:       72 00
+    
+;string errorMessages[4] = "Hex checksum error"
+    3350:       48 65
+    3352:       78 20
+    3354:       63 68
+    3356:       65 63
+    3358:       6b 73
+    335a:       75 6d
+    335c:       20 65
+    335e:       72 72
+    3360:       6f 72
+    3362:       00
+    
+;string errorMessages[5] = "Flash writing problem"
+    3363:       46
+    3364:       6c 61
+    3366:       73 68
+    3368:       20 77
+    336a:       72 69
+    336c:       74 69
+    336e:       6e 67
+    3370:       20 70
+    3372:       72 6f
+    3374:       62 6c
+    3376:       65 6d
+    3378:       00
+
+;string errorMessages[6] = "Transfer cancelled"
+    3379:       54
+    337a:       72 61
+    337c:       6e 73
+    337e:       66 65
+    3380:       72 20
+    3382:       63 61
+    3384:       6e 63
+    3386:       65 6c
+    3388:       6c 65
+    338a:       64 00
+    
+    338c:       06 33     movapc, &0x43306
+    338e:       00 00           bra     pc              
+    3390:       1a 33           jn      $-458           ;abs 0x31c6
+    3392:       3a 33           jn      $-394           ;abs 0x3208
+    3394:       50 33           jn      $-350           ;abs 0x3236
+    3396:       63 33           jn      $-312           ;abs 0x325e
+    3398:       79 33           jn      $-268           ;abs 0x328c
+
+;string "\nError: "
+    339a:       0a 45
+    339c:       72 72
+    339e:       6f 72
+    33a0:       3a 20
+    33a2:       00
+
+;string "\nHex file line num: "
+    33a3:       0a   
+    33a4:       48 65
+    33a6:       78 20
+    33a8:       66 69
+    33aa:       6c 65
+    33ac:       20 6c
+    33ae:       69 6e
+    33b0:       65 20
+    33b2:       6e 75
+    33b4:       6d 3a
+    33b6:       20 00
+
+;string "\n>"
+    33b8:       0a 3e
+    33ba:       00
+    
+;string "\nComplete: "
+    33bb:       0a
+    33bc:       43 6f
+    33be:       6d 70
+    33c0:       6c 65
+    33c2:       74 65
+    33c4:       3a 20
+    33c6:       00
+    
+;string "bytes programmed."
+    33c7:       62
+    33c8:       79 74
+    33ca:       65 73
+    33cc:       20 70
+    33ce:       72 6f
+    33d0:       67 72
+    33d2:       61 6d
+    33d4:       6d 65
+    33d6:       64 2e
+    33d8:       00
+;alignment padding byte
+    33d9:       00
+
+
+
+
+;-----------------------------------------------------------------------
+TMR0_INT:
+    33da:       0f 12           push    r15             
+    33dc:       0e 12           push    r14             
+    33de:       0d 12           push    r13             
+    33e0:       0c 12           push    r12             
+    33e2:       1f 42 02 1c     mov     &TMR0_SR,r15    
+    33e6:       1f 42 76 44     mov     &0x4476,r15     
+    33ea:       1f 93           cmp     #1,     r15     ;r3 As==01
+    33ec:       45 24           jz      $+140           ;abs 0x3478
+    33ee:       1f 93           cmp     #1,     r15     ;r3 As==01
+    33f0:       36 28           jnc     $+110           ;abs 0x345e
+    33f2:       2f 93           cmp     #2,     r15     ;r3 As==10
+    33f4:       47 20           jnz     $+144           ;abs 0x3484
+    33f6:       a2 c2 00 1c     bic     #4,     &TMR0_CR        ;r2 As==10
+    33fa:       92 93 7a 45     cmp     #1,     &error  ;&0x457a ;r3 As==01
+    33fe:       22 24           jz      $+70            ;abs 0x3444
+    3400:       3f 40 9a 33     mov     #13210, r15     ;#0x339a
+    3404:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    3408:       1f 42 7a 45     mov     &error, r15     ;&0x457a,r15     
+    340c:       0f 5f           rla     r15             
+    340e:       1f 4f 8c 33     mov     13196(r15),r15  ;0x338c(r15)
+    3412:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    3416:       3f 40 a3 33     mov     #13219, r15     ;#0x33a3
+    341a:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    341e:       1f 42 02 40     mov     &0x4002,r15     
+    3422:       b0 12 50 3e     call    #printNumber    ;#0x3e50 
+    3426:       3f 40 b8 33     mov     #13240, r15     ;#0x33b8
+    342a:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    342e:       b0 12 24 32     call    #waitForUARTEmpty ;#0x3224 
+    3432:       b0 12 76 31     call    #0x3176 
+    3436:       92 43 04 1c     mov     #1,     &TMR0_CNT       ;r3 As==01
+    343a:       1f 42 02 1c     mov     &TMR0_SR,r15    
+    343e:       a2 d2 00 1c     bis     #4,     &TMR0_CR        ;r2 As==10
+    3442:       20 3c           jmp     $+66            ;abs 0x3484
+    3444:       3f 40 bb 33     mov     #13243, r15     ;#0x33bb
+    3448:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    344c:       1f 42 08 40     mov     &0x4008,r15     
+    3450:       b0 12 50 3e     call    #printNumber    ;#0x3e50 
+    3454:       3f 40 c7 33     mov     #13255, r15     ;#0x33c7
+    3458:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    345c:       e4 3f           jmp     $-54            ;abs 0x3426
+    345e:       92 53 98 4a     inc     &0x4a98 
+    3462:       b2 90 03 00     cmp     #3,     &0x4a98 ;#0x0003
+    3466:       98 4a 
+    3468:       0d 20           jnz     $+28            ;abs 0x3484
+    346a:       7f 40 43 00     mov.b   #67,    r15     ;#0x0043
+    346e:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3472:       82 43 98 4a     mov     #0,     &0x4a98 ;r3 As==00
+    3476:       06 3c           jmp     $+14            ;abs 0x3484
+    3478:       82 43 72 44     mov     #0,     &0x4472 ;r3 As==00
+    347c:       7f 40 15 00     mov.b   #21,    r15     ;#0x0015
+    3480:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3484:       3c 41           pop     r12             
+    3486:       3d 41           pop     r13             
+    3488:       3e 41           pop     r14             
+    348a:       3f 41           pop     r15             
+    348c:       00 13           reti                    
+;end TMR0_INT
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+UART_ISR:
+    348e:       0f 12           push    r15             
+    3490:       0e 12           push    r14             
+    3492:       0d 12           push    r13             
+    3494:       0c 12           push    r12             
+;if: is receive interrup enabled?
+    3496:       a2 b2 04 22     bit     #4,     &UART0_SR       ;r2 As==10
+    349a:       06 24           jz      $+14            ;abs 0x34a8
+; then we have an RX character
+    349c:       1f 42 06 22     mov     &UART0_RDR,r15  
+    34a0:       32 d2           eint                    
+    34a2:       b0 12 ea 35     call    #readPacket ;#0x35ea 
+    34a6:       13 3c           jmp     $+40            ;abs 0x34ce
+; else we have a TX character to send
+;  if: another char in queue?
+    34a8:       1f 42 78 44     mov     &ringBufferOut, r15 ;&0x4478,r15     
+    34ac:       82 9f 70 44     cmp     r15, &ringBufferIn ;&0x4470 
+    34b0:       0c 24           jz      $+26            ;abs 0x34ca
+;   then send char from outRingBuffer
+    34b2:       1f 42 78 44     mov     &ringBufferOut,r15 ;&0x4478,r15     
+    34b6:       3f 50 7a 44     add     #outRingBuffer, r15     ;#0x447a
+    34ba:       6f 4f           mov.b   @r15,   r15     
+    34bc:       82 4f 08 22     mov     r15,    &UART0_TDR      
+    34c0:       92 53 78 44     inc     &ringBufferOut ;0x4478 
+;    ringBufferOut &= 0xff;
+    34c4:       c2 43 79 44     mov.b   #0,     &0x4479 ;r3 As==00
+    34c8:       02 3c           jmp     $+6             ;abs 0x34ce
+;  else no more chars to send
+;   disable TX empty interrupt
+;  fi
+    34ca:       a2 c3 00 22     bic     #2,     &UART0_CR       ;r3 As==10
+;fi
+    34ce:       3c 41           pop     r12             
+    34d0:       3d 41           pop     r13             
+    34d2:       3e 41           pop     r14             
+    34d4:       3f 41           pop     r15             
+    34d6:       00 13           reti                    
+;end #UART_ISR
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+toUpper:
+    34d8:       cf 93 00 00     tst.b   0(r15)          ;CRCDI_L(r15)
+    34dc:       0c 24           jz      $+26            ;abs 0x34f6
+    34de:       6e 4f           mov.b   @r15,   r14     
+    34e0:       7e 90 61 00     cmp.b   #97,    r14     ;#0x0061
+    34e4:       04 28           jnc     $+10            ;abs 0x34ee
+    34e6:       7e 50 e0 ff     add.b   #-32,   r14     ;#0xffe0
+    34ea:       cf 4e 00 00     mov.b   r14,    0(r15)  ;CRCDI_L(r15)
+    34ee:       1f 53           inc     r15             
+    34f0:       cf 93 00 00     tst.b   0(r15)          ;CRCDI_L(r15)
+    34f4:       f4 23           jnz     $-22            ;abs 0x34de
+    34f6:       30 41           ret                     
+;end toUpper
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+strcmpm:
+    34f8:       cf 93 00 00     tst.b   0(r15)          ;CRCDI_L(r15)
+    34fc:       0e 24           jz      $+30            ;abs 0x351a
+    34fe:       ce 93 00 00     tst.b   0(r14)          ;CRCDI_L(r14)
+    3502:       0b 24           jz      $+24            ;abs 0x351a
+    3504:       ee 9f 00 00     cmp.b   @r15,   0(r14)  ;CRCDI_L(r14)
+    3508:       0a 20           jnz     $+22            ;abs 0x351e
+    350a:       1f 53           inc     r15             
+    350c:       1e 53           inc     r14             
+    350e:       cf 93 00 00     tst.b   0(r15)          ;CRCDI_L(r15)
+    3512:       03 24           jz      $+8             ;abs 0x351a
+    3514:       ce 93 00 00     tst.b   0(r14)          ;CRCDI_L(r14)
+    3518:       f5 23           jnz     $-20            ;abs 0x3504
+    351a:       0f 43           clr     r15             
+    351c:       30 41           ret                     
+    351e:       1f 43           mov     #1,     r15     ;r3 As==01
+    3520:       30 41           ret                     
+;end strcmpm
+;-----------------------------------------------------------------------
+
+
+;string commands[0] = "ERASE"
+    3522:       45 52
+    3524:       41 53
+    3526:       45 00
+
+;string commands[1] = "SECTOR ERASE "
+    3528:       53 45
+    352a:       43 54
+    352c:       4f 52
+    352e:       20 45
+    3530:       52 41
+    3532:       53 45
+    3534:       20 00
+
+;string commands[2] = "WRITE "
+    3536:       57 52
+    3538:       49 54
+    353a:       45 20
+    353c:       00
+    
+;string commands[3] = "READ "
+    353d:       52
+    353e:       45 41
+    3540:       44 20
+    3542:       00
+    
+;string commands[4] = "ID"
+    3543:       49
+    3544:       44 00
+
+;string commands[5] = "START"
+    3546:       53 54
+    3548:       41 52
+    354a:       54 00
+
+;string commands[6] = "RESET"
+    354c:       52 45
+    354d:       53 45
+    3550:       54 00
+
+;string commands[7] = "RE-BAUD"
+    3552:       52 45
+    3554:       2d 42
+    3556:       41 55
+    3558:       44 00
+
+;string commands[8] = "FREAD"
+    355a:       46 52
+    355c:       45 41
+    355e:       44 20
+    3560:       00 00
+
+
+
+    3562:       22 35           jge     $+582           ;abs 0x37a8
+    3564:       28 35           jge     $+594           ;abs 0x37b6
+    3566:       36 35           jge     $+622           ;abs 0x37d4
+    3568:       3d 35           jge     $+636           ;abs 0x37e4
+    356a:       43 35           jge     $+648           ;abs 0x37f2
+    356c:       46 35           jge     $+654           ;abs 0x37fa
+    356e:       4c 35           jge     $+666           ;abs 0x3808
+    3570:       52 35           jge     $+678           ;abs 0x3816
+    3572:       5a 35           jge     $+694           ;abs 0x3828
+
+
+;-----------------------------------------------------------------------
+parseCommands:
+    3574:       0b 12           push    r11             
+    3576:       0a 12           push    r10             
+    3578:       0a 4f           mov     r15,    r10     
+    357a:       0b 43           clr     r11             
+    357c:       0f 4b           mov     r11,    r15     
+    357e:       0f 5f           rla     r15             
+    3580:       1e 4f 62 35     mov     13666(r15),r14  ;0x3562(r15)
+    3584:       0f 4a           mov     r10,    r15     
+    3586:       b0 12 f8 34     call    #strcmpm        ;#0x34f8 
+    358a:       0f 93           tst     r15             
+    358c:       06 24           jz      $+14            ;abs 0x359a
+    358e:       1b 53           inc     r11             
+    3590:       3b 90 09 00     cmp     #9,     r11     ;#0x0009
+    3594:       f3 2b           jnc     $-24            ;abs 0x357c
+    3596:       0f 43           clr     r15             
+    3598:       02 3c           jmp     $+6             ;abs 0x359e
+    359a:       0f 4b           mov     r11,    r15     
+    359c:       1f 53           inc     r15             
+    359e:       3a 41           pop     r10             
+    35a0:       3b 41           pop     r11             
+    35a2:       30 41           ret                     
+;end parseCommands
+;-----------------------------------------------------------------------
+
+
+
+;string "\nErase Complete"
+    35a4:       0a 45
+    35a6:       72 61
+    35a8:       73 65
+    35aa:       20 43
+    35ac:       6f 6d
+    35ae:       70 6c
+    35b0:       65 74
+    35b2:       65 00
+
+;string "Send Space"
+    35b4:       53 65
+    35b6:       6e 64
+    35b8:       20 53
+    35ba:       70 61
+    35bc:       63 65
+    35be:       00
+
+;string "  "
+    35bf:       20
+    35c0:       20 00
+    
+;string "Starting User Program...\n"
+    35c2:       53 74
+    35c4:       61 72
+    35c6:       74 69
+    35c8:       6e 67
+    35ca:       20 55
+    35cc:       73 65
+    35ce:       72 20
+    35d0:       50 72
+    35d2:       6f 67
+    35d4:       72 61
+    35d6:       6d 2e
+    35d8:       2e 2e
+    35da:       0a 00
+
+;string "Resetting...\n"
+    35dc:       52 65
+    35de:       73 65
+    35e0:       74 74
+    35e2:       69 6e
+    35e4:       67 2e
+    35e6:       2e 2e
+    35e8:       0a 00
+
+
+;-----------------------------------------------------------------------
+readPacket:
+    35ea:       0b 12           push    r11             
+    35ec:       0a 12           push    r10             
+    35ee:       09 12           push    r9              
+    35f0:       08 12           push    r8              
+    35f2:       4b 4f           mov.b   r15,    r11     
+;reset timer count
+    35f4:       82 43 04 1c     mov     #0,     &TMR0_CNT       ;r3 As==00
+
+;if commandmode == 0
+    35f8:       82 93 0a 40     tst     &commandmode ;&0x400a 
+    35fc:       a6 20           jnz     $+334           ;abs 0x374a
+    35fe:       1e 42 72 44     mov     &0x4472,r14     
+    3602:       0e 93           tst     r14             
+    3604:       36 20           jnz     $+110           ;abs 0x3672
+    3606:       92 43 76 44     mov     #1,     &0x4476 ;r3 As==01
+    360a:       5f 93           cmp.b   #1,     r15     ;r3 As==01
+    360c:       9a 24           jz      $+310           ;abs 0x3742
+    360e:       6f 93           cmp.b   #2,     r15     ;r3 As==10
+    3610:       2d 24           jz      $+92            ;abs 0x366c
+    3612:       6f 92           cmp.b   #4,     r15     ;r2 As==10
+    3614:       26 24           jz      $+78            ;abs 0x3662
+    3616:       7f 90 18 00     cmp.b   #24,    r15     ;#0x0018
+    361a:       1c 24           jz      $+58            ;abs 0x3654
+    361c:       7f 90 2e 00     cmp.b   #46,    r15     ;#0x002e
+    3620:       0e 24           jz      $+30            ;abs 0x363e
+    3622:       7f 90 0a 00     cmp.b   #10,    r15     ;#0x000a
+    3626:       09 24           jz      $+20            ;abs 0x363a
+    3628:       7f 90 0d 00     cmp.b   #13,    r15     ;#0x000d
+    362c:       06 24           jz      $+14            ;abs 0x363a
+    362e:       7f 40 15 00     mov.b   #21,    r15     ;#0x0015
+    3632:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3636:       30 40 20 3a     br      #0x3a20 
+    363a:       4f 4b           mov.b   r11,    r15     
+    363c:       fa 3f           jmp     $-10            ;abs 0x3632
+    363e:       7f 40 2e 00     mov.b   #46,    r15     ;#0x002e
+    3642:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3646:       92 43 0a 40     mov     #1, &commandmode ;&0x400a ;r3 As==01
+    364a:       b2 40 03 00     mov     #3, &0x4476 ;#0x0003
+    364e:       76 44 
+    3650:       30 40 20 3a     br      #0x3a20 
+    3654:       b2 40 06 00     mov     #6,     &error  ;&0x457a ;#CRCRESR_L
+    3658:       7a 45 
+    365a:       a2 43 76 44     mov     #2,     &0x4476 ;r3 As==10
+    365e:       30 40 20 3a     br      #0x3a20 
+    3662:       7f 40 06 00     mov.b   #6,     r15     ;#CRCRESR_L
+    3666:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    366a:       f7 3f           jmp     $-16            ;abs 0x365a
+    366c:       b2 40 04 04     mov     #1028,  &0x4004 ;#0x0404
+    3670:       04 40 
+    3672:       1e 92 04 40     cmp     &0x4004,r14     
+    3676:       15 24           jz      $+44            ;abs 0x36a2
+    3678:       1f 42 00 40     mov     &RAMStart,r15   
+    367c:       0f 5f           rla     r15             
+    367e:       1f 4f 72 31     mov     12658(r15),r15  ;0x3172(r15)
+    3682:       0f 5e           add     r14,    r15     
+    3684:       cf 4b 00 00     mov.b   r11,    0(r15)  ;CRCDI_L(r15)
+    3688:       92 53 72 44     inc     &0x4472 
+    368c:       1f 42 72 44     mov     &0x4472,r15     
+    3690:       2f 92           cmp     #4,     r15     ;r2 As==10
+    3692:       c6 29           jnc     $+910           ;abs 0x3a20
+    3694:       1f 92 04 40     cmp     &0x4004,r15     
+    3698:       c3 2d           jc      $+904           ;abs 0x3a20
+    369a:       4f 4b           mov.b   r11,    r15     
+    369c:       b0 12 2a 3a     call    #instantcrc     ;#0x3a2a 
+    36a0:       bf 3d           jmp     $+896           ;abs 0x3a20
+    36a2:       1f 42 00 40     mov     &RAMStart,r15   
+    36a6:       0f 5f           rla     r15             
+    36a8:       1f 4f 72 31     mov     12658(r15),r15  ;0x3172(r15)
+    36ac:       0f 5e           add     r14,    r15     
+    36ae:       cf 4b 00 00     mov.b   r11,    0(r15)  ;CRCDI_L(r15)
+    36b2:       1f 42 00 40     mov     &RAMStart,r15   
+    36b6:       0f 5f           rla     r15             
+    36b8:       1f 4f 72 31     mov     12658(r15),r15  ;0x3172(r15)
+    36bc:       5d 4f 01 00     mov.b   1(r15), r13     ;CRCDI_H(r15)
+    36c0:       1e 42 96 4a     mov     &packetNum, r14 ;&0x4a96,r14     
+    36c4:       0d 9e           cmp     r14,    r13     
+    36c6:       17 24           jz      $+48            ;abs 0x36f6
+    36c8:       0d 9e           cmp     r14,    r13     
+    36ca:       12 28           jnc     $+38            ;abs 0x36f0
+    36cc:       92 53 9c 4b     inc     &0x4b9c 
+    36d0:       b2 90 05 00     cmp     #5,     &0x4b9c ;#CRCINIRES_L
+    36d4:       9c 4b 
+    36d6:       09 28           jnc     $+20            ;abs 0x36ea
+    36d8:       7f 40 18 00     mov.b   #24,    r15     ;#0x0018
+    36dc:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    36e0:       82 43 52 40     mov     #0,     &crc    ;&0x4052 ;r3 As==00
+    36e4:       82 43 72 44     mov     #0,     &0x4472 ;r3 As==00
+    36e8:       9b 3d           jmp     $+824           ;abs 0x3a20
+    36ea:       7f 40 15 00     mov.b   #21,    r15     ;#0x0015
+    36ee:       f6 3f           jmp     $-18            ;abs 0x36dc
+    36f0:       7f 40 06 00     mov.b   #6,     r15     ;#CRCRESR_L
+    36f4:       9e 3f           jmp     $-194           ;abs 0x3632
+    36f6:       1d 42 52 40     mov     &crc, r13       ;&0x4052,r13     
+    36fa:       1e 42 72 44     mov     &0x4472,r14     
+    36fe:       b0 12 58 3a     call    #comparecrc     ;#0x3a58 
+    3702:       0f 93           tst     r15             
+    3704:       f2 27           jz      $-26            ;abs 0x36ea
+    3706:       1b 42 00 40     mov     &RAMStart,r11   
+    370a:       1a 42 72 44     mov     &0x4472,r10     
+    370e:       0f 4b           mov     r11,    r15     
+    3710:       1f e3           xor     #1,     r15     ;r3 As==01
+    3712:       82 4f 00 40     mov     r15,    &RAMStart       
+    3716:       1f 42 96 4a     mov     &packetNum, r15 ;&0x4a96,r15     
+    371a:       1f 53           inc     r15             
+    371c:       c2 4f 96 4a     mov.b   r15,    &packetNum ;&0x4a96 
+    3720:       c2 43 97 4a     mov.b   #0,     &0x4a97 ;r3 As==00
+    3724:       7f 40 06 00     mov.b   #6,     r15     ;#CRCRESR_L
+    3728:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    372c:       82 43 52 40     mov     #0,     &crc    ;&0x4052 ;r3 As==00
+    3730:       82 43 72 44     mov     #0,     &0x4472 ;r3 As==00
+    3734:       0b 5b           rla     r11             
+    3736:       0e 4a           mov     r10,    r14     
+    3738:       1f 4b 72 31     mov     12658(r11),r15  ;0x3172(r11)
+    373c:       b0 12 72 3a     call    #readLine       ;#0x3a72 
+    3740:       cf 3f           jmp     $-96            ;abs 0x36e0
+    3742:       b2 40 84 00     mov     #132,   &0x4004 ;#0x0084
+    3746:       04 40 
+    3748:       94 3f           jmp     $-214           ;abs 0x3672
+    374a:       3a 40 7c 46     mov     #18044, r10     ;#0x467c
+    374e:       1f 42 72 44     mov     &0x4472,r15     
+    3752:       0f 5a           add     r10,    r15     
+    3754:       cf 4b 00 00     mov.b   r11,    0(r15)  ;CRCDI_L(r15)
+    3758:       92 53 72 44     inc     &0x4472 
+    375c:       4f 4b           mov.b   r11,    r15     
+    375e:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3762:       7b 92           cmp.b   #8,     r11     ;r2 As==11
+    3764:       53 25           jz      $+680           ;abs 0x3a0c
+    3766:       7b 90 0a 00     cmp.b   #10,    r11     ;#0x000a
+    376a:       03 24           jz      $+8             ;abs 0x3772
+    376c:       7b 90 0d 00     cmp.b   #13,    r11     ;#0x000d
+    3770:       57 21           jnz     $+688           ;abs 0x3a20
+    3772:       7f 40 0a 00     mov.b   #10,    r15     ;#0x000a
+    3776:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    377a:       1f 42 72 44     mov     &0x4472,r15     
+    377e:       cf 43 7c 46     mov.b   #0,     18044(r15);r3 As==00, 0x467c(r15)
+    3782:       0f 4a           mov     r10,    r15     
+    3784:       b0 12 d8 34     call    #toUpper        ;#0x34d8 
+    3788:       0f 4a           mov     r10,    r15     
+    378a:       b0 12 74 35     call    #parseCommands  ;#0x3574 
+    378e:       3f 90 0a 00     cmp     #10,    r15     ;#0x000a
+    3792:       1e 2c           jc      $+62            ;abs 0x37d0
+    3794:       0f 5f           rla     r15             
+    3796:       10 4f 9a 37     br      14234(r15)      ;0x379a(r15)
+    379a:       e2 37           jge     $-58            ;abs 0x3760
+    379c:       ae 37           jge     $-162           ;abs 0x36fa
+    379e:       ec 37           jge     $-38            ;abs 0x3778
+    37a0:       fa 37           jge     $-10            ;abs 0x3796
+    37a2:       90 38           jl      $+290           ;abs 0x38c4
+    37a4:       06 39           jl      $+526           ;abs 0x39b2
+    37a6:       24 39           jl      $+586           ;abs 0x39f0
+    37a8:       48 39           jl      $+658           ;abs 0x3a3a
+    37aa:       62 39           jl      $+710           ;abs 0x3a70
+    37ac:       68 39           jl      $+722           ;abs 0x3a7e
+    37ae:       0f 43           clr     r15             
+    37b0:       b0 12 00 3e     call    #eraseSector    ;#0x3e00 
+    37b4:       1f 43           mov     #1,     r15     ;r3 As==01
+    37b6:       b0 12 00 3e     call    #eraseSector    ;#0x3e00 
+    37ba:       2f 43           mov     #2,     r15     ;r3 As==10
+    37bc:       b0 12 00 3e     call    #eraseSector    ;#0x3e00 
+    37c0:       3f 40 03 00     mov     #3,     r15     ;#0x0003
+    37c4:       b0 12 00 3e     call    #eraseSector    ;#0x3e00 
+    37c8:       3f 40 a4 35     mov     #13732, r15     ;#0x35a4
+    37cc:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    37d0:       3f 40 b8 33     mov     #13240, r15     ;#0x33b8
+    37d4:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    37d8:       82 43 76 44     mov     #0, &0x4476 ;r3 As==00
+    37dc:       82 43 0a 40     mov     #0, &commandmode ;&0x400a ;r3 As==00
+    37e0:       81 3f           jmp     $-252           ;abs 0x36e4
+    37e2:       7f 40 3f 00     mov.b   #63,    r15     ;#0x003f
+    37e6:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    37ea:       f2 3f           jmp     $-26            ;abs 0x37d0
+    37ec:       5f 42 89 46     mov.b   &0x4689,r15     
+    37f0:       3f f0 0f 00     and     #15,    r15     ;#0x000f
+    37f4:       b0 12 00 3e     call    #eraseSector    ;#0x3e00 
+    37f8:       eb 3f           jmp     $-40            ;abs 0x37d0
+    37fa:       2e 42           mov     #4,     r14     ;r2 As==10
+    37fc:       3f 40 82 46     mov     #18050, r15     ;#0x4682
+    3800:       b0 12 1c 3f     call    #0x3f1c 
+    3804:       0f 93           tst     r15             
+    3806:       ed 23           jnz     $-36            ;abs 0x37e2
+    3808:       2e 42           mov     #4,     r14     ;r2 As==10
+    380a:       3f 40 87 46     mov     #18055, r15     ;#0x4687
+    380e:       b0 12 1c 3f     call    #0x3f1c 
+    3812:       0f 93           tst     r15             
+    3814:       e6 23           jnz     $-50            ;abs 0x37e2
+    3816:       5b 42 82 46     mov.b   &0x4682,r11     
+    381a:       8b 10           swpb    r11             
+    381c:       5f 42 83 46     mov.b   &0x4683,r15     
+    3820:       0b df           bis     r15,    r11     
+    3822:       1b c3           bic     #1,     r11     ;r3 As==01
+    3824:       5a 42 87 46     mov.b   &0x4687,r10     
+    3828:       8a 10           swpb    r10             
+    382a:       5f 42 88 46     mov.b   &0x4688,r15     
+    382e:       0a df           bis     r15,    r10     
+    3830:       82 93 74 44     tst     &0x4474 
+    3834:       26 20           jnz     $+78            ;abs 0x3882
+    3836:       8b 4a 00 00     mov     r10,    0(r11)  ;CRCDI_L(r11)
+    383a:       3a 40 8c 46     mov     #18060, r10     ;#0x468c
+    383e:       2e 42           mov     #4,     r14     ;r2 As==10
+    3840:       0f 4a           mov     r10,    r15     
+    3842:       b0 12 1c 3f     call    #0x3f1c 
+    3846:       0f 93           tst     r15             
+    3848:       0c 20           jnz     $+26            ;abs 0x3862
+    384a:       6f 4a           mov.b   @r10,   r15     
+    384c:       8f 10           swpb    r15             
+    384e:       5d 4a 01 00     mov.b   1(r10), r13     ;CRCDI_H(r10)
+    3852:       3a 50 05 00     add     #5,     r10     ;#CRCINIRES_L
+    3856:       0e 4b           mov     r11,    r14     
+    3858:       2b 53           incd    r11             
+    385a:       0f dd           bis     r13,    r15     
+    385c:       8e 4f 00 00     mov     r15,    0(r14)  ;CRCDI_L(r14)
+    3860:       ee 3f           jmp     $-34            ;abs 0x383e
+    3862:       82 93 74 44     tst     &0x4474 
+    3866:       b4 27           jz      $-150           ;abs 0x37d0
+    3868:       19 42 00 22     mov     &UART0_CR,r9    
+    386c:       82 43 00 22     mov     #0,     &UART0_CR       ;r3 As==00
+    3870:       b0 12 2e 32     call    #timeSetup ;#0x322e 
+    3874:       82 4f 02 22     mov     r15,    &UART0_BCR      
+    3878:       82 49 00 22     mov     r9,     &UART0_CR       
+    387c:       82 43 74 44     mov     #0,     &0x4474 ;r3 As==00
+    3880:       a7 3f           jmp     $-176           ;abs 0x37d0
+    3882:       3f 40 b4 35     mov     #13748, r15     ;#0x35b4
+    3886:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    388a:       b0 12 24 32     call    #waitForUARTEmpty ;#0x3224 
+    388e:       d3 3f           jmp     $-88            ;abs 0x3836
+    3890:       2e 42           mov     #4,     r14     ;r2 As==10
+    3892:       3f 40 81 46     mov     #18049, r15     ;#0x4681
+    3896:       b0 12 1c 3f     call    #0x3f1c 
+    389a:       0f 93           tst     r15             
+    389c:       a2 23           jnz     $-186           ;abs 0x37e2
+    389e:       5b 42 81 46     mov.b   &0x4681,r11     
+    38a2:       8b 10           swpb    r11             
+    38a4:       5f 42 82 46     mov.b   &0x4682,r15     
+    38a8:       0b df           bis     r15,    r11     
+    38aa:       1b c3           bic     #1,     r11     ;r3 As==01
+    38ac:       2e 42           mov     #4,     r14     ;r2 As==10
+    38ae:       3f 40 86 46     mov     #18054, r15     ;#0x4686
+    38b2:       b0 12 1c 3f     call    #0x3f1c 
+    38b6:       0f 93           tst     r15             
+    38b8:       22 20           jnz     $+70            ;abs 0x38fe
+    38ba:       58 42 86 46     mov.b   &0x4686,r8      
+    38be:       88 10           swpb    r8              
+    38c0:       5f 42 87 46     mov.b   &0x4687,r15     
+    38c4:       08 df           bis     r15,    r8      
+    38c6:       12 c3           clrc                    
+    38c8:       08 10           rrc     r8              
+    38ca:       09 43           clr     r9              
+    38cc:       09 98           cmp     r8,     r9      
+    38ce:       80 2f           jc      $-254           ;abs 0x37d0
+    38d0:       39 b0 07 00     bit     #7,     r9      ;#CRCRESR_L
+    38d4:       0b 20           jnz     $+24            ;abs 0x38ec
+    38d6:       7f 40 0a 00     mov.b   #10,    r15     ;#0x000a
+    38da:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    38de:       0f 4b           mov     r11,    r15     
+    38e0:       b0 12 fe 3e     call    #printHexWord   ;#0x3efe 
+    38e4:       3f 40 bf 35     mov     #13759, r15     ;#0x35bf
+    38e8:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    38ec:       0f 4b           mov     r11,    r15     
+    38ee:       2b 53           incd    r11             
+    38f0:       2f 4f           mov     @r15,   r15     
+    38f2:       b0 12 fe 3e     call    #printHexWord   ;#0x3efe 
+    38f6:       19 53           inc     r9              
+    38f8:       09 98           cmp     r8,     r9      
+    38fa:       ea 2b           jnc     $-42            ;abs 0x38d0
+    38fc:       69 3f           jmp     $-300           ;abs 0x37d0
+    38fe:       2f 4b           mov     @r11,   r15     
+    3900:       b0 12 fe 3e     call    #printHexWord   ;#0x3efe 
+    3904:       65 3f           jmp     $-308           ;abs 0x37d0
+    3906:       1f 42 40 26     mov     &0x2640,r15     
+    390a:       b0 12 fe 3e     call    #printHexWord   ;#0x3efe 
+    390e:       1f 42 42 26     mov     &0x2642,r15     
+    3912:       b0 12 fe 3e     call    #printHexWord   ;#0x3efe 
+    3916:       1f 42 44 26     mov     &0x2644,r15     
+    391a:       b0 12 fe 3e     call    #printHexWord   ;#0x3efe 
+    391e:       1f 42 46 26     mov     &0x2646,r15     
+    3922:       ee 3f           jmp     $-34            ;abs 0x3900
+    3924:       3f 40 c2 35     mov     #13762, r15     ;#0x35c2
+    3928:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    392c:       b0 12 24 32     call    #waitForUARTEmpty ;#0x3224 
+    3930:       32 c2           dint                    
+    3932:       82 43 00 22     mov     #0,     &UART0_CR       ;r3 As==00
+    3936:       b2 40 00 02     mov     #512,   &TMR0_CR        ;#0x0200
+    393a:       00 1c 
+    393c:       b2 40 f0 00     mov     #240,   &SPI0_CR        ;#0x00f0
+    3940:       00 20 
+    3942:       30 40 ac 30     br      #0x30ac 
+    3946:       44 3f           jmp     $-374           ;abs 0x37d0
+    3948:       3f 40 dc 35     mov     #13788, r15     ;#0x35dc
+    394c:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    3950:       b0 12 24 32     call    #waitForUARTEmpty ;#0x3224 
+    3954:       32 c2           dint                    
+    3956:       82 43 00 22     mov     #0,     &UART0_CR       ;r3 As==00
+    395a:       b2 d0 00 01     bis     #256,   &0x2600 ;#0x0100
+    395e:       00 26 
+    3960:       37 3f           jmp     $-400           ;abs 0x37d0
+    3962:       92 43 74 44     mov     #1,     &0x4474 ;r3 As==01
+    3966:       34 3f           jmp     $-406           ;abs 0x37d0
+    3968:       3e 40 06 00     mov     #6,     r14     ;#CRCRESR_L
+    396c:       3f 40 82 46     mov     #18050, r15     ;#0x4682
+    3970:       b0 12 1c 3f     call    #0x3f1c 
+    3974:       0f 93           tst     r15             
+    3976:       35 23           jnz     $-404           ;abs 0x37e2
+    3978:       59 42 82 46     mov.b   &0x4682,r9      
+    397c:       08 43           clr     r8              
+    397e:       5f 42 83 46     mov.b   &0x4683,r15     
+    3982:       8f 10           swpb    r15             
+    3984:       0a 4f           mov     r15,    r10     
+    3986:       0b 43           clr     r11             
+    3988:       0a d8           bis     r8,     r10     
+    398a:       0b d9           bis     r9,     r11     
+    398c:       5e 42 84 46     mov.b   &0x4684,r14     
+    3990:       0f 43           clr     r15             
+    3992:       0a de           bis     r14,    r10     
+    3994:       0b df           bis     r15,    r11     
+    3996:       2e 42           mov     #4,     r14     ;r2 As==10
+    3998:       3f 40 89 46     mov     #18057, r15     ;#0x4689
+    399c:       b0 12 1c 3f     call    #0x3f1c 
+    39a0:       0f 93           tst     r15             
+    39a2:       32 20           jnz     $+102           ;abs 0x3a08
+    39a4:       58 42 89 46     mov.b   &0x4689,r8      
+    39a8:       88 10           swpb    r8              
+    39aa:       5f 42 8a 46     mov.b   &0x468a,r15     
+    39ae:       08 df           bis     r15,    r8      
+    39b0:       0c 48           mov     r8,     r12     
+    39b2:       3d 40 9e 4b     mov     #19358, r13     ;#0x4b9e
+    39b6:       0e 4a           mov     r10,    r14     
+    39b8:       0f 4b           mov     r11,    r15     
+    39ba:       b0 12 de 3b     call    #readFlash      ;#0x3bde 
+    39be:       09 43           clr     r9              
+    39c0:       09 98           cmp     r8,     r9      
+    39c2:       06 2f           jc      $-498           ;abs 0x37d0
+    39c4:       39 b0 0f 00     bit     #15,    r9      ;#0x000f
+    39c8:       13 20           jnz     $+40            ;abs 0x39f0
+    39ca:       7f 40 0a 00     mov.b   #10,    r15     ;#0x000a
+    39ce:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    39d2:       0e 4b           mov     r11,    r14     
+    39d4:       0f 43           clr     r15             
+    39d6:       0f 4e           mov     r14,    r15     
+    39d8:       b0 12 e4 3e     call    #0x3ee4 
+    39dc:       0f 4a           mov     r10,    r15     
+    39de:       b0 12 fe 3e     call    #printHexWord   ;#0x3efe 
+    39e2:       3f 40 bf 35     mov     #13759, r15     ;#0x35bf
+    39e6:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    39ea:       3a 50 10 00     add     #16,    r10     ;#AES_STATE_SIZE
+    39ee:       0b 63           adc     r11             
+    39f0:       5f 49 9e 4b     mov.b   19358(r9),r15   ;0x4b9e(r9)
+    39f4:       b0 12 e4 3e     call    #0x3ee4 
+    39f8:       7f 40 20 00     mov.b   #32,    r15     ;#AES_KEY_SIZE
+    39fc:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3a00:       19 53           inc     r9              
+    3a02:       09 98           cmp     r8,     r9      
+    3a04:       df 2b           jnc     $-64            ;abs 0x39c4
+    3a06:       e4 3e           jmp     $-566           ;abs 0x37d0
+    3a08:       18 43           mov     #1,     r8      ;r3 As==01
+    3a0a:       d2 3f           jmp     $-90            ;abs 0x39b0
+    3a0c:       a2 83 72 44     decd    &0x4472 
+    3a10:       7f 40 20 00     mov.b   #32,    r15     ;#AES_KEY_SIZE
+    3a14:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3a18:       7f 42           mov.b   #8,     r15     ;r2 As==11
+    3a1a:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3a1e:       a3 3e           jmp     $-696           ;abs 0x3766
+    3a20:       38 41           pop     r8              
+    3a22:       39 41           pop     r9              
+    3a24:       3a 41           pop     r10             
+    3a26:       3b 41           pop     r11             
+    3a28:       30 41           ret                     
+;end readPacket
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+instantcrc:
+    3a2a:       7f f3           and.b   #-1,    r15     ;r3 As==11
+    3a2c:       8f 10           swpb    r15             
+    3a2e:       1f e2 52 40     xor     &crc, r15       ;&0x4052,r15     
+    3a32:       82 4f 52 40     mov     r15,    &crc    ;&0x4052 
+    3a36:       3e 40 07 00     mov     #7,     r14     ;#CRCRESR_L
+    3a3a:       0f 93           tst     r15             
+    3a3c:       08 34           jge     $+18            ;abs 0x3a4e
+    3a3e:       0f 5f           rla     r15             
+    3a40:       3f e0 21 10     xor     #4129,  r15     ;#0x1021
+    3a44:       3e 53           add     #-1,    r14     ;r3 As==11
+    3a46:       3e b0 00 80     bit     #-32768,r14     ;#0x8000
+    3a4a:       f7 37           jge     $-16            ;abs 0x3a3a
+    3a4c:       02 3c           jmp     $+6             ;abs 0x3a52
+    3a4e:       0f 5f           rla     r15             
+    3a50:       f9 3f           jmp     $-12            ;abs 0x3a44
+    3a52:       82 4f 52 40     mov     r15,    &crc    ;&0x4052 
+    3a56:       30 41           ret                     
+;end instantcrc
+;-----------------------------------------------------------------------
+
+
+
+
+;-----------------------------------------------------------------------
+comparecrc:
+    3a58:       0c 4f           mov     r15,    r12     
+    3a5a:       0c 5e           add     r14,    r12     
+    3a5c:       5f 4c ff ff     mov.b   -1(r12),r15     ;0xffff(r12)
+    3a60:       8f 10           swpb    r15             
+    3a62:       6e 4c           mov.b   @r12,   r14     
+    3a64:       0f 5e           add     r14,    r15     
+    3a66:       0d 9f           cmp     r15,    r13     
+    3a68:       02 24           jz      $+6             ;abs 0x3a6e
+    3a6a:       0f 43           clr     r15             
+    3a6c:       30 41           ret                     
+    3a6e:       1f 43           mov     #1,     r15     ;r3 As==01
+    3a70:       30 41           ret                     
+;end comparecrc
+;-----------------------------------------------------------------------
+
+
+
+
+;-----------------------------------------------------------------------
+readLine:
+    3a72:       0b 12           push    r11             
+    3a74:       0a 12           push    r10             
+    3a76:       09 12           push    r9              
+    3a78:       08 12           push    r8              
+    3a7a:       07 12           push    r7              
+    3a7c:       07 4f           mov     r15,    r7      
+    3a7e:       0a 4e           mov     r14,    r10     
+    3a80:       82 93 10 40     tst     &readLineInProgress ;&0x4010 
+    3a84:       05 24           jz      $+12            ;abs 0x3a90
+    3a86:       82 43 10 40     mov     #0,     &readLineInProgress ;&0x4010 ;r3 As==00
+    3a8a:       b2 40 05 00     mov     #5,     &error  ;&0x457a ;#CRCINIRES_L
+    3a8e:       7a 45 
+    3a90:       82 93 7a 45     tst     &error          ;&0x457a 
+    3a94:       91 20           jnz     $+292           ;abs 0x3bb8
+    3a96:       92 43 10 40     mov     #1,     &readLineInProgress ;&0x4010 ;r3 As==01
+    3a9a:       3a 53           add     #-1,    r10     ;r3 As==11
+    3a9c:       38 40 03 00     mov     #3,     r8      ;#0x0003
+    3aa0:       08 9a           cmp     r10,    r8      
+    3aa2:       18 2c           jc      $+50            ;abs 0x3ad4
+    3aa4:       0f 47           mov     r7,     r15     
+    3aa6:       0f 58           add     r8,     r15     
+    3aa8:       6e 4f           mov.b   @r15,   r14     
+    3aaa:       7e 90 0a 00     cmp.b   #10,    r14     ;#0x000a
+    3aae:       15 24           jz      $+44            ;abs 0x3ada
+    3ab0:       7e 90 0d 00     cmp.b   #13,    r14     ;#0x000d
+    3ab4:       12 24           jz      $+38            ;abs 0x3ada
+    3ab6:       7e 90 3a 00     cmp.b   #58,    r14     ;#0x003a
+    3aba:       06 24           jz      $+14            ;abs 0x3ac8
+    3abc:       1f 42 0e 40     mov     &length, r15    ;&0x400e,r15     
+    3ac0:       cf 4e 12 40     mov.b   r14,    16402(r15);0x4012(r15)
+    3ac4:       92 53 0e 40     inc     &length         ;&0x400e 
+    3ac8:       82 93 6e 44     tst     &end            ;&0x446e 
+    3acc:       03 20           jnz     $+8             ;abs 0x3ad4
+    3ace:       18 53           inc     r8              
+    3ad0:       08 9a           cmp     r10,    r8      
+    3ad2:       e8 2b           jnc     $-46            ;abs 0x3aa4
+    3ad4:       82 43 10 40     mov     #0,     &readLineInProgress ;&0x4010 ;r3 As==00
+    3ad8:       6f 3c           jmp     $+224           ;abs 0x3bb8
+    3ada:       1e 42 0e 40     mov     &length, r14    ;&0x400e,r14     
+    3ade:       0e 93           tst     r14             
+    3ae0:       f3 27           jz      $-24            ;abs 0x3ac8
+    3ae2:       92 53 02 40     inc     &0x4002 
+    3ae6:       82 93 7a 45     tst     &error          ;&0x457a 
+    3aea:       f4 23           jnz     $-22            ;abs 0x3ad4
+    3aec:       3f 40 12 40     mov     #line, r15      ;#16402, r15     ;#0x4012
+    3af0:       b0 12 1c 3f     call    #0x3f1c 
+    3af4:       0f 93           tst     r15             
+    3af6:       05 24           jz      $+12            ;abs 0x3b02
+    3af8:       a2 43 7a 45     mov     #2,     &error  ;&0x457a ;r3 As==10
+    3afc:       82 43 0e 40     mov     #0,     &length ;&0x400e ;r3 As==00
+    3b00:       e3 3f           jmp     $-56            ;abs 0x3ac8
+    3b02:       59 42 12 40     mov.b   &line, r9       ;&0x4012,r9      
+    3b06:       4e 49           mov.b   r9,     r14     
+    3b08:       1d 42 0e 40     mov     &length, r13    ;&0x400e,r13     
+    3b0c:       3d 50 f6 ff     add     #-10,   r13     ;#0xfff6
+    3b10:       0f 4d           mov     r13,    r15     
+    3b12:       12 c3           clrc                    
+    3b14:       0f 10           rrc     r15             
+    3b16:       3d 50 0a 00     add     #10,    r13     ;#0x000a
+    3b1a:       0e 9f           cmp     r15,    r14     
+    3b1c:       04 24           jz      $+10            ;abs 0x3b26
+    3b1e:       b2 40 03 00     mov     #3,     &error  ;&0x457a ;#0x0003
+    3b22:       7a 45 
+    3b24:       eb 3f           jmp     $-40            ;abs 0x3afc
+    3b26:       0b 43           clr     r11             
+    3b28:       0c 43           clr     r12             
+    3b2a:       0e 4d           mov     r13,    r14     
+    3b2c:       3e 53           add     #-1,    r14     ;r3 As==11
+    3b2e:       0f 4e           mov     r14,    r15     
+    3b30:       12 c3           clrc                    
+    3b32:       0f 10           rrc     r15             
+    3b34:       0c 9f           cmp     r15,    r12     
+    3b36:       0b 2c           jc      $+24            ;abs 0x3b4e
+    3b38:       3d 40 12 40     mov     #line, r13      ;#16402, r13     ;#0x4012
+    3b3c:       6f 4d           mov.b   @r13,   r15     
+    3b3e:       1d 53           inc     r13             
+    3b40:       0b 5f           add     r15,    r11     
+    3b42:       1c 53           inc     r12             
+    3b44:       0f 4e           mov     r14,    r15     
+    3b46:       12 c3           clrc                    
+    3b48:       0f 10           rrc     r15             
+    3b4a:       0c 9f           cmp     r15,    r12     
+    3b4c:       f7 2b           jnc     $-16            ;abs 0x3b3c
+    3b4e:       0e 4b           mov     r11,    r14     
+    3b50:       7e f3           and.b   #-1,    r14     ;r3 As==11
+    3b52:       5f 4c 12 40     mov.b   16402(r12),r15  ;0x4012(r12)
+    3b56:       3f 53           add     #-1,    r15     ;r3 As==11
+    3b58:       3f e3           inv     r15             
+    3b5a:       7f f3           and.b   #-1,    r15     ;r3 As==11
+    3b5c:       0e 9f           cmp     r15,    r14     
+    3b5e:       03 24           jz      $+8             ;abs 0x3b66
+    3b60:       a2 42 7a 45     mov     #4,     &error  ;&0x457a ;r2 As==10
+    3b64:       cb 3f           jmp     $-104           ;abs 0x3afc
+    3b66:       5f 42 15 40     mov.b   &0x4015,r15     
+    3b6a:       6f 93           cmp.b   #2,     r15     ;r3 As==10
+    3b6c:       0b 2c           jc      $+24            ;abs 0x3b84
+    3b6e:       5f 93           cmp.b   #1,     r15     ;r3 As==01
+    3b70:       06 24           jz      $+14            ;abs 0x3b7e
+    3b72:       4f 49           mov.b   r9,     r15     
+    3b74:       82 5f 08 40     add     r15,    &0x4008 
+    3b78:       b0 12 40 3d     call    #0x3d40 
+    3b7c:       bf 3f           jmp     $-128           ;abs 0x3afc
+    3b7e:       92 43 6e 44     mov     #1,     &end    ;&0x446e ;r3 As==01
+    3b82:       fa 3f           jmp     $-10            ;abs 0x3b78
+    3b84:       6f 93           cmp.b   #2,     r15     ;r3 As==10
+    3b86:       08 24           jz      $+18            ;abs 0x3b98
+    3b88:       6f 92           cmp.b   #4,     r15     ;r2 As==10
+    3b8a:       b8 23           jnz     $-142           ;abs 0x3afc
+    3b8c:       5f 42 17 40     mov.b   &0x4017,r15     
+    3b90:       8f 10           swpb    r15             
+    3b92:       82 4f 0c 40     mov     r15,    &0x400c 
+    3b96:       b2 3f           jmp     $-154           ;abs 0x3afc
+    3b98:       5f 42 16 40     mov.b   &0x4016,r15     
+    3b9c:       0f 5f           rla     r15             
+    3b9e:       0f 5f           rla     r15             
+    3ba0:       0f 5f           rla     r15             
+    3ba2:       0f 5f           rla     r15             
+    3ba4:       5e 42 17 40     mov.b   &0x4017,r14     
+    3ba8:       12 c3           clrc                    
+    3baa:       4e 10           rrc.b   r14             
+    3bac:       4e 11           rra.b   r14             
+    3bae:       4e 11           rra.b   r14             
+    3bb0:       4e 11           rra.b   r14             
+    3bb2:       7e f3           and.b   #-1,    r14     ;r3 As==11
+    3bb4:       0f 5e           add     r14,    r15     
+    3bb6:       ed 3f           jmp     $-36            ;abs 0x3b92
+    3bb8:       37 41           pop     r7              
+    3bba:       38 41           pop     r8              
+    3bbc:       39 41           pop     r9              
+    3bbe:       3a 41           pop     r10             
+    3bc0:       3b 41           pop     r11             
+    3bc2:       30 41           ret                     
+;end readLine
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+SPISend_TDRE:
+    3bc4:       0e 4f           mov     r15,    r14     
+    3bc6:       92 b3 06 20     bit     #1,     &SPI0_SR        ;r3 As==01
+    3bca:       fd 27           jz      $-4             ;abs 0x3bc6
+    3bcc:       82 4e 04 20     mov     r14,    &SPI0_TDR       
+    3bd0:       30 41           ret                     
+;end SPISend_TDRE
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+SPISend_TXEMPTY
+    3bd2:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3bd6:       a2 b3 06 20     bit     #2,     &SPI0_SR        ;r3 As==10
+    3bda:       fd 27           jz      $-4             ;abs 0x3bd6
+    3bdc:       30 41           ret                     
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+readFlash:
+    3bde:       0b 12           push    r11             
+    3be0:       0a 12           push    r10             
+    3be2:       09 12           push    r9              
+    3be4:       08 12           push    r8              
+    3be6:       0a 4e           mov     r14,    r10     
+    3be8:       0b 4f           mov     r15,    r11     
+    3bea:       08 4d           mov     r13,    r8      
+    3bec:       09 4c           mov     r12,    r9      
+    3bee:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+    3bf2:       3f 40 00 03     mov     #768,   r15     ;#0x0300
+    3bf6:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3bfa:       0e 4a           mov     r10,    r14     
+    3bfc:       0f 4b           mov     r11,    r15     
+    3bfe:       8e 10           swpb    r14             
+    3c00:       8f 10           swpb    r15             
+    3c02:       4e ef           xor.b   r15,    r14     
+    3c04:       0e ef           xor     r15,    r14     
+    3c06:       7f f3           and.b   #-1,    r15     ;r3 As==11
+    3c08:       0f 4e           mov     r14,    r15     
+    3c0a:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3c0e:       0f 4a           mov     r10,    r15     
+    3c10:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3c14:       0f 4a           mov     r10,    r15     
+    3c16:       7f f3           and.b   #-1,    r15     ;r3 As==11
+    3c18:       8f 10           swpb    r15             
+    3c1a:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3c1e:       0f 43           clr     r15             
+    3c20:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3c24:       0f 43           clr     r15             
+    3c26:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3c2a:       1f 42 02 20     mov     &SPI0_RDR,r15   
+    3c2e:       c8 4f 00 00     mov.b   r15,    0(r8)   ;CRCDI_L(r8)
+    3c32:       18 53           inc     r8              
+    3c34:       39 53           add     #-1,    r9      ;r3 As==11
+    3c36:       f6 23           jnz     $-18            ;abs 0x3c24
+    3c38:       a2 b3 06 20     bit     #2,     &SPI0_SR        ;r3 As==10
+    3c3c:       fd 27           jz      $-4             ;abs 0x3c38
+    3c3e:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+    3c42:       38 41           pop     r8              
+    3c44:       39 41           pop     r9              
+    3c46:       3a 41           pop     r10             
+    3c48:       3b 41           pop     r11             
+    3c4a:       30 41           ret                     
+;end readFlash
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+waitForFlash:
+    3c4c:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+    3c50:       3f 40 00 05     mov     #1280,  r15     ;#0x0500
+    3c54:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3c58:       0f 43           clr     r15             
+    3c5a:       b0 12 d2 3b     call    #SPISend_TXEMPTY ;#0x3bd2 
+    3c5e:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+    3c62:       92 b3 02 20     bit     #1,     &SPI0_RDR       ;r3 As==01
+    3c66:       f2 23           jnz     $-26            ;abs 0x3c4c
+    3c68:       30 41           ret                     
+;end waitForFlash
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+EnableWriting:
+    3c6a:       b0 12 4c 3c     call    #waitForFlash   ;#0x3c4c 
+    3c6e:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+    3c72:       3f 40 00 06     mov     #1536,  r15     ;#0x0600
+    3c76:       b0 12 d2 3b     call    #SPISend_TXEMPTY ;#0x3bd2 
+    3c7a:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+    3c7e:       30 41           ret                     
+;end EnableWriting
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+writeFlash:
+    3c80:       0b 12           push    r11             
+    3c82:       0a 12           push    r10             
+    3c84:       09 12           push    r9              
+    3c86:       21 82           sub     #4,sp   ;r2 As==10
+    3c88:       0e 41           movsp,  r14     
+    3c8a:       0f 41           movsp,  r15     
+    3c8c:       2f 53           incd    r15             
+    3c8e:       b0 12 fc 3c     call    #checkForPageD  ;#0x3cfc 
+    3c92:       09 4f           mov     r15,    r9      
+    3c94:       a1 91 02 00     cmp     sp,     2sp)    ;CRCDIRB_Hsp)
+    3c98:       2c 24           jz      $+90            ;abs 0x3cf2
+    3c9a:       b0 12 6a 3c     call    #Enable Writing ;#0x3c6a 
+    3c9e:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+    3ca2:       3f 40 00 0a     mov     #2560,  r15     ;#0x0a00
+    3ca6:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3caa:       1f 42 06 40     mov     &pageAdr, r15   ;&0x4006,r15     
+    3cae:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3cb2:       5f 42 06 40     mov.b   &pageAdr, r15   ;&0x4006,r15     
+    3cb6:       8f 10           swpb    r15             
+    3cb8:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3cbc:       5f 41 02 00     mov.b   2sp),   r15     ;CRCDIRB_Hsp)
+    3cc0:       8f 10           swpb    r15             
+    3cc2:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3cc6:       1b 41 02 00     mov     2sp),   r11     ;CRCDIRB_Hsp)
+    3cca:       2b 91           cmp     sp,     r11     
+    3ccc:       0b 34           jge     $+24            ;abs 0x3ce4
+    3cce:       0a 4b           mov     r11,    r10     
+    3cd0:       3a 50 7c 45     add     #17788, r10     ;#0x457c
+    3cd4:       6f 4a           mov.b   @r10,   r15     
+    3cd6:       1a 53           inc     r10             
+    3cd8:       8f 10           swpb    r15             
+    3cda:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3cde:       1b 53           inc     r11             
+    3ce0:       2b 91           cmp     sp,     r11     
+    3ce2:       f8 3b           jl      $-14            ;abs 0x3cd4
+    3ce4:       a2 b3 06 20     bit     #2,     &SPI0_SR        ;r3 As==10
+    3ce8:       fd 27           jz      $-4             ;abs 0x3ce4
+    3cea:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+    3cee:       09 93           tst     r9              
+    3cf0:       cb 27           jz      $-104           ;abs 0x3c88
+    3cf2:       21 52           add     #4,sp   ;r2 As==10
+    3cf4:       39 41           pop     r9              
+    3cf6:       3a 41           pop     r10             
+    3cf8:       3b 41           pop     r11             
+    3cfa:       30 41           ret                     
+;end writeFlash
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+checkForPageD:
+    3cfc:       0d 43           clr     r13             
+    3cfe:       cd 93 9a 4a     tst.b   19098(r13)      ;0x4a9a(r13)
+    3d02:       04 20           jnz     $+10            ;abs 0x3d0c
+    3d04:       1d 53           inc     r13             
+    3d06:       3d 90 00 01     cmp     #256,   r13     ;#0x0100
+    3d0a:       f9 3b           jl      $-12            ;abs 0x3cfe
+    3d0c:       8f 4d 00 00     mov     r13,    0(r15)  ;CRCDI_L(r15)
+    3d10:       3d 90 00 01     cmp     #256,   r13     ;#0x0100
+    3d14:       0c 34           jge     $+26            ;abs 0x3d2e
+    3d16:       0f 4d           mov     r13,    r15     
+    3d18:       3f 50 9a 4a     add     #19098, r15     ;#0x4a9a
+    3d1c:       cf 93 00 00     tst.b   0(r15)          ;CRCDI_L(r15)
+    3d20:       06 24           jz      $+14            ;abs 0x3d2e
+    3d22:       cf 43 00 00     mov.b   #0,     0(r15)  ;r3 As==00, CRCDI_L(r15)
+    3d26:       1d 53           inc     r13             
+    3d28:       3d 90 00 01     cmp     #256,   r13     ;#0x0100
+    3d2c:       f4 3b           jl      $-22            ;abs 0x3d16
+    3d2e:       8e 4d 00 00     mov     r13,    0(r14)  ;CRCDI_L(r14)
+    3d32:       3d 90 00 01     cmp     #256,   r13     ;#0x0100
+    3d36:       02 24           jz      $+6             ;abs 0x3d3c
+    3d38:       0f 43           clr     r15             
+    3d3a:       30 41           ret                     
+    3d3c:       1f 43           mov     #1,     r15     ;r3 As==01
+    3d3e:       30 41           ret                     
+;end checkForPageD
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+writePage:
+    3d40:       0b 12           push    r11             
+    3d42:       92 93 9a 4b     cmp     #1,     &start  ;&0x4b9a ;r3 As==01
+    3d46:       40 24           jz      $+130           ;abs 0x3dc8
+    3d48:       92 93 6e 44     cmp     #1,     &end    ;&0x446e ;r3 As==01
+    3d4c:       36 24           jz      $+110           ;abs 0x3dba
+    3d4e:       5f 42 13 40     mov.b   &0x4013,r15     
+    3d52:       1f 52 0c 40     add     &0x400c,r15     
+    3d56:       82 9f 06 40     cmp     r15,    &pageAdr ;&0x4006 
+    3d5a:       0a 24           jz      $+22            ;abs 0x3d70
+    3d5c:       b0 12 80 3c     call    #writeFlash     ;#0x3c80 
+    3d60:       b0 12 de 3d     call    #erasePage      ;#0x3dde 
+    3d64:       5f 42 13 40     mov.b   &0x4013,r15     
+    3d68:       1f 52 0c 40     add     &0x400c,r15     
+    3d6c:       82 4f 06 40     mov     r15,    &pageAdr ;&0x4006 
+    3d70:       5e 42 14 40     mov.b   &0x4014,r14     
+    3d74:       2b 42           mov     #4,     r11     ;r2 As==10
+    3d76:       3d 40 12 40     mov     #line, r13      ;#16402, r13     ;#0x4012
+    3d7a:       5f 42 12 40     mov.b   &line, r15      ;&0x4012,r15     
+    3d7e:       2f 52           add     #4,     r15     ;r2 As==10
+    3d80:       0b 9f           cmp     r15,    r11     
+    3d82:       2b 34           jge     $+88            ;abs 0x3dda
+    3d84:       0f 4b           mov     r11,    r15     
+    3d86:       0f 5d           add     r13,    r15     
+    3d88:       ee 4f 7c 45     mov.b   @r15,   17788(r14);0x457c(r14)
+    3d8c:       de 43 9a 4a     mov.b   #1,     19098(r14);r3 As==01, 0x4a9a(r14)
+    3d90:       3e 90 ff 00     cmp     #255,   r14     ;#0x00ff
+    3d94:       0a 24           jz      $+22            ;abs 0x3daa
+    3d96:       1e 53           inc     r14             
+    3d98:       1b 53           inc     r11             
+    3d9a:       3d 40 12 40     mov     #line, r13      ;#16402, r13     ;#0x4012
+    3d9e:       5f 42 12 40     mov.b   &line, r15      ;&0x4012,r15     
+    3da2:       2f 52           add     #4,     r15     ;r2 As==10
+    3da4:       0b 9f           cmp     r15,    r11     
+    3da6:       ee 3b           jl      $-34            ;abs 0x3d84
+    3da8:       18 3c           jmp     $+50            ;abs 0x3dda
+    3daa:       b0 12 80 3c     call    #writeFlash     ;#0x3c80 
+    3dae:       b0 12 de 3d     call    #erasePage      ;#0x3dde 
+    3db2:       3e 43           mov     #-1,    r14     ;r3 As==11
+    3db4:       92 53 06 40     inc     &pageAdr        ;&0x4006 
+    3db8:       ee 3f           jmp     $-34            ;abs 0x3d96
+    3dba:       b0 12 80 3c     call    #writeFlash     ;#0x3c80 
+    3dbe:       b0 12 de 3d     call    #erasePage      ;#0x3dde 
+    3dc2:       92 43 7a 45     mov     #1,     &error  ;&0x457a ;r3 As==01
+    3dc6:       09 3c           jmp     $+20            ;abs 0x3dda
+    3dc8:       5f 42 13 40     mov.b   &0x4013,r15     
+    3dcc:       1f 52 0c 40     add     &0x400c,r15     
+    3dd0:       82 4f 06 40     mov     r15,    &pageAdr  ;&0x4006 
+    3dd4:       82 43 9a 4b     mov     #0,     &start  ;&0x4b9a ;r3 As==00
+    3dd8:       b7 3f           jmp     $-144           ;abs 0x3d48
+    3dda:       3b 41           pop     r11             
+    3ddc:       30 41           ret                     
+;end writePage
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+erasePage:
+    3dde:       0f 43           clr     r15             
+    3de0:       cf 43 9a 4a     mov.b   #0,     19098(r15);r3 As==00, 0x4a9a(r15)
+    3de4:       1f 53           inc     r15             
+    3de6:       3f 90 00 01     cmp     #256,   r15     ;#0x0100
+    3dea:       fa 3b           jl      $-10            ;abs 0x3de0
+    3dec:       30 41           ret                     
+;end erasePage
+;-----------------------------------------------------------------------
+
+
+
+    3dee:       0a 53           add     #0,     r10     ;r3 As==00
+    3df0:       65 63           addc.b  #2,     r5      ;r3 As==10
+    3df2:       74 6f           addc.b  @r15+,  r4      
+    3df4:       72 20           jnz     $+230           ;abs 0x3eda
+    3df6:       00 20           jnz     $+2             ;abs 0x3df8
+    3df8:       45 72           subc.bsr,       r5      
+    3dfa:       61 73           subc.b  #2,sp   ;r3 As==10
+    3dfc:       65 64           addc.b  @r4,    r5      
+    3dfe:       00 00           bra     pc              
+
+
+;-----------------------------------------------------------------------
+eraseSector:
+    3e00:       0b 12           push    r11             
+    3e02:       0b 4f           mov     r15,    r11     
+    3e04:       b0 12 6a 3c     call    #EnableWriting ;#0x3c6a 
+    3e08:       92 c3 08 1a     bic     #1,     &PAOUT  ;r3 As==01
+    3e0c:       3f 40 00 d8     mov     #-10240,r15     ;#0xd800
+    3e10:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3e14:       0f 4b           mov     r11,    r15     
+    3e16:       7f f3           and.b   #-1,    r15     ;r3 As==11
+    3e18:       8f 10           swpb    r15             
+    3e1a:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3e1e:       0f 43           clr     r15             
+    3e20:       b0 12 c4 3b     call    #SPISend_TDRE   ;#0x3bc4 
+    3e24:       0f 43           clr     r15             
+    3e26:       b0 12 d2 3b     call    #SPISend_TXEMPTY ;#0x3bd2 
+    3e2a:       92 d3 08 1a     bis     #1,     &PAOUT  ;r3 As==01
+    3e2e:       b0 12 4c 3c     call    #waitForFlash   ;#0x3c4c 
+    3e32:       3f 40 ee 3d     mov     #15854, r15     ;#0x3dee
+    3e36:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    3e3a:       4f 4b           mov.b   r11,    r15     
+    3e3c:       7f 50 30 00     add.b   #48,    r15     ;#0x0030
+    3e40:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3e44:       3f 40 f7 3d     mov     #15863, r15     ;#0x3df7
+    3e48:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    3e4c:       3b 41           pop     r11             
+    3e4e:       30 41           ret                     
+;end eraseSector
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+printNumber:
+    3e50:       0b 12           push    r11             
+    3e52:       0a 12           push    r10             
+    3e54:       09 12           push    r9              
+    3e56:       08 12           push    r8              
+    3e58:       07 12           push    r7              
+    3e5a:       06 12           push    r6              
+    3e5c:       31 82           sub     #8,sp   ;r2 As==11
+    3e5e:       07 4f           mov     r15,    r7      
+    3e60:       08 4f           mov     r15,    r8      
+    3e62:       0f 93           tst     r15             
+    3e64:       24 38           jl      $+74            ;abs 0x3eae
+    3e66:       f1 40 20 00     mov.b   #32,    7sp)    ;#AES_KEY_SIZE, CRCRESR_Lsp)
+    3e6a:       07 00 
+    3e6c:       c1 43 08 00     mov.b   #0,     8sp)    ;r3 As==00, 0x0008sp)
+    3e70:       36 40 06 00     mov     #6,     r6      ;#CRCRESR_L
+    3e74:       0c 48           mov     r8,     r12     
+    3e76:       3a 40 0a 00     mov     #10,    r10     ;#0x000a
+    3e7a:       b0 12 c2 3f     call    #modulus        ;#0x3fc2 
+    3e7e:       09 4e           mov     r14,    r9      
+    3e80:       0c 48           mov     r8,     r12     
+    3e82:       3a 40 0a 00     mov     #10,    r10     ;#0x000a
+    3e86:       b0 12 c2 3f     call    #modulus        ;#0x3fc2 
+    3e8a:       08 4c           mov     r12,    r8      
+    3e8c:       0f 46           mov     r6,     r15     
+    3e8e:       0f 51           addsp,  r15     
+    3e90:       79 50 30 00     add.b   #48,    r9      ;#0x0030
+    3e94:       cf 49 00 00     mov.b   r9,     0(r15)  ;CRCDI_L(r15)
+    3e98:       36 53           add     #-1,    r6      ;r3 As==11
+    3e9a:       0c 93           tst     r12             
+    3e9c:       eb 23           jnz     $-40            ;abs 0x3e74
+    3e9e:       16 53           inc     r6              
+    3ea0:       07 93           tst     r7              
+    3ea2:       08 34           jge     $+18            ;abs 0x3eb4
+    3ea4:       7f 40 2d 00     mov.b   #45,    r15     ;#0x002d
+    3ea8:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3eac:       03 3c           jmp     $+8             ;abs 0x3eb4
+    3eae:       38 e3           inv     r8              
+    3eb0:       18 53           inc     r8              
+    3eb2:       d9 3f           jmp     $-76            ;abs 0x3e66
+    3eb4:       0f 41           movsp,  r15     
+    3eb6:       0f 56           add     r6,     r15     
+    3eb8:       b0 12 ea 32     call    #PrintString ;0x32ea 
+    3ebc:       31 52           add     #8,sp   ;r2 As==11
+    3ebe:       36 41           pop     r6              
+    3ec0:       37 41           pop     r7              
+    3ec2:       38 41           pop     r8              
+    3ec4:       39 41           pop     r9              
+    3ec6:       3a 41           pop     r10             
+    3ec8:       3b 41           pop     r11             
+    3eca:       30 41           ret                     
+;end printNumber
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+printHexChar:
+    3ecc:       3f f0 0f 00     and     #15,    r15     ;#0x000f
+    3ed0:       3f 90 0a 00     cmp     #10,    r15     ;#0x000a
+    3ed4:       02 38           jl      $+6             ;abs 0x3eda
+    3ed6:       3f 50 07 00     add     #7,     r15     ;#CRCRESR_L
+    3eda:       3f 50 30 00     add     #48,    r15     ;#0x0030
+    3ede:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3ee2:       30 41           ret                     
+;end printHexChar
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+printHexByte:
+    3ee4:       0b 12           push    r11             
+    3ee6:       0b 4f           mov     r15,    r11     
+    3ee8:       0f 11           rra     r15             
+    3eea:       0f 11           rra     r15             
+    3eec:       0f 11           rra     r15             
+    3eee:       0f 11           rra     r15             
+    3ef0:       b0 12 cc 3e     call    #printHexChar   ;#0x3ecc 
+    3ef4:       0f 4b           mov     r11,    r15     
+    3ef6:       b0 12 cc 3e     call    #printHexChar   ;#0x3ecc 
+    3efa:       3b 41           pop     r11             
+    3efc:       30 41           ret                     
+;end printHexByte
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+printHexWord:
+    3efe:       0b 12           push    r11             
+    3f00:       0b 4f           mov     r15,    r11     
+    3f02:       8f 10           swpb    r15             
+    3f04:       8f 11           sxt     r15             
+    3f06:       b0 12 e4 3e     call    #printHexByte   ;#0x3ee4 
+    3f0a:       0f 4b           mov     r11,    r15     
+    3f0c:       b0 12 e4 3e     call    #printHexByte   ;#0x3ee4 
+    3f10:       7f 40 20 00     mov.b   #32,    r15     ;#AES_KEY_SIZE
+    3f14:       b0 12 a8 32     call    #emit           ;#0x32a8 
+    3f18:       3b 41           pop     r11             
+    3f1a:       30 41           ret                     
+;end printHexWord
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+ASCIItoBin:
+    3f1c:       0b 12           push    r11             
+    3f1e:       0a 12           push    r10             
+    3f20:       0b 4f           mov     r15,    r11     
+    3f22:       0a 4e           mov     r14,    r10     
+    3f24:       0c 43           clr     r12             
+    3f26:       0c 9e           cmp     r14,    r12     
+    3f28:       17 2c           jc      $+48            ;abs 0x3f58
+    3f2a:       0f 4b           mov     r11,    r15     
+    3f2c:       0f 5c           add     r12,    r15     
+    3f2e:       6e 4f           mov.b   @r15,   r14     
+    3f30:       4f 4e           mov.b   r14,    r15     
+    3f32:       7f 50 d0 ff     add.b   #-48,   r15     ;#0xffd0
+    3f36:       7f 90 0a 00     cmp.b   #10,    r15     ;#0x000a
+    3f3a:       1d 2c           jc      $+60            ;abs 0x3f76
+    3f3c:       0d 4e           mov     r14,    r13     
+    3f3e:       3d f0 0f 00     and     #15,    r13     ;#0x000f
+    3f42:       1c b3           bit     #1,     r12     ;r3 As==01
+    3f44:       0b 24           jz      $+24            ;abs 0x3f5c
+    3f46:       0f 4c           mov     r12,    r15     
+    3f48:       12 c3           clrc                    
+    3f4a:       0f 10           rrc     r15             
+    3f4c:       0f 5b           add     r11,    r15     
+    3f4e:       cf dd 00 00     bis.b   r13,    0(r15)  ;CRCDI_L(r15)
+    3f52:       1c 53           inc     r12             
+    3f54:       0c 9a           cmp     r10,    r12     
+    3f56:       e9 2b           jnc     $-44            ;abs 0x3f2a
+    3f58:       0f 43           clr     r15             
+    3f5a:       22 3c           jmp     $+70            ;abs 0x3fa0
+    3f5c:       0f 4c           mov     r12,    r15     
+    3f5e:       12 c3           clrc                    
+    3f60:       0f 10           rrc     r15             
+    3f62:       0e 4b           mov     r11,    r14     
+    3f64:       0e 5f           add     r15,    r14     
+    3f66:       4f 4d           mov.b   r13,    r15     
+    3f68:       4f 5f           rla.b   r15             
+    3f6a:       4f 5f           rla.b   r15             
+    3f6c:       4f 5f           rla.b   r15             
+    3f6e:       4f 5f           rla.b   r15             
+    3f70:       ce 4f 00 00     mov.b   r15,    0(r14)  ;CRCDI_L(r14)
+    3f74:       ee 3f           jmp     $-34            ;abs 0x3f52
+    3f76:       4f 4e           mov.b   r14,    r15     
+    3f78:       7f 50 bf ff     add.b   #-65,   r15     ;#0xffbf
+    3f7c:       7f 90 06 00     cmp.b   #6,     r15     ;#CRCRESR_L
+    3f80:       04 2c           jc      $+10            ;abs 0x3f8a
+    3f82:       4d 4e           mov.b   r14,    r13     
+    3f84:       3d 50 c9 ff     add     #-55,   r13     ;#0xffc9
+    3f88:       dc 3f           jmp     $-70            ;abs 0x3f42
+    3f8a:       4f 4e           mov.b   r14,    r15     
+    3f8c:       7f 50 9f ff     add.b   #-97,   r15     ;#0xff9f
+    3f90:       7f 90 06 00     cmp.b   #6,     r15     ;#CRCRESR_L
+    3f94:       04 2c           jc      $+10            ;abs 0x3f9e
+    3f96:       4d 4e           mov.b   r14,    r13     
+    3f98:       3d 50 a9 ff     add     #-87,   r13     ;#0xffa9
+    3f9c:       d2 3f           jmp     $-90            ;abs 0x3f42
+    3f9e:       1f 43           mov     #1,     r15     ;r3 As==01
+    3fa0:       3a 41           pop     r10             
+    3fa2:       3b 41           pop     r11             
+    3fa4:       30 41           ret                     
+;end ASCIItoBin
+;-----------------------------------------------------------------------
+
+
+
+;-----------------------------------------------------------------------
+divide:
+;r12 = divide(r12, r14)
+    3fa6:       0e ee           xor     r14,    r14     
+    3fa8:       3b 40 11 00     mov     #17,    r11     ;#0x0011
+    3fac:       05 3c           jmp     $+12            ;abs 0x3fb8
+    3fae:       0d 10           rrc     r13             
+    3fb0:       0e 6e           rlc     r14             
+    3fb2:       0e 9a           cmp     r10,    r14     
+    3fb4:       01 28           jnc     $+4             ;abs 0x3fb8
+    3fb6:       0e 8a           sub     r10,    r14     
+    3fb8:       0c 6c           rlc     r12             
+    3fba:       0d 6d           rlc     r13             
+    3fbc:       1b 83           dec     r11             
+    3fbe:       f7 23           jnz     $-16            ;abs 0x3fae
+    3fc0:       30 41           ret                     
+;end divide
+;-----------------------------------------------------------------------
+
+
+
+
+
+;-----------------------------------------------------------------------
+modulus:
+    3fc2:       0d 43           clr     r13             
+    3fc4:       3c b0 00 80     bit     #-32768,r12     ;#0x8000
+    3fc8:       03 28           jnc     $+8             ;abs 0x3fd0
+    3fca:       3c e3           inv     r12             
+    3fcc:       1c 53           inc     r12             
+    3fce:       2d d2           bis     #4,     r13     ;r2 As==10
+    3fd0:       3a b0 00 80     bit     #-32768,r10     ;#0x8000
+    3fd4:       03 28           jnc     $+8             ;abs 0x3fdc
+    3fd6:       3a e3           inv     r10             
+    3fd8:       1a 53           inc     r10             
+    3fda:       3d d2           bis     #8,     r13     ;r2 As==11
+    3fdc:       b0 12 a6 3f     call    #divide ;#0x3fa6 
+    3fe0:       0d 10           rrc     r13             
+    3fe2:       2d b2           bit     #4,     r13     ;r2 As==10
+    3fe4:       04 28           jnc     $+10            ;abs 0x3fee
+    3fe6:       3e e3           inv     r14             
+    3fe8:       1e 53           inc     r14             
+    3fea:       3c e3           inv     r12             
+    3fec:       1c 53           inc     r12             
+    3fee:       3d b2           bit     #8,     r13     ;r2 As==11
+    3ff0:       02 28           jnc     $+6             ;abs 0x3ff6
+    3ff2:       3c e3           inv     r12             
+    3ff4:       1c 53           inc     r12             
+    3ff6:       30 41           ret                     
+;end modulus
+;-----------------------------------------------------------------------
+        ...
+