⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 command1.asm

📁 该应用软件可以实现大多数单片机的仿真实验
💻 ASM
📖 第 1 页 / 共 2 页
字号:
*        title    COMMAND1
*        page
*/***** chckcmds() *****/
*
*chckcmds()
*{
* if(match("LIST")) clist();
* else if(match("RUN")) crun();
* else if(match("NEW")) cnew();
* else if(match("CONT")) ccont();
* else if(match("CLEAR")) cclear();
* else return(0);
* return(1);
*}
*
*
CHCKCMDS:	EQU    *
	JSR    GETCHR        ; GET FIRST CHAR FROM THE INPUT BUFFER.
	CMPA   #EOL          ; IS IT AN EOL?
	BNE    CHKCMDS1      ; NO. GO CHECK FOR COMMANDS.
CHKCMDS5:	LDD    #0            ; YES. JUST RETURN.
	RTS
CHKCMDS1:	LDX    #CMDTBL       ; POINT TO COMMAND TABLE.
CHKCMDS2:	JSR    STREQ         ; GO CHECK FOR A COMMAND.
	BCS    CHKCMDS3      ; IF WE FOUND ONE GO EXECUTE IT.
CHKCMDS4:	INX                  ; ADVANCE POINTER TO NEXT CHAR IN TABLE ENTRY.
	LDAA   0,X           ; GET THE CHAR. ARE WE AT THE END OF THIS ENTRY?
	BNE    CHKCMDS4      ; NO. KEEP GOING TILL WE ARE PAST IT.
	INX                  ; BYPASS END OF COMMAND MARKER & EXECUTION ADDR.
	INX
	INX
	TST    0,X           ; ARE WE AT THE END OF THE TABLE?
	BNE    CHKCMDS2      ; NO. GO CHECK THE NEXT TABLE ENTRY.
	BRA    CHKCMDS5      ; YES. RETURN W/ ENTRY NOT FOUND INDICATION.
CHKCMDS3:	LDX    1,X           ; GET ADDRESS OF COMMAND.
	JSR    0,X           ; GO DO IT.
	LDD    #1            ; SHOW WE EXECUTED A COMMAND.
	RTS                  ; RETURN.
*
*
CMDTBL:	EQU    *
	FCC    "LIST"
	FCB    0
	FDB    CLIST
	FCC    "RUN"
	FCB    0
	FDB    CRUN
	FCC    "NEW"
	FCB    0
	FDB    CNEW
	FCC    "CONT"
	FCB    0
	FDB    CCONT
	FCC    "CLEAR"
	FCB    0
	FDB    CCLEAR
	FCC    "ESAVE"
	FCB    0
	FDB    CESAVE
	FCC    "ELOAD"
	FCB    0
	FDB    CELOAD
	FCC    "LLIST"
	FCB    0
	FDB    CLLIST
	FCC    "AUTOST"
	FCB    0
	FDB    CAUTOST
	FCC    "NOAUTO"
	FCB    0
	FDB    CNOAUTO
	FCC	"FREE"
	FCB	0
	FDB	CFREE
	FCB    0             ;END OF TABLE MARKER.
	
	
*/***** clist() *****/
*
*clist()
*{
* int *intptr;
* char token;
* if(basbeg==basend) return;             /* if basic buffer empty, return */
* skipspcs();                    /* skip any spaces after "LIST" */
*
*
CLIST:	EQU    *
	JSR    NL2
	LDD    BASBEG
	CPD    BASEND
	BNE    CLIST1
	RTS
CLIST1:	JSR    SKIPSPCS
*
*
* if(numeric(getchr()))
* {
*  firstlin=getlinum();
*  if(getchr()=='-')
*  {
*   incibp();
*   lastlin=getlinum;
*  }
* }
* else
* {
*  intptr=basbeg;
*  lastlin=hiline;
*  firstlin=*intptr;
* }
* if(firstlin<lastlin) return;
* tokptr=intptr=findline(firstlin);
*
*
	JSR    GETCHR
	JSR    NUMERIC
	BCC    CLIST2
	JSR    GETLINUM
	STD    FIRSTLIN
	JSR    GETCHR
	CMPA   #'-'
	BEQ    CLIST3
	LDD    FIRSTLIN
	STD    LASTLIN
	CPD    HILINE
	BLS    CLIST4
	RTS
CLIST3:	JSR    INCIBP
	JSR    GETLINUM
	CPD    HILINE
	BLS    CLIST13
	LDD    HILINE
CLIST13:	STD    LASTLIN
	BRA    CLIST4
CLIST2:	CMPA   #EOL
	BEQ    CLIST14
	RTS
CLIST14:	LDX    BASBEG
	LDD    0,X
	STD    FIRSTLIN
	LDD    HILINE
	STD    LASTLIN
CLIST4:	LDD    FIRSTLIN
	CPD    LASTLIN
	BLS    CLIST5
	RTS
CLIST5:	LDD    FIRSTLIN
	JSR    FINDLINE
	STX    TOKPTR
	LDD    LASTLIN
	JSR    FINDLINE
	LDD    0,X
	CPD    LASTLIN
	BNE    CLIST12
	LDAB   2,X
	ABX
CLIST12:	STX    LASTLIN
*
*
*
* while(*intptr<lastlin)
* {
*  intptr=tokptr;
*  outdeci(*intptr);
*  tokptr+=3;
*  while(*tokptr!=EOLTOK)
*  {
*   token=gettok;
*   if(token>=0x80)
*   {
*    lvarcon();
*   }
*   else
*   {
*    lkeyword();
*   }
*  }
*  nl();
*  ++tokptr;
* }
* return;
*}
*
*
CLIST6:	LDD    TOKPTR
	CPD    LASTLIN
	BNE    CLIST7
	RTS
CLIST7:	LDX    TOKPTR
	LDD    0,X
	INX
	INX
	INX
	STX    TOKPTR
	JSR    OUTDECI
CLIST8:	LDX    TOKPTR
	LDAA   0,X
	CMPA   #EOLTOK
	BEQ    CLIST9
	TSTA
	BMI    CLIST10
	JSR    LKEYWORD
	BRA    CLIST8
CLIST10:	JSR    LVARCON
	BRA    CLIST8 
CLIST9:	JSR    NL
	LDX    TOKPTR
	INX
	STX    TOKPTR
	BRA    CLIST6
*
*
*/***** lvarcon() *****/
*
*lvarcon()
*{
* char tok;
* tok=gettok;
* if(tok<=0x88)
* {
*  if(tok==FVARTOK) lfvar();
*  else if(tok==SVARTOK) lsvar();
*  else if(tok==IVARTOK) livar();
*  else { errcode=ILTOKERR; return; }
* }
*
*
* else if(tok<=0xA8)
* {
*  if(tok==FCONTOK) lfcon();
*  else if(tok==SCONTOK) lscon();
*  else if(tok==LCONTOK) llcon();
*  else if(tok==ICONTOK) licon();
*  else { errcode=ILTOKERR; return; }
* }
* else { errcode=ILTOKERR; return; }
*}
*
LVARCON:	EQU    *
	LDX    TOKPTR
	LDAA   0,X
	ANDA   #$EF          ; MASK OFF ARRAY INDICATOR IF PRESENT.
	LDX    #VCTOKTBL
LVARCON1:	CMPA   0,X
	BEQ    LVARCON2
	INX
	INX
	INX
	TST    0,X
	BNE    LVARCON1
	LDAA   #ILTOKERR
	JMP    RPTERR
LVARCON2:	LDX    1,X
	JSR    0,X
	RTS
*
*
VCTOKTBL:	EQU    *
	FCB    IVARTOK
	FDB    LIVAR
	FCB    SCONTOK
	FDB    LSCON
	FCB    LCONTOK
	FDB    LLCON
	FCB    ICONTOK
	FDB    LICON
	FCB    0                     ; END OF TABLE MARKER.
*
*
*
*
*/***** livar() *****/
*
*livar()
*{
* lfvar();
* outbyte('%');
* return;
*}
*
*
LIVAR:	EQU    *
	LDX    TOKPTR
	INX
	LDD    0,X
	ADDD   VARBEGIN
	INX
	INX
	STX    TOKPTR
	XGDX
LIVAR2:	LDAA   1,X
	JSR    OUTBYTE
	LDAA   2,X
	BEQ    LIVAR1
	JSR    OUTBYTE
LIVAR1:	RTS
*
*
LFCON:	EQU    *
	LDD    TOKPTR
	ADDD   #FSIZ+1
LFCON2:	XGDX
	LDAB   0,X
	INX
LFCON1:	LDAA   0,X
	JSR    OUTBYTE
	INX
	DECB
	BNE    LFCON1
	STX    TOKPTR
	RTS
*
*
*/***** licon() *****/
*
*licon()
*{
* int count;
* tokptr=tokptr+ISIZ+1;
* count=*tokptr++;
* while(count--)
* {
*  outbyte(*tokptr++);
* }
* return;
*}
*
*
LICON:	EQU    *
	LDD    TOKPTR
	ADDD   #ISIZ+1
	BRA    LFCON2
*
*
*/***** lscon() *****/
*
*lscon()
*{
* int count;
* ++tokptr;
* count=*tokptr++;
* while(count--)
* {
*  outbyte(*tokptr++);
* }
* return;
*}
*
*
LSCON:	EQU    *
	LDD    TOKPTR
	ADDD   #1
	BRA    LFCON2
*
*
*/***** llcon *****/
*
*llcon()
*{
* int *intptr;
* intptr=++tokptr;
* tokptr+=2;
* outdeci(*intptr);
* return;
*}
*
*
LLCON:	EQU    *
	LDX    TOKPTR
	INX
	LDD    0,X
	INX
	INX
	STX    TOKPTR
	JSR    OUTDECI
	RTS
*
*
*/***** lkeyword *****/
*
*lkeyword()
*{
* char *charptr,token;
* token=*tokptr++
*
*
LKEYWORD:	EQU    *
	LDX    TOKPTR
	LDAA   0,X
	INX
	STX    TOKPTR
	CMPA   #MSCNTOK
	BNE    LKEYWRD3
	JMP    LMSPCS
LKEYWRD3:	CMPA   #REMTOK
	BNE    LKEYWRD4
	JMP    LREMLINE
LKEYWRD4:	CMPA   #DATATOK
	BNE    LKEYWRD5
	JMP    LDATALIN
LKEYWRD5:	CMPA   #FUNCTFLG
	BNE    LKEYWRD6
	LDX    TOKPTR
	LDAA   0,X
	INX
	STX    TOKPTR
	LDX    #LFUNCTBL
	BRA    LKEYWRD1
LKEYWRD6:	LDX    #TOKTBL
LKEYWRD1:	CMPA   0,X
	BEQ    LKEYWRD2
	INX
	INX
	INX
	TST    0,X
	BNE    LKEYWRD1
	LDAA   #ILTOKERR
	JMP    RPTERR
LKEYWRD2:	LDX    1,X
	JMP    PL
*
*
LMSPCS:	EQU    *
	LDX    TOKPTR
	LDAB   0,X
	INX
	STX    TOKPTR
	LDAA   #$20
LMSPCS1:	JSR    OUTBYTE
	DECB
	BNE    LMSPCS1
	RTS
*
*
LDATALIN:	EQU    *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -