sys: fixed a bug in GETROOT reported by Roman Boykov.

comment fixed
This commit is contained in:
Anatoliy Belyanskiy 2024-06-28 00:38:22 +10:00
parent 8c1b27e2af
commit eb3ee21087

View File

@ -14,11 +14,11 @@
MODULE DSS_Boot_Loader MODULE DSS_Boot_Loader
; BIOS 3.06 § £à㦠¥â ®¤¨­ ᥪâ®à § £àã§ç¨ª  ¨ ¯¥à¥¤ ñâ ¥¬ã ã¯à ¢«¥­¨¥. ; BIOS 3.06 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E1A5AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E0A5A4><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>.
; 0 - ®à¨£¨­ «ì­ë© ¢ à¨ ­â § ¯ã᪠ DSS, 1 - ¢ à¨ ­â ‘ ©¬ ­  ; 0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A8A0> <20><><EFBFBD><EFBFBD>᪠ DSS, 1 - <20><><EFBFBD><E0A8A0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DEFINE ORIGINAL_DSS 0 DEFINE ORIGINAL_DSS 0
; 1 - ¡ã¤¥â £à㧨âì ¢¥àá¨î ‘ ©¬ ­  ¨ ®á­®¢­ãî. 0 - ⮫쪮 ®á­®¢­ãî. ; 1 - <EFBFBD><EFBFBD> <20><><EFBFBD><E3A7A8> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E1ADAE><EFBFBD><EFBFBD>. 0 - ⮫쪮 <20><EFBFBD><E1ADAE><EFBFBD><EFBFBD>.
DEFINE UNIVERSAL_BOOT 1 DEFINE UNIVERSAL_BOOT 1
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -43,7 +43,7 @@ DRIVE: _mSYSID
; LD SP,#C000 ; LD SP,#C000
; ; ; ;
LD (DRIVE),A LD (DRIVE),A
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£® ;[ ] 17.12.2023 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
XOR A XOR A
LD (DRIVE+1),A LD (DRIVE+1),A
; ;
@ -59,7 +59,7 @@ DRIVE: _mSYSID
BIT 7,A BIT 7,A
JR Z,GOOD_DRIVE JR Z,GOOD_DRIVE
EX DE,HL EX DE,HL
LD DE,2*256 + 21 ;!HARDCODE ¥á«¨ ¢¥àá¨ï ­¨¦¥ 2.21, â® ®è¨¡ª  LD DE,2*256 + 21 ;!HARDCODE <EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 2.21, <20> <20><EFBFBD><E8A8A1>
SBC HL,DE SBC HL,DE
LD HL,MESSAGES.INCORR LD HL,MESSAGES.INCORR
RET C ; goto FAIL RET C ; goto FAIL
@ -67,7 +67,7 @@ DRIVE: _mSYSID
GOOD_DRIVE: LD DE,#8200 ;!HARDCODE GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
LD HL,0 LD HL,0
LD IX,2 LD IX,2
LD BC,LOAD_SECTORS*256 + BIOS.DRV_READ ; ¤®§ £à㧪  ᥪâ®à®¢ § £àã§ç¨ª  LD BC,LOAD_SECTORS*256 + BIOS.DRV_READ ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD A,(DRIVE) LD A,(DRIVE)
RST ToBIOS_18 RST ToBIOS_18
JP NC,CONTINUE JP NC,CONTINUE
@ -164,7 +164,7 @@ CONTINUE: LD HL,0
; ;
LD HL,MESSAGES.NO_SYS LD HL,MESSAGES.NO_SYS
RET C ; goto FAIL RET C ; goto FAIL
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢ ; [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> system.dos <20><><EFBFBD><EFBFBD><EFBFBD> #4000 <20><><EFBFBD>
LD HL,(FSIZE1) LD HL,(FSIZE1)
LD A,H LD A,H
OR L OR L
@ -177,14 +177,14 @@ CONTINUE: LD HL,0
.set_no_size: LD (LOAD_CORE.BIG_CORE),A .set_no_size: LD (LOAD_CORE.BIG_CORE),A
OR A OR A
PUSH AF PUSH AF
; § £à㧪  ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EXX EXX
LD HL,(FCLUSTER_H) LD HL,(FCLUSTER_H)
EXX EXX
LD HL,(FCLUSTR_L) LD HL,(FCLUSTR_L)
LD DE,#C000 LD DE,#C000
CALL LOAD_CORE CALL LOAD_CORE
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢ ; [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> system.dos <20><><EFBFBD><EFBFBD><EFBFBD> #4000 <20><><EFBFBD>
EX AF,AF' EX AF,AF'
POP AF POP AF
JR Z,.no_big_core JR Z,.no_big_core
@ -195,10 +195,10 @@ CONTINUE: LD HL,0
LD (LOAD_CORE.BANKDOS),A LD (LOAD_CORE.BANKDOS),A
LD A,SUBLOAD_SIZE LD A,SUBLOAD_SIZE
LD (LOAD_CORE.max_sectors),A LD (LOAD_CORE.max_sectors),A
LD (LOAD_CORE.BIG_CORE),A ; ⥯¥àì íâ® áçñâ稪 ®áâ ¢è¨åáï ᥪâ®à®¢ LD (LOAD_CORE.BIG_CORE),A ; <EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><20><><EFBFBD><E2A0A2><EFBFBD><EFBFBD><>
; ;
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster) LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢ CP #20 + 1 ; !HARDCODE <EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><E3A6A0><EFBFBD><EFBFBD><>
JP NC,INC_SECTOR_NUM JP NC,INC_SECTOR_NUM
;CALL R_F_FAT ; next cluster in chain ;CALL R_F_FAT ; next cluster in chain
CALL READ_FROM_FAT ; next cluster in chain CALL READ_FROM_FAT ; next cluster in chain
@ -223,11 +223,11 @@ RUN_CORE: DI
; ;
;DOS LOADED ;DOS LOADED
;IF UNIVERSAL_BOOT ;IF UNIVERSAL_BOOT
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£® ;[ ] 17.12.2023 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
LD A,(DRIVE+1) ; ­®¬¥à à §¤¥«  LD A,(DRIVE+1) ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>
LD L,A LD L,A
; ;
LD A,(DRIVE) ; ­®¬¥à ãáâனá⢠ LD A,(DRIVE) ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
LD C,Dss.Version LD C,Dss.Version
RST ToDSS RST ToDSS
JP C,FAIL.NULL JP C,FAIL.NULL
@ -260,7 +260,7 @@ RUN_CORE: DI
; LD A,(DRIVE) ; LD A,(DRIVE)
; LD BC,Dss.BootDSK.Set ; LD BC,Dss.BootDSK.Set
; RST ToDSS ; RST ToDSS
; LD B,Dss.BootDSK.Get ; LD B<EFBFBD>,Dss.BootDSK.Get
; ENDIF ; ENDIF
;ENDIF ;ENDIF
; ;
@ -286,7 +286,7 @@ RUN_CORE: DI
; ;
INC_SECTOR_NUM: PUSH DE INC_SECTOR_NUM: PUSH DE
CALL CLUSTER_TO_SECTOR CALL CLUSTER_TO_SECTOR
LD DE,#20 ;!HARDCODE ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢ LD DE,#20 ;!HARDCODE <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><E2A0AD><EFBFBD><>
ADD IX,DE ADD IX,DE
JR NC,.no_inc JR NC,.no_inc
INC HL INC HL
@ -294,8 +294,8 @@ INC_SECTOR_NUM: PUSH DE
POP DE POP DE
LD BC,RUN_CORE LD BC,RUN_CORE
PUSH BC PUSH BC
PUSH HL ; ¤«ï ¡ « ­á  PUSH HL ; <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PUSH HL ; ¤«ï ¡ « ­á  PUSH HL ; <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JP LOAD_CORE.subload JP LOAD_CORE.subload
; ;
@ -314,7 +314,7 @@ PART_TB: LD HL,(BOOT_BUFFER + BOOT_SECTOR.MBR_SIGNATURE)
;LD HL,YEPDOS ;LD HL,YEPDOS
; ;
.part_loop: LD A,(IX + _sMBR_PARTITION_RECORD.FS_ID) .part_loop: LD A,(IX + _sMBR_PARTITION_RECORD.FS_ID)
; …‘‹ˆ ¤®¡ ¢¨âáï ¯®¤¤¥à¦ª  ¥éñ ­¥áª®«ìª¨å ⨯®¢ ”‘, â® ¯®¬¥­ïâì 1fs ­  2fs ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <><E2A8AF> <20><>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1fs <20><> 2fs
; 1 ; 1
CP PartitionSysTypes.FAT16_LBA CP PartitionSysTypes.FAT16_LBA
JR Z,YEPDOS JR Z,YEPDOS
@ -362,13 +362,13 @@ PART_TB: LD HL,(BOOT_BUFFER + BOOT_SECTOR.MBR_SIGNATURE)
; ;
; ;
YEPDOS: ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£® YEPDOS: ;[ ] 17.12.2023 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
LD A,#80 LD A,#80
CP (IX + _sMBR_PARTITION_RECORD.isActive) CP (IX + _sMBR_PARTITION_RECORD.isActive)
JR NZ,PART_TB.next JR NZ,PART_TB.next
LD A,4 ;!HARDCODE áç¥â稪 § ¯¨á¥© ¯ àâ¨æ¨© ¢ MBR LD A,4 ;!HARDCODE <EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><20> MBR
SUB B SUB B
PUSH AF ; ­®¬¥à § £à㧮筮£® à §¤¥«  PUSH AF ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㧮筮<E3A7AE><E7ADAE><><E0A0A7><EFBFBD><EFBFBD>
; ;
LD L,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 0) LD L,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 0)
LD H,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 1) LD H,(IX + _sMBR_PARTITION_RECORD.Start_LBA + 1)
@ -382,10 +382,10 @@ YEPDOS: ;[ ] 17.12.2023
LD DE,BOOT_BUFFER LD DE,BOOT_BUFFER
LD BC,1*256 + BIOS.DRV_READ LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS_18 RST ToBIOS_18
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£® ;[ ] 17.12.2023 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
POP AF POP AF
POP BC POP BC
LD L,A ; ­®¬¥à § £à㧮筮£® à §¤¥«  LD L,A ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㧮筮<E3A7AE><E7ADAE><><E0A0A7><EFBFBD><EFBFBD>
LD A,C LD A,C
; ;
RET RET
@ -409,7 +409,7 @@ GET_BPB: LD HL,#0000
LD A,(DRIVE) LD A,(DRIVE)
RST ToBIOS_18 RST ToBIOS_18
RET C RET C
; ¯¥à¥ª¨¤ë¢ ­¨¥ ç á⨠§ £àã§ç¨ª  ¨§ 0 ᥪâ®à  ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 0 ᥪ<><E1A5AA>
LD HL,BOOT_BUFFER + (_sBOOT_SECTOR.PARTITION_TABLE - ZERO_SECTOR_OF_BPB.Size) LD HL,BOOT_BUFFER + (_sBOOT_SECTOR.PARTITION_TABLE - ZERO_SECTOR_OF_BPB.Size)
LD DE,ZERO_SECTOR_OF_BPB LD DE,ZERO_SECTOR_OF_BPB
LD BC,ZERO_SECTOR_OF_BPB.Size LD BC,ZERO_SECTOR_OF_BPB.Size
@ -423,7 +423,7 @@ GET_BPB: LD HL,#0000
JR NZ,.NX1 JR NZ,.NX1
CALL PART_TB ;HDD CALL PART_TB ;HDD
RET C RET C
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£® ;[ ] 17.12.2023 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E2A8A2><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD>, <20> <20><> <20> <20><><EFBFBD><E0A2AE>
LD (DRIVE+1),HL LD (DRIVE+1),HL
; ;
.NX1: CP #00 .NX1: CP #00
@ -534,7 +534,7 @@ GET_BPB: LD HL,#0000
JP NC,.loop3 JP NC,.loop3
.loop3.end: ; .loop3.end: ;
LD (FatBuffer.BytesPerCluster),HL LD (FatBuffer.BytesPerCluster),HL
; LD DE,#8001 ; ¯à®¢¥àª  ­  à §¬¥à ª« áâ¥à  ¡®«ìè¥ 32 ª¡ - ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ; !TODO ; LD DE,#8001 ; <EFBFBD><EFBFBD><20><><><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 32 <20><> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ; !TODO
; AND A ; AND A
; SBC HL,DE ; SBC HL,DE
; CCF ; CCF
@ -596,14 +596,14 @@ GET_BPB: LD HL,#0000
; HL:DE = DataSec ; HL:DE = DataSec
; ;
LD A,(FatBuffer.SectorsPerCluster) LD A,(FatBuffer.SectorsPerCluster)
; HL:DE / A => DE:BC, H=0, L - ®áâ â®ª ; HL:DE / A => DE:BC, H=0, L - <EFBFBD><EFBFBD><EFBFBD>
;CALL DIV_by_Shifts ;CALL DIV_by_Shifts
LD C,A LD C,A
DEC A DEC A
JR Z,.DIV_exit JR Z,.DIV_exit
; ;
AND E AND E
LD B,A ; ®áâ â®ª LD B,A ; <EFBFBD><EFBFBD><EFBFBD>
LD A,C LD A,C
RRCA RRCA
; ;
@ -620,7 +620,7 @@ GET_BPB: LD HL,#0000
LD H,0 LD H,0
LD L,A LD L,A
; ;
; ¢ëïá­ï¥¬ à §à來®áâì FAT ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 ࠧ<><EFBFBD><EFA4AD><EFBFBD><EFBFBD> FAT
LD A,D LD A,D
OR E OR E
JR NZ,.its_FAT32 JR NZ,.its_FAT32
@ -637,8 +637,8 @@ GET_BPB: LD HL,#0000
; ;
.its_FAT32: LD A,(BOOT_BUFFER + BOOT_SECTOR.MainFATnumber) .its_FAT32: LD A,(BOOT_BUFFER + BOOT_SECTOR.MainFATnumber)
CP #80 CP #80
JR C,.mirrored_FATs ;¥á«¨ ¢á¥ ª®¯¨¨ FAT ¨á¯®«ì§ãîâáï JR C,.mirrored_FATs ;<EFBFBD><20><> <20><><EFBFBD><EFBFBD><EFBFBD> FAT <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; ¨á¯®«ì§ã¥âáï ⮫쪮 ®¤­  ª®¯¨ï FAT ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> FAT
LD HL,(FatBuffer.FAT1_SEC_H) LD HL,(FatBuffer.FAT1_SEC_H)
LD DE,(FatBuffer.SectorsPerFAT_H) LD DE,(FatBuffer.SectorsPerFAT_H)
LD D,0 LD D,0
@ -717,12 +717,12 @@ CLUSTER_TO_SECTOR:
; ;
; ¯®¨áª system.dos ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> system.dos
GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H) GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
LD IX,(FatBuffer.RootDirFirstSector_L) LD IX,(FatBuffer.RootDirFirstSector_L)
LD BC,(PARTITION_START_L) LD BC,(PARTITION_START_L)
LD DE,(PARTITION_START_H) LD DE,(PARTITION_START_H)
; [x] 28/04/2024. Bug with incorrect reading root dir. Found 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,DE ADC HL,DE
; ;
@ -731,9 +731,9 @@ GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
LD A,(FatBuffer.DirSizeInSectors) LD A,(FatBuffer.DirSizeInSectors)
JR NZ,.NEXTSEC JR NZ,.NEXTSEC
; ;
LD A,(FatBuffer.SectorsPerCluster);!FIXIT ¯à®çâñâ ⮫쪮 ¯¥à¢ë© ª« áâ¥à ª â «®£  ­  FAT32 LD A,(FatBuffer.SectorsPerCluster);!FIXIT <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E2A0AB><EFBFBD> <20><> FAT32
.NEXTSEC: PUSH AF .NEXTSEC: PUSH AF
; [x] 28/04/2024. Bug with incorrect reading root dir. Found 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,DE ;ADC HL,DE
; ;
@ -752,7 +752,7 @@ GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
LD A,B LD A,B
; next sector ; next sector
LD BC,1 LD BC,1
; [x] 28/04/2024. Bug with incorrect reading root dir. Found 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 ADC HL,BC
DEC HL DEC HL
@ -799,13 +799,13 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
LD BC,FAT_DIRECTORY_RECORD LD BC,FAT_DIRECTORY_RECORD
LDIR LDIR
; ZF = 1, CF = 0, A != 0 ; ZF = 1, CF = 0, A != 0
AND A ; ­  ¢ë室¥ ZF = CF = 0 AND A ; <EFBFBD><EFBFBD> <20><><EFBFBD> ZF = CF = 0
RET RET
; HL - CLUSTER ; HL - CLUSTER
; DE - ADDRESS ; DE - ADDRESS
; !TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ; !TODO <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> SYSTEM.DOS
; [ ] ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë ; [ ] <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E3A7A8> <20><><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD><E0A0AD><EFBFBD>
LOAD_CORE: LD (READMEM),DE LOAD_CORE: LD (READMEM),DE
.loop: PUSH HL .loop: PUSH HL
EXX EXX
@ -859,7 +859,7 @@ LOAD_CORE: LD (READMEM),DE
POP HL POP HL
CCF CCF
RET NC RET NC
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢ ; [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> system.dos <20><><EFBFBD><EFBFBD><EFBFBD> #4000 <20><><EFBFBD>
.BIG_CORE+1: LD A,0 .BIG_CORE+1: LD A,0
DEC A DEC A
@ -878,14 +878,14 @@ LOAD_CORE: LD (READMEM),DE
; ;
; HL:DE / A => DE:BC, H=0, L - ®áâ â®ª ; HL:DE / A => DE:BC, H=0, L - <EFBFBD><EFBFBD><EFBFBD>
; DIV_by_Shifts: ; DIV_by_Shifts:
; LD C,A ; LD C,A
; DEC A ; DEC A
; JR Z,.DIV_exit ; JR Z,.DIV_exit
; ; ; ;
; AND E ; AND E
; LD B,A ; ®áâ â®ª ; LD B,A ; <EFBFBD><EFBFBD><EFBFBD>
; LD A,C ; LD A,C
; RRCA ; RRCA
; ; ; ;
@ -919,10 +919,10 @@ ZERO_SECTOR_OF_BPB:
; B = 0 ; B = 0
GET_SECTOR_OF_FAT: GET_SECTOR_OF_FAT:
LD A,(FatBuffer.FAT_TYPE) LD A,(FatBuffer.FAT_TYPE)
LD B,FAT_CACHE.Degree_32 ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥­­ãî LD B,FAT_CACHE.Degree_32 ;!FIXIT <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
XOR FAT_TYPE.x32 XOR FAT_TYPE.x32
JR Z,.next JR Z,.next
LD B,FAT_CACHE.Degree ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥­­ãî LD B,FAT_CACHE.Degree ;!FIXIT <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
XOR A XOR A
.next: LD C,A .next: LD C,A
; ;
@ -935,18 +935,18 @@ GET_SECTOR_OF_FAT:
; ;
;¢å®¤: HL - ­®¬¥à ª« áâ¥à  ;<EFBFBD>室: HL - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE ;<EFBFBD><EFBFBD>室: HL - <20><><EFBFBD><EFBFBD> <20><EFBFBD><E3A6AD> <20><EFBFBD><E7A5A9> <20> <20><><EFBFBD><E0A0AD> FATPAGE
; CF - çñâ­ë©/­¥çñâ­ë©  ¤à¥á ª« áâ¥à  ; CF - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GET_FAT12_CELL: LD D,H GET_FAT12_CELL: LD D,H
LD E,L LD E,L
SRL H SRL H
RR L ; ᤢ¨£ ¢¯à ¢® ç¥à¥§ CF RR L ; <EFBFBD><EFBFBD> <20><><EFBFBD> <20> CF
PUSH AF ; á®åà. ä« £ PUSH AF ; <EFBFBD><EFBFBD><EFBFBD>. 䫠<>
ADD HL,DE ; CLUSTER * 1.5 ADD HL,DE ; CLUSTER * 1.5
; ;
IF FAT_CACHE.Size_12 < #1800 IF FAT_CACHE.Size_12 < #1800
;!FIXIT ®¯â¨¬¨§¨à®¢ âì ;!FIXIT <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD A,H LD A,H
LD B,H LD B,H
; ;
@ -965,12 +965,12 @@ GET_FAT12_CELL: LD D,H
AND #07 AND #07
;AND FAT_CACHE.Part_Mask_16 ;AND FAT_CACHE.Part_Mask_16
; ;
; [ ] ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï ; [ ] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20> <20><><EFBFBD><E6A5A4><EFBFBD> READ_FAT_TABLE. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> ॣ. A <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
CP E CP E
LD E,A LD E,A
; ;
CALL NZ,READ_FAT_TABLE ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT-  CALL NZ,READ_FAT_TABLE ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> 16 ᥪ<>஢ FAT-<2D>
ENDIF ENDIF
; ;
LD DE,FATPAGE.cache LD DE,FATPAGE.cache
@ -978,8 +978,8 @@ GET_FAT12_CELL: LD D,H
POP AF POP AF
RET RET
; ;
;¢å®¤: HL - ­®¬¥à ª« áâ¥à  ;<EFBFBD>室: HL - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE ;<EFBFBD><EFBFBD>室: HL - <20><><EFBFBD><EFBFBD> <20><EFBFBD><E3A6AD> <20><EFBFBD><E7A5A9> <20> <20><><EFBFBD><E0A0AD> FATPAGE
GET_FAT16_CELL: LD A,H GET_FAT16_CELL: LD A,H
LD B,H LD B,H
AND FAT_CACHE.Size_Mask_16 AND FAT_CACHE.Size_Mask_16
@ -998,14 +998,14 @@ GET_FAT16_CELL: LD A,H
LD E,A LD E,A
; ;
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT-  LD DE,FATPAGE.cache ; <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> FAT-<2D>
ADD HL,DE ; ­  ï祩ªã FAT ADD HL,DE ; <EFBFBD><EFBFBD> <20><EFBFBD><E7A5A9> FAT
RET RET
; ;
; ;
;RE_FAT: ;RE_FAT:
;RX01 ;RX01
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT-  ; <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><>஢ FAT-<2D>
; DE - NEW FAT BLOCK ; DE - NEW FAT BLOCK
READ_FAT_TABLE: PUSH HL READ_FAT_TABLE: PUSH HL
; ;
@ -1014,7 +1014,7 @@ READ_FAT_TABLE: PUSH HL
; ;
CALL GET_SECTOR_OF_FAT CALL GET_SECTOR_OF_FAT
; ;
; BC:HL - ­®¬¥à «®£.ᥪâ®à  ; BC:HL - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>.ᥪ<><E1A5AA>
LD DE,(FatBuffer.FAT1_SEC_L) LD DE,(FatBuffer.FAT1_SEC_L)
ADD HL,DE ADD HL,DE
; ;
@ -1052,9 +1052,9 @@ READ_FAT_TABLE: PUSH HL
POP HL POP HL
RET RET
;¢å®¤: HL':HL - ­®¬¥à ª« áâ¥à  ;<EFBFBD>室: HL':HL - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE ;<EFBFBD><EFBFBD>室: HL - <20><><EFBFBD><EFBFBD> <20><EFBFBD><E3A6AD> <20><EFBFBD><E7A5A9> <20> <20><><EFBFBD><E0A0AD> FATPAGE
GET_FAT32_CELL: ; ¤¢¨£ ¥¬ ¢«¥¢® HL':H GET_FAT32_CELL: ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> HL':H
LD A,H LD A,H
EXX EXX
LD C,A LD C,A
@ -1063,13 +1063,13 @@ GET_FAT32_CELL: ;
LD H,A LD H,A
LD A,C LD A,C
; ;
LD B,FAT_CACHE.Degree ; 4 ᤢ¨£  LD B,FAT_CACHE.Degree ; 4 <EFBFBD><EFBFBD><EFBFBD>
.loop_block: RLCA ; << H .loop_block: RLCA ; << H
RL L ; << L' RL L ; << L'
RL H ; << H' RL H ; << H'
DJNZ .loop_block DJNZ .loop_block
EXX EXX
; ¨â®£¥ âãâ ¢ HL' ­®¬¥à ¡«®ª  FAT ; <EFBFBD> <20><EFBFBD> <20><><EFBFBD> <20> HL' <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> FAT
; ;
; HL - FAT32 OFFSET (FROM CASH) ; HL - FAT32 OFFSET (FROM CASH)
LD A,H LD A,H
@ -1086,20 +1086,20 @@ GET_FAT32_CELL: ;
SBC HL,DE SBC HL,DE
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
POP HL POP HL
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT-  LD DE,FATPAGE.cache ; <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> FAT-<2D>
ADD HL,DE ; ­  ï祩ªã FAT ADD HL,DE ; <EFBFBD><EFBFBD> <20><EFBFBD><E7A5A9> FAT
RET RET
; ;
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  ; <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> FAT-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; ¢å®¤: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®) ; <EFBFBD>室: hl - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>襥 ᫮<><E1ABAE>)
; hl' - ­®¬¥à ª« áâ¥à  (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32) ; hl' - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>襥 ᫮<><E1ABAE>. ⮫쪮 <20><><EFBFBD> FAT32)
; ¢ë室: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®) ; <EFBFBD><EFBFBD>室: hl - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>襥 ᫮<><E1ABAE>)
; hl' - ­®¬¥à ª« áâ¥à  (áâ à襥 á«®¢®) ; hl' - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>襥 ᫮<><E1ABAE>)
; de - ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®) ; de - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>襥 ᫮<><E1ABAE>)
; de' - ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®) ; de' - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>襥 ᫮<><E1ABAE>)
; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥­ ; <EFBFBD>᫨ DE':DE = 0, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HL':HL ᢮<><E1A2AE><EFBFBD><EFBFBD><EFBFBD>
; CF - ª®­¥æ 楯®çª¨ ; CF - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
READ_FROM_FAT: PUSH HL READ_FROM_FAT: PUSH HL
; ;
@ -1112,18 +1112,18 @@ READ_FROM_FAT: PUSH HL
CP FAT_TYPE.x16 CP FAT_TYPE.x16
JR C,.FAT12 JR C,.FAT12
JR NZ,.FAT32 JR NZ,.FAT32
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ­®¬¥à ; fat16, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><>. <20><><EFBFBD><EFBFBD><EFBFBD>
.FAT16: CALL GET_FAT16_CELL .FAT16: CALL GET_FAT16_CELL
LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à  LD E,(HL) ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INC HL INC HL
LD D,(HL) LD D,(HL)
; ;
LD HL,SERVICE_SECTORS.FAT16 LD HL,SERVICE_SECTORS.FAT16
.exit: POP AF .exit: POP AF
OUT (SLOT3),A OUT (SLOT3),A
; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 CF <20> <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1> = DssErr.sys.NO_ERROR
XOR A XOR A
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë ; <EFBFBD><EFBFBD><20><> <20><>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SBC HL,DE SBC HL,DE
POP HL POP HL
EXX EXX
@ -1143,7 +1143,7 @@ READ_FROM_FAT: PUSH HL
JR NC,.Correct_2 JR NC,.Correct_2
.Correct_1: LD A,E .Correct_1: LD A,E
AND #F0 AND #F0
DUP 4 ; ¢¯à ¢® ­  4 ¡¨âa DUP 4 ; <EFBFBD><EFBFBD><EFBFBD> <20><> 4 <20><><EFBFBD>a
RR D RR D
RRA RRA
EDUP EDUP
@ -1160,12 +1160,12 @@ READ_FROM_FAT: PUSH HL
EXX EXX
; ;
CALL GET_FAT32_CELL CALL GET_FAT32_CELL
; ¯à®ç¨â âì ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>襥 ᫮<><E1ABAE> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD E,(HL) LD E,(HL)
INC HL INC HL
LD D,(HL) LD D,(HL)
INC HL INC HL
; ¯à®ç¨â âì áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>襥 ᫮<><E1ABAE> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD A,(HL) LD A,(HL)
INC HL INC HL
EX AF,AF' EX AF,AF'
@ -1176,12 +1176,12 @@ READ_FROM_FAT: PUSH HL
EX AF,AF' EX AF,AF'
LD E,A LD E,A
EXX EXX
; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 CF <20> <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><E8A8A1> = DssErr.sys.NO_ERROR
XOR A XOR A
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë ¬« ¤è¥£® á«®¢  ª« áâ¥à  ; <EFBFBD><EFBFBD><20><> <20><>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><><E1ABAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD HL,SERVICE_SECTORS.FAT32.Low LD HL,SERVICE_SECTORS.FAT32.Low
SBC HL,DE SBC HL,DE
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë áâ à襣® á«®¢  ª« áâ¥à  ; <EFBFBD><EFBFBD><20><> <20><>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><><E1ABAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EXX EXX
LD HL,SERVICE_SECTORS.FAT32.High LD HL,SERVICE_SECTORS.FAT32.High
SBC HL,DE SBC HL,DE