mirror of
https://github.com/romychs/SprinterFirmware.git
synced 2025-04-18 18:12:39 +03:00
483 lines
7.1 KiB
NASM
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]
|
|
|
|
|