mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
Saving in FM offset in file and it's cluster on disk
This commit is contained in:
parent
e542bc0bd3
commit
d8e13bc4b5
@ -561,10 +561,8 @@ ADD_DE2 DJNZ ADD_DE1
|
||||
;-----------------
|
||||
|
||||
; HL - CLUSTER
|
||||
|
||||
; DE - (CLUSTER)
|
||||
|
||||
R_F_FAT PUSH HL
|
||||
R_F_FAT: PUSH HL
|
||||
LD A,(FAT_TYP)
|
||||
CP "2"
|
||||
JP Z,R_F_F12
|
||||
|
||||
@ -654,7 +654,10 @@ TMPNAME: DB ' ',#00 ; 12
|
||||
;!TODO ᤥ« âì ¤«ï ª ¦¤®£® ¤à ©¢ § ¯®¬¨ ¨¥ ⥪ã饩 ¤¨à४â®à¨¨, ¯®ª âãâ § £«ãèª
|
||||
; RestoreDIR:
|
||||
CHNDISK:
|
||||
;!TEST
|
||||
CALL OPENDSK
|
||||
;CALL OPENDSK.force
|
||||
;
|
||||
;????? R10
|
||||
RET C
|
||||
;LD HL,DIRSPEC+1
|
||||
@ -686,7 +689,7 @@ OPENDSK:
|
||||
JR Z,.exit
|
||||
LD A,C
|
||||
;
|
||||
PUSH AF
|
||||
.force: PUSH AF
|
||||
LD C,Dss.DRV.Open
|
||||
RST ToDSS.DRV
|
||||
POP BC
|
||||
|
||||
153
DSS/DOS_FM.ASM
153
DSS/DOS_FM.ASM
@ -41,6 +41,7 @@ FM_BUF: _sFM
|
||||
BLOCK (FMCOUNT-1)*FM_BUF.Size, 0
|
||||
*/
|
||||
|
||||
; ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
||||
MACRO _mFM_FIND
|
||||
CP FMCOUNT+1
|
||||
JR NC,ABS_FM
|
||||
@ -138,6 +139,10 @@ MOVE_F1 ADD IX,BC
|
||||
LD (IY+34),L
|
||||
LD (IY+35),H
|
||||
XOR A
|
||||
;!TEST SAVE CLUSTER AFTER READ
|
||||
;LD (IY+_sFM.RESERVED_L),A
|
||||
;LD (IY+_sFM.RESERVED_L+1),A
|
||||
;
|
||||
RET
|
||||
|
||||
;FP COMPARE
|
||||
@ -158,8 +163,11 @@ MOVE_CP LD L,(IY+28)
|
||||
RET
|
||||
|
||||
;--------------------
|
||||
|
||||
ECL2 POP BC
|
||||
ECL2:
|
||||
;!TEST SAVE CLUSTER AFTER READ
|
||||
POP BC
|
||||
;
|
||||
POP BC
|
||||
POP DE
|
||||
AND A
|
||||
RET
|
||||
@ -172,30 +180,89 @@ BLOKRD0 POP BC
|
||||
;READ SECTORS OF FILE
|
||||
;HL:DE - FP (in sectors)
|
||||
; B - Amount sectors
|
||||
BLOK_RD PUSH BC
|
||||
BLOK_RD: PUSH BC
|
||||
LD (READMEM),IX
|
||||
LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER
|
||||
LD C,A
|
||||
LD B,0
|
||||
;HL:DE / BC => DE:IX HL-OSTATOK
|
||||
CALL DIV32 ;!FIXIT § ¬¥¨âì ¢ë§®¢ HLDE/BC HLDE/C
|
||||
;!FIXIT ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - à §¤¥« ¥ ¡®«ìè¥ 2Gb
|
||||
LD B,XH
|
||||
LD C,XL
|
||||
PUSH HL ;RESIDUE
|
||||
LD L,(IY+26) ;START CLUSTER
|
||||
LD H,(IY+27)
|
||||
LD L,(IY+_sFM.ST_CLUSTER) ;START CLUSTER
|
||||
LD H,(IY+_sFM.ST_CLUSTER+1)
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,BLOKRD2
|
||||
JR ECL2 ;R01 JR BLOKRD0
|
||||
BLOKRD1 PUSH BC
|
||||
;!TEST SAVE CLUSTER AFTER READ
|
||||
;JR NZ,BLOKRD2
|
||||
PUSH BC
|
||||
JR NZ,.testFunc
|
||||
;
|
||||
JP ECL2 ;R01 JR BLOKRD0
|
||||
|
||||
.testFunc:
|
||||
;!TEST SAVE CLUSTER AFTER READ
|
||||
LD E,(IY+_sFM.RESERVED_L)
|
||||
LD D,(IY+_sFM.RESERVED_H)
|
||||
LD A,D
|
||||
OR E
|
||||
JR Z,BLOKRD2
|
||||
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
LD E,(IY+_sFM.RESERVED_CL)
|
||||
LD D,(IY+_sFM.RESERVED_CH)
|
||||
LD A,D
|
||||
OR E
|
||||
JR Z,.noOptimization_1
|
||||
|
||||
POP HL
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR C,.noOptimization_2
|
||||
|
||||
LD C,L
|
||||
LD B,H
|
||||
POP HL
|
||||
POP DE
|
||||
|
||||
|
||||
EX DE,HL
|
||||
JP BLOKRD2
|
||||
;
|
||||
.noOptimization_1:
|
||||
POP BC
|
||||
.noOptimization_2:
|
||||
POP HL
|
||||
POP DE
|
||||
JP BLOKRD2
|
||||
|
||||
BLOKRD1:
|
||||
PUSH BC
|
||||
CALL R_F_FAT
|
||||
POP BC
|
||||
JR C,ECL2 ;R01
|
||||
EX DE,HL
|
||||
DEC BC
|
||||
BLOKRD2 LD A,B
|
||||
|
||||
|
||||
|
||||
BLOKRD2:
|
||||
LD A,B ; ‚‘ - ᬥ饨¥ ¢ãâà¨ ä ©« ¢ ª« áâ¥à å
|
||||
OR C
|
||||
JR NZ,BLOKRD1
|
||||
|
||||
;!TEST SAVE CLUSTER AFTER READ
|
||||
LD (IY+_sFM.RESERVED_L),L
|
||||
LD (IY+_sFM.RESERVED_H),H
|
||||
POP BC
|
||||
LD (IY+_sFM.RESERVED_CL),C
|
||||
LD (IY+_sFM.RESERVED_CH),B
|
||||
;
|
||||
|
||||
POP DE
|
||||
POP BC
|
||||
LD A,(BootSector.S_P_C)
|
||||
@ -255,7 +322,7 @@ BLOKRD7 EX DE,HL
|
||||
LD DE,(READMEM)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,5
|
||||
LD C,Dss.DRV.Read
|
||||
RST ToDSS.DRV
|
||||
JP C,BLOKRD0
|
||||
POP BC
|
||||
@ -407,7 +474,7 @@ BLOKWRA POP BC
|
||||
|
||||
TSTSIZE XOR A
|
||||
LD (READCOD),A
|
||||
LD L,(IY+32) ;FP LOW
|
||||
LD L,(IY+32) ;FP LOW _sFM.F_POSITION
|
||||
LD H,(IY+33)
|
||||
ADD HL,DE
|
||||
EXX
|
||||
@ -416,7 +483,7 @@ TSTSIZE XOR A
|
||||
LD H,(IY+35)
|
||||
ADC HL,DE
|
||||
EXX ;HL':HL - NEW FP
|
||||
LD C,(IY+28)
|
||||
LD C,(IY+28) ; _sFM.F_SIZE
|
||||
LD B,(IY+29) ;SIZE LOW
|
||||
AND A
|
||||
SBC HL,BC
|
||||
@ -436,21 +503,21 @@ TSTSIZE XOR A
|
||||
; HL - ADDRESS
|
||||
; DE - SIZE
|
||||
; A - FM
|
||||
|
||||
READ LD (R_POINT),HL
|
||||
READ: LD (R_POINT),HL
|
||||
LD (S_POINT),HL
|
||||
CALL SET_FM
|
||||
RET C
|
||||
CALL TSTSIZE
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,NOREAD
|
||||
JP Z,NOREAD ;!FIXIT ¬®¦® ¯¥à¥¥á⨠¢ ç «® ¯à®æ¥¤ãàë
|
||||
PUSH DE
|
||||
LD A,(IY+_sFM.DRIVE)
|
||||
;!TEST CHNDISK OPENDSK
|
||||
CALL OPENDSK
|
||||
;
|
||||
JP C,RPERR1
|
||||
;<3B> áçñâ á¬¥é¥¨ï ¢ ᥪâ®à å
|
||||
LD C,(IY+_sFM.F_POSITION)
|
||||
LD E,(IY+_sFM.F_POSITION+1)
|
||||
LD A,E
|
||||
@ -462,12 +529,14 @@ READ LD (R_POINT),HL
|
||||
OR A
|
||||
RR L
|
||||
RR D
|
||||
RR E ;HL:DE FP (in sectors)
|
||||
; BC FP residue (in bytes)
|
||||
RR E
|
||||
;HL:DE FP (in sectors)
|
||||
;BC FP residue (in bytes)
|
||||
;
|
||||
LD A,B
|
||||
OR C
|
||||
JP NZ,ROV1
|
||||
ROV4 POP BC
|
||||
ROV4: POP BC
|
||||
PUSH BC
|
||||
SRL B
|
||||
JR Z,ROV2
|
||||
@ -491,7 +560,7 @@ SECTORL+1: LD HL,0 // LD HL,(SECTORL)
|
||||
SECTORH+1: LD HL,0 // LD HL,(SECTORH)
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
ROV2 POP BC
|
||||
ROV2: POP BC
|
||||
LD A,B
|
||||
AND #01
|
||||
LD B,A
|
||||
@ -514,7 +583,6 @@ ROV2 POP BC
|
||||
POP BC
|
||||
LDIR
|
||||
LD (R_POINT),DE
|
||||
|
||||
ROV6:
|
||||
S_POINT+1: LD HL,0 // LD HL,(S_POINT)
|
||||
LD DE,(R_POINT)
|
||||
@ -533,7 +601,7 @@ READCOD+1: LD A,0 // LD A,(READCOD)
|
||||
OR A
|
||||
RET
|
||||
|
||||
ROV1 PUSH BC
|
||||
ROV1: PUSH BC
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
LD IX,BUFFER+#C000
|
||||
@ -569,7 +637,7 @@ ROV1 PUSH BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
LD HL,0
|
||||
ROV3 PUSH HL
|
||||
ROV3: PUSH HL
|
||||
LD HL,BUFFER
|
||||
ADD HL,DE
|
||||
LD DE,(R_POINT)
|
||||
@ -578,19 +646,19 @@ ROV3 PUSH HL
|
||||
EXX
|
||||
JP ROV4
|
||||
|
||||
RPERR3 POP HL
|
||||
RPERR2 POP HL
|
||||
RPERR1 POP BC
|
||||
RPERR3: POP HL
|
||||
RPERR2: POP HL
|
||||
RPERR1: POP BC
|
||||
SCF
|
||||
RET
|
||||
|
||||
PWERR3 POP HL
|
||||
PWERR2 POP HL
|
||||
PWERR1 POP BC
|
||||
PWERR3: POP HL
|
||||
PWERR2: POP HL
|
||||
PWERR1: POP BC
|
||||
SCF
|
||||
RET
|
||||
|
||||
RD_ONLY POP DE
|
||||
RD_ONLY: POP DE
|
||||
LD A,DSS_Error.sys.READONLY
|
||||
SCF
|
||||
RET
|
||||
@ -599,7 +667,7 @@ RD_ONLY POP DE
|
||||
; DE - SIZE
|
||||
; A - FM
|
||||
|
||||
WRITE LD (R_POINT),HL
|
||||
WRITE: LD (R_POINT),HL
|
||||
LD (S_POINT),HL
|
||||
PUSH DE
|
||||
CALL SET_FM
|
||||
@ -631,7 +699,7 @@ WRITE LD (R_POINT),HL
|
||||
LD A,B
|
||||
OR C
|
||||
JP NZ,WOV1
|
||||
WOV4 POP BC
|
||||
WOV4: POP BC
|
||||
PUSH BC
|
||||
SRL B
|
||||
JR Z,WOV2
|
||||
@ -646,7 +714,7 @@ R_POINT+2: LD IX,0 // LD IX,(R_POINT)
|
||||
LD C,B
|
||||
LD HL,(R_POINT)
|
||||
LD DE,#0200
|
||||
WOV5 ADD HL,DE
|
||||
WOV5: ADD HL,DE
|
||||
DJNZ WOV5
|
||||
LD (R_POINT),HL
|
||||
LD B,0
|
||||
@ -656,7 +724,7 @@ WOV5 ADD HL,DE
|
||||
POP HL
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
WOV2 POP BC
|
||||
WOV2: POP BC
|
||||
LD A,B
|
||||
AND #01
|
||||
LD B,A
|
||||
@ -694,7 +762,7 @@ WOV2 POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
RET C
|
||||
WOV6 LD DE,(S_POINT)
|
||||
WOV6: LD DE,(S_POINT)
|
||||
LD HL,(R_POINT)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
@ -717,8 +785,7 @@ WOV6 LD DE,(S_POINT)
|
||||
LD (IY+31),B
|
||||
AND A
|
||||
RET
|
||||
|
||||
WOV1 PUSH BC
|
||||
WOV1: PUSH BC
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
LD IX,BUFFER+#C000
|
||||
@ -749,7 +816,7 @@ WOV1 PUSH BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
LD HL,0
|
||||
WOV3 PUSH HL
|
||||
WOV3: PUSH HL
|
||||
LD HL,BUFFER
|
||||
ADD HL,DE
|
||||
LD DE,(R_POINT)
|
||||
@ -782,17 +849,17 @@ WOV3 PUSH HL
|
||||
|
||||
; HL - CLUSTER
|
||||
; HL:IX - SECTOR
|
||||
NSECTOR DEC HL
|
||||
NSECTOR: DEC HL
|
||||
DEC HL
|
||||
EX DE,HL
|
||||
LD A,(BootSector.S_P_C)
|
||||
LD B,A
|
||||
LD HL,0
|
||||
LD IX,0
|
||||
ADD_DE1 ADD IX,DE
|
||||
ADD_DE1: ADD IX,DE
|
||||
JR NC,ADD_DE2
|
||||
INC HL
|
||||
ADD_DE2 DJNZ ADD_DE1
|
||||
ADD_DE2: DJNZ ADD_DE1
|
||||
LD DE,(FatBuffer.DAT_FRM)
|
||||
ADD IX,DE
|
||||
LD DE,#0000
|
||||
@ -800,12 +867,12 @@ ADD_DE2 DJNZ ADD_DE1
|
||||
RET
|
||||
|
||||
; HL:DE / BC => DE:IX HL-OSTATOK
|
||||
DIV32 LD XH,D
|
||||
DIV32: LD XH,D
|
||||
LD XL,E
|
||||
EX DE,HL
|
||||
LD HL,0
|
||||
LD A,#20
|
||||
DIV001 ADD IX,IX
|
||||
DIV001: ADD IX,IX
|
||||
EX DE,HL
|
||||
ADC HL,HL
|
||||
EX DE,HL
|
||||
@ -816,7 +883,7 @@ DIV001 ADD IX,IX
|
||||
DEC A
|
||||
JR NZ,DIV001
|
||||
RET
|
||||
DIV002 INC IX
|
||||
DIV002: INC IX
|
||||
DEC A
|
||||
JR NZ,DIV001
|
||||
RET
|
||||
|
||||
@ -28,7 +28,6 @@ G_CLUS1: INC HL
|
||||
RET
|
||||
|
||||
; HL - CLUSTER
|
||||
|
||||
INC_FAT PUSH HL
|
||||
CALL G_CLUST
|
||||
POP DE
|
||||
@ -53,7 +52,8 @@ INC_FA2 CALL R_F_FAT
|
||||
|
||||
; HL - CLUSTER
|
||||
; DE - (CLUSTER)
|
||||
R_F_FAT EX DE,HL
|
||||
;!FIXIT ¤ ŤĽĽ § âŽçŞ âŽ, ç⎠˘ DE ˘áĽŁ¤ 0 - ŕ §¤ĽŤ Ľ ĄŽŤěčĽ 2Gb
|
||||
R_F_FAT: EX DE,HL
|
||||
LD HL,(MAX_CLU)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
@ -75,10 +75,12 @@ R_F_F16 LD A,H
|
||||
AND #0F
|
||||
LD H,A
|
||||
LD A,B
|
||||
; A/16
|
||||
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
|
||||
@ -91,7 +93,7 @@ R_F_F16 LD A,H
|
||||
LD D,(HL)
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
LD HL,#FFEF
|
||||
LD HL,#FFEF ;!HARDCODE
|
||||
XOR A ;DssErr.sys.NO_ERROR
|
||||
SBC HL,DE
|
||||
POP HL
|
||||
@ -172,7 +174,7 @@ R_F_F12 LD D,H
|
||||
RLCA
|
||||
RLCA
|
||||
AND #07
|
||||
LD BC,(FATCASH)
|
||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT
|
||||
LD DE,FAT
|
||||
@ -208,7 +210,6 @@ R_F_F02 POP AF
|
||||
|
||||
; HL - CLUSTER
|
||||
; DE - (CLUSTER)
|
||||
|
||||
W_T_FAT PUSH DE
|
||||
EX DE,HL
|
||||
LD HL,(MAX_CLU)
|
||||
@ -226,7 +227,7 @@ W_T_FAT PUSH DE
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD A,1
|
||||
LD (FATCASH+1),A
|
||||
LD (FATCASH.Update),A
|
||||
LD A,(FatBuffer.FAT_TYP)
|
||||
CP "2"
|
||||
JP Z,W_T_F12
|
||||
@ -244,7 +245,6 @@ W_T_F16:
|
||||
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
|
||||
@ -275,7 +275,7 @@ W_T_F12 PUSH DE
|
||||
RLCA
|
||||
RLCA
|
||||
AND #07
|
||||
LD BC,(FATCASH)
|
||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT
|
||||
LD DE,FAT
|
||||
@ -317,9 +317,9 @@ W_T_F01 SLA E
|
||||
|
||||
;R01
|
||||
; A - NEW FAT BLOCK
|
||||
RE_FAT PUSH HL
|
||||
RE_FAT: PUSH HL
|
||||
PUSH AF
|
||||
LD A,(FATCASH+1)
|
||||
LD A,(FATCASH.Update)
|
||||
OR A
|
||||
CALL NZ,WR_FAT_
|
||||
POP AF
|
||||
@ -466,6 +466,8 @@ FATERR: POP HL
|
||||
RET
|
||||
|
||||
FATCASH: WORD #0000
|
||||
.Block EQU FATCASH
|
||||
.Update EQU FATCASH+1
|
||||
MAX_CLU: WORD #0FF0
|
||||
|
||||
;//MODULE: FAT_X
|
||||
|
||||
@ -27,7 +27,9 @@ RESERVED2 BLOCK 490,0
|
||||
.ATTRIBUT: BYTE #10 ;+11 ATTRIBUT
|
||||
.RESERVED_L: BYTE 0 ;+12 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï ç⥨ï
|
||||
.RESERVED_H: BYTE 0 ;+13 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
||||
.RESERVED_X: BLOCK 8,0 ;+14 RESERVED
|
||||
.RESERVED_CL: BYTE 0 ;+14 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
||||
.RESERVED_CH: BYTE 0 ;+15 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
||||
.RESERVED_X: BLOCK 6,0 ;+16 RESERVED
|
||||
.TIME: WORD #0000 ;+22 TIME
|
||||
.DATE: WORD #0000 ;+24 DATE
|
||||
.ST_CLUSTER: WORD #0000 ;+26 START CLUSTER
|
||||
|
||||
Loading…
Reference in New Issue
Block a user