00001 *************************
00002 *
00003 * START.ASM
00004 * MDJ 06-13-91
00005 *
00006 * CF83 LOW MEMORY 
00007 * ROUTINES
00008 *
00009 *************************
00010 *
00011 * MUST ALTER  ON
00012 * ==========  ==
00013 * START2      ZQUITP
00014 * OUTER       ZITERT
00015 * OUTERL      ZITERT
00016 * OUTERL      ZLOCKC
00017 * CF83COR0    ZQUITP
00018 * CF83COR0    ZITERT
00019 * CF83COR0    ZLOCKP
00020 * CF83COR2    ZLOCKP
00021 * CF83COR2    ZLOCKQ
00022 * CF83COR2    ZLOCKW
00023 * CF83COR3    ZLOCKC
00024 * CF83COR4    ZITERT
00025 * CF83COR4    ZLOCKC
00026 * CF83COR5    ZITERT
00027 * CF83COR5    ZLOCKC
00028 *
00029 *************************
00030 *
00031 ZOUTER  EQU     $596D
00032 ZESTR1  EQU     $5582
00033 ZESTR2  EQU     $5586
00034 STATEL  EQU     $2D
00035 MODE    EQU     $2E
00036 BB1A    EQU     $30
00037 BB2A    EQU     $32
00038 BB3A    EQU     $34
00039 BB4A    EQU     $36
00040 BB1B    EQU     $38
00041 BB2B    EQU     $3A
00042 BB3B    EQU     $3C
00043 BB4B    EQU     $3E
00044 BB1O    EQU     $40
00045 BB2O    EQU     $41
00046 BB3O    EQU     $42
00047 BB4O    EQU     $43
00048 BB1U    EQU     $44
00049 BB2U    EQU     $45
00050 BB3U    EQU     $46
00051 BB4U    EQU     $47
00052 DIVDND  EQU     $CB
00053 MLTIC1  EQU     $CB
00054 MLTIC2  EQU     $CD
00055 DIVSOR  EQU     $CF
00056 R16     EQU     $D1
00057 DCDRV   EQU     $EB
00058 DCTRK   EQU     $EC
 
 
 
 
 
 
 
 
00059 DSEC    EQU     $ED
00060 DCBPT   EQU     $EE
00061 DCSTA   EQU     $F0
00062 LDB     EQU     $FA
00063 TOINL   EQU     $01D1
00064 SPANL   EQU     $01D5
00065 NTIBL   EQU     $01D8
00066 TIB     EQU     $01DA
00067 M1616   EQU     $4327
00068 D3216   EQU     $43F6
00069 DKREAD  EQU     $4776
00070 DKWRIT  EQU     $4782
00071         ORG     $5300
00072 START   LBRA    ZEND+1  BRANCH PAST LOW MEMORY ROUTINES
00073 *
00074 *************************
00075 *
00076 * LOW MEMORY ROUTINE FOR
00077 * "QUIT"
00078 *
00079 *************************
00080 *
00081 ZQUITP  LDS     #$0800
00082         PSHS    X
00083         LDX     #TIB
00084         STX     LDB
00085         LDX     #0
00086         STX     NTIBL
00087         STX     TOINL
00088         CLR     MODE
00089         CLR     SPANL
00090         CLR     STATEL
00091         LDY     #ZOUTER
00092         PULS    X
00093         LDX     ,Y++
00094         JMP     [,X++]
00095 *
00096 *************************
00097 *
00098 * LOW MEMORY ROUTINE FOR
00099 * "LITERAL"
00100 *
00101 *************************
00102 *
00103 ZITERT  FDB     *+2
00104         PSHS    A,B
00105         LDD     ,Y++
00106         PSHU    A,B
00107         PULS    A,B
00108         LDX     ,Y++
00109         JMP     [,X++]
00110 *
00111 *************************
00112 *
00113 * LOW MEMORY ROUTINE FOR
00114 * "BLOCK"
00115 *
00116 *************************
 
 
 
 
 
 
 
 
00117 *
00118 ZLOCKC  FDB     *+2
00119 ZLOCKP  PSHS    A,B,X,Y
00120         PULU    A,B     GET BLOCK NUMBER
00121         CMPD    BB1B    ALREADY IN BLOCK BUFFER #0?
00122         BNE     BLOCK1  GO IF NO
00123         LDD     BB1A    LOAD BUFFER #0 ADDRESS
00124         PSHU    A,B     PUSH IT TO STACK
00125         LDA     BB1O    LOAD BUFFER #0 ORDER NUMBER
00126         LBSR    BLCKA1  GO INCREMENT BUFFER ORDER
00127         CLR     BB1O    CLEAR BUFFER #0 ORDER NUMBER
00128         LDD     ,U      LOAD BUFFER #0 ADDRESS
00129         LBRA    BLOCKA  GO EXIT
00130 BLOCK1  CMPD    BB2B    ALREADY IN BLOCK BUFFER #1?
00131         BNE     BLOCK2  GO IF NO
00132         LDD     BB2A    LOAD BUFFER #1 ADDRESS
00133         PSHU    A,B     PUSH IT TO STACK
00134         LDA     BB2O    LOAD BUFFER #1 ORDER NUMBER
00135         LBSR    BLCKA1  GO INCREMENT BUFFER ORDER
00136         CLR     BB2O    CLEAR BUFFER #1 ORDER NUMBER
00137         LDD     ,U      LOAD BUFFER #1 ADDRESS
00138         LBRA    BLOCKA  GO EXIT
00139 BLOCK2  CMPD    BB3B    ALREADY IN BLOCK BUFFER #2?
00140         BNE     BLOCK3  GO IF NO
00141         LDD     BB3A    LOAD BUFFER #2 ADDRESS
00142         PSHU    A,B     PUSH IT TO STACK
00143         LDA     BB3O    LOAD BUFFER #2 ORDER NUMBER
00144         LBSR    BLCKA1  GO INCREMENT BUFFER ORDER
00145         CLR     BB3O    CLEAR BUFFER #2 ORDER NUMBER
00146         LDD     ,U      LOAD BUFFER #2 ADDRESS
00147         LBRA    BLOCKA  GO EXIT
00148 BLOCK3  CMPD    BB4B    ALREADY IN BLOCK BUFFER #3?
00149         BNE     BLOCK4  GO IF NO
00150         LDD     BB4A    LOAD BUFFER #3 ADDRESS
00151         PSHU    A,B     PUSH IT TO STACK
00152         LDA     BB4O    LOAD BUFFER #3 ORDER NUMBER
00153         LBSR    BLCKA1  GO INCREMENT BUFFER ORDER
00154         CLR     BB4O    CLEAR BUFFER #3 ORDER NUMBER
00155         LDD     ,U      LOAD BUFFER #3 ADDRESS
00156         LBRA    BLOCKA  GO EXIT
00157 BLOCK4  PSHS    A,B     SAVE BLOCK NUMBER
00158         INC     BB1O    INCREMENT BUFFER ORDER
00159         INC     BB2O
00160         INC     BB3O
00161         INC     BB4O
00162         LDA     #4
00163         CMPA    BB4O    IS BUFFER #3 MOST AGED?
00164         BEQ     BLOCK7  GO IF YES
00165         CMPA    BB3O    IS BUFFER #2 MOST AGED?
00166         BEQ     BLOCK6  GO IF YES
00167         CMPA    BB2O    IS BUFFER #1 MOST AGED?
00168         BEQ     BLOCK5  GO IF YES
00169         LDY     BB1A    BUFFER #0 IS MOST AGED
00170         PSHS    Y       SAVE BUFFER ADDRESS
00171         LDX     BB1B    OLD BLOCK NUMBER
00172         LDD     2,S     NEW BLOCK NUMBER
00173         STD     BB1B
00174         CLR     BB1O    NOW LEAST AGED
 
 
 
 
 
 
 
 
00175         LDA     BB1U
00176         CLR     BB1U    NO LONGER UPDATED
00177         CMPA    #0      WAS BUFFER UPDATED?
00178         BNE     BLOCK8  GO IF YES
00179         BRA     BLOCK9  GO IF NO
00180 BLOCK5  LDY     BB2A    BUFFER #1 IS MOST AGED
00181         PSHS    Y       SAVE BUFFER ADDRESS
00182         LDX     BB2B    OLD BLOCK NUMBER
00183         LDD     2,S     NEW BLOCK NUMBER
00184         STD     BB2B
00185         CLR     BB2O    NOW LEAST AGED
00186         LDA     BB2U
00187         CLR     BB2U    NO LONGER UPDATED
00188         CMPA    #0      WAS BUFFER UPDATED?
00189         BNE     BLOCK8  GO IF YES
00190         BRA     BLOCK9  GO IF NO
00191 BLOCK6  LDY     BB3A    BUFFER #2 IS MOST AGED
00192         PSHS    Y       SAVE BUFFER ADDRESS
00193         LDX     BB3B    OLD BLOCK NUMBER
00194         LDD     2,S     NEW BLOCK NUMBER
00195         STD     BB3B
00196         CLR     BB3O    NOW LEAST AGED
00197         LDA     BB3U
00198         CLR     BB3U    NO LONGER UPDATED
00199         CMPA    #0      WAS BUFFER UPDATED?
00200         BNE     BLOCK8  GO IF YES
00201         BRA     BLOCK9  GO IF NO
00202 BLOCK7  LDY     BB4A    BUFFER #3 IS MOST AGED
00203         PSHS    Y       SAVE BUFFER ADDRESS
00204         LDX     BB4B    OLD BLOCK NUMBER
00205         LDD     2,S     NEW BLOCK NUMBER
00206         STD     BB4B
00207         CLR     BB4O    NOW LEAST AGED
00208         LDA     BB4U
00209         CLR     BB4U    NO LONGER UPDATED
00210         CMPA    #0      WAS BUFFER UPDATED?
00211         BNE     BLOCK8  GO IF YES
00212         BRA     BLOCK9  GO IF NO
00213 BLOCK8  BSR     ZLOCKQ  GO GET DISK PARAMETERS
00214         LBSR    ZLOCKW  GO WRITE TO DISK
00215 BLOCK9  PULS    Y       BUFFER ADDRESS
00216         PSHU    Y       OUTPUT TO U-STACK
00217         PULS    X       NEW BLOCK NUMBER
00218         BSR     ZLOCKQ  GO GET DISK PARAMETERS
00219         LBSR    BLOCKX  GO READ DISK
00220 BLOCKA  PULS    A,B,X,Y EXIT ROUTINE
00221         LDX     ,Y++
00222         JMP     [,X++]
00223 ZLOCKQ  CMPX    #627    IS BLOCK # OUT OF RANGE?
00224         BLS     BLOCKR  GO IF NO
00225         JMP     ZESTR1  ERROR - RESTART
00226 BLOCKR  LDA     #0      DRIVE #0?
00227         CMPX    #157
00228         BLO     BLOCKS  GO IF YES
00229         INCA            DRIVE #1?
00230         CMPX    #314
00231         BLO     BLOCKS  GO IF YES
00232         INCA            DRIVE #2?
 
 
 
 
 
 
 
 
00233         CMPX    #471
00234         BLO     BLOCKS  GO IF YES
00235         INCA            IT IS DRIVE #3
00236 BLOCKS  STA     DCDRV   DISK DRIVE NUMBER
00237         CLR     MLTIC2  CALCULATE TRACK # AND SECTOR #
00238         STA     MLTIC2+1
00239         LDD     #157
00240         STD     MLTIC1
00241         JSR     M1616
00242         TFR     X,D
00243         SUBD    R16     DISK OFFSET #
00244         STD     MLTIC1
00245         CLR     MLTIC2
00246         LDA     #4
00247         STA     MLTIC2+1
00248         JSR     M1616
00249         LDD     R16     GROSS STARTING SECTOR #
00250         ADDD    #1
00251         CLR     DIVDND
00252         CLR     DIVDND+1
00253         STD     DIVDND+2
00254         LDA     #18
00255         CLR     DIVSOR
00256         STA     DIVSOR+1
00257         JSR     D3216
00258         LDA     DIVDND+3
00259         STA     DCTRK   TRACK NUMBER
00260         LDA     DIVSOR+1
00261         STA     DSEC    STARTING SECTOR NUMBER
00262         RTS
00263 BLOCKT  LDA     DCSTA   DISK STATUS BYTE
00264         CMPA    #0      DID ERROR OCCUR?
00265         BEQ     BLOCKU  GO IF NO
00266         JMP     ZESTR2  ERROR - RESTART
00267 BLOCKU  LEAY    256,Y   INCREMENT BUFFER POINTER
00268         STY     DCBPT
00269         INC     DSEC    INCREMENT SECTOR
00270         LDA     DSEC
00271         CMPA    #18     NEXT TRACK?
00272         BLS     BLOCKV  GO IF NO
00273         INC     DCTRK
00274         CLR     DSEC
00275         INC     DSEC
00276 BLOCKV  RTS
00277 ZLOCKW  STY     DCBPT   BUFFER POINTER
00278         JSR     DKWRIT  GO WRITE FIRST SECTOR
00279         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00280         JSR     DKWRIT  GO WRITE SECOND SECTOR
00281         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00282         JSR     DKWRIT  GO WRITE THIRD SECTOR
00283         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00284         JSR     DKWRIT  GO WRITE FOURTH SECTOR
00285         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00286         RTS
00287 BLOCKX  STY     DCBPT   BUFFER POINTER
00288         JSR     DKREAD  GO READ FIRST SECTOR
00289         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00290         JSR     DKREAD  GO READ SECOND SECTOR
 
 
 
 
 
 
 
 
00291         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00292         JSR     DKREAD  GO READ THIRD SECTOR
00293         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00294         JSR     DKREAD  GO READ FOURTH SECTOR
00295         BSR     BLOCKT  INCREMENT DISK PARAMETERS
00296         RTS
00297 BLCKA1  CMPA    BB1O    IS IT > BUFFER #0 ORDER NUMBER?
00298         BLS     BLCKA2  GO IF NO
00299         INC     BB1O    INCREMENT BUFFER #0 ORDER NUMBER
00300 BLCKA2  CMPA    BB2O    IS IT > BUFFER #1 ORDER NUMBER?
00301         BLS     BLCKA3  GO IF NO
00302         INC     BB2O    INCREMENT BUFFER #1 ORDER NUMBER
00303 BLCKA3  CMPA    BB3O    IS IT > BUFFER #2 ORDER NUMBER?
00304         BLS     BLCKA4  GO IF NO
00305         INC     BB3O    INCREMENT BUFFER #2 ORDER NUMBER
00306 BLCKA4  CMPA    BB4O    IS IT > BUFFER #3 ORDER NUMBER?
00307         BLS     BLCKA5  GO IF NO
00308         INC     BB4O    INCREMENT BUFFER #3 ORDER NUMBER
00309 BLCKA5  RTS
00310 ZEND    NOP
00311         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
