Files

1357 lines
29 KiB
NASM

;--------------------------------------------------------
; 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)