00001 *************************
00002 *
00003 * OUTERL.ASM
00004 * MDJ 10-31-91 REVISION
00005 *
00006 * CF83 LOAD INTERPRETER
00007 *
00008 *************************
00009 *
00010 * MUST ALTER  ON
00011 * ==========  ==
00012 * CF83COR3    ZADDRH
00013 * CF83COR4    ZADDRH
00014 * CF83COR5    ZOUTL
00015 *
00016 *************************
00017 *
00018 COLON   EQU     $07
00019 DPDP    EQU     $1B
00020 BLKL    EQU     $2B
00021 STATEL  EQU     $2D
00022 MODE    EQU     $2E
00023 TOINL   EQU     $01D1
00024 CONTXT  EQU     $098B
00025 TYPEF   EQU     $465F
00026 ZITERT  EQU     $5328
00027 ZLOCKC  EQU     $5336
00028 ZERCHC  EQU     $59D7
00029 ZUMBRC  EQU     $5A69
00030 ZQMC    EQU     $5ADC
00031 ZENDB   EQU     $5B0C
00032 ZOKENX  EQU     $5B0E
00033 ZOMPLX  EQU     $5BB3
00034 ZPNUMX  EQU     $51A9
00035 NOTVAL  EQU     $515E
00036 ST2CVL  EQU     $518C
00037         ORG     $5BFC
00038 *
00039 *************************
00040 *
00041 * ZOUTL IS THE LOAD
00042 * INTERPRETER MAIN LOOP
00043 *
00044 *************************
00045 *
00046 ZOUTL   FDB     *+2
00047         FDB     COLON
00048 OUTL1   FDB     ZLKNML
00049 OUTL2   FDB     ZLOCKC
00050         FDB     TOKBLK
00051         FDB     TOKCHL
00052         FDB     ZERCHC
00053         FDB     FNDCHL
00054         FDB     ZUMBRC
00055         FDB     VALCHL
00056         FDB     ST2CHL
00057         FDB     CPNUML
00058 *
 
 
 
 
 
 
 
 
00059 *************************
00060 *
00061 * LOADR2 PERFORMS THE
00062 * DENESTING BACK TO THE
00063 * BLOCK (OR TERMINAL
00064 * INPUT) BUFFER FROM
00065 * WHICH LOAD WAS EXECUTED
00066 *
00067 *************************
00068 *
00069 LOADR2  FDB     *+2
00070         PSHS    A,B
00071         PULU    Y       GET NEXT INSTRUCTION ADDRESS #
00072         PULU    A,B     GET PREVIOUS OFFSET
00073         STD     TOINL
00074         PULU    A,B     GET PREVIOUS BLOCK NUMBER
00075         STD     BLKL
00076         PULS    A,B
00077         LDX     ,Y++
00078         JMP     [,X++]
00079 *
00080 *************************
00081 *
00082 * BLKNML PUSHES THE
00083 * BLOCK NUMBER TO THE
00084 * U-STACK
00085 *
00086 *************************
00087 *
00088 ZLKNML  FDB     *+2
00089         PSHS    A,B
00090         LDD     BLKL
00091         PSHU    A,B
00092         PULS    A,B
00093         LDX     ,Y++
00094         JMP     [,X++]
00095 *
00096 *************************
00097 *
00098 * TOKBLK POINTS TO THE 
00099 * TOKEN AT THE BLOCK
00100 *
00101 *************************
00102 *
00103 TOKBLK  FDB     *+2
00104         PSHS    A,B,X
00105         PULU    A,B     PULL BLOCK ADDRESS FROM U-STACK
00106         STD     ZADDRH  TEMPORARILY STORE IT
00107         ADDD    #1025   SET END OF BUFFER
00108         STD     ZENDB
00109         LDD     ZADDRH  RELOAD  BLOCK ADDRESS
00110         ADDD    TOINL   SET CHARACTER OFFSET POINTER
00111         PSHU    A,B
00112         JSR     ZOKENX  GO MOVE TOKEN
00113         PULU    A,B     GET FLAG FROM U-STACK
00114         PULU    X       GET CHARACTER POINTER FROM U-STACK
00115         CMPD    #0      FALSE FLAG? (NOT END?)
00116         BEQ     TOKENA  GO IF YES (NOT END!)
 
 
 
 
 
 
 
 
00117         LDX     ZADDRH  RESET POINTER TO START OF BUFFER
00118 TOKENA  PSHU    A,B
00119         TFR     X,D     MOVE BUFFER MOINTER TO D
00120         SUBD    ZADDRH  CONVERT TO OFFSET
00121         STD     TOINL   STORE CHARACTER OFFSET
00122         PULS    A,B,X
00123         LDX     ,Y++
00124         JMP     [,X++]
00125 ZADDRH  RMB     2
00126 *
00127 *************************
00128 *
00129 * TOKCHL CHECKS IF AT END
00130 * OF BLOCK BUFFER
00131 *
00132 *************************
00133 *
00134 TOKCHL  FDB     *+2
00135         PSHS    X
00136         PULU    X       GET TOKEN FLAG
00137         CMPX    #0      NOT END OF BUFFER?
00138         BEQ     TOKCL1  GO IF YES (NOT END!)
00139         PULS    X
00140         PULS    Y       ADJUST U-STACK TO SIMULATE "SEMI"
00141         LDX     #LOADR2 EXIT TO CALLING BLOCK OR TERMINAL
00142         JMP     [,X++]
00143 TOKCL1  LDX     [CONTXT] GET LOCATION OF FIRST WORD IN
00144 *                         SEARCH LIST
00145         PSHU    X       PUSH IT TO U-STACK
00146         PULS    X       CONTINUE TO ZERCHC
00147         LDX     ,Y++
00148         JMP     [,X++]
00149 *
00150 *************************
00151 *
00152 * FNDCHL CHECKS IF TOKEN
00153 * WAS FOUND
00154 *
00155 *************************
00156 *
00157 FNDCHL  FDB     *+2
00158         PSHS    X
00159         PULU    X       GET SEARCH FLAG
00160         CMPX    #0      WORD MATCHED?
00161         BNE     FNDCL1  GO IF NOT MATCHED
00162         PULS    X
00163         LDX     #STACHL
00164         JMP     [,X++]
00165 FNDCL1  PULS    X
00166         LDX     ,Y++
00167         JMP     [,X++]
00168 *
00169 *************************
00170 *
00171 * VALCHL CHECKS IF NUMBER
00172 * WAS VALIDLY CONVERTED
00173 *
00174 *************************
 
 
 
 
 
 
 
 
00175 *
00176 VALCHL  FDB     *+2
00177         PSHS    A,B,X,Y
00178         PULU    X       GET NUMBER FLAG
00179         PSHU    X       RE-PUSH IT TO STACK
00180         CMPX    #0      VALID NUMBER?
00181         BNE     VALCL1  GO IF YES
00182         JSR     NOTVAL  LOW MEMORY ROUTINE
00183         PULS    A,B,X,Y
00184         LDX     #ZQMC
00185         JMP     [,X++]
00186 VALCL1  PULS    A,B,X,Y
00187         LDX     ,Y++
00188         JMP     [,X++]
00189         NOP
00190         NOP
00191         NOP
00192         NOP
00193         NOP
00194         NOP
00195         NOP
00196         NOP
00197         NOP
00198         NOP
00199 *
00200 *
00201 *************************
00202 *
00203 * ST2CHL CHECKS THE
00204 * SYSTEM STATE
00205 *
00206 *************************
00207 *
00208 ST2CHL  FDB     *+2
00209         JMP     ST2CVL  LOW MEMORY ROUTINE
00210         NOP
00211         NOP
00212         NOP
00213         NOP
00214         NOP
00215         NOP
00216         NOP
00217         NOP
00218         NOP
00219         NOP
00220         NOP
00221         NOP
00222         NOP
00223         NOP
00224         NOP
00225         NOP
00226         NOP
00227         NOP
00228         NOP
00229         NOP
00230         NOP
00231         NOP
00232 *
 
 
 
 
 
 
 
 
00233 *************************
00234 *
00235 * CPNUML COMPILES THE
00236 * VALID NUMBER TO THE
00237 * DICTIONARY
00238 *
00239 *************************
00240 *
00241 CPNUML  FDB     *+2
00242         JSR     ZPNUMX
00243         LDY     #OUTL2  ADJUST INNER INTERPRETER
00244         LDX     #ZLKNML
00245         JMP     [,X++]
00246 *
00247 *************************
00248 *
00249 * STACHL CHECKS THE
00250 * SYSTEM STATE
00251 *
00252 *************************
00253 *
00254 STACHL  FDB     *+2
00255         PSHS    A
00256         LDA     STATEL  LOAD STATE
00257         CMPA    #0      IS IT ZERO?
00258         BEQ     STACL1  GO IF YES
00259         LDX     #MODCHL
00260         BRA     STACL2
00261 STACL1  LDX     #EXECUL
00262 STACL2  PULS    A
00263         JMP     [,X++]
00264 *
00265 *************************
00266 *
00267 * EXECUL EXECUTES THE
00268 * VALID KEYWORD
00269 *
00270 *************************
00271 *
00272 EXECUL  FDB     *+2
00273         CLR     MODE
00274         LDY     #OUTL1  RESET INNER INTERPRETER
00275         PULU    X
00276         JMP     [,X++]
00277 *
00278 *************************
00279 *
00280 * MODCHL CHECKS THE
00281 * SYSTEM MODE
00282 *
00283 *************************
00284 *
00285 MODCHL  FDB     *+2
00286         PSHS    A
00287         LDA     MODE    GET MODE
00288         CMPA    #0      IS IT ZERO?
00289         BEQ     MODCL1  GO IF YES
00290         LDX     #EXECUL
 
 
 
 
 
 
 
 
00291         BRA     MODCL2
00292 MODCL1  LDX     #COMPLL
00293 MODCL2  PULS    A
00294         JMP     [,X++]
00295 *
00296 *************************
00297 *
00298 * COMPLL COMPILES THE
00299 * VALID KEYWORD TO THE
00300 * DICTIONARY
00301 *
00302 *************************
00303 *
00304 COMPLL  FDB     *+2
00305         JSR     ZOMPLX
00306         LDY     #OUTL2  ADJUST INNER INTERPRETER
00307         LDX     #ZLKNML
00308 ZENDM1  JMP     [,X++]
00309         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
