yarisnode.elf: file format elf32-msp430 SYMBOL TABLE: 0000e000 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 00000070 l *ABS* 00000000 U0CTL 00000071 l *ABS* 00000000 U0TCTL 00000072 l *ABS* 00000000 U0RCTL 00000073 l *ABS* 00000000 U0MCTL 00000074 l *ABS* 00000000 U0BR0 00000075 l *ABS* 00000000 U0BR1 00000076 l *ABS* 00000000 U0RXBUF 00000077 l *ABS* 00000000 U0TXBUF 00000070 l *ABS* 00000000 UCTL 00000071 l *ABS* 00000000 UTCTL 00000072 l *ABS* 00000000 URCTL 00000073 l *ABS* 00000000 UMCTL 00000074 l *ABS* 00000000 UBR0 00000075 l *ABS* 00000000 UBR1 00000076 l *ABS* 00000000 RXBUF 00000077 l *ABS* 00000000 TXBUF 00000070 l *ABS* 00000000 UCTL0 00000071 l *ABS* 00000000 UTCTL0 00000072 l *ABS* 00000000 URCTL0 00000073 l *ABS* 00000000 UMCTL0 00000074 l *ABS* 00000000 UBR00 00000075 l *ABS* 00000000 UBR10 00000076 l *ABS* 00000000 RXBUF0 00000077 l *ABS* 00000000 TXBUF0 00000070 l *ABS* 00000000 UCTL_0 00000071 l *ABS* 00000000 UTCTL_0 00000072 l *ABS* 00000000 URCTL_0 00000073 l *ABS* 00000000 UMCTL_0 00000074 l *ABS* 00000000 UBR0_0 00000075 l *ABS* 00000000 UBR1_0 00000076 l *ABS* 00000000 RXBUF_0 00000077 l *ABS* 00000000 TXBUF_0 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 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 00000018 l *ABS* 00000000 P3IN 00000019 l *ABS* 00000000 P3OUT 0000001a l *ABS* 00000000 P3DIR 0000001b l *ABS* 00000000 P3SEL 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 00000056 l *ABS* 00000000 DCOCTL 00000057 l *ABS* 00000000 BCSCTL1 00000058 l *ABS* 00000000 BCSCTL2 00000128 l *ABS* 00000000 FCTL1 0000012a l *ABS* 00000000 FCTL2 0000012c l *ABS* 00000000 FCTL3 00000048 l *ABS* 00000000 ADC10DTC0 00000049 l *ABS* 00000000 ADC10DTC1 0000004a l *ABS* 00000000 ADC10AE0 000001b0 l *ABS* 00000000 ADC10CTL0 000001b2 l *ABS* 00000000 ADC10CTL1 000001b4 l *ABS* 00000000 ADC10MEM 000001bc l *ABS* 00000000 ADC10SA 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 00000005 l *ABS* 00000000 ME2 00000000 l df *ABS* 00000000 main.c 00000200 l O .data 00000001 make_gdb_happy 0000e5ca l .text 00000000 Letext 00000000 l df *ABS* 00000000 cc1100.c 0000ebbe l .text 00000000 Letext 00000000 l df *ABS* 00000000 snprintf.c 0000ebe8 l .text 00000000 Letext 00000000 l df *ABS* 00000000 vsnprintf.c 0000ebe8 l F .text 00000020 mem_putchar_limited 00000206 l .bss 00000000 max_s_size 00000204 l .bss 00000000 mem 0000ec30 l .text 00000000 Letext 00000000 l df *ABS* 00000000 vuprintf.c 00000202 l O .data 00000002 total_len 0000ec30 l F .text 00000030 PRINT 00000208 l .bss 00000000 __write_char 0000ec60 l F .text 00000034 __write_pad 0000f24a l .text 00000000 Letext 00000000 l df *ABS* 00000000 memchr.c 0000f26e l .text 00000000 Letext 00000000 l df *ABS* 00000000 memcmp.c 0000f29e l .text 00000000 Letext 00000000 l df *ABS* 00000000 strstr.c 0000f2ec l .text 00000000 Letext 00000000 l df *ABS* 00000000 strncmp.c 0000f31c l .text 00000000 Letext 00000004 g *ABS* 00000000 __data_size 0000e760 g F .text 00000196 CC1100_WRITE_RF_SETTINGS_1_2K 0000e2d2 g F .text 00000030 init_UART_SPI 0000ebbe g F .text 0000002a snprintf 0000f35e g .text 00000000 _etext 0000e072 g F .text 0000001a sample_adc 0000eae6 g F .text 00000048 CC1100_SPI_WRREG 0000000b g *ABS* 00000000 __bss_size 0000f35c w .text 00000000 __stop_progExec__ 0000e030 g .text 00000000 _unexpected_1_ 0000e030 w .text 00000000 vector_ffe0 0000e08c g F .text 0000004c sys_init 0000ec08 g F .text 00000028 vsnprintf 0000e336 g F .text 0000000e tx_232_char 0000e030 w .text 00000000 vector_ffec 0000e030 w .text 00000000 vector_fff0 0000f35e g *ABS* 00000000 __data_load_start 0000e030 g .text 00000000 __dtors_end 0000e344 g F .text 0000003c tx_232_str 0000e030 w .text 00000000 vector_fffc 0000f31c g .text 00000000 __mulhi3 0000e030 w .text 00000000 vector_ffe4 0000020a g O .bss 00000001 RSSI_DBM 0000ffe0 g O .vectors 00000020 InterruptVectors 0000020b g O .bss 00000001 RSSI 0000f24a g F .text 00000024 memchr 0000e01c w .text 00000000 __do_clear_bss 0000f29e g F .text 0000004e strstr 0000e302 g F .text 00000034 init_UART_232 0000f2ec g F .text 00000030 strncmp 0000e030 w .text 00000000 vector_ffe2 0000e030 w .text 00000000 vector_ffe8 0000e034 w .text 00000000 _unexpected_ 0000e8f6 g F .text 00000194 CC1100_WRITE_RF_SETTINGS_500K 0000e030 w .text 00000000 vector_fffa 0000ec94 g F .text 000005b6 vuprintf 0000f26e g F .text 00000030 memcmp 0000e064 g F .text 0000000e init_adc 0000eb64 g F .text 0000005a CC1100_SPI_BURST_WRREG 0000e000 w .text 00000000 _reset_vector__ 0000e030 g .text 00000000 __ctors_start 0000ea8a g F .text 0000005c CC1100_SPI_RDREG 0000e00a w .text 00000000 __do_copy_data 00000204 g .bss 00000000 __bss_start 0000e030 w .text 00000000 vector_ffee 0000e030 w .text 00000000 vector_fff4 0000e3f2 g F .text 000001d8 main 0000e030 w .text 00000000 vector_fff8 0000e030 w .text 00000000 vector_fff2 00010000 g .vectors 00000000 _vectors_end 0000e030 w .text 00000000 vector_ffe6 0000e036 g F .text 0000002e delay 0000e232 g F .text 000000a0 TX_STRING 0000020c g O .bss 00000001 LQI 0000e0d8 g F .text 0000015a RX_STRING 0000e5ca g F .text 00000196 CC1100_WRITE_RF_SETTINGS 0000e000 w .text 00000000 __init_stack 0000020d g O .bss 00000001 PKTSTATUS 0000e030 g .text 00000000 __dtors_start 0000e030 g .text 00000000 __ctors_end 00000300 g *ABS* 00000000 __stack 00000204 g .data 00000000 _edata 0000020f g .bss 00000000 _end 0000f332 g .text 00000000 __udivmodsi4 0000e030 w .text 00000000 vector_fff6 0000e004 w .text 00000000 __low_level_init 0000e02c w .text 00000000 __jump_to_main 00000200 g .data 00000000 __data_start 0000e030 w .text 00000000 vector_ffea 0000020e g O .bss 00000001 status 0000eb2e g F .text 00000036 CC1100_SPI_STROBE Disassembly of section .text: 0000e000 <__init_stack>: e000: 31 40 00 03 mov #768, r1 ;#0x0300 0000e004 <__low_level_init>: e004: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80 e008: 20 01 0000e00a <__do_copy_data>: e00a: 3f 40 04 00 mov #4, r15 ;#0x0004 e00e: 0f 93 tst r15 e010: 05 24 jz $+12 ;abs 0xe01c e012: 2f 83 decd r15 e014: 9f 4f 5e f3 mov -3234(r15),512(r15);0xf35e(r15), 0x0200(r15) e018: 00 02 e01a: fb 23 jnz $-8 ;abs 0xe012 0000e01c <__do_clear_bss>: e01c: 3f 40 0b 00 mov #11, r15 ;#0x000b e020: 0f 93 tst r15 e022: 04 24 jz $+10 ;abs 0xe02c e024: 1f 83 dec r15 e026: cf 43 04 02 mov.b #0, 516(r15);r3 As==00, 0x0204(r15) e02a: fc 23 jnz $-6 ;abs 0xe024 0000e02c <__jump_to_main>: e02c: 30 40 f2 e3 br #0xe3f2 0000e030 <__ctors_end>: e030: 30 40 34 e0 br #0xe034 0000e034 <_unexpected_>: e034: 00 13 reti 0000e036 : Delay function. */ void delay(unsigned int d) { int i; for (i = 0; i: /**init the ADC10 */ void init_adc() { //ADC10AE = ADC_IN; ADC10CTL0 = SREF_VREF_AVSS | ADC10SR | ADC10ON | REFON | ADC10SHT_DIV64; //ref mode Vref for temp sense, 50kbps reduced power mode, ADC on, 16 clocks per sample window e064: b2 40 30 3c mov #15408, &0x01b0 ;#0x3c30 e068: b0 01 //ADC10CTL1 = ADC10SSEL_ACLK | INCH_A2; //ACLK sourced, A2 input ADC10CTL1 = ADC10DIV_7 | ADC10SSEL_ADC10OSC | INCH_TEMP; //ACLK sourced, A2 input e06a: b2 40 e0 a0 mov #-24352,&0x01b2 ;#0xa0e0 e06e: b2 01 } e070: 30 41 ret 0000e072 : //get a reading from the ADC10MEM int sample_adc(int chan) { ADC10CTL0 &= ~ENC; // have to disable ADC10 to change channel e072: a2 c3 b0 01 bic #2, &0x01b0 ;r3 As==10 ADC10CTL1 = chan; // A2 input e076: 82 4f b2 01 mov r15, &0x01b2 ADC10CTL0 |= ENC | ADC10SC; // Sampling and conversion start e07a: b2 d0 03 00 bis #3, &0x01b0 ;#0x0003 e07e: b0 01 while(ADC10CTL1 & ADC10BUSY); e080: 92 b3 b2 01 bit #1, &0x01b2 ;r3 As==01 e084: fd 23 jnz $-4 ;abs 0xe080 return ADC10MEM; e086: 1f 42 b4 01 mov &0x01b4,r15 } e08a: 30 41 ret 0000e08c : Set up the system */ void sys_init() { WDTCTL = WDTCTL_INIT; //Init watchdog timer e08c: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80 e090: 20 01 P1OUT = P1OUT_INIT; //Init output data of port1 e092: c2 43 21 00 mov.b #0, &0x0021 ;r3 As==00 P2OUT = P2OUT_INIT; //Init output data of port2 e096: c2 43 29 00 mov.b #0, &0x0029 ;r3 As==00 P3OUT = P3OUT_INIT; e09a: d2 43 19 00 mov.b #1, &0x0019 ;r3 As==01 P1SEL = P1SEL_INIT; //Select port or module -function on port1 e09e: c2 43 26 00 mov.b #0, &0x0026 ;r3 As==00 P2SEL = P2SEL_INIT; //Select port or module -function on port2 e0a2: c2 43 2e 00 mov.b #0, &0x002e ;r3 As==00 P3SEL = P3SEL_INIT; e0a6: c2 43 1b 00 mov.b #0, &0x001b ;r3 As==00 P1DIR = P1DIR_INIT; //Init port direction register of port1 e0aa: f2 40 0c 00 mov.b #12, &0x0022 ;#0x000c e0ae: 22 00 P2DIR = P2DIR_INIT; //Init port direction register of port2 e0b0: f2 43 2a 00 mov.b #-1, &0x002a ;r3 As==11 P3DIR = P3DIR_INIT; e0b4: f2 40 3b 00 mov.b #59, &0x001a ;#0x003b e0b8: 1a 00 P1IES = P1IES_INIT; //init port interrupts e0ba: c2 43 24 00 mov.b #0, &0x0024 ;r3 As==00 P2IES = P2IES_INIT; e0be: c2 43 2c 00 mov.b #0, &0x002c ;r3 As==00 P1IE = P1IE_INIT; e0c2: c2 43 25 00 mov.b #0, &0x0025 ;r3 As==00 P2IE = P2IE_INIT; e0c6: c2 43 2d 00 mov.b #0, &0x002d ;r3 As==00 BCSCTL1 |= RSEL0 | RSEL1 | RSEL2; e0ca: f2 d0 07 00 bis.b #7, &0x0057 ;#0x0007 e0ce: 57 00 DCOCTL |= DCO0 | DCO1 | DCO2; e0d0: f2 d0 e0 ff bis.b #-32, &0x0056 ;#0xffe0 e0d4: 56 00 //delay(0xffff); } e0d6: 30 41 ret 0000e0d8 : /** Get some bytes */ char RX_STRING(char *rxbuf, char length, unsigned long timeout) { e0d8: 0b 12 push r11 e0da: 0a 12 push r10 e0dc: 09 12 push r9 e0de: 08 12 push r8 e0e0: 07 12 push r7 e0e2: 06 12 push r6 e0e4: 05 12 push r5 e0e6: 07 4f mov r15, r7 e0e8: 46 4e mov.b r14, r6 e0ea: 08 4c mov r12, r8 e0ec: 09 4d mov r13, r9 unsigned long time=0; e0ee: 0a 43 clr r10 e0f0: 0b 43 clr r11 unsigned char i, real_length=23, pkt_length; RSSI = 0; e0f2: c2 43 0b 02 mov.b #0, &0x020b ;r3 As==00 LQI = 0; e0f6: c2 43 0c 02 mov.b #0, &0x020c ;r3 As==00 CC1100_SPI_STROBE(CC1100_SRX);//Recieve e0fa: 7f 40 34 00 mov.b #52, r15 ;#0x0034 e0fe: b0 12 2e eb call #0xeb2e while ((P3IN&GDO0) == 0) // Wait for GDO0 to be set -> sync transmitted e102: f2 b0 40 00 bit.b #64, &0x0018 ;#0x0040 e106: 18 00 e108: 0f 20 jnz $+32 ;abs 0xe128 { //i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE if((time >= timeout) && timeout != 0) e10a: 0e 4a mov r10, r14 e10c: 0f 4b mov r11, r15 e10e: 0e 88 sub r8, r14 e110: 0f 79 subc r9, r15 e112: 04 28 jnc $+10 ;abs 0xe11c e114: 08 93 tst r8 e116: 7c 20 jnz $+250 ;abs 0xe210 e118: 09 93 tst r9 e11a: 7a 20 jnz $+246 ;abs 0xe210 CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer CC1100_SPI_STROBE(CC1100_SIDLE); //flush the buffer return false; //timeout! } time++; e11c: 1a 53 inc r10 e11e: 0b 63 adc r11 e120: f2 b0 40 00 bit.b #64, &0x0018 ;#0x0040 e124: 18 00 e126: f1 27 jz $-28 ;abs 0xe10a } time=0; e128: 0a 43 clr r10 e12a: 0b 43 clr r11 while ((P3IN&GDO0) == GDO0) // Wait for GDO0 to be cleared -> end of packet e12c: f2 b0 40 00 bit.b #64, &0x0018 ;#0x0040 e130: 18 00 e132: 0f 24 jz $+32 ;abs 0xe152 { //i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE if((time >= timeout) && timeout != 0) e134: 0e 4a mov r10, r14 e136: 0f 4b mov r11, r15 e138: 0e 88 sub r8, r14 e13a: 0f 79 subc r9, r15 e13c: 04 28 jnc $+10 ;abs 0xe146 e13e: 08 93 tst r8 e140: 67 20 jnz $+208 ;abs 0xe210 e142: 09 93 tst r9 e144: 65 20 jnz $+204 ;abs 0xe210 CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer CC1100_SPI_STROBE(CC1100_SIDLE); //flush the buffer return false; //timeout! } time++; e146: 1a 53 inc r10 e148: 0b 63 adc r11 e14a: f2 b0 40 00 bit.b #64, &0x0018 ;#0x0040 e14e: 18 00 e150: f1 23 jnz $-28 ;abs 0xe134 } //pkt_length = CCXX_SPI_RDREG(CC1100_RXFIFO);//length of the buffer pkt_length = CC1100_SPI_RDREG(CC1100_PKTLEN);//We are using fixed length, so use the pktlen register e152: 7f 40 06 00 mov.b #6, r15 ;#0x0006 e156: b0 12 8a ea call #0xea8a e15a: 49 4f mov.b r15, r9 real_length = CC1100_SPI_RDREG(CC1100_RXBYTES);//length of the packet e15c: 7f 40 3b 00 mov.b #59, r15 ;#0x003b e160: b0 12 8a ea call #0xea8a e164: 45 4f mov.b r15, r5 for(i=0; i < length && i < pkt_length; i++) e166: 48 43 clr.b r8 e168: 4a 46 mov.b r6, r10 e16a: 8a 11 sxt r10 e16c: 0b 43 clr r11 e16e: 1a 93 cmp #1, r10 ;r3 As==01 e170: 11 38 jl $+36 ;abs 0xe194 e172: 59 93 cmp.b #1, r9 ;r3 As==01 e174: 4b 28 jnc $+152 ;abs 0xe20c { rxbuf[i] = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the byte e176: 7f 40 bf ff mov.b #-65, r15 ;#0xffbf e17a: b0 12 8a ea call #0xea8a e17e: 4e 4f mov.b r15, r14 e180: 0f 47 mov r7, r15 e182: 0f 5b add r11, r15 e184: cf 4e 00 00 mov.b r14, 0(r15) ;0x0000(r15) } //pkt_length = CCXX_SPI_RDREG(CC1100_RXFIFO);//length of the buffer pkt_length = CC1100_SPI_RDREG(CC1100_PKTLEN);//We are using fixed length, so use the pktlen register real_length = CC1100_SPI_RDREG(CC1100_RXBYTES);//length of the packet for(i=0; i < length && i < pkt_length; i++) e188: 58 53 inc.b r8 e18a: 4b 48 mov.b r8, r11 e18c: 0b 9a cmp r10, r11 e18e: 02 34 jge $+6 ;abs 0xe194 e190: 48 99 cmp.b r9, r8 e192: f1 2b jnc $-28 ;abs 0xe176 { rxbuf[i] = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the byte } rxbuf[i] = '\0';//set the NULL terminator e194: 07 5b add r11, r7 e196: c7 43 00 00 mov.b #0, 0(r7) ;r3 As==00, 0x0000(r7) RSSI = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the ESSI e19a: 7f 40 bf ff mov.b #-65, r15 ;#0xffbf e19e: b0 12 8a ea call #0xea8a e1a2: c2 4f 0b 02 mov.b r15, &0x020b LQI = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the CRC e1a6: 7f 40 bf ff mov.b #-65, r15 ;#0xffbf e1aa: b0 12 8a ea call #0xea8a e1ae: c2 4f 0c 02 mov.b r15, &0x020c PKTSTATUS = CC1100_SPI_RDREG(CC1100_PKTSTATUS); e1b2: 7f 40 38 00 mov.b #56, r15 ;#0x0038 e1b6: b0 12 8a ea call #0xea8a e1ba: c2 4f 0d 02 mov.b r15, &0x020d if(real_length != (pkt_length + 2)) //packets lengths dont match, LQI mis-reported e1be: 4e 45 mov.b r5, r14 e1c0: 4f 49 mov.b r9, r15 e1c2: 2f 53 incd r15 e1c4: 0e 9f cmp r15, r14 e1c6: 03 24 jz $+8 ;abs 0xe1ce LQI &= ~bit7; //force it to be INVALID! e1c8: f2 f0 7f 00 and.b #127, &0x020c ;#0x007f e1cc: 0c 02 if (RSSI >= 128) e1ce: 5f 42 0b 02 mov.b &0x020b,r15 e1d2: 7f 90 80 00 cmp.b #128, r15 ;#0x0080 e1d6: 17 28 jnc $+48 ;abs 0xe206 RSSI_DBM = (int)((int )(RSSI - 256) / 2) - 74; e1d8: 4e 4f mov.b r15, r14 e1da: 0f 4e mov r14, r15 e1dc: 3f 50 00 ff add #-256, r15 ;#0xff00 e1e0: 10 30 jn $+34 ;abs 0xe202 e1e2: 0f 11 rra r15 e1e4: 7f 50 b6 ff add.b #-74, r15 ;#0xffb6 e1e8: c2 4f 0a 02 mov.b r15, &0x020a else RSSI_DBM = (RSSI / 2) - 74; CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer e1ec: 7f 40 3a 00 mov.b #58, r15 ;#0x003a e1f0: b0 12 2e eb call #0xeb2e CC1100_SPI_STROBE(CC1100_SIDLE); //return to IDLE state e1f4: 7f 40 36 00 mov.b #54, r15 ;#0x0036 e1f8: b0 12 2e eb call #0xeb2e return i; //i = real length e1fc: 4f 48 mov.b r8, r15 e1fe: 8f 11 sxt r15 e200: 10 3c jmp $+34 ;abs 0xe222 e202: 1f 53 inc r15 e204: ee 3f jmp $-34 ;abs 0xe1e2 LQI &= ~bit7; //force it to be INVALID! if (RSSI >= 128) RSSI_DBM = (int)((int )(RSSI - 256) / 2) - 74; else RSSI_DBM = (RSSI / 2) - 74; e206: 12 c3 clrc e208: 4f 10 rrc.b r15 e20a: ec 3f jmp $-38 ;abs 0xe1e4 e20c: 0b 43 clr r11 e20e: c2 3f jmp $-122 ;abs 0xe194 { //i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE if((time >= timeout) && timeout != 0) { CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer e210: 7f 40 3a 00 mov.b #58, r15 ;#0x003a e214: b0 12 2e eb call #0xeb2e CC1100_SPI_STROBE(CC1100_SIDLE); //flush the buffer e218: 7f 40 36 00 mov.b #54, r15 ;#0x0036 e21c: b0 12 2e eb call #0xeb2e return false; //timeout! e220: 0f 43 clr r15 CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer CC1100_SPI_STROBE(CC1100_SIDLE); //return to IDLE state return i; //i = real length } e222: 35 41 pop r5 e224: 36 41 pop r6 e226: 37 41 pop r7 e228: 38 41 pop r8 e22a: 39 41 pop r9 e22c: 3a 41 pop r10 e22e: 3b 41 pop r11 e230: 30 41 ret 0000e232 : /** Transmit a string of bytes. */ void TX_STRING(unsigned char *txstring, unsigned char length) { e232: 0b 12 push r11 e234: 0a 12 push r10 e236: 09 12 push r9 e238: 09 4f mov r15, r9 e23a: 4b 4e mov.b r14, r11 unsigned char i,pktlen = CC1100_SPI_RDREG(CC1100_PKTLEN); e23c: 7f 40 06 00 mov.b #6, r15 ;#0x0006 e240: b0 12 8a ea call #0xea8a e244: 4a 4f mov.b r15, r10 do{ CC1100_SPI_STROBE(CC1100_SIDLE);//Idle e246: 7f 40 36 00 mov.b #54, r15 ;#0x0036 e24a: b0 12 2e eb call #0xeb2e CC1100_SPI_STROBE(CC1100_SNOP) ; //wait for Idle e24e: 7f 40 3d 00 mov.b #61, r15 ;#0x003d e252: b0 12 2e eb call #0xeb2e }while((status & CC1100_STAT_ADDR) != CC1100_STAT_IDLE); //wait for idle e256: f2 b0 70 00 bit.b #112, &0x020e ;#0x0070 e25a: 0e 02 e25c: f4 23 jnz $-22 ;abs 0xe246 for(i=0; i<=length; i++) { if(i < length) CC1100_SPI_WRREG(CC1100_TXFIFO, txstring[i]);//Write data to FIFO }*/ if(length > pktlen) //text string is too long for fixed packet length mode e25e: 4a 9b cmp.b r11, r10 e260: 01 2c jc $+4 ;abs 0xe264 length = pktlen; e262: 4b 4a mov.b r10, r11 if (length == pktlen) e264: 4b 9a cmp.b r10, r11 e266: 2a 24 jz $+86 ;abs 0xe2bc CC1100_SPI_BURST_WRREG(CC1100_TXFIFO_BURST, txstring, length); else if (length < pktlen) e268: 4b 9a cmp.b r10, r11 e26a: 11 28 jnc $+36 ;abs 0xe28e { CC1100_SPI_WRREG(CC1100_TXFIFO, '\0');//then fill rest will null characters } } CC1100_SPI_STROBE(CC1100_STX); // send tx strobe and TX begins, returns to 15 or 31 when complete (depending on MCSM1) e26c: 7f 40 35 00 mov.b #53, r15 ;#0x0035 e270: b0 12 2e eb call #0xeb2e do { CC1100_SPI_STROBE(CC1100_SNOP) ; //(wait for 15, idle)read status byte.... e274: 7f 40 3d 00 mov.b #61, r15 ;#0x003d e278: b0 12 2e eb call #0xeb2e if(status == 31) //fast RX mode yay e27c: 5f 42 0e 02 mov.b &0x020e,r15 e280: 7f 90 1f 00 cmp.b #31, r15 ;#0x001f e284: 22 24 jz $+70 ;abs 0xe2ca break; }while((status & CC1100_STAT_ADDR) != CC1100_STAT_IDLE); //(15)31 for return to TX on complete, see MCSM1 e286: 7f f0 70 00 and.b #112, r15 ;#0x0070 e28a: f4 23 jnz $-22 ;abs 0xe274 e28c: 1e 3c jmp $+62 ;abs 0xe2ca { /*for(i=0; i pktlen) //text string is too long for fixed packet length mode length = pktlen; if (length == pktlen) CC1100_SPI_BURST_WRREG(CC1100_TXFIFO_BURST, txstring, length); e2bc: 4d 4b mov.b r11, r13 e2be: 0e 49 mov r9, r14 e2c0: 7f 40 7f 00 mov.b #127, r15 ;#0x007f e2c4: b0 12 64 eb call #0xeb64 e2c8: d1 3f jmp $-92 ;abs 0xe26c { CC1100_SPI_STROBE(CC1100_SNOP) ; //(wait for 15, idle)read status byte.... if(status == 31) //fast RX mode yay break; }while((status & CC1100_STAT_ADDR) != CC1100_STAT_IDLE); //(15)31 for return to TX on complete, see MCSM1 } e2ca: 39 41 pop r9 e2cc: 3a 41 pop r10 e2ce: 3b 41 pop r11 e2d0: 30 41 ret 0000e2d2 : void init_UART_SPI() { P3SEL &= ~UART0_232_MODULES; //this will bring the clock edge high e2d2: f2 f0 ef ff and.b #-17, &0x001b ;#0xffef e2d6: 1b 00 U0CTL |= SWRST; // disable the state machine e2d8: d2 d3 70 00 bis.b #1, &0x0070 ;r3 As==01 ME2 &= ~UTXE0; //disable UART e2dc: e2 c3 05 00 bic.b #2, &0x0005 ;r3 As==10 ME2 |= USPIE0; //enable SPI e2e0: d2 d3 05 00 bis.b #1, &0x0005 ;r3 As==01 U0CTL = CHAR | SYNC | MM | SWRST; e2e4: f2 40 17 00 mov.b #23, &0x0070 ;#0x0017 e2e8: 70 00 U0TCTL = CKPH | STC | SSEL_3; e2ea: f2 40 b2 ff mov.b #-78, &0x0071 ;#0xffb2 e2ee: 71 00 U0BR0 = 2; //divide by 5 = 1Mhz e2f0: e2 43 74 00 mov.b #2, &0x0074 ;r3 As==10 U0BR1 = 0; e2f4: c2 43 75 00 mov.b #0, &0x0075 ;r3 As==00 U0MCTL = 0; e2f8: c2 43 73 00 mov.b #0, &0x0073 ;r3 As==00 U0CTL &= ~SWRST; // Initialize USART state machine e2fc: d2 c3 70 00 bic.b #1, &0x0070 ;r3 As==01 } e300: 30 41 ret 0000e302 : void init_UART_232() { P3SEL |= UART0_232_MODULES; //this will bring the clock edge high e302: f2 d0 10 00 bis.b #16, &0x001b ;#0x0010 e306: 1b 00 U0CTL |= SWRST; // disable the state machine e308: d2 d3 70 00 bis.b #1, &0x0070 ;r3 As==01 ME2 &= ~USPIE0; //disable SPI e30c: d2 c3 05 00 bic.b #1, &0x0005 ;r3 As==01 ME2 |= UTXE0; //enable UART e310: e2 d3 05 00 bis.b #2, &0x0005 ;r3 As==10 U0CTL = CHAR | SWRST; e314: f2 40 11 00 mov.b #17, &0x0070 ;#0x0011 e318: 70 00 U0TCTL = SSEL_3; e31a: f2 40 30 00 mov.b #48, &0x0071 ;#0x0030 e31e: 71 00 U0BR0 = 0x71; //divide by 1905 = 2400 baud //lower byte e320: f2 40 71 00 mov.b #113, &0x0074 ;#0x0071 e324: 74 00 U0BR1 = 0x07;//00001110; //upper byte e326: f2 40 07 00 mov.b #7, &0x0075 ;#0x0007 e32a: 75 00 U0MCTL = 0; e32c: c2 43 73 00 mov.b #0, &0x0073 ;r3 As==00 U0CTL &= ~SWRST; // Initialize USART state machine e330: d2 c3 70 00 bic.b #1, &0x0070 ;r3 As==01 } e334: 30 41 ret 0000e336 : void tx_232_char(char c) { e336: 4e 4f mov.b r15, r14 //U0TXBUF = c; //IFG2 &= ~UTXIFG0; while ((IFG2 & UTXIFG0) == 0); // USART0 TX buffer ready? e338: e2 b3 03 00 bit.b #2, &0x0003 ;r3 As==10 e33c: fd 27 jz $-4 ;abs 0xe338 U0TXBUF = c; e33e: c2 4e 77 00 mov.b r14, &0x0077 } e342: 30 41 ret 0000e344 : void tx_232_str(char *str) { e344: 0b 12 push r11 e346: 0a 12 push r10 e348: 09 12 push r9 e34a: 0a 4f mov r15, r10 char i; int length=strlen(str); e34c: 09 4f mov r15, r9 e34e: 19 83 dec r9 e350: 19 53 inc r9 e352: c9 93 00 00 tst.b 0(r9) ;0x0000(r9) e356: fc 23 jnz $-6 ;abs 0xe350 e358: 09 8f sub r15, r9 for(i=0; i: /** Main function. Takes a photo when you push the buttom! */ int main(void) { e3f2: 31 40 e2 02 mov #738, r1 ;#0x02e2 e3f6: 04 41 mov r1, r4 char rxbuf[RX_BUFFER_LENGTH]; unsigned int length; unsigned int tsample; int temp; sys_init(); e3f8: b0 12 8c e0 call #0xe08c init_adc(); e3fc: b0 12 64 e0 call #0xe064 init_UART_SPI(); e400: b0 12 d2 e2 call #0xe2d2 memset(rxbuf, 0, 25); e404: 3e 40 19 00 mov #25, r14 ;#0x0019 e408: 0f 44 mov r4, r15 e40a: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) e40e: 1f 53 inc r15 e410: 1e 83 dec r14 e412: fb 23 jnz $-8 ;abs 0xe40a //P3SEL = UART0_SPI_MODULES; while (1) //main loop, never ends... { P3OUT &= ~CSn; //power on reset, strobe CSn e414: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 delay(0x00FF); e418: 3f 40 ff 00 mov #255, r15 ;#0x00ff e41c: b0 12 36 e0 call #0xe036 P3OUT |= CSn; e420: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 delay(0xFFFF); e424: 3f 43 mov #-1, r15 ;r3 As==11 e426: b0 12 36 e0 call #0xe036 //values straight from RF_STUDIO CC1100_SPI_STROBE(CC1100_SRES); //reset chip e42a: 7f 40 30 00 mov.b #48, r15 ;#0x0030 e42e: b0 12 2e eb call #0xeb2e //CC1100_WRITE_SPI_RF_SETTINGS(); //CC1100_WRITE_RF_SETTINGS_500K(); CC1100_WRITE_RF_SETTINGS_1_2K(); e432: b0 12 60 e7 call #0xe760 CC1100_SPI_STROBE(CC1100_SIDLE); //flush the buffer, all bytes sent e436: 7f 40 36 00 mov.b #54, r15 ;#0x0036 e43a: b0 12 2e eb call #0xeb2e { i = CC1100_SPI_RDREG(CC1100_VERSION);//wait for IDLE }*/ do{ i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE e43e: 7f 40 35 00 mov.b #53, r15 ;#0x0035 e442: b0 12 8a ea call #0xea8a }while(i != 1); e446: 5f 93 cmp.b #1, r15 ;r3 As==01 e448: fa 23 jnz $-10 ;abs 0xe43e delay(0xF); //lil bit O delay e44a: 3f 40 0f 00 mov #15, r15 ;#0x000f e44e: b0 12 36 e0 call #0xe036 while(1) { TX_STRING("Can you hear me now?\0",20,&status); //delay(0xFFF); }*/ memset(rxbuf, 0, 25); e452: 3e 40 19 00 mov #25, r14 ;#0x0019 e456: 0f 44 mov r4, r15 e458: cf 43 00 00 mov.b #0, 0(r15) ;r3 As==00, 0x0000(r15) e45c: 1f 53 inc r15 e45e: 1e 83 dec r14 e460: fb 23 jnz $-8 ;abs 0xe458 while(!RX_STRING(rxbuf, 20, 0xFFFFF)); e462: 3c 43 mov #-1, r12 ;r3 As==11 e464: 3d 40 0f 00 mov #15, r13 ;#0x000f e468: 7e 40 14 00 mov.b #20, r14 ;#0x0014 e46c: 0f 44 mov r4, r15 e46e: b0 12 d8 e0 call #0xe0d8 e472: 4f 93 tst.b r15 e474: f6 27 jz $-18 ;abs 0xe462 tx_232_str(RSSIBUF); tx_232_str("dBm\r"); init_UART_SPI();*/ //P2OUT = status & 0x0F; if(!memcmp(CALLSIGN,rxbuf,3)) //packet addressed to us e476: 3d 40 03 00 mov #3, r13 ;#0x0003 e47a: 0e 44 mov r4, r14 e47c: 3f 40 80 e3 mov #-7296, r15 ;#0xe380 e480: b0 12 6e f2 call #0xf26e e484: 0f 93 tst r15 e486: 0c 24 jz $+26 ;abs 0xe4a0 i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE }while(i != 1); }*/ else { P2OUT |= 0x04; e488: e2 d2 29 00 bis.b #4, &0x0029 ;r2 As==10 delay(0xFF); //lil bit O delay e48c: 3f 40 ff 00 mov #255, r15 ;#0x00ff e490: b0 12 36 e0 call #0xe036 delay(0xFFFF); //lil bit O delay e494: 3f 43 mov #-1, r15 ;r3 As==11 e496: b0 12 36 e0 call #0xe036 P2OUT = 0x00; e49a: c2 43 29 00 mov.b #0, &0x0029 ;r3 As==00 e49e: d9 3f jmp $-76 ;abs 0xe452 init_UART_SPI();*/ //P2OUT = status & 0x0F; if(!memcmp(CALLSIGN,rxbuf,3)) //packet addressed to us { if(strstr( rxbuf, "UNLOCK" ) != NULL) e4a0: 3e 40 84 e3 mov #-7292, r14 ;#0xe384 e4a4: 0f 44 mov r4, r15 e4a6: b0 12 9e f2 call #0xf29e e4aa: 0f 93 tst r15 e4ac: 69 20 jnz $+212 ;abs 0xe580 P2OUT |= LED_AMBER; delay(0x7FFF); //lil bit O delay P1OUT &= ~AF; P2OUT = 0x00; } else if(strstr( rxbuf, "LOCK" ) != NULL) e4ae: 3e 40 8b e3 mov #-7285, r14 ;#0xe38b e4b2: 0f 44 mov r4, r15 e4b4: b0 12 9e f2 call #0xf29e e4b8: 0f 93 tst r15 e4ba: 51 20 jnz $+164 ;abs 0xe55e delay(0x1FFF); //lil bit O delay TX_STRING("GND:CAR locked",14); P1OUT &= ~SHUTTER; P2OUT = 0x00; } else if(strstr( rxbuf, "status" ) != NULL) //its a status inquiery e4bc: 3e 40 90 e3 mov #-7280, r14 ;#0xe390 e4c0: 0f 44 mov r4, r15 e4c2: b0 12 9e f2 call #0xf29e e4c6: 0f 93 tst r15 e4c8: 36 20 jnz $+110 ;abs 0xe536 { length = snprintf(rxbuf,RX_BUFFER_LENGTH,"GND:CAR R:%ddBm L:%d", RSSI_DBM, LQI); delay(0x1FFF); //lil bit O delay TX_STRING(rxbuf,length); } else if(strstr( rxbuf, "temp" ) != NULL) //interval is in the string! e4ca: 3e 40 97 e3 mov #-7273, r14 ;#0xe397 e4ce: 0f 44 mov r4, r15 e4d0: b0 12 9e f2 call #0xf29e e4d4: 0f 93 tst r15 e4d6: 0d 20 jnz $+28 ;abs 0xe4f2 length = snprintf(rxbuf,RX_BUFFER_LENGTH,"GND:CAR Temp %d:%u",temp,tsample); TX_STRING(rxbuf,length); } else { P2OUT |= 0x08; e4d8: f2 d2 29 00 bis.b #8, &0x0029 ;r2 As==11 delay(0x1FFF); //lil bit O delay e4dc: 3f 40 ff 1f mov #8191, r15 ;#0x1fff e4e0: b0 12 36 e0 call #0xe036 TX_STRING("GND:CAR PONG!",13); e4e4: 7e 40 0d 00 mov.b #13, r14 ;#0x000d e4e8: 3f 40 9c e3 mov #-7268, r15 ;#0xe39c e4ec: b0 12 32 e2 call #0xe232 P2OUT = 0x00; e4f0: d4 3f jmp $-86 ;abs 0xe49a delay(0x1FFF); //lil bit O delay TX_STRING(rxbuf,length); } else if(strstr( rxbuf, "temp" ) != NULL) //interval is in the string! { tsample = sample_adc(INCH_TEMP); e4f2: 3f 40 00 a0 mov #-24576,r15 ;#0xa000 e4f6: b0 12 72 e0 call #0xe072 e4fa: 0d 4f mov r15, r13 temp = (tsample*21/8) - (52660/31)+38; e4fc: 0a 4f mov r15, r10 e4fe: 3c 40 15 00 mov #21, r12 ;#0x0015 e502: b0 12 1c f3 call #0xf31c e506: 0f 4e mov r14, r15 e508: 12 c3 clrc e50a: 0f 10 rrc r15 e50c: 0f 11 rra r15 e50e: 0f 11 rra r15 e510: 3f 50 84 f9 add #-1660, r15 ;#0xf984 length = snprintf(rxbuf,RX_BUFFER_LENGTH,"GND:CAR Temp %d:%u",temp,tsample); e514: 0d 12 push r13 e516: 0f 12 push r15 e518: 30 12 aa e3 push #-7254 ;#0xe3aa e51c: 30 12 1e 00 push #30 ;#0x001e e520: 04 12 push r4 e522: b0 12 be eb call #0xebbe e526: 0a 4f mov r15, r10 TX_STRING(rxbuf,length); e528: 4e 4a mov.b r10, r14 e52a: 0f 44 mov r4, r15 e52c: b0 12 32 e2 call #0xe232 e530: 31 50 0a 00 add #10, r1 ;#0x000a e534: 8e 3f jmp $-226 ;abs 0xe452 P1OUT &= ~SHUTTER; P2OUT = 0x00; } else if(strstr( rxbuf, "status" ) != NULL) //its a status inquiery { length = snprintf(rxbuf,RX_BUFFER_LENGTH,"GND:CAR R:%ddBm L:%d", RSSI_DBM, LQI); e536: 5f 42 0c 02 mov.b &0x020c,r15 e53a: 0f 12 push r15 e53c: 5f 42 0a 02 mov.b &0x020a,r15 e540: 8f 11 sxt r15 e542: 0f 12 push r15 e544: 30 12 bd e3 push #-7235 ;#0xe3bd e548: 30 12 1e 00 push #30 ;#0x001e e54c: 04 12 push r4 e54e: b0 12 be eb call #0xebbe e552: 0a 4f mov r15, r10 delay(0x1FFF); //lil bit O delay e554: 3f 40 ff 1f mov #8191, r15 ;#0x1fff e558: b0 12 36 e0 call #0xe036 TX_STRING(rxbuf,length); e55c: e5 3f jmp $-52 ;abs 0xe528 P1OUT &= ~AF; P2OUT = 0x00; } else if(strstr( rxbuf, "LOCK" ) != NULL) { P1OUT |= SHUTTER; e55e: f2 d2 21 00 bis.b #8, &0x0021 ;r2 As==11 P2OUT |= LED_RED; e562: d2 d3 29 00 bis.b #1, &0x0029 ;r3 As==01 delay(0x1FFF); //lil bit O delay e566: 3f 40 ff 1f mov #8191, r15 ;#0x1fff e56a: b0 12 36 e0 call #0xe036 TX_STRING("GND:CAR locked",14); e56e: 7e 40 0e 00 mov.b #14, r14 ;#0x000e e572: 3f 40 d2 e3 mov #-7214, r15 ;#0xe3d2 e576: b0 12 32 e2 call #0xe232 P1OUT &= ~SHUTTER; e57a: f2 c2 21 00 bic.b #8, &0x0021 ;r2 As==11 P2OUT = 0x00; e57e: 8d 3f jmp $-228 ;abs 0xe49a //P2OUT = status & 0x0F; if(!memcmp(CALLSIGN,rxbuf,3)) //packet addressed to us { if(strstr( rxbuf, "UNLOCK" ) != NULL) { P1OUT |= AF; e580: e2 d2 21 00 bis.b #4, &0x0021 ;r2 As==10 P2OUT |= LED_AMBER; e584: e2 d3 29 00 bis.b #2, &0x0029 ;r3 As==10 delay(0x1FFF); //lil bit O delay e588: 3f 40 ff 1f mov #8191, r15 ;#0x1fff e58c: b0 12 36 e0 call #0xe036 TX_STRING("GND:CAR Unlcked\0",15); e590: 7e 40 0f 00 mov.b #15, r14 ;#0x000f e594: 3f 40 e1 e3 mov #-7199, r15 ;#0xe3e1 e598: b0 12 32 e2 call #0xe232 P1OUT &= ~AF; e59c: e2 c2 21 00 bic.b #4, &0x0021 ;r2 As==10 P2OUT = 0x00; e5a0: c2 43 29 00 mov.b #0, &0x0029 ;r3 As==00 delay(0x7FFF); //lil bit O delay e5a4: 3f 40 ff 7f mov #32767, r15 ;#0x7fff e5a8: b0 12 36 e0 call #0xe036 P1OUT |= AF; //second pulse unlocks all doors e5ac: e2 d2 21 00 bis.b #4, &0x0021 ;r2 As==10 P2OUT |= LED_AMBER; e5b0: e2 d3 29 00 bis.b #2, &0x0029 ;r3 As==10 delay(0x7FFF); //lil bit O delay e5b4: 3f 40 ff 7f mov #32767, r15 ;#0x7fff e5b8: b0 12 36 e0 call #0xe036 P1OUT &= ~AF; e5bc: e2 c2 21 00 bic.b #4, &0x0021 ;r2 As==10 P2OUT = 0x00; e5c0: 6c 3f jmp $-294 ;abs 0xe49a } //while(1); } //P2OUT = (0x0F & status); } } e5c2: 31 50 1e 00 add #30, r1 ;#0x001e e5c6: 30 40 5c f3 br #0xf35c 0000e5ca : void delay(unsigned int d); void sys_init(); char RX_STRING(char *rxbuf, char length, unsigned long timeout); void init_adc(); int sample_adc(int chan); e5ca: 7e 40 06 00 mov.b #6, r14 ;#0x0006 e5ce: 7f 40 0b 00 mov.b #11, r15 ;#0x000b e5d2: b0 12 e6 ea call #0xeae6 static char make_gdb_happy=1; e5d6: 4e 43 clr.b r14 e5d8: 7f 40 0c 00 mov.b #12, r15 ;#0x000c e5dc: b0 12 e6 ea call #0xeae6 unsigned char status; e5e0: 7e 40 23 00 mov.b #35, r14 ;#0x0023 e5e4: 7f 40 0d 00 mov.b #13, r15 ;#0x000d e5e8: b0 12 e6 ea call #0xeae6 unsigned char RSSI; e5ec: 7e 40 31 00 mov.b #49, r14 ;#0x0031 e5f0: 7f 40 0e 00 mov.b #14, r15 ;#0x000e e5f4: b0 12 e6 ea call #0xeae6 unsigned char LQI; e5f8: 7e 40 3b 00 mov.b #59, r14 ;#0x003b e5fc: 7f 40 0f 00 mov.b #15, r15 ;#0x000f e600: b0 12 e6 ea call #0xeae6 unsigned char PKTSTATUS; e604: 7e 40 c8 ff mov.b #-56, r14 ;#0xffc8 e608: 7f 40 10 00 mov.b #16, r15 ;#0x0010 e60c: b0 12 e6 ea call #0xeae6 char RSSI_DBM; e610: 7e 40 93 ff mov.b #-109, r14 ;#0xff93 e614: 7f 40 11 00 mov.b #17, r15 ;#0x0011 e618: b0 12 e6 ea call #0xeae6 e61c: 7e 40 03 00 mov.b #3, r14 ;#0x0003 e620: 7f 40 12 00 mov.b #18, r15 ;#0x0012 e624: b0 12 e6 ea call #0xeae6 /** e628: 7e 40 a2 ff mov.b #-94, r14 ;#0xffa2 e62c: 7f 40 13 00 mov.b #19, r15 ;#0x0013 e630: b0 12 e6 ea call #0xeae6 Delay function. e634: 7e 40 f8 ff mov.b #-8, r14 ;#0xfff8 e638: 7f 40 14 00 mov.b #20, r15 ;#0x0014 e63c: b0 12 e6 ea call #0xeae6 */ e640: 7e 40 0a 00 mov.b #10, r14 ;#0x000a e644: 7f 40 0a 00 mov.b #10, r15 ;#0x000a e648: b0 12 e6 ea call #0xeae6 void delay(unsigned int d) e64c: 7e 40 34 00 mov.b #52, r14 ;#0x0034 e650: 7f 40 15 00 mov.b #21, r15 ;#0x0015 e654: b0 12 e6 ea call #0xeae6 { e658: 7e 40 56 00 mov.b #86, r14 ;#0x0056 e65c: 7f 40 21 00 mov.b #33, r15 ;#0x0021 e660: b0 12 e6 ea call #0xeae6 int i; e664: 7e 40 10 00 mov.b #16, r14 ;#0x0010 e668: 7f 40 22 00 mov.b #34, r15 ;#0x0022 e66c: b0 12 e6 ea call #0xeae6 for (i = 0; i: /**init the ADC10 */ void init_adc() { //ADC10AE = ADC_IN; e760: 7e 40 06 00 mov.b #6, r14 ;#0x0006 e764: 7f 40 0b 00 mov.b #11, r15 ;#0x000b e768: b0 12 e6 ea call #0xeae6 ADC10CTL0 = SREF_VREF_AVSS | ADC10SR | ADC10ON | REFON | ADC10SHT_DIV64; //ref mode Vref for temp sense, 50kbps reduced power mode, ADC on, 16 clocks per sample window e76c: 4e 43 clr.b r14 e76e: 7f 40 0c 00 mov.b #12, r15 ;#0x000c e772: b0 12 e6 ea call #0xeae6 //ADC10CTL1 = ADC10SSEL_ACLK | INCH_A2; //ACLK sourced, A2 input e776: 7e 40 23 00 mov.b #35, r14 ;#0x0023 e77a: 7f 40 0d 00 mov.b #13, r15 ;#0x000d e77e: b0 12 e6 ea call #0xeae6 ADC10CTL1 = ADC10DIV_7 | ADC10SSEL_ADC10OSC | INCH_TEMP; //ACLK sourced, A2 input e782: 7e 40 31 00 mov.b #49, r14 ;#0x0031 e786: 7f 40 0e 00 mov.b #14, r15 ;#0x000e e78a: b0 12 e6 ea call #0xeae6 } e78e: 7e 40 3b 00 mov.b #59, r14 ;#0x003b e792: 7f 40 0f 00 mov.b #15, r15 ;#0x000f e796: b0 12 e6 ea call #0xeae6 e79a: 7e 40 f5 ff mov.b #-11, r14 ;#0xfff5 e79e: 7f 40 10 00 mov.b #16, r15 ;#0x0010 e7a2: b0 12 e6 ea call #0xeae6 //get a reading from the ADC10MEM e7a6: 7e 40 83 ff mov.b #-125, r14 ;#0xff83 e7aa: 7f 40 11 00 mov.b #17, r15 ;#0x0011 e7ae: b0 12 e6 ea call #0xeae6 e7b2: 7e 40 03 00 mov.b #3, r14 ;#0x0003 e7b6: 7f 40 12 00 mov.b #18, r15 ;#0x0012 e7ba: b0 12 e6 ea call #0xeae6 int sample_adc(int chan) e7be: 7e 40 22 00 mov.b #34, r14 ;#0x0022 e7c2: 7f 40 13 00 mov.b #19, r15 ;#0x0013 e7c6: b0 12 e6 ea call #0xeae6 { e7ca: 7e 40 f8 ff mov.b #-8, r14 ;#0xfff8 e7ce: 7f 40 14 00 mov.b #20, r15 ;#0x0014 e7d2: b0 12 e6 ea call #0xeae6 ADC10CTL0 &= ~ENC; // have to disable ADC10 to change channel e7d6: 7e 40 0a 00 mov.b #10, r14 ;#0x000a e7da: 7f 40 0a 00 mov.b #10, r15 ;#0x000a e7de: b0 12 e6 ea call #0xeae6 ADC10CTL1 = chan; // A2 input e7e2: 7e 40 15 00 mov.b #21, r14 ;#0x0015 e7e6: 7f 40 15 00 mov.b #21, r15 ;#0x0015 e7ea: b0 12 e6 ea call #0xeae6 ADC10CTL0 |= ENC | ADC10SC; // Sampling and conversion start e7ee: 7e 40 56 00 mov.b #86, r14 ;#0x0056 e7f2: 7f 40 21 00 mov.b #33, r15 ;#0x0021 e7f6: b0 12 e6 ea call #0xeae6 while(ADC10CTL1 & ADC10BUSY); e7fa: 7e 40 10 00 mov.b #16, r14 ;#0x0010 e7fe: 7f 40 22 00 mov.b #34, r15 ;#0x0022 e802: b0 12 e6 ea call #0xeae6 return ADC10MEM; e806: 7e 40 18 00 mov.b #24, r14 ;#0x0018 e80a: 7f 40 18 00 mov.b #24, r15 ;#0x0018 e80e: b0 12 e6 ea call #0xeae6 } e812: 7e 40 16 00 mov.b #22, r14 ;#0x0016 e816: 7f 40 19 00 mov.b #25, r15 ;#0x0019 e81a: b0 12 e6 ea call #0xeae6 e81e: 7e 40 6c 00 mov.b #108, r14 ;#0x006c e822: 7f 40 1a 00 mov.b #26, r15 ;#0x001a e826: b0 12 e6 ea call #0xeae6 /** e82a: 7e 40 03 00 mov.b #3, r14 ;#0x0003 e82e: 7f 40 1b 00 mov.b #27, r15 ;#0x001b e832: b0 12 e6 ea call #0xeae6 Set up the system e836: 7e 40 40 00 mov.b #64, r14 ;#0x0040 e83a: 7f 40 1c 00 mov.b #28, r15 ;#0x001c e83e: b0 12 e6 ea call #0xeae6 */ e842: 7e 40 91 ff mov.b #-111, r14 ;#0xff91 e846: 7f 40 1d 00 mov.b #29, r15 ;#0x001d e84a: b0 12 e6 ea call #0xeae6 void sys_init() e84e: 7e 40 e9 ff mov.b #-23, r14 ;#0xffe9 e852: 7f 40 23 00 mov.b #35, r15 ;#0x0023 e856: b0 12 e6 ea call #0xeae6 { e85a: 7e 40 2a 00 mov.b #42, r14 ;#0x002a e85e: 7f 40 24 00 mov.b #36, r15 ;#0x0024 e862: b0 12 e6 ea call #0xeae6 e866: 4e 43 clr.b r14 e868: 7f 40 25 00 mov.b #37, r15 ;#0x0025 e86c: b0 12 e6 ea call #0xeae6 WDTCTL = WDTCTL_INIT; //Init watchdog timer e870: 7e 40 1f 00 mov.b #31, r14 ;#0x001f e874: 7f 40 26 00 mov.b #38, r15 ;#0x0026 e878: b0 12 e6 ea call #0xeae6 e87c: 7e 40 59 00 mov.b #89, r14 ;#0x0059 e880: 7f 40 29 00 mov.b #41, r15 ;#0x0029 e884: b0 12 e6 ea call #0xeae6 P1OUT = P1OUT_INIT; //Init output data of port1 e888: 7e 40 81 ff mov.b #-127, r14 ;#0xff81 e88c: 7f 40 2c 00 mov.b #44, r15 ;#0x002c e890: b0 12 e6 ea call #0xeae6 P2OUT = P2OUT_INIT; //Init output data of port2 e894: 7e 40 35 00 mov.b #53, r14 ;#0x0035 e898: 7f 40 2d 00 mov.b #45, r15 ;#0x002d e89c: b0 12 e6 ea call #0xeae6 P3OUT = P3OUT_INIT; e8a0: 7e 40 09 00 mov.b #9, r14 ;#0x0009 e8a4: 7f 40 2e 00 mov.b #46, r15 ;#0x002e e8a8: b0 12 e6 ea call #0xeae6 e8ac: 7e 40 0b 00 mov.b #11, r14 ;#0x000b e8b0: 4f 43 clr.b r15 e8b2: b0 12 e6 ea call #0xeae6 P1SEL = P1SEL_INIT; //Select port or module -function on port1 e8b6: 7e 40 06 00 mov.b #6, r14 ;#0x0006 e8ba: 6f 43 mov.b #2, r15 ;r3 As==10 e8bc: b0 12 e6 ea call #0xeae6 P2SEL = P2SEL_INIT; //Select port or module -function on port2 e8c0: 6e 42 mov.b #4, r14 ;r2 As==10 e8c2: 7f 40 07 00 mov.b #7, r15 ;#0x0007 e8c6: b0 12 e6 ea call #0xeae6 P3SEL = P3SEL_INIT; e8ca: 7e 42 mov.b #8, r14 ;r2 As==11 e8cc: 7f 42 mov.b #8, r15 ;r2 As==11 e8ce: b0 12 e6 ea call #0xeae6 e8d2: 4e 43 clr.b r14 e8d4: 7f 40 09 00 mov.b #9, r15 ;#0x0009 e8d8: b0 12 e6 ea call #0xeae6 P1DIR = P1DIR_INIT; //Init port direction register of port1 e8dc: 7e 40 19 00 mov.b #25, r14 ;#0x0019 e8e0: 7f 40 06 00 mov.b #6, r15 ;#0x0006 e8e4: b0 12 e6 ea call #0xeae6 P2DIR = P2DIR_INIT; //Init port direction register of port2 e8e8: 7e 40 c0 ff mov.b #-64, r14 ;#0xffc0 e8ec: 7f 40 3e 00 mov.b #62, r15 ;#0x003e e8f0: b0 12 e6 ea call #0xeae6 P3DIR = P3DIR_INIT; e8f4: 30 41 ret 0000e8f6 : P1IES = P1IES_INIT; //init port interrupts P2IES = P2IES_INIT; P1IE = P1IE_INIT; e8f6: 7e 40 0c 00 mov.b #12, r14 ;#0x000c e8fa: 7f 40 0b 00 mov.b #11, r15 ;#0x000b e8fe: b0 12 e6 ea call #0xeae6 P2IE = P2IE_INIT; e902: 4e 43 clr.b r14 e904: 7f 40 0c 00 mov.b #12, r15 ;#0x000c e908: b0 12 e6 ea call #0xeae6 e90c: 7e 40 21 00 mov.b #33, r14 ;#0x0021 e910: 7f 40 0d 00 mov.b #13, r15 ;#0x000d e914: b0 12 e6 ea call #0xeae6 BCSCTL1 |= RSEL0 | RSEL1 | RSEL2; e918: 7e 40 65 00 mov.b #101, r14 ;#0x0065 e91c: 7f 40 0e 00 mov.b #14, r15 ;#0x000e e920: b0 12 e6 ea call #0xeae6 DCOCTL |= DCO0 | DCO1 | DCO2; e924: 7e 40 6a 00 mov.b #106, r14 ;#0x006a e928: 7f 40 0f 00 mov.b #15, r15 ;#0x000f e92c: b0 12 e6 ea call #0xeae6 e930: 7e 40 0e 00 mov.b #14, r14 ;#0x000e e934: 7f 40 10 00 mov.b #16, r15 ;#0x0010 e938: b0 12 e6 ea call #0xeae6 e93c: 7e 40 3b 00 mov.b #59, r14 ;#0x003b e940: 7f 40 11 00 mov.b #17, r15 ;#0x0011 e944: b0 12 e6 ea call #0xeae6 e948: 7e 40 73 00 mov.b #115, r14 ;#0x0073 e94c: 7f 40 12 00 mov.b #18, r15 ;#0x0012 e950: b0 12 e6 ea call #0xeae6 e954: 7e 40 42 00 mov.b #66, r14 ;#0x0042 e958: 7f 40 13 00 mov.b #19, r15 ;#0x0013 e95c: b0 12 e6 ea call #0xeae6 //delay(0xffff); e960: 7e 40 f8 ff mov.b #-8, r14 ;#0xfff8 e964: 7f 40 14 00 mov.b #20, r15 ;#0x0014 e968: b0 12 e6 ea call #0xeae6 } e96c: 7e 40 0a 00 mov.b #10, r14 ;#0x000a e970: 7f 40 0a 00 mov.b #10, r15 ;#0x000a e974: b0 12 e6 ea call #0xeae6 e978: 4e 43 clr.b r14 e97a: 7f 40 15 00 mov.b #21, r15 ;#0x0015 e97e: b0 12 e6 ea call #0xeae6 e982: 7e 40 b6 ff mov.b #-74, r14 ;#0xffb6 e986: 7f 40 21 00 mov.b #33, r15 ;#0x0021 e98a: b0 12 e6 ea call #0xeae6 e98e: 7e 40 10 00 mov.b #16, r14 ;#0x0010 e992: 7f 40 22 00 mov.b #34, r15 ;#0x0022 e996: b0 12 e6 ea call #0xeae6 e99a: 7e 40 18 00 mov.b #24, r14 ;#0x0018 e99e: 7f 40 18 00 mov.b #24, r15 ;#0x0018 e9a2: b0 12 e6 ea call #0xeae6 /** e9a6: 7e 40 1d 00 mov.b #29, r14 ;#0x001d e9aa: 7f 40 19 00 mov.b #25, r15 ;#0x0019 e9ae: b0 12 e6 ea call #0xeae6 Get some bytes e9b2: 7e 40 1c 00 mov.b #28, r14 ;#0x001c e9b6: 7f 40 1a 00 mov.b #26, r15 ;#0x001a e9ba: b0 12 e6 ea call #0xeae6 */ e9be: 7e 40 c7 ff mov.b #-57, r14 ;#0xffc7 e9c2: 7f 40 1b 00 mov.b #27, r15 ;#0x001b e9c6: b0 12 e6 ea call #0xeae6 char RX_STRING(char *rxbuf, char length, unsigned long timeout) e9ca: 7e 40 40 00 mov.b #64, r14 ;#0x0040 e9ce: 7f 40 1c 00 mov.b #28, r15 ;#0x001c e9d2: b0 12 e6 ea call #0xeae6 { e9d6: 7e 40 b2 ff mov.b #-78, r14 ;#0xffb2 e9da: 7f 40 1d 00 mov.b #29, r15 ;#0x001d e9de: b0 12 e6 ea call #0xeae6 unsigned long time=0; e9e2: 7e 40 ea ff mov.b #-22, r14 ;#0xffea e9e6: 7f 40 23 00 mov.b #35, r15 ;#0x0023 e9ea: b0 12 e6 ea call #0xeae6 unsigned char i, real_length=23, pkt_length; e9ee: 7e 40 2a 00 mov.b #42, r14 ;#0x002a e9f2: 7f 40 24 00 mov.b #36, r15 ;#0x0024 e9f6: b0 12 e6 ea call #0xeae6 RSSI = 0; e9fa: 4e 43 clr.b r14 e9fc: 7f 40 25 00 mov.b #37, r15 ;#0x0025 ea00: b0 12 e6 ea call #0xeae6 LQI = 0; ea04: 7e 40 19 00 mov.b #25, r14 ;#0x0019 ea08: 7f 40 26 00 mov.b #38, r15 ;#0x0026 ea0c: b0 12 e6 ea call #0xeae6 ea10: 7e 40 59 00 mov.b #89, r14 ;#0x0059 ea14: 7f 40 29 00 mov.b #41, r15 ;#0x0029 ea18: b0 12 e6 ea call #0xeae6 CC1100_SPI_STROBE(CC1100_SRX);//Recieve ea1c: 7e 40 88 ff mov.b #-120, r14 ;#0xff88 ea20: 7f 40 2c 00 mov.b #44, r15 ;#0x002c ea24: b0 12 e6 ea call #0xeae6 ea28: 7e 40 31 00 mov.b #49, r14 ;#0x0031 ea2c: 7f 40 2d 00 mov.b #45, r15 ;#0x002d ea30: b0 12 e6 ea call #0xeae6 while ((P3IN&GDO0) == 0) // Wait for GDO0 to be set -> sync transmitted ea34: 7e 40 0b 00 mov.b #11, r14 ;#0x000b ea38: 7f 40 2e 00 mov.b #46, r15 ;#0x002e ea3c: b0 12 e6 ea call #0xeae6 { ea40: 7e 40 0b 00 mov.b #11, r14 ;#0x000b ea44: 4f 43 clr.b r15 ea46: b0 12 e6 ea call #0xeae6 //i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE ea4a: 7e 40 06 00 mov.b #6, r14 ;#0x0006 ea4e: 6f 43 mov.b #2, r15 ;r3 As==10 ea50: b0 12 e6 ea call #0xeae6 ea54: 6e 42 mov.b #4, r14 ;r2 As==10 ea56: 7f 40 07 00 mov.b #7, r15 ;#0x0007 ea5a: b0 12 e6 ea call #0xeae6 if((time >= timeout) && timeout != 0) ea5e: 7e 42 mov.b #8, r14 ;r2 As==11 ea60: 7f 42 mov.b #8, r15 ;r2 As==11 ea62: b0 12 e6 ea call #0xeae6 { ea66: 4e 43 clr.b r14 ea68: 7f 40 09 00 mov.b #9, r15 ;#0x0009 ea6c: b0 12 e6 ea call #0xeae6 ea70: 7e 40 19 00 mov.b #25, r14 ;#0x0019 ea74: 7f 40 06 00 mov.b #6, r15 ;#0x0006 ea78: b0 12 e6 ea call #0xeae6 CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer ea7c: 7e 40 c3 ff mov.b #-61, r14 ;#0xffc3 ea80: 7f 40 3e 00 mov.b #62, r15 ;#0x003e ea84: b0 12 e6 ea call #0xeae6 CC1100_SPI_STROBE(CC1100_SIDLE); //flush the buffer ea88: 30 41 ret 0000ea8a : } time++; } time=0; while ((P3IN&GDO0) == GDO0) // Wait for GDO0 to be cleared -> end of packet ea8a: 4e 4f mov.b r15, r14 { //i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE ea8c: 7f 90 30 00 cmp.b #48, r15 ;#0x0030 ea90: 1e 38 jl $+62 ;abs 0xeace if((time >= timeout) && timeout != 0) ea92: 7e d0 c0 ff bis.b #-64, r14 ;#0xffc0 { CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer CC1100_SPI_STROBE(CC1100_SIDLE); //flush the buffer ea96: c2 43 0e 02 mov.b #0, &0x020e ;r3 As==00 return false; //timeout! ea9a: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 } time++; ea9e: e2 b2 18 00 bit.b #4, &0x0018 ;r2 As==10 eaa2: fd 23 jnz $-4 ;abs 0xea9e } eaa4: f2 d0 0e 00 bis.b #14, &0x001b ;#0x000e eaa8: 1b 00 //pkt_length = CCXX_SPI_RDREG(CC1100_RXFIFO);//length of the buffer pkt_length = CC1100_SPI_RDREG(CC1100_PKTLEN);//We are using fixed length, so use the pktlen register eaaa: c2 4e 77 00 mov.b r14, &0x0077 real_length = CC1100_SPI_RDREG(CC1100_RXBYTES);//length of the packet eaae: d2 c3 03 00 bic.b #1, &0x0003 ;r3 As==01 for(i=0; i < length && i < pkt_length; i++) eab2: d2 b3 03 00 bit.b #1, &0x0003 ;r3 As==01 eab6: fd 27 jz $-4 ;abs 0xeab2 { eab8: d2 42 76 00 mov.b &0x0076,&0x020e eabc: 0e 02 rxbuf[i] = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the byte } eabe: c2 4e 77 00 mov.b r14, &0x0077 rxbuf[i] = '\0';//set the NULL terminator eac2: d2 c3 03 00 bic.b #1, &0x0003 ;r3 As==01 eac6: d2 b3 03 00 bit.b #1, &0x0003 ;r3 As==01 eaca: fd 27 jz $-4 ;abs 0xeac6 eacc: 03 3c jmp $+8 ;abs 0xead4 while ((P3IN&GDO0) == GDO0) // Wait for GDO0 to be cleared -> end of packet { //i = CC1100_SPI_RDREG(CC1100_MARCSTATE);//wait for IDLE if((time >= timeout) && timeout != 0) { eace: 7e d0 80 ff bis.b #-128, r14 ;#0xff80 ead2: e1 3f jmp $-60 ;abs 0xea96 { rxbuf[i] = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the byte } rxbuf[i] = '\0';//set the NULL terminator RSSI = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the ESSI ead4: 5f 42 76 00 mov.b &0x0076,r15 LQI = CC1100_SPI_RDREG(CC1100_RXFIFO);//get the CRC PKTSTATUS = CC1100_SPI_RDREG(CC1100_PKTSTATUS); ead8: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 eadc: f2 f0 f1 ff and.b #-15, &0x001b ;#0xfff1 eae0: 1b 00 eae2: 8f 11 sxt r15 if(real_length != (pkt_length + 2)) //packets lengths dont match, LQI mis-reported eae4: 30 41 ret 0000eae6 : if (RSSI >= 128) RSSI_DBM = (int)((int )(RSSI - 256) / 2) - 74; else RSSI_DBM = (RSSI / 2) - 74; eae6: 4d 4f mov.b r15, r13 CC1100_SPI_STROBE(CC1100_SFRX); //flush the buffer CC1100_SPI_STROBE(CC1100_SIDLE); //return to IDLE state return i; //i = real length eae8: c2 43 0e 02 mov.b #0, &0x020e ;r3 As==00 } eaec: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 /** eaf0: e2 b2 18 00 bit.b #4, &0x0018 ;r2 As==10 eaf4: fd 23 jnz $-4 ;abs 0xeaf0 Transmit a string of bytes. */ eaf6: f2 d0 0e 00 bis.b #14, &0x001b ;#0x000e eafa: 1b 00 void TX_STRING(unsigned char *txstring, unsigned char length) { eafc: c2 4d 77 00 mov.b r13, &0x0077 unsigned char i,pktlen = CC1100_SPI_RDREG(CC1100_PKTLEN); eb00: d2 c3 03 00 bic.b #1, &0x0003 ;r3 As==01 eb04: d2 b3 03 00 bit.b #1, &0x0003 ;r3 As==01 eb08: fd 27 jz $-4 ;abs 0xeb04 do{ eb0a: d2 42 76 00 mov.b &0x0076,&0x020e eb0e: 0e 02 CC1100_SPI_STROBE(CC1100_SIDLE);//Idle CC1100_SPI_STROBE(CC1100_SNOP) ; //wait for Idle eb10: c2 4e 77 00 mov.b r14, &0x0077 }while((status & CC1100_STAT_ADDR) != CC1100_STAT_IDLE); //wait for idle eb14: d2 c3 03 00 bic.b #1, &0x0003 ;r3 As==01 eb18: d2 b3 03 00 bit.b #1, &0x0003 ;r3 As==01 eb1c: fd 27 jz $-4 ;abs 0xeb18 /* eb1e: 5f 42 76 00 mov.b &0x0076,r15 for(i=0; i<=length; i++) { eb22: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 if(i < length) eb26: f2 f0 f1 ff and.b #-15, &0x001b ;#0xfff1 eb2a: 1b 00 CC1100_SPI_WRREG(CC1100_TXFIFO, txstring[i]);//Write data to FIFO eb2c: 30 41 ret 0000eb2e : }*/ if(length > pktlen) //text string is too long for fixed packet length mode length = pktlen; if (length == pktlen) CC1100_SPI_BURST_WRREG(CC1100_TXFIFO_BURST, txstring, length); eb2e: 4e 4f mov.b r15, r14 else if (length < pktlen) eb30: c2 43 0e 02 mov.b #0, &0x020e ;r3 As==00 { eb34: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 /*for(i=0; i: do { CC1100_SPI_STROBE(CC1100_SNOP) ; //(wait for 15, idle)read status byte.... if(status == 31) //fast RX mode yay break; }while((status & CC1100_STAT_ADDR) != CC1100_STAT_IDLE); //(15)31 for return to TX on complete, see MCSM1 eb64: 4c 4f mov.b r15, r12 } void init_UART_SPI() eb66: c2 43 0e 02 mov.b #0, &0x020e ;r3 As==00 { eb6a: d2 c3 19 00 bic.b #1, &0x0019 ;r3 As==01 P3SEL &= ~UART0_232_MODULES; //this will bring the clock edge high U0CTL |= SWRST; // disable the state machine eb6e: e2 b2 18 00 bit.b #4, &0x0018 ;r2 As==10 eb72: fd 23 jnz $-4 ;abs 0xeb6e ME2 &= ~UTXE0; //disable UART ME2 |= USPIE0; //enable SPI eb74: f2 d0 0e 00 bis.b #14, &0x001b ;#0x000e eb78: 1b 00 U0CTL = CHAR | SYNC | MM | SWRST; eb7a: d2 c3 03 00 bic.b #1, &0x0003 ;r3 As==01 U0TCTL = CKPH | STC | SSEL_3; eb7e: c2 4c 77 00 mov.b r12, &0x0077 eb82: d2 b3 03 00 bit.b #1, &0x0003 ;r3 As==01 eb86: fd 27 jz $-4 ;abs 0xeb82 U0BR0 = 2; //divide by 5 = 1Mhz eb88: d2 42 76 00 mov.b &0x0076,&0x020e eb8c: 0e 02 U0BR1 = 0; U0MCTL = 0; eb8e: 0c 43 clr r12 eb90: 8d 11 sxt r13 eb92: 0c 9d cmp r13, r12 eb94: 0e 2c jc $+30 ;abs 0xebb2 U0CTL &= ~SWRST; // Initialize USART state machine } eb96: d2 c3 03 00 bic.b #1, &0x0003 ;r3 As==01 eb9a: 0f 4e mov r14, r15 eb9c: 0f 5c add r12, r15 eb9e: e2 4f 77 00 mov.b @r15, &0x0077 void init_UART_232() eba2: d2 b3 03 00 bit.b #1, &0x0003 ;r3 As==01 eba6: fd 27 jz $-4 ;abs 0xeba2 { eba8: 5f 42 76 00 mov.b &0x0076,r15 U0CTL = CHAR | SYNC | MM | SWRST; U0TCTL = CKPH | STC | SSEL_3; U0BR0 = 2; //divide by 5 = 1Mhz U0BR1 = 0; U0MCTL = 0; ebac: 1c 53 inc r12 ebae: 0c 9d cmp r13, r12 ebb0: f2 2b jnc $-26 ;abs 0xeb96 void init_UART_232() { P3SEL |= UART0_232_MODULES; //this will bring the clock edge high U0CTL |= SWRST; // disable the state machine ME2 &= ~USPIE0; //disable SPI ebb2: d2 d3 19 00 bis.b #1, &0x0019 ;r3 As==01 ME2 |= UTXE0; //enable UART ebb6: f2 f0 f1 ff and.b #-15, &0x001b ;#0xfff1 ebba: 1b 00 ebbc: 30 41 ret 0000ebbe : ebbe: 0b 12 push r11 ebc0: 0a 12 push r10 ebc2: 3f 40 06 00 mov #6, r15 ;#0x0006 ebc6: 0f 51 add r1, r15 ebc8: 2a 4f mov @r15, r10 ebca: 1b 4f 02 00 mov 2(r15), r11 ;0x0002(r15) ebce: 1e 4f 04 00 mov 4(r15), r14 ;0x0004(r15) ebd2: 3f 50 06 00 add #6, r15 ;#0x0006 ebd6: 0c 4f mov r15, r12 ebd8: 0d 4e mov r14, r13 ebda: 0e 4b mov r11, r14 ebdc: 0f 4a mov r10, r15 ebde: b0 12 08 ec call #0xec08 ebe2: 3a 41 pop r10 ebe4: 3b 41 pop r11 ebe6: 30 41 ret 0000ebe8 : ebe8: 0e 4f mov r15, r14 ebea: a2 93 06 02 cmp #2, &0x0206 ;r3 As==10 ebee: 0a 28 jnc $+22 ;abs 0xec04 ebf0: 1f 42 04 02 mov &0x0204,r15 ebf4: cf 4e 00 00 mov.b r14, 0(r15) ;0x0000(r15) ebf8: 92 53 04 02 inc &0x0204 ebfc: b2 53 06 02 add #-1, &0x0206 ;r3 As==11 ec00: 4f 4e mov.b r14, r15 ec02: 30 41 ret ec04: 3f 43 mov #-1, r15 ;r3 As==11 ec06: 30 41 ret 0000ec08 : ec08: 0b 12 push r11 ec0a: 0a 12 push r10 ec0c: 0b 4f mov r15, r11 ec0e: 0a 4d mov r13, r10 ec10: 82 4b 04 02 mov r11, &0x0204 ec14: 82 4e 06 02 mov r14, &0x0206 ec18: 0d 4c mov r12, r13 ec1a: 0e 4a mov r10, r14 ec1c: 3f 40 e8 eb mov #-5144, r15 ;#0xebe8 ec20: b0 12 94 ec call #0xec94 ec24: 0b 5f add r15, r11 ec26: cb 43 00 00 mov.b #0, 0(r11) ;r3 As==00, 0x0000(r11) ec2a: 3a 41 pop r10 ec2c: 3b 41 pop r11 ec2e: 30 41 ret 0000ec30 : ec30: 0b 12 push r11 ec32: 0a 12 push r10 ec34: 0a 4f mov r15, r10 ec36: 0b 4e mov r14, r11 ec38: 0e 93 tst r14 ec3a: 02 20 jnz $+6 ;abs 0xec40 ec3c: 1f 43 mov #1, r15 ;r3 As==01 ec3e: 0d 3c jmp $+28 ;abs 0xec5a ec40: 6f 4a mov.b @r10, r15 ec42: 8f 11 sxt r15 ec44: 1a 53 inc r10 ec46: 92 12 08 02 call &0x0208 ec4a: 0f 93 tst r15 ec4c: 05 38 jl $+12 ;abs 0xec58 ec4e: 92 53 02 02 inc &0x0202 ec52: 3b 53 add #-1, r11 ;r3 As==11 ec54: f5 23 jnz $-20 ;abs 0xec40 ec56: f2 3f jmp $-26 ;abs 0xec3c ec58: 3f 43 mov #-1, r15 ;r3 As==11 ec5a: 3a 41 pop r10 ec5c: 3b 41 pop r11 ec5e: 30 41 ret 0000ec60 <__write_pad>: ec60: 0b 12 push r11 ec62: 0a 12 push r10 ec64: 09 12 push r9 ec66: 49 4f mov.b r15, r9 ec68: 4b 4e mov.b r14, r11 ec6a: 5e 93 cmp.b #1, r14 ;r3 As==01 ec6c: 0c 38 jl $+26 ;abs 0xec86 ec6e: 4a 4f mov.b r15, r10 ec70: 8a 11 sxt r10 ec72: 0f 4a mov r10, r15 ec74: 92 12 08 02 call &0x0208 ec78: 0f 93 tst r15 ec7a: 07 38 jl $+16 ;abs 0xec8a ec7c: 92 53 02 02 inc &0x0202 ec80: 7b 53 add.b #-1, r11 ;r3 As==11 ec82: 5b 93 cmp.b #1, r11 ;r3 As==01 ec84: f6 37 jge $-18 ;abs 0xec72 ec86: 4f 49 mov.b r9, r15 ec88: 01 3c jmp $+4 ;abs 0xec8c ec8a: 3f 43 mov #-1, r15 ;r3 As==11 ec8c: 39 41 pop r9 ec8e: 3a 41 pop r10 ec90: 3b 41 pop r11 ec92: 30 41 ret 0000ec94 : ec94: 0b 12 push r11 ec96: 0a 12 push r10 ec98: 09 12 push r9 ec9a: 08 12 push r8 ec9c: 07 12 push r7 ec9e: 06 12 push r6 eca0: 05 12 push r5 eca2: 04 12 push r4 eca4: 31 80 3c 00 sub #60, r1 ;#0x003c eca8: 05 4d mov r13, r5 ecaa: 81 43 30 00 mov #0, 48(r1) ;r3 As==00, 0x0030(r1) ecae: 81 43 32 00 mov #0, 50(r1) ;r3 As==00, 0x0032(r1) ecb2: 82 43 02 02 mov #0, &0x0202 ;r3 As==00 ecb6: 82 4f 08 02 mov r15, &0x0208 ecba: 06 4e mov r14, r6 ecbc: 0f 46 mov r6, r15 ecbe: 67 46 mov.b @r6, r7 ecc0: 47 93 tst.b r7 ecc2: 0a 24 jz $+22 ;abs 0xecd8 ecc4: 77 90 25 00 cmp.b #37, r7 ;#0x0025 ecc8: 07 24 jz $+16 ;abs 0xecd8 ecca: 16 53 inc r6 eccc: 67 46 mov.b @r6, r7 ecce: 47 93 tst.b r7 ecd0: 03 24 jz $+8 ;abs 0xecd8 ecd2: 77 90 25 00 cmp.b #37, r7 ;#0x0025 ecd6: f9 23 jnz $-12 ;abs 0xecca ecd8: 0d 46 mov r6, r13 ecda: 0d 8f sub r15, r13 ecdc: 02 24 jz $+6 ;abs 0xece2 ecde: 30 40 22 f2 br #0xf222 ece2: 47 93 tst.b r7 ece4: 02 20 jnz $+6 ;abs 0xecea ece6: 30 40 30 f2 br #0xf230 ecea: 16 53 inc r6 ecec: c1 43 2e 00 mov.b #0, 46(r1) ;r3 As==00, 0x002e(r1) ecf0: c1 43 35 00 mov.b #0, 53(r1) ;r3 As==00, 0x0035(r1) ecf4: c1 43 2f 00 mov.b #0, 47(r1) ;r3 As==00, 0x002f(r1) ecf8: 7b 43 mov.b #-1, r11 ;r3 As==11 ecfa: c1 43 2a 00 mov.b #0, 42(r1) ;r3 As==00, 0x002a(r1) ecfe: 67 46 mov.b @r6, r7 ed00: 16 53 inc r6 ed02: 77 90 75 00 cmp.b #117, r7 ;#0x0075 ed06: 02 20 jnz $+6 ;abs 0xed0c ed08: 30 40 fc f1 br #0xf1fc ed0c: 4f 47 mov.b r7, r15 ed0e: 7f d0 20 00 bis.b #32, r15 ;#0x0020 ed12: 7f 90 78 00 cmp.b #120, r15 ;#0x0078 ed16: 02 20 jnz $+6 ;abs 0xed1c ed18: 30 40 fc f1 br #0xf1fc ed1c: 77 90 20 00 cmp.b #32, r7 ;#0x0020 ed20: 02 20 jnz $+6 ;abs 0xed26 ed22: 30 40 e8 f1 br #0xf1e8 ed26: 77 90 23 00 cmp.b #35, r7 ;#0x0023 ed2a: 02 20 jnz $+6 ;abs 0xed30 ed2c: 30 40 e0 f1 br #0xf1e0 ed30: 77 90 2a 00 cmp.b #42, r7 ;#0x002a ed34: 02 20 jnz $+6 ;abs 0xed3a ed36: 30 40 c4 f1 br #0xf1c4 ed3a: 77 90 2d 00 cmp.b #45, r7 ;#0x002d ed3e: 02 20 jnz $+6 ;abs 0xed44 ed40: 30 40 b4 f1 br #0xf1b4 ed44: 77 90 2b 00 cmp.b #43, r7 ;#0x002b ed48: 02 20 jnz $+6 ;abs 0xed4e ed4a: 30 40 aa f1 br #0xf1aa ed4e: 77 90 2e 00 cmp.b #46, r7 ;#0x002e ed52: 02 20 jnz $+6 ;abs 0xed58 ed54: 30 40 44 f1 br #0xf144 ed58: 77 90 30 00 cmp.b #48, r7 ;#0x0030 ed5c: 02 20 jnz $+6 ;abs 0xed62 ed5e: 30 40 2e f1 br #0xf12e ed62: 4f 47 mov.b r7, r15 ed64: 7f 50 cf ff add.b #-49, r15 ;#0xffcf ed68: 7f 90 09 00 cmp.b #9, r15 ;#0x0009 ed6c: 1a 2c jc $+54 ;abs 0xeda2 ed6e: 0d 43 clr r13 ed70: 0f 4d mov r13, r15 ed72: 0f 5f rla r15 ed74: 0f 5f rla r15 ed76: 0e 4d mov r13, r14 ed78: 0e 5e rla r14 ed7a: 0d 4f mov r15, r13 ed7c: 0d 5e add r14, r13 ed7e: 0d 5e add r14, r13 ed80: 0d 5e add r14, r13 ed82: 4f 47 mov.b r7, r15 ed84: 8f 11 sxt r15 ed86: 0d 5f add r15, r13 ed88: 3d 50 d0 ff add #-48, r13 ;#0xffd0 ed8c: 67 46 mov.b @r6, r7 ed8e: 16 53 inc r6 ed90: 4f 47 mov.b r7, r15 ed92: 7f 50 d0 ff add.b #-48, r15 ;#0xffd0 ed96: 7f 90 0a 00 cmp.b #10, r15 ;#0x000a ed9a: ea 2b jnc $-42 ;abs 0xed70 ed9c: c1 4d 2f 00 mov.b r13, 47(r1) ;0x002f(r1) eda0: b0 3f jmp $-158 ;abs 0xed02 eda2: 77 90 68 00 cmp.b #104, r7 ;#0x0068 eda6: bf 25 jz $+896 ;abs 0xf126 eda8: 77 90 6c 00 cmp.b #108, r7 ;#0x006c edac: 03 20 jnz $+8 ;abs 0xedb4 edae: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) edb2: a5 3f jmp $-180 ;abs 0xecfe edb4: 77 90 63 00 cmp.b #99, r7 ;#0x0063 edb8: af 25 jz $+864 ;abs 0xf118 edba: 77 90 44 00 cmp.b #68, r7 ;#0x0044 edbe: a9 25 jz $+852 ;abs 0xf112 edc0: 77 90 64 00 cmp.b #100, r7 ;#0x0064 edc4: 7a 25 jz $+758 ;abs 0xf0ba edc6: 77 90 69 00 cmp.b #105, r7 ;#0x0069 edca: 77 25 jz $+752 ;abs 0xf0ba edcc: 77 90 4f 00 cmp.b #79, r7 ;#0x004f edd0: 71 25 jz $+740 ;abs 0xf0b4 edd2: 77 90 6f 00 cmp.b #111, r7 ;#0x006f edd6: 6b 25 jz $+728 ;abs 0xf0ae edd8: 77 90 70 00 cmp.b #112, r7 ;#0x0070 eddc: 59 25 jz $+692 ;abs 0xf090 edde: 77 90 73 00 cmp.b #115, r7 ;#0x0073 ede2: 1a 25 jz $+566 ;abs 0xf018 ede4: 77 90 55 00 cmp.b #85, r7 ;#0x0055 ede8: 14 25 jz $+554 ;abs 0xf012 edea: 77 90 75 00 cmp.b #117, r7 ;#0x0075 edee: 0d 25 jz $+540 ;abs 0xf00a edf0: 77 90 58 00 cmp.b #88, r7 ;#0x0058 edf4: 8a 24 jz $+278 ;abs 0xef0a edf6: 77 90 78 00 cmp.b #120, r7 ;#0x0078 edfa: 87 24 jz $+272 ;abs 0xef0a edfc: 47 93 tst.b r7 edfe: 02 20 jnz $+6 ;abs 0xee04 ee00: 30 40 30 f2 br #0xf230 ee04: 81 41 2c 00 mov r1, 44(r1) ;0x002c(r1) ee08: c1 47 00 00 mov.b r7, 0(r1) ;0x0000(r1) ee0c: 59 43 mov.b #1, r9 ;r3 As==01 ee0e: c1 43 2a 00 mov.b #0, 42(r1) ;r3 As==00, 0x002a(r1) ee12: 4b 49 mov.b r9, r11 ee14: 5a 41 35 00 mov.b 53(r1), r10 ;0x0035(r1) ee18: 4a 89 sub.b r9, r10 ee1a: 75 30 jn $+236 ;abs 0xef06 ee1c: 5e 41 2a 00 mov.b 42(r1), r14 ;0x002a(r1) ee20: 4e 93 tst.b r14 ee22: 6b 24 jz $+216 ;abs 0xeefa ee24: 5b 53 inc.b r11 ee26: 4b 5a add.b r10, r11 ee28: 58 41 2e 00 mov.b 46(r1), r8 ;0x002e(r1) ee2c: 78 f0 30 00 and.b #48, r8 ;#0x0030 ee30: 13 20 jnz $+40 ;abs 0xee58 ee32: 5d 41 2f 00 mov.b 47(r1), r13 ;0x002f(r1) ee36: 8d 11 sxt r13 ee38: 4f 4b mov.b r11, r15 ee3a: 8f 11 sxt r15 ee3c: 0d 8f sub r15, r13 ee3e: 1d 93 cmp #1, r13 ;r3 As==01 ee40: 0b 38 jl $+24 ;abs 0xee58 ee42: 4e 4d mov.b r13, r14 ee44: 7f 40 20 00 mov.b #32, r15 ;#0x0020 ee48: b0 12 60 ec call #0xec60 ee4c: 0f 93 tst r15 ee4e: 02 34 jge $+6 ;abs 0xee54 ee50: 30 40 30 f2 br #0xf230 ee54: 5e 41 2a 00 mov.b 42(r1), r14 ;0x002a(r1) ee58: 4e 93 tst.b r14 ee5a: 4a 20 jnz $+150 ;abs 0xeef0 ee5c: f1 b0 40 00 bit.b #64, 46(r1) ;#0x0040, 0x002e(r1) ee60: 2e 00 ee62: 0f 24 jz $+32 ;abs 0xee82 ee64: f1 40 30 00 mov.b #48, 40(r1) ;#0x0030, 0x0028(r1) ee68: 28 00 ee6a: c1 47 29 00 mov.b r7, 41(r1) ;0x0029(r1) ee6e: 2e 43 mov #2, r14 ;r3 As==10 ee70: 0f 41 mov r1, r15 ee72: 3f 50 28 00 add #40, r15 ;#0x0028 ee76: b0 12 30 ec call #0xec30 ee7a: 0f 93 tst r15 ee7c: 02 34 jge $+6 ;abs 0xee82 ee7e: 30 40 30 f2 br #0xf230 ee82: 78 90 20 00 cmp.b #32, r8 ;#0x0020 ee86: 24 24 jz $+74 ;abs 0xeed0 ee88: 4e 4a mov.b r10, r14 ee8a: 7f 40 30 00 mov.b #48, r15 ;#0x0030 ee8e: b0 12 60 ec call #0xec60 ee92: 0f 93 tst r15 ee94: cd 39 jl $+924 ;abs 0xf230 ee96: 4f 49 mov.b r9, r15 ee98: 8f 11 sxt r15 ee9a: 0e 4f mov r15, r14 ee9c: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) eea0: b0 12 30 ec call #0xec30 eea4: 0f 93 tst r15 eea6: c4 39 jl $+906 ;abs 0xf230 eea8: f1 b0 10 00 bit.b #16, 46(r1) ;#0x0010, 0x002e(r1) eeac: 2e 00 eeae: 06 27 jz $-498 ;abs 0xecbc eeb0: 5d 41 2f 00 mov.b 47(r1), r13 ;0x002f(r1) eeb4: 8d 11 sxt r13 eeb6: 4f 4b mov.b r11, r15 eeb8: 8f 11 sxt r15 eeba: 0d 8f sub r15, r13 eebc: 1d 93 cmp #1, r13 ;r3 As==01 eebe: fe 3a jl $-514 ;abs 0xecbc eec0: 4e 4d mov.b r13, r14 eec2: 7f 40 20 00 mov.b #32, r15 ;#0x0020 eec6: b0 12 60 ec call #0xec60 eeca: 0f 93 tst r15 eecc: f7 36 jge $-528 ;abs 0xecbc eece: b0 3d jmp $+866 ;abs 0xf230 eed0: 5d 41 2f 00 mov.b 47(r1), r13 ;0x002f(r1) eed4: 8d 11 sxt r13 eed6: 4f 4b mov.b r11, r15 eed8: 8f 11 sxt r15 eeda: 0d 8f sub r15, r13 eedc: 1d 93 cmp #1, r13 ;r3 As==01 eede: d4 3b jl $-86 ;abs 0xee88 eee0: 4e 4d mov.b r13, r14 eee2: 7f 40 30 00 mov.b #48, r15 ;#0x0030 eee6: b0 12 60 ec call #0xec60 eeea: 0f 93 tst r15 eeec: cd 37 jge $-100 ;abs 0xee88 eeee: a0 3d jmp $+834 ;abs 0xf230 eef0: 1e 43 mov #1, r14 ;r3 As==01 eef2: 0f 41 mov r1, r15 eef4: 3f 50 2a 00 add #42, r15 ;#0x002a eef8: be 3f jmp $-130 ;abs 0xee76 eefa: f1 b0 40 00 bit.b #64, 46(r1) ;#0x0040, 0x002e(r1) eefe: 2e 00 ef00: 92 27 jz $-218 ;abs 0xee26 ef02: 6b 53 incd.b r11 ef04: 90 3f jmp $-222 ;abs 0xee26 ef06: 4a 43 clr.b r10 ef08: 89 3f jmp $-236 ;abs 0xee1c ef0a: f1 40 10 00 mov.b #16, 52(r1) ;#0x0010, 0x0034(r1) ef0e: 34 00 ef10: f1 b2 2e 00 bit.b #8, 46(r1) ;r2 As==11, 0x002e(r1) ef14: 09 24 jz $+20 ;abs 0xef28 ef16: 81 93 30 00 tst 48(r1) ;0x0030(r1) ef1a: 03 20 jnz $+8 ;abs 0xef22 ef1c: 81 93 32 00 tst 50(r1) ;0x0032(r1) ef20: 03 24 jz $+8 ;abs 0xef28 ef22: f1 d0 40 00 bis.b #64, 46(r1) ;#0x0040, 0x002e(r1) ef26: 2e 00 ef28: c1 43 2a 00 mov.b #0, 42(r1) ;r3 As==00, 0x002a(r1) ef2c: c1 4b 35 00 mov.b r11, 53(r1) ;0x0035(r1) ef30: 4b 93 tst.b r11 ef32: 03 38 jl $+8 ;abs 0xef3a ef34: f1 f0 df ff and.b #-33, 46(r1) ;#0xffdf, 0x002e(r1) ef38: 2e 00 ef3a: 0f 41 mov r1, r15 ef3c: 3f 50 28 00 add #40, r15 ;#0x0028 ef40: 81 4f 2c 00 mov r15, 44(r1) ;0x002c(r1) ef44: 81 93 30 00 tst 48(r1) ;0x0030(r1) ef48: 06 20 jnz $+14 ;abs 0xef56 ef4a: 81 93 32 00 tst 50(r1) ;0x0032(r1) ef4e: 03 20 jnz $+8 ;abs 0xef56 ef50: c1 93 35 00 tst.b 53(r1) ;0x0035(r1) ef54: 3e 24 jz $+126 ;abs 0xefd2 ef56: d1 41 34 00 mov.b 52(r1), 56(r1) ;0x0034(r1), 0x0038(r1) ef5a: 38 00 ef5c: c1 43 39 00 mov.b #0, 57(r1) ;r3 As==00, 0x0039(r1) ef60: 81 43 3a 00 mov #0, 58(r1) ;r3 As==00, 0x003a(r1) ef64: c1 43 36 00 mov.b #0, 54(r1) ;r3 As==00, 0x0036(r1) ef68: 1e 41 30 00 mov 48(r1), r14 ;0x0030(r1) ef6c: 1f 41 32 00 mov 50(r1), r15 ;0x0032(r1) ef70: 1e 81 38 00 sub 56(r1), r14 ;0x0038(r1) ef74: 1f 71 3a 00 subc 58(r1), r15 ;0x003a(r1) ef78: 02 28 jnc $+6 ;abs 0xef7e ef7a: d1 43 36 00 mov.b #1, 54(r1) ;r3 As==01, 0x0036(r1) ef7e: 1c 41 30 00 mov 48(r1), r12 ;0x0030(r1) ef82: 1d 41 32 00 mov 50(r1), r13 ;0x0032(r1) ef86: 1a 41 38 00 mov 56(r1), r10 ;0x0038(r1) ef8a: 1b 41 3a 00 mov 58(r1), r11 ;0x003a(r1) ef8e: b0 12 32 f3 call #0xf332 ef92: 44 4e mov.b r14, r4 ef94: 7e 90 0a 00 cmp.b #10, r14 ;#0x000a ef98: 30 2c jc $+98 ;abs 0xeffa ef9a: 74 50 30 00 add.b #48, r4 ;#0x0030 ef9e: b1 53 2c 00 add #-1, 44(r1) ;r3 As==11, 0x002c(r1) efa2: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) efa6: cf 44 00 00 mov.b r4, 0(r15) ;0x0000(r15) efaa: 1c 41 30 00 mov 48(r1), r12 ;0x0030(r1) efae: 1d 41 32 00 mov 50(r1), r13 ;0x0032(r1) efb2: 1a 41 38 00 mov 56(r1), r10 ;0x0038(r1) efb6: 1b 41 3a 00 mov 58(r1), r11 ;0x003a(r1) efba: b0 12 32 f3 call #0xf332 efbe: 81 4c 30 00 mov r12, 48(r1) ;0x0030(r1) efc2: 81 4d 32 00 mov r13, 50(r1) ;0x0032(r1) efc6: c1 93 36 00 tst.b 54(r1) ;0x0036(r1) efca: cc 23 jnz $-102 ;abs 0xef64 efcc: f1 92 34 00 cmp.b #8, 52(r1) ;r2 As==11, 0x0034(r1) efd0: 06 24 jz $+14 ;abs 0xefde efd2: 49 41 mov.b r1, r9 efd4: 59 81 2c 00 sub.b 44(r1), r9 ;0x002c(r1) efd8: 79 50 28 00 add.b #40, r9 ;#0x0028 efdc: 1a 3f jmp $-458 ;abs 0xee12 efde: f1 b2 2e 00 bit.b #8, 46(r1) ;r2 As==11, 0x002e(r1) efe2: f7 27 jz $-16 ;abs 0xefd2 efe4: 74 90 30 00 cmp.b #48, r4 ;#0x0030 efe8: f4 27 jz $-22 ;abs 0xefd2 efea: b1 53 2c 00 add #-1, 44(r1) ;r3 As==11, 0x002c(r1) efee: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) eff2: ff 40 30 00 mov.b #48, 0(r15) ;#0x0030, 0x0000(r15) eff6: 00 00 eff8: ec 3f jmp $-38 ;abs 0xefd2 effa: 74 50 57 00 add.b #87, r4 ;#0x0057 effe: 77 90 58 00 cmp.b #88, r7 ;#0x0058 f002: cd 23 jnz $-100 ;abs 0xef9e f004: 74 f0 df ff and.b #-33, r4 ;#0xffdf f008: ca 3f jmp $-106 ;abs 0xef9e f00a: f1 40 0a 00 mov.b #10, 52(r1) ;#0x000a, 0x0034(r1) f00e: 34 00 f010: 8b 3f jmp $-232 ;abs 0xef28 f012: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) f016: f9 3f jmp $-12 ;abs 0xf00a f018: 0f 45 mov r5, r15 f01a: 25 53 incd r5 f01c: a1 4f 2c 00 mov @r15, 44(r1) ;0x002c(r1) f020: 81 93 2c 00 tst 44(r1) ;0x002c(r1) f024: 1e 24 jz $+62 ;abs 0xf062 f026: 4b 93 tst.b r11 f028: 11 38 jl $+36 ;abs 0xf04c f02a: 4f 4b mov.b r11, r15 f02c: 8f 11 sxt r15 f02e: 0d 4f mov r15, r13 f030: 0e 43 clr r14 f032: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) f036: b0 12 4a f2 call #0xf24a f03a: 0f 93 tst r15 f03c: 05 24 jz $+12 ;abs 0xf048 f03e: 49 4f mov.b r15, r9 f040: 59 81 2c 00 sub.b 44(r1), r9 ;0x002c(r1) f044: 4b 99 cmp.b r9, r11 f046: e3 36 jge $-568 ;abs 0xee0e f048: 49 4b mov.b r11, r9 f04a: e1 3e jmp $-572 ;abs 0xee0e f04c: 1f 41 2c 00 mov 44(r1), r15 ;0x002c(r1) f050: 1f 83 dec r15 f052: 1f 53 inc r15 f054: cf 93 00 00 tst.b 0(r15) ;0x0000(r15) f058: fc 23 jnz $-6 ;abs 0xf052 f05a: 49 4f mov.b r15, r9 f05c: 59 81 2c 00 sub.b 44(r1), r9 ;0x002c(r1) f060: d6 3e jmp $-594 ;abs 0xee0e f062: 81 41 2c 00 mov r1, 44(r1) ;0x002c(r1) f066: f1 40 28 00 mov.b #40, 0(r1) ;#0x0028, 0x0000(r1) f06a: 00 00 f06c: f1 40 6e 00 mov.b #110, 1(r1) ;#0x006e, 0x0001(r1) f070: 01 00 f072: f1 40 75 00 mov.b #117, 2(r1) ;#0x0075, 0x0002(r1) f076: 02 00 f078: f1 40 6c 00 mov.b #108, 3(r1) ;#0x006c, 0x0003(r1) f07c: 03 00 f07e: f1 40 6c 00 mov.b #108, 4(r1) ;#0x006c, 0x0004(r1) f082: 04 00 f084: f1 40 29 00 mov.b #41, 5(r1) ;#0x0029, 0x0005(r1) f088: 05 00 f08a: c1 43 06 00 mov.b #0, 6(r1) ;r3 As==00, 0x0006(r1) f08e: cb 3f jmp $-104 ;abs 0xf026 f090: 0f 45 mov r5, r15 f092: 25 53 incd r5 f094: a1 4f 30 00 mov @r15, 48(r1) ;0x0030(r1) f098: 81 43 32 00 mov #0, 50(r1) ;r3 As==00, 0x0032(r1) f09c: f1 40 10 00 mov.b #16, 52(r1) ;#0x0010, 0x0034(r1) f0a0: 34 00 f0a2: f1 d0 40 00 bis.b #64, 46(r1) ;#0x0040, 0x002e(r1) f0a6: 2e 00 f0a8: 77 40 78 00 mov.b #120, r7 ;#0x0078 f0ac: 3d 3f jmp $-388 ;abs 0xef28 f0ae: f1 42 34 00 mov.b #8, 52(r1) ;r2 As==11, 0x0034(r1) f0b2: 3a 3f jmp $-394 ;abs 0xef28 f0b4: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) f0b8: fa 3f jmp $-10 ;abs 0xf0ae f0ba: d1 b3 2e 00 bit.b #1, 46(r1) ;r3 As==01, 0x002e(r1) f0be: 19 24 jz $+52 ;abs 0xf0f2 f0c0: 0f 45 mov r5, r15 f0c2: 25 52 add #4, r5 ;r2 As==10 f0c4: b1 4f 30 00 mov @r15+, 48(r1) ;0x0030(r1) f0c8: b1 4f 32 00 mov @r15+, 50(r1) ;0x0032(r1) f0cc: 81 93 32 00 tst 50(r1) ;0x0032(r1) f0d0: 04 38 jl $+10 ;abs 0xf0da f0d2: f1 40 0a 00 mov.b #10, 52(r1) ;#0x000a, 0x0034(r1) f0d6: 34 00 f0d8: 29 3f jmp $-428 ;abs 0xef2c f0da: b1 e3 30 00 xor #-1, 48(r1) ;r3 As==11, 0x0030(r1) f0de: b1 e3 32 00 xor #-1, 50(r1) ;r3 As==11, 0x0032(r1) f0e2: 91 53 30 00 inc 48(r1) ;0x0030(r1) f0e6: 81 63 32 00 adc 50(r1) ;0x0032(r1) f0ea: f1 40 2d 00 mov.b #45, 42(r1) ;#0x002d, 0x002a(r1) f0ee: 2a 00 f0f0: f0 3f jmp $-30 ;abs 0xf0d2 f0f2: 0f 45 mov r5, r15 f0f4: 25 53 incd r5 f0f6: a1 4f 30 00 mov @r15, 48(r1) ;0x0030(r1) f0fa: 91 41 30 00 mov 48(r1), 50(r1) ;0x0030(r1), 0x0032(r1) f0fe: 32 00 f100: 91 51 32 00 rla 50(r1) ;0x0032(r1) f104: 32 00 f106: 91 71 32 00 subc 50(r1), 50(r1) ;0x0032(r1), 0x0032(r1) f10a: 32 00 f10c: b1 e3 32 00 xor #-1, 50(r1) ;r3 As==11, 0x0032(r1) f110: dd 3f jmp $-68 ;abs 0xf0cc f112: d1 d3 2e 00 bis.b #1, 46(r1) ;r3 As==01, 0x002e(r1) f116: d1 3f jmp $-92 ;abs 0xf0ba f118: 81 41 2c 00 mov r1, 44(r1) ;0x002c(r1) f11c: 0f 45 mov r5, r15 f11e: 25 53 incd r5 f120: e1 4f 00 00 mov.b @r15, 0(r1) ;0x0000(r1) f124: 73 3e jmp $-792 ;abs 0xee0c f126: e1 d2 2e 00 bis.b #4, 46(r1) ;r2 As==10, 0x002e(r1) f12a: 30 40 fe ec br #0xecfe f12e: f1 b0 10 00 bit.b #16, 46(r1) ;#0x0010, 0x002e(r1) f132: 2e 00 f134: 02 24 jz $+6 ;abs 0xf13a f136: 30 40 fe ec br #0xecfe f13a: f1 d0 20 00 bis.b #32, 46(r1) ;#0x0020, 0x002e(r1) f13e: 2e 00 f140: 30 40 fe ec br #0xecfe f144: 67 46 mov.b @r6, r7 f146: 16 53 inc r6 f148: 77 90 2a 00 cmp.b #42, r7 ;#0x002a f14c: 24 24 jz $+74 ;abs 0xf196 f14e: 0d 43 clr r13 f150: 4f 47 mov.b r7, r15 f152: 7f 50 d0 ff add.b #-48, r15 ;#0xffd0 f156: 7f 90 0a 00 cmp.b #10, r15 ;#0x000a f15a: 16 2c jc $+46 ;abs 0xf188 f15c: 0f 4d mov r13, r15 f15e: 0f 5f rla r15 f160: 0f 5f rla r15 f162: 0e 4d mov r13, r14 f164: 0e 5e rla r14 f166: 0d 4f mov r15, r13 f168: 0d 5e add r14, r13 f16a: 0d 5e add r14, r13 f16c: 0d 5e add r14, r13 f16e: 4f 47 mov.b r7, r15 f170: 8f 11 sxt r15 f172: 0d 5f add r15, r13 f174: 3d 50 d0 ff add #-48, r13 ;#0xffd0 f178: 67 46 mov.b @r6, r7 f17a: 16 53 inc r6 f17c: 4f 47 mov.b r7, r15 f17e: 7f 50 d0 ff add.b #-48, r15 ;#0xffd0 f182: 7f 90 0a 00 cmp.b #10, r15 ;#0x000a f186: ea 2b jnc $-42 ;abs 0xf15c f188: 0f 4d mov r13, r15 f18a: 3d 93 cmp #-1, r13 ;r3 As==11 f18c: 01 34 jge $+4 ;abs 0xf190 f18e: 3f 43 mov #-1, r15 ;r3 As==11 f190: 4b 4f mov.b r15, r11 f192: 30 40 02 ed br #0xed02 f196: 0f 45 mov r5, r15 f198: 25 53 incd r5 f19a: 2d 4f mov @r15, r13 f19c: 0f 4d mov r13, r15 f19e: 3d 93 cmp #-1, r13 ;r3 As==11 f1a0: 01 34 jge $+4 ;abs 0xf1a4 f1a2: 3f 43 mov #-1, r15 ;r3 As==11 f1a4: 4b 4f mov.b r15, r11 f1a6: 30 40 fe ec br #0xecfe f1aa: f1 40 2b 00 mov.b #43, 42(r1) ;#0x002b, 0x002a(r1) f1ae: 2a 00 f1b0: 30 40 fe ec br #0xecfe f1b4: f1 d0 10 00 bis.b #16, 46(r1) ;#0x0010, 0x002e(r1) f1b8: 2e 00 f1ba: f1 f0 df ff and.b #-33, 46(r1) ;#0xffdf, 0x002e(r1) f1be: 2e 00 f1c0: 30 40 fe ec br #0xecfe f1c4: 0f 45 mov r5, r15 f1c6: 25 53 incd r5 f1c8: e1 4f 2f 00 mov.b @r15, 47(r1) ;0x002f(r1) f1cc: c1 93 2f 00 tst.b 47(r1) ;0x002f(r1) f1d0: 02 38 jl $+6 ;abs 0xf1d6 f1d2: 30 40 fe ec br #0xecfe f1d6: f1 e3 2f 00 xor.b #-1, 47(r1) ;r3 As==11, 0x002f(r1) f1da: d1 53 2f 00 inc.b 47(r1) ;0x002f(r1) f1de: ea 3f jmp $-42 ;abs 0xf1b4 f1e0: f1 d2 2e 00 bis.b #8, 46(r1) ;r2 As==11, 0x002e(r1) f1e4: 30 40 fe ec br #0xecfe f1e8: c1 93 2a 00 tst.b 42(r1) ;0x002a(r1) f1ec: 02 24 jz $+6 ;abs 0xf1f2 f1ee: 30 40 fe ec br #0xecfe f1f2: f1 40 20 00 mov.b #32, 42(r1) ;#0x0020, 0x002a(r1) f1f6: 2a 00 f1f8: 30 40 fe ec br #0xecfe f1fc: d1 b3 2e 00 bit.b #1, 46(r1) ;r3 As==01, 0x002e(r1) f200: 08 24 jz $+18 ;abs 0xf212 f202: 0f 45 mov r5, r15 f204: 25 52 add #4, r5 ;r2 As==10 f206: b1 4f 30 00 mov @r15+, 48(r1) ;0x0030(r1) f20a: b1 4f 32 00 mov @r15+, 50(r1) ;0x0032(r1) f20e: 30 40 1c ed br #0xed1c f212: 0f 45 mov r5, r15 f214: 25 53 incd r5 f216: a1 4f 30 00 mov @r15, 48(r1) ;0x0030(r1) f21a: 81 43 32 00 mov #0, 50(r1) ;r3 As==00, 0x0032(r1) f21e: 30 40 1c ed br #0xed1c f222: 0e 4d mov r13, r14 f224: b0 12 30 ec call #0xec30 f228: 0f 93 tst r15 f22a: 02 38 jl $+6 ;abs 0xf230 f22c: 30 40 e2 ec br #0xece2 f230: 1f 42 02 02 mov &0x0202,r15 f234: 31 50 3c 00 add #60, r1 ;#0x003c f238: 34 41 pop r4 f23a: 35 41 pop r5 f23c: 36 41 pop r6 f23e: 37 41 pop r7 f240: 38 41 pop r8 f242: 39 41 pop r9 f244: 3a 41 pop r10 f246: 3b 41 pop r11 f248: 30 41 ret 0000f24a : f24a: 0b 12 push r11 f24c: 0b 4f mov r15, r11 f24e: 4c 4e mov.b r14, r12 f250: 0d 93 tst r13 f252: 07 24 jz $+16 ;abs 0xf262 f254: 0e 4b mov r11, r14 f256: 6f 4e mov.b @r14, r15 f258: 1e 53 inc r14 f25a: 4f 9c cmp.b r12, r15 f25c: 04 24 jz $+10 ;abs 0xf266 f25e: 3d 53 add #-1, r13 ;r3 As==11 f260: fa 23 jnz $-10 ;abs 0xf256 f262: 0f 43 clr r15 f264: 02 3c jmp $+6 ;abs 0xf26a f266: 0f 4e mov r14, r15 f268: 3f 53 add #-1, r15 ;r3 As==11 f26a: 3b 41 pop r11 f26c: 30 41 ret 0000f26e : f26e: 0b 12 push r11 f270: 0b 4d mov r13, r11 f272: 0d 93 tst r13 f274: 0a 24 jz $+22 ;abs 0xf28a f276: 0c 4f mov r15, r12 f278: 0d 4e mov r14, r13 f27a: 6e 4d mov.b @r13, r14 f27c: 1d 53 inc r13 f27e: 6f 4c mov.b @r12, r15 f280: 1c 53 inc r12 f282: 4f 9e cmp.b r14, r15 f284: 04 20 jnz $+10 ;abs 0xf28e f286: 3b 53 add #-1, r11 ;r3 As==11 f288: f8 23 jnz $-14 ;abs 0xf27a f28a: 0c 43 clr r12 f28c: 05 3c jmp $+12 ;abs 0xf298 f28e: 5c 4c ff ff mov.b -1(r12),r12 ;0xffff(r12) f292: 5f 4d ff ff mov.b -1(r13),r15 ;0xffff(r13) f296: 0c 8f sub r15, r12 f298: 0f 4c mov r12, r15 f29a: 3b 41 pop r11 f29c: 30 41 ret 0000f29e : f29e: 0b 12 push r11 f2a0: 0a 12 push r10 f2a2: 09 12 push r9 f2a4: 08 12 push r8 f2a6: 0b 4f mov r15, r11 f2a8: 0a 4e mov r14, r10 f2aa: 69 4e mov.b @r14, r9 f2ac: 1a 53 inc r10 f2ae: 49 93 tst.b r9 f2b0: 15 24 jz $+44 ;abs 0xf2dc f2b2: 08 4a mov r10, r8 f2b4: 18 83 dec r8 f2b6: 18 53 inc r8 f2b8: c8 93 00 00 tst.b 0(r8) ;0x0000(r8) f2bc: fc 23 jnz $-6 ;abs 0xf2b6 f2be: 08 8a sub r10, r8 f2c0: 6f 4b mov.b @r11, r15 f2c2: 1b 53 inc r11 f2c4: 4f 93 tst.b r15 f2c6: 0c 24 jz $+26 ;abs 0xf2e0 f2c8: 4f 99 cmp.b r9, r15 f2ca: fa 23 jnz $-10 ;abs 0xf2c0 f2cc: 0d 48 mov r8, r13 f2ce: 0e 4a mov r10, r14 f2d0: 0f 4b mov r11, r15 f2d2: b0 12 ec f2 call #0xf2ec f2d6: 0f 93 tst r15 f2d8: f3 23 jnz $-24 ;abs 0xf2c0 f2da: 3b 53 add #-1, r11 ;r3 As==11 f2dc: 0f 4b mov r11, r15 f2de: 01 3c jmp $+4 ;abs 0xf2e2 f2e0: 0f 43 clr r15 f2e2: 38 41 pop r8 f2e4: 39 41 pop r9 f2e6: 3a 41 pop r10 f2e8: 3b 41 pop r11 f2ea: 30 41 ret 0000f2ec : f2ec: 0b 12 push r11 f2ee: 0b 4f mov r15, r11 f2f0: 0d 93 tst r13 f2f2: 02 20 jnz $+6 ;abs 0xf2f8 f2f4: 0d 43 clr r13 f2f6: 0f 3c jmp $+32 ;abs 0xf316 f2f8: 6f 4e mov.b @r14, r15 f2fa: 1e 53 inc r14 f2fc: 6c 4b mov.b @r11, r12 f2fe: 4c 9f cmp.b r15, r12 f300: 06 20 jnz $+14 ;abs 0xf30e f302: 1b 53 inc r11 f304: 4c 93 tst.b r12 f306: f6 27 jz $-18 ;abs 0xf2f4 f308: 3d 53 add #-1, r13 ;r3 As==11 f30a: f6 23 jnz $-18 ;abs 0xf2f8 f30c: f3 3f jmp $-24 ;abs 0xf2f4 f30e: 4d 4c mov.b r12, r13 f310: 5f 4e ff ff mov.b -1(r14),r15 ;0xffff(r14) f314: 0d 8f sub r15, r13 f316: 0f 4d mov r13, r15 f318: 3b 41 pop r11 f31a: 30 41 ret 0000f31c <__mulhi3>: f31c: 0e 43 clr r14 f31e: 0a 93 tst r10 f320: 07 24 jz $+16 ;abs 0xf330 f322: 12 c3 clrc f324: 0c 10 rrc r12 f326: 01 28 jnc $+4 ;abs 0xf32a f328: 0e 5a add r10, r14 f32a: 0a 5a rla r10 f32c: 0c 93 tst r12 f32e: f7 23 jnz $-16 ;abs 0xf31e f330: 30 41 ret 0000f332 <__udivmodsi4>: f332: 0f ef xor r15, r15 f334: 0e ee xor r14, r14 f336: 39 40 21 00 mov #33, r9 ;#0x0021 f33a: 0a 3c jmp $+22 ;abs 0xf350 f33c: 08 10 rrc r8 f33e: 0e 6e rlc r14 f340: 0f 6f rlc r15 f342: 0f 9b cmp r11, r15 f344: 05 28 jnc $+12 ;abs 0xf350 f346: 02 20 jnz $+6 ;abs 0xf34c f348: 0e 9a cmp r10, r14 f34a: 02 28 jnc $+6 ;abs 0xf350 f34c: 0e 8a sub r10, r14 f34e: 0f 7b subc r11, r15 f350: 0c 6c rlc r12 f352: 0d 6d rlc r13 f354: 08 68 rlc r8 f356: 19 83 dec r9 f358: f1 23 jnz $-28 ;abs 0xf33c f35a: 30 41 ret 0000f35c <__stop_progExec__>: f35c: ff 3f jmp $+0 ;abs 0xf35c Disassembly of section .vectors: 0000ffe0 : ffe0: 30 e0 30 e0 30 e0 30 e0 30 e0 30 e0 30 e0 30 e0 0.0.0.0.0.0.0.0. fff0: 30 e0 30 e0 30 e0 30 e0 30 e0 30 e0 30 e0 00 e0 0.0.0.0.0.0.0...