-bug in new sub-function of DskInfo

This commit is contained in:
Anatoliy Belyanskiy 2023-11-28 06:04:19 +10:00
parent c5ca8e7597
commit 5cf26d589f
7 changed files with 222 additions and 203 deletions

View File

@ -406,7 +406,7 @@ BPB_FAT
RST ToBIOS_18
RET C
LD HL,0
LD (FATCASH),HL
LD (FatCache),HL
XOR A
RET
@ -560,7 +560,7 @@ R_F_00H INC A ; HL - CLUSTER
ADD HL,DE
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
DEC A
LD BC,(FATCASH) ; A - ELEMENT OF CASH
LD BC,(FatCache) ; A - ELEMENT OF CASH
CP C
CALL NZ,RE_FAT
LD DE,FAT
@ -594,7 +594,7 @@ R_F_00 INC A ; HL - FAT OFFSET
JP NC,R_F_00
ADD HL,DE
DEC A
LD BC,(FATCASH)
LD BC,(FatCache)
CP C
CALL NZ,RE_FAT
LD DE,FAT
@ -629,7 +629,7 @@ R_F_F02 LD HL,#0FEF
RE_FAT PUSH HL
LD L,A
LD H,0
LD (FATCASH),HL
LD (FatCache),HL
LD E,L
LD D,H
ADD HL,HL
@ -687,7 +687,7 @@ DIR EQU BOOT+512
FAT EQU DIR+512
VALUE EQU 3*512+FAT
FATCASH EQU VALUE+0
FatCache EQU VALUE+0
FAT_FRM EQU VALUE+2 ; MSD_FAT_SEC first sector FAT
DIR_FRH EQU VALUE+4 ; MSD_CAT_SEC first sector DIR
DIR_FRL EQU VALUE+6 ; MSD_CAT_SEC first sector DIR

View File

@ -2173,7 +2173,7 @@ SAVEDIR:
LD HL,(FatBuffer.DIR_FRH)
LD IX,(FatBuffer.DIR_FRL)
LD A,(FatBuffer.DIR_S_S)
LD B,32
LD B,32 ;!HARDCODE
SUB B
JR NC,.RTD1S
ADD A,B

View File

@ -198,11 +198,15 @@ CURRDSK: LD A,(FatBuffer.DRIVE)
ENDM
;
DISKINF:; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®©
LD C,B
LD B,1
;
CP #80
JR C,.CustomDisk
CP #FF
JR Z,.CurrentDisk
; more info
LD B,C
PUSH HL
AND %0111'1111
CALL .CustomDisk
@ -264,7 +268,7 @@ DISKINF:; [ ] 22/11/23
.FRESP2:
LD D,B
LD E,C
LD HL,(MAX_CLU)
LD HL,(FAT_Max_Cluster)
DEC HL
LD BC,(CORE_BUFFERS.BootSector.B_P_S)
LD A,(CORE_BUFFERS.BootSector.S_P_C)
@ -581,7 +585,7 @@ RD_BPB: LD C,SLOT3
RR L
JP .S4C01
.S4C02: INC HL
LD (MAX_CLU),HL
LD (FAT_Max_Cluster),HL
//POP IY
@ -594,7 +598,7 @@ RD_BPB: LD C,SLOT3
; RST ToDSS.DRV
; JP C,RDERR1
LD HL,0
LD (FATCASH),HL
LD (FatCache),HL
SET_PAGE_X FATPAGE

View File

@ -14,6 +14,7 @@ R_CLUST LD HL,#0001
LD (G_CLUST.num),HL
RET
; ­ Šâ¨ ŻĽŕ˘ëŠ á˘ŽĄŽ¤­ëŠ ŞŤ áâĽŕ
G_CLUST:
.num+1: LD HL,#0001
.loop: INC HL ; ­®¬¥à ª« áâ¥à 
@ -62,7 +63,7 @@ INC_FAT PUSH HL
;!FIXIT ®â¤ ñâ à §­ë© CF ¯à¨ 㤠筮¬ § ¢¥à襭¨¨ ¢ § ¢¨á¨¬®á⨠®â FAT16/FAT12
R_F_FAT:
EX DE,HL
LD HL,(MAX_CLU)
LD HL,(FAT_Max_Cluster)
AND A
SBC HL,DE
EX DE,HL
@ -80,18 +81,19 @@ R_F_FAT:
R_F_F16:
LD A,H
LD B,H
AND #0F
;AND #0F
AND FAT_CACHE.Mask
LD H,A
LD A,B
; bit7..4 --> bit3..0.
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
DUP FAT_CACHE.Degree
RRCA
RRCA
RRCA
RRCA
AND #0F ; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
EDUP
;AND #0F
AND FAT_CACHE.Mask2
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
@ -107,71 +109,6 @@ R_F_F16:
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 ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF
; RR L ; CLUSTER * 1.5
; PUSH AF ; á®åà. ä« £
R_F_F12:
LD D,H
LD E,L
@ -181,7 +118,7 @@ R_F_F12:
ADD HL,DE ; CLUSTER * 1.5
;
;!FIXIT å¥à­ï ª ª ï-â®
IF COMPILE_UNUSED_CODE
;IF COMPILE_UNUSED_CODE
LD A,H
LD B,H
AND #1F
@ -191,10 +128,10 @@ R_F_F12:
RLCA
RLCA
AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
ENDIF
;ENDIF
;
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
@ -208,17 +145,6 @@ R_F_F12:
LD D,A
JP R_F_F02
; R_F_F01 LD A,E
; AND #F0
; LD E,A
; RR D ; ¢¯à ¢® ­  4 ¡¨âa
; RR E
; RR D
; RR E
; RR D
; RR E
; RR D
; RR E
R_F_F01:
LD A,E
AND #F0
@ -251,7 +177,7 @@ R_F_F02:
;-----------------------------------------------------------
W_T_FAT PUSH DE
EX DE,HL
LD HL,(MAX_CLU)
LD HL,(FAT_Max_Cluster)
AND A
SBC HL,DE
EX DE,HL
@ -259,14 +185,12 @@ W_T_FAT PUSH DE
LD A,DSS_Error.sys.DISK_FULL
RET C
EXX
SET_PAGE_X FATPAGE
EXX
PUSH HL
PUSH AF
LD A,1
LD (FATCASH.Update),A
LD (FatCache.Update),A
LD A,(FatBuffer.FAT_TYP)
CP "2" ; fat12
JR Z,W_T_F12
@ -274,16 +198,19 @@ W_T_F16:
PUSH DE
LD A,H
LD B,H
AND #0F
;AND #0F
AND FAT_CACHE.Mask
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
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
DUP FAT_CACHE.Degree
RRCA
EDUP
;AND #0F
AND FAT_CACHE.Mask2
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ;!HARDCODE fat16 - ŕ §ŹĽŕ § Ż¨á¨ FAT
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache
@ -314,7 +241,7 @@ W_T_F12:
ADD HL,DE ; CLUSTER * 1.5
;
;!FIXIT å¥à­ï ª ª ï-â®
IF COMPILE_UNUSED_CODE
;IF COMPILE_UNUSED_CODE
LD A,H
LD B,H
AND #1F
@ -324,10 +251,10 @@ W_T_F12:
RLCA
RLCA
AND #07
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
LD BC,(FatCache) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,RE_FAT ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
ENDIF
;ENDIF
;
LD DE,FATPAGE.cache
ADD HL,DE
@ -346,15 +273,7 @@ W_T_F12:
AND A
RET
; W_T_F01 SLA E
; RL D
; RL E
; RL D
; RL E
; RL D
; RL E
; RL D
;
W_T_F01:; ¢«¥¢® ­  4 ¡¨âa
SLA E
LD A,E
@ -384,28 +303,30 @@ W_T_F01:;
; A - NEW FAT BLOCK
RE_FAT: PUSH HL
PUSH AF
LD A,(FATCASH.Update)
LD A,(FatCache.Update)
OR A
CALL NZ,WR_FAT.Start
POP AF
LD L,A
LD H,0
LD (FATCASH),HL
LD (FatCache),HL
;FAT BLOCK * 16 = SECTOR OF FAT
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL ;!TODO FATcacheSize
;
DUP FAT_CACHE.Degree
ADD HL,HL ;x2
EDUP
LD DE,(FatBuffer.FAT_FRM)
ADD HL,DE
EX DE,HL
LD IX,0
ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
;
PUSH DE
POP IX
;LD IX,0
;ADD IX,DE ; ­ŽŹĽŕ ŤŽŁ. ἪâŽŕ 
;
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING
LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD BC,16*256 + Dss.DRV.Read ;ॣ B: 16 * 512 = 8192 (CASH SIZE) ;!TODO FATcacheSize
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;༣ B: 16 * 512 = 8192 (CASH SIZE)
RST ToDSS.DRV
POP HL
RET
@ -418,26 +339,24 @@ WR_FAT: SET_PAGE_X FATPAGE
OUT (SLOT3),A
RET
; ‡ ¯¨áì ª¥è  (¢á¥£®?) FAT-  ­  ¤¨áª
.Start: LD HL,(FATCASH)
.Start: LD HL,(FatCache)
LD H,0
;LD (FATCASH),HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT ;!TODO FATcacheSize
;FAT BLOCK * 16 = SECTOR OF FAT
DUP FAT_CACHE.Degree
ADD HL,HL ;x2
EDUP
PUSH HL
LD B,H
LD C,L ;BC - BLOCK OF FAT
LD DE,16 ;!HARDCODE ;!TODO FATcacheSize
LD DE,FAT_CACHE.Sectors
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè ;!TODO FATcacheSize
LD A,E ;!HARDCODE ; MAX ç¨áŤŽ ἪâŽŕŽ˘ ¤Ťď ç⼭¨ď ˘ Şíč
LD DE,(CORE_BUFFERS.BootSector.S_P_F) ; ᥪâ®à®¢ ­  FAT
AND A
SBC HL,DE
JR C,.WALLFAT
EX DE,HL
LD HL,16 ;!HARDCODE ; ç¨á«® ᥪâ®à®¢ ;!TODO FATcacheSize
LD HL,FAT_CACHE.Sectors
; CF = 0
SBC HL,DE
JP C,.ERR
@ -448,10 +367,14 @@ WR_FAT: SET_PAGE_X FATPAGE
LD DE,(FatBuffer.FAT_FRM)
ADD HL,DE
EX DE,HL
LD IX,0
;HL:IX - SECTOR OF FAT FOR SAVE
ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
;
PUSH DE
POP IX
;LD IX,0
;ADD IX,DE ; ­ŽŹĽŕ ŤŽŁ. ἪâŽŕ 
;
LD HL,0 ; áâ. à §àï¤
;HL:IX - SECTOR OF FAT FOR SAVE
LD DE,FATPAGE.cache ; ®âªã¤ 
LD B,A ; ç¨á«® ᥪâ®à®¢
LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
@ -463,8 +386,12 @@ WR_FAT: SET_PAGE_X FATPAGE
LD DE,(FatBuffer.FAT2_XX)
ADD HL,DE
EX DE,HL
LD IX,0
ADD IX,DE
;
PUSH DE
POP IX
;LD IX,0
;ADD IX,DE ; ­ŽŹĽŕ ŤŽŁ. ἪâŽŕ 
;
LD DE,FATPAGE.cache
LD HL,0
LD A,(FatBuffer.DRIVE)
@ -473,70 +400,132 @@ WR_FAT: SET_PAGE_X FATPAGE
AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
;
.ERR: LD A,0
LD (FATCASH.Update),A
LD (FatCache.Update),A
RET NC
POP HL
; CF = 1
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
FATCASH: WORD #0000
.Block EQU FATCASH
.Update EQU FATCASH+1
MAX_CLU: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ FAT12 (¡¥§ á«ã¦.)
FatCache: WORD #0000
.Block EQU FatCache
.Update EQU FatCache+1
FAT_Max_Cluster: WORD #0FF0 ; Ź Şá. ç¨áŤŽ ŞŤ áâĽŕŽ˘ FAT12 (ĄĽ§ áŤăŚ.)
;//MODULE: FAT_X
;[END]
;R01
;; HL - CLUSTER
;; DE - (CLUSTER)
;
;R_F_FAT EX DE,HL
; LD HL,(FAT_Max_Cluster)
; AND A
; SBC HL,DE
; EX DE,HL
; LD A,10
; RET C
; PUSH HL
; LD A,(FAT_TYP)
; CP "2"
; JP Z,R_F_F12
;R_F_F16 LD DE,768 ; DE - CLUSTERS IN CASH
; XOR A
;R_F_00H INC A ; HL - CLUSTER
; SBC HL,DE
; JP NC,R_F_00H
; ADD HL,DE
; ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
; DEC A
; LD BC,(FatCache) ; A - ELEMENT OF CASH
; CP C
; CALL NZ,RE_FAT
; LD DE,FAT
; ADD HL,DE
; LD E,(HL)
; INC HL
; LD D,(HL)
; LD HL,#FFEF
; AND A
; SBC HL,DE
; POP HL
; LD A,0
; RET
;
;R_F_F12 LD D,H
; LD E,L
; ADD HL,HL
; ADD HL,DE
; RR H
; RR L
; PUSH AF
; EX DE,HL
; LD HL,(B_P_S)
; LD B,H
; LD C,L
; ADD HL,HL
; ADD HL,BC
; EX DE,HL
; XOR A ; DE - SIZE SECTOR * 3
;R_F_00 INC A ; HL - FAT OFFSET
; SBC HL,DE
; JP NC,R_F_00
; ADD HL,DE
; DEC A
;
;
;WR_FAT LD HL,(FatCache)
; LD H,0
; LD (FatCache),HL
; LD E,L
; LD D,H
; ADD HL,HL
; ADD HL,DE
; PUSH HL
; LD B,H
; LD C,L
; INC HL
; INC HL
; INC HL
; LD DE,(S_P_F)
; LD A,3
; AND A
; SBC HL,DE
; JP C,WR_FAT1
; EX DE,HL
; LD HL,3
; AND A
; SBC HL,DE
; JP C,FATERR
; LD A,L
;WR_FAT1 LD H,B
; LD L,C
; LD DE,(FAT_FRM)
; ADD HL,DE
; EX DE,HL
; LD IX,0
; ADD IX,DE
; LD DE,FAT
; LD HL,0
; 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
;

View File

@ -1 +1 @@
621
734

View File

@ -9,6 +9,31 @@
;
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
define _bit (1<?((FAT_CACHE.Sectors-1)
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
;
FAT_CACHE:
.Size EQU #2000 ; bytes
.Sector_Size EQU 512
.Sectors EQU .Size / .Sector_Size
.bytes_record EQU 2
.Degree EQU _shift ;.Sectors >>> (.Sectors/8)
.Mask EQU high (.Size/.bytes_record - 1) ;#07 ;.Sectors - 1
.Mask2 EQU ((1<<(.bytes_record*8)) / (.Size/2))-1
;
undefine _bit
undefine _shift
DISPLAY ".Size = ",/A,.Size
DISPLAY ".Sectors = ",/A,.Sectors
DISPLAY ".Degree = ",/A,.Degree
DISPLAY ".Mask = ",/A,.Mask
DISPLAY ".Mask2 = ",/A,.Mask2
; DISPLAY " test = ",/A, (1<?((.t)&128)) + (1<?((.t)&4)) + (1<?((.t)&4))
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
DSS_MAX_DRIVES_AMOUNT EQU 26
DEFINE MAX_RAMDRIVES 16
DEFINE NeedSafePort_Y 1

View File

@ -60,6 +60,7 @@ RUN_COMMAND:
; c - ¤«¨­  áâப¨ á ª®¬ ­¤®©
; ‚ë室: CF=1 - ¢ HL  ¤à¥á ª«îç  ­  ¨á¯®«­¥­¨¥
; CF=0 - ­¥â ®¯®§­ ­®£® ª«îç 
; !FIXIT ¯¥א¥¤¥« גל םגד וא¥­ל
RUN_OPTION:
.cont: EX DE,HL
LD B,C