00001 *************************
00002 *
00003 * SAH.ASM
00004 * MDJ 12-03-90
00005 *
00006 * DISK OPERATORS
00007 *
00008 *************************
00009 *
00010 * REQUIRES: DISKOP
00011 *
00012 *************************
00013 *
00014 DCDRV   EQU     $EB
00015 DCTRK   EQU     $EC
00016 DCSEC   EQU     $ED
00017 DCBPT   EQU     $EE
00018 DKREAD  EQU     $4776
00019 DKWRIT  EQU     $4782
00020         ORG     $50F0
00021 *
00022 *************************
00023 *
00024 * BUFPAR
00025 * (u1 u2 u3 addr -- )
00026 * SETS THE BUFFER 
00027 * PARAMETERS
00028 *
00029 *************************
00030 *
00031 BUFPAR  PSHS    A,B
00032         PULU    A,B     BUFFER ADDRESS
00033         STD     DCBPT
00034         PULU    A,B     SECTOR NUMBER
00035         STB     DCSEC
00036         PULU    A,B     TRACK NUMBER
00037         STB     DCTRK
00038         PULU    A,B     DRIVE NUMBER
00039         STB     DCDRV
00040         PULS    A,B
00041         RTS
00042 *
00043 *************************
00044 *
00045 * BUFIN
00046 * (u1 u2 u3 addr -- )
00047 * DRIVE u1, TRACK u2,
00048 * SECTOR u3 IS READ INTO
00049 * THE BUFFER BEGINNING AT
00050 * addr
00051 *
00052 *************************
00053 *
00054 BUFIN   JSR     BUFPAR
00055         JSR     DKREAD
00056         RTS
00057 *
00058 *************************
 
 
 
 
 
 
 
 
00059 *
00060 * BUFOUT
00061 * (u1 u2 u3 addr -- )
00062 * THE BUFFER BEGINNING AT
00063 * addr IS WRITTEN OUT TO
00064 * DRIVE u1, TRACK u2,
00065 * SECTOR u3
00066 *
00067 *************************
00068 *
00069 BUFOUT  JSR     BUFPAR
00070         JSR     DKWRIT
00071         RTS
00072 ZDLT    PSHS    A,B,X,Y MODIFIED DLT ROUTINE (SEE P. 130)
00073         LDD     ,U      D2 HIGH BYTES
00074         ADDD    4,U     + D1 HIGH BYTES
00075         BNE     DLTS    GO IF NOT D2HB = D1HB = 0
00076         LDD     2,U     D2 LOW BYTES
00077         BEQ     DLTB    IF D2LB = 0, FLAG = FALSE
00078         BLT     DLTQ    GO IF D2LB < 0
00079         LDD     6,U     D1 LOW BYTES
00080         BEQ     DLTA    IF D1LB = 0, FLAG = TRUE
00081         BLT     DLTB    IF D1LB < 0, FLAG = FALSE
00082         BRA     DLTR    GO IF D1LB > 0
00083 DLTQ    LDD     6,U     D1 LOW BYTES
00084         BGE     DLTA    IF D1LB >= 0, FLAG = TRUE
00085 DLTR    CMPD    2,U     IS D1LB < D2LB?
00086         BLT     DLTA    IF YES, FLAG = TRUE
00087         BRA     DLTB    IF NO, FLAG = FALSE
00088 DLTS    LDD     ,U      D2 HIGH BYTES
00089         BLT     DLT2    GO IF D2 < 0
00090         LDD     4,U     D1 HIGH BYTES
00091         BLT     DLTA    GO IF D1 < 0
00092 DLT1    CMPD    ,U      D1HB < D2HB?
00093         BLT     DLTA    GO IF YES
00094         BGT     DLTB    GO IF D1HB > D2HB
00095         LDD     6,U     D1 LOW BYTES
00096         CMPD    2,U     D1LB < D2LB?
00097         BLT     DLTA    GO IF YES
00098         BRA     DLTB    GO IF NO
00099 DLT2    LDD     4,U     D1 HIGH BYTES
00100         BLT     DLT1    GO IF D1 < 0
00101 DLTB    LDX     $8A     LOAD ZERO (FALSE FLAG)
00102         BRA     DLT3
00103 DLTA    LDX     #$FFFF  LOAD -1 (TRUE FLAG)
00104 DLT3    LEAU    8,U     CLEAR DOUBLE NUMBERS FROM STACK
00105         PSHU    X       FLAG TO STACK
00106         PULS    A,B,X,Y
00107 ZEND    RTS
00108         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
