big_dir: F_FIRST ¨ F_NEXT ¯®ç⨠OK

-bugfix: fdd-drv.asm GetBPB RomanRom2 bug fix))
This commit is contained in:
Tolik 2026-01-14 22:22:32 +10:00
parent ef258143e7
commit 32dca48eaf
4 changed files with 92 additions and 38 deletions

View File

@ -29,7 +29,6 @@ F_FIRST: CALL .INIT_VARS
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
AND A
CALL NZ,LOADDIR ;!FIXIT check error
;
CALL MASK
RET C
;
@ -47,15 +46,9 @@ F_FIRST: CALL .INIT_VARS
LD (DE),A
; ¯à¨ ¯à릪¥ á ­  á⥪¥ ¤®«¦¥­ «¥¦ âì record index
.FIND_S: INC DE
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 bytes
;LD BC,FAT_DIRECTORY_RECORD
;ADD IX,BC
LD (F_NEXT.CURHND),IX
POP HL ; record index
;!FIXIT ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥
; ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
;INC HL
LD (F_NEXT.RecordIndex),HL
LD (F_NEXT.RecordIndex),HL ; ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥. ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
;
LD HL,CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.RESERVED_NT
LD BC,CORE_BUFFERS.HANDBUF.SIZE - FAT_DIRECTORY_RECORD.RESERVED_NT
@ -67,27 +60,34 @@ F_FIRST: CALL .INIT_VARS
.FNDMODE+1: LD A,0
AND %0111'1111
JR NZ,.FIND_M2
;
LD BC,11 ;!HARDCODE
LDIR
.exit: LD A,F_NEXT.NO_NEXT.NO
LD (F_NEXT.NO_NEXT),A
.FindCounter+1: LD HL,0
INC HL
DEC HL
LD (.FindCounter),HL
XOR A
; CF=0
;XOR A
RET
;
.FIND_M2: ;!TODO LFN
;CP 2
;CALL NC,GetName_LFN
;CALL C,GetName
;
CALL GetName
;
JR .exit
;
.INIT_VARS: LD (.SEARCH_ATTRIBUT),A
LD (.DTABUF),DE
LD DE,0
LD (.FindCounter),DE
LD DE,0 ; [ ] big dir for new directory read functions
RLA
JR C,.setCounter
;
LD DE,512 ; for old directory read functions
.setCounter: LD (.FindCounter),DE
LD A,B
LD (.FNDMODE),A
RET
@ -112,17 +112,14 @@ F_NEXT:
;
XOR A ; F_NEXT.NO_NEXT.YES
LD (F_NEXT.NO_NEXT),A
; ¯à®¢¥àª  ­  ०¨¬ ªãç¨ ä ©«®¢ ¨«¨ ­¥ ¡®«ìè¥ 512
LD A,(F_FIRST.FindCounter + 1) ; áâ à訩 ¡ ©â áçñâ稪 
CP 2
JR C,.nextSearch
;
LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - ­¥¯à ¢¨«ì­® ¨á¯®«ì§®¢ âì íâ®, ­ ¤® ­®¢ãî ¯¥à¥¬¥­­ãî
RLA
; ¯à®¢¥àª  ­  ०¨¬. ªãç  ä ©«®¢ ¨«¨ ­¥ ¡®«ìè¥ 512?
LD BC,(F_FIRST.FindCounter)
LD A,B
OR C
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
CCF
RET C
; ;
SCF
RET Z
;
.nextSearch: LD A,(HL)
PUSH HL
CALL .NSEARCH
@ -139,7 +136,6 @@ F_NEXT:
EX AF,AF'
CPL
LD C,A
;!TEST 9/11/23 record index
EXX
.RecordIndex+1: LD DE,0 ; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
EXX
@ -149,6 +145,3 @@ F_NEXT:
PUSH DE ; ¢ë室 ¢ SEARCH ¨§ SEARCH_RECORD_IN_DIR_CACHE
JP SEARCH_RECORD_IN_DIR_CACHE.next_record
;
/*
î¡ë¥ ¨§¬¥­¥­¨ï ¢ ¤¨à¥ªâ®à¨¨ ã¡ìîâ ¥ñ.
*/

View File

@ -6,6 +6,7 @@ GetName: LD BC,#08FF ;!HARDCODE
LD A,' '
.loop: CP (HL)
JR Z,.skip
;
LDI
DJNZ .loop
JR .extension
@ -17,6 +18,7 @@ GetName: LD BC,#08FF ;!HARDCODE
.extension: CP (HL)
LD A,"."
JR NZ,.copy_ext
;
XOR A
.copy_ext: LD (DE),A
INC DE
@ -26,6 +28,7 @@ GetName: LD BC,#08FF ;!HARDCODE
LD A,' '
.loop2: CP (HL)
JR Z,.exit
;
LDI
DJNZ .loop2
.exit: XOR A

View File

@ -217,6 +217,13 @@ MediaCheck: CALL Open
;DE - ADDRESS
GetBPB: 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 +232,38 @@ 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
; !TEST
;LD A,H ; A heads
;POP HL ; H - drive, L - Sectors Per Track
;PUSH HL
;LD H,A ; H - heads, L - Sectors Per Track
;POP AF ; A - drive
;
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

View File

@ -1,6 +1,23 @@
;------------------[ „®áâ ñ¬ ⥪ãéãî ¤ âã ¨ BUILD++ ]-----------------[]
LUA PASS1
Console_build = increase_build("./SHELL/build.txt")
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")
end
ENDLUA IFNDEF INCREASE_BUILD
DEFINE INCREASE_BUILD 0
ELSE
DEFINE+ INCREASE_BUILD 1
ENDIF
;------------------[ „®áâ ñ¬ ⥪ãéãî ¤ âã ¨ BUILD++ ]-----------------[]
LUA PASS1
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")
@ -11,6 +28,20 @@
ENDLUA
;---------------------------------------------------------------------[]
;
; Shell full version
; ­®¬¥à ¢¥àᨨ (0..9)
CONSOLE_VERS EQU 1
; ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99)
CONSOLE_MODF EQU 2
; ­®¬¥à ¡¨«¤  (0..999)
CONSOLE_BUILD EQU lua_BUILD
;
LUA ALLPASS
sj.insert_label("lua_BUILD", Console_build)
ENDLUA
;---------------------------------------------------------------------[]
;
; Shell full version
; ­®¬¥à ¢¥àᨨ (0..9)