Rev 627 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
;---------------------------------------------------------------
;
; :
; RQCHAN -
; RQCOM -
; RQBLN -
; RQTRACK -
; RQBLOCK -
; RQBADR -
;
;----------------------------------0201 0202 0801(cd7f3a)
;
;
_REPN EQU 5 ;
PDISK: LD (IX-_RQCHAN),C
LD HL,RQCHAN+1
INC DE
LD BC,8
EX DE,HL
RST 8
DB 3,0FEH
EI
PUSH IY
CALL DISK
POP IY
RET
PSCHK: EI
LD (RQCOM),A
LD (IX-_RQCHAN),C
PUSH HL
PUSH DE
PUSH IY
LD (RQBADR),DE
CALL DISK
POP IY
POP DE
POP HL
RET
;
;
;
DISK:
LD A,(RQCHAN) ;
LD HL,CHTBL ;
CALL _IND
PUSH HL ;
POP IY
LD A,(RQCOM) ;
CP _SETCH
JP Z,CHSET ;
LD A,(IY+DVALID) ;
CP 0FFH ;
?
LD A,_CHNFND ;
RET NZ
LD A,(RQCOM) ;
CP _GETCH ;?
JP Z,CHCHK ;
CP _RESET ;?
JR Z,DISK4 ;
CP _RECAL ;
?
JR Z,DISK4 ;
DEC (IX-_RQBLOCK) ;
LD DE,(RQTRACK) ;
LD L,(IY+_DTRACK)
LD H,(IY+_DTRACK+1) ;
DEC HL ;HL -
XOR A ;CLC
SBC HL,DE
LD A,_ADRERR ;
RET C
;DE -
LD A,(IY+_DHEADF) ;
ADD A,(IY+_DHEADR) ;
LD C,A
LD B,0
;DE-
;BC-
CALL DIV ;DE/BC=DE.HL
;DE-
;HL-
LD (IX-_RQHEAD),L ;
LD L,(IY+_DBEGCYL) ;
LD H,(IY+_DBEGCYL+1)
ADD HL,DE
LD (RQCYL),HL ;
DISK4: LD A,_REPN
LD (REP),A ;
DISK5: LD A,(RQCOM)
PUSH AF
CALL DEXEC ;
LD E,A
POP AF
LD (RQCOM),A
LD A,E
OR A
RET Z ;A = 00H -
LD (IX-_BUFT),0FFH ;
AND 80H
LD A,E
RET Z ;
DEC (IX-_REP)
JR NZ,DISK5 ;
RET ;A-
;-----------------------
;
DE:C=DE.HL
DIV: LD HL,0
LD A,16 ;
DIV1:
EX AF,AF'
ADD HL,HL ; HL
XOR A ;A=0
SLA E ; DE
RL D
ADC A,L
LD L,A
SBC HL,BC
INC DE
JR NC,DIV2
ADD HL,BC ;
DEC DE
DIV2: EX AF,AF'
DEC A ;
JR NZ,DIV1
RET
;-----------------------
;
DEXEC: LD A,(RQCOM) ;
LD H,A
CP _WRITE+1
LD A,_COMERR
RET NC
LD A,H
LD HL,CMTBL ;
CALL _IND
JP (HL)
;-----------------------
;
CMTBL: DW DRES ;
DW DJMP ;
DW DJMP ;
DW DJMP ;
DW DRD ;
DW DWRS ;
DW DWR ;
;-----------------------
;
DJMP: PUSH IY
POP BC
LD A,(IY+_DTYP) ;
CP MAXDRVN+1 ;
?
JR C,DJMP1
LD A,_DTYPER ;
RET
DJMP1: LD HL,DCTBL ;
CALL _IND ;
LD A,L
OR H
LD A,_DRNFND ;
RET Z
LD A,(RQCOM) ;
CALL _IND
JP (HL) ;
;-----------------------
;
DRES: LD (IX-_BUFT),0FFH ;
JR DJMP
;-----------------------
;
DRD: CALL FIND ;
JR Z,DRD1 ;
LD (IX-_RQCOM),_SEEK ;
CALL DJMP
; OR A
RET NZ ;
LD (IX-_RQCOM),_READ ;
CALL DJMP
; OR A
RET NZ ;
DRD1: CALL BLKRD ;
JR NZ,DRD ;
RET
;-----------------------
;
DWR: LD (IX-_RQCOM),_SEEK ;
CALL DJMP
; OR A
RET NZ ;
DWR1: CALL FIND ;
JR Z,DWR2 ;
LD (IX-_RQCOM),_READ ;
CALL DJMP
; OR A
RET NZ ;
DWR2: CALL BLKWR ;
LD (IX-_RQCOM),_WRITE ;
CALL DJMP
POP HL ;
; OR A
RET NZ ;
CALL BLKF
JR NZ,DWR1 ;
RET
;-----------------------
;
DWRS: LD A,_COMERR ;
OR A
RET
;-----------------------
;
;:(BC)-
;: -
; 0 -
; 0FFH-
;
FIND: PUSH BC
LD B,(IY+_DFN) ;
LD C,0FFH
LD A,(RQBLOCK) ;
INC B
JR FIND2 ;
=128 ?
FIND1: SRL A ;
SLA C ;CALACULATE ~MASK
FIND2: DJNZ FIND1
LD (RQSECT),A ;
LD A,(RQBLOCK)
OR C
XOR C ;RQBLOCK & MASK => A
LD C,0
SRL A
RR C
LD B,A
LD HL,BUF_MON
LD (DCBUF),HL ;
ADD HL,BC
LD (LOCBUF),HL ;
;
LD A,(RQCHAN) ;
CP (IX-_BUFT) ;
?
JR NZ,FIND3 ;
LD HL,(RQTRACK) ;
LD BC,(BUFTRK) ;
SBC HL,BC ;(CY=0)
JR NZ,FIND3 ;
LD A,(RQSECT) ;
CP (IX-_BUFSEC) ;
?
JR NZ,FIND3 ;
XOR A ;
JR FIND4
FIND3:
LD A,(RQCHAN) ;
LD (BUFT),A ;
LD HL,(RQTRACK) ;(LB)
LD (BUFTRK),HL
LD A,(RQSECT) ;
LD (BUFSEC),A ;
LD A,0FFH
AND A ;
FIND4: POP BC
RET
;-----------------------
;
BLKRD: PUSH AF
PUSH DE
LD BC,128 ;
LD DE,(RQBADR) ;
LD HL,(LOCBUF) ;
RST 8 ;
DB 0FEH,3
EX DE,HL ;
POP DE
POP AF
BLKF: LD (RQBADR),HL ;
LD L,_REPN
LD (IX-_REP),L ;
INC (IX-_RQBLOCK)
DEC (IX-_RQBLN) ;
?
RET
;-----------------------
;
BLKWR: PUSH DE
LD BC,128 ;
LD DE,(LOCBUF) ;
LD HL,(RQBADR) ;
RST 8 ;
DB 3,0FEH
POP DE
EX (SP),HL ;
JP (HL)
;-----------------------
;
CHSET: LD (IY),0FFH ;
PUSH IY
POP DE
INC DE
LD HL,(RQBADR)
LD BC,22H
RST 8
DB 3,0FEH
EI
LD (IX-_RQCOM),_RESET ;
CALL DISK
LD (IX-_RQCOM),_RECAL ;
JP DISK
;-----------------------
;
CHCHK: PUSH IY
POP HL
INC HL
LD DE,(RQBADR)
LD BC,22H
RST 8
DB 0FEH,3
EI
XOR A ;
RET
;-----------------------
;
_IND: CALL ADD_HL_2A
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
RET