📄 shell.s
字号:
.module shell.c
.area text(rom, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
_InnerCmd::
.blkw 1
.area idata
.word L1
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L2
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word PL_help
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L3
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L4
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word PL_call
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L5
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L6
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word PL_cancel
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L7
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L8
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word PL_echo
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L9
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L10
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word PL_read
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L11
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word L12
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkw 1
.area idata
.word PL_autoanswer
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.dbstruct 0 6 tagCMDSTRUCT
.dbfield 0 cmd pc
.dbfield 2 help pc
.dbfield 4 proc pfI
.dbend
.dbsym e InnerCmd _InnerCmd A[42:7]S[tagCMDSTRUCT]
.area text(rom, con, rel)
.dbfile E:\Shuaihu\AVR\8880\shell.c
.dbfunc e read _read fI
; x -> R10,R11
; buf -> y+0
; argv -> R22,R23
; argc -> R20
.even
_read::
rcall push_xgsetF00C
movw R22,R18
mov R20,R16
sbiw R28,63
sbiw R28,37 ; offset = 100
.dbline -1
.dbline 24
; #include "serial.h"
; #include "string.h"
; #include "8880.h"
; #include <iom8v.h>
; #include "main.h"
; #include "shell.h"
; typedef int (*cmdproc)(char argc,char *argv[]);
; typedef struct tagCMDSTRUCT{
; char *cmd;
; char *help;
; cmdproc proc;
; }CMD_STRUCT,*PCMD_STRUCT;
; signed char GetCmdMatch(char * cmd);
; CMD_STRUCT InnerCmd[]={
; {"help","Desplay this information.\n",help},
; {"call","call a telphon number,uses:call 110\n",call},
; {"cancel","cancel a call process.\n", cancel},
; {"echo","enable or disenable echo.\n",echo},
; {"read","read a number from remote.\n",read},
; {"autoanswer","auto answer the remote call.\n",autoanswer},
; {0,0}
; };
; int read(char argc,char*argv[])
; {
.dbline 26
; char buf[100];
; int x=atoi(argv[1]);
movw R30,R22
ldd R16,z+2
ldd R17,z+3
rcall _atoi
movw R10,R16
.dbline 27
; if ((argc<2)||(!sysoption.calling)) {
cpi R20,2
brlo L17
X0:
lds R2,_sysoption+1
tst R2
brne L14
X1:
L17:
.dbline 27
.dbline 28
; serial_send(c_error);
lds R16,_c_error
lds R17,_c_error+1
rcall _serial_send
.dbline 29
; return 0;
clr R16
clr R17
rjmp L13
L14:
.dbline 31
; }
; M8880_Recv(buf,x);
mov R18,R10
movw R16,R28
rcall _M8880_Recv
.dbline 32
; serial_send(buf);
movw R16,R28
rcall _serial_send
.dbline -2
L13:
.dbline 0 ; func end
adiw R28,63
adiw R28,37 ; offset = 100
rjmp pop_xgsetF00C
.dbsym r x 10 I
.dbsym l buf 0 A[100:100]c
.dbsym r argv 22 ppc
.dbsym r argc 20 c
.dbend
.dbfunc e autoanswer _autoanswer fI
; argv -> R20,R21
; argc -> R22
.even
_autoanswer::
rcall push_xgsetF000
movw R20,R18
mov R22,R16
.dbline -1
.dbline 35
; }
; int autoanswer(char argc,char*argv[])
; {
.dbline 36
; if (argc<2){
cpi R22,2
brsh L19
X2:
.dbline 36
.dbline 37
; serial_send(c_error);
lds R16,_c_error
lds R17,_c_error+1
rcall _serial_send
.dbline 38
; return 0;
clr R16
clr R17
rjmp L18
L19:
.dbline 40
; }
; if (strcmp(argv[1],"on")==0)
ldi R18,<L23
ldi R19,>L23
movw R30,R20
ldd R16,z+2
ldd R17,z+3
rcall _strcmp
cpi R16,0
cpc R16,R17
brne L21
X3:
.dbline 41
; sysoption.autoanswer=-1;
ldi R24,255
sts _sysoption+4,R24
rjmp L22
L21:
.dbline 43
; else
; sysoption.autoanswer=0;
clr R2
sts _sysoption+4,R2
L22:
.dbline 44
; serial_send(c_ok);
lds R16,_c_ok
lds R17,_c_ok+1
rcall _serial_send
.dbline 45
; return 0;
clr R16
clr R17
.dbline -2
L18:
.dbline 0 ; func end
rjmp pop_xgsetF000
.dbsym r argv 20 ppc
.dbsym r argc 22 c
.dbend
.dbfunc e echo _echo fI
; argv -> R20,R21
; argc -> R22
.even
_echo::
rcall push_xgsetF000
movw R20,R18
mov R22,R16
.dbline -1
.dbline 48
; }
; int echo(char argc,char*argv[])
; {
.dbline 49
; if (argc<2){
cpi R22,2
brsh L27
X4:
.dbline 49
.dbline 50
; serial_send(c_error);
lds R16,_c_error
lds R17,_c_error+1
rcall _serial_send
.dbline 51
; return 0;
clr R16
clr R17
rjmp L26
L27:
.dbline 53
; }
; if (strcmp(argv[1],"on")==0)
ldi R18,<L23
ldi R19,>L23
movw R30,R20
ldd R16,z+2
ldd R17,z+3
rcall _strcmp
cpi R16,0
cpc R16,R17
brne L29
X5:
.dbline 54
; sysoption.echo=-1;
ldi R24,255
sts _sysoption,R24
rjmp L30
L29:
.dbline 56
; else
; sysoption.echo=0;
clr R2
sts _sysoption,R2
L30:
.dbline 57
; serial_send(c_ok);
lds R16,_c_ok
lds R17,_c_ok+1
rcall _serial_send
.dbline 58
; return 0;
clr R16
clr R17
.dbline -2
L26:
.dbline 0 ; func end
rjmp pop_xgsetF000
.dbsym r argv 20 ppc
.dbsym r argc 22 c
.dbend
.dbfunc e call _call fI
; i -> R22
; c -> R22,R23
; argv -> R20,R21
; argc -> R22
.even
_call::
rcall push_xgsetF000
movw R20,R18
mov R22,R16
.dbline -1
.dbline 61
; }
; int call(char argc,char*argv[])
; {
.dbline 64
; char i;
; char *c;
; if (sysoption.calling){
lds R2,_sysoption+1
tst R2
breq L32
X6:
.dbline 64
.dbline 65
; serial_send(c_busying);
lds R16,_c_busying
lds R17,_c_busying+1
rcall _serial_send
.dbline 66
; return 0;
clr R16
clr R17
rjmp L31
L32:
.dbline 67
; };
.dbline 68
; if (argc<2){
cpi R22,2
brsh L35
X7:
.dbline 68
.dbline 69
; serial_send(c_error);
lds R16,_c_error
lds R17,_c_error+1
rcall _serial_send
.dbline 70
; return 0;
clr R16
clr R17
rjmp L31
L35:
.dbline 72
; }
; c=argv[1];
movw R30,R20
ldd R22,z+2
ldd R23,z+3
rjmp L38
L37:
.dbline 73
; while(*c){
.dbline 74
; if ((*c<'0')||(*c>'9')) {
movw R30,R22
ldd R2,z+0
clr R3
mov R24,R2
cpi R24,48
brlo L42
X8:
ldi R24,57
cp R24,R2
brsh L40
X9:
L42:
.dbline 74
.dbline 75
; serial_send(c_error);
lds R16,_c_error
lds R17,_c_error+1
rcall _serial_send
.dbline 76
; return 0;
clr R16
clr R17
rjmp L31
L40:
.dbline 78
; }
; c++;
subi R22,255 ; offset = 1
sbci R23,255
.dbline 79
; }
L38:
.dbline 73
movw R30,R22
ldd R2,z+0
tst R2
brne L37
X10:
.dbline 80
; M8880_Handup;
sbi 0x15,5
.dbline 80
.dbline 81
; for (i=0;i<10;i++)
clr R22
rjmp L46
L43:
.dbline 82
; delay(0xffff);
ldi R16,65535
ldi R17,255
rcall _delay
L44:
.dbline 81
inc R22
L46:
.dbline 81
cpi R22,10
brlo L43
X11:
.dbline 83
; M8880_CPDial(argv[1]);
movw R30,R20
ldd R16,z+2
ldd R17,z+3
rcall _M8880_CPDial
.dbline 84
; sysoption.calling=1;
ldi R24,1
sts _sysoption+1,R24
.dbline 85
; sysoption.timer=0;
clr R2
sts _sysoption+3,R2
.dbline 86
; TCCR1B=0x05;
ldi R24,5
out 0x2e,R24
.dbline 87
; serial_send(calling);
lds R16,_calling
lds R17,_calling+1
rcall _serial_send
.dbline 88
; return 0;
clr R16
clr R17
.dbline -2
L31:
.dbline 0 ; func end
rjmp pop_xgsetF000
.dbsym r i 22 c
.dbsym r c 22 pc
.dbsym r argv 20 ppc
.dbsym r argc 22 c
.dbend
.dbfunc e cancel _cancel fI
; i -> R20
; argv -> <dead>
; argc -> <dead>
.even
_cancel::
rcall push_arg4
st -y,R20
.dbline -1
.dbline 91
; }
; int cancel(char argc,char*argv[])
; {
.dbline 93
; char i;
; M8880_Handdown;
cbi 0x15,5
.dbline 94
; for (i=0;i<10;i++) delay(0xffff);
clr R20
rjmp L53
L50:
.dbline 94
ldi R16,65535
ldi R17,255
rcall _delay
L51:
.dbline 94
inc R20
L53:
.dbline 94
cpi R20,10
brlo L50
X12:
.dbline 95
; sysoption.calling=0;
clr R2
sts _sysoption+1,R2
.dbline 96
; MCUCR&=~0xc;
in R24,0x35
andi R24,243
out 0x35,R24
.dbline 97
; MCUCR|=0x8;
in R24,0x35
ori R24,8
out 0x35,R24
.dbline 98
; serial_send(c_ok);
lds R16,_c_ok
lds R17,_c_ok+1
rcall _serial_send
.dbline 99
; return 0;
clr R16
clr R17
.dbline -2
L49:
.dbline 0 ; func end
ld R20,y+
adiw R28,4
ret
.dbsym r i 20 c
.dbsym l argv 3 ppc
.dbsym l argc 1 c
.dbend
.dbfunc e help _help fI
; i -> R20
; argv -> R22,R23
; argc -> R10
.even
_help::
rcall push_xgsetF00C
movw R22,R18
mov R10,R16
.dbline -1
.dbline 102
; }
; int help(char argc,char* argv[])
; {
.dbline 103
; signed char i=0;
clr R20
.dbline 104
; if (argc==1){
mov R24,R10
cpi R24,1
brne L56
X13:
.dbline 104
rjmp L59
L58:
.dbline 105
; while(InnerCmd[i].cmd){
.dbline 106
; serial_send(InnerCmd[i].cmd);
ldi R16,6
mov R17,R20
muls R16,R17
movw R30,R0
ldi R24,<_InnerCmd
ldi R25,>_InnerCmd
add R30,R24
adc R31,R25
ldd R16,z+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -