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

📄 basic11.sdi

📁 proteus 仿真实例
💻 SDI
📖 第 1 页 / 共 5 页
字号:
E123,08,,         INX
E124,20 F6,,         BRA    PL1
E126,39,PL2:, PL2:    RTS
,,, *
,,,
,,, *        /***** parse() *****/
,,,
,,, *parse()
,,, *{
,,, * int num;
,,, * tbufptr=tknbuf;                /* initalize the token buffer pointer */
,,, *
,,, PARSE:  EQU    *
E127,DE 4B,,         LDX    TKNBUFS          ; Get the start of the token buffer
E129,DF 02,,         STX    TBUFPTR
,,, *
,,, * if(num=getlinum())             /* get line number if present */
,,, * {
,,, *  if(*ibufptr==EOL)             /* was line # followed by CR? */
,,, *  {                             /* yes. */
,,, *   delline(num);                /* go delete the line from the prog buffer */
,,, *   return;
,,, *  }
,,, *  immid=0;                      /* flag as not immidiate */
,,, *  putlinum(num);                /* put line number in buffer */
,,, * }
,,, *  else immid=1;                  /* if no line # flag as immidiate*/
,,, *
E12B,8D 3F,,         BSR    GETLINUM
E12D,24 19,,         BCC    PARSE2
E12F,36,,         PSHA
E130,BD E3 C3,,         JSR    GETCHR
E133,81 0D,,         CMPA   #EOL
E135,32,,         PULA
E136,26 09,,         BNE    PARSE1
E138,BD EB A1,,         JSR    DELLINE
E13B,DE 0A,,         LDX    VAREND
E13D,08,,         INX
E13E,DF 2D,,         STX    STRASTG
E140,39,PARSE7:, PARSE7: RTS
E141,7F 00 19,PARSE1:, PARSE1: CLR    IMMID
E144,8D 6E,PARSE8:, PARSE8: BSR    PUTLINUM
E146,20 10,,         BRA    PARSE3
E148,BD E3 C3,PARSE2:, PARSE2: JSR    GETCHR
E14B,81 0D,,         CMPA   #EOL
E14D,27 F1,,         BEQ    PARSE7
E14F,86 01,,         LDAA   #1
E151,97 19,,         STAA   IMMID
E153,CC 00 00,,         LDD    #0
E156,20 EC,,         BRA    PARSE8
,,, *
,,, * if(errcode) return;             /* if line number error, return */
,,, * xlate();                        /* if translation error, return */
,,, * if(errcode) return;
,,, * if(immid) runline();            /* if immidiate mode run 1 line */
,,, *  else storlin();                /* if not store pgm line */
,,, * return;                         /* go get next line */
,,, *}
,,, *
E158,BD E1 E2,PARSE3:, PARSE3: JSR    XLATE
E15B,7D 00 19,,         TST    IMMID
E15E,27 03,,         BEQ    PARSE5
E160,7E F2 2E,,         JMP    RUNLINE      ; GO RUN THE LINE & RETURN.
E163,BD EB 7A,PARSE5:, PARSE5: JSR    STORLIN      ; GO STORE LINE & RETURN.
E166,DE 0A,,         LDX    VAREND
E168,08,,         INX
E169,DF 2D,,         STX    STRASTG
E16B,39,,         RTS
,,, *
,,,
,,, *        /***** getlinum *****/
,,,
,,, *getlinum()
,,, *{
,,, * int num;
,,, * num=0;
,,, *
,,, GETLINUM:       EQU    *
,,, *
,,, *
E16C,18 3C,,         PSHY
E16E,4F,,         CLRA
E16F,36,,         PSHA
E170,36,,         PSHA
E171,18 30,,         TSY
,,, *
,,, * if(numeric(*ibufptr)==0) return(0);    /* if 1st char not numeric, rtn 0 */
,,, *
E173,DE 00,,         LDX    IBUFPTR
E175,A6 00,,         LDAA   0,X
E177,8D 42,,         BSR    NUMERIC
E179,24 10,,         BCC    GTLNUM4
,,, *
,,, * while(numeric(*ibufptr))       /* while *ibufptr is numeric */
,,, * {
,,, *  num=num*10+(*ibufptr-'0');    /* get a digit */
,,, *  ibufptr++;                    /* advance input buffer pointer */
,,, *  if(num<=0) { errcode=LINRANG; return(0); }
,,, * }
,,, * return(num);
,,, *}
,,, *
E17B,A6 00,GTLNUM2:, GTLNUM2:        LDAA   0,X
E17D,8D 3C,,         BSR    NUMERIC
E17F,25 11,,         BCS    GTLNUM3
E181,0D,,         SEC
E182,18 EC 00,GTLNUM1:, GTLNUM1:        LDD    0,Y
E185,26 04,,         BNE    GTLNUM4
E187,86 12,,         LDAA   #LINENERR
E189,20 0D,,         BRA    GTLNUM5
E18B,31,GTLNUM4:, GTLNUM4:        INS
E18C,31,,         INS
E18D,18 38,,         PULY
E18F,DF 00,,         STX    IBUFPTR
E191,39,,         RTS
E192,8D 07,GTLNUM3:, GTLNUM3:        BSR    ADDDIG
E194,2A E5,,         BPL    GTLNUM2
E196,86 01,,         LDAA   #LINRANG
E198,7E EA 98,GTLNUM5:, GTLNUM5:        JMP    RPTERR
,,, *
,,, *
,,, ADDDIG: EQU    *
E19B,18 EC 00,,         LDD    0,Y
E19E,05,,         ASLD
E19F,05,,         ASLD
E1A0,18 E3 00,,         ADDD   0,Y
E1A3,05,,         ASLD
E1A4,18 ED 00,,         STD    0,Y
E1A7,E6 00,,         LDAB   0,X
E1A9,08,,         INX
E1AA,C0 30,,         SUBB   #'0'
E1AC,4F,,         CLRA
E1AD,18 E3 00,,         ADDD   0,Y
E1B0,18 ED 00,,         STD    0,Y
E1B3,39,,         RTS
,,, *
,,, *
,,, *        /***** putlinum *****/
,,,
,,, *putlinum(lnum)
,,, *int lnum;
,,, *{
,,, * putint(lnum);          /* put line # in token buffer */
,,, * *tbufptr++=0;          /* hold place for length of line */
,,, * return;
,,, *}
,,, *
,,, PUTLINUM:       EQU    *
E1B4,BD E3 D4,,         JSR    PUTDTOK
E1B7,4F,,         CLRA
E1B8,7E E3 D7,,         JMP    PUTTOK
,,, *
,,, *        /***** numeric() *****/
,,,
,,, *numeric(c)
,,, *char c;
,,, *{
,,, * c=c&127;
,,, * return((c>='0')&(c<='9'));
,,, *}
,,, *
,,, NUMERIC:        EQU    *
E1BB,81 30,,         CMPA   #'0'
E1BD,25 06,,         BLO    NUMERIC1
E1BF,81 39,,         CMPA   #'9'
E1C1,22 02,,         BHI    NUMERIC1
E1C3,0D,,         SEC
E1C4,39,,         RTS
E1C5,0C,NUMERIC1:, NUMERIC1:       CLC
E1C6,39,,         RTS
,,,
,,, *        /***** alpha() *****/
,,,
,,, *alpha(c)
,,, *char c;
,,, *{
,,, * c=c&127;
,,, * return((c>='A')&(c<='Z'));
,,, *}
,,, *
,,, ALPHA:  EQU    *
E1C7,81 41,,         CMPA   #'A'
E1C9,25 0E,,         BLO    ALPHA1
E1CB,81 5A,,         CMPA   #'Z'
E1CD,23 08,,         BLS    ALPHA2
E1CF,81 61,,         CMPA   #'a'
E1D1,25 06,,         BLO    ALPHA1
E1D3,81 7A,,         CMPA   #'z'
E1D5,22 02,,         BHI    ALPHA1
E1D7,0D,ALPHA2:, ALPHA2: SEC
E1D8,39,,         RTS
E1D9,0C,ALPHA1:, ALPHA1: CLC
E1DA,39,,         RTS
,,,
,,, *        /***** alphanum *****/
,,,
,,, *alphanum(c)
,,, *char c;
,,, *{ return ((alpha(c)) | (numeric(c))); }
,,, *
,,, ALPHANUM:       EQU    *
E1DB,8D EA,,         BSR    ALPHA
E1DD,24 01,,         BCC    ALPHANU1
E1DF,39,,         RTS
E1E0,20 D9,ALPHANU1:, ALPHANU1:       BRA    NUMERIC
,,, *
,,, */*****************************************
,,, *              xlate()
,,, * translate the input buffer into tokenized
,,, * form placing the results into tknbuf
,,, ******************************************/
,,, *
,,, *xlate()
,,, *{
,,, * while(*ibufptr!=EOL)
,,, * {
,,, *  ifwhflag=0;              /* set IF flag to zero */
,,, *  blanks();              /* skip all blanks */
,,, *  if(match("DATA")) xdata();
,,, *  else if(match("LET")) xlet();
,,, *  else if(match("READ")) xread();
,,, *  else if(match("RESTORE")) xrestore();
,,, *  else if(match("GOSUB")) xgosub();
,,, *  else if(match("GOTO")) xgoto();
,,, *  else if(match("ON")) xon();
,,, *  else if(match("RETURN")) xreturn();
,,, *  else if(match("IF")) xif();
,,, *  else if(match("INPUT")) xinput();
,,, *  else if(match("PRINT")) xprint();
,,, *  else if(match("FOR")) xfor();
,,, *  else if(match("NEXT")) xnext();
,,, *  else if(match("STOP")) xstop();
,,, *  else if(match("ENDWH")) xendwh();
,,, *  else if(match("END")) xend();
,,, *  else if(match("REM")) xrem();
,,, */*else if(match("SWAP")) xswap();*/
,,, *  else if(match("TRON")) xtron();
,,, *  else if(match("TROFF")) xtroff();
,,, *  else if(match("WHILE")) xwhile();
,,, */*else if(match("ONIRQ")) xonirq();*/
,,, *  else ximplet();                 /* if no keyword, assume implied LET */
,,, *  if(errcode) return;
,,, *  blanks();
,,, *  if(*ibufptr==MIDEOL) { xmideol(); continue; }
,,, *  if(*ibufptr!=EOL) { errcode=SYTXERR; return; }
,,, *  }
,,, * *tbufptr=EOLTOK;               /* put token eol in token buffer */
,,, * tknbuf[2]=tbufptr-tknbuf+1;    /* put line length into tokenized line */
,,, * return;
,,, *}
,,, *
,,, XLATE:  EQU    *
E1E2,BD E3 C3,,         JSR    GETCHR      ; GET NEXT CHAR.
E1E5,81 0D,,         CMPA   #EOL        ; AT THE END OF THE LINE?
E1E7,27 4F,,         BEQ    XLATE1      ; YES.
E1E9,7F 00 1A,,         CLR    IFWHFLAG    ; NOT XLATING "IF" OR "WHILE"
E1EC,BD E3 7A,,         JSR    BLANKS      ; SKIP BLANKS.
E1EF,CE E2 46,,         LDX    #KEYWORDS   ; POINT TO KEYWORD TABLE.
E1F2,BD E3 A5,XLATE4:, XLATE4: JSR    STREQ       ; IS KEYWORD IS IN THE INPUT BUFFER?
E1F5,25 13,,         BCS    XLATE2      ; YES GO PROCESS IT.
E1F7,08,XLATE3:, XLATE3: INX                ; NO. POINT TO NEXT CHAR.
E1F8,A6 00,,         LDAA   0,X         ; AT THE END OF THIS KEYWORD?
E1FA,26 FB,,         BNE    XLATE3      ; NO.
E1FC,C6 04,,         LDAB   #4          ; NUMBER OF BYTES TO SKIP.
E1FE,3A,,         ABX
E1FF,6D 00,,         TST    0,X         ; AT THE END OF THE TABLE?
E201,26 EF,,         BNE    XLATE4      ; NO. CHCK FOR NEXT KEYWORD.
E203,86 02,,         LDAA   #IMLETTOK   ; ASSUME AN IMPLIED LET.
,,, *        JSR    PUTTOK       ; PUT TOKEN IN BUFFER.
E205,CE E4 1C,,         LDX    #XIMPLET    ; GET ADDR OF XLATION ROUTINE.
,,, *        JSR    0,X          ; GO DO IT.
,,, *        BRA    XLATE6       ; GO FINISH UP.
E208,20 04,,         BRA    XLATE9
E20A,A6 01,XLATE2:, XLATE2: LDAA   1,X         ; GET KEYWORD TOKEN.
E20C,EE 02,,         LDX    2,X         ; GET ADDR OF XLATION ROUTINE.
E20E,BD E3 D7,XLATE9:, XLATE9: JSR    PUTTOK      ; PUT TOKEN IN BUFFER.
E211,81 0C,,         CMPA   #DATATOK    ; SPECIAL CASE, DONT SKIP BLANKS AFTER KEYWORD.
E213,27 07,,         BEQ    XLATE5
E215,81 0A,,         CMPA   #REMTOK     ; SAME SPECIAL CASE AS FOR DATA.
E217,27 03,,         BEQ    XLATE5
E219,BD E3 7A,,         JSR    BLANKS      ; SKIP BLANKS BETWEEN KEYWORD & NEXT OBJECT.
E21C,AD 00,XLATE5:, XLATE5: JSR    0,X         ; GO DO IT.
E21E,BD E3 7A,XLATE6:, XLATE6: JSR    BLANKS      ; SKIP BLANKS.
E221,BD E3 CA,,         JSR    GETNXCHR    ; GET NEXT CHAR.
E224,81 3A,,         CMPA   #MIDEOL     ; IS IT A MID EOL?
E226,26 07,,         BNE    XLATE7      ; NO. CHCK FOR EOL.
E228,86 7A,,         LDAA   #MEOLTOK    ; GET MID EOL TOKEN.
E22A,BD E3 D7,,         JSR    PUTTOK      ; PUT IT IN BUFFER.
E22D,20 B3,,         BRA    XLATE       ; CONTINUE.
E22F,81 0D,XLATE7:, XLATE7: CMPA   #EOL        ; EOL?
E231,27 05,,         BEQ    XLATE1      ; YES. FINISH UP.
E233,86 02,,         LDAA   #SYTXERR    ; NO. SYNTAX ERROR.
E235,7E EA 98,,         JMP    RPTERR      ; REPORT XLATION ERROR.
E238,86 7D,XLATE1:, XLATE1: LDAA   #EOLTOK     ; GET EOL TOKEN.
E23A,BD E3 D7,,         JSR    PUTTOK      ; PUT IT IN BUFFER.
E23D,DC 02,,         LDD    TBUFPTR     ; GET TOKEN BUFFER POINTER.
E23F,93 4B,,         SUBD   TKNBUFS     ; Compute the TOKEN BUFFER LENGTH.
E241,DE 4B,,         LDX    TKNBUFS     ; POINT TO BUFFER.
E243,E7 02,,         STAB   2,X         ; STORE LENGTH.
E245,39,,         RTS                ; RETURN.
,,, *
,,, *
,,, *        KEYWORD LOOK UP TABLE
,,, *
,,, *
,,, KEYWORDS:       EQU    *
E246,44 41 54 41,DATA:, DATA:   FCC    "DATA"
E24A,00,,         FCB    0
E24B,0C,,         FCB    DATATOK
E24C,E3 FC,,         FDB    XDATA
E24E,4C 45 54,LET:, LET:    FCC    "LET"
E251,00,,         FCB    0
E252,01,,         FCB    LETTOK
E253,E4 1C,,         FDB    XLET
E255,52 45 41 44,READ:, READ:   FCC    "READ"
E259,00,,         FCB    0
E25A,0D,,         FCB    READTOK
E25B,EA 58,,         FDB    XREAD
E25D,52 45 53 54 4F 52,RESTORE:, RESTORE:        FCC    "RESTORE"
,,, RESTORE:        FCC    "RESTORE"
E264,00,,         FCB    0
E265,0E,,         FCB    RESTRTOK
E266,E3 FB,,         FDB    XRESTORE
E268,47 4F 53 55 42,GOSUB:, GOSUB:  FCC    "GOSUB"
E26D,00,,         FCB    0
E26E,0F,,         FCB    GOSUBTOK
E26F,E3 F2,,         FDB    XGOSUB
E271,47 4F 54 4F,GOTO:, GOTO:   FCC    "GOTO"
E275,00,,         FCB    0
E276,12,,         FCB    GOTOTOK
E277,E3 F2,,         FDB    XGOTO
E279,4F 4E 54 49 4D 45,ONTIME:, ONTIME: FCC    "ONTIME"
E27F,00,,         FCB    0
E280,25,,         FCB    ONTIMTOK
E281,E8 D3,,         FDB    XONTIME
E283,4F 4E 49 52 51,ONIRQ:, ONIRQ:  FCC    "ONIRQ"
E288,00,,         FCB    0
E289,26,,         FCB    ONIRQTOK
E28A,E8 D3,,         FDB    XONIRQ
E28C,4F 4E 50 41 43 43,ONPACC:, ONPACC: FCC    "ONPACC"
E292,00,,         FCB    0
E293,28,,         FCB    ONPACTOK
E294,E8 F3,,         FDB    XONPACC
E296,4F 4E,ON:, ON:     FCC    "ON"
E298,00,,         FCB    0
E299,13,,         FCB    ONTOK
E29A,E8 85,,         FDB    XON
E29C,52 45 54 55 52 4E,RETURN:, RETURN: FCC    "RETURN"
E2A2,00,,         FCB    0
E2A3,14,,         FCB    RETNTOK
E2A4,E3 FB,,         FDB    XRETURN
E2A6,49 46,IIF:, IIF:    FCC    "IF"
E2A8,00,,         FCB    0

⌨️ 快捷键说明

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