mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +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 (FatBuffer.CacheBlock),HL
|
||||
; A = 0
|
||||
LD DE,(FatBuffer.SectorsPerFAT_H)
|
||||
LD D,A
|
||||
LD HL,(FatBuffer.SectorsPerFAT_H)
|
||||
LD H,A
|
||||
LD D,H
|
||||
LD E,L
|
||||
;EX DE,HL
|
||||
EXX
|
||||
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 B,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
|
||||
.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
|
||||
LD B,0
|
||||
LD A,(FatBuffer.DirSizeInSectors)
|
||||
@ -669,15 +676,9 @@ GET_BPB: XOR A
|
||||
LD HL,(FatBuffer.FAT1_SEC_L)
|
||||
LD DE,(FatBuffer.SectorsPerFAT_L)
|
||||
AND #0F
|
||||
JR Z,.first_FAT_active
|
||||
LD B,A
|
||||
;
|
||||
.fat_calc_loop: ADD HL,DE
|
||||
EXX
|
||||
ADC HL,DE
|
||||
EXX
|
||||
DJNZ .fat_calc_loop
|
||||
;
|
||||
CALL NZ,ALL_SECTORS_PER_FATs
|
||||
;
|
||||
.first_FAT_active:
|
||||
LD (FatBuffer.FAT1_SEC_L),HL
|
||||
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:
|
||||
; in: HL':HL - CLUSTER
|
||||
; out: HL:IX - SECTOR
|
||||
|
||||
@ -89,14 +89,14 @@
|
||||
BYTE ' Anatoliy '
|
||||
BYTE ' Belyanskiy. '
|
||||
BYTE ' Sprinter Team, '
|
||||
BYTE ' 2025 '
|
||||
BYTE ' 2026 '
|
||||
ENDIF
|
||||
ENDM
|
||||
|
||||
|
||||
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
||||
major_version equ 3 ; áâ. ®¬¥à ¢¥àᨨ
|
||||
minor_version equ 0 ; ¬«. ®¬¥à
|
||||
minor_version equ 1 ; ¬«. ®¬¥à
|
||||
;;
|
||||
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
||||
.IN_BPB EQU 1
|
||||
|
||||
@ -32,11 +32,12 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
||||
.FM: PUSH DE ; á®åà 塞 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS (¯®«ãç¥ ¨§ SEARCH)
|
||||
;
|
||||
CALL GET_FM ; enter point from ATTRIB
|
||||
POP DE
|
||||
RET C
|
||||
LD A,C
|
||||
EX AF,AF'
|
||||
;!TEST 9/11/23 record index 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
||||
POP DE
|
||||
;POP DE
|
||||
; EXX
|
||||
LD (IY+_sFM.HANDLE),E
|
||||
LD (IY+_sFM.HANDLE+1),D
|
||||
|
||||
@ -931,20 +931,23 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
; A = 0
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
||||
LD H,A
|
||||
EX DE,HL
|
||||
LD D,H
|
||||
LD E,L
|
||||
EXX
|
||||
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 B,A
|
||||
DEC A
|
||||
JR Z,.loop_mul_end
|
||||
; .Number_of_FATs * .SectorsPerFAT
|
||||
.loop_mul: ADD HL,HL
|
||||
EX DE,HL
|
||||
ADC HL,HL
|
||||
EX DE,HL
|
||||
DJNZ .loop_mul
|
||||
LD B,A
|
||||
CALL NZ,ALL_SECTORS_PER_FATs
|
||||
EXX
|
||||
PUSH HL
|
||||
EXX
|
||||
POP DE
|
||||
; DE:HL - sectors per FATs
|
||||
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||
LD B,0
|
||||
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 D,0
|
||||
EXX
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||
AND #0F
|
||||
JR Z,.first_FAT_active
|
||||
LD B,A
|
||||
;
|
||||
.fat_calc_loop: ADD HL,DE
|
||||
EXX
|
||||
ADC HL,DE
|
||||
EXX
|
||||
DJNZ .fat_calc_loop
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||
AND #0F
|
||||
LD B,A
|
||||
CALL NZ,ALL_SECTORS_PER_FATs
|
||||
;
|
||||
.first_FAT_active:
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL
|
||||
EXX
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_H),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_H),HL
|
||||
@ -1172,6 +1169,19 @@ SectorToCluster:
|
||||
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:
|
||||
; .UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||
; 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
|
||||
RST ToBIOS
|
||||
POP BC
|
||||
RET C
|
||||
JR C,.error
|
||||
;
|
||||
LD A,B
|
||||
LD C,BIOS.DRV_GET_PAR
|
||||
@ -193,7 +194,8 @@ Open: PUSH AF
|
||||
OR A ; ã¡¨à ¥¬ ZF, ¥á«¨ ¥áâì
|
||||
;
|
||||
ADD IX,DE ; ¥á«¨ à §¬¥à ᥪâ®à ¡®«ìè¥, â® ®¡«®¬
|
||||
RET
|
||||
.error: POP IY
|
||||
RET
|
||||
; ; ;
|
||||
|
||||
;
|
||||
@ -216,7 +218,19 @@ MediaCheck: CALL Open
|
||||
|
||||
|
||||
;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
|
||||
PUSH DE
|
||||
PUSH AF
|
||||
@ -225,18 +239,30 @@ GetBPB: LD IX,0
|
||||
POP DE
|
||||
POP HL
|
||||
RET C
|
||||
;
|
||||
LD BC,BOOT_SECTOR.SectorsPerTrack
|
||||
ADD HL,BC
|
||||
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 C,BIOS.DRV_GET_PAR
|
||||
RST ToBIOS
|
||||
LD A,H
|
||||
POP HL
|
||||
PUSH HL
|
||||
LD H,A
|
||||
POP AF
|
||||
LD C,H ; C heads
|
||||
POP HL ; H - drive, L - Sectors Per Track
|
||||
LD A,H ; A - drive
|
||||
LD H,C ; H - heads, L - Sectors Per Track
|
||||
LD C,BIOS.DRV_SET_PAR
|
||||
RST ToBIOS
|
||||
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
|
||||
POP IY
|
||||
RET
|
||||
; ; ;
|
||||
|
||||
|
||||
Write: LD C,BIOS.DRV_WRITE
|
||||
Write: PUSH IY
|
||||
LD C,BIOS.DRV_WRITE
|
||||
RST ToBIOS
|
||||
POP IY
|
||||
RET
|
||||
; ; ;
|
||||
|
||||
@ -324,19 +354,23 @@ GenIOCTL: BIT 7,B
|
||||
RET
|
||||
;
|
||||
.next: PUSH AF
|
||||
PUSH IY
|
||||
LD C,BIOS.DRV_GET_PAR
|
||||
RST ToBIOS
|
||||
POP IY
|
||||
JR C,.NONE_FDD
|
||||
;
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
LD A,H
|
||||
LD H,0
|
||||
;
|
||||
.mull_loop1: ADD HL,HL
|
||||
LD C,L
|
||||
LD HL,0
|
||||
LD B,H
|
||||
.mull_loop1: ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,.mull_loop1
|
||||
;
|
||||
; HL - SECTOR PER CYLLINDER
|
||||
; HL - SECTORS PER CYLINDER
|
||||
; A=0 ZF=0 CF=0
|
||||
LD B,H
|
||||
LD C,L
|
||||
@ -393,7 +427,12 @@ GenIOCTL: BIT 7,B
|
||||
; D5 - "1" RESERVED
|
||||
; D6 - ADDRESSING MODE LBA/CHS
|
||||
; D7 - "1" RESERVED
|
||||
.SetParams: PUSH AF
|
||||
.SetParams: PUSH IY
|
||||
CALL .Start
|
||||
POP IY
|
||||
RET
|
||||
;
|
||||
.Start: PUSH AF
|
||||
EXX
|
||||
EX DE,HL
|
||||
LD H,L
|
||||
@ -410,7 +449,8 @@ GenIOCTL: BIT 7,B
|
||||
JR C,.NONE_FDD
|
||||
POP AF
|
||||
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++ ]-----------------[]
|
||||
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
|
||||
Console_build = 999
|
||||
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