CORE: -bug in LOADDIR for fat32

SHELL: small optimize
This commit is contained in:
Anatoliy Belyanskiy 2024-05-10 01:30:13 +10:00
parent f135083519
commit cc435bef7d
13 changed files with 79 additions and 97 deletions

View File

@ -581,7 +581,7 @@ LEAVE: LD A,B
; ¢å®¤: ­¥â
; ¢ë室: A - ª®¤ § ¢¥à襭¨ï
;/////////////////////////////////////////////////////////////////////
WAIT: LD A,(ErrorLevel)
GET_ERR: LD A,(ErrorLevel)
AND A
RET
;/////////////////////////////////////////////////////////////////////

View File

@ -48,7 +48,7 @@ F_FIRST:
LD HL,HANDBUF+12 ;!HARDCODE
LD BC,HANDBUF.SIZE-12 ;????? ¬¥âªã ¢¬¥áâ® ç¨á« ?
LDIR
LD A,(HANDBUF+11)
LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
LD (DE),A
INC DE
LD HL,HANDBUF
@ -58,16 +58,18 @@ F_FIRST:
JR NZ,.FIND_M2
LD BC,11 ;!HARDCODE
LDIR
LD A,F_NEXT.NO_NEXT.NO
.exit: LD A,F_NEXT.NO_NEXT.NO
LD (F_NEXT.NO_NEXT),A
XOR A
RET
.FIND_M2:
;!TODO LFN
;CP 2
;CALL NC,GetName_LFN
;CALL C,GetName
;
CALL GetName
LD A,F_NEXT.NO_NEXT.NO
LD (F_NEXT.NO_NEXT),A
XOR A
RET
JR .exit
////////////////////////////////////////////////////////////////////////
;

View File

@ -76,7 +76,7 @@ DISKINF: LD C,B
.next_prm: LD HL,CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
CALL .mCOPY_LOOP
;
; !FIXIT ¥á«¨ ¬¥âª  ¢ BPB "NO NAME" ¨«¨ ¯à®¡¥«ë, â® ¯à®¢¥àïâì ¬¥âªã ¢ ª®à­¥¢®¬ ª â «®£¥.
LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
CALL .mCOPY_LOOP

View File

@ -52,6 +52,7 @@
; DJNZ .GETN6
; RET
;---------------;---------------;---------------
;!TODO LFN
GetName: LD BC,#08FF ;!HARDCODE ¤«¨­  ¨¬¥­¨ + áçñâ稪
LD A,' '
.loop: CP (HL)

View File

@ -317,7 +317,7 @@ ADRST10: ;DS 512 ;,0
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31
DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B
DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low WAIT, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45
DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low GET_ERR, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45
DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F
DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59
DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT ; 9 5A..5F
@ -344,7 +344,7 @@ ADRST10: ;DS 512 ;,0
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY
DB high ECHOKEY, high CTRLKEY, high NOPS, high K_CLEAR,high K_SETUP,high TESTKEY,high SETWIN, high SETWIN1,high SETWIN2, high SETWIN3
DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high WAIT, high GSWITCH,high DOSNAME, high EX_PATH
DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high GET_ERR,high GSWITCH,high DOSNAME, high EX_PATH
DB high ENVIRON, high APPINFO, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
DB high SETVMOD, high GETVMOD, high LOCATE, high CURSOR, high SELPAGE,high SCROLL, high CLEAR, high RDCHAR, high WRCHAR, high WINCOPY
DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT

View File

@ -519,6 +519,8 @@ LOADDIR: ;!TODO optimize
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
LD HL,#4000 ;!HARDCODE à §¬¥à ¤¨à¥ªâ®à¨¨
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
;
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤ 
LD DE,#4000 ; ᪮«ìª®

View File

@ -647,7 +647,7 @@ WRITE_FAT_TABLE:
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
CALL GET_SECTOR_OF_FAT
; B=0, C:HL - ᬥ饭¨¥ ¢ ᥪâ®à å ¢­ãâਠ⠡«¨æë FAT ­  ­ ç «® ¡«®ª 
LD (.save_offset_HL),HL
LD (.pop_offset_HL),HL
LD DE,FAT_CACHE.Sectors_32
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32

View File

@ -554,11 +554,11 @@ KEYSCAN: LD IX,KEYFLAG
; SBC HL,DE
; CALL Z,RST_X
;
; [x] ®¯ á­ ï å७ì
LD HL,BREAK_PROCESS_CODE
AND A
SBC HL,DE
CALL Z,Break_Process
;; [ ] ®¯ á­ ï å७ì
;LD HL,BREAK_PROCESS_CODE
;AND A
;SBC HL,DE
;CALL Z,Break_Process
;
LD BC,(KEYFLAG)
CALL PUTSYM
@ -1154,12 +1154,13 @@ KBD_Receiver_Overrun:
LD (KEY_FLG),A
;LD (UNCODE),A
RET
; [x] ®¯ á­ ï å७ì
Break_Process: LD A,(TASK)
XOR 2 ; 2 - task of primary shell
RET Z
LD B,DSS_Error.sys.USER_ABORT
JP LEAVE
;
; [ ] ®¯ á­ ï å७ì
; Break_Process: LD A,(TASK)
; XOR 2 ; 2 - task of primary shell
; RET Z
; LD B,DSS_Error.sys.USER_ABORT
; JP LEAVE
; `
; 0

View File

@ -52,6 +52,7 @@
.KnownOffset_L WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
ENDS
;ACCESS MODE: A=0 ç⥭¨¥/§ ¯¨áì
; A=1 ç⥭¨¥
; A=2 § ¯¨áì

View File

@ -1 +1 @@
983
984

View File

@ -289,13 +289,7 @@ PRNSIZE: ld a,(ix+32)
ld h,(ix+FAT_DIRECTORY_RECORD.F_SIZE+3)
exx
push ix
call MAKE_LN_32 ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
ld hl,L32BIT_.end
ld a,(hl)
cp " "
jr nz,.not_zero
ld a,"0"
ld (hl),a
call MAKE_LN ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
.not_zero: ld de,SIZE_BUFFER.low ; "0 000 000 000"
ld hl,L32BIT_ ; "0000000000"
ldi
@ -403,33 +397,12 @@ toNumber: ld c,#2F
ld (hl),a
inc hl
ret
;
;!TODO ¯¥à¥â é¨âì ¢ procedures/math.asm
; „¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
; HL':HL - ç¨á«® ¤«ï ¯¥à¥¢®¤ 
; !FIXIT ¬®¦­® ®¡ê¥¤¥­¨âì á PDIGIT
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"
;
MAKE_LN_Clean: ld de,#2030 ; " ","0"
.KILLZ: ld a,(hl)
cp e
jr nz,.KILLZ2
ld (hl),d
inc hl
jr .KILLZ
;
.KILLZ2: ld hl,L32BIT_.end ; "0"
ld a,(hl)
cp d
ret nz
ld (hl),e
ret
; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
MAKE_LN: ld ix,L32BIT_ ; "0000000000"
exx
ld de,#3B9A
@ -491,7 +464,8 @@ MAKE_LN: ld ix,L32BIT_ ; "0000000000"
inc ix
ret
;
GET_DIG: xor a
GET_DIG: ld a,"0"-1
AND A
.loop: inc a
sbc hl,de
exx
@ -503,9 +477,16 @@ GET_DIG: xor a
exx
adc hl,de
exx
dec a
add a,"0"
ld (ix+0),a
;dec a
cp "0"
jr nz,.putChar
ld b,a
ld a,(ix-1)
cp " "
jr z,.putChar
ld a,b
;
.putChar: ld (ix+0),a
inc ix
ret
;
@ -524,16 +505,18 @@ full_space_medium: WORD 0
full_space_high: BYTE 0
;
L40BIT_ db "00"
L32BIT_: db "000000000"
; !TODO ¬®¦¥â ®¡®©â¨áì ®¤­¨¬ ¡ãä¥à®¬ 00 ¢¬¥áâ® ¤¢ãå?
L40BIT: db " " ; ¬ àª¥à ¤«ï ix-1
.Str: db " " ; 00
L32BIT_: db " " ; 000000000
.end: db "0"
;
DIRIDD: db "<DIR> ",0
;
SIZE_BUFFER:
.high db "00"
.low: db "0 000 000 000",0,0
.bytes equ SIZE_BUFFER - $
SIZE_BUFFER: db " " ; ¬ àª¥à ¤«ï ix-1
.high db " " ; "00"
.low: db " ",0,0 ; "0 000 000 000",0,0
.bytes equ SIZE_BUFFER - $
;
; [x] ⥯¥àì ­¥ «¥§¥â ­ ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ­®¢ë© ¯ à ¬¥âà ä㭪樨 DskInfo
@ -562,12 +545,7 @@ read_disk_info: OR #80
AND E
EXX
INC A
;JR Z,.no_full_space_option
LD (.full),A
; ;
; LD A,(.full)
; OR A
; JR Z,.no_full_space_option
EX AF,AF'
;
; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE
@ -618,7 +596,6 @@ read_disk_info: OR #80
RR C
JP NC,.loop2
; <-- B':HL'HL, C':DE':DE
;!TODO ¢ë¢®¤¨âì ¯®«­ë© à §¬¥à ¤¨áª 
EXX
LD A,C
LD (free_space_high),A
@ -674,17 +651,16 @@ read_disk_info: OR #80
ld c,Dss.ChDir
RST ToDSS
; ¯®¨áª ¬¥âª¨
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
ld de,work_buffer1 ; ªã¤ 
ld a,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬ 
ld bc,Dss.F_First.FATname ; f_first, ä®à¬ â 11
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
ld de,work_buffer1 ; ªã¤ 
ld a,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬ 
ld bc,Dss.F_First.FATname ; f_first, ä®à¬ â 11
RST ToDSS
push af
call restore_path ; ¢®ááâ. ⥪. ¯ãâì
call restore_path ; ¢®ááâ. ⥪. ¯ãâì
pop af
;jr c,no_volume_label ; ¬¥âª¨ ­¥â ¤¨à४â®à¨¨
ld hl,work_buffer1+33 ; ­ ç «® ¬¥âª¨ ¢ ¡ãä¥à¥ f_first
jr nc,volume_label ; ¬¥âª  ¢ ª®à­¥¢®¬ ª â «®£¥
ld hl,work_buffer1 + BUFFER_FIND.REC_Name ; ­ ç «® ¬¥âª¨ ¢ ¡ãä¥à¥ f_first
jr nc,volume_label ; ¬¥âª  ¢ ª®à­¥¢®¬ ª â «®£¥
; ¡¥àñ¬ ¬¥âªã ¨§ BPB
; âãâ ¢ HL ¤«¨­  ¯®«ï "Œ¥âª  ¤¨áª "
POP hl
@ -710,12 +686,12 @@ read_disk_info: OR #80
LD (PRM5),A
ret
.good_label: POP HL
PUSH HL ; «¨è­¥¥
PUSH HL ; ⮫ª ¥¬ «¨è­¥¥
; ¥áâì ¬¥âª 
volume_label: pop DE ; «¨è­¥¥
volume_label: POP DE ; á­¨¬ ¥¬ «¨è­¥¥
; %5
ld de,PRM5
ld bc,11 ;!HARDCODE ¤«¨­  ¬¥âª¨
ld bc,11 ;!HARDCODE ¤«¨­  ¬¥âª¨
ldir
xor a
ld (de),a
@ -758,11 +734,11 @@ volume_string_yes:
; has_not_full_info:
; db ' (?)',0
;
cmd_dir_options:; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
cmd_dir_options:; [x] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
DB 'f' : DW cmd_dir_freeSpace
DB 'p' : DW cmd_dir_pause
.Size EQU ($-cmd_dir_options)/3
.paramLength equ 3
.paramLength EQU 3
;
;
@ -776,7 +752,7 @@ cmd_dir_pause: ld a,#ff
ld (cmd_dir.key_p),a
jp cmd_dir.parse
///////////////////////////////////////////////////////////////////////////////////////
GET_BIG_DIG: ld b,0
GET_BIG_DIG: ld b,"0"-1
and a
.loop: inc b
sbc hl,de
@ -794,15 +770,21 @@ GET_BIG_DIG: ld b,0
adc a,c
;
ex af,af'
dec b
;dec b
ld a,b
add a,"0"
ld (ix+0),a
cp "0"
jr nz,.putChar
ld a,(ix-1)
cp " "
jr z,.putChar
ld a,b
;
.putChar: ld (ix+0),a
ex af,af'
inc ix
ret
; stop
PRINT_5BYTES: ld ix,L40BIT_ ; "00"
PRINT_5BYTES: ld ix,L40BIT.Str ; "00"
ld c,#17
exx
ld de,#4876
@ -828,16 +810,9 @@ PRINT_5BYTES: ld ix,L40BIT_ ; "00"
CALL GET_BIG_DIG
;
; DE':DE = 100,000,000
CALL MAKE_LN_40
ld hl,L32BIT_.end ; "0"
ld a,(hl)
cp " "
jr nz,.not_zero
ld a,"0"
ld (hl),a
.not_zero: ;
CALL MAKE_LN.skip_1
.exit_clean: ld de,SIZE_BUFFER.high ; "0 000 000 000"
ld hl,L40BIT_ ; "0000000000"
ld hl,L40BIT.Str ; "0000000000"
ldi
ldi
ld a,(hl)

View File

@ -1 +1 @@
357
365

@ -1 +1 @@
Subproject commit 62170ee7bc7dabe6fd55b94e89826ca510a60097
Subproject commit 5797b0c5804320f86d263997f624cb8b6bb69385