--- /dev/null
+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
+;-----------------------------------------------------------------------
+ ...
+