From 386d70de64f36ecb1d561fc62fdf29638a836cbb Mon Sep 17 00:00:00 2001 From: Dan White Date: Thu, 25 Apr 2013 15:20:15 -0500 Subject: [PATCH] copy to do direct boot ROM bugfixes --- rom-bugfix.asm | 2153 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2153 insertions(+) create mode 100644 rom-bugfix.asm diff --git a/rom-bugfix.asm b/rom-bugfix.asm new file mode 100644 index 0000000..e23e554 --- /dev/null +++ b/rom-bugfix.asm @@ -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 +;----------------------------------------------------------------------- + ... + -- 2.25.1