mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
Not so HotFix 2.
-bug: Убран баг в загрузчике и ядре с детектом FAT32/16 в некоторых случаях. -bug: OPEN_FN - убран улёт в левый адрес со стека при попытке открыть больше файлов, чем положено -bug: GetBPB in fdd-drv.asm - проверка MBR SIGNATURE после чтения BPB для исключения неправильной установки количества Sectors Per Track -bug: GenIOCTL.GetParams - выдавала неправильное количество секторов для FDD fdd-drv.asm: подредактирован под новый биос
This commit is contained in:
parent
12c028744a
commit
165efe603c
@ -577,21 +577,28 @@ GET_BPB: XOR A
|
|||||||
;LD L,A
|
;LD L,A
|
||||||
;LD (FatBuffer.CacheBlock),HL
|
;LD (FatBuffer.CacheBlock),HL
|
||||||
; A = 0
|
; A = 0
|
||||||
LD DE,(FatBuffer.SectorsPerFAT_H)
|
LD HL,(FatBuffer.SectorsPerFAT_H)
|
||||||
LD D,A
|
LD H,A
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
;EX DE,HL
|
||||||
|
EXX
|
||||||
LD HL,(FatBuffer.SectorsPerFAT_L)
|
LD HL,(FatBuffer.SectorsPerFAT_L)
|
||||||
; DE:HL = SectorsPerFAT
|
LD D,H
|
||||||
;
|
LD E,L
|
||||||
|
; HL':HL = SectorsPerFAT
|
||||||
|
; DE':DE = SectorsPerFAT
|
||||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
||||||
LD B,A
|
|
||||||
DEC A
|
DEC A
|
||||||
JR Z,.loop_mul_end
|
LD B,A
|
||||||
|
;
|
||||||
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
; DE:HL - sectors per FATs
|
||||||
; .Number_of_FATs * .SectorsPerFAT
|
; .Number_of_FATs * .SectorsPerFAT
|
||||||
.loop_mul: ADD HL,HL
|
|
||||||
EX DE,HL
|
|
||||||
ADC HL,HL
|
|
||||||
EX DE,HL
|
|
||||||
DJNZ .loop_mul
|
|
||||||
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||||
LD B,0
|
LD B,0
|
||||||
LD A,(FatBuffer.DirSizeInSectors)
|
LD A,(FatBuffer.DirSizeInSectors)
|
||||||
@ -669,15 +676,9 @@ GET_BPB: XOR A
|
|||||||
LD HL,(FatBuffer.FAT1_SEC_L)
|
LD HL,(FatBuffer.FAT1_SEC_L)
|
||||||
LD DE,(FatBuffer.SectorsPerFAT_L)
|
LD DE,(FatBuffer.SectorsPerFAT_L)
|
||||||
AND #0F
|
AND #0F
|
||||||
JR Z,.first_FAT_active
|
|
||||||
LD B,A
|
LD B,A
|
||||||
;
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
.fat_calc_loop: ADD HL,DE
|
;
|
||||||
EXX
|
|
||||||
ADC HL,DE
|
|
||||||
EXX
|
|
||||||
DJNZ .fat_calc_loop
|
|
||||||
;
|
|
||||||
.first_FAT_active:
|
.first_FAT_active:
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL
|
LD (FatBuffer.FAT1_SEC_L),HL
|
||||||
EXX
|
EXX
|
||||||
@ -700,6 +701,18 @@ GET_BPB: XOR A
|
|||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
; HL:HL' - first FAT sector
|
||||||
|
; DE:DE' - sectors per one FAT
|
||||||
|
; A - number of FATs (counts from 0)
|
||||||
|
ALL_SECTORS_PER_FATs:
|
||||||
|
ADD HL,DE
|
||||||
|
EXX
|
||||||
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
DJNZ ALL_SECTORS_PER_FATs
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
;NSECTOR:
|
;NSECTOR:
|
||||||
; in: HL':HL - CLUSTER
|
; in: HL':HL - CLUSTER
|
||||||
; out: HL:IX - SECTOR
|
; out: HL:IX - SECTOR
|
||||||
|
|||||||
@ -89,14 +89,14 @@
|
|||||||
BYTE ' Anatoliy '
|
BYTE ' Anatoliy '
|
||||||
BYTE ' Belyanskiy. '
|
BYTE ' Belyanskiy. '
|
||||||
BYTE ' Sprinter Team, '
|
BYTE ' Sprinter Team, '
|
||||||
BYTE ' 2025 '
|
BYTE ' 2026 '
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
|
|
||||||
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
||||||
major_version equ 3 ; áâ. ®¬¥à ¢¥àᨨ
|
major_version equ 3 ; áâ. ®¬¥à ¢¥àᨨ
|
||||||
minor_version equ 0 ; ¬«. ®¬¥à
|
minor_version equ 1 ; ¬«. ®¬¥à
|
||||||
;;
|
;;
|
||||||
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
||||||
.IN_BPB EQU 1
|
.IN_BPB EQU 1
|
||||||
|
|||||||
@ -32,11 +32,12 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
.FM: PUSH DE ; á®åà 塞 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS (¯®«ãç¥ ¨§ SEARCH)
|
.FM: PUSH DE ; á®åà 塞 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS (¯®«ãç¥ ¨§ SEARCH)
|
||||||
;
|
;
|
||||||
CALL GET_FM ; enter point from ATTRIB
|
CALL GET_FM ; enter point from ATTRIB
|
||||||
|
POP DE
|
||||||
RET C
|
RET C
|
||||||
LD A,C
|
LD A,C
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;!TEST 9/11/23 record index 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
;!TEST 9/11/23 record index 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
||||||
POP DE
|
;POP DE
|
||||||
; EXX
|
; EXX
|
||||||
LD (IY+_sFM.HANDLE),E
|
LD (IY+_sFM.HANDLE),E
|
||||||
LD (IY+_sFM.HANDLE+1),D
|
LD (IY+_sFM.HANDLE+1),D
|
||||||
|
|||||||
@ -931,20 +931,23 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
|||||||
; A = 0
|
; A = 0
|
||||||
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
||||||
LD H,A
|
LD H,A
|
||||||
EX DE,HL
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
EXX
|
||||||
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||||
; DE:HL = SectorsPerFAT
|
LD D,H
|
||||||
;
|
LD E,L
|
||||||
|
; HL':HL = SectorsPerFAT
|
||||||
|
; DE':DE = SectorsPerFAT
|
||||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
||||||
LD B,A
|
|
||||||
DEC A
|
DEC A
|
||||||
JR Z,.loop_mul_end
|
LD B,A
|
||||||
; .Number_of_FATs * .SectorsPerFAT
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
.loop_mul: ADD HL,HL
|
EXX
|
||||||
EX DE,HL
|
PUSH HL
|
||||||
ADC HL,HL
|
EXX
|
||||||
EX DE,HL
|
POP DE
|
||||||
DJNZ .loop_mul
|
; DE:HL - sectors per FATs
|
||||||
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||||
LD B,0
|
LD B,0
|
||||||
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
|
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
|
||||||
@ -1019,21 +1022,15 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
|||||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
||||||
LD D,0
|
LD D,0
|
||||||
EXX
|
EXX
|
||||||
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
||||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||||
AND #0F
|
AND #0F
|
||||||
JR Z,.first_FAT_active
|
LD B,A
|
||||||
LD B,A
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
;
|
;
|
||||||
.fat_calc_loop: ADD HL,DE
|
|
||||||
EXX
|
|
||||||
ADC HL,DE
|
|
||||||
EXX
|
|
||||||
DJNZ .fat_calc_loop
|
|
||||||
;
|
|
||||||
.first_FAT_active:
|
.first_FAT_active:
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL
|
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL
|
||||||
EXX
|
EXX
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_H),HL
|
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_H),HL
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_H),HL
|
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_H),HL
|
||||||
@ -1172,6 +1169,19 @@ SectorToCluster:
|
|||||||
JP .loop
|
JP .loop
|
||||||
;
|
;
|
||||||
|
|
||||||
|
; HL:HL' - first FAT sector
|
||||||
|
; DE:DE' - sectors per one FAT
|
||||||
|
; A - number of FATs (counts from 0)
|
||||||
|
ALL_SECTORS_PER_FATs:
|
||||||
|
ADD HL,DE
|
||||||
|
EXX
|
||||||
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
DJNZ ALL_SECTORS_PER_FATs
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
; DOS_X_Error:
|
; DOS_X_Error:
|
||||||
; .UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
; .UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||||
; SCF
|
; SCF
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
59
|
62
|
||||||
@ -178,11 +178,12 @@ Init: LD A,2 ;
|
|||||||
; ; ;
|
; ; ;
|
||||||
|
|
||||||
;
|
;
|
||||||
Open: PUSH AF
|
Open: PUSH IY
|
||||||
|
PUSH AF
|
||||||
LD C,BIOS.DRV_RESET
|
LD C,BIOS.DRV_RESET
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
POP BC
|
POP BC
|
||||||
RET C
|
JR C,.error
|
||||||
;
|
;
|
||||||
LD A,B
|
LD A,B
|
||||||
LD C,BIOS.DRV_GET_PAR
|
LD C,BIOS.DRV_GET_PAR
|
||||||
@ -193,6 +194,7 @@ Open: PUSH AF
|
|||||||
OR A ; ã¡¨à ¥¬ ZF, ¥á«¨ ¥áâì
|
OR A ; ã¡¨à ¥¬ ZF, ¥á«¨ ¥áâì
|
||||||
;
|
;
|
||||||
ADD IX,DE ; ¥á«¨ à §¬¥à ᥪâ®à ¡®«ìè¥, â® ®¡«®¬
|
ADD IX,DE ; ¥á«¨ à §¬¥à ᥪâ®à ¡®«ìè¥, â® ®¡«®¬
|
||||||
|
.error: POP IY
|
||||||
RET
|
RET
|
||||||
; ; ;
|
; ; ;
|
||||||
|
|
||||||
@ -216,7 +218,19 @@ MediaCheck: CALL Open
|
|||||||
|
|
||||||
|
|
||||||
;DE - ADDRESS
|
;DE - ADDRESS
|
||||||
GetBPB: LD IX,0
|
GetBPB: PUSH IY
|
||||||
|
CALL .Start
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.Start: LD IX,0
|
||||||
|
; fix bug 14/01/2026. ¥á«¨ ¥â MBR, â® ¨ª ª¨å ¬ã⮪
|
||||||
|
LD H,D
|
||||||
|
LD L,E
|
||||||
|
LD BC,BOOT_SECTOR.MBR_SIGNATURE
|
||||||
|
ADD HL,BC
|
||||||
|
LD (HL),C
|
||||||
|
;
|
||||||
LD HL,0
|
LD HL,0
|
||||||
PUSH DE
|
PUSH DE
|
||||||
PUSH AF
|
PUSH AF
|
||||||
@ -225,18 +239,30 @@ GetBPB: LD IX,0
|
|||||||
POP DE
|
POP DE
|
||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
|
;
|
||||||
LD BC,BOOT_SECTOR.SectorsPerTrack
|
LD BC,BOOT_SECTOR.SectorsPerTrack
|
||||||
ADD HL,BC
|
ADD HL,BC
|
||||||
LD E,(HL)
|
LD E,(HL)
|
||||||
PUSH DE
|
; fix bug 14/01/2026. ¥á«¨ ¥â MBR, â® ¨ª ª¨å ¬ã⮪
|
||||||
|
LD BC,BOOT_SECTOR.MBR_SIGNATURE - BOOT_SECTOR.SectorsPerTrack
|
||||||
|
ADD HL,BC
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
LD B,(HL)
|
||||||
|
LD HL,#AA55
|
||||||
|
SBC HL,BC
|
||||||
|
LD A,DSS_Error.drv.UNKNOWN_FORMAT
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
PUSH DE ; D - drive, E - Sectors Per Track
|
||||||
LD A,D
|
LD A,D
|
||||||
LD C,BIOS.DRV_GET_PAR
|
LD C,BIOS.DRV_GET_PAR
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
LD A,H
|
LD C,H ; C heads
|
||||||
POP HL
|
POP HL ; H - drive, L - Sectors Per Track
|
||||||
PUSH HL
|
LD A,H ; A - drive
|
||||||
LD H,A
|
LD H,C ; H - heads, L - Sectors Per Track
|
||||||
POP AF
|
|
||||||
LD C,BIOS.DRV_SET_PAR
|
LD C,BIOS.DRV_SET_PAR
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
XOR A
|
XOR A
|
||||||
@ -250,14 +276,18 @@ GetBPB: LD IX,0
|
|||||||
; ; ;
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
Read: LD C,BIOS.DRV_READ
|
Read: PUSH IY
|
||||||
|
LD C,BIOS.DRV_READ
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
RET
|
RET
|
||||||
; ; ;
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
Write: LD C,BIOS.DRV_WRITE
|
Write: PUSH IY
|
||||||
|
LD C,BIOS.DRV_WRITE
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
RET
|
RET
|
||||||
; ; ;
|
; ; ;
|
||||||
|
|
||||||
@ -324,19 +354,23 @@ GenIOCTL: BIT 7,B
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.next: PUSH AF
|
.next: PUSH AF
|
||||||
|
PUSH IY
|
||||||
LD C,BIOS.DRV_GET_PAR
|
LD C,BIOS.DRV_GET_PAR
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
|
POP IY
|
||||||
JR C,.NONE_FDD
|
JR C,.NONE_FDD
|
||||||
|
;
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH DE
|
PUSH DE
|
||||||
LD A,H
|
LD A,H
|
||||||
LD H,0
|
LD C,L
|
||||||
;
|
LD HL,0
|
||||||
.mull_loop1: ADD HL,HL
|
LD B,H
|
||||||
|
.mull_loop1: ADD HL,BC
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,.mull_loop1
|
JR NZ,.mull_loop1
|
||||||
;
|
;
|
||||||
; HL - SECTOR PER CYLLINDER
|
; HL - SECTORS PER CYLINDER
|
||||||
; A=0 ZF=0 CF=0
|
; A=0 ZF=0 CF=0
|
||||||
LD B,H
|
LD B,H
|
||||||
LD C,L
|
LD C,L
|
||||||
@ -393,7 +427,12 @@ GenIOCTL: BIT 7,B
|
|||||||
; D5 - "1" RESERVED
|
; D5 - "1" RESERVED
|
||||||
; D6 - ADDRESSING MODE LBA/CHS
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
; D7 - "1" RESERVED
|
; D7 - "1" RESERVED
|
||||||
.SetParams: PUSH AF
|
.SetParams: PUSH IY
|
||||||
|
CALL .Start
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.Start: PUSH AF
|
||||||
EXX
|
EXX
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD H,L
|
LD H,L
|
||||||
@ -410,7 +449,8 @@ GenIOCTL: BIT 7,B
|
|||||||
JR C,.NONE_FDD
|
JR C,.NONE_FDD
|
||||||
POP AF
|
POP AF
|
||||||
LD C,BIOS.DRV_SET_PAR
|
LD C,BIOS.DRV_SET_PAR
|
||||||
JP ToBIOS
|
RST ToBIOS
|
||||||
|
RET
|
||||||
; ; ;
|
; ; ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,16 @@
|
|||||||
|
IFNDEF INCREASE_BUILD
|
||||||
|
DEFINE INCREASE_BUILD 0
|
||||||
|
ELSE
|
||||||
|
DEFINE+ INCREASE_BUILD 1
|
||||||
|
ENDIF
|
||||||
;------------------[ „®áâ ñ¬ ⥪ãéãî ¤ âã ¨ BUILD++ ]-----------------[]
|
;------------------[ „®áâ ñ¬ ⥪ãéãî ¤ âã ¨ BUILD++ ]-----------------[]
|
||||||
LUA PASS1
|
LUA PASS1
|
||||||
Console_build = increase_build("./SHELL/build.txt")
|
if sj.get_define("INCREASE_BUILD") > "0" then
|
||||||
|
Console_build = increase_build("./SHELL/build.txt")
|
||||||
|
else
|
||||||
|
Console_build = get_build("./SHELL/build.txt")
|
||||||
|
end
|
||||||
|
|
||||||
if Console_build > 999 then
|
if Console_build > 999 then
|
||||||
Console_build = 999
|
Console_build = 999
|
||||||
print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a")
|
print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a")
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1
|
Subproject commit 467265101452bce67322e4b77cc0878044859eaa
|
||||||
Loading…
Reference in New Issue
Block a user