;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 4.2.0 #13081 (Linux) ;-------------------------------------------------------- .module cmd .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl ___memcpy .globl _strlen .globl _memcmp .globl _uart1_read_byte .globl _uart1_rx_available .globl _uart1_send_bytes .globl _EADC .globl _ET1 .globl _ET0 .globl _ES .globl _EA .globl _REN .globl _RI .globl _TI .globl _TR1 .globl _TF1 .globl _IT0 .globl _IE0 .globl _TR0 .globl _TF0 .globl _CMPCR2 .globl _CMPCR1 .globl _TA .globl _IRCBAND_REG .globl _IAP_TPS .globl _IAP_CONTR .globl _IAP_TRIG .globl _IAP_CMD .globl _IAP_ADDRL .globl _IAP_ADDRH .globl _IAP_DATA .globl _WDT_CONTR .globl _PCA_PWM3 .globl _PCA_PWM2 .globl _PCA_PWM1 .globl _PCA_PWM0 .globl _CCAP3L .globl _CCAP2L .globl _CCAP1L .globl _CCAP0L .globl _CCAPM3 .globl _CCAPM2 .globl _CCAPM1 .globl _CCAPM0 .globl _CMOD .globl _CCON .globl _ADCTIM_X .globl _ADCCFG .globl _ADC_RESL .globl _ADC_RES .globl _ADC_CONTR .globl _SPDAT .globl _SPCTL .globl _SPSTAT .globl _IP2H .globl _IP2 .globl _IP .globl _IE2 .globl _IE .globl _BRT .globl _P_SW1 .globl _SADEN .globl _SADDR .globl _S2BUF .globl _S2CON .globl _SBUF .globl _SCON .globl _TM4PS_X .globl _TM3PS_X .globl _TM2PS_X .globl _T4T3M .globl _T4L .globl _T4H .globl _T3L .globl _T3H .globl _T2L .globl _T2H .globl _INTCLKO .globl _AUXR .globl _TH1 .globl _TH0 .globl _TL1 .globl _TL0 .globl _TMOD .globl _TCON .globl _P_SW2 .globl _P5M0 .globl _P5M1 .globl _P4M0 .globl _P4M1 .globl _P3M0 .globl _P3M1 .globl _P2M0 .globl _P2M1 .globl _P1M0 .globl _P1M1 .globl _P0M0 .globl _P0M1 .globl _PSW .globl _B .globl _ACC .globl _PCON .globl _DPH .globl _DPL .globl _SP .globl _P5 .globl _P4 .globl _P3 .globl _P2 .globl _P1 .globl _P0 .globl _cmd_poll .globl _cmd_feed_byte ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (ABS,DATA) .org 0x0000 _P0 = 0x0080 _P1 = 0x0090 _P2 = 0x00a0 _P3 = 0x00b0 _P4 = 0x00c0 _P5 = 0x00c8 _SP = 0x0081 _DPL = 0x0082 _DPH = 0x0083 _PCON = 0x0087 _ACC = 0x00e0 _B = 0x00f0 _PSW = 0x00d0 _P0M1 = 0x0093 _P0M0 = 0x0094 _P1M1 = 0x0091 _P1M0 = 0x0092 _P2M1 = 0x0095 _P2M0 = 0x0096 _P3M1 = 0x00b1 _P3M0 = 0x00b2 _P4M1 = 0x00b3 _P4M0 = 0x00b4 _P5M1 = 0x00c9 _P5M0 = 0x00ca _P_SW2 = 0x00ba _TCON = 0x0088 _TMOD = 0x0089 _TL0 = 0x008a _TL1 = 0x008b _TH0 = 0x008c _TH1 = 0x008d _AUXR = 0x008e _INTCLKO = 0x008f _T2H = 0x00d6 _T2L = 0x00d7 _T3H = 0x00d4 _T3L = 0x00d5 _T4H = 0x00d2 _T4L = 0x00d3 _T4T3M = 0x00d1 _TM2PS_X = 0xfea1 _TM3PS_X = 0xfea2 _TM4PS_X = 0xfea3 _SCON = 0x0098 _SBUF = 0x0099 _S2CON = 0x009a _S2BUF = 0x009b _SADDR = 0x00a9 _SADEN = 0x00b9 _P_SW1 = 0x00a2 _BRT = 0x009c _IE = 0x00a8 _IE2 = 0x00af _IP = 0x00b8 _IP2 = 0x00b6 _IP2H = 0x00b7 _SPSTAT = 0x00cd _SPCTL = 0x00ce _SPDAT = 0x00cf _ADC_CONTR = 0x00bc _ADC_RES = 0x00bd _ADC_RESL = 0x00be _ADCCFG = 0x00de _ADCTIM_X = 0xfea8 _CCON = 0x00d8 _CMOD = 0x00d9 _CCAPM0 = 0x00da _CCAPM1 = 0x00db _CCAPM2 = 0x00dc _CCAPM3 = 0x00dd _CCAP0L = 0x00ea _CCAP1L = 0x00eb _CCAP2L = 0x00ec _CCAP3L = 0x00ed _PCA_PWM0 = 0x00f2 _PCA_PWM1 = 0x00f3 _PCA_PWM2 = 0x00f4 _PCA_PWM3 = 0x00f5 _WDT_CONTR = 0x00c1 _IAP_DATA = 0x00c2 _IAP_ADDRH = 0x00c3 _IAP_ADDRL = 0x00c4 _IAP_CMD = 0x00c5 _IAP_TRIG = 0x00c6 _IAP_CONTR = 0x00c7 _IAP_TPS = 0x00f7 _IRCBAND_REG = 0x009d _TA = 0x00ae _CMPCR1 = 0x00e6 _CMPCR2 = 0x00e7 ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (ABS,DATA) .org 0x0000 _TF0 = 0x008d _TR0 = 0x008c _IE0 = 0x0089 _IT0 = 0x0088 _TF1 = 0x008f _TR1 = 0x008e _TI = 0x0099 _RI = 0x0098 _REN = 0x009c _EA = 0x00af _ES = 0x00ac _ET0 = 0x00a9 _ET1 = 0x00ab _EADC = 0x00ad ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) _cmd_starts_with_n_65536_34: .ds 1 _cmd_extract_parens_PARM_2: .ds 1 _cmd_extract_parens_out_65536_37: .ds 3 _cmd_extract_parens_len_262144_42: .ds 1 _cmd_extract_parens_sloc0_1_0: .ds 3 _dec_to_int_PARM_2: .ds 1 _dec_to_int_s_65536_47: .ds 3 _cmd_feed_byte_p_262144_59: .ds 16 _cmd_feed_byte_p_262144_67: .ds 32 _cmd_feed_byte_pl_262144_67: .ds 1 _cmd_feed_byte_addr_327680_68: .ds 5 _cmd_feed_byte_count_327680_68: .ds 1 _cmd_feed_byte_i_327680_68: .ds 1 _cmd_feed_byte_p_262144_76: .ds 8 _cmd_feed_byte_sloc0_1_0: .ds 2 _cmd_feed_byte_sloc1_1_0: .ds 2 ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) _s_buf: .ds 32 ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area XISEG (XDATA) _s_len: .ds 1 .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'cmd_starts_with' ;------------------------------------------------------------ ;prefix Allocated to registers r5 r6 r7 ;n Allocated with name '_cmd_starts_with_n_65536_34' ;i Allocated to registers r4 ;a Allocated to registers r2 ;b Allocated to registers r3 ;------------------------------------------------------------ ; src/cmd.c:19: static uint8_t cmd_starts_with(const char *prefix) ; ----------------------------------------- ; function cmd_starts_with ; ----------------------------------------- _cmd_starts_with: ar7 = 0x07 ar6 = 0x06 ar5 = 0x05 ar4 = 0x04 ar3 = 0x03 ar2 = 0x02 ar1 = 0x01 ar0 = 0x00 ; src/cmd.c:21: uint8_t n = strlen(prefix); mov r5,dpl mov r6,dph mov r7,b push ar7 push ar6 push ar5 lcall _strlen mov r3,dpl pop ar5 pop ar6 pop ar7 mov _cmd_starts_with_n_65536_34,r3 ; src/cmd.c:22: if (s_len < n) return 0; mov dptr,#_s_len movx a,@dptr clr c subb a,_cmd_starts_with_n_65536_34 jnc 00124$ mov dpl,#0x00 ; src/cmd.c:23: for (uint8_t i = 0; i < n; i++) { ret 00124$: mov r4,#0x00 00113$: clr c mov a,r4 subb a,_cmd_starts_with_n_65536_34 jnc 00111$ ; src/cmd.c:24: char a = s_buf[i]; mov a,r4 add a,#_s_buf mov dpl,a clr a addc a,#(_s_buf >> 8) mov dph,a movx a,@dptr mov r2,a ; src/cmd.c:25: char b = prefix[i]; mov a,r4 add a,r5 mov r0,a clr a addc a,r6 mov r1,a mov ar3,r7 mov dpl,r0 mov dph,r1 mov b,r3 lcall __gptrget mov r3,a ; src/cmd.c:26: if (a >= 'a' && a <= 'z') a -= 32; cjne r2,#0x61,00151$ 00151$: jc 00104$ mov a,r2 add a,#0xff - 0x7a jc 00104$ mov ar1,r2 mov a,r1 add a,#0xe0 mov r2,a 00104$: ; src/cmd.c:27: if (b >= 'a' && b <= 'z') b -= 32; cjne r3,#0x61,00154$ 00154$: jc 00107$ mov a,r3 add a,#0xff - 0x7a jc 00107$ mov ar1,r3 mov a,r1 add a,#0xe0 mov r3,a 00107$: ; src/cmd.c:28: if (a != b) return 0; mov a,r2 cjne a,ar3,00157$ sjmp 00114$ 00157$: mov dpl,#0x00 ret 00114$: ; src/cmd.c:23: for (uint8_t i = 0; i < n; i++) { inc r4 sjmp 00113$ 00111$: ; src/cmd.c:30: return 1; mov dpl,#0x01 ; src/cmd.c:31: } ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'cmd_extract_parens' ;------------------------------------------------------------ ;out_max Allocated with name '_cmd_extract_parens_PARM_2' ;out Allocated with name '_cmd_extract_parens_out_65536_37' ;open Allocated to registers r4 ;start Allocated to registers r3 ;i Allocated to registers r2 ;len Allocated with name '_cmd_extract_parens_len_262144_42' ;sloc0 Allocated with name '_cmd_extract_parens_sloc0_1_0' ;------------------------------------------------------------ ; src/cmd.c:34: static uint8_t cmd_extract_parens(uint8_t *out, uint8_t out_max) ; ----------------------------------------- ; function cmd_extract_parens ; ----------------------------------------- _cmd_extract_parens: mov _cmd_extract_parens_out_65536_37,dpl mov (_cmd_extract_parens_out_65536_37 + 1),dph mov (_cmd_extract_parens_out_65536_37 + 2),b ; src/cmd.c:36: uint8_t open = 0, start = 0; mov r4,#0x00 mov r3,#0x00 ; src/cmd.c:37: for (uint8_t i = 0; i < s_len; i++) { mov r2,#0x00 mov r1,#0x00 00111$: mov dptr,#_s_len movx a,@dptr mov r0,a clr c mov a,r1 subb a,r0 jc 00139$ ljmp 00109$ 00139$: ; src/cmd.c:38: if (s_buf[i] == '(') { open = 1; start = i + 1; } mov a,r1 add a,#_s_buf mov dpl,a clr a addc a,#(_s_buf >> 8) mov dph,a movx a,@dptr mov r0,a cjne r0,#0x28,00107$ mov r4,#0x01 mov ar7,r1 mov a,r7 inc a mov r3,a sjmp 00112$ 00107$: ; src/cmd.c:39: else if (s_buf[i] == ')' && open) { cjne r0,#0x29,00112$ mov a,r4 jz 00112$ ; src/cmd.c:40: uint8_t len = i - start; mov a,r2 clr c subb a,r3 mov _cmd_extract_parens_len_262144_42,a ; src/cmd.c:41: if (len > out_max) len = out_max; clr c mov a,_cmd_extract_parens_PARM_2 subb a,_cmd_extract_parens_len_262144_42 jnc 00102$ mov _cmd_extract_parens_len_262144_42,_cmd_extract_parens_PARM_2 00102$: ; src/cmd.c:42: memcpy(out, &s_buf[start], len); mov _cmd_extract_parens_sloc0_1_0,_cmd_extract_parens_out_65536_37 mov (_cmd_extract_parens_sloc0_1_0 + 1),(_cmd_extract_parens_out_65536_37 + 1) mov (_cmd_extract_parens_sloc0_1_0 + 2),(_cmd_extract_parens_out_65536_37 + 2) mov a,r3 add a,#_s_buf mov r6,a clr a addc a,#(_s_buf >> 8) mov r7,a mov ___memcpy_PARM_2,r6 mov (___memcpy_PARM_2 + 1),r7 mov (___memcpy_PARM_2 + 2),#0x00 mov ___memcpy_PARM_3,_cmd_extract_parens_len_262144_42 mov (___memcpy_PARM_3 + 1),#0x00 mov dpl,_cmd_extract_parens_sloc0_1_0 mov dph,(_cmd_extract_parens_sloc0_1_0 + 1) mov b,(_cmd_extract_parens_sloc0_1_0 + 2) lcall ___memcpy ; src/cmd.c:43: out[len] = 0; mov a,_cmd_extract_parens_len_262144_42 add a,_cmd_extract_parens_out_65536_37 mov r5,a clr a addc a,(_cmd_extract_parens_out_65536_37 + 1) mov r6,a mov r7,(_cmd_extract_parens_out_65536_37 + 2) mov dpl,r5 mov dph,r6 mov b,r7 clr a lcall __gptrput ; src/cmd.c:44: return len; mov dpl,_cmd_extract_parens_len_262144_42 ret 00112$: ; src/cmd.c:37: for (uint8_t i = 0; i < s_len; i++) { inc r1 mov ar2,r1 ljmp 00111$ 00109$: ; src/cmd.c:47: return 0; mov dpl,#0x00 ; src/cmd.c:48: } ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'hex_to_byte' ;------------------------------------------------------------ ;s Allocated to registers r5 r6 r7 ;v Allocated to registers r4 ;i Allocated to registers r3 ;c Allocated to registers r2 ;------------------------------------------------------------ ; src/cmd.c:51: static uint8_t hex_to_byte(const uint8_t *s) ; ----------------------------------------- ; function hex_to_byte ; ----------------------------------------- _hex_to_byte: ; src/cmd.c:53: uint8_t v = 0; ; src/cmd.c:54: if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) s += 2; mov r5,dpl mov r6,dph mov r7,b mov r4,#0x00 lcall __gptrget mov r3,a cjne r3,#0x30,00131$ mov a,#0x01 add a,r5 mov r1,a clr a addc a,r6 mov r2,a mov ar3,r7 mov dpl,r1 mov dph,r2 mov b,r3 lcall __gptrget mov r3,a cjne r3,#0x78,00165$ sjmp 00101$ 00165$: cjne r3,#0x58,00131$ 00101$: mov a,#0x02 add a,r5 mov r5,a clr a addc a,r6 mov r6,a ; src/cmd.c:55: for (uint8_t i = 0; i < 2; i++) { 00131$: mov r3,#0x00 00118$: cjne r3,#0x02,00168$ 00168$: jnc 00116$ ; src/cmd.c:56: char c = s[i]; mov a,r3 add a,r5 mov r0,a clr a addc a,r6 mov r1,a mov ar2,r7 mov dpl,r0 mov dph,r1 mov b,r2 lcall __gptrget mov r2,a ; src/cmd.c:57: v <<= 4; mov ar1,r4 mov a,r1 swap a anl a,#0xf0 mov r4,a ; src/cmd.c:58: if (c >= '0' && c <= '9') v |= (c - '0'); cjne r2,#0x30,00170$ 00170$: jc 00113$ mov a,r2 add a,#0xff - 0x39 jc 00113$ mov ar1,r2 mov a,r1 add a,#0xd0 orl ar4,a sjmp 00119$ 00113$: ; src/cmd.c:59: else if (c >= 'a' && c <= 'f') v |= (c - 'a' + 10); cjne r2,#0x61,00173$ 00173$: jc 00109$ mov a,r2 add a,#0xff - 0x66 jc 00109$ mov ar1,r2 mov a,#0xa9 add a,r1 orl ar4,a sjmp 00119$ 00109$: ; src/cmd.c:60: else if (c >= 'A' && c <= 'F') v |= (c - 'A' + 10); cjne r2,#0x41,00176$ 00176$: jc 00119$ mov a,r2 add a,#0xff - 0x46 jc 00119$ mov a,#0xc9 add a,r2 orl ar4,a 00119$: ; src/cmd.c:55: for (uint8_t i = 0; i < 2; i++) { inc r3 sjmp 00118$ 00116$: ; src/cmd.c:62: return v; mov dpl,r4 ; src/cmd.c:63: } ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'dec_to_int' ;------------------------------------------------------------ ;len Allocated with name '_dec_to_int_PARM_2' ;s Allocated with name '_dec_to_int_s_65536_47' ;v Allocated to registers r3 r4 ;i Allocated to registers r2 ;------------------------------------------------------------ ; src/cmd.c:66: static uint16_t dec_to_int(const uint8_t *s, uint8_t len) ; ----------------------------------------- ; function dec_to_int ; ----------------------------------------- _dec_to_int: mov _dec_to_int_s_65536_47,dpl mov (_dec_to_int_s_65536_47 + 1),dph mov (_dec_to_int_s_65536_47 + 2),b ; src/cmd.c:68: uint16_t v = 0; mov r3,#0x00 mov r4,#0x00 ; src/cmd.c:69: for (uint8_t i = 0; i < len; i++) { mov r2,#0x00 00106$: clr c mov a,r2 subb a,_dec_to_int_PARM_2 jnc 00104$ ; src/cmd.c:70: if (s[i] >= '0' && s[i] <= '9') { mov a,r2 add a,_dec_to_int_s_65536_47 mov r0,a clr a addc a,(_dec_to_int_s_65536_47 + 1) mov r1,a mov r7,(_dec_to_int_s_65536_47 + 2) mov dpl,r0 mov dph,r1 mov b,r7 lcall __gptrget mov r7,a cjne r7,#0x30,00128$ 00128$: jc 00107$ mov a,r7 add a,#0xff - 0x39 jc 00107$ ; src/cmd.c:71: v = v * 10 + (s[i] - '0'); mov __mulint_PARM_2,r3 mov (__mulint_PARM_2 + 1),r4 mov dptr,#0x000a push ar7 push ar2 lcall __mulint mov r5,dpl mov r6,dph pop ar2 pop ar7 mov ar1,r7 mov r7,#0x00 mov a,r1 add a,#0xd0 mov r1,a mov a,r7 addc a,#0xff mov r7,a mov a,r1 add a,r5 mov r5,a mov a,r7 addc a,r6 mov r6,a mov ar3,r5 mov ar4,r6 00107$: ; src/cmd.c:69: for (uint8_t i = 0; i < len; i++) { inc r2 sjmp 00106$ 00104$: ; src/cmd.c:74: return v; mov dpl,r3 mov dph,r4 ; src/cmd.c:75: } ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'cmd_poll' ;------------------------------------------------------------ ;b Allocated to registers ;------------------------------------------------------------ ; src/cmd.c:77: void cmd_poll(void) ; ----------------------------------------- ; function cmd_poll ; ----------------------------------------- _cmd_poll: ; src/cmd.c:79: while (uart1_rx_available()) { 00101$: lcall _uart1_rx_available mov a,dpl jz 00104$ ; src/cmd.c:80: uint8_t b = uart1_read_byte(); lcall _uart1_read_byte ; src/cmd.c:81: cmd_feed_byte(b); lcall _cmd_feed_byte sjmp 00101$ 00104$: ; src/cmd.c:83: } ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'cmd_feed_byte' ;------------------------------------------------------------ ;b Allocated to registers r7 ;p Allocated with name '_cmd_feed_byte_p_262144_59' ;pl Allocated to registers ;matched Allocated to registers r6 ;p Allocated with name '_cmd_feed_byte_p_262144_67' ;pl Allocated with name '_cmd_feed_byte_pl_262144_67' ;addr Allocated with name '_cmd_feed_byte_addr_327680_68' ;count Allocated with name '_cmd_feed_byte_count_327680_68' ;i Allocated with name '_cmd_feed_byte_i_327680_68' ;v Allocated to registers r4 ;p Allocated with name '_cmd_feed_byte_p_262144_76' ;pl Allocated to registers r5 ;v Allocated to registers r5 r6 ;sloc0 Allocated with name '_cmd_feed_byte_sloc0_1_0' ;sloc1 Allocated with name '_cmd_feed_byte_sloc1_1_0' ;------------------------------------------------------------ ; src/cmd.c:85: void cmd_feed_byte(uint8_t b) ; ----------------------------------------- ; function cmd_feed_byte ; ----------------------------------------- _cmd_feed_byte: ; src/cmd.c:88: if (b == 0) return; mov a,dpl mov r7,a jnz 00102$ ret 00102$: ; src/cmd.c:91: if (b == '\r' || b == '\n') { cjne r7,#0x0d,00296$ sjmp 00156$ 00296$: cjne r7,#0x0a,00297$ sjmp 00298$ 00297$: ljmp 00157$ 00298$: 00156$: ; src/cmd.c:92: s_buf[s_len] = 0; mov dptr,#_s_len movx a,@dptr mov r6,a add a,#_s_buf mov dpl,a clr a addc a,#(_s_buf >> 8) mov dph,a clr a movx @dptr,a ; src/cmd.c:93: if (s_len > 0) { mov dptr,#_s_len movx a,@dptr jnz 00299$ ljmp 00155$ 00299$: ; src/cmd.c:95: if (cmd_starts_with("MODEL")) { mov dptr,#___str_0 mov b,#0x80 lcall _cmd_starts_with mov a,dpl jnz 00300$ ljmp 00152$ 00300$: ; src/cmd.c:97: uint8_t pl = cmd_extract_parens(p, 16); mov _cmd_extract_parens_PARM_2,#0x10 mov dptr,#_cmd_feed_byte_p_262144_59 mov b,#0x40 lcall _cmd_extract_parens mov a,dpl ; src/cmd.c:98: if (pl > 0) { jnz 00301$ ljmp 00155$ 00301$: ; src/cmd.c:100: uint8_t matched = 0; mov r6,#0x00 ; src/cmd.c:101: if (memcmp(p, "SBUS", 4) == 0 || memcmp(p, "sbus", 4) == 0) { mov _memcmp_PARM_2,#___str_1 mov (_memcmp_PARM_2 + 1),#(___str_1 >> 8) mov (_memcmp_PARM_2 + 2),#0x80 mov _memcmp_PARM_3,#0x04 ; 1-genFromRTrack replaced mov (_memcmp_PARM_3 + 1),#0x00 mov (_memcmp_PARM_3 + 1),r6 mov dptr,#_cmd_feed_byte_p_262144_59 mov b,#0x40 push ar6 lcall _memcmp mov a,dpl mov b,dph pop ar6 orl a,b jz 00110$ mov _memcmp_PARM_2,#___str_2 mov (_memcmp_PARM_2 + 1),#(___str_2 >> 8) mov (_memcmp_PARM_2 + 2),#0x80 mov _memcmp_PARM_3,#0x04 mov (_memcmp_PARM_3 + 1),#0x00 mov dptr,#_cmd_feed_byte_p_262144_59 mov b,#0x40 push ar6 lcall _memcmp mov a,dpl mov b,dph pop ar6 orl a,b jnz 00111$ 00110$: ; src/cmd.c:103: model_set_mode(MODE_SBUS); mov dpl,#0x00 lcall _model_set_mode ; src/cmd.c:104: matched = 1; mov r6,#0x01 ljmp 00112$ 00111$: ; src/cmd.c:105: } else if (memcmp(p, "PWM", 3) == 0 || memcmp(p, "pwm", 3) == 0) { mov _memcmp_PARM_2,#___str_3 mov (_memcmp_PARM_2 + 1),#(___str_3 >> 8) mov (_memcmp_PARM_2 + 2),#0x80 mov _memcmp_PARM_3,#0x03 mov (_memcmp_PARM_3 + 1),#0x00 mov dptr,#_cmd_feed_byte_p_262144_59 mov b,#0x40 push ar6 lcall _memcmp mov a,dpl mov b,dph pop ar6 orl a,b jz 00106$ mov _memcmp_PARM_2,#___str_4 mov (_memcmp_PARM_2 + 1),#(___str_4 >> 8) mov (_memcmp_PARM_2 + 2),#0x80 mov _memcmp_PARM_3,#0x03 mov (_memcmp_PARM_3 + 1),#0x00 mov dptr,#_cmd_feed_byte_p_262144_59 mov b,#0x40 push ar6 lcall _memcmp mov a,dpl mov b,dph pop ar6 orl a,b jnz 00107$ 00106$: ; src/cmd.c:107: model_set_mode(MODE_PWM); mov dpl,#0x01 lcall _model_set_mode ; src/cmd.c:108: matched = 1; mov r6,#0x01 sjmp 00112$ 00107$: ; src/cmd.c:109: } else if (memcmp(p, "UART", 4) == 0 || memcmp(p, "uart", 4) == 0) { mov _memcmp_PARM_2,#___str_5 mov (_memcmp_PARM_2 + 1),#(___str_5 >> 8) mov (_memcmp_PARM_2 + 2),#0x80 mov _memcmp_PARM_3,#0x04 mov (_memcmp_PARM_3 + 1),#0x00 mov dptr,#_cmd_feed_byte_p_262144_59 mov b,#0x40 push ar6 lcall _memcmp mov a,dpl mov b,dph pop ar6 orl a,b jz 00103$ mov _memcmp_PARM_2,#___str_6 mov (_memcmp_PARM_2 + 1),#(___str_6 >> 8) mov (_memcmp_PARM_2 + 2),#0x80 mov _memcmp_PARM_3,#0x04 mov (_memcmp_PARM_3 + 1),#0x00 mov dptr,#_cmd_feed_byte_p_262144_59 mov b,#0x40 push ar6 lcall _memcmp mov a,dpl mov b,dph pop ar6 orl a,b jnz 00112$ 00103$: ; src/cmd.c:111: model_set_mode(MODE_UART); mov dpl,#0x02 lcall _model_set_mode ; src/cmd.c:112: matched = 1; mov r6,#0x01 00112$: ; src/cmd.c:114: if (matched) uart1_send_bytes("OK\r\n", 4); mov a,r6 jz 00115$ mov _uart1_send_bytes_PARM_2,#0x04 mov dptr,#___str_7 mov b,#0x80 lcall _uart1_send_bytes ljmp 00155$ 00115$: ; src/cmd.c:115: else uart1_send_bytes("ERR\r\n", 5); mov _uart1_send_bytes_PARM_2,#0x05 mov dptr,#___str_8 mov b,#0x80 lcall _uart1_send_bytes ljmp 00155$ 00152$: ; src/cmd.c:117: } else if (cmd_starts_with("ADDR")) { mov dptr,#___str_9 mov b,#0x80 lcall _cmd_starts_with mov a,dpl jnz 00309$ ljmp 00149$ 00309$: ; src/cmd.c:119: uint8_t pl = cmd_extract_parens(p, 32); mov _cmd_extract_parens_PARM_2,#0x20 mov dptr,#_cmd_feed_byte_p_262144_67 mov b,#0x40 lcall _cmd_extract_parens mov _cmd_feed_byte_pl_262144_67,dpl ; src/cmd.c:120: if (pl >= 2) { mov a,#0x100 - 0x02 add a,_cmd_feed_byte_pl_262144_67 jc 00310$ ljmp 00155$ 00310$: ; src/cmd.c:122: uint8_t addr[5] = { 0xE7, 0xE7, 0xE7, 0xE7, 0xC2 }; mov _cmd_feed_byte_addr_327680_68,#0xe7 mov (_cmd_feed_byte_addr_327680_68 + 0x0001),#0xe7 mov (_cmd_feed_byte_addr_327680_68 + 0x0002),#0xe7 mov (_cmd_feed_byte_addr_327680_68 + 0x0003),#0xe7 mov (_cmd_feed_byte_addr_327680_68 + 0x0004),#0xc2 ; src/cmd.c:124: uint8_t i = 0; mov r5,#0x00 ; src/cmd.c:125: while (i < pl && count < 5) { ; 1-genFromRTrack replaced mov _cmd_feed_byte_count_327680_68,#0x00 mov _cmd_feed_byte_count_327680_68,r5 00132$: clr c mov a,r5 subb a,_cmd_feed_byte_pl_262144_67 jc 00311$ ljmp 00134$ 00311$: mov a,#0x100 - 0x05 add a,_cmd_feed_byte_count_327680_68 jnc 00312$ ljmp 00134$ 00312$: ; src/cmd.c:127: while (i < pl && p[i] == ' ') i++; mov ar3,r5 00120$: clr c mov a,r3 subb a,_cmd_feed_byte_pl_262144_67 jnc 00189$ mov a,r3 add a,#_cmd_feed_byte_p_262144_67 mov r1,a mov ar2,@r1 cjne r2,#0x20,00189$ inc r3 sjmp 00120$ 00189$: mov _cmd_feed_byte_i_327680_68,r3 ; src/cmd.c:128: if (i + 2 > pl) break; mov _cmd_feed_byte_sloc0_1_0,r3 mov (_cmd_feed_byte_sloc0_1_0 + 1),#0x00 mov a,#0x02 add a,_cmd_feed_byte_sloc0_1_0 mov r2,a clr a addc a,(_cmd_feed_byte_sloc0_1_0 + 1) mov r4,a mov _cmd_feed_byte_sloc1_1_0,_cmd_feed_byte_pl_262144_67 mov (_cmd_feed_byte_sloc1_1_0 + 1),#0x00 clr c mov a,_cmd_feed_byte_sloc1_1_0 subb a,r2 mov a,(_cmd_feed_byte_sloc1_1_0 + 1) xrl a,#0x80 mov b,r4 xrl b,#0x80 subb a,b jnc 00316$ ljmp 00134$ 00316$: ; src/cmd.c:131: if (i + 1 < pl && p[i] == '0' && (p[i+1] == 'x' || p[i+1] == 'X')) { mov a,#0x01 add a,_cmd_feed_byte_sloc0_1_0 mov r2,a clr a addc a,(_cmd_feed_byte_sloc0_1_0 + 1) mov r4,a clr c mov a,r2 subb a,_cmd_feed_byte_sloc1_1_0 mov a,r4 xrl a,#0x80 mov b,(_cmd_feed_byte_sloc1_1_0 + 1) xrl b,#0x80 subb a,b jnc 00126$ mov a,r3 add a,#_cmd_feed_byte_p_262144_67 mov r1,a mov ar4,@r1 cjne r4,#0x30,00126$ mov a,r3 inc a add a,#_cmd_feed_byte_p_262144_67 mov r1,a mov ar4,@r1 cjne r4,#0x78,00320$ sjmp 00125$ 00320$: mov a,r3 inc a add a,#_cmd_feed_byte_p_262144_67 mov r1,a mov ar4,@r1 cjne r4,#0x58,00126$ 00125$: ; src/cmd.c:132: v = hex_to_byte(&p[i]); mov a,_cmd_feed_byte_i_327680_68 add a,#_cmd_feed_byte_p_262144_67 mov r4,a mov r3,#0x00 mov r2,#0x40 mov dpl,r4 mov dph,r3 mov b,r2 lcall _hex_to_byte mov r4,dpl ; src/cmd.c:133: i += 4; mov r2,_cmd_feed_byte_i_327680_68 mov a,#0x04 add a,r2 mov r5,a sjmp 00127$ 00126$: ; src/cmd.c:135: v = hex_to_byte(&p[i]); mov a,_cmd_feed_byte_i_327680_68 add a,#_cmd_feed_byte_p_262144_67 mov r2,a mov r3,#0x00 mov r6,#0x40 mov dpl,r2 mov dph,r3 mov b,r6 lcall _hex_to_byte mov r4,dpl ; src/cmd.c:136: i += 2; mov r2,_cmd_feed_byte_i_327680_68 mov a,#0x02 add a,r2 mov r5,a 00127$: ; src/cmd.c:138: addr[count++] = v; mov a,_cmd_feed_byte_count_327680_68 add a,#_cmd_feed_byte_addr_327680_68 mov r1,a inc _cmd_feed_byte_count_327680_68 mov @r1,ar4 ljmp 00132$ 00134$: ; src/cmd.c:140: if (count == 5) { mov a,#0x05 cjne a,_cmd_feed_byte_count_327680_68,00136$ ; src/cmd.c:142: model_set_address(addr); mov dptr,#_cmd_feed_byte_addr_327680_68 mov b,#0x40 lcall _model_set_address ; src/cmd.c:143: uart1_send_bytes("OK\r\n", 4); mov _uart1_send_bytes_PARM_2,#0x04 mov dptr,#___str_7 mov b,#0x80 lcall _uart1_send_bytes ljmp 00155$ 00136$: ; src/cmd.c:145: uart1_send_bytes("ERR_ADDR\r\n", 10); mov _uart1_send_bytes_PARM_2,#0x0a mov dptr,#___str_10 mov b,#0x80 lcall _uart1_send_bytes ljmp 00155$ 00149$: ; src/cmd.c:148: } else if (cmd_starts_with("TUN")) { mov dptr,#___str_11 mov b,#0x80 lcall _cmd_starts_with mov a,dpl jz 00146$ ; src/cmd.c:150: uint8_t pl = cmd_extract_parens(p, 8); mov _cmd_extract_parens_PARM_2,#0x08 mov dptr,#_cmd_feed_byte_p_262144_76 mov b,#0x40 lcall _cmd_extract_parens ; src/cmd.c:151: if (pl > 0) { mov a,dpl mov r6,a mov r5,a jz 00155$ ; src/cmd.c:152: uint16_t v = dec_to_int(p, pl); mov _dec_to_int_PARM_2,r5 mov dptr,#_cmd_feed_byte_p_262144_76 mov b,#0x40 lcall _dec_to_int mov r5,dpl mov r6,dph ; src/cmd.c:153: if (v <= 125) { mov ar3,r5 mov ar4,r6 clr c mov a,#0x7d subb a,r3 clr a subb a,r4 jc 00141$ ; src/cmd.c:155: model_set_channel((uint8_t)v); mov dpl,r5 lcall _model_set_channel ; src/cmd.c:156: uart1_send_bytes("OK\r\n", 4); mov _uart1_send_bytes_PARM_2,#0x04 mov dptr,#___str_7 mov b,#0x80 lcall _uart1_send_bytes sjmp 00155$ 00141$: ; src/cmd.c:158: uart1_send_bytes("ERR_RANGE\r\n", 11); mov _uart1_send_bytes_PARM_2,#0x0b mov dptr,#___str_12 mov b,#0x80 lcall _uart1_send_bytes sjmp 00155$ 00146$: ; src/cmd.c:162: uart1_send_bytes("UNK\r\n", 5); mov _uart1_send_bytes_PARM_2,#0x05 mov dptr,#___str_13 mov b,#0x80 lcall _uart1_send_bytes 00155$: ; src/cmd.c:165: s_len = 0; mov dptr,#_s_len clr a movx @dptr,a ; src/cmd.c:166: return; ret 00157$: ; src/cmd.c:170: if (s_len < CMD_BUF_SIZE - 1) { mov dptr,#_s_len movx a,@dptr mov r6,a cjne r6,#0x1f,00328$ 00328$: jnc 00160$ ; src/cmd.c:171: s_buf[s_len++] = b; mov dptr,#_s_len mov a,r6 inc a movx @dptr,a mov a,r6 add a,#_s_buf mov dpl,a clr a addc a,#(_s_buf >> 8) mov dph,a mov a,r7 movx @dptr,a ret 00160$: ; src/cmd.c:174: s_len = 0; mov dptr,#_s_len clr a movx @dptr,a ; src/cmd.c:176: } ret .area CSEG (CODE) .area CONST (CODE) _DEFAULT_ADDR: .db #0xe7 ; 231 .db #0xe7 ; 231 .db #0xe7 ; 231 .db #0xe7 ; 231 .db #0xc2 ; 194 .area CONST (CODE) ___str_0: .ascii "MODEL" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_1: .ascii "SBUS" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_2: .ascii "sbus" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_3: .ascii "PWM" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_4: .ascii "pwm" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_5: .ascii "UART" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_6: .ascii "uart" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_7: .ascii "OK" .db 0x0d .db 0x0a .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_8: .ascii "ERR" .db 0x0d .db 0x0a .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_9: .ascii "ADDR" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_10: .ascii "ERR_ADDR" .db 0x0d .db 0x0a .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_11: .ascii "TUN" .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_12: .ascii "ERR_RANGE" .db 0x0d .db 0x0a .db 0x00 .area CSEG (CODE) .area CONST (CODE) ___str_13: .ascii "UNK" .db 0x0d .db 0x0a .db 0x00 .area CSEG (CODE) .area XINIT (CODE) __xinit__s_len: .db #0x00 ; 0 .area CABS (ABS,CODE)