Core: -bug in ATTRIB with OPEN_FN.FM

This commit is contained in:
Anatoliy Belyanskiy 2024-05-03 05:01:10 +10:00
parent dbc5088978
commit 4083da9fa5
8 changed files with 72 additions and 123 deletions

View File

@ -35,49 +35,55 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
;LD A,B
;
RET
;
.B_1: DJNZ .B_2
;
.WRITE_FN: AND FAT_ATTR.NoVolID ; [x] 2/12/23 ä¨ªá ¤«ï volume ID
.WRITE: PUSH AF
XOR A
;!TEST ;[x] 16/11/23 optimize get attribute
LD (OPEN_FN.TMP),A
;
CALL .OPENATR ;R002
;!TEST ;[x] 16/11/23 optimize get attribute
CALL NC,OPEN_FN.FM
;
POP BC
RET C
SET 7,(IY+_sFM.ACCESS_MODE)
;RES 3,B ;CLEAR LABEL ATTR ;R003
LD (IY+_sFM.FS_REC.ATTRIBUT),B
PUSH BC
CALL CLOSE_FN
.error: POP BC
RET C
LD A,B
RET
;R002
; ¢ë室: ¥á«¨ CF = 0, â® DE = record index
;!TEST 9/11/23 record index
.OPENATR: ;!TEST ;[x] 16/11/23 optimize get attribute
;LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
;
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
CALL MASK
RET C
LD A,FAT_ATTR.NoVolID
;!TEST ;[x] 16/11/23 optimize get attribute
JP SEARCH.Custom
;CALL SEARCH.Custom
;RET C ; § ¯¨áì ­¥ ­ ©¤¥­ 
;JP OPEN.FM ; ­  ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à 
;
;
; [ ] ; !TODO ¤«ï ª®¬ ­¤ë LABEL ¢ Shell
; 1. ¯à®¢¥à¨âì çâ® ¢ HL 㪠§ ­  ⮫쪮 ¬¥âª  ¢ ª ¢ë窠å
; 2. ¥á«¨ ¬¥âª  ¡¥§ ­¥¤®¯ãá⨬ëå ᨬ¢®«®¢, â® ¤¥« ¥¬ ¥ñ ­¥
; ⮫쪮 ¢ BPB, ­® ¨ ­  ª®à­¥¢®¬ à §¤¥«¥, ¨­ ç¥ 㤠«ï¥¬ ­  ª®à­¥¢®¬
; 3. ®âªà뢠¥¬ âà¥¡ã¥¬ë© ¤¨áª ç¥à¥§ .force, ç⮡ á¡à®á¨âì ªíè¨
.B_2: DJNZ .error_fn
;
.error_fn: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
;
.B_1: DJNZ .error_fn
.WRITE_FN:
AND FAT_ATTR.NoVolID ; [x] 2/12/23 ¢à¥¬¥­­ë© ä¨ªá ¤«ï volume ID
.WRITE: PUSH AF
XOR A
;!TEST ;[x] 16/11/23 optimize get attribute
LD (OPEN_FN.TMP),A
;
CALL .OPENATR ;R002
;!TEST ;[x] 16/11/23 optimize get attribute
CALL NC,OPEN_FN.FM
;
POP BC
RET C
SET 7,(IY+_sFM.ACCESS_MODE)
RES 3,B ;CLEAR LABEL ATTR ;R003 ;!HARDCODE attribute bit
LD (IY+_sFM.FS_REC.ATTRIBUT),B
PUSH BC
CALL CLOSE_FN
.error: POP BC
RET C
LD A,B
RET
;R002
.OPENATR:
;!TEST ;[x] 16/11/23 optimize get attribute
;LD (OPEN.TMP),A ; à ¡. ï祩ª  (§¤¥áì  âਡãâ § ¯¨á¨)
;
CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
CALL MASK
RET C
LD A,FAT_ATTR.NoVolID
;!TEST ;[x] 16/11/23 optimize get attribute
JP SEARCH.Custom
;CALL SEARCH.Custom
;RET C ; § ¯¨áì ­¥ ­ ©¤¥­ 
;JP OPEN.FM ; ­  ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à 
;
;
;R002

View File

@ -28,10 +28,10 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
RET C
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C
;!TEST 9/11/23 record index
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;R002 ;
.FM: CALL GET_FM ; enter point from ATTRIB
;R002 ;!TEST 9/11/23 record index
.FM: PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;
CALL GET_FM ; enter point from ATTRIB
RET C
LD A,C
EX AF,AF'

View File

@ -9,7 +9,17 @@
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
;---------------------------------------------------------------
;----------------------------------------------------------------------;
MAKE_FSinfo: ; ç¨á⨬ ᥪâ®à
SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
RET NZ
;
LD A,(CORE_BUFFERS.FatBuffer.UPD_FSINFO)
OR A
RET Z
;
; „¥« ¥¬ FSInfo ᥪâ®à
; ç¨á⨬ ᥪâ®à
LD HL,CORE_BUFFERS.SECTOR_BUFFER
LD DE,CORE_BUFFERS.SECTOR_BUFFER+1
LD (HL),0
@ -28,21 +38,6 @@ MAKE_FSinfo: ;
; SECTOR_SIGNATURE
LD HL,#AA55
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.SECTOR_SIGNATURE),HL
RET
; á¡à á뢠¥â §­ ç¥­¨¥ ᢮¡®¤­ëå ª« áâ¥à®¢ ­  "­¥®¯à¥¤¥«¥­®"
; ¬¥­ï¥â §­ ç¥­¨¥ ¯¥à¢®£® ᢮¡®¤­®£® ª« áâ¥à 
SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
RET NZ
;
LD A,(CORE_BUFFERS.FatBuffer.UPD_FSINFO)
OR A
RET Z
;
;!TODO ä®à¬¨à®¢ âì á ¬®¬ã ¢ ¡ãä¥à
;CALL READ_FSinfo
CALL MAKE_FSinfo
;
; FREE_CLUSTERS_COUNT
LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT),HL
@ -53,7 +48,7 @@ SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
LD HL,(G_CLUST.high)
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2),HL
;
; <20>¨è¥¬ ¥£® ­  ¢¨­â
XOR A
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
JR WRITE_FSinfo

View File

@ -139,9 +139,6 @@ G_CLUST: ;
EXX
INC A
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
; [ ] free clusters for FSInfo
; XOR A ; 㬥­ìè¨âì
; CALL SET_NEW_FREE_CLUSTERS
RET
; ‚室: A - 㬥­ìè¨âì (0) ¨«¨ 㢥«¨ç¨âì (!0) ç¨á«® ᢮¡®¤­ëå ª« áâ¥à®¢

View File

@ -1 +1 @@
981
982

View File

@ -411,7 +411,7 @@ toNumber: ld c,#2F
MAKE_LN_32: CALL MAKE_LN
ld hl,L32BIT_ ; "0000000000"
JR MAKE_LN_Clean
;
; ¤¥áïâ¨ç­ë© 40-  à §àï¤­ë© ¢ë¢®¤
MAKE_LN_40: CALL MAKE_LN.skip_1
ld hl,L40BIT_ ; "0000000000"
;
@ -429,7 +429,7 @@ MAKE_LN_Clean: ld de,#2030 ; " ","0"
ret nz
ld (hl),e
ret
; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
MAKE_LN: ld ix,L32BIT_ ; "0000000000"
exx
ld de,#3B9A
@ -668,13 +668,6 @@ read_disk_info: OR #80
LD L,(HL)
LD H,A
call hex16
;
; Œ¥âª  ¤¨áª 
; ld a,(disk) ; ­®¬¥à ¤¨áª 
; cp 2 ; ¬¥­ìè¥ "C:" ?
; jr nc,get_inf_data1 ; ¬¥âª  ¢ BPB
.get_label: ; ¨é¥¬ ¬¥âªã ¢ ª®à­¥ ”‘ à §¤¥« 
; ãáâ. ª®à¥­ì ¤¨áª 
ld hl,root_path ; "x:\",0
@ -774,27 +767,9 @@ cmd_dir_options:; [ ]
;
cmd_dir_freeSpace:
;PUSH DE
;PUSH BC
; § â¨à ¥¬ ­ ©¤¥­ë© ª«îç
; ld A,'/'
; ex de,hl
; ld bc,4
; CPDR
; inc hl
; ld (hl),' '
; inc hl
; ld (hl),' '
;
; áâ ¢¨¬ ®¯æ¨î ¤«ï API DSS DskInfo
ld a,1
ld (read_disk_info.full),a
; ; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤­®£® ¬¥áâ  â ª, ç⮡ ®­  § âñà« áì
; LD DE,MAIN_MSG.CALCULATING
; CALL MESSAGE
; ¢®§¢à é ¥¬áï ¢ 横«
;POP BC
;POP DE
jp cmd_dir.parse
;
cmd_dir_pause: ld a,#ff
@ -853,38 +828,14 @@ PRINT_5BYTES: ld ix,L40BIT_ ; "00"
CALL GET_BIG_DIG
;
; DE':DE = 100,000,000
; HL':HL ¥éñ ­ã¦­ë
; PUSH HL
; LD HL,L40BIT_
; LD B,3 ;!HARDCODE 2 §­ ª 
; .loop: LD A,(HL)
; CP "1"
; jr nc,.exit_clean
; LD (HL)," "
; INC HL
; DJNZ .loop
;.exit_clean: POP HL
CALL MAKE_LN_40
;JR PRINT_DWORD.skip_LN
;
;PRINT_DWORD: call MAKE_LN ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
.skip_LN: ld hl,L32BIT_.end ; "0"
ld hl,L32BIT_.end ; "0"
ld a,(hl)
cp " "
jr nz,.not_zero
ld a,"0"
ld (hl),a
.not_zero:
; ld hl,SIZE_BUFFER.high ; "0 000 000 000"
; ld b,SIZE_BUFFER.bytes - 1
; .clean_loop: ld a,(hl)
; cp "1"
; jr nc,.exit_clean
; ld (hl)," "
; inc hl
; djnz .clean_loop
;
.not_zero: ;
.exit_clean: ld de,SIZE_BUFFER.high ; "0 000 000 000"
ld hl,L40BIT_ ; "0000000000"
ldi

View File

@ -97,7 +97,7 @@ RUN_EXT: ex de,hl ;
ld bc,4*256 + Dss.EX_Path ; ¢ë¤¥«¨âì à áè. ä ©« 
RST ToDSS
ld hl,(SAVEHL) ; ¨¬ï ä ©« 
jr c,RUN_EXE ; ¢ë¯®«­¨âì exe-ä ©«
jr c,RUN_EXE ; ¢ë¯®«­¨âì exe-ä ©«
bit 1,a ; ¥áâì à áè. ?
jr z,.NON_EXT ; ­¥â
; ¥áâì à áè. ä ©« 

View File

@ -1 +1 @@
356
357