alsp_node.elf: file format elf32-msp430 SYMBOL TABLE: 00008000 l d .text 00000000 .text 00000200 l d .data 00000000 .data 00000204 l d .bss 00000000 .bss 0000ffe0 l d .vectors 00000000 .vectors 00000000 l d .stab 00000000 .stab 00000000 l d .stabstr 00000000 .stabstr 00000056 l *ABS* 00000000 DCOCTL 00000057 l *ABS* 00000000 BCSCTL1 00000058 l *ABS* 00000000 BCSCTL2 00000053 l *ABS* 00000000 BCSCTL3 00000128 l *ABS* 00000000 FCTL1 0000012a l *ABS* 00000000 FCTL2 0000012c l *ABS* 00000000 FCTL3 00000054 l *ABS* 00000000 EPCTL 0000012e l *ABS* 00000000 TA0IV 00000160 l *ABS* 00000000 TA0CTL 00000170 l *ABS* 00000000 TA0R 00000162 l *ABS* 00000000 TA0CCTL0 00000164 l *ABS* 00000000 TA0CCTL1 00000172 l *ABS* 00000000 TA0CCR0 00000174 l *ABS* 00000000 TA0CCR1 00000166 l *ABS* 00000000 TA0CCTL2 00000176 l *ABS* 00000000 TA0CCR2 0000011e l *ABS* 00000000 TBIV 00000180 l *ABS* 00000000 TBCTL 00000190 l *ABS* 00000000 TBR 00000182 l *ABS* 00000000 TBCCTL0 00000184 l *ABS* 00000000 TBCCTL1 00000186 l *ABS* 00000000 TBCCTL2 00000192 l *ABS* 00000000 TBCCR0 00000194 l *ABS* 00000000 TBCCR1 00000196 l *ABS* 00000000 TBCCR2 00000020 l *ABS* 00000000 P1IN 00000021 l *ABS* 00000000 P1OUT 00000022 l *ABS* 00000000 P1DIR 00000023 l *ABS* 00000000 P1IFG 00000024 l *ABS* 00000000 P1IES 00000025 l *ABS* 00000000 P1IE 00000026 l *ABS* 00000000 P1SEL 00000027 l *ABS* 00000000 P1REN 00000028 l *ABS* 00000000 P2IN 00000029 l *ABS* 00000000 P2OUT 0000002a l *ABS* 00000000 P2DIR 0000002b l *ABS* 00000000 P2IFG 0000002c l *ABS* 00000000 P2IES 0000002d l *ABS* 00000000 P2IE 0000002e l *ABS* 00000000 P2SEL 0000002f l *ABS* 00000000 P2REN 00000018 l *ABS* 00000000 P3IN 00000019 l *ABS* 00000000 P3OUT 0000001a l *ABS* 00000000 P3DIR 0000001b l *ABS* 00000000 P3SEL 00000010 l *ABS* 00000000 P3REN 0000001c l *ABS* 00000000 P4IN 0000001d l *ABS* 00000000 P4OUT 0000001e l *ABS* 00000000 P4DIR 0000001f l *ABS* 00000000 P4SEL 00000011 l *ABS* 00000000 P4REN 00000048 l *ABS* 00000000 ADC10DTC0 00000049 l *ABS* 00000000 ADC10DTC1 0000004a l *ABS* 00000000 ADC10AE0 0000004b l *ABS* 00000000 ADC10AE1 000001b0 l *ABS* 00000000 ADC10CTL0 000001b2 l *ABS* 00000000 ADC10CTL1 000001b4 l *ABS* 00000000 ADC10MEM 000001bc l *ABS* 00000000 ADC10SA 000000c0 l *ABS* 00000000 OA0CTL0 000000c1 l *ABS* 00000000 OA0CTL1 000000c2 l *ABS* 00000000 OA1CTL0 000000c3 l *ABS* 00000000 OA1CTL1 00000060 l *ABS* 00000000 UCA0CTL0 00000061 l *ABS* 00000000 UCA0CTL1 00000062 l *ABS* 00000000 UCA0BR0 00000063 l *ABS* 00000000 UCA0BR1 00000064 l *ABS* 00000000 UCA0MCTL 00000065 l *ABS* 00000000 UCA0STAT 00000066 l *ABS* 00000000 UCA0RXBUF 00000067 l *ABS* 00000000 UCA0TXBUF 0000005d l *ABS* 00000000 UCA0ABCTL 0000005e l *ABS* 00000000 UCA0IRTCTL 0000005f l *ABS* 00000000 UCA0IRRCTL 00000068 l *ABS* 00000000 UCB0CTL0 00000069 l *ABS* 00000000 UCB0CTL1 0000006a l *ABS* 00000000 UCB0BR0 0000006b l *ABS* 00000000 UCB0BR1 0000006c l *ABS* 00000000 UCB0I2CIE 0000006d l *ABS* 00000000 UCB0STAT 0000006e l *ABS* 00000000 UCB0RXBUF 0000006f l *ABS* 00000000 UCB0TXBUF 00000118 l *ABS* 00000000 UCB0I2COA 0000011a l *ABS* 00000000 UCB0I2CSA 00000120 l *ABS* 00000000 WDTCTL 00000000 l *ABS* 00000000 IE1 00000002 l *ABS* 00000000 IFG1 00000001 l *ABS* 00000000 IE2 00000003 l *ABS* 00000000 IFG2 000010f8 l *ABS* 00000000 CALDCO_16MHZ 000010f9 l *ABS* 00000000 CALBC1_16MHZ 000010fa l *ABS* 00000000 CALDCO_12MHZ 000010fb l *ABS* 00000000 CALBC1_12MHZ 000010fc l *ABS* 00000000 CALDCO_8MHZ 000010fd l *ABS* 00000000 CALBC1_8MHZ 000010fe l *ABS* 00000000 CALDCO_1MHZ 000010ff l *ABS* 00000000 CALBC1_1MHZ 00000000 l df *ABS* 00000000 main.c 00000200 l O .data 00000001 make_gdb_happy 00008d8c l .text 00000000 Letext 00000000 l df *ABS* 00000000 spi_hardware.c 00008ed2 l .text 00000000 Letext 00000000 l df *ABS* 00000000 atoi.c 00008fa6 l .text 00000000 Letext 00000000 l df *ABS* 00000000 sprintf.c 00008fbc l .text 00000000 Letext 00000000 l df *ABS* 00000000 vsprintf.c 00008fbc l F .text 00000010 mem_putchar 00000204 l .bss 00000000 mem 00008fe6 l .text 00000000 Letext 00000000 l df *ABS* 00000000 vuprintf.c 00000202 l O .data 00000002 total_len 00008fe6 l F .text 00000030 PRINT 00000206 l .bss 00000000 __write_char 00009016 l F .text 00000034 __write_pad 00009600 l .text 00000000 Letext 00000000 l df *ABS* 00000000 strchr.c 0000961a l .text 00000000 Letext 00000000 l df *ABS* 00000000 memchr.c 0000963e l .text 00000000 Letext 00000000 l df *ABS* 00000000 memcmp.c 0000966e l .text 00000000 Letext 00000000 l df *ABS* 00000000 strstr.c 000096bc l .text 00000000 Letext 00000000 l df *ABS* 00000000 strncmp.c 000096ec l .text 00000000 Letext 00000004 g *ABS* 00000000 __data_size 00008dc2 g F .text 0000005c CCXX_SPI_RDREG 0000970c g .text 00000000 __umulhisi3 00008fcc g F .text 0000001a vsprintf 000081f8 g F .text 0000001e init_UART_SPI 00009710 g .text 00000000 __udivmodhi4 00009758 g .text 00000000 _etext 000081aa g F .text 00000012 sample_adc 0000000e g *ABS* 00000000 __bss_size 00009756 w .text 00000000 __stop_progExec__ 00008030 g .text 00000000 _unexpected_1_ 00008030 w .text 00000000 vector_ffe0 0000813a g F .text 0000005e sys_init 000080c0 g F .text 0000004c tinit 0000805c g F .text 00000020 P2_VEC 00008d8c g F .text 00000036 CCXX_SPI_STROBE 00008030 w .text 00000000 vector_ffec 0000807c g .text 00000000 vector_fff0 00009758 g *ABS* 00000000 __data_load_start 00008030 g .text 00000000 __dtors_end 00008030 w .text 00000000 vector_fffc 00008e1e g F .text 00000048 CCXX_SPI_WRREG 00008aa6 g F .text 0000019e CCXX_WRITE_SPI_RF_SETTINGS 00008036 g .text 00000000 vector_ffe4 00008e66 g F .text 0000006c CCXX_SPI_BURST_WRREG 00000208 g O .bss 00000001 RSSI_DBM 0000ffe0 g O .vectors 00000020 InterruptVectors 00000209 g O .bss 00000001 RSSI 0000961a g F .text 00000024 memchr 0000801c w .text 00000000 __do_clear_bss 0000966e g F .text 0000004e strstr 0000807c g F .text 00000022 TA1_VEC 000081da g F .text 0000001e init_UART_232 000096bc g F .text 00000030 strncmp 000096ec g .text 00000000 __mulsi3 00008030 w .text 00000000 vector_ffe2 00008030 w .text 00000000 vector_ffe8 00008034 w .text 00000000 _unexpected_ 00008030 w .text 00000000 vector_fffa 0000904a g F .text 000005b6 vuprintf 0000963e g F .text 00000030 memcmp 00008198 g F .text 00000012 init_adc 00008036 g F .text 00000026 P1_VEC 00008000 w .text 00000000 _reset_vector__ 00008030 g .text 00000000 __ctors_start 0000800a w .text 00000000 __do_copy_data 000080b4 g F .text 0000000c ADC_VEC 00000204 g .bss 00000000 __bss_start 0000809e g .text 00000000 vector_ffee 00008030 w .text 00000000 vector_fff4 000083b4 g F .text 000006f2 main 00008030 w .text 00000000 vector_fff8 00008030 w .text 00000000 vector_fff2 0000020a g O .bss 00000002 seconds 00010000 g .vectors 00000000 _vectors_end 0000805c g .text 00000000 vector_ffe6 0000810c g F .text 0000002e delay 00008d42 g F .text 0000004a TX_STRING 00008fa6 g F .text 00000016 sprintf 0000020c g O .bss 00000001 LQI 0000809e g F .text 00000016 RX_VEC 00008c6e g F .text 000000d4 RX_STRING 00008000 w .text 00000000 __init_stack 0000020d g O .bss 00000001 PKTSTATUS 00008030 g .text 00000000 __dtors_start 00008030 g .text 00000000 __ctors_end 00000600 g *ABS* 00000000 __stack 00000204 g .data 00000000 _edata 00000212 g .bss 00000000 _end 0000020e g O .bss 00000002 flags 0000972c g .text 00000000 __udivmodsi4 00008ed2 g F .text 000000d4 atoi 00008030 w .text 00000000 vector_fff6 00008c44 g F .text 0000002a RX_MODE 00008004 w .text 00000000 __low_level_init 0000802c w .text 00000000 __jump_to_main 00009600 g F .text 0000001a strchr 00000200 g .data 00000000 __data_start 000080b4 g .text 00000000 vector_ffea 00000210 g O .bss 00000001 status 00000211 g O .bss 00000001 rx_char 000081bc g F .text 0000001e TX232String Disassembly of section .text: 00008000 <__init_stack>: 8000: 31 40 00 06 mov #1536, r1 ;#0x0600 00008004 <__low_level_init>: 8004: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80 8008: 20 01 0000800a <__do_copy_data>: 800a: 3f 40 04 00 mov #4, r15 ;#0x0004 800e: 0f 93 tst r15 8010: 05 24 jz $+12 ;abs 0x801c 8012: 2f 83 decd r15 8014: 9f 4f 58 97 mov -26792(r15),512(r15);0x9758(r15), 0x0200(r15) 8018: 00 02 801a: fb 23 jnz $-8 ;abs 0x8012 0000801c <__do_clear_bss>: 801c: 3f 40 0e 00 mov #14, r15 ;#0x000e 8020: 0f 93 tst r15 8022: 04 24 jz $+10 ;abs 0x802c 8024: 1f 83 dec r15 8026: cf 43 04 02 mov.b #0, 516(r15);r3 As==00, 0x0204(r15) 802a: fc 23 jnz $-6 ;abs 0x8024 0000802c <__jump_to_main>: 802c: 30 40 b4 83 br #0x83b4 00008030 <__ctors_end>: 8030: 30 40 34 80 br #0x8034 00008034 <_unexpected_>: 8034: 00 13 reti 00008036 : This interrupt is caused by the button */ // Port 1 interripts : A button has been pushed interrupt (PORT1_VECTOR) P1_VEC(void) { 8036: 0f 12 push r15 dint(); //no nesting! 8038: 32 c2 dint if((P1IFG & BUTTON) == BUTTON) 803a: e2 b2 23 00 bit.b #4, &0x0023 ;r2 As==10 803e: 09 24 jz $+20 ;abs 0x8052 { flags |= BUTTON_PUSH; 8040: b2 d0 20 00 bis #32, &0x020e ;#0x0020 8044: 0e 02 LPM4_EXIT; 8046: b1 c0 f0 00 bic #240, 2(r1) ;#0x00f0, 0x0002(r1) 804a: 02 00 LPM3_EXIT; 804c: b1 c0 d0 00 bic #208, 2(r1) ;#0x00d0, 0x0002(r1) 8050: 02 00 //do button push stuff! } P1IFG=0x00; 8052: c2 43 23 00 mov.b #0, &0x0023 ;r3 As==00 eint(); 8056: 32 d2 eint } 8058: 3f 41 pop r15 805a: 00 13 reti 0000805c : This interrupt is caused by external pin events on handshake lines */ // Port 2 interripts : the allspice controller is talking to us interrupt (PORT2_VECTOR) P2_VEC(void) { 805c: 0f 12 push r15 dint(); //no nesting! 805e: 32 c2 dint if((P2IFG & GDO0) == GDO0) 8060: f2 b0 40 00 bit.b #64, &0x002b ;#0x0040 8064: 2b 00 8066: 05 24 jz $+12 ;abs 0x8072 { flags |= CONTROLLER_RDY; 8068: a2 d3 0e 02 bis #2, &0x020e ;r3 As==10 LPM3_EXIT; 806c: b1 c0 d0 00 bic #208, 2(r1) ;#0x00d0, 0x0002(r1) 8070: 02 00 //We need to grab that byte! } P2IFG=0x00; 8072: c2 43 2b 00 mov.b #0, &0x002b ;r3 As==00 eint(); 8076: 32 d2 eint } 8078: 3f 41 pop r15 807a: 00 13 reti 0000807c : /** This is called once every overflow */ interrupt (TIMERA1_VECTOR) TA1_VEC(void) { dint(); //no nesting! 807c: 32 c2 dint if(TAIV == 0x0A) //reading this bit will clear the interrupt flags 807e: b2 90 0a 00 cmp #10, &0x012e ;#0x000a 8082: 2e 01 8084: 0a 20 jnz $+22 ;abs 0x809a { //P1OUT ^= LED_RED; flags |= (TIMER_UP | NON_NMEA_GO_NOW); 8086: b2 d0 11 00 bis #17, &0x020e ;#0x0011 808a: 0e 02 seconds++; 808c: 92 53 0a 02 inc &0x020a TACTL &= ~TAIFG; //clear the flag 8090: 92 c3 60 01 bic #1, &0x0160 ;r3 As==01 LPM3_EXIT; 8094: b1 c0 d0 00 bic #208, 0(r1) ;#0x00d0, 0x0000(r1) 8098: 00 00 } eint(); 809a: 32 d2 eint } 809c: 00 13 reti 0000809e : /** This is called once for every RS232 character that comes in */ interrupt (USCIAB0RX_VECTOR) RX_VEC(void) { dint(); //no nesting! 809e: 32 c2 dint //P1OUT^=LED_GRN; rx_char = UCA0RXBUF; 80a0: d2 42 66 00 mov.b &0x0066,&0x0211 80a4: 11 02 flags |= RXCHAR_RDY; 80a6: b2 d2 0e 02 bis #8, &0x020e ;r2 As==11 LPM3_EXIT; 80aa: b1 c0 d0 00 bic #208, 0(r1) ;#0x00d0, 0x0000(r1) 80ae: 00 00 eint(); 80b0: 32 d2 eint } 80b2: 00 13 reti 000080b4 : */ // Port 2 interripts : the allspice controller is talking to us interrupt (ADC10_VECTOR) ADC_VEC(void) { dint(); //no nesting! 80b4: 32 c2 dint LPM3_EXIT; 80b6: b1 c0 d0 00 bic #208, 0(r1) ;#0x00d0, 0x0000(r1) 80ba: 00 00 eint(); 80bc: 32 d2 eint } 80be: 00 13 reti 000080c0 : /** Setup the timer to generate an interrupt at an interval of milliseconds */ void tinit(unsigned int milliseconds) { 80c0: 0b 12 push r11 80c2: 0a 12 push r10 80c4: 09 12 push r9 80c6: 08 12 push r8 TACCTL0 = CCIE; // TACCR0 interrupt enabled 80c8: b2 40 10 00 mov #16, &0x0162 ;#0x0010 80cc: 62 01 TACTL = TASSEL_1; // ACLK, upmode 80ce: b2 40 00 01 mov #256, &0x0160 ;#0x0100 80d2: 60 01 TACTL &= ~TAIFG; //clear interrupt 80d4: 92 c3 60 01 bic #1, &0x0160 ;r3 As==01 TACCR0 = (milliseconds * (unsigned long)12000)/1000; //one second intervals 80d8: 0a 4f mov r15, r10 80da: 3c 40 e0 2e mov #12000, r12 ;#0x2ee0 80de: 0b 43 clr r11 80e0: 0d 43 clr r13 80e2: b0 12 0c 97 call #0x970c 80e6: 0c 4e mov r14, r12 80e8: 0d 4f mov r15, r13 80ea: 3a 40 e8 03 mov #1000, r10 ;#0x03e8 80ee: 0b 43 clr r11 80f0: b0 12 2c 97 call #0x972c 80f4: 82 4c 72 01 mov r12, &0x0172 //TACCR0 = 12000; // ~1 second TAR = 0; 80f8: 82 43 70 01 mov #0, &0x0170 ;r3 As==00 TACTL |= MC_UPTO_CCR0 | TAIE; //enable interrupts, start counting! 80fc: b2 d0 12 00 bis #18, &0x0160 ;#0x0012 8100: 60 01 } 8102: 38 41 pop r8 8104: 39 41 pop r9 8106: 3a 41 pop r10 8108: 3b 41 pop r11 810a: 30 41 ret 0000810c : Delay function. */ void delay(unsigned int d) { int i; for (i = 0; i: Set up the system */ void sys_init() { WDTCTL = WDTCTL_INIT; //Init watchdog timer 813a: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80 813e: 20 01 P1OUT = P1OUT_INIT; //Init output data of port1 8140: e2 42 21 00 mov.b #4, &0x0021 ;r2 As==10 P2OUT = P2OUT_INIT; //Init output data of port2 8144: e2 43 29 00 mov.b #2, &0x0029 ;r3 As==10 P3OUT = P3OUT_INIT; 8148: d2 43 19 00 mov.b #1, &0x0019 ;r3 As==01 P1SEL = P1SEL_INIT; //Select port or module -function on port1 814c: c2 43 26 00 mov.b #0, &0x0026 ;r3 As==00 P2SEL = P2SEL_INIT; //Select port or module -function on port2 8150: c2 43 2e 00 mov.b #0, &0x002e ;r3 As==00 P3SEL = P3SEL_INIT; 8154: f2 40 30 00 mov.b #48, &0x001b ;#0x0030 8158: 1b 00 P1DIR = P1DIR_INIT; //Init port direction register of port1 815a: f2 40 fb ff mov.b #-5, &0x0022 ;#0xfffb 815e: 22 00 P2DIR = P2DIR_INIT; //Init port direction register of port2 8160: f2 40 3f 00 mov.b #63, &0x002a ;#0x003f 8164: 2a 00 P3DIR = P3DIR_INIT; 8166: f2 40 db ff mov.b #-37, &0x001a ;#0xffdb 816a: 1a 00 P1REN = P1REN_INIT; //Set pullup resistor state 816c: e2 42 27 00 mov.b #4, &0x0027 ;r2 As==10 P1IES = P1IES_INIT; //init port interrupts 8170: c2 43 24 00 mov.b #0, &0x0024 ;r3 As==00 P2IES = P2IES_INIT; 8174: f2 40 40 00 mov.b #64, &0x002c ;#0x0040 8178: 2c 00 P1IE = P1IE_INIT; 817a: e2 42 25 00 mov.b #4, &0x0025 ;r2 As==10 P2IE = P2IE_INIT; 817e: f2 40 40 00 mov.b #64, &0x002d ;#0x0040 8182: 2d 00 BCSCTL1 = CALBC1_12MHZ; // Set DCO 8184: d2 42 fb 10 mov.b &0x10fb,&0x0057 8188: 57 00 DCOCTL = CALDCO_12MHZ; 818a: d2 42 fa 10 mov.b &0x10fa,&0x0056 818e: 56 00 BCSCTL3 = LFXT1S_2; //use the ultra low oscilator for wakeup intervals, not very accurate/ 8190: f2 40 20 00 mov.b #32, &0x0053 ;#0x0020 8194: 53 00 } 8196: 30 41 ret 00008198 : /**init the ADC10 */ void init_adc() { ADC10AE = ADC_IN; 8198: d2 43 4a 00 mov.b #1, &0x004a ;r3 As==01 ADC10CTL0 = ADC10SR | ADC10ON | ADC10SHT_DIV64; //50kbps reduced power mode, ADC on, 16 clocks per sample window 819c: b2 40 10 1c mov #7184, &0x01b0 ;#0x1c10 81a0: b0 01 ADC10CTL1 = ADC10SSEL_ACLK | INCH_2; //ACLK sourced, A2 input 81a2: b2 40 08 20 mov #8200, &0x01b2 ;#0x2008 81a6: b2 01 } 81a8: 30 41 ret 000081aa : //get a reading from the ADC10MEM int sample_adc() { ADC10CTL0 |= ENC | ADC10SC; // Sampling and conversion start 81aa: b2 d0 03 00 bis #3, &0x01b0 ;#0x0003 81ae: b0 01 while(ADC10CTL1 & ADC10BUSY); 81b0: 92 b3 b2 01 bit #1, &0x01b2 ;r3 As==01 81b4: fd 23 jnz $-4 ;abs 0x81b0 return ADC10MEM; 81b6: 1f 42 b4 01 mov &0x01b4,r15 } 81ba: 30 41 ret 000081bc : void TX232String(char* string, int length ) { 81bc: 0c 4f mov r15, r12 int pointer; for( pointer = 0; pointer < length; pointer++) 81be: 0d 43 clr r13 81c0: 0d 9e cmp r14, r13 81c2: 0a 34 jge $+22 ;abs 0x81d8 { //volatile int i; UCA0TXBUF = string[pointer]; 81c4: 0f 4c mov r12, r15 81c6: 0f 5d add r13, r15 81c8: e2 4f 67 00 mov.b @r15, &0x0067 while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? 81cc: e2 b3 03 00 bit.b #2, &0x0003 ;r3 As==10 81d0: fd 27 jz $-4 ;abs 0x81cc } void TX232String(char* string, int length ) { int pointer; for( pointer = 0; pointer < length; pointer++) 81d2: 1d 53 inc r13 81d4: 0d 9e cmp r14, r13 81d6: f6 3b jl $-18 ;abs 0x81c4 { //volatile int i; UCA0TXBUF = string[pointer]; while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? } } 81d8: 30 41 ret 000081da : void init_UART_232() { UCA0CTL1 = UCSSEL_2; // SMCLK 81da: f2 40 80 ff mov.b #-128, &0x0061 ;#0xff80 81de: 61 00 //UCA0BR1 = 0x3; //UCA0BR0 = 0x82; // 9600 from 16Mhz //UCA0BR1 = 0x6; UCA0BR0=0xE2; UCA0BR1=0x04; //9600 from 12 81e0: f2 40 e2 ff mov.b #-30, &0x0062 ;#0xffe2 81e4: 62 00 81e6: e2 42 63 00 mov.b #4, &0x0063 ;r2 As==10 UCA0MCTL = UCBRS_2; 81ea: e2 42 64 00 mov.b #4, &0x0064 ;r2 As==10 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** 81ee: d2 c3 61 00 bic.b #1, &0x0061 ;r3 As==01 IE2 |= UCA0RXIE; 81f2: d2 d3 01 00 bis.b #1, &0x0001 ;r3 As==01 } 81f6: 30 41 ret 000081f8 : void init_UART_SPI() { UCB0CTL1 = UCSWRST; 81f8: d2 43 69 00 mov.b #1, &0x0069 ;r3 As==01 UCB0CTL1 = UCSWRST | UCSSEL1; 81fc: f2 40 81 ff mov.b #-127, &0x0069 ;#0xff81 8200: 69 00 UCB0CTL0 = UCCKPH | UCMSB | UCMST | UCSYNC; 8202: f2 40 a9 ff mov.b #-87, &0x0068 ;#0xffa9 8206: 68 00 UCB0BR0 = 2; 8208: e2 43 6a 00 mov.b #2, &0x006a ;r3 As==10 UCB0BR1 = 0; 820c: c2 43 6b 00 mov.b #0, &0x006b ;r3 As==00 UCB0CTL1 &= ~UCSWRST; 8210: d2 c3 69 00 bic.b #1, &0x0069 ;r3 As==01 } 8214: 30 41 ret 8216: b5 62 06 09 addc #8, 2310(r5);r2 As==11, 0x0906(r5) 821a: 0d 00 .word 0x000d; ???? 821c: 00 00 .word 0x0000; ???? 821e: 00 00 .word 0x0000; ???? 8220: ff ff 00 00 and.b @r15+, 0(r15) ;0x0000(r15) 8224: 00 00 .word 0x0000; ???? 8226: 00 00 .word 0x0000; ???? 8228: 07 21 jnz $+528 ;abs 0x8438 822a: af b5 62 06 bit @r5, 1634(r15);0x0662(r15) 822e: 09 0d .word 0x0d09; ???? 8230: 00 ff and r15, r0 8232: ff 00 .word 0x00ff; ???? 8234: 00 00 .word 0x0000; ???? 8236: 00 00 .word 0x0000; ???? 8238: 00 ff and r15, r0 823a: ff 00 .word 0x00ff; ???? 823c: 00 07 .word 0x0700; ???? 823e: 1f 9e b5 62 cmp 25269(r14),r15 ;0x62b5(r14) 8242: 06 24 jz $+14 ;abs 0x8250 8244: 24 00 .word 0x0024; ???? 8246: ff ff 06 03 and.b @r15+, 774(r15);0x0306(r15) 824a: 00 00 .word 0x0000; ???? 824c: 00 00 .word 0x0000; ???? 824e: 10 27 jz $-478 ;abs 0x8070 8250: 00 00 .word 0x0000; ???? 8252: 05 00 .word 0x0005; ???? 8254: fa 00 .word 0x00fa; ???? 8256: fa 00 .word 0x00fa; ???? 8258: 64 00 .word 0x0064; ???? 825a: 2c 01 .word 0x012c; ???? ... 8268: 00 00 .word 0x0000; ???? 826a: 16 dc b5 62 bis 25269(r12),r6 ;0x62b5(r12) 826e: 06 24 jz $+14 ;abs 0x827c 8270: 24 00 .word 0x0024; ???? 8272: ff ff 08 03 and.b @r15+, 776(r15);0x0308(r15) 8276: 00 00 .word 0x0000; ???? 8278: 00 00 .word 0x0000; ???? 827a: 10 27 jz $-478 ;abs 0x809c 827c: 00 00 .word 0x0000; ???? 827e: 05 00 .word 0x0005; ???? 8280: fa 00 .word 0x00fa; ???? 8282: fa 00 .word 0x00fa; ???? 8284: 64 00 .word 0x0064; ???? 8286: 2c 01 .word 0x012c; ???? ... 8294: 00 00 .word 0x0000; ???? 8296: 18 20 jnz $+50 ;abs 0x82c8 8298: b5 62 06 24 addc #8, 9222(r5);r2 As==11, 0x2406(r5) 829c: 24 00 .word 0x0024; ???? 829e: ff ff 01 03 and.b @r15+, 769(r15);0x0301(r15) 82a2: 00 00 .word 0x0000; ???? 82a4: 00 00 .word 0x0000; ???? 82a6: 10 27 jz $-478 ;abs 0x80c8 82a8: 00 00 .word 0x0000; ???? 82aa: 05 00 .word 0x0005; ???? 82ac: fa 00 .word 0x00fa; ???? 82ae: fa 00 .word 0x00fa; ???? 82b0: 64 00 .word 0x0064; ???? 82b2: 2c 01 .word 0x012c; ???? ... 82c0: 00 00 .word 0x0000; ???? 82c2: 11 32 jn $-988 ;abs 0x7ee6 82c4: 47 4e mov.b r14, r7 82c6: 44 3a jl $-886 ;abs 0x7f50 82c8: 47 50 add.b r0, r7 82ca: 53 20 jnz $+168 ;abs 0x8372 82cc: 53 74 .word 0x7453; ???? Illegal as 2-op instr 82ce: 61 72 subc.b #4, r1 ;r2 As==10 82d0: 74 75 subc.b @r5+, r4 82d2: 70 00 .word 0x0070; ???? 82d4: 47 50 add.b r0, r7 82d6: 53 00 .word 0x0053; ???? 82d8: 69 6e addc.b @r14, r9 82da: 74 65 addc.b @r5+, r4 82dc: 72 76 subc.b @r6+, r2 82de: 61 6c addc.b @r12, r1 82e0: 00 1b .word 0x1b00; ???? 82e2: 5b 33 jn $-328 ;abs 0x819a 82e4: 32 6d addc @r13+, r2 82e6: 47 4e mov.b r14, r7 82e8: 44 3a jl $-886 ;abs 0x7f72 82ea: 47 50 add.b r0, r7 82ec: 53 20 jnz $+168 ;abs 0x8394 82ee: 49 6e addc.b r14, r9 82f0: 74 65 addc.b @r5+, r4 82f2: 72 76 subc.b @r6+, r2 82f4: 61 6c addc.b @r12, r1 82f6: 20 69 addc @r9, r0 82f8: 73 20 jnz $+232 ;abs 0x83e0 82fa: 6e 6f addc.b @r15, r14 82fc: 77 20 jnz $+240 ;abs 0x83ec 82fe: 25 64 addc @r4, r5 8300: 1b 5b 33 30 add 12339(r11),r11 ;0x3033(r11) 8304: 6d 00 .word 0x006d; ???? 8306: 47 4e mov.b r14, r7 8308: 44 3a jl $-886 ;abs 0x7f92 830a: 25 73 subc #2, r5 ;r3 As==10 830c: 20 53 incd r0 830e: 3a 25 jz $+630 ;abs 0x8584 8310: 64 20 jnz $+202 ;abs 0x83da 8312: 54 3a jl $-854 ;abs 0x7fbc 8314: 25 64 addc @r4, r5 8316: 20 56 add @r6, r0 8318: 3a 25 jz $+630 ;abs 0x858e 831a: 64 00 .word 0x0064; ???? 831c: 47 4e mov.b r14, r7 831e: 44 3a jl $-886 ;abs 0x7fa8 8320: 25 73 subc #2, r5 ;r3 As==10 8322: 20 25 jz $+578 ;abs 0x8564 8324: 64 2c jc $+202 ;abs 0x83ee 8326: 25 73 subc #2, r5 ;r3 As==10 8328: 2c 25 jz $+602 ;abs 0x8582 832a: 73 2c jc $+232 ;abs 0x8412 832c: 25 73 subc #2, r5 ;r3 As==10 832e: 2c 25 jz $+602 ;abs 0x8588 8330: 63 2c jc $+200 ;abs 0x83f8 8332: 25 73 subc #2, r5 ;r3 As==10 8334: 2c 25 jz $+602 ;abs 0x858e 8336: 73 00 .word 0x0073; ???? 8338: 1b 5b 33 32 add 12851(r11),r11 ;0x3233(r11) 833c: 6d 47 mov.b @r7, r13 833e: 4e 44 mov.b r4, r14 8340: 3a 47 mov @r7+, r10 8342: 50 53 inc.b r0 8344: 20 52 add #4, r0 ;r2 As==10 8346: 65 70 subc.b @r0, r5 8348: 6f 72 subc.b #4, r15 ;r2 As==10 834a: 74 69 addc.b @r9+, r4 834c: 6e 67 addc.b @r7, r14 834e: 20 65 addc @r5, r0 8350: 76 65 addc.b @r5+, r6 8352: 72 79 subc.b @r9+, r2 8354: 20 25 jz $+578 ;abs 0x8596 8356: 64 20 jnz $+202 ;abs 0x8420 8358: 73 65 .word 0x6573; ???? Illegal as 2-op instr 835a: 63 6f .word 0x6f63; ???? Illegal as 2-op instr 835c: 6e 64 addc.b @r4, r14 835e: 73 1b .word 0x1b73; ???? 8360: 5b 33 jn $-328 ;abs 0x8218 8362: 30 6d addc @r13+, r0 8364: 00 73 sbc r0 8366: 74 61 addc.b @r1+, r4 8368: 74 75 subc.b @r5+, r4 836a: 73 00 .word 0x0073; ???? 836c: 47 4e mov.b r14, r7 836e: 44 3a jl $-886 ;abs 0x7ff8 8370: 25 73 subc #2, r5 ;r3 As==10 8372: 20 52 add #4, r0 ;r2 As==10 8374: 53 53 inc.b #0 ;r3 As==00 8376: 49 3a jl $-876 ;abs 0x800a 8378: 25 64 addc @r4, r5 837a: 64 42 mov.b #4, r4 ;r2 As==10 837c: 6d 20 jnz $+220 ;abs 0x8458 837e: 4c 51 add.b r1, r12 8380: 49 3a jl $-876 ;abs 0x8014 8382: 25 64 addc @r4, r5 8384: 00 6e addc r14, r0 8386: 6f 77 subc.b @r7, r15 8388: 00 1b .word 0x1b00; ???? 838a: 5b 33 jn $-328 ;abs 0x8242 838c: 34 6d addc @r13+, r4 838e: 47 4e mov.b r14, r7 8390: 44 3a jl $-886 ;abs 0x801a 8392: 47 50 add.b r0, r7 8394: 53 20 jnz $+168 ;abs 0x843c 8396: 50 6f 6e 67 addc.b 26478(r15),r0 ;0x676e(r15) 839a: 21 1b .word 0x1b21; ???? 839c: 5b 33 jn $-328 ;abs 0x8254 839e: 30 6d addc @r13+, r0 83a0: 00 50 rla r0 83a2: 6f 6e addc.b @r14, r15 83a4: 67 21 jnz $+720 ;abs 0x8674 83a6: 00 47 br r7 83a8: 50 47 47 41 br 16711(r7) ;0x4147(r7) 83ac: 00 47 br r7 83ae: 50 56 54 47 add.b 18260(r6),r0 ;0x4754(r6) ... 000083b4
: /** Main function. */ int main(void) { 83b4: 31 40 8a 04 mov #1162, r1 ;#0x048a unsigned int sample,length=0,i; unsigned char gpsbuffer1[64],rxbuf[64]; //GPS buffer can be set to 10 to save memory unsigned char loop,gps1buflength=0,Nmea_State=NMEA_START,commas=0; 83b8: c1 43 6e 01 mov.b #0, 366(r1) ;r3 As==00, 0x016e(r1) 83bc: 56 43 mov.b #1, r6 ;r3 As==01 83be: 44 43 clr.b r4 unsigned char gps_latbuf[11], gps_latbuflen=0; 83c0: c1 43 6f 01 mov.b #0, 367(r1) ;r3 As==00, 0x016f(r1) unsigned char gps_lonbuf[11], gps_lonbuflen=0; 83c4: c1 43 70 01 mov.b #0, 368(r1) ;r3 As==00, 0x0170(r1) unsigned char gps_altbuf[11], gps_altbuflen=0; 83c8: c1 43 71 01 mov.b #0, 369(r1) ;r3 As==00, 0x0171(r1) unsigned char gps_spdbuf[7], gps_spdbuflen=0; 83cc: c1 43 72 01 mov.b #0, 370(r1) ;r3 As==00, 0x0172(r1) unsigned char gps_utcbuf[10], gps_utcbuflen=0; 83d0: c1 43 73 01 mov.b #0, 371(r1) ;r3 As==00, 0x0173(r1) unsigned char gps_fix='0'; 83d4: f1 40 30 00 mov.b #48, 372(r1) ;#0x0030, 0x0174(r1) 83d8: 74 01 //Save Current Config 21 unsigned const char UBX_SAVE_CONFIG[] = {0xB5,0x62,0x06,0x09,0x0D,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x21,0xAF}; 83da: 0d 41 mov r1, r13 83dc: 3d 50 b6 00 add #182, r13 ;#0x00b6 83e0: 3e 40 16 82 mov #-32234,r14 ;#0x8216 83e4: 3f 40 15 00 mov #21, r15 ;#0x0015 83e8: fd 4e 00 00 mov.b @r14+, 0(r13) ;0x0000(r13) 83ec: 1d 53 inc r13 83ee: 1f 83 dec r15 83f0: fb 23 jnz $-8 ;abs 0x83e8 const int UBX_SAVE_CONFIG_LENGTH = 21; //Revert to the default configuration 21 BE CAREFUL WITH THIS COMMAND!! unsigned const char UBX_REVERT_DEFAULT[] = {0xB5,0x62,0x06,0x09,0x0D,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x07,0x1F,0x9E}; 83f2: 0d 41 mov r1, r13 83f4: 3d 50 cc 00 add #204, r13 ;#0x00cc 83f8: 3e 40 2b 82 mov #-32213,r14 ;#0x822b 83fc: 3f 40 15 00 mov #21, r15 ;#0x0015 8400: fd 4e 00 00 mov.b @r14+, 0(r13) ;0x0000(r13) 8404: 1d 53 inc r13 8406: 1f 83 dec r15 8408: fb 23 jnz $-8 ;abs 0x8400 const int UBX_REVERT_DEFAULT_LENGTH = 21; //this line will change the reciever to airborne < 1g, 44 chars long (this is the best for balloon!) unsigned const char UBX_MODE_AIR1[] = {0xB5,0x62,0x06,0x24,0x24,0x00,0xFF,0xFF,0x06,0x03,0x00,0x00,0x00,0x00,0x10,0x27,0x00,0x00,0x05,0x00,0xFA,0x00,0xFA,0x00,0x64,0x00,0x2C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0xDC}; 840a: 0d 41 mov r1, r13 840c: 3d 50 e2 00 add #226, r13 ;#0x00e2 8410: 3e 40 40 82 mov #-32192,r14 ;#0x8240 8414: 3f 40 2c 00 mov #44, r15 ;#0x002c 8418: fd 4e 00 00 mov.b @r14+, 0(r13) ;0x0000(r13) 841c: 1d 53 inc r13 841e: 1f 83 dec r15 8420: fb 23 jnz $-8 ;abs 0x8418 const int UBX_MODE_AIR1_LENGTH = 44; //this line will change the reciever to airborne < 4g, 44 chars long (this is the best for a rocket or crashing airplane) unsigned const char UBX_MODE_AIR4[] = {0xB5,0x62,0x06,0x24,0x24,0x00,0xFF,0xFF,0x08,0x03,0x00,0x00,0x00,0x00,0x10,0x27,0x00,0x00,0x05,0x00,0xFA,0x00,0xFA,0x00,0x64,0x00,0x2C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20}; 8422: 0d 41 mov r1, r13 8424: 3d 50 0e 01 add #270, r13 ;#0x010e 8428: 3e 40 6c 82 mov #-32148,r14 ;#0x826c 842c: 3f 40 2c 00 mov #44, r15 ;#0x002c 8430: fd 4e 00 00 mov.b @r14+, 0(r13) ;0x0000(r13) 8434: 1d 53 inc r13 8436: 1f 83 dec r15 8438: fb 23 jnz $-8 ;abs 0x8430 const int UBX_MODE_AIR4_LENGTH = 44; //this line will change the reciever to stationary mode, 44 chars long (this mode has the best accuracy at the expense of not converging on motion very quickly) unsigned const char UBX_MODE_FIXED[] = {0xB5,0x62,0x06,0x24,0x24,0x00,0xFF,0xFF,0x01,0x03,0x00,0x00,0x00,0x00,0x10,0x27,0x00,0x00,0x05,0x00,0xFA,0x00,0xFA,0x00,0x64,0x00,0x2C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x32}; 843a: 0d 41 mov r1, r13 843c: 3d 50 3a 01 add #314, r13 ;#0x013a 8440: 3e 40 98 82 mov #-32104,r14 ;#0x8298 8444: 3f 40 2c 00 mov #44, r15 ;#0x002c 8448: fd 4e 00 00 mov.b @r14+, 0(r13) ;0x0000(r13) 844c: 1d 53 inc r13 844e: 1f 83 dec r15 8450: fb 23 jnz $-8 ;abs 0x8448 const int UBX_MODE_FIXED_LENGTH = 44; int interval=2; //programmable variables 8452: 25 43 mov #2, r5 ;r3 As==10 int degC, volt; volatile long traw,vraw; sys_init(); //initialize system parameters 8454: b0 12 3a 81 call #0x813a init_UART_232(); 8458: b0 12 da 81 call #0x81da init_UART_SPI(); //get the UART into SPI mode such that we can talk to the radio 845c: b0 12 f8 81 call #0x81f8 init_adc(); //turn on the ADC 8460: b0 12 98 81 call #0x8198 P1OUT ^= LED_GRN; 8464: e2 e3 21 00 xor.b #2, &0x0021 ;r3 As==10 delay(0xFFFF); //lil bit O delay 8468: 3f 43 mov #-1, r15 ;r3 As==11 846a: b0 12 0c 81 call #0x810c P1OUT ^= LED_GRN; 846e: e2 e3 21 00 xor.b #2, &0x0021 ;r3 As==10 memset(rxbuf, '\0', 64); //clear the buffer 8472: 3e 40 40 00 mov #64, r14 ;#0x0040 8476: 07 41 mov r1, r7 8478: 37 50 40 00 add #64, r7 ;#0x0040 847c: 0f 47 mov r7, r15 847e: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) 8482: 1f 53 inc r15 8484: 1e 83 dec r14 8486: fb 23 jnz $-8 ;abs 0x847e memset(gps_utcbuf, '\0', 10); //clear the buffer 8488: 3e 40 0a 00 mov #10, r14 ;#0x000a 848c: 3f 40 ac 00 mov #172, r15 ;#0x00ac 8490: 0f 51 add r1, r15 8492: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) 8496: 1f 53 inc r15 8498: 1e 83 dec r14 849a: fb 23 jnz $-8 ;abs 0x8492 memset(gps_spdbuf, '\0', 7); //clear the buffer 849c: 3e 40 07 00 mov #7, r14 ;#0x0007 84a0: 3f 40 a4 00 mov #164, r15 ;#0x00a4 84a4: 0f 51 add r1, r15 84a6: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) 84aa: 1f 53 inc r15 84ac: 1e 83 dec r14 84ae: fb 23 jnz $-8 ;abs 0x84a6 memset(gps_altbuf, '\0', 11); //clear the buffer 84b0: 3e 40 0b 00 mov #11, r14 ;#0x000b 84b4: 3f 40 98 00 mov #152, r15 ;#0x0098 84b8: 0f 51 add r1, r15 84ba: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) 84be: 1f 53 inc r15 84c0: 1e 83 dec r14 84c2: fb 23 jnz $-8 ;abs 0x84ba memset(gps_lonbuf, '\0', 11); //clear the buffer 84c4: 3e 40 0b 00 mov #11, r14 ;#0x000b 84c8: 3f 40 8c 00 mov #140, r15 ;#0x008c 84cc: 0f 51 add r1, r15 84ce: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) 84d2: 1f 53 inc r15 84d4: 1e 83 dec r14 84d6: fb 23 jnz $-8 ;abs 0x84ce memset(gps_latbuf, '\0', 11); //clear the buffer 84d8: 3e 40 0b 00 mov #11, r14 ;#0x000b 84dc: 3f 40 80 00 mov #128, r15 ;#0x0080 84e0: 0f 51 add r1, r15 84e2: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) 84e6: 1f 53 inc r15 84e8: 1e 83 dec r14 84ea: fb 23 jnz $-8 ;abs 0x84e2 memset(gpsbuffer1, '\0', 10); //clear the buffer 84ec: 3e 40 0a 00 mov #10, r14 ;#0x000a 84f0: 0f 41 mov r1, r15 84f2: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) 84f6: 1f 53 inc r15 84f8: 1e 83 dec r14 84fa: fb 23 jnz $-8 ;abs 0x84f2 P3OUT &= ~CSn; //power on reset for radio, strobe CSn 84fc: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 delay(0xFF); 8500: 3f 40 ff 00 mov #255, r15 ;#0x00ff 8504: b0 12 0c 81 call #0x810c P3OUT |= CSn; 8508: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 delay(0xFFFF); 850c: 3f 43 mov #-1, r15 ;r3 As==11 850e: b0 12 0c 81 call #0x810c CCXX_SPI_STROBE(CCxxx0_SRES); //reset chip 8512: 7f 40 30 00 mov.b #48, r15 ;#0x0030 8516: b0 12 8c 8d call #0x8d8c CCXX_WRITE_SPI_RF_SETTINGS(); //init chip 851a: b0 12 a6 8a call #0x8aa6 CCXX_SPI_STROBE(CCxxx0_SIDLE); //put into idle state 851e: 7f 40 36 00 mov.b #54, r15 ;#0x0036 8522: b0 12 8c 8d call #0x8d8c do{ i = CCXX_SPI_RDREG(CCxxx0_MARCSTATE);//wait for IDLE 8526: 7f 40 35 00 mov.b #53, r15 ;#0x0035 852a: b0 12 c2 8d call #0x8dc2 852e: 8f 11 sxt r15 }while(i != 1); //this loop won't finish if theres a problem with the chip 8530: 1f 93 cmp #1, r15 ;r3 As==01 8532: f9 23 jnz $-12 ;abs 0x8526 //P1SEL |= bit4; P1OUT ^= LED_RED; 8534: d2 e3 21 00 xor.b #1, &0x0021 ;r3 As==01 delay(0xFF); //lil bit O delay 8538: 3f 40 ff 00 mov #255, r15 ;#0x00ff 853c: b0 12 0c 81 call #0x810c P1OUT ^= LED_RED; 8540: d2 e3 21 00 xor.b #1, &0x0021 ;r3 As==01 flags = 0; 8544: 82 43 0e 02 mov #0, &0x020e ;r3 As==00 P2IFG = 0x00; 8548: c2 43 2b 00 mov.b #0, &0x002b ;r3 As==00 tinit(1000); //start generating interrupts every second! 854c: 3f 40 e8 03 mov #1000, r15 ;#0x03e8 8550: b0 12 c0 80 call #0x80c0 seconds = 0; 8554: 82 43 0a 02 mov #0, &0x020a ;r3 As==00 TX_STRING("GND:GPS Startup", 15); 8558: 7e 40 0f 00 mov.b #15, r14 ;#0x000f 855c: 3f 40 c4 82 mov #-32060,r15 ;#0x82c4 8560: b0 12 42 8d call #0x8d42 P2IFG &= ~GDO0; //reset trashed interrupt state 8564: f2 f0 bf ff and.b #-65, &0x002b ;#0xffbf 8568: 2b 00 P1IFG &= ~BUTTON; 856a: e2 c2 23 00 bic.b #4, &0x0023 ;r2 As==10 //TX232String(UBX_REVERT_DEFAULT,UBX_REVERT_DEFAULT_LENGTH); //TX232String(UBX_MODE_AIR1,UBX_MODE_AIR1_LENGTH); //TX232String(UBX_SAVE_CONFIG,UBX_SAVE_CONFIG_LENGTH); eint(); //enable interrupts 856e: 32 d2 eint RX_MODE(); //put radio into listen mode. 8570: b0 12 44 8c call #0x8c44 while (1) //main loop, never ends... { loop = 0; 8574: 48 43 clr.b r8 if(flags & RXCHAR_RDY) 8576: b2 b2 0e 02 bit #8, &0x020e ;r2 As==11 857a: 1a 24 jz $+54 ;abs 0x85b0 { ///////////////// dint(); 857c: 32 c2 dint //P1OUT |= LED_RED; loop = 1; 857e: 58 43 mov.b #1, r8 ;r3 As==01 flags &= ~RXCHAR_RDY; 8580: b2 c2 0e 02 bic #8, &0x020e ;r2 As==11 if(rx_char == '$') //reset the state when a new sentance comes in 8584: 5e 42 11 02 mov.b &0x0211,r14 8588: 7e 90 24 00 cmp.b #36, r14 ;#0x0024 858c: 02 20 jnz $+6 ;abs 0x8592 858e: 30 40 92 8a br #0x8a92 Nmea_State = NMEA_START; } else { switch(Nmea_State) 8592: 4f 46 mov.b r6, r15 8594: 2f 93 cmp #2, r15 ;r3 As==10 8596: 02 20 jnz $+6 ;abs 0x859c 8598: 30 40 c4 89 br #0x89c4 859c: 3f 90 03 00 cmp #3, r15 ;#0x0003 85a0: 02 38 jl $+6 ;abs 0x85a6 85a2: 30 40 70 89 br #0x8970 85a6: 1f 93 cmp #1, r15 ;r3 As==01 85a8: a4 25 jz $+842 ;abs 0x88f2 P1OUT &= ~LED_RED; } //////////////////////////// */ P1OUT &= ~LED_RED; 85aa: d2 c3 21 00 bic.b #1, &0x0021 ;r3 As==01 eint(); 85ae: 32 d2 eint } if(flags & BUTTON_PUSH) 85b0: b2 b0 20 00 bit #32, &0x020e ;#0x0020 85b4: 0e 02 85b6: 21 24 jz $+68 ;abs 0x85fa { dint(); 85b8: 32 c2 dint P1OUT &= ~(LED_RED | LED_GRN); //clear LEDs 85ba: f2 f0 fc ff and.b #-4, &0x0021 ;#0xfffc 85be: 21 00 P2OUT &= ~GPS_ENABLE; //shut down GPS 85c0: e2 c3 29 00 bic.b #2, &0x0029 ;r3 As==10 CCXX_SPI_STROBE(CCxxx0_SIDLE); //IDLE CC1101 85c4: 7f 40 36 00 mov.b #54, r15 ;#0x0036 85c8: b0 12 8c 8d call #0x8d8c CCXX_SPI_STROBE(CCxxx0_SPWD); //shut down CC1101 85cc: 7f 40 39 00 mov.b #57, r15 ;#0x0039 85d0: b0 12 8c 8d call #0x8d8c eint(); 85d4: 32 d2 eint delay(0xFFFF); 85d6: 3f 43 mov #-1, r15 ;r3 As==11 85d8: b0 12 0c 81 call #0x810c LPM4; //Sleep micro - only way to wake back up is a button push 85dc: 32 d0 f0 00 bis #240, r2 ;#0x00f0 dint(); 85e0: 32 c2 dint P2OUT |= GPS_ENABLE; //Bring GPS back up 85e2: e2 d3 29 00 bis.b #2, &0x0029 ;r3 As==10 RX_MODE(); //Wake radio and place back into RX mode 85e6: b0 12 44 8c call #0x8c44 P2IFG &= ~GDO0; //reset trashed interrupt state 85ea: f2 f0 bf ff and.b #-65, &0x002b ;#0xffbf 85ee: 2b 00 flags &= ~BUTTON_PUSH; 85f0: b2 f0 df ff and #-33, &0x020e ;#0xffdf 85f4: 0e 02 loop = 1; 85f6: 58 43 mov.b #1, r8 ;r3 As==01 eint(); 85f8: 32 d2 eint } if(flags & CONTROLLER_RDY) //Someone is sending us something 85fa: a2 b3 0e 02 bit #2, &0x020e ;r3 As==10 85fe: 49 24 jz $+148 ;abs 0x8692 { dint(); 8600: 32 c2 dint loop = 1; 8602: 58 43 mov.b #1, r8 ;r3 As==01 P1OUT |= LED_RED; 8604: d2 d3 21 00 bis.b #1, &0x0021 ;r3 As==01 flags &= ~CONTROLLER_RDY; 8608: a2 c3 0e 02 bic #2, &0x020e ;r3 As==10 memset(rxbuf, 0, 64); 860c: 3f 40 40 00 mov #64, r15 ;#0x0040 8610: 0e 47 mov r7, r14 8612: ce 43 00 00 mov.b #0, 0(r14) ;r3 As==00, 0x0000(r14) 8616: 1e 53 inc r14 8618: 1f 83 dec r15 861a: fb 23 jnz $-8 ;abs 0x8612 861c: 07 41 mov r1, r7 861e: 37 50 40 00 add #64, r7 ;#0x0040 8622: 0b 47 mov r7, r11 length = RX_STRING(rxbuf, 64); 8624: 7e 40 40 00 mov.b #64, r14 ;#0x0040 8628: 0f 47 mov r7, r15 862a: b0 12 6e 8c call #0x8c6e if(LQI & bit7) //CRC ok 862e: c2 93 0c 02 tst.b &0x020c 8632: 27 34 jge $+80 ;abs 0x8682 { if(!memcmp(CALLSIGN,rxbuf,3)) //packet addressed to us 8634: 3d 40 03 00 mov #3, r13 ;#0x0003 8638: 0e 47 mov r7, r14 863a: 3f 40 d4 82 mov #-32044,r15 ;#0x82d4 863e: b0 12 3e 96 call #0x963e 8642: 0f 93 tst r15 8644: 4e 21 jnz $+670 ;abs 0x88e2 { if(strstr( rxbuf, "interval" ) != NULL) //its an interval query 8646: 3e 40 d8 82 mov #-32040,r14 ;#0x82d8 864a: 0f 47 mov r7, r15 864c: b0 12 6e 96 call #0x966e 8650: 0f 93 tst r15 8652: 11 25 jz $+548 ;abs 0x8876 { length = atoi(strchr(rxbuf, '=' )+1); //The new interval should follow the equals sign 8654: 3e 40 3d 00 mov #61, r14 ;#0x003d 8658: 0f 47 mov r7, r15 865a: b0 12 00 96 call #0x9600 865e: 1f 53 inc r15 8660: b0 12 d2 8e call #0x8ed2 if(length > 0) 8664: 0f 93 tst r15 8666: 03 25 jz $+520 ;abs 0x886e { interval = length; 8668: 05 4f mov r15, r5 length = sprintf(rxbuf,"\e[32mGND:GPS Interval is now %d\e[30m",interval); 866a: 0f 12 push r15 866c: 30 12 e1 82 push #-32031 ;#0x82e1 8670: 07 12 push r7 8672: b0 12 a6 8f call #0x8fa6 8676: 31 50 06 00 add #6, r1 ;#0x0006 } else length = sprintf(rxbuf,"\e[32mGND:GPS Reporting every %d seconds\e[30m",interval); TX_STRING(rxbuf,length); 867a: 4e 4f mov.b r15, r14 867c: 0f 4b mov r11, r15 867e: b0 12 42 8d call #0x8d42 } } } P2IFG &= ~GDO0; //reset trashed interrupt state 8682: f2 f0 bf ff and.b #-65, &0x002b ;#0xffbf 8686: 2b 00 RX_MODE(); //set the radio back to RX mode so we don't miss any packets 8688: b0 12 44 8c call #0x8c44 //turn off LEDs P1OUT &= ~LED_RED; 868c: d2 c3 21 00 bic.b #1, &0x0021 ;r3 As==01 eint(); 8690: 32 d2 eint } if(flags & TIMER_UP) //Did the timer expire? report your findings! 8692: 92 b3 0e 02 bit #1, &0x020e ;r3 As==01 8696: a6 24 jz $+334 ;abs 0x87e4 { loop = 1; 8698: 58 43 mov.b #1, r8 ;r3 As==01 if(((seconds % 5) == 0) && (flags & NON_NMEA_GO_NOW)) //report telemetry every 5 seconds by default 869a: 1c 42 0a 02 mov &0x020a,r12 869e: 3a 40 05 00 mov #5, r10 ;#0x0005 86a2: b0 12 10 97 call #0x9710 86a6: 0e 93 tst r14 86a8: 8b 20 jnz $+280 ;abs 0x87c0 86aa: b2 b0 10 00 bit #16, &0x020e ;#0x0010 86ae: 0e 02 86b0: 87 24 jz $+272 ;abs 0x87c0 { flags &= ~(TIMER_UP|NON_NMEA_GO_NOW); //clear the flag 86b2: b2 f0 ee ff and #-18, &0x020e ;#0xffee 86b6: 0e 02 P1OUT |= LED_RED; 86b8: d2 d3 21 00 bis.b #1, &0x0021 ;r3 As==01 ADC10CTL1 = INCH_10 + ADC10DIV_4; // Temp Sensor ADC10CLK/5 86bc: b2 40 80 a0 mov #-24448,&0x01b2 ;#0xa080 86c0: b2 01 ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ADC10SR; 86c2: b2 40 38 3c mov #15416, &0x01b0 ;#0x3c38 86c6: b0 01 for( degC = 240; degC > 0; degC-- ); // delay to allow reference to settle 86c8: 39 40 f0 00 mov #240, r9 ;#0x00f0 86cc: 39 50 e2 ff add #-30, r9 ;#0xffe2 86d0: 19 93 cmp #1, r9 ;r3 As==01 86d2: fc 37 jge $-6 ;abs 0x86cc ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start 86d4: b2 d0 03 00 bis #3, &0x01b0 ;#0x0003 86d8: b0 01 LPM3; 86da: 32 d0 d0 00 bis #208, r2 ;#0x00d0 traw = ADC10MEM; 86de: 1f 42 b4 01 mov &0x01b4,r15 86e2: 0e 4f mov r15, r14 86e4: 0f 43 clr r15 86e6: 81 4e 66 01 mov r14, 358(r1) ;0x0166(r1) 86ea: 81 4f 68 01 mov r15, 360(r1) ;0x0168(r1) ADC10CTL0 &= ~ENC; 86ee: a2 c3 b0 01 bic #2, &0x01b0 ;r3 As==10 ADC10CTL1 = INCH_11; // AVcc/2 86f2: b2 40 00 b0 mov #-20480,&0x01b2 ;#0xb000 86f6: b2 01 ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE + REF2_5V; 86f8: b2 40 78 30 mov #12408, &0x01b0 ;#0x3078 86fc: b0 01 for( degC = 240; degC > 0; degC-- ); // delay to allow reference to settle 86fe: 39 40 f0 00 mov #240, r9 ;#0x00f0 8702: 39 50 e2 ff add #-30, r9 ;#0xffe2 8706: 19 93 cmp #1, r9 ;r3 As==01 8708: fc 37 jge $-6 ;abs 0x8702 ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start 870a: b2 d0 03 00 bis #3, &0x01b0 ;#0x0003 870e: b0 01 LPM3; 8710: 32 d0 d0 00 bis #208, r2 ;#0x00d0 dint(); 8714: 32 c2 dint vraw = ADC10MEM; 8716: 1f 42 b4 01 mov &0x01b4,r15 871a: 0e 4f mov r15, r14 871c: 0f 43 clr r15 871e: 81 4e 6a 01 mov r14, 362(r1) ;0x016a(r1) 8722: 81 4f 6c 01 mov r15, 364(r1) ;0x016c(r1) ADC10CTL0 &= ~ENC; 8726: a2 c3 b0 01 bic #2, &0x01b0 ;r3 As==10 ADC10CTL0 &= ~(REFON + ADC10ON); // turn off A/D to save power 872a: b2 f0 cf ff and #-49, &0x01b0 ;#0xffcf 872e: b0 01 // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278 // the temperature is transmitted as an integer where 32.1 = 321 // hence 4230 instead of 423 degC = (((traw - 673) * 4230) / 1024) - 35; 8730: 1a 41 66 01 mov 358(r1),r10 ;0x0166(r1) 8734: 1b 41 68 01 mov 360(r1),r11 ;0x0168(r1) 8738: 3c 40 86 10 mov #4230, r12 ;#0x1086 873c: 0d 43 clr r13 873e: b0 12 ec 96 call #0x96ec 8742: 0c 4e mov r14, r12 8744: 0d 4f mov r15, r13 8746: 3e 50 ba 8f add #-28742,r14 ;#0x8fba 874a: 3f 60 d4 ff addc #-44, r15 ;#0xffd4 874e: 0f 93 tst r15 8750: 87 38 jl $+272 ;abs 0x8860 8752: 8e 10 swpb r14 8754: 8f 10 swpb r15 8756: 4e ef xor.b r15, r14 8758: 0e ef xor r15, r14 875a: 8f 11 sxt r15 875c: 0f 11 rra r15 875e: 0e 10 rrc r14 8760: 0f 11 rra r15 8762: 0e 10 rrc r14 8764: 09 4e mov r14, r9 8766: 39 50 dd ff add #-35, r9 ;#0xffdd { degC += CAL_OFFSET_TEMP; } */ volt = (vraw*25)/512; 876a: 1a 41 6a 01 mov 362(r1),r10 ;0x016a(r1) 876e: 1b 41 6c 01 mov 364(r1),r11 ;0x016c(r1) 8772: 3c 40 19 00 mov #25, r12 ;#0x0019 8776: 0d 43 clr r13 8778: b0 12 ec 96 call #0x96ec 877c: 0f 93 tst r15 877e: 6c 38 jl $+218 ;abs 0x8858 8780: 8e 10 swpb r14 8782: 8f 10 swpb r15 8784: 4e ef xor.b r15, r14 8786: 0e ef xor r15, r14 8788: 8f 11 sxt r15 878a: 0f 11 rra r15 878c: 0e 10 rrc r14 //msg[0] = degC&0xFF; //msg[1] = (degC>>8)&0xFF; //msg[2] = volt; //length=sprintf(rxbuf, "GND:TM2 %d.%d,%dmV", degC&0xFF,(degC>>8)&0xFF,volt); //send the temperature to the ground length=sprintf(rxbuf, "GND:%s S:%d T:%d V:%d", CALLSIGN, seconds, degC, volt); //send the temperature to the ground 878e: 0e 12 push r14 8790: 09 12 push r9 8792: 12 12 0a 02 push &0x020a 8796: 30 12 d4 82 push #-32044 ;#0x82d4 879a: 30 12 06 83 push #-31994 ;#0x8306 879e: 07 12 push r7 87a0: b0 12 a6 8f call #0x8fa6 //length=sprintf(rxbuf, "GND:TM2 Interval"); //send the temperature to the ground //length=sprintf(rxbuf, "GND:%s TEST", CALLSIGN); //send the temperature to the ground TX_STRING(rxbuf,length); 87a4: 4e 4f mov.b r15, r14 87a6: 0f 47 mov r7, r15 87a8: b0 12 42 8d call #0x8d42 P2IFG &= ~GDO0; //clear our soiled GDO0 register 87ac: f2 f0 bf ff and.b #-65, &0x002b ;#0xffbf 87b0: 2b 00 RX_MODE(); 87b2: b0 12 44 8c call #0x8c44 P1OUT &= ~LED_RED; 87b6: d2 c3 21 00 bic.b #1, &0x0021 ;r3 As==01 eint(); 87ba: 32 d2 eint 87bc: 31 50 0c 00 add #12, r1 ;#0x000c } //this is weird, there has to be a better way to do this (keep partial NMEA sentances out until finished) if((seconds % interval) == 0 || (flags & GO_NOW)) //report every 20 second by default 87c0: 1c 42 0a 02 mov &0x020a,r12 87c4: 0a 45 mov r5, r10 87c6: b0 12 10 97 call #0x9710 87ca: 0e 93 tst r14 87cc: 03 24 jz $+8 ;abs 0x87d4 87ce: a2 b2 0e 02 bit #4, &0x020e ;r2 As==10 87d2: 08 24 jz $+18 ;abs 0x87e4 { if(Nmea_State != NMEA_START && Nmea_State != NMEA_IDLE) 87d4: 56 93 cmp.b #1, r6 ;r3 As==01 87d6: 0b 24 jz $+24 ;abs 0x87ee 87d8: 76 90 05 00 cmp.b #5, r6 ;#0x0005 87dc: 08 24 jz $+18 ;abs 0x87ee { flags |= (GO_NOW | TIMER_UP); //NMEA is mid sentance, force a retry until the sentance is done 87de: b2 d0 05 00 bis #5, &0x020e ;#0x0005 87e2: 0e 02 } if(loop == 0) 87e4: 48 93 tst.b r8 87e6: c6 22 jnz $-626 ;abs 0x8574 LPM3; //when we wake up it'll be because of an event 87e8: 32 d0 d0 00 bis #208, r2 ;#0x00d0 87ec: c3 3e jmp $-632 ;abs 0x8574 { flags |= (GO_NOW | TIMER_UP); //NMEA is mid sentance, force a retry until the sentance is done } else { dint(); 87ee: 32 c2 dint flags &= ~(TIMER_UP|GO_NOW); //clear the flag 87f0: b2 f0 fa ff and #-6, &0x020e ;#0xfffa 87f4: 0e 02 P1OUT |= LED_RED; 87f6: d2 d3 21 00 bis.b #1, &0x0021 ;r3 As==01 length=sprintf(rxbuf, "GND:%s %d,%s,%s,%s,%c,%s,%s", CALLSIGN, seconds,gps_utcbuf, gps_latbuf,gps_lonbuf,gps_fix,gps_altbuf,gps_spdbuf); //send the GPS data out 87fa: 3f 40 a4 00 mov #164, r15 ;#0x00a4 87fe: 0f 51 add r1, r15 8800: 0f 12 push r15 8802: 3f 40 9a 00 mov #154, r15 ;#0x009a 8806: 0f 51 add r1, r15 8808: 0f 12 push r15 880a: 5f 41 78 01 mov.b 376(r1),r15 ;0x0178(r1) 880e: 0f 12 push r15 8810: 3f 40 92 00 mov #146, r15 ;#0x0092 8814: 0f 51 add r1, r15 8816: 0f 12 push r15 8818: 3f 40 88 00 mov #136, r15 ;#0x0088 881c: 0f 51 add r1, r15 881e: 0f 12 push r15 8820: 3f 40 b6 00 mov #182, r15 ;#0x00b6 8824: 0f 51 add r1, r15 8826: 0f 12 push r15 8828: 12 12 0a 02 push &0x020a 882c: 30 12 d4 82 push #-32044 ;#0x82d4 8830: 30 12 1c 83 push #-31972 ;#0x831c 8834: 07 12 push r7 8836: b0 12 a6 8f call #0x8fa6 TX_STRING(rxbuf,length); 883a: 4e 4f mov.b r15, r14 883c: 0f 47 mov r7, r15 883e: b0 12 42 8d call #0x8d42 P2IFG &= ~GDO0; //clear our soiled GDO0 register 8842: f2 f0 bf ff and.b #-65, &0x002b ;#0xffbf 8846: 2b 00 RX_MODE(); 8848: b0 12 44 8c call #0x8c44 P1OUT &= ~LED_RED; 884c: d2 c3 21 00 bic.b #1, &0x0021 ;r3 As==01 eint(); 8850: 32 d2 eint 8852: 31 50 14 00 add #20, r1 ;#0x0014 8856: c6 3f jmp $-114 ;abs 0x87e4 8858: 3e 50 ff 01 add #511, r14 ;#0x01ff 885c: 0f 63 adc r15 885e: 90 3f jmp $-222 ;abs 0x8780 8860: 0e 4c mov r12, r14 8862: 0f 4d mov r13, r15 8864: 3e 50 b9 93 add #-27719,r14 ;#0x93b9 8868: 3f 60 d4 ff addc #-44, r15 ;#0xffd4 886c: 72 3f jmp $-282 ;abs 0x8752 { interval = length; length = sprintf(rxbuf,"\e[32mGND:GPS Interval is now %d\e[30m",interval); } else length = sprintf(rxbuf,"\e[32mGND:GPS Reporting every %d seconds\e[30m",interval); 886e: 05 12 push r5 8870: 30 12 38 83 push #-31944 ;#0x8338 8874: fd 3e jmp $-516 ;abs 0x8670 TX_STRING(rxbuf,length); } else if(strstr( rxbuf, "status" ) != NULL) //its a status inquiery 8876: 3e 40 65 83 mov #-31899,r14 ;#0x8365 887a: 0f 47 mov r7, r15 887c: b0 12 6e 96 call #0x966e 8880: 0f 93 tst r15 8882: 15 24 jz $+44 ;abs 0x88ae { length = sprintf(rxbuf,"GND:%s RSSI:%ddBm LQI:%d", CALLSIGN, RSSI_DBM, LQI); 8884: 5f 42 0c 02 mov.b &0x020c,r15 8888: 0f 12 push r15 888a: 5f 42 08 02 mov.b &0x0208,r15 888e: 8f 11 sxt r15 8890: 0f 12 push r15 8892: 30 12 d4 82 push #-32044 ;#0x82d4 8896: 30 12 6c 83 push #-31892 ;#0x836c 889a: 07 12 push r7 889c: b0 12 a6 8f call #0x8fa6 TX_STRING(rxbuf,length); 88a0: 4e 4f mov.b r15, r14 88a2: 0f 47 mov r7, r15 88a4: b0 12 42 8d call #0x8d42 88a8: 31 50 0a 00 add #10, r1 ;#0x000a 88ac: ea 3e jmp $-554 ;abs 0x8682 } else if(strstr( rxbuf, "now" ) != NULL) //report now 88ae: 3e 40 85 83 mov #-31867,r14 ;#0x8385 88b2: 0f 47 mov r7, r15 88b4: b0 12 6e 96 call #0x966e 88b8: 0f 93 tst r15 88ba: 04 24 jz $+10 ;abs 0x88c4 { flags |= GO_NOW | TIMER_UP; ///set event flags to trigger the reporting 88bc: b2 d0 05 00 bis #5, &0x020e ;#0x0005 88c0: 0e 02 88c2: df 3e jmp $-576 ;abs 0x8682 } else //command not recognized, give a pong to ack reception { P1OUT |= LED_GRN; 88c4: e2 d3 21 00 bis.b #2, &0x0021 ;r3 As==10 length = sprintf(rxbuf,"\e[34mGND:GPS Pong!\e[30m"); 88c8: 30 12 89 83 push #-31863 ;#0x8389 88cc: 07 12 push r7 88ce: b0 12 a6 8f call #0x8fa6 TX_STRING(rxbuf, length); 88d2: 4e 4f mov.b r15, r14 88d4: 0f 47 mov r7, r15 88d6: b0 12 42 8d call #0x8d42 P1OUT &= ~LED_GRN; 88da: e2 c3 21 00 bic.b #2, &0x0021 ;r3 As==10 88de: 21 52 add #4, r1 ;r2 As==10 88e0: d0 3e jmp $-606 ;abs 0x8682 } } else { if(memcmp("Pong!",rxbuf,5)==0) //if this is an ack to an outbound packet then we'll light a green light 88e2: 3d 40 05 00 mov #5, r13 ;#0x0005 88e6: 0e 47 mov r7, r14 88e8: 3f 40 a1 83 mov #-31839,r15 ;#0x83a1 88ec: b0 12 3e 96 call #0x963e 88f0: c8 3e jmp $-622 ;abs 0x8682 } break; case NMEA_START: //At this point we are looking to identify the name of the sentance if(rx_char == '\r' || rx_char == '\n'); //don't count a return in the buffer! 88f2: 7e 90 0d 00 cmp.b #13, r14 ;#0x000d 88f6: 12 24 jz $+38 ;abs 0x891c 88f8: 7e 90 0a 00 cmp.b #10, r14 ;#0x000a 88fc: 0f 24 jz $+32 ;abs 0x891c else //Normal characters are nice { gpsbuffer1[gps1buflength]=rx_char; 88fe: 5f 41 6e 01 mov.b 366(r1),r15 ;0x016e(r1) 8902: 0f 51 add r1, r15 8904: cf 4e 00 00 mov.b r14, 0(r15) ;0x0000(r15) gps1buflength++; 8908: d1 53 6e 01 inc.b 366(r1) ;0x016e(r1) if(gps1buflength > 10) 890c: f1 90 0b 00 cmp.b #11, 366(r1) ;#0x000b, 0x016e(r1) 8910: 6e 01 8912: 04 28 jnc $+10 ;abs 0x891c { gps1buflength = 0; 8914: c1 43 6e 01 mov.b #0, 366(r1) ;r3 As==00, 0x016e(r1) Nmea_State = NMEA_IDLE; 8918: 76 40 05 00 mov.b #5, r6 ;#0x0005 } } if(gps1buflength == 5) //GPXXX NMEA sentance identifier 891c: f1 90 05 00 cmp.b #5, 366(r1) ;#0x0005, 0x016e(r1) 8920: 6e 01 8922: 43 22 jnz $-888 ;abs 0x85aa { if(!memcmp(NMEA_ID_FIX_INFO,gpsbuffer1,5)) //This is a fix information sentance 8924: 3d 40 05 00 mov #5, r13 ;#0x0005 8928: 0e 41 mov r1, r14 892a: 3f 40 a7 83 mov #-31833,r15 ;#0x83a7 892e: b0 12 3e 96 call #0x963e 8932: 0f 93 tst r15 8934: 0b 20 jnz $+24 ;abs 0x894c { Nmea_State = NMEA_FIX_INFO; 8936: 66 43 mov.b #2, r6 ;r3 As==10 gps_utcbuflen=0; 8938: c1 43 73 01 mov.b #0, 371(r1) ;r3 As==00, 0x0173(r1) gps_latbuflen=0; 893c: c1 43 6f 01 mov.b #0, 367(r1) ;r3 As==00, 0x016f(r1) gps_lonbuflen=0; 8940: c1 43 70 01 mov.b #0, 368(r1) ;r3 As==00, 0x0170(r1) gps_altbuflen=0; 8944: c1 43 71 01 mov.b #0, 369(r1) ;r3 As==00, 0x0171(r1) 8948: 30 40 aa 85 br #0x85aa } else if(!memcmp(NMEA_ID_SPD,gpsbuffer1,5)) //This is a fix information sentance 894c: 3d 40 05 00 mov #5, r13 ;#0x0005 8950: 0e 41 mov r1, r14 8952: 3f 40 ad 83 mov #-31827,r15 ;#0x83ad 8956: b0 12 3e 96 call #0x963e 895a: 0f 93 tst r15 895c: 05 20 jnz $+12 ;abs 0x8968 { Nmea_State = NMEA_SPD; 895e: 66 42 mov.b #4, r6 ;r2 As==10 gps_spdbuflen=0; 8960: c1 43 72 01 mov.b #0, 370(r1) ;r3 As==00, 0x0172(r1) 8964: 30 40 aa 85 br #0x85aa } else Nmea_State = NMEA_IDLE; //Not something we care about 8968: 76 40 05 00 mov.b #5, r6 ;#0x0005 896c: 30 40 aa 85 br #0x85aa 8970: 2f 92 cmp #4, r15 ;r2 As==10 8972: 02 24 jz $+6 ;abs 0x8978 8974: 30 40 aa 85 br #0x85aa } } break; case NMEA_SPD: if(rx_char == '\r' || rx_char == '\n') break; 8978: 7e 90 0d 00 cmp.b #13, r14 ;#0x000d 897c: 02 20 jnz $+6 ;abs 0x8982 897e: 30 40 aa 85 br #0x85aa 8982: 7e 90 0a 00 cmp.b #10, r14 ;#0x000a 8986: 02 20 jnz $+6 ;abs 0x898c 8988: 30 40 aa 85 br #0x85aa if(rx_char == ',') 898c: 7e 90 2c 00 cmp.b #44, r14 ;#0x002c 8990: 16 24 jz $+46 ;abs 0x89be { commas++; } else if(commas == NMEA_SPD_COMMAS_KMHR && gps_spdbuflen < 6) 8992: 74 90 07 00 cmp.b #7, r4 ;#0x0007 8996: 02 24 jz $+6 ;abs 0x899c 8998: 30 40 aa 85 br #0x85aa 899c: f1 90 06 00 cmp.b #6, 370(r1) ;#0x0006, 0x0172(r1) 89a0: 72 01 89a2: 02 28 jnc $+6 ;abs 0x89a8 89a4: 30 40 aa 85 br #0x85aa { gps_spdbuf[gps_spdbuflen] = rx_char; 89a8: 5f 41 72 01 mov.b 370(r1),r15 ;0x0172(r1) 89ac: 0f 51 add r1, r15 89ae: cf 4e a4 00 mov.b r14, 164(r15);0x00a4(r15) gps_spdbuf[gps_spdbuflen+1] = '\0'; 89b2: cf 43 a5 00 mov.b #0, 165(r15);r3 As==00, 0x00a5(r15) gps_spdbuflen ++; 89b6: d1 53 72 01 inc.b 370(r1) ;0x0172(r1) } break; 89ba: 30 40 aa 85 br #0x85aa case NMEA_SPD: if(rx_char == '\r' || rx_char == '\n') break; if(rx_char == ',') { commas++; 89be: 54 53 inc.b r4 89c0: 30 40 aa 85 br #0x85aa switch(Nmea_State) { case NMEA_IDLE: break; case NMEA_FIX_INFO: if(rx_char == '\r' || rx_char == '\n') break; 89c4: 7e 90 0d 00 cmp.b #13, r14 ;#0x000d 89c8: 02 20 jnz $+6 ;abs 0x89ce 89ca: 30 40 aa 85 br #0x85aa 89ce: 7e 90 0a 00 cmp.b #10, r14 ;#0x000a 89d2: 02 20 jnz $+6 ;abs 0x89d8 89d4: 30 40 aa 85 br #0x85aa if(rx_char == ',') 89d8: 7e 90 2c 00 cmp.b #44, r14 ;#0x002c 89dc: f0 27 jz $-30 ;abs 0x89be { commas++; } else if(commas == NMEA_FIX_COMMAS_ALT && gps_altbuflen < 10) 89de: 74 90 09 00 cmp.b #9, r4 ;#0x0009 89e2: 48 24 jz $+146 ;abs 0x8a74 { gps_altbuf[gps_altbuflen] = rx_char; gps_altbuf[gps_altbuflen+1] = '\0'; gps_altbuflen ++; } else if(commas == NMEA_FIX_COMMAS_UTC && gps_utcbuflen < 9) 89e4: 54 93 cmp.b #1, r4 ;r3 As==01 89e6: 36 24 jz $+110 ;abs 0x8a54 { gps_utcbuf[gps_utcbuflen] = rx_char; gps_utcbuf[gps_utcbuflen+1] = '\0'; gps_utcbuflen ++; } else if(commas == NMEA_FIX_COMMAS_LAT && gps_latbuflen < 10) 89e8: 64 93 cmp.b #2, r4 ;r3 As==10 89ea: 24 24 jz $+74 ;abs 0x8a34 { gps_latbuf[gps_latbuflen] = rx_char; gps_latbuf[gps_latbuflen+1] = '\0'; gps_latbuflen ++; } else if(commas == NMEA_FIX_COMMAS_LON && gps_lonbuflen < 10) 89ec: 64 92 cmp.b #4, r4 ;r2 As==10 89ee: 12 24 jz $+38 ;abs 0x8a14 { gps_lonbuf[gps_lonbuflen] = rx_char; gps_lonbuf[gps_lonbuflen+1] = '\0'; gps_lonbuflen ++; } else if(commas == NMEA_FIX_COMMAS_FIX) 89f0: 74 90 06 00 cmp.b #6, r4 ;#0x0006 89f4: 02 24 jz $+6 ;abs 0x89fa 89f6: 30 40 aa 85 br #0x85aa { gps_fix = rx_char; 89fa: c1 4e 74 01 mov.b r14, 372(r1) ;0x0174(r1) if(gps_fix == '0') 89fe: 7e 90 30 00 cmp.b #48, r14 ;#0x0030 8a02: 04 24 jz $+10 ;abs 0x8a0c //P1OUT |= LED_RED; P1OUT &= ~LED_GRN; } else { P1OUT |= LED_GRN; 8a04: e2 d3 21 00 bis.b #2, &0x0021 ;r3 As==10 //P1OUT &= ~LED_RED; } } break; 8a08: 30 40 aa 85 br #0x85aa { gps_fix = rx_char; if(gps_fix == '0') { //P1OUT |= LED_RED; P1OUT &= ~LED_GRN; 8a0c: e2 c3 21 00 bic.b #2, &0x0021 ;r3 As==10 8a10: 30 40 aa 85 br #0x85aa 8a14: f1 90 0a 00 cmp.b #10, 368(r1) ;#0x000a, 0x0170(r1) 8a18: 70 01 8a1a: ea 2f jc $-42 ;abs 0x89f0 gps_latbuf[gps_latbuflen+1] = '\0'; gps_latbuflen ++; } else if(commas == NMEA_FIX_COMMAS_LON && gps_lonbuflen < 10) { gps_lonbuf[gps_lonbuflen] = rx_char; 8a1c: 5f 41 70 01 mov.b 368(r1),r15 ;0x0170(r1) 8a20: 0f 51 add r1, r15 8a22: df 42 11 02 mov.b &0x0211,140(r15);0x008c(r15) 8a26: 8c 00 gps_lonbuf[gps_lonbuflen+1] = '\0'; 8a28: cf 43 8d 00 mov.b #0, 141(r15);r3 As==00, 0x008d(r15) gps_lonbuflen ++; 8a2c: d1 53 70 01 inc.b 368(r1) ;0x0170(r1) 8a30: 30 40 aa 85 br #0x85aa 8a34: f1 90 0a 00 cmp.b #10, 367(r1) ;#0x000a, 0x016f(r1) 8a38: 6f 01 8a3a: d8 2f jc $-78 ;abs 0x89ec gps_utcbuf[gps_utcbuflen+1] = '\0'; gps_utcbuflen ++; } else if(commas == NMEA_FIX_COMMAS_LAT && gps_latbuflen < 10) { gps_latbuf[gps_latbuflen] = rx_char; 8a3c: 5f 41 6f 01 mov.b 367(r1),r15 ;0x016f(r1) 8a40: 0f 51 add r1, r15 8a42: df 42 11 02 mov.b &0x0211,128(r15);0x0080(r15) 8a46: 80 00 gps_latbuf[gps_latbuflen+1] = '\0'; 8a48: cf 43 81 00 mov.b #0, 129(r15);r3 As==00, 0x0081(r15) gps_latbuflen ++; 8a4c: d1 53 6f 01 inc.b 367(r1) ;0x016f(r1) 8a50: 30 40 aa 85 br #0x85aa 8a54: f1 90 09 00 cmp.b #9, 371(r1) ;#0x0009, 0x0173(r1) 8a58: 73 01 8a5a: c6 2f jc $-114 ;abs 0x89e8 gps_altbuf[gps_altbuflen+1] = '\0'; gps_altbuflen ++; } else if(commas == NMEA_FIX_COMMAS_UTC && gps_utcbuflen < 9) { gps_utcbuf[gps_utcbuflen] = rx_char; 8a5c: 5f 41 73 01 mov.b 371(r1),r15 ;0x0173(r1) 8a60: 0f 51 add r1, r15 8a62: df 42 11 02 mov.b &0x0211,172(r15);0x00ac(r15) 8a66: ac 00 gps_utcbuf[gps_utcbuflen+1] = '\0'; 8a68: cf 43 ad 00 mov.b #0, 173(r15);r3 As==00, 0x00ad(r15) gps_utcbuflen ++; 8a6c: d1 53 73 01 inc.b 371(r1) ;0x0173(r1) 8a70: 30 40 aa 85 br #0x85aa 8a74: f1 90 0a 00 cmp.b #10, 369(r1) ;#0x000a, 0x0171(r1) 8a78: 71 01 8a7a: b4 2f jc $-150 ;abs 0x89e4 { commas++; } else if(commas == NMEA_FIX_COMMAS_ALT && gps_altbuflen < 10) { gps_altbuf[gps_altbuflen] = rx_char; 8a7c: 5f 41 71 01 mov.b 369(r1),r15 ;0x0171(r1) 8a80: 0f 51 add r1, r15 8a82: cf 4e 98 00 mov.b r14, 152(r15);0x0098(r15) gps_altbuf[gps_altbuflen+1] = '\0'; 8a86: cf 43 99 00 mov.b #0, 153(r15);r3 As==00, 0x0099(r15) gps_altbuflen ++; 8a8a: d1 53 71 01 inc.b 369(r1) ;0x0171(r1) 8a8e: 30 40 aa 85 br #0x85aa loop = 1; flags &= ~RXCHAR_RDY; if(rx_char == '$') //reset the state when a new sentance comes in { gps1buflength = 0; 8a92: c1 43 6e 01 mov.b #0, 366(r1) ;r3 As==00, 0x016e(r1) commas=0; 8a96: 44 43 clr.b r4 Nmea_State = NMEA_START; 8a98: 56 43 mov.b #1, r6 ;r3 As==01 8a9a: 30 40 aa 85 br #0x85aa } if(loop == 0) LPM3; //when we wake up it'll be because of an event } } 8a9e: 31 50 76 01 add #374, r1 ;#0x0176 8aa2: 30 40 56 97 br #0x9756 00008aa6 : void CCXX_WRITE_SPI_RF_SETTINGS() { // Write register settings CCXX_SPI_WRREG(CCxxx0_IOCFG2, P2_IOCFG2); // GDO2 output pin config. 8aa6: 7e 40 0b 00 mov.b #11, r14 ;#0x000b 8aaa: 4f 43 clr.b r15 8aac: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_IOCFG0, P2_IOCFG0); // GDO0 output pin config. 8ab0: 7e 40 06 00 mov.b #6, r14 ;#0x0006 8ab4: 6f 43 mov.b #2, r15 ;r3 As==10 8ab6: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_PKTLEN, P2_PKTLEN); // Packet length. 8aba: 7e 40 3c 00 mov.b #60, r14 ;#0x003c 8abe: 7f 40 06 00 mov.b #6, r15 ;#0x0006 8ac2: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_PKTCTRL1, P2_PKTCTRL1); // Packet automation control. 8ac6: 6e 42 mov.b #4, r14 ;r2 As==10 8ac8: 7f 40 07 00 mov.b #7, r15 ;#0x0007 8acc: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_PKTCTRL0, P2_PKTCTRL0); // Packet automation control. 8ad0: 7e 40 05 00 mov.b #5, r14 ;#0x0005 8ad4: 7f 42 mov.b #8, r15 ;r2 As==11 8ad6: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_ADDR, P2_ADDR); // Device address. 8ada: 5e 43 mov.b #1, r14 ;r3 As==01 8adc: 7f 40 09 00 mov.b #9, r15 ;#0x0009 8ae0: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_CHANNR, P2_CHANNR); // Channel number. 8ae4: 7e 40 9a ff mov.b #-102, r14 ;#0xff9a 8ae8: 7f 40 0a 00 mov.b #10, r15 ;#0x000a 8aec: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FSCTRL1, P2_FSCTRL1); // Freq synthesizer control. 8af0: 7e 40 0a 00 mov.b #10, r14 ;#0x000a 8af4: 7f 40 0b 00 mov.b #11, r15 ;#0x000b 8af8: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FSCTRL0, P2_FSCTRL0); // Freq synthesizer control. 8afc: 4e 43 clr.b r14 8afe: 7f 40 0c 00 mov.b #12, r15 ;#0x000c 8b02: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FREQ2, P2_FREQ2); // Freq control word, high byte 8b06: 7e 40 5c 00 mov.b #92, r14 ;#0x005c 8b0a: 7f 40 0d 00 mov.b #13, r15 ;#0x000d 8b0e: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FREQ1, P2_FREQ1); // Freq control word, mid byte. 8b12: 7e 40 4f 00 mov.b #79, r14 ;#0x004f 8b16: 7f 40 0e 00 mov.b #14, r15 ;#0x000e 8b1a: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FREQ0, P2_FREQ0); // Freq control word, low byte. 8b1e: 7e 40 c0 ff mov.b #-64, r14 ;#0xffc0 8b22: 7f 40 0f 00 mov.b #15, r15 ;#0x000f 8b26: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_MDMCFG4, P2_MDMCFG4); // Modem configuration. 8b2a: 7e 40 2d 00 mov.b #45, r14 ;#0x002d 8b2e: 7f 40 10 00 mov.b #16, r15 ;#0x0010 8b32: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_MDMCFG3, P2_MDMCFG3); // Modem configuration. 8b36: 7e 40 3b 00 mov.b #59, r14 ;#0x003b 8b3a: 7f 40 11 00 mov.b #17, r15 ;#0x0011 8b3e: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_MDMCFG2, P2_MDMCFG2); // Modem configuration. 8b42: 7e 40 73 00 mov.b #115, r14 ;#0x0073 8b46: 7f 40 12 00 mov.b #18, r15 ;#0x0012 8b4a: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_MDMCFG1, P2_MDMCFG1); // Modem configuration. 8b4e: 7e 40 23 00 mov.b #35, r14 ;#0x0023 8b52: 7f 40 13 00 mov.b #19, r15 ;#0x0013 8b56: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_MDMCFG0, P2_MDMCFG0); // Modem configuration. 8b5a: 7e 40 b9 ff mov.b #-71, r14 ;#0xffb9 8b5e: 7f 40 14 00 mov.b #20, r15 ;#0x0014 8b62: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_DEVIATN, P2_DEVIATN); // Modem dev (when FSK mod en) 8b66: 5e 43 mov.b #1, r14 ;r3 As==01 8b68: 7f 40 15 00 mov.b #21, r15 ;#0x0015 8b6c: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_MCSM1 , P2_MCSM1 ); //MainRadio Cntrl State Machine 8b70: 7e 40 33 00 mov.b #51, r14 ;#0x0033 8b74: 7f 40 17 00 mov.b #23, r15 ;#0x0017 8b78: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_MCSM0 , P2_MCSM0 ); //MainRadio Cntrl State Machine 8b7c: 7e 40 18 00 mov.b #24, r14 ;#0x0018 8b80: 7f 40 18 00 mov.b #24, r15 ;#0x0018 8b84: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FOCCFG, P2_FOCCFG); // Freq Offset Compens. Config 8b88: 7e 40 1d 00 mov.b #29, r14 ;#0x001d 8b8c: 7f 40 19 00 mov.b #25, r15 ;#0x0019 8b90: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_BSCFG, P2_BSCFG); // Bit synchronization config. 8b94: 7e 40 1c 00 mov.b #28, r14 ;#0x001c 8b98: 7f 40 1a 00 mov.b #26, r15 ;#0x001a 8b9c: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_AGCCTRL2, P2_AGCCTRL2); // AGC control. 8ba0: 7e 40 c7 ff mov.b #-57, r14 ;#0xffc7 8ba4: 7f 40 1b 00 mov.b #27, r15 ;#0x001b 8ba8: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_AGCCTRL1, P2_AGCCTRL1); // AGC control. 8bac: 4e 43 clr.b r14 8bae: 7f 40 1c 00 mov.b #28, r15 ;#0x001c 8bb2: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_AGCCTRL0, P2_AGCCTRL0); // AGC control. 8bb6: 7e 40 b0 ff mov.b #-80, r14 ;#0xffb0 8bba: 7f 40 1d 00 mov.b #29, r15 ;#0x001d 8bbe: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FREND1, P2_FREND1); // Front end RX configuration. 8bc2: 7e 40 b6 ff mov.b #-74, r14 ;#0xffb6 8bc6: 7f 40 21 00 mov.b #33, r15 ;#0x0021 8bca: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FREND0, P2_FREND0); // Front end RX configuration. 8bce: 7e 40 10 00 mov.b #16, r14 ;#0x0010 8bd2: 7f 40 22 00 mov.b #34, r15 ;#0x0022 8bd6: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FSCAL3, P2_FSCAL3); // Frequency synthesizer cal. 8bda: 7e 40 ea ff mov.b #-22, r14 ;#0xffea 8bde: 7f 40 23 00 mov.b #35, r15 ;#0x0023 8be2: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FSCAL2, P2_FSCAL2); // Frequency synthesizer cal. 8be6: 7e 40 0a 00 mov.b #10, r14 ;#0x000a 8bea: 7f 40 24 00 mov.b #36, r15 ;#0x0024 8bee: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FSCAL1, P2_FSCAL1); // Frequency synthesizer cal. 8bf2: 4e 43 clr.b r14 8bf4: 7f 40 25 00 mov.b #37, r15 ;#0x0025 8bf8: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FSCAL0, P2_FSCAL0); // Frequency synthesizer cal. 8bfc: 7e 40 11 00 mov.b #17, r14 ;#0x0011 8c00: 7f 40 26 00 mov.b #38, r15 ;#0x0026 8c04: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_FSTEST, P2_FSTEST); // Frequency synthesizer cal. 8c08: 7e 40 59 00 mov.b #89, r14 ;#0x0059 8c0c: 7f 40 29 00 mov.b #41, r15 ;#0x0029 8c10: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_TEST2, P2_TEST2); // Various test settings. 8c14: 7e 40 88 ff mov.b #-120, r14 ;#0xff88 8c18: 7f 40 2c 00 mov.b #44, r15 ;#0x002c 8c1c: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_TEST1, P2_TEST1); // Various test settings. 8c20: 7e 40 31 00 mov.b #49, r14 ;#0x0031 8c24: 7f 40 2d 00 mov.b #45, r15 ;#0x002d 8c28: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_TEST0, P2_TEST0); // Various test settings. 8c2c: 7e 40 0b 00 mov.b #11, r14 ;#0x000b 8c30: 7f 40 2e 00 mov.b #46, r15 ;#0x002e 8c34: b0 12 1e 8e call #0x8e1e CCXX_SPI_WRREG(CCxxx0_PATABLE, P2_PATABLE); // Output Power 8c38: 7e 43 mov.b #-1, r14 ;r3 As==11 8c3a: 7f 40 3e 00 mov.b #62, r15 ;#0x003e 8c3e: b0 12 1e 8e call #0x8e1e } 8c42: 30 41 ret 00008c44 : Interrupt driven! yay! */ void RX_MODE() { CCXX_SPI_STROBE(CCxxx0_SIDLE); 8c44: 7f 40 36 00 mov.b #54, r15 ;#0x0036 8c48: b0 12 8c 8d call #0x8d8c while(status!=15) //(15)31 for return to TX on complete, see MCSM1 8c4c: f2 90 0f 00 cmp.b #15, &0x0210 ;#0x000f 8c50: 10 02 8c52: 08 24 jz $+18 ;abs 0x8c64 CCXX_SPI_STROBE(CCxxx0_SNOP) ; //(wait for 15, idle)read status byte.... 8c54: 7f 40 3d 00 mov.b #61, r15 ;#0x003d 8c58: b0 12 8c 8d call #0x8d8c 8c5c: f2 90 0f 00 cmp.b #15, &0x0210 ;#0x000f 8c60: 10 02 8c62: f8 23 jnz $-14 ;abs 0x8c54 CCXX_SPI_STROBE(CCxxx0_SRX);//Recieve Mode 8c64: 7f 40 34 00 mov.b #52, r15 ;#0x0034 8c68: b0 12 8c 8d call #0x8d8c } 8c6c: 30 41 ret 00008c6e : char RX_STRING(unsigned char *rxbuf, unsigned char length) { 8c6e: 0b 12 push r11 8c70: 0a 12 push r10 8c72: 09 12 push r9 8c74: 08 12 push r8 8c76: 07 12 push r7 8c78: 06 12 push r6 8c7a: 0a 4f mov r15, r10 8c7c: 47 4e mov.b r14, r7 //interrupt driven, GDO0 had better be low! //if((P2IN&GDO0) == GDO0) //wait wha? // break; pkt_length = CCXX_SPI_RDREG(CCxxx0_RXFIFO);//length of the packet 8c7e: 7f 40 bf ff mov.b #-65, r15 ;#0xffbf 8c82: b0 12 c2 8d call #0x8dc2 8c86: 48 4f mov.b r15, r8 real_length = CCXX_SPI_RDREG(CCxxx0_RXBYTES);//length of the packet 8c88: 7f 40 3b 00 mov.b #59, r15 ;#0x003b 8c8c: b0 12 c2 8d call #0x8dc2 8c90: 46 4f mov.b r15, r6 for(i=0; i < length && i < pkt_length; i++) 8c92: 49 43 clr.b r9 8c94: 49 97 cmp.b r7, r9 8c96: 02 2c jc $+6 ;abs 0x8c9c 8c98: 58 93 cmp.b #1, r8 ;r3 As==01 8c9a: 2f 2c jc $+96 ;abs 0x8cfa { rxbuf[i] = CCXX_SPI_RDREG(CCxxx0_RXFIFO);//get the byte //GPSbuf[i] = rxbuf[i]; } rxbuf[i] = '\0';//set the NULL terminator 8c9c: 4f 49 mov.b r9, r15 8c9e: 0a 5f add r15, r10 8ca0: ca 43 00 00 mov.b #0, 0(r10) ;r3 As==00, 0x0000(r10) RSSI = CCXX_SPI_RDREG(CCxxx0_RXFIFO);//get the ESSI 8ca4: 7f 40 bf ff mov.b #-65, r15 ;#0xffbf 8ca8: b0 12 c2 8d call #0x8dc2 8cac: c2 4f 09 02 mov.b r15, &0x0209 LQI = CCXX_SPI_RDREG(CCxxx0_RXFIFO);//get the CRC 8cb0: 7f 40 bf ff mov.b #-65, r15 ;#0xffbf 8cb4: b0 12 c2 8d call #0x8dc2 8cb8: c2 4f 0c 02 mov.b r15, &0x020c PKTSTATUS = CCXX_SPI_RDREG(CCxxx0_PKTSTATUS); 8cbc: 7f 40 38 00 mov.b #56, r15 ;#0x0038 8cc0: b0 12 c2 8d call #0x8dc2 8cc4: c2 4f 0d 02 mov.b r15, &0x020d if(real_length != (pkt_length + 2)) //packets lengths dont match, LQI mis-reported 8cc8: 4e 46 mov.b r6, r14 8cca: 4f 48 mov.b r8, r15 8ccc: 2f 53 incd r15 8cce: 0e 9f cmp r15, r14 8cd0: 03 24 jz $+8 ;abs 0x8cd8 LQI &= ~bit7; //force it to be INVALID! 8cd2: f2 f0 7f 00 and.b #127, &0x020c ;#0x007f 8cd6: 0c 02 if (RSSI >= 128) 8cd8: 5f 42 09 02 mov.b &0x0209,r15 8cdc: 7f 90 80 00 cmp.b #128, r15 ;#0x0080 8ce0: 09 28 jnc $+20 ;abs 0x8cf4 RSSI_DBM = (int)((int )(RSSI - 256) / 2) - 72; 8ce2: 4e 4f mov.b r15, r14 8ce4: 0f 4e mov r14, r15 8ce6: 3f 50 00 ff add #-256, r15 ;#0xff00 8cea: 02 30 jn $+6 ;abs 0x8cf0 8cec: 0f 11 rra r15 8cee: 14 3c jmp $+42 ;abs 0x8d18 8cf0: 1f 53 inc r15 8cf2: fc 3f jmp $-6 ;abs 0x8cec else RSSI_DBM = (RSSI / 2) - 72; 8cf4: 12 c3 clrc 8cf6: 4f 10 rrc.b r15 8cf8: 0f 3c jmp $+32 ;abs 0x8d18 pkt_length = CCXX_SPI_RDREG(CCxxx0_RXFIFO);//length of the packet real_length = CCXX_SPI_RDREG(CCxxx0_RXBYTES);//length of the packet for(i=0; i < length && i < pkt_length; i++) { rxbuf[i] = CCXX_SPI_RDREG(CCxxx0_RXFIFO);//get the byte 8cfa: 4f 49 mov.b r9, r15 8cfc: 0b 4a mov r10, r11 8cfe: 0b 5f add r15, r11 8d00: 7f 40 bf ff mov.b #-65, r15 ;#0xffbf 8d04: b0 12 c2 8d call #0x8dc2 8d08: cb 4f 00 00 mov.b r15, 0(r11) ;0x0000(r11) //if((P2IN&GDO0) == GDO0) //wait wha? // break; pkt_length = CCXX_SPI_RDREG(CCxxx0_RXFIFO);//length of the packet real_length = CCXX_SPI_RDREG(CCxxx0_RXBYTES);//length of the packet for(i=0; i < length && i < pkt_length; i++) 8d0c: 59 53 inc.b r9 8d0e: 49 97 cmp.b r7, r9 8d10: c5 2f jc $-116 ;abs 0x8c9c 8d12: 49 98 cmp.b r8, r9 8d14: f2 2b jnc $-26 ;abs 0x8cfa 8d16: c2 3f jmp $-122 ;abs 0x8c9c 8d18: 7f 50 b8 ff add.b #-72, r15 ;#0xffb8 8d1c: c2 4f 08 02 mov.b r15, &0x0208 RSSI_DBM = (int)((int )(RSSI - 256) / 2) - 72; else RSSI_DBM = (RSSI / 2) - 72; CCXX_SPI_STROBE(CCxxx0_SFRX); //flush the buffer 8d20: 7f 40 3a 00 mov.b #58, r15 ;#0x003a 8d24: b0 12 8c 8d call #0x8d8c CCXX_SPI_STROBE(CCxxx0_SIDLE); //return to IDLE state 8d28: 7f 40 36 00 mov.b #54, r15 ;#0x0036 8d2c: b0 12 8c 8d call #0x8d8c return i; //i = real length 8d30: 4f 49 mov.b r9, r15 8d32: 8f 11 sxt r15 } 8d34: 36 41 pop r6 8d36: 37 41 pop r7 8d38: 38 41 pop r8 8d3a: 39 41 pop r9 8d3c: 3a 41 pop r10 8d3e: 3b 41 pop r11 8d40: 30 41 ret 00008d42 : /** Transmit a string of bytes. */ void TX_STRING(unsigned char *txstring, unsigned char length) { 8d42: 0b 12 push r11 8d44: 0a 12 push r10 8d46: 0a 4f mov r15, r10 8d48: 4b 4e mov.b r14, r11 unsigned char i; //length += 3; do{ CCXX_SPI_STROBE(CCxxx0_SIDLE);//Idle 8d4a: 7f 40 36 00 mov.b #54, r15 ;#0x0036 8d4e: b0 12 8c 8d call #0x8d8c }while((status & CCxxx0_STAT_ADDR) != CCxxx0_STAT_IDLE); //wait for idle 8d52: f2 b0 70 00 bit.b #112, &0x0210 ;#0x0070 8d56: 10 02 8d58: f8 23 jnz $-14 ;abs 0x8d4a { if(i < length) CCXX_SPI_WRREG(CCxxx0_TXFIFO, txstring[i]);//Write data to FIFO }*/ CCXX_SPI_BURST_WRREG(CCxxx0_TXFIFO_BURST, txstring, length); 8d5a: 4d 4b mov.b r11, r13 8d5c: 0e 4a mov r10, r14 8d5e: 7f 40 7f 00 mov.b #127, r15 ;#0x007f 8d62: b0 12 66 8e call #0x8e66 CCXX_SPI_STROBE(CCxxx0_STX); // send tx strobe and TX begins, returns to 15 or 31 when complete (depending on MCSM1) 8d66: 7f 40 35 00 mov.b #53, r15 ;#0x0035 8d6a: b0 12 8c 8d call #0x8d8c do { CCXX_SPI_STROBE(CCxxx0_SNOP) ; //(wait for 15, idle)read status byte.... 8d6e: 7f 40 3d 00 mov.b #61, r15 ;#0x003d 8d72: b0 12 8c 8d call #0x8d8c if(status == 31) //fast RX mode yay 8d76: 5f 42 10 02 mov.b &0x0210,r15 8d7a: 7f 90 1f 00 cmp.b #31, r15 ;#0x001f 8d7e: 03 24 jz $+8 ;abs 0x8d86 break; }while((status & CCxxx0_STAT_ADDR) != CCxxx0_STAT_IDLE); //(15)31 for return to TX on complete, see MCSM1 8d80: 7f f0 70 00 and.b #112, r15 ;#0x0070 8d84: f4 23 jnz $-22 ;abs 0x8d6e } 8d86: 3a 41 pop r10 8d88: 3b 41 pop r11 8d8a: 30 41 ret 00008d8c : #include "hardware.h" /** Strobe a command to the CCXX */ void CCXX_SPI_STROBE(char reg) { 8d8c: 4e 4f mov.b r15, r14 status=0; 8d8e: c2 43 10 02 mov.b #0, &0x0210 ;r3 As==00 P3OUT &= ~CSn; //pull CSn low to activate chip 8d92: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 while(P3IN & SOMI); //wait for the CCXX good signal, wait for SOMI to drop low 8d96: e2 b2 18 00 bit.b #4, &0x0018 ;r2 As==10 8d9a: fd 23 jnz $-4 ;abs 0x8d96 P3SEL |= UARTB0_SPI_MODULES; //this will bring the clock edge high 8d9c: f2 d0 0e 00 bis.b #14, &0x001b ;#0x000e 8da0: 1b 00 IFG2 &= ~UCB0RXIFG; 8da2: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = reg; 8da6: c2 4e 6f 00 mov.b r14, &0x006f while (!(IFG2 & UCB0RXIFG)); 8daa: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8dae: fd 27 jz $-4 ;abs 0x8daa status = UCB0RXBUF; 8db0: d2 42 6e 00 mov.b &0x006e,&0x0210 8db4: 10 02 P3OUT |= CSn; //pull CSn high, we're done with the transfer 8db6: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 P3SEL &= ~UARTB0_SPI_MODULES; //take the pins back out of SPI mode 8dba: f2 f0 f1 ff and.b #-15, &0x001b ;#0xfff1 8dbe: 1b 00 } 8dc0: 30 41 ret 00008dc2 : /** Read a register from the CCXX */ char CCXX_SPI_RDREG(char reg) { 8dc2: 4e 4f mov.b r15, r14 unsigned char rx=0; if(reg >= 0x30) 8dc4: 7f 90 30 00 cmp.b #48, r15 ;#0x0030 8dc8: 1e 38 jl $+62 ;abs 0x8e06 reg |= 0xC0; 8dca: 7e d0 c0 ff bis.b #-64, r14 ;#0xffc0 else reg |= 0x80; status=0; 8dce: c2 43 10 02 mov.b #0, &0x0210 ;r3 As==00 P3OUT &= ~CSn; //pull CSn low to activate chip 8dd2: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 while(P3IN & SOMI); //wait for the CCXX good signal, wait for SOMI to drop low 8dd6: e2 b2 18 00 bit.b #4, &0x0018 ;r2 As==10 8dda: fd 23 jnz $-4 ;abs 0x8dd6 P3SEL |= UARTB0_SPI_MODULES; //this will bring the clock edge high 8ddc: f2 d0 0e 00 bis.b #14, &0x001b ;#0x000e 8de0: 1b 00 IFG2 &= ~UCB0RXIFG; 8de2: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = reg; 8de6: c2 4e 6f 00 mov.b r14, &0x006f while (!(IFG2 & UCB0RXIFG)); 8dea: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8dee: fd 27 jz $-4 ;abs 0x8dea status = UCB0RXBUF; 8df0: d2 42 6e 00 mov.b &0x006e,&0x0210 8df4: 10 02 IFG2 &= ~UCB0RXIFG; 8df6: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = 0; 8dfa: c2 43 6f 00 mov.b #0, &0x006f ;r3 As==00 while (!(IFG2 & UCB0RXIFG)); 8dfe: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8e02: fd 27 jz $-4 ;abs 0x8dfe 8e04: 03 3c jmp $+8 ;abs 0x8e0c { unsigned char rx=0; if(reg >= 0x30) reg |= 0xC0; else reg |= 0x80; 8e06: 7e d0 80 ff bis.b #-128, r14 ;#0xff80 8e0a: e1 3f jmp $-60 ;abs 0x8dce status = UCB0RXBUF; IFG2 &= ~UCB0RXIFG; UCB0TXBUF = 0; while (!(IFG2 & UCB0RXIFG)); rx = UCB0RXBUF; 8e0c: 5f 42 6e 00 mov.b &0x006e,r15 P3OUT |= CSn; //pull CSn high, we're done with the transfer 8e10: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 P3SEL &= ~UARTB0_SPI_MODULES; //take the pins back out of SPI mode 8e14: f2 f0 f1 ff and.b #-15, &0x001b ;#0xfff1 8e18: 1b 00 return rx; 8e1a: 8f 11 sxt r15 } 8e1c: 30 41 ret 00008e1e : /** Write a register from the CCXX */ void CCXX_SPI_WRREG(char reg, char byte) { 8e1e: 4d 4f mov.b r15, r13 unsigned char dummy; status=0; 8e20: c2 43 10 02 mov.b #0, &0x0210 ;r3 As==00 P3OUT &= ~CSn; //pull CSn low to activate chip 8e24: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 while(P3IN & SOMI); //wait for the CCXX good signal, wait for SOMI to drop low 8e28: e2 b2 18 00 bit.b #4, &0x0018 ;r2 As==10 8e2c: fd 23 jnz $-4 ;abs 0x8e28 P3SEL |= UARTB0_SPI_MODULES; //this will bring the clock edge high 8e2e: f2 d0 0e 00 bis.b #14, &0x001b ;#0x000e 8e32: 1b 00 IFG2 &= ~UCB0RXIFG; 8e34: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = reg; 8e38: c2 4d 6f 00 mov.b r13, &0x006f while (!(IFG2 & UCB0RXIFG)); 8e3c: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8e40: fd 27 jz $-4 ;abs 0x8e3c status = UCB0RXBUF; 8e42: d2 42 6e 00 mov.b &0x006e,&0x0210 8e46: 10 02 //lil delay //delay(1); IFG2 &= ~UCB0RXIFG; 8e48: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = byte; 8e4c: c2 4e 6f 00 mov.b r14, &0x006f while (!(IFG2 & UCB0RXIFG)); 8e50: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8e54: fd 27 jz $-4 ;abs 0x8e50 dummy = UCB0RXBUF; 8e56: 5f 42 6e 00 mov.b &0x006e,r15 P3OUT |= CSn; //pull CSn high, we're done with the transfer 8e5a: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 P3SEL &= ~UARTB0_SPI_MODULES; //take the pins back out of SPI mode 8e5e: f2 f0 f1 ff and.b #-15, &0x001b ;#0xfff1 8e62: 1b 00 } 8e64: 30 41 ret 00008e66 : /** Write many bytes to the CCXX */ void CCXX_SPI_BURST_WRREG(char reg, char *buf, char length) { 8e66: 4c 4f mov.b r15, r12 unsigned char dummy; unsigned int index; status=0; 8e68: c2 43 10 02 mov.b #0, &0x0210 ;r3 As==00 P3OUT &= ~CSn; //pull CSn low to activate chip 8e6c: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 while(P3IN & SOMI); //wait for the CCXX good signal, wait for SOMI to drop low 8e70: e2 b2 18 00 bit.b #4, &0x0018 ;r2 As==10 8e74: fd 23 jnz $-4 ;abs 0x8e70 P3SEL |= UARTB0_SPI_MODULES; //this will bring the clock edge high 8e76: f2 d0 0e 00 bis.b #14, &0x001b ;#0x000e 8e7a: 1b 00 IFG2 &= ~UCB0RXIFG; 8e7c: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = reg; 8e80: c2 4c 6f 00 mov.b r12, &0x006f while (!(IFG2 & UCB0RXIFG)); 8e84: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8e88: fd 27 jz $-4 ;abs 0x8e84 status = UCB0RXBUF; 8e8a: d2 42 6e 00 mov.b &0x006e,&0x0210 8e8e: 10 02 IFG2 &= ~UCB0RXIFG; 8e90: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = length; 8e94: c2 4d 6f 00 mov.b r13, &0x006f while (!(IFG2 & UCB0RXIFG)); 8e98: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8e9c: fd 27 jz $-4 ;abs 0x8e98 dummy = UCB0RXBUF; 8e9e: 5f 42 6e 00 mov.b &0x006e,r15 for(index = 0; index < length; index++) 8ea2: 0c 43 clr r12 8ea4: 8d 11 sxt r13 8ea6: 0c 9d cmp r13, r12 8ea8: 0e 2c jc $+30 ;abs 0x8ec6 { IFG2 &= ~UCB0RXIFG; 8eaa: e2 c2 03 00 bic.b #4, &0x0003 ;r2 As==10 UCB0TXBUF = buf[index]; 8eae: 0f 4e mov r14, r15 8eb0: 0f 5c add r12, r15 8eb2: e2 4f 6f 00 mov.b @r15, &0x006f while (!(IFG2 & UCB0RXIFG)); 8eb6: e2 b2 03 00 bit.b #4, &0x0003 ;r2 As==10 8eba: fd 27 jz $-4 ;abs 0x8eb6 dummy = UCB0RXBUF; 8ebc: 5f 42 6e 00 mov.b &0x006e,r15 IFG2 &= ~UCB0RXIFG; UCB0TXBUF = length; while (!(IFG2 & UCB0RXIFG)); dummy = UCB0RXBUF; for(index = 0; index < length; index++) 8ec0: 1c 53 inc r12 8ec2: 0c 9d cmp r13, r12 8ec4: f2 2b jnc $-26 ;abs 0x8eaa UCB0TXBUF = buf[index]; while (!(IFG2 & UCB0RXIFG)); dummy = UCB0RXBUF; } P3OUT |= CSn; //pull CSn high, we're done with the transfer 8ec6: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 P3SEL &= ~UARTB0_SPI_MODULES; //take the pins back out of SPI mode 8eca: f2 f0 f1 ff and.b #-15, &0x001b ;#0xfff1 8ece: 1b 00 } 8ed0: 30 41 ret 00008ed2 : 8ed2: 0b 12 push r11 8ed4: 0a 12 push r10 8ed6: 0c 4f mov r15, r12 8ed8: 0a 43 clr r10 8eda: 0b 43 clr r11 8edc: 6d 4f mov.b @r15, r13 8ede: 7d 90 20 00 cmp.b #32, r13 ;#0x0020 8ee2: 49 24 jz $+148 ;abs 0x8f76 8ee4: 7d 90 09 00 cmp.b #9, r13 ;#0x0009 8ee8: 46 24 jz $+142 ;abs 0x8f76 8eea: 7d 90 0a 00 cmp.b #10, r13 ;#0x000a 8eee: 43 24 jz $+136 ;abs 0x8f76 8ef0: 7d 90 0c 00 cmp.b #12, r13 ;#0x000c 8ef4: 40 24 jz $+130 ;abs 0x8f76 8ef6: 7d 90 0d 00 cmp.b #13, r13 ;#0x000d 8efa: 3d 24 jz $+124 ;abs 0x8f76 8efc: 7d 90 0b 00 cmp.b #11, r13 ;#0x000b 8f00: 3a 24 jz $+118 ;abs 0x8f76 8f02: 7d 90 2d 00 cmp.b #45, r13 ;#0x002d 8f06: 35 24 jz $+108 ;abs 0x8f72 8f08: 7d 90 2b 00 cmp.b #43, r13 ;#0x002b 8f0c: 2f 24 jz $+96 ;abs 0x8f6c 8f0e: 4f 4d mov.b r13, r15 8f10: 8f 11 sxt r15 8f12: 0e 43 clr r14 8f14: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8f18: 3f 90 0a 00 cmp #10, r15 ;#0x000a 8f1c: 01 2c jc $+4 ;abs 0x8f20 8f1e: 1e 43 mov #1, r14 ;r3 As==01 8f20: 0e 93 tst r14 8f22: 02 20 jnz $+6 ;abs 0x8f28 8f24: 0f 43 clr r15 8f26: 3c 3c jmp $+122 ;abs 0x8fa0 8f28: 4f 4d mov.b r13, r15 8f2a: 8f 11 sxt r15 8f2c: 0b 5f add r15, r11 8f2e: 3b 50 d0 ff add #-48, r11 ;#0xffd0 8f32: 1c 53 inc r12 8f34: 6f 4c mov.b @r12, r15 8f36: 4d 4f mov.b r15, r13 8f38: 8f 11 sxt r15 8f3a: 0e 43 clr r14 8f3c: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8f40: 3f 90 0a 00 cmp #10, r15 ;#0x000a 8f44: 01 2c jc $+4 ;abs 0x8f48 8f46: 1e 43 mov #1, r14 ;r3 As==01 8f48: 0e 93 tst r14 8f4a: 0a 24 jz $+22 ;abs 0x8f60 8f4c: 0f 4b mov r11, r15 8f4e: 0f 5f rla r15 8f50: 0f 5f rla r15 8f52: 0e 4b mov r11, r14 8f54: 0e 5e rla r14 8f56: 0b 4f mov r15, r11 8f58: 0b 5e add r14, r11 8f5a: 0b 5e add r14, r11 8f5c: 0b 5e add r14, r11 8f5e: e4 3f jmp $-54 ;abs 0x8f28 8f60: 0a 93 tst r10 8f62: 02 24 jz $+6 ;abs 0x8f68 8f64: 3b e3 inv r11 8f66: 1b 53 inc r11 8f68: 0f 4b mov r11, r15 8f6a: 1a 3c jmp $+54 ;abs 0x8fa0 8f6c: 1c 53 inc r12 8f6e: 6d 4c mov.b @r12, r13 8f70: ce 3f jmp $-98 ;abs 0x8f0e 8f72: 1a 43 mov #1, r10 ;r3 As==01 8f74: fb 3f jmp $-8 ;abs 0x8f6c 8f76: 1c 53 inc r12 8f78: 6d 4c mov.b @r12, r13 8f7a: 7d 90 20 00 cmp.b #32, r13 ;#0x0020 8f7e: fb 27 jz $-8 ;abs 0x8f76 8f80: 7d 90 09 00 cmp.b #9, r13 ;#0x0009 8f84: f8 27 jz $-14 ;abs 0x8f76 8f86: 7d 90 0a 00 cmp.b #10, r13 ;#0x000a 8f8a: f5 27 jz $-20 ;abs 0x8f76 8f8c: 7d 90 0c 00 cmp.b #12, r13 ;#0x000c 8f90: f2 27 jz $-26 ;abs 0x8f76 8f92: 7d 90 0d 00 cmp.b #13, r13 ;#0x000d 8f96: ef 27 jz $-32 ;abs 0x8f76 8f98: 7d 90 0b 00 cmp.b #11, r13 ;#0x000b 8f9c: ec 27 jz $-38 ;abs 0x8f76 8f9e: b1 3f jmp $-156 ;abs 0x8f02 8fa0: 3a 41 pop r10 8fa2: 3b 41 pop r11 8fa4: 30 41 ret 00008fa6 : 8fa6: 2f 43 mov #2, r15 ;r3 As==10 8fa8: 0f 51 add r1, r15 8faa: 2c 4f mov @r15, r12 8fac: 1e 4f 02 00 mov 2(r15), r14 ;0x0002(r15) 8fb0: 2f 52 add #4, r15 ;r2 As==10 8fb2: 0d 4f mov r15, r13 8fb4: 0f 4c mov r12, r15 8fb6: b0 12 cc 8f call #0x8fcc 8fba: 30 41 ret 00008fbc : 8fbc: 1e 42 04 02 mov &0x0204,r14 8fc0: ce 4f 00 00 mov.b r15, 0(r14) ;0x0000(r14) 8fc4: 92 53 04 02 inc &0x0204 8fc8: 7f f3 and.b #-1, r15 ;r3 As==11 8fca: 30 41 ret 00008fcc : 8fcc: 0b 12 push r11 8fce: 0b 4f mov r15, r11 8fd0: 82 4f 04 02 mov r15, &0x0204 8fd4: 3f 40 bc 8f mov #-28740,r15 ;#0x8fbc 8fd8: b0 12 4a 90 call #0x904a 8fdc: 0b 5f add r15, r11 8fde: cb 43 00 00 mov.b #0, 0(r11) ;r3 As==00, 0x0000(r11) 8fe2: 3b 41 pop r11 8fe4: 30 41 ret 00008fe6 : 8fe6: 0b 12 push r11 8fe8: 0a 12 push r10 8fea: 0a 4f mov r15, r10 8fec: 0b 4e mov r14, r11 8fee: 0e 93 tst r14 8ff0: 02 20 jnz $+6 ;abs 0x8ff6 8ff2: 1f 43 mov #1, r15 ;r3 As==01 8ff4: 0d 3c jmp $+28 ;abs 0x9010 8ff6: 6f 4a mov.b @r10, r15 8ff8: 8f 11 sxt r15 8ffa: 1a 53 inc r10 8ffc: 92 12 06 02 call &0x0206 9000: 0f 93 tst r15 9002: 05 38 jl $+12 ;abs 0x900e 9004: 92 53 02 02 inc &0x0202 9008: 3b 53 add #-1, r11 ;r3 As==11 900a: f5 23 jnz $-20 ;abs 0x8ff6 900c: f2 3f jmp $-26 ;abs 0x8ff2 900e: 3f 43 mov #-1, r15 ;r3 As==11 9010: 3a 41 pop r10 9012: 3b 41 pop r11 9014: 30 41 ret 00009016 <__write_pad>: 9016: 0b 12 push r11 9018: 0a 12 push r10 901a: 09 12 push r9 901c: 49 4f mov.b r15, r9 901e: 4b 4e mov.b r14, r11 9020: 5e 93 cmp.b #1, r14 ;r3 As==01 9022: 0c 38 jl $+26 ;abs 0x903c 9024: 4a 4f mov.b r15, r10 9026: 8a 11 sxt r10 9028: 0f 4a mov r10, r15 902a: 92 12 06 02 call &0x0206 902e: 0f 93 tst r15 9030: 07 38 jl $+16 ;abs 0x9040 9032: 92 53 02 02 inc &0x0202 9036: 7b 53 add.b #-1, r11 ;r3 As==11 9038: 5b 93 cmp.b #1, r11 ;r3 As==01 903a: f6 37 jge $-18 ;abs 0x9028 903c: 4f 49 mov.b r9, r15 903e: 01 3c jmp $+4 ;abs 0x9042 9040: 3f 43 mov #-1, r15 ;r3 As==11 9042: 39 41 pop r9 9044: 3a 41 pop r10 9046: 3b 41 pop r11 9048: 30 41 ret 0000904a : 904a: 0b 12 push r11 904c: 0a 12 push r10 904e: 09 12 push r9 9050: 08 12 push r8 9052: 07 12 push r7 9054: 06 12 push r6 9056: 05 12 push r5 9058: 04 12 push r4 905a: 31 80 3c 00 sub #60, r1 ;#0x003c 905e: 05 4d mov r13, r5 9060: 81 43 30 00 mov #0, 48(r1) ;r3 As==00, 0x0030(r1) 9064: 81 43 32 00 mov #0, 50(r1) ;r3 As==00, 0x0032(r1) 9068: 82 43 02 02 mov #0, &0x0202 ;r3 As==00 906c: 82 4f 06 02 mov r15, &0x0206 9070: 06 4e mov r14, r6 9072: 0f 46 mov r6, r15 9074: 67 46 mov.b @r6, r7 9076: 47 93 tst.b r7 9078: 0a 24 jz $+22 ;abs 0x908e 907a: 77 90 25 00 cmp.b #37, r7 ;#0x0025 907e: 07 24 jz $+16 ;abs 0x908e 9080: 16 53 inc r6 9082: 67 46 mov.b @r6, r7 9084: 47 93 tst.b r7 9086: 03 24 jz $+8 ;abs 0x908e 9088: 77 90 25 00 cmp.b #37, r7 ;#0x0025 908c: f9 23 jnz $-12 ;abs 0x9080 908e: 0d 46 mov r6, r13 9090: 0d 8f sub r15, r13 9092: 02 24 jz $+6 ;abs 0x9098 9094: 30 40 d8 95 br #0x95d8 9098: 47 93 tst.b r7 909a: 02 20 jnz $+6 ;abs 0x90a0 909c: 30 40 e6 95 br #0x95e6 90a0: 16 53 inc r6 90a2: c1 43 2e 00 mov.b #0, 46(r1) ;r3 As==00, 0x002e(r1) 90a6: c1 43 35 00 mov.b #0, 53(r1) ;r3 As==00, 0x0035(r1) 90aa: c1 43 2f 00 mov.b #0, 47(r1) ;r3 As==00, 0x002f(r1) 90ae: 7b 43 mov.b #-1, r11 ;r3 As==11 90b0: c1 43 2a 00 mov.b #0, 42(r1) ;r3 As==00, 0x002a(r1) 90b4: 67 46 mov.b @r6, r7 90b6: 16 53 inc r6 90b8: 77 90 75 00 cmp.b #117, r7 ;#0x0075 90bc: 02 20 jnz $+6 ;abs 0x90c2 90be: 30 40 b2 95 br #0x95b2 90c2: 4f 47 mov.b r7, r15 90c4: 7f d0 20 00 bis.b #32, r15 ;#0x0020 90c8: 7f 90 78 00 cmp.b #120, r15 ;#0x0078 90cc: 02 20 jnz $+6 ;abs 0x90d2 90ce: 30 40 b2 95 br #0x95b2 90d2: 77 90 20 00 cmp.b #32, r7 ;#0x0020 90d6: 02 20 jnz $+6 ;abs 0x90dc 90d8: 30 40 9e 95 br #0x959e 90dc: 77 90 23 00 cmp.b #35, r7 ;#0x0023 90e0: 02 20 jnz $+6 ;abs 0x90e6 90e2: 30 40 96 95 br #0x9596 90e6: 77 90 2a 00 cmp.b #42, r7 ;#0x002a 90ea: 02 20 jnz $+6 ;abs 0x90f0 90ec: 30 40 7a 95 br #0x957a 90f0: 77 90 2d 00 cmp.b #45, r7 ;#0x002d 90f4: 02 20 jnz $+6 ;abs 0x90fa 90f6: 30 40 6a 95 br #0x956a 90fa: 77 90 2b 00 cmp.b #43, r7 ;#0x002b 90fe: 02 20 jnz $+6 ;abs 0x9104 9100: 30 40 60 95 br #0x9560 9104: 77 90 2e 00 cmp.b #46, r7 ;#0x002e 9108: 02 20 jnz $+6 ;abs 0x910e 910a: 30 40 fa 94 br #0x94fa 910e: 77 90 30 00 cmp.b #48, r7 ;#0x0030 9112: 02 20 jnz $+6 ;abs 0x9118 9114: 30 40 e4 94 br #0x94e4 9118: 4f 47 mov.b r7, r15 911a: 7f 50 cf ff add.b #-49, r15 ;#0xffcf 911e: 7f 90 09 00 cmp.b #9, r15 ;#0x0009 9122: 1a 2c jc $+54 ;abs 0x9158 9124: 0d 43 clr r13 9126: 0f 4d mov r13, r15 9128: 0f 5f rla r15 912a: 0f 5f rla r15 912c: 0e 4d mov r13, r14 912e: 0e 5e rla r14 9130: 0d 4f mov r15, r13 9132: 0d 5e add r14, r13 9134: 0d 5e add r14, r13 9136: 0d 5e add r14, r13 9138: 4f 47 mov.b r7, r15 913a: 8f 11 sxt r15 913c: 0d 5f add r15, r13 913e: 3d 50 d0 ff add #-48, r13 ;#0xffd0 9142: 67 46 mov.b @r6, r7 9144: 16 53 inc r6 9146: 4f 47 mov.b r7, r15 9148: 7f 50 d0 ff add.b #-48, r15 ;#0xffd0 914c: 7f 90 0a 00 cmp.b #10, r15 ;#0x000a 9150: ea 2b jnc $-42 ;abs 0x9126 9152: c1 4d 2f 00 mov.b r13, 47(r1) ;0x002f(r1) 9156: b0 3f jmp $-158 ;abs 0x90b8 9158: 77 90 68 00 cmp.b #104, r7 ;#0x0068 915c: bf 25 jz $+896 ;abs 0x94dc 915e: 77 90 6c 00 cmp.b #108, r7 ;#0x006c 9162: 03 20 jnz $+8 ;abs 0x916a 9164: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) 9168: a5 3f jmp $-180 ;abs 0x90b4 916a: 77 90 63 00 cmp.b #99, r7 ;#0x0063 916e: af 25 jz $+864 ;abs 0x94ce 9170: 77 90 44 00 cmp.b #68, r7 ;#0x0044 9174: a9 25 jz $+852 ;abs 0x94c8 9176: 77 90 64 00 cmp.b #100, r7 ;#0x0064 917a: 7a 25 jz $+758 ;abs 0x9470 917c: 77 90 69 00 cmp.b #105, r7 ;#0x0069 9180: 77 25 jz $+752 ;abs 0x9470 9182: 77 90 4f 00 cmp.b #79, r7 ;#0x004f 9186: 71 25 jz $+740 ;abs 0x946a 9188: 77 90 6f 00 cmp.b #111, r7 ;#0x006f 918c: 6b 25 jz $+728 ;abs 0x9464 918e: 77 90 70 00 cmp.b #112, r7 ;#0x0070 9192: 59 25 jz $+692 ;abs 0x9446 9194: 77 90 73 00 cmp.b #115, r7 ;#0x0073 9198: 1a 25 jz $+566 ;abs 0x93ce 919a: 77 90 55 00 cmp.b #85, r7 ;#0x0055 919e: 14 25 jz $+554 ;abs 0x93c8 91a0: 77 90 75 00 cmp.b #117, r7 ;#0x0075 91a4: 0d 25 jz $+540 ;abs 0x93c0 91a6: 77 90 58 00 cmp.b #88, r7 ;#0x0058 91aa: 8a 24 jz $+278 ;abs 0x92c0 91ac: 77 90 78 00 cmp.b #120, r7 ;#0x0078 91b0: 87 24 jz $+272 ;abs 0x92c0 91b2: 47 93 tst.b r7 91b4: 02 20 jnz $+6 ;abs 0x91ba 91b6: 30 40 e6 95 br #0x95e6 91ba: 81 41 2c 00 mov r1, 44(r1) ;0x002c(r1) 91be: c1 47 00 00 mov.b r7, 0(r1) ;0x0000(r1) 91c2: 59 43 mov.b #1, r9 ;r3 As==01 91c4: c1 43 2a 00 mov.b #0, 42(r1) ;r3 As==00, 0x002a(r1) 91c8: 4b 49 mov.b r9, r11 91ca: 5a 41 35 00 mov.b 53(r1), r10 ;0x0035(r1) 91ce: 4a 89 sub.b r9, r10 91d0: 75 30 jn $+236 ;abs 0x92bc 91d2: 5e 41 2a 00 mov.b 42(r1), r14 ;0x002a(r1) 91d6: 4e 93 tst.b r14 91d8: 6b 24 jz $+216 ;abs 0x92b0 91da: 5b 53 inc.b r11 91dc: 4b 5a add.b r10, r11 91de: 58 41 2e 00 mov.b 46(r1), r8 ;0x002e(r1) 91e2: 78 f0 30 00 and.b #48, r8 ;#0x0030 91e6: 13 20 jnz $+40 ;abs 0x920e 91e8: 5d 41 2f 00 mov.b 47(r1), r13 ;0x002f(r1) 91ec: 8d 11 sxt r13 91ee: 4f 4b mov.b r11, r15 91f0: 8f 11 sxt r15 91f2: 0d 8f sub r15, r13 91f4: 1d 93 cmp #1, r13 ;r3 As==01 91f6: 0b 38 jl $+24 ;abs 0x920e 91f8: 4e 4d mov.b r13, r14 91fa: 7f 40 20 00 mov.b #32, r15 ;#0x0020 91fe: b0 12 16 90 call #0x9016 9202: 0f 93 tst r15 9204: 02 34 jge $+6 ;abs 0x920a 9206: 30 40 e6 95 br #0x95e6 920a: 5e 41 2a 00 mov.b 42(r1), r14 ;0x002a(r1) 920e: 4e 93 tst.b r14 9210: 4a 20 jnz $+150 ;abs 0x92a6 9212: f1 b0 40 00 bit.b #64, 46(r1) ;#0x0040, 0x002e(r1) 9216: 2e 00 9218: 0f 24 jz $+32 ;abs 0x9238 921a: f1 40 30 00 mov.b #48, 40(r1) ;#0x0030, 0x0028(r1) 921e: 28 00 9220: c1 47 29 00 mov.b r7, 41(r1) ;0x0029(r1) 9224: 2e 43 mov #2, r14 ;r3 As==10 9226: 0f 41 mov r1, r15 9228: 3f 50 28 00 add #40, r15 ;#0x0028 922c: b0 12 e6 8f call #0x8fe6 9230: 0f 93 tst r15 9232: 02 34 jge $+6 ;abs 0x9238 9234: 30 40 e6 95 br #0x95e6 9238: 78 90 20 00 cmp.b #32, r8 ;#0x0020 923c: 24 24 jz $+74 ;abs 0x9286 923e: 4e 4a mov.b r10, r14 9240: 7f 40 30 00 mov.b #48, r15 ;#0x0030 9244: b0 12 16 90 call #0x9016 9248: 0f 93 tst r15 924a: cd 39 jl $+924 ;abs 0x95e6 924c: 4f 49 mov.b r9, r15 924e: 8f 11 sxt r15 9250: 0e 4f mov r15, r14 9252: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) 9256: b0 12 e6 8f call #0x8fe6 925a: 0f 93 tst r15 925c: c4 39 jl $+906 ;abs 0x95e6 925e: f1 b0 10 00 bit.b #16, 46(r1) ;#0x0010, 0x002e(r1) 9262: 2e 00 9264: 06 27 jz $-498 ;abs 0x9072 9266: 5d 41 2f 00 mov.b 47(r1), r13 ;0x002f(r1) 926a: 8d 11 sxt r13 926c: 4f 4b mov.b r11, r15 926e: 8f 11 sxt r15 9270: 0d 8f sub r15, r13 9272: 1d 93 cmp #1, r13 ;r3 As==01 9274: fe 3a jl $-514 ;abs 0x9072 9276: 4e 4d mov.b r13, r14 9278: 7f 40 20 00 mov.b #32, r15 ;#0x0020 927c: b0 12 16 90 call #0x9016 9280: 0f 93 tst r15 9282: f7 36 jge $-528 ;abs 0x9072 9284: b0 3d jmp $+866 ;abs 0x95e6 9286: 5d 41 2f 00 mov.b 47(r1), r13 ;0x002f(r1) 928a: 8d 11 sxt r13 928c: 4f 4b mov.b r11, r15 928e: 8f 11 sxt r15 9290: 0d 8f sub r15, r13 9292: 1d 93 cmp #1, r13 ;r3 As==01 9294: d4 3b jl $-86 ;abs 0x923e 9296: 4e 4d mov.b r13, r14 9298: 7f 40 30 00 mov.b #48, r15 ;#0x0030 929c: b0 12 16 90 call #0x9016 92a0: 0f 93 tst r15 92a2: cd 37 jge $-100 ;abs 0x923e 92a4: a0 3d jmp $+834 ;abs 0x95e6 92a6: 1e 43 mov #1, r14 ;r3 As==01 92a8: 0f 41 mov r1, r15 92aa: 3f 50 2a 00 add #42, r15 ;#0x002a 92ae: be 3f jmp $-130 ;abs 0x922c 92b0: f1 b0 40 00 bit.b #64, 46(r1) ;#0x0040, 0x002e(r1) 92b4: 2e 00 92b6: 92 27 jz $-218 ;abs 0x91dc 92b8: 6b 53 incd.b r11 92ba: 90 3f jmp $-222 ;abs 0x91dc 92bc: 4a 43 clr.b r10 92be: 89 3f jmp $-236 ;abs 0x91d2 92c0: f1 40 10 00 mov.b #16, 52(r1) ;#0x0010, 0x0034(r1) 92c4: 34 00 92c6: f1 b2 2e 00 bit.b #8, 46(r1) ;r2 As==11, 0x002e(r1) 92ca: 09 24 jz $+20 ;abs 0x92de 92cc: 81 93 30 00 tst 48(r1) ;0x0030(r1) 92d0: 03 20 jnz $+8 ;abs 0x92d8 92d2: 81 93 32 00 tst 50(r1) ;0x0032(r1) 92d6: 03 24 jz $+8 ;abs 0x92de 92d8: f1 d0 40 00 bis.b #64, 46(r1) ;#0x0040, 0x002e(r1) 92dc: 2e 00 92de: c1 43 2a 00 mov.b #0, 42(r1) ;r3 As==00, 0x002a(r1) 92e2: c1 4b 35 00 mov.b r11, 53(r1) ;0x0035(r1) 92e6: 4b 93 tst.b r11 92e8: 03 38 jl $+8 ;abs 0x92f0 92ea: f1 f0 df ff and.b #-33, 46(r1) ;#0xffdf, 0x002e(r1) 92ee: 2e 00 92f0: 0f 41 mov r1, r15 92f2: 3f 50 28 00 add #40, r15 ;#0x0028 92f6: 81 4f 2c 00 mov r15, 44(r1) ;0x002c(r1) 92fa: 81 93 30 00 tst 48(r1) ;0x0030(r1) 92fe: 06 20 jnz $+14 ;abs 0x930c 9300: 81 93 32 00 tst 50(r1) ;0x0032(r1) 9304: 03 20 jnz $+8 ;abs 0x930c 9306: c1 93 35 00 tst.b 53(r1) ;0x0035(r1) 930a: 3e 24 jz $+126 ;abs 0x9388 930c: d1 41 34 00 mov.b 52(r1), 56(r1) ;0x0034(r1), 0x0038(r1) 9310: 38 00 9312: c1 43 39 00 mov.b #0, 57(r1) ;r3 As==00, 0x0039(r1) 9316: 81 43 3a 00 mov #0, 58(r1) ;r3 As==00, 0x003a(r1) 931a: c1 43 36 00 mov.b #0, 54(r1) ;r3 As==00, 0x0036(r1) 931e: 1e 41 30 00 mov 48(r1), r14 ;0x0030(r1) 9322: 1f 41 32 00 mov 50(r1), r15 ;0x0032(r1) 9326: 1e 81 38 00 sub 56(r1), r14 ;0x0038(r1) 932a: 1f 71 3a 00 subc 58(r1), r15 ;0x003a(r1) 932e: 02 28 jnc $+6 ;abs 0x9334 9330: d1 43 36 00 mov.b #1, 54(r1) ;r3 As==01, 0x0036(r1) 9334: 1c 41 30 00 mov 48(r1), r12 ;0x0030(r1) 9338: 1d 41 32 00 mov 50(r1), r13 ;0x0032(r1) 933c: 1a 41 38 00 mov 56(r1), r10 ;0x0038(r1) 9340: 1b 41 3a 00 mov 58(r1), r11 ;0x003a(r1) 9344: b0 12 2c 97 call #0x972c 9348: 44 4e mov.b r14, r4 934a: 7e 90 0a 00 cmp.b #10, r14 ;#0x000a 934e: 30 2c jc $+98 ;abs 0x93b0 9350: 74 50 30 00 add.b #48, r4 ;#0x0030 9354: b1 53 2c 00 add #-1, 44(r1) ;r3 As==11, 0x002c(r1) 9358: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) 935c: cf 44 00 00 mov.b r4, 0(r15) ;0x0000(r15) 9360: 1c 41 30 00 mov 48(r1), r12 ;0x0030(r1) 9364: 1d 41 32 00 mov 50(r1), r13 ;0x0032(r1) 9368: 1a 41 38 00 mov 56(r1), r10 ;0x0038(r1) 936c: 1b 41 3a 00 mov 58(r1), r11 ;0x003a(r1) 9370: b0 12 2c 97 call #0x972c 9374: 81 4c 30 00 mov r12, 48(r1) ;0x0030(r1) 9378: 81 4d 32 00 mov r13, 50(r1) ;0x0032(r1) 937c: c1 93 36 00 tst.b 54(r1) ;0x0036(r1) 9380: cc 23 jnz $-102 ;abs 0x931a 9382: f1 92 34 00 cmp.b #8, 52(r1) ;r2 As==11, 0x0034(r1) 9386: 06 24 jz $+14 ;abs 0x9394 9388: 49 41 mov.b r1, r9 938a: 59 81 2c 00 sub.b 44(r1), r9 ;0x002c(r1) 938e: 79 50 28 00 add.b #40, r9 ;#0x0028 9392: 1a 3f jmp $-458 ;abs 0x91c8 9394: f1 b2 2e 00 bit.b #8, 46(r1) ;r2 As==11, 0x002e(r1) 9398: f7 27 jz $-16 ;abs 0x9388 939a: 74 90 30 00 cmp.b #48, r4 ;#0x0030 939e: f4 27 jz $-22 ;abs 0x9388 93a0: b1 53 2c 00 add #-1, 44(r1) ;r3 As==11, 0x002c(r1) 93a4: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) 93a8: ff 40 30 00 mov.b #48, 0(r15) ;#0x0030, 0x0000(r15) 93ac: 00 00 93ae: ec 3f jmp $-38 ;abs 0x9388 93b0: 74 50 57 00 add.b #87, r4 ;#0x0057 93b4: 77 90 58 00 cmp.b #88, r7 ;#0x0058 93b8: cd 23 jnz $-100 ;abs 0x9354 93ba: 74 f0 df ff and.b #-33, r4 ;#0xffdf 93be: ca 3f jmp $-106 ;abs 0x9354 93c0: f1 40 0a 00 mov.b #10, 52(r1) ;#0x000a, 0x0034(r1) 93c4: 34 00 93c6: 8b 3f jmp $-232 ;abs 0x92de 93c8: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) 93cc: f9 3f jmp $-12 ;abs 0x93c0 93ce: 0f 45 mov r5, r15 93d0: 25 53 incd r5 93d2: a1 4f 2c 00 mov @r15, 44(r1) ;0x002c(r1) 93d6: 81 93 2c 00 tst 44(r1) ;0x002c(r1) 93da: 1e 24 jz $+62 ;abs 0x9418 93dc: 4b 93 tst.b r11 93de: 11 38 jl $+36 ;abs 0x9402 93e0: 4f 4b mov.b r11, r15 93e2: 8f 11 sxt r15 93e4: 0d 4f mov r15, r13 93e6: 0e 43 clr r14 93e8: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) 93ec: b0 12 1a 96 call #0x961a 93f0: 0f 93 tst r15 93f2: 05 24 jz $+12 ;abs 0x93fe 93f4: 49 4f mov.b r15, r9 93f6: 59 81 2c 00 sub.b 44(r1), r9 ;0x002c(r1) 93fa: 4b 99 cmp.b r9, r11 93fc: e3 36 jge $-568 ;abs 0x91c4 93fe: 49 4b mov.b r11, r9 9400: e1 3e jmp $-572 ;abs 0x91c4 9402: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) 9406: 1f 83 dec r15 9408: 1f 53 inc r15 940a: cf 93 00 00 tst.b 0(r15) ;0x0000(r15) 940e: fc 23 jnz $-6 ;abs 0x9408 9410: 49 4f mov.b r15, r9 9412: 59 81 2c 00 sub.b 44(r1), r9 ;0x002c(r1) 9416: d6 3e jmp $-594 ;abs 0x91c4 9418: 81 41 2c 00 mov r1, 44(r1) ;0x002c(r1) 941c: f1 40 28 00 mov.b #40, 0(r1) ;#0x0028, 0x0000(r1) 9420: 00 00 9422: f1 40 6e 00 mov.b #110, 1(r1) ;#0x006e, 0x0001(r1) 9426: 01 00 9428: f1 40 75 00 mov.b #117, 2(r1) ;#0x0075, 0x0002(r1) 942c: 02 00 942e: f1 40 6c 00 mov.b #108, 3(r1) ;#0x006c, 0x0003(r1) 9432: 03 00 9434: f1 40 6c 00 mov.b #108, 4(r1) ;#0x006c, 0x0004(r1) 9438: 04 00 943a: f1 40 29 00 mov.b #41, 5(r1) ;#0x0029, 0x0005(r1) 943e: 05 00 9440: c1 43 06 00 mov.b #0, 6(r1) ;r3 As==00, 0x0006(r1) 9444: cb 3f jmp $-104 ;abs 0x93dc 9446: 0f 45 mov r5, r15 9448: 25 53 incd r5 944a: a1 4f 30 00 mov @r15, 48(r1) ;0x0030(r1) 944e: 81 43 32 00 mov #0, 50(r1) ;r3 As==00, 0x0032(r1) 9452: f1 40 10 00 mov.b #16, 52(r1) ;#0x0010, 0x0034(r1) 9456: 34 00 9458: f1 d0 40 00 bis.b #64, 46(r1) ;#0x0040, 0x002e(r1) 945c: 2e 00 945e: 77 40 78 00 mov.b #120, r7 ;#0x0078 9462: 3d 3f jmp $-388 ;abs 0x92de 9464: f1 42 34 00 mov.b #8, 52(r1) ;r2 As==11, 0x0034(r1) 9468: 3a 3f jmp $-394 ;abs 0x92de 946a: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) 946e: fa 3f jmp $-10 ;abs 0x9464 9470: d1 b3 2e 00 bit.b #1, 46(r1) ;r3 As==01, 0x002e(r1) 9474: 19 24 jz $+52 ;abs 0x94a8 9476: 0f 45 mov r5, r15 9478: 25 52 add #4, r5 ;r2 As==10 947a: b1 4f 30 00 mov @r15+, 48(r1) ;0x0030(r1) 947e: b1 4f 32 00 mov @r15+, 50(r1) ;0x0032(r1) 9482: 81 93 32 00 tst 50(r1) ;0x0032(r1) 9486: 04 38 jl $+10 ;abs 0x9490 9488: f1 40 0a 00 mov.b #10, 52(r1) ;#0x000a, 0x0034(r1) 948c: 34 00 948e: 29 3f jmp $-428 ;abs 0x92e2 9490: b1 e3 30 00 xor #-1, 48(r1) ;r3 As==11, 0x0030(r1) 9494: b1 e3 32 00 xor #-1, 50(r1) ;r3 As==11, 0x0032(r1) 9498: 91 53 30 00 inc 48(r1) ;0x0030(r1) 949c: 81 63 32 00 adc 50(r1) ;0x0032(r1) 94a0: f1 40 2d 00 mov.b #45, 42(r1) ;#0x002d, 0x002a(r1) 94a4: 2a 00 94a6: f0 3f jmp $-30 ;abs 0x9488 94a8: 0f 45 mov r5, r15 94aa: 25 53 incd r5 94ac: a1 4f 30 00 mov @r15, 48(r1) ;0x0030(r1) 94b0: 91 41 30 00 mov 48(r1), 50(r1) ;0x0030(r1), 0x0032(r1) 94b4: 32 00 94b6: 91 51 32 00 rla 50(r1) ;0x0032(r1) 94ba: 32 00 94bc: 91 71 32 00 subc 50(r1), 50(r1) ;0x0032(r1), 0x0032(r1) 94c0: 32 00 94c2: b1 e3 32 00 xor #-1, 50(r1) ;r3 As==11, 0x0032(r1) 94c6: dd 3f jmp $-68 ;abs 0x9482 94c8: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) 94cc: d1 3f jmp $-92 ;abs 0x9470 94ce: 81 41 2c 00 mov r1, 44(r1) ;0x002c(r1) 94d2: 0f 45 mov r5, r15 94d4: 25 53 incd r5 94d6: e1 4f 00 00 mov.b @r15, 0(r1) ;0x0000(r1) 94da: 73 3e jmp $-792 ;abs 0x91c2 94dc: e1 d2 2e 00 bis.b #4, 46(r1) ;r2 As==10, 0x002e(r1) 94e0: 30 40 b4 90 br #0x90b4 94e4: f1 b0 10 00 bit.b #16, 46(r1) ;#0x0010, 0x002e(r1) 94e8: 2e 00 94ea: 02 24 jz $+6 ;abs 0x94f0 94ec: 30 40 b4 90 br #0x90b4 94f0: f1 d0 20 00 bis.b #32, 46(r1) ;#0x0020, 0x002e(r1) 94f4: 2e 00 94f6: 30 40 b4 90 br #0x90b4 94fa: 67 46 mov.b @r6, r7 94fc: 16 53 inc r6 94fe: 77 90 2a 00 cmp.b #42, r7 ;#0x002a 9502: 24 24 jz $+74 ;abs 0x954c 9504: 0d 43 clr r13 9506: 4f 47 mov.b r7, r15 9508: 7f 50 d0 ff add.b #-48, r15 ;#0xffd0 950c: 7f 90 0a 00 cmp.b #10, r15 ;#0x000a 9510: 16 2c jc $+46 ;abs 0x953e 9512: 0f 4d mov r13, r15 9514: 0f 5f rla r15 9516: 0f 5f rla r15 9518: 0e 4d mov r13, r14 951a: 0e 5e rla r14 951c: 0d 4f mov r15, r13 951e: 0d 5e add r14, r13 9520: 0d 5e add r14, r13 9522: 0d 5e add r14, r13 9524: 4f 47 mov.b r7, r15 9526: 8f 11 sxt r15 9528: 0d 5f add r15, r13 952a: 3d 50 d0 ff add #-48, r13 ;#0xffd0 952e: 67 46 mov.b @r6, r7 9530: 16 53 inc r6 9532: 4f 47 mov.b r7, r15 9534: 7f 50 d0 ff add.b #-48, r15 ;#0xffd0 9538: 7f 90 0a 00 cmp.b #10, r15 ;#0x000a 953c: ea 2b jnc $-42 ;abs 0x9512 953e: 0f 4d mov r13, r15 9540: 3d 93 cmp #-1, r13 ;r3 As==11 9542: 01 34 jge $+4 ;abs 0x9546 9544: 3f 43 mov #-1, r15 ;r3 As==11 9546: 4b 4f mov.b r15, r11 9548: 30 40 b8 90 br #0x90b8 954c: 0f 45 mov r5, r15 954e: 25 53 incd r5 9550: 2d 4f mov @r15, r13 9552: 0f 4d mov r13, r15 9554: 3d 93 cmp #-1, r13 ;r3 As==11 9556: 01 34 jge $+4 ;abs 0x955a 9558: 3f 43 mov #-1, r15 ;r3 As==11 955a: 4b 4f mov.b r15, r11 955c: 30 40 b4 90 br #0x90b4 9560: f1 40 2b 00 mov.b #43, 42(r1) ;#0x002b, 0x002a(r1) 9564: 2a 00 9566: 30 40 b4 90 br #0x90b4 956a: f1 d0 10 00 bis.b #16, 46(r1) ;#0x0010, 0x002e(r1) 956e: 2e 00 9570: f1 f0 df ff and.b #-33, 46(r1) ;#0xffdf, 0x002e(r1) 9574: 2e 00 9576: 30 40 b4 90 br #0x90b4 957a: 0f 45 mov r5, r15 957c: 25 53 incd r5 957e: e1 4f 2f 00 mov.b @r15, 47(r1) ;0x002f(r1) 9582: c1 93 2f 00 tst.b 47(r1) ;0x002f(r1) 9586: 02 38 jl $+6 ;abs 0x958c 9588: 30 40 b4 90 br #0x90b4 958c: f1 e3 2f 00 xor.b #-1, 47(r1) ;r3 As==11, 0x002f(r1) 9590: d1 53 2f 00 inc.b 47(r1) ;0x002f(r1) 9594: ea 3f jmp $-42 ;abs 0x956a 9596: f1 d2 2e 00 bis.b #8, 46(r1) ;r2 As==11, 0x002e(r1) 959a: 30 40 b4 90 br #0x90b4 959e: c1 93 2a 00 tst.b 42(r1) ;0x002a(r1) 95a2: 02 24 jz $+6 ;abs 0x95a8 95a4: 30 40 b4 90 br #0x90b4 95a8: f1 40 20 00 mov.b #32, 42(r1) ;#0x0020, 0x002a(r1) 95ac: 2a 00 95ae: 30 40 b4 90 br #0x90b4 95b2: d1 b3 2e 00 bit.b #1, 46(r1) ;r3 As==01, 0x002e(r1) 95b6: 08 24 jz $+18 ;abs 0x95c8 95b8: 0f 45 mov r5, r15 95ba: 25 52 add #4, r5 ;r2 As==10 95bc: b1 4f 30 00 mov @r15+, 48(r1) ;0x0030(r1) 95c0: b1 4f 32 00 mov @r15+, 50(r1) ;0x0032(r1) 95c4: 30 40 d2 90 br #0x90d2 95c8: 0f 45 mov r5, r15 95ca: 25 53 incd r5 95cc: a1 4f 30 00 mov @r15, 48(r1) ;0x0030(r1) 95d0: 81 43 32 00 mov #0, 50(r1) ;r3 As==00, 0x0032(r1) 95d4: 30 40 d2 90 br #0x90d2 95d8: 0e 4d mov r13, r14 95da: b0 12 e6 8f call #0x8fe6 95de: 0f 93 tst r15 95e0: 02 38 jl $+6 ;abs 0x95e6 95e2: 30 40 98 90 br #0x9098 95e6: 1f 42 02 02 mov &0x0202,r15 95ea: 31 50 3c 00 add #60, r1 ;#0x003c 95ee: 34 41 pop r4 95f0: 35 41 pop r5 95f2: 36 41 pop r6 95f4: 37 41 pop r7 95f6: 38 41 pop r8 95f8: 39 41 pop r9 95fa: 3a 41 pop r10 95fc: 3b 41 pop r11 95fe: 30 41 ret 00009600 : 9600: 0d 4f mov r15, r13 9602: 0f 4e mov r14, r15 9604: 6e 4d mov.b @r13, r14 9606: 4e 9f cmp.b r15, r14 9608: 06 24 jz $+14 ;abs 0x9616 960a: 4e 93 tst.b r14 960c: 02 24 jz $+6 ;abs 0x9612 960e: 1d 53 inc r13 9610: f9 3f jmp $-12 ;abs 0x9604 9612: 0f 43 clr r15 9614: 30 41 ret 9616: 0f 4d mov r13, r15 9618: 30 41 ret 0000961a : 961a: 0b 12 push r11 961c: 0b 4f mov r15, r11 961e: 4c 4e mov.b r14, r12 9620: 0d 93 tst r13 9622: 07 24 jz $+16 ;abs 0x9632 9624: 0e 4b mov r11, r14 9626: 6f 4e mov.b @r14, r15 9628: 1e 53 inc r14 962a: 4f 9c cmp.b r12, r15 962c: 04 24 jz $+10 ;abs 0x9636 962e: 3d 53 add #-1, r13 ;r3 As==11 9630: fa 23 jnz $-10 ;abs 0x9626 9632: 0f 43 clr r15 9634: 02 3c jmp $+6 ;abs 0x963a 9636: 0f 4e mov r14, r15 9638: 3f 53 add #-1, r15 ;r3 As==11 963a: 3b 41 pop r11 963c: 30 41 ret 0000963e : 963e: 0b 12 push r11 9640: 0b 4d mov r13, r11 9642: 0d 93 tst r13 9644: 0a 24 jz $+22 ;abs 0x965a 9646: 0c 4f mov r15, r12 9648: 0d 4e mov r14, r13 964a: 6e 4d mov.b @r13, r14 964c: 1d 53 inc r13 964e: 6f 4c mov.b @r12, r15 9650: 1c 53 inc r12 9652: 4f 9e cmp.b r14, r15 9654: 04 20 jnz $+10 ;abs 0x965e 9656: 3b 53 add #-1, r11 ;r3 As==11 9658: f8 23 jnz $-14 ;abs 0x964a 965a: 0c 43 clr r12 965c: 05 3c jmp $+12 ;abs 0x9668 965e: 5c 4c ff ff mov.b -1(r12),r12 ;0xffff(r12) 9662: 5f 4d ff ff mov.b -1(r13),r15 ;0xffff(r13) 9666: 0c 8f sub r15, r12 9668: 0f 4c mov r12, r15 966a: 3b 41 pop r11 966c: 30 41 ret 0000966e : 966e: 0b 12 push r11 9670: 0a 12 push r10 9672: 09 12 push r9 9674: 08 12 push r8 9676: 0b 4f mov r15, r11 9678: 0a 4e mov r14, r10 967a: 69 4e mov.b @r14, r9 967c: 1a 53 inc r10 967e: 49 93 tst.b r9 9680: 15 24 jz $+44 ;abs 0x96ac 9682: 08 4a mov r10, r8 9684: 18 83 dec r8 9686: 18 53 inc r8 9688: c8 93 00 00 tst.b 0(r8) ;0x0000(r8) 968c: fc 23 jnz $-6 ;abs 0x9686 968e: 08 8a sub r10, r8 9690: 6f 4b mov.b @r11, r15 9692: 1b 53 inc r11 9694: 4f 93 tst.b r15 9696: 0c 24 jz $+26 ;abs 0x96b0 9698: 4f 99 cmp.b r9, r15 969a: fa 23 jnz $-10 ;abs 0x9690 969c: 0d 48 mov r8, r13 969e: 0e 4a mov r10, r14 96a0: 0f 4b mov r11, r15 96a2: b0 12 bc 96 call #0x96bc 96a6: 0f 93 tst r15 96a8: f3 23 jnz $-24 ;abs 0x9690 96aa: 3b 53 add #-1, r11 ;r3 As==11 96ac: 0f 4b mov r11, r15 96ae: 01 3c jmp $+4 ;abs 0x96b2 96b0: 0f 43 clr r15 96b2: 38 41 pop r8 96b4: 39 41 pop r9 96b6: 3a 41 pop r10 96b8: 3b 41 pop r11 96ba: 30 41 ret 000096bc : 96bc: 0b 12 push r11 96be: 0b 4f mov r15, r11 96c0: 0d 93 tst r13 96c2: 02 20 jnz $+6 ;abs 0x96c8 96c4: 0d 43 clr r13 96c6: 0f 3c jmp $+32 ;abs 0x96e6 96c8: 6f 4e mov.b @r14, r15 96ca: 1e 53 inc r14 96cc: 6c 4b mov.b @r11, r12 96ce: 4c 9f cmp.b r15, r12 96d0: 06 20 jnz $+14 ;abs 0x96de 96d2: 1b 53 inc r11 96d4: 4c 93 tst.b r12 96d6: f6 27 jz $-18 ;abs 0x96c4 96d8: 3d 53 add #-1, r13 ;r3 As==11 96da: f6 23 jnz $-18 ;abs 0x96c8 96dc: f3 3f jmp $-24 ;abs 0x96c4 96de: 4d 4c mov.b r12, r13 96e0: 5f 4e ff ff mov.b -1(r14),r15 ;0xffff(r14) 96e4: 0d 8f sub r15, r13 96e6: 0f 4d mov r13, r15 96e8: 3b 41 pop r11 96ea: 30 41 ret 000096ec <__mulsi3>: 96ec: 0e 43 clr r14 96ee: 0f 43 clr r15 96f0: 08 3c jmp $+18 ;abs 0x9702 96f2: 12 c3 clrc 96f4: 0d 10 rrc r13 96f6: 0c 10 rrc r12 96f8: 02 28 jnc $+6 ;abs 0x96fe 96fa: 0e 5a add r10, r14 96fc: 0f 6b addc r11, r15 96fe: 0a 5a rla r10 9700: 0b 6b rlc r11 9702: 0c 93 tst r12 9704: f6 23 jnz $-18 ;abs 0x96f2 9706: 0d 93 tst r13 9708: f4 23 jnz $-22 ;abs 0x96f2 970a: 30 41 ret 0000970c <__umulhisi3>: 970c: 30 40 ec 96 br #0x96ec 00009710 <__udivmodhi4>: 9710: 0e ee xor r14, r14 9712: 3b 40 11 00 mov #17, r11 ;#0x0011 9716: 05 3c jmp $+12 ;abs 0x9722 9718: 0d 10 rrc r13 971a: 0e 6e rlc r14 971c: 0e 9a cmp r10, r14 971e: 01 28 jnc $+4 ;abs 0x9722 9720: 0e 8a sub r10, r14 9722: 0c 6c rlc r12 9724: 0d 6d rlc r13 9726: 1b 83 dec r11 9728: f7 23 jnz $-16 ;abs 0x9718 972a: 30 41 ret 0000972c <__udivmodsi4>: 972c: 0f ef xor r15, r15 972e: 0e ee xor r14, r14 9730: 39 40 21 00 mov #33, r9 ;#0x0021 9734: 0a 3c jmp $+22 ;abs 0x974a 9736: 08 10 rrc r8 9738: 0e 6e rlc r14 973a: 0f 6f rlc r15 973c: 0f 9b cmp r11, r15 973e: 05 28 jnc $+12 ;abs 0x974a 9740: 02 20 jnz $+6 ;abs 0x9746 9742: 0e 9a cmp r10, r14 9744: 02 28 jnc $+6 ;abs 0x974a 9746: 0e 8a sub r10, r14 9748: 0f 7b subc r11, r15 974a: 0c 6c rlc r12 974c: 0d 6d rlc r13 974e: 08 68 rlc r8 9750: 19 83 dec r9 9752: f1 23 jnz $-28 ;abs 0x9736 9754: 30 41 ret 00009756 <__stop_progExec__>: 9756: ff 3f jmp $+0 ;abs 0x9756 Disassembly of section .vectors: 0000ffe0 : ffe0: 30 80 30 80 36 80 5c 80 30 80 b4 80 30 80 9e 80 0.0.6.\.0...0... fff0: 7c 80 30 80 30 80 30 80 30 80 30 80 30 80 00 80 |.0.0.0.0.0.0...