?? command1.asm
字號:
* 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 + -