SprinterFirmware/DOS/fat_x.asm
2024-05-27 11:03:22 +03:00

483 lines
7.1 KiB
NASM

;[BEGIN]
;//MODULE: FAT_X
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
;//UPDATE: 24-10-1999 DNS Restore module
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R01 10-02-1999 DNS UPGRADE FAT CASH
;---------------------------------------------------------------
R_CLUST
LD HL,#0001
LD (G_CLUST+1),HL
RET
G_CLUST
LD HL,#0001
G_CLUS1
INC HL
CALL R_F_FAT
CP 10
SCF
RET Z
LD A,D
OR E
JR NZ,G_CLUS1
LD (G_CLUST+1),HL
XOR A
RET
; HL - CLUSTER
INC_FAT
PUSH HL
CALL G_CLUST
POP DE
RET C
PUSH HL
PUSH HL
EX DE,HL
INC_FA2
CALL R_F_FAT
EX DE,HL
JR NC,INC_FA2
EX DE,HL
POP DE
CALL W_T_FAT
POP HL
LD DE,(ENDCLUS)
CALL W_T_FAT
CALL WR_FAT
AND A
RET
;R01
; HL - CLUSTER
; DE - (CLUSTER)
R_F_FAT
EX DE,HL
LD HL,(MAX_CLU)
AND A
SBC HL,DE
EX DE,HL
LD A,10
RET C
EXX
LD A,FATPAGE
CALL BANK
EXX
PUSH HL
PUSH AF
LD A,(FAT_TYP)
CP "2"
JR Z,R_F_F12
R_F_F16
LD A,H
LD B,A
AND #0F
LD H,A
LD A,B
RRCA
RRCA
RRCA
RRCA
AND #0F ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; A <> C - READ NEW BLOCK FAT
LD DE,FAT
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
POP AF
OUT (PAGE3),A
LD HL,#FFEF
XOR A
SBC HL,DE
POP HL
RET
;R01; HL - CLUSTER
;R01; DE - (CLUSTER)
;R01
;R01R_F_FAT EX DE,HL
;R01 LD HL,(MAX_CLU)
;R01 AND A
;R01 SBC HL,DE
;R01 EX DE,HL
;R01 LD A,10
;R01 RET C
;R01 PUSH HL
;R01 LD A,(FAT_TYP)
;R01 CP "2"
;R01 JP Z,R_F_F12
;R01R_F_F16 LD DE,768 ; DE - CLUSTERS IN CASH
;R01 XOR A
;R01R_F_00H INC A ; HL - CLUSTER
;R01 SBC HL,DE
;R01 JP NC,R_F_00H
;R01 ADD HL,DE
;R01 ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
;R01 DEC A
;R01 LD BC,(FATCASH) ; A - ELEMENT OF CASH
;R01 CP C
;R01 CALL NZ,RE_FAT
;R01 LD DE,FAT
;R01 ADD HL,DE
;R01 LD E,(HL)
;R01 INC HL
;R01 LD D,(HL)
;R01 LD HL,#FFEF
;R01 AND A
;R01 SBC HL,DE
;R01 POP HL
;R01 LD A,0
;R01 RET
;R01
;R01R_F_F12 LD D,H
;R01 LD E,L
;R01 ADD HL,HL
;R01 ADD HL,DE
;R01 RR H
;R01 RR L
;R01 PUSH AF
;R01 EX DE,HL
;R01 LD HL,(B_P_S)
;R01 LD B,H
;R01 LD C,L
;R01 ADD HL,HL
;R01 ADD HL,BC
;R01 EX DE,HL
;R01 XOR A ; DE - SIZE SECTOR * 3
;R01R_F_00 INC A ; HL - FAT OFFSET
;R01 SBC HL,DE
;R01 JP NC,R_F_00
;R01 ADD HL,DE
;R01 DEC A
R_F_F12
LD D,H
LD E,L
ADD HL,HL
ADD HL,DE
RR H
RR L ;CLUSTER * 1.5
PUSH AF
LD A,H
LD B,A
AND #1F
LD H,A
LD A,B
RLCA
RLCA
RLCA
AND #07
LD BC,(FATCASH)
CP C
CALL NZ,RE_FAT
LD DE,FAT
ADD HL,DE
POP AF
LD E,(HL)
INC HL
LD D,(HL)
JR C,R_F_F01
LD A,D
AND #0F
LD D,A
JR R_F_F02
R_F_F01 LD A,E
AND #F0
LD E,A
RR D
RR E
RR D
RR E
RR D
RR E
RR D
RR E
R_F_F02
POP AF
OUT (PAGE3),A
LD HL,#0FEF
XOR A
SBC HL,DE
POP HL
RET
; HL - CLUSTER
; DE - (CLUSTER)
W_T_FAT
PUSH DE
EX DE,HL
LD HL,(MAX_CLU)
AND A
SBC HL,DE
EX DE,HL
POP DE
LD A,10
RET C
EXX
LD A,FATPAGE
CALL BANK
EXX
PUSH HL
PUSH AF
LD A,1
LD (FATCASH+1),A
LD A,(FAT_TYP)
CP "2"
JR Z,W_T_F12
W_T_F16 PUSH DE
LD A,H
LD B,A
AND #0F
LD H,A
LD A,B
RRCA
RRCA
RRCA
RRCA
AND #0F ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; A <> C - READ NEW BLOCK FAT
LD DE,FAT
ADD HL,DE
POP DE
LD (HL),E
INC HL
LD (HL),D
POP AF
POP HL
OUT (PAGE3),A
XOR A
RET
W_T_F12 PUSH DE
LD D,H
LD E,L
ADD HL,HL
ADD HL,DE
RR H
RR L ;CLUSTER * 1.5
PUSH AF
LD A,H
LD B,A
AND #1F
LD H,A
LD A,B
RLCA
RLCA
RLCA
AND #07
LD BC,(FATCASH)
CP C
CALL NZ,RE_FAT
LD DE,FAT
ADD HL,DE
POP AF
POP DE
JR C,W_T_F01
LD (HL),E
INC HL
LD A,(HL)
AND #F0
OR D
LD (HL),A
POP AF
POP HL
OUT (PAGE3),A
AND A
RET
W_T_F01 SLA E
RL D
RL E
RL D
RL E
RL D
RL E
RL D
LD A,(HL)
AND #0F
OR E
LD (HL),A
INC HL
LD (HL),D
POP AF
POP HL
OUT (PAGE3),A
AND A
RET
;R01
; A - NEW FAT BLOCK
RE_FAT
PUSH HL
PUSH AF
LD A,(FATCASH+1)
OR A
CALL NZ,WR_FAT_
POP AF
LD L,A
LD H,0
LD (FATCASH),HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
LD DE,(FAT_FRM)
ADD HL,DE
EX DE,HL
LD IX,0
ADD IX,DE
LD HL,0 ;HL:IX - SECTOR FAT FOR READING
LD DE,FAT ; DE - FAT ADDRESS
LD A,(DRIVE)
LD B,16 ;16 * 512 = 8192 (CASH SIZE)
LD C,5
RST #18
POP HL
RET
WR_FAT EXX
LD A,FATPAGE
CALL BANK
EXX
PUSH AF
CALL WR_FAT_
POP AF
OUT (PAGE3),A
RET
WR_FAT_
LD HL,(FATCASH)
LD H,0
LD (FATCASH),HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
PUSH HL
LD B,H
LD C,L ;BC - BLOCK OF FAT
LD DE,16
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD DE,(S_P_F)
LD A,16
AND A
SBC HL,DE
JR C,WALLFAT
EX DE,HL
LD HL,16
SBC HL,DE
JR C,FATERR
LD A,L
WALLFAT
LD H,B
LD L,C
LD DE,(FAT_FRM)
ADD HL,DE
EX DE,HL
LD IX,0
ADD IX,DE
LD HL,0 ;HL:IX - SECTOR OF FAT FOR SAVE
LD DE,FAT
LD B,A
LD C,6
LD A,(DRIVE)
PUSH BC
RST #18
POP BC
POP HL
LD DE,(FAT2_XX)
ADD HL,DE
EX DE,HL
LD IX,0
ADD IX,DE
LD DE,FAT
LD HL,0
LD A,(DRIVE)
LD C,6
RST #18
RET
;R01
;R01WR_FAT LD HL,(FATCASH)
;R01 LD H,0
;R01 LD (FATCASH),HL
;R01 LD E,L
;R01 LD D,H
;R01 ADD HL,HL
;R01 ADD HL,DE
;R01 PUSH HL
;R01 LD B,H
;R01 LD C,L
;R01 INC HL
;R01 INC HL
;R01 INC HL
;R01 LD DE,(S_P_F)
;R01 LD A,3
;R01 AND A
;R01 SBC HL,DE
;R01 JP C,WR_FAT1
;R01 EX DE,HL
;R01 LD HL,3
;R01 AND A
;R01 SBC HL,DE
;R01 JP C,FATERR
;R01 LD A,L
;R01WR_FAT1 LD H,B
;R01 LD L,C
;R01 LD DE,(FAT_FRM)
;R01 ADD HL,DE
;R01 EX DE,HL
;R01 LD IX,0
;R01 ADD IX,DE
;R01 LD DE,FAT
;R01 LD HL,0
;R01 LD B,A
;R01 LD C,6
;R01 LD A,(DRIVE)
;R01 PUSH BC
;R01 RST #18
;R01 POP BC
;R01 POP HL
;R01 LD DE,(FAT2_XX)
;R01 ADD HL,DE
;R01 EX DE,HL
;R01 LD IX,0
;R01 ADD IX,DE
;R01 LD DE,FAT
;R01 LD HL,0
;R01 LD A,(DRIVE)
;R01 LD C,6
;R01 RST #18
;R01 RET
FATERR POP HL
SCF
RET
FATCASH DW #0000
MAX_CLU DW #0FF0
;//MODULE: FAT_X
;[END]