no bugs. отключил пока ускорялку фат - глючит

This commit is contained in:
Anatoliy Belyanskiy 2024-04-24 05:52:14 +10:00
parent 0af59044c8
commit 34e1fc6773
4 changed files with 124 additions and 100 deletions

View File

@ -87,15 +87,37 @@ GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
LD DE,(FSIZE0) LD DE,(FSIZE0)
LD HL,#4000 LD HL,#4000
SBC HL,DE SBC HL,DE
RLA JR NC,.set_no_size
.set_size: LD (BIG_SHELL),A .set_size: LD A,#FF
; .set_no_size: LD (BIG_CORE),A
OR A
PUSH AF
; § £à㧪 
LD HL,(FCLUSTR) LD HL,(FCLUSTR)
LD DE,#C000 LD DE,#C000
CALL FLOAD ; § £à㧪  CALL LOAD_CORE
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
EX AF,AF'
DI POP AF
JR Z,.no_big_core
EX AF,AF'
JR C,.no_big_core
;
IN A,(SLOT1)
LD (BANKDOS),A
LD A,SUBLOAD_SIZE
LD (LOAD_CORE.max_sectors),A
LD (BIG_CORE),A ; ⥯¥àì íâ® áçñâ稪 ®áâ ¢è¨åáï ᥪâ®à®¢
;
LD A,(BOOT.SectorsPerCluster)
CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
JP NC,INC_SECTOR_NUM
CALL C,R_F_FAT ; next cluster in chain
EX DE,HL
LD DE,#C000
CALL NC,LOAD_CORE
.no_big_core: ;
RUN_CORE: DI
XOR A XOR A
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
; ;
@ -171,6 +193,21 @@ XFAIL: CALL DOSMESS
.halt: JR .halt .halt: JR .halt
; ;
;
INC_SECTOR_NUM: PUSH DE
CALL NSECTOR
LD DE,#20 ;!HARDCODE ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢
ADD IX,DE
JR NC,.no_inc
INC HL
.no_inc: ;
POP DE
CALL .set_stack
JP RUN_CORE
.set_stack: PUSH HL
JP LOAD_CORE.subload
;
; ;
PART_TB: PUSH BC PART_TB: PUSH BC
LD HL,(BOOT+510) LD HL,(BOOT+510)
@ -439,6 +476,53 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
; ; HL - CLUSTER ; ; HL - CLUSTER
; ; DE - ADDRESS ; ; DE - ADDRESS
; ;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë ; ;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë
LOAD_CORE: LD (READMEM),DE
.loop: PUSH HL
CALL NSECTOR
LD DE,(READMEM)
LD A,(BOOT.SectorsPerCluster)
.max_sectors+1: CP #20
JR C,.SMALL_CLUSTER
;
.subload: LD A,(.max_sectors)
LD B,A
LD C,BIOS.DRV_READ_LONG
LD A,(BANKDOS)
EX AF,AF'
LD A,(DRIVE)
RST ToBIOS_18
POP HL
AND A
RET
;
.SMALL_CLUSTER: LD B,A
LD C,BIOS.DRV_READ_LONG
LD A,(BANKDOS)
EX AF,AF'
LD A,(DRIVE)
RST ToBIOS_18
;
LD HL,(READMEM)
LD DE,(CLU_LEN)
ADD HL,DE
LD (READMEM),HL
POP HL
CCF
RET NC
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
LD A,(BIG_CORE)
DEC A
LD (BIG_CORE),A
RET Z
;
CALL R_F_FAT
RET C
EX DE,HL
JP .loop
; HL - CLUSTER
; DE - ADDRESS
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë
; FLOAD: LD (READMEM),DE ; FLOAD: LD (READMEM),DE
; .LD_FILE: PUSH HL ; system.dos first cluster ; .LD_FILE: PUSH HL ; system.dos first cluster
; CALL NSECTOR ; Cluster to Sector ; CALL NSECTOR ; Cluster to Sector
@ -476,7 +560,6 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
; JR .set_drv ; JR .set_drv
; ; ; ;
; .SMALL_CLUSTER: LD B,A ; .SMALL_CLUSTER: LD B,A
; ;LD C,BIOS.DRV_READ_LONG
; LD A,(BANKDOS) ; LD A,(BANKDOS)
; EX AF,AF' ; EX AF,AF'
; LD A,(DRIVE) ; LD A,(DRIVE)
@ -511,92 +594,15 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
; LD (BANKDOS),A ; LD (BANKDOS),A
; LD HL,#C000 ; LD HL,#C000
; LD (READMEM),HL ; LD (READMEM),HL
; LD A,(BOOT.SectorsPerCluster)
; SUB SUBLOAD_SIZE + 1
; CCF
; RET NC
; LD A,SUBLOAD_SIZE
; LD (BOOT.SectorsPerCluster),A
; AND A ; AND A
; RET ; RET
; HL - CLUSTER
; DE - ADDRESS
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë
FLOAD: LD (READMEM),DE
.LD_FILE: PUSH HL ; system.dos first cluster
CALL NSECTOR ; Cluster to Sector
LD DE,(READMEM)
LD A,(BOOT.SectorsPerCluster)
CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
LD C,BIOS.DRV_READ_LONG
JR C,.SMALL_CLUSTER
LD A,(BANKDOS)
EX AF,AF'
;LD BC,#20*256 + BIOS.DRV_READ_LONG
LD B,#20 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
.set_drv: LD A,(DRIVE)
RST ToBIOS_18
JP C,GOOD_DRIVE.NoShell
POP HL
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
;AND A
;RET
LD A,(BIG_SHELL)
OR A
RET Z
;
XOR A
LD (BIG_SHELL),A
PUSH HL
CALL NSECTOR
LD DE,#20 ; !HARDCODE ª®«-¢® ¯à®ç¨â ­­ëå ᥪâ®à®¢
AND A
ADD IX,DE
JR NC,.no_inc_hl
INC HL
.no_inc_hl: LD BC,SUBLOAD_SIZE*256 + BIOS.DRV_READ ; !HARDCODE ª®«-¢® „ާ £à㦠¥¬ëå ᥪâ®à®¢
LD DE,#4000
JR .set_drv
;
.SMALL_CLUSTER: LD B,A
LD A,(BANKDOS)
EX AF,AF'
LD A,(DRIVE)
RST ToBIOS_18
JP C,GOOD_DRIVE.NoShell
;
LD HL,(READMEM)
LD DE,(CLU_LEN)
ADD HL,DE
LD (READMEM),HL
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
;POP HL
;RET C
CALL C,.more_than_1
POP HL
RET C
;
CALL R_F_FAT ; next cluster in chain
RET C
EX DE,HL
JP .LD_FILE
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
.more_than_1: LD A,(BIG_SHELL)
OR A
SCF
RET Z
IN A,(SLOT1)
LD HL,BANKDOS
CP (HL)
CCF
RET Z
LD (BANKDOS),A
LD HL,#C000
LD (READMEM),HL
LD A,(BOOT.SectorsPerCluster)
SUB SUBLOAD_SIZE + 1
CCF
RET NC
LD A,SUBLOAD_SIZE
LD (BOOT.SectorsPerCluster),A
AND A
RET
; ;
@ -906,7 +912,7 @@ DISKH EQU VALUE+48
DISKL EQU VALUE+50 DISKL EQU VALUE+50
READMEM EQU VALUE+52 READMEM EQU VALUE+52
;SHEL_FM EQU VALUE+54 ;SHEL_FM EQU VALUE+54
BIG_SHELL EQU VALUE+54 BIG_CORE EQU VALUE+54
BANKDOS EQU VALUE+55 BANKDOS EQU VALUE+55
; EQU VALUE+56 ; EQU VALUE+56

View File

@ -28,8 +28,8 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
EXX EXX
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à  LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1) LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
OR D
OR E OR E
OR D
; ;
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
@ -327,7 +327,14 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
; ‚室: HL - <20>®¬¥à ¯¥à¢®© ï祩ª¨ ª« áâ¥à  ¢ ¡«®ª¥ ä â  ; ‚室: HL - <20>®¬¥à ¯¥à¢®© ï祩ª¨ ª« áâ¥à  ¢ ¡«®ª¥ ä â 
; <20>®àâ¨âì ⮫쪮 HL ¨ A ; <20>®àâ¨âì ⮫쪮 HL ¨ A
SET_FAT32_CACHE_BLOCK_CHANGED_REGION: SET_FAT32_CACHE_BLOCK_CHANGED_REGION:
LD A,H DEC HL
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
CP FAT_TYPE.x16 + 1
JR C,.start
DEC HL
DEC HL
;
.start: LD A,H
AND #38 AND #38
LD HL,#0108 LD HL,#0108
JR Z,.set_region JR Z,.set_region
@ -391,6 +398,7 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ;
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
EXX EXX
PUSH HL PUSH HL
AND A
PUSH AF PUSH AF
PUSH DE ; ¬« ¤è¨© ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì PUSH DE ; ¬« ¤è¨© ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD ; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
@ -407,17 +415,21 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ;
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-  LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
INC HL ; ­®¬¥à ª« áâ¥à  INC HL ; ­®¬¥à ª« áâ¥à 
LD (HL),D LD (HL),D
; .exit: ;
.exit: ; [ ] ã᪮७¨¥ à ¡®âë á ªí襬 FAT IF FAST_FAT_CASHE
; [ ] ã᪮७¨¥ à ¡®âë á ªí襬 FAT
CALL SET_FAT32_CACHE_BLOCK_CHANGED_REGION CALL SET_FAT32_CACHE_BLOCK_CHANGED_REGION
; ;
ENDIF
POP AF ; ¢®ááâ. ¯®àâ POP AF ; ¢®ááâ. ¯®àâ
POP HL POP HL
OUT (SLOT3),A OUT (SLOT3),A
IFN FAST_FAT_CASHE
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD ; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
;XOR A LD A,#FF
;INC A LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
;LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A ;
ENDIF
; CF = 0 ; CF = 0
RET RET
; ;
@ -672,13 +684,17 @@ WRITE_FAT_TABLE:
LD XL,E LD XL,E
; HL:IX - ᬥ饭¨¥ ¢­ãâਠࠧ¤¥«  ­  ­ ç «® ­ã¦­®£® ¡«®ª  FAT ; HL:IX - ᬥ饭¨¥ ¢­ãâਠࠧ¤¥«  ­  ­ ç «® ­ã¦­®£® ¡«®ª  FAT
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated) LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
IF FAST_FAT_CASHE
CP #FF CP #FF
JR NZ,.SAVE_NOT_ALL_BLOCK JR NZ,.SAVE_NOT_ALL_BLOCK
ENDIF
; ;
LD DE,FATPAGE.cache ; ®âªã¤  LD DE,FATPAGE.cache ; ®âªã¤ 
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
JP ToDSS.DRV JP ToDSS.DRV
;
IF FAST_FAT_CASHE
.SAVE_NOT_ALL_BLOCK: .SAVE_NOT_ALL_BLOCK:
; A = CORE_BUFFERS.FatBuffer.CacheUpdated ; A = CORE_BUFFERS.FatBuffer.CacheUpdated
; HL:IX - ᬥ饭¨¥ ¢­ãâਠࠧ¤¥«  ­  ­ ç «® ­ã¦­®£® ¡«®ª  FAT ; HL:IX - ᬥ饭¨¥ ¢­ãâਠࠧ¤¥«  ­  ­ ç «® ­ã¦­®£® ¡«®ª  FAT
@ -735,6 +751,7 @@ WRITE_FAT_TABLE:
POP AF POP AF
DJNZ .region_loop DJNZ .region_loop
RET RET
ENDIF
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; ;
;[x] fat32 ;!TEST ;[x] fat32 ;!TEST

View File

@ -1 +1 @@
959 972

View File

@ -29,6 +29,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE USE_FSINFO_FAT32 1 ; ­¥¤®¤¥« ­®. ­ã¦­® «¨? DEFINE USE_FSINFO_FAT32 1 ; ­¥¤®¤¥« ­®. ­ã¦­® «¨?
DEFINE CHANGE_FREE_CLU_AFTER_DEL 1 DEFINE CHANGE_FREE_CLU_AFTER_DEL 1
DEFINE FAST_FAT_CASHE 0 ; !FIXIT ¡ £¨ ¯à¨ áâ¨à ­¨¨
SERVICE_SECTORS: SERVICE_SECTORS:
.FAT12 EQU #0FEF .FAT12 EQU #0FEF