SYS.EXE: исправлено несколько багов с загрузкой и буферами.

LOADDIR: fix мусор в странице каталога, если каталог меньше страницы
This commit is contained in:
Tolik 2025-04-21 01:50:31 +10:00
parent 02b4f7b39f
commit a8d7de8517
6 changed files with 55 additions and 26 deletions

View File

@ -22,10 +22,11 @@
DEFINE UNIVERSAL_BOOT 1 DEFINE UNIVERSAL_BOOT 1
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
ORG_ADDRESS EQU #8000 ORG_ADDRESS EQU #8000
LOAD_SECTORS EQU SECTORS_OF_LOADER.AFTER_BPB MAX_SECTORS_PER_PAGE EQU #20 ;¬ ªá¨¬ «ì­®¥ ª®«-¢® ᥪâ®à®¢ ¢ áâà ­¨æ¥ ;!TODO   ¥á«¨ ᥪâ®à ¡®«ìè¥ 512?
LOAD_SECTORS EQU SECTORS_OF_LOADER.AFTER_BPB
LOADER_IN_BPB: LOADER_IN_BPB:
.MAX_SIZE EQU _sBOOT_SECTOR.PARTITION_TABLE - _sBOOT_SECTOR_PARAMS_FAT32 .MAX_SIZE EQU _sBOOT_SECTOR.PARTITION_TABLE - _sBOOT_SECTOR_PARAMS_FAT32
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
DISP ORG_ADDRESS DISP ORG_ADDRESS
@ -154,7 +155,6 @@ CONTINUE: LD HL,0
LD BC,1*256 + BIOS.GetMem LD BC,1*256 + BIOS.GetMem
RST ToBIOS_18 ;GET PAGE FOR DOS RST ToBIOS_18 ;GET PAGE FOR DOS
LD (LOAD_CORE.BANKDOS),A LD (LOAD_CORE.BANKDOS),A
;
OUT (SLOT0),A OUT (SLOT0),A
; ;
CALL GET_BPB ;READ BPB CALL GET_BPB ;READ BPB
@ -183,6 +183,10 @@ CONTINUE: LD HL,0
EXX EXX
LD HL,(FCLUSTR_L) LD HL,(FCLUSTR_L)
LD DE,#C000 LD DE,#C000
; -bug: áçñâ稪 ¤«ï .SMALL_CLUSTER, ¡ £ ®â९®à⨫ Vasil Ivanov
; LD A,MAX_SECTORS_PER_PAGE
; LD (LOAD_CORE.BIG_CORE),A
;
CALL LOAD_CORE CALL LOAD_CORE
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢ ; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
EX AF,AF' EX AF,AF'
@ -193,12 +197,12 @@ CONTINUE: LD HL,0
; ;
IN A,(SLOT1) IN A,(SLOT1)
LD (LOAD_CORE.BANKDOS),A LD (LOAD_CORE.BANKDOS),A
LD A,SUBLOAD_SIZE LD A,SUBLOAD_SIZE + 1
LD (LOAD_CORE.max_sectors),A LD (LOAD_CORE.max_sectors),A
LD (LOAD_CORE.BIG_CORE),A ; ⥯¥àì íâ® áçñâ稪 ®áâ ¢è¨åáï ᥪâ®à®¢ LD (LOAD_CORE.BIG_CORE),A ; ⥯¥àì íâ® áçñâ稪 ®áâ ¢è¨åáï ᥪâ®à®¢
; ;
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster) LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢ CP MAX_SECTORS_PER_PAGE + 1 ; ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
JP NC,INC_SECTOR_NUM JP NC,INC_SECTOR_NUM
CALL READ_FROM_FAT ; next cluster in chain CALL READ_FROM_FAT ; next cluster in chain
EX DE,HL EX DE,HL
@ -209,6 +213,11 @@ CONTINUE: LD HL,0
CALL NC,LOAD_CORE CALL NC,LOAD_CORE
.no_big_core: ; .no_big_core: ;
RUN_CORE: DI RUN_CORE: DI
;
LD A,(READ_FAT_TABLE.FAT_PAGE)
LD C,BIOS.FreeMem
RST ToBIOS_18
;
XOR A XOR A
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
; ;
@ -264,7 +273,7 @@ RUN_CORE: DI
INC_SECTOR_NUM: PUSH DE INC_SECTOR_NUM: PUSH DE
CALL CLUSTER_TO_SECTOR CALL CLUSTER_TO_SECTOR
CALL GET_ABSOLUTE_SECTOR CALL GET_ABSOLUTE_SECTOR
LD DE,#20 ;!HARDCODE ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢ LD DE,MAX_SECTORS_PER_PAGE ; ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢
ADD IX,DE ADD IX,DE
JR NC,.no_inc JR NC,.no_inc
INC HL INC HL
@ -371,11 +380,17 @@ YEPDOS: ;[ ] 17.12.2023
; ;
GET_BPB: XOR A GET_BPB: XOR A
LD HL,FatBuffer
LD B,_sysFatBuffer
.loop_clear: LD (HL),A
INC HL
DJNZ .loop_clear
LD H,A LD H,A
LD L,A LD L,A
LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1 ; LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1
LD (FatBuffer.RootDirFirstSector_H),HL ; LD (FatBuffer.RootDirFirstSector_H),HL
LD (FatBuffer.SectorsPerFAT_H),A ; LD (FatBuffer.SectorsPerFAT_H),A
; ;
PUSH HL PUSH HL
POP IX POP IX
@ -390,6 +405,12 @@ GET_BPB: XOR A
LD BC,ZERO_SECTOR_OF_BPB.Size LD BC,ZERO_SECTOR_OF_BPB.Size
LDIR LDIR
; ;
; -bug: ¯¥à¥á¥ç¥­¨¥ ¡ãä¥à®¢ FAT ¨ SYSTEM.DOS, ¡ £ ®â९®à⨫ Vasil Ivanov
LD BC,1*256 + BIOS.GetMem
RST ToBIOS_18 ;GET PAGE FOR DOS
LD (READ_FAT_TABLE.FAT_PAGE),A
;
;
LD A,(DRIVE) LD A,(DRIVE)
LD B,A LD B,A
AND #F0 AND #F0
@ -427,7 +448,7 @@ GET_BPB: XOR A
CP #F0 CP #F0
RET C RET C
; ;
LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector) ;LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster) LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
LD (FatBuffer.SectorsPerCluster),A LD (FatBuffer.SectorsPerCluster),A
; calc. first sector FAT ; calc. first sector FAT
@ -625,8 +646,8 @@ GET_BPB: XOR A
OR E OR E
JR NZ,.its_FAT32 JR NZ,.its_FAT32
; DE=0 ; DE=0
LD (FatBuffer.RootDirStartCluster_L),DE ; LD (FatBuffer.RootDirStartCluster_L),DE
LD (FatBuffer.RootDirStartCluster_H),DE ; LD (FatBuffer.RootDirStartCluster_H),DE
LD HL,4084 LD HL,4084
SBC HL,BC SBC HL,BC
LD A,FAT_TYPE.x12 LD A,FAT_TYPE.x12
@ -786,9 +807,9 @@ GETROOT: LD HL,(FatBuffer.RootDirStartCluster_L)
LD BC,1 LD BC,1
; [x] 28/04/2024. Bug with incorrect reading root dir. Reported by Roman "Romychs" Boykov. ; [x] 28/04/2024. Bug with incorrect reading root dir. Reported by Roman "Romychs" Boykov.
ADD IX,BC ADD IX,BC
ADC HL,BC JR NC,.no_inc_HL
DEC HL INC HL
; .no_inc_HL: ;
DEC A DEC A
JR NZ,.NEXT_SECTOR JR NZ,.NEXT_SECTOR
RET RET
@ -870,7 +891,7 @@ LOAD_CORE: LD (READMEM),DE
;.skip_it: ; ;.skip_it: ;
LD DE,(READMEM) LD DE,(READMEM)
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster) LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
.max_sectors+1: CP #20 .max_sectors+1: CP MAX_SECTORS_PER_PAGE
JR C,.SMALL_CLUSTER JR C,.SMALL_CLUSTER
; ;
.subload: LD A,(.max_sectors) .subload: LD A,(.max_sectors)
@ -1082,7 +1103,7 @@ READ_FAT_TABLE: PUSH HL
; ;
IN A,(SLOT3) IN A,(SLOT3)
PUSH AF PUSH AF
LD A,SHARED_PAGE .FAT_PAGE+1: LD A,0
OUT (SLOT3),A OUT (SLOT3),A
; ;
LD A,(FatBuffer.FAT_TYPE) LD A,(FatBuffer.FAT_TYPE)
@ -1151,7 +1172,7 @@ READ_FROM_FAT: PUSH HL
; ;
IN A,(SLOT3) IN A,(SLOT3)
PUSH AF PUSH AF
LD A,SHARED_PAGE LD A,(READ_FAT_TABLE.FAT_PAGE)
OUT (SLOT3),A OUT (SLOT3),A
; ;
LD A,(FatBuffer.FAT_TYPE) LD A,(FatBuffer.FAT_TYPE)
@ -1277,6 +1298,7 @@ PARTITION_START_H EQU FSIZE1+2
PARTITION_START_L EQU PARTITION_START_H+2 PARTITION_START_L EQU PARTITION_START_H+2
READMEM EQU PARTITION_START_L+2 READMEM EQU PARTITION_START_L+2
;BIG_CORE EQU READMEM+2 ;BIG_CORE EQU READMEM+2
;FAT_PAGE EQU READMEM+2

View File

@ -637,8 +637,8 @@ messages: db 0
db major_version + '0','.' db major_version + '0','.'
db (minor_version / 10) + '0',(minor_version % 10) + '0','.' db (minor_version / 10) + '0',(minor_version % 10) + '0','.'
db "\r\nBuild date ",SYS_BUILD_DATE db "\r\nBuild date ",SYS_BUILD_DATE
db "\r\nCopyright (c) 2006 Vasil Ivanov." ;db "\r\nCopyright (c) 2006 Vasil Ivanov."
db "\r\nCopyright (c) 2023-2025 Sprinter Team." db "\r\nCopyright (c) Sprinter Team."
db "\r\n\n",0 db "\r\n\n",0
; ;
db "System successfully installed on disk " ;1 db "System successfully installed on disk " ;1

View File

@ -548,11 +548,19 @@ LOADDIR: ;!TODO optimize
CP B CP B
JR NC,.RTD1 JR NC,.RTD1
LD B,A ; ç¨á«® ᥪâ®à®¢ LD B,A ; ç¨á«® ᥪâ®à®¢
.RTD1: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; ­®¬¥à ¤¨áª  .RTD1: PUSH AF ; 21/04/2025 fix ¬ãá®à ¢ áâà ­¨æ¥ ª â «®£ , ¥á«¨ ª â «®£ ¬¥­ìè¥ áâà ­¨æë
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD DE,DIRPAGE.buffer ; ¡ãä¥à LD DE,DIRPAGE.buffer ; ¡ãä¥à
LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢ LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢
RST ToDSS.DRV RST ToDSS.DRV
POP AF ; !FIXIT ­¥â ¯à®¢¥àª¨ ­  ®è¨¡ªã
; 21/04/2025 fix ¬ãá®à ¢ áâà ­¨æ¥ ª â «®£ , ¥á«¨ ª â «®£ ¬¥­ìè¥ áâà ­¨æë
POP AF
JR NC,.exit
XOR A
LD (DE),A
;
.exit: POP AF
OUT (SLOT3),A OUT (SLOT3),A
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;

View File

@ -1 +1 @@
34 35

View File

@ -156,6 +156,5 @@ MOUSE_BAUD:
; ;
;----------------------------------------------------; ;----------------------------------------------------;
; <EFBFBD>­ЈЌ ­ЈЅ, стЅЊ хр ­Јтся Ђ тЎЉ ІЅ стр ­ЈцЅ!
SUBLOAD_SIZE EQU 2 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ­ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ­¨æã SUBLOAD_SIZE EQU 2 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ­ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ­¨æã
;----------------------------------------------------; ;----------------------------------------------------;

@ -1 +1 @@
Subproject commit 040541dcbc42338505524aae36b43aecca4dee47 Subproject commit e0dd54cb5615a23ea55bd217578aab57481fcf77