CORE: вроде ускорена запись на дискеты. SHELL: украшательства команды DIR

This commit is contained in:
Anatoliy Belyanskiy 2024-03-13 03:21:17 +10:00
parent 0312779217
commit 00e9cb59f0
7 changed files with 190 additions and 92 deletions

View File

@ -544,8 +544,8 @@ RD_BPB: LD C,SLOT3
; ADD HL,DE
;LD (FatBuffer.FAT_FRM),HL ; first sector FAT
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
LD (FatBuffer.FAT2_XX),HL
LD (FatBuffer.FAT1_SEC_L),HL ; first sector FAT #1
LD (FatBuffer.FAT2_SEC_L),HL
//LD E,(IY+_sBOOT_SECTOR_PARAMS.S_P_F) ; sectors in FAT
//LD D,(IY+_sBOOT_SECTOR_PARAMS.S_P_F+1)
@ -557,7 +557,7 @@ RD_BPB: LD C,SLOT3
JR Z,.loop1
DEC A
ADD HL,DE
LD (FatBuffer.FAT2_XX),HL
LD (FatBuffer.FAT2_SEC_L),HL
;C_DATA1
.loop1: ADD HL,DE
DEC A
@ -780,7 +780,11 @@ RD_BPB: LD C,SLOT3
SET_PAGE_X FATPAGE
PUSH AF
XOR A
; [ ] fat32
; XOR A
; HL = 0
EX DE,HL
;
CALL READ_FAT_TABLE
POP AF
OUT (SLOT3),A
@ -820,11 +824,12 @@ FatBuffer:
.READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))
.BLOCK: DB #00
.DIR_CLU_L: DW #0000
.DIR_CLU_H: DW #0000 ; fat32
.DIR_CLU_H: DW #0000 ; [ ] fat32
.DRIVE: DB #FF
.FAT_FRM:
.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT
.FAT2_XX: DW #0000
.FAT1_SEC_L: DW #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
.FAT1_SEC_H: DW #0000 ; [ ] fat32
.FAT2_SEC_L: DW #0000
.FAT2_SEC_H: DW #0000 ; [ ] fat32
.DIR_FRH: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï
.DIR_FRL: DW #0000 ; MSD_CAT_SEC first sector DIR
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
@ -834,10 +839,10 @@ FatBuffer:
.CLU_LEN:
.B_P_C: DW #0000 ; CLUSTER_LEN
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ;!TODO fat32
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.ENDCLUS_LOW: DW #FFFF
.ENDCLUS_HIGH: DW #FFFF ; !TODO for fat32
.ENDCLUS_HIGH: DW #FFFF ; [ ] fat32
;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;

View File

@ -155,6 +155,7 @@ READ_FROM_FAT:
CALL GET_FAT32_CELL
DI
HALT
RET
;-----------------------------------------------------------
; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; ¢å®¤: hl = ­®¬¥à ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
@ -253,27 +254,40 @@ WRITE_TO_FAT:
.FAT32: ; [ ] fat32
DI
HALT
;RX01
;RE_FAT:
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
; A - NEW FAT BLOCK
;RX01
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT- 
; [ ] fat32
//; A - NEW FAT BLOCK
; DE - NEW FAT BLOCK
;
READ_FAT_TABLE:
PUSH HL
PUSH AF
; [x] fat32
; PUSH AF
PUSH DE
;
LD A,(FatCache.Update)
OR A
CALL NZ,WRITE_FAT_TABLE.Start
POP AF
LD L,A
XOR A
LD H,A ;!FIXIT fat32 - ã ä â32 ¡«®ª®¢ ¬®¦¥â ¡ëâì ¢ «®¬
; [x] fat32
; POP AF
POP DE
;
;[ ] fat32
; LD L,A
; XOR A
; LD H,A
EX DE,HL
;
LD (FatCache.Block),HL
LD (FatCache.Update),A
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
DUP FAT_CACHE.Degree_16
ADD HL,HL ;x2
EDUP
LD DE,(FatBuffer.FAT_FRM)
LD DE,(FatBuffer.FAT1_SEC_L)
ADD HL,DE
EX DE,HL
;
@ -291,6 +305,7 @@ READ_FAT_TABLE:
RET
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
; [ ] fat32
WRITE_FAT_TABLE:
SET_PAGE_X FATPAGE
PUSH AF
@ -307,7 +322,6 @@ WRITE_FAT_TABLE:
ADD HL,HL ;x2
EDUP
; HL - ­®¬¥à «®£. ᥪâ®à 
PUSH HL
LD B,H
LD C,L ;BC - BLOCK OF FAT
LD DE,FAT_CACHE.Sectors
@ -326,14 +340,64 @@ WRITE_FAT_TABLE:
.WALLFAT:; !TODO çñ¡ áà §ã ¢ IX ­¥ £à㧨âì FAT_FRM?
LD H,B
LD L,C
LD DE,(FatBuffer.FAT_FRM)
PUSH HL ; HL - ­®¬¥à «®£. ᥪâ®à 
;
LD DE,(FatBuffer.FAT1_SEC_L)
LD B,A ; ç¨á«® ᥪâ®à®¢
LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
PUSH BC
; á®å࠭塞 ¯¥à¢ãî ª®¯¨î FAT
CALL .SAVE_FAT_XX
; [ ] ¥á«¨ ¢á¥£® ®¤­  â ¡«¨æ  FAT, â® ¯®¢â®à­®© § ¯¨á¨ ­¥ ¯à®¨á室¨â 13/03/2024
LD DE,(FatBuffer.FAT2_SEC_L)
LD HL,(FatBuffer.FAT1_SEC_L)
AND A
SBC HL,DE
POP BC ; b=ç¨á«® ᥪâ®à®¢
POP HL
JR Z,.only_one_FAT
;
; á®å࠭塞 ¢â®àãî ª®¯¨î FAT
CALL .SAVE_FAT_XX
AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
.only_one_FAT:
.ERR: LD A,0
LD (FatCache.Update),A
RET
;
.SAVE_FAT_XX:
ADD HL,DE
EX DE,HL
;
; ­®¬¥à «®£. ᥪâ®à 
;LD IX,0
;ADD IX,DE
LD XH,D
LD XL,E
;
LD HL,0 ; áâ. à §àï¤
; CF = ADD HL,DE
; [ ] fat32 - ¢â®à ï â ¡«¨æ  ä â ¬®¦¥â ¦¥ ã¥å âì ¤ «ìè¥ 16-¡¨â «®£¨ç¥áª®£® ᥪâ®à ?
IF _FAT32_ENABLE
RL L
ENDIF
;HL:IX - SECTOR OF FAT FOR SAVE
LD DE,FATPAGE.cache ; ®âªã¤ 
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
JP ToDSS.DRV
/*
.WALLFAT:; !TODO çñ¡ áà §ã ¢ IX ­¥ £à㧨âì FAT_FRM?
LD H,B
LD L,C
PUSH HL ; HL - ­®¬¥à «®£. ᥪâ®à 
;
LD DE,(FatBuffer.FAT1_SEC_L)
ADD HL,DE
EX DE,HL
; ­®¬¥à «®£. ᥪâ®à 
;LD IX,0
;ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
;ADD IX,DE
LD XH,D
LD XL,E
;
LD HL,0 ; áâ. à §àï¤
;HL:IX - SECTOR OF FAT FOR SAVE
@ -343,9 +407,18 @@ WRITE_FAT_TABLE:
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
PUSH BC
RST ToDSS.DRV
POP BC ; b=ç¨á«® ᥪâ®à®¢
POP HL
LD DE,(FatBuffer.FAT2_XX)
; [ ] ¥á«¨ ¢á¥£® ®¤­  â ¡«¨æ  FAT, â® ¯®¢â®à­®© § ¯¨á¨ ­¥ ¯à®¨á室¨â 13/03/2024
LD DE,(FatBuffer.FAT2_SEC_L)
LD HL,(FatBuffer.FAT1_SEC_L)
AND A
SBC HL,DE
POP BC ; b=ç¨á«® ᥪâ®à®¢
POP HL
JR Z,.only_one_FAT
; POP BC ; b=ç¨á«® ᥪâ®à®¢
; POP HL
; LD DE,(FatBuffer.FAT2_SEC_L)
;
ADD HL,DE
EX DE,HL
LD XH,D
@ -363,13 +436,12 @@ WRITE_FAT_TABLE:
LD C,Dss.DRV.Write
RST ToDSS.DRV
AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
.only_one_FAT:
;
.ERR: LD A,0
LD (FatCache.Update),A
RET NC
POP HL
; CF = 1
RET
RET
*/
;¢å®¤: HL - ­®¬¥à ª« áâ¥à 
@ -389,8 +461,13 @@ GET_FAT16_CELL:
AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH
CP C
; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH
; CP C
LD DE,(FatCache.Block) ; BC - BLOCK FAT IN CASH
CP E
LD E,A
;
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
@ -427,8 +504,13 @@ GET_FAT12_CELL:
AND #07
;AND FAT_CACHE.Part_Mask_16
;
LD BC,(FatCache.Block) ; C - BLOCK FAT IN CASH
CP C
; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH
; CP C
LD DE,(FatCache.Block) ; BC - BLOCK FAT IN CASH
CP E
LD E,A
;
CALL NZ,READ_FAT_TABLE ; ¯à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
ENDIF
;
@ -949,7 +1031,7 @@ FAT_Max_Cluster_H: WORD #0000 ;
; RST #18
; POP BC
; POP HL
; LD DE,(FAT2_XX)
; LD DE,(FAT2_SEC_L)
; ADD HL,DE
; EX DE,HL
; LD IX,0

View File

@ -1,7 +1,7 @@
;!TODO fat32
;=======================================================================
;BPB
;LD (FatBuffer.FAT2_XX),HL
;LD (FatBuffer.FAT2_SEC_L),HL
;LD (FatBuffer.DIR_FRL),HL ; first sector DIR
;BPB32
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2) 4 ¡ ©â 
@ -39,18 +39,38 @@ GET_FAT32_CELL:
DI
HALT
; FOR 8192 bytes cache
; 1ÿ073ÿ741ÿ824 bytes max fat32 size
; 1073741824/8192=131072
; 0x40000000 / 0x2000 = 0x20000
; FOR 16384 bytes cache
; 1ÿ073ÿ741ÿ824 bytes max fat32 size
; 1073741824/16384=65536
; 0x40000000 / 0x4000 = 0x10000
/*
D E H L
0xEAB1022 - block 0x1D562
D E H
0xEAB10 >>> 0x1D562
*/
LD A,H
LD B,H
;AND #0F
AND FAT_CACHE.Size_Mask_16
AND #0F
;AND FAT_CACHE.Size_Mask_16 ; #0F
LD H,A
LD A,B
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
DUP FAT_CACHE.Degree_16
;DUP FAT_CACHE.Degree_16
RRCA
EDUP
;AND #0F
AND FAT_CACHE.Part_Mask_16
RRCA
RRCA
RRCA
;EDUP
AND #0F
;AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH

View File

@ -1 +1 @@
942
943

View File

@ -53,7 +53,7 @@ cmd_dir:
; [ ] 1/10/23
1: ld hl,work_buffer1 ; ¨¬ï ä ©« 
ld de,work_buffer1 ; 80 ¡ãä¥à
ld a,#37 ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld a,FAT_ATTR.NoVolID ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
RST ToDSS
JR C,.dir_empty ;R14
@ -71,9 +71,11 @@ cmd_dir:
ld c,Dss.WaitKey
rst ToDSS
dec d
jr nz,.skip_esc
xor a
ld (.key_p),a ; ®â¬¥­ï¥¬ ESC
ld de,MAIN_MSG.DIR_ESCAPE
jp z,MESSAGE ; § ª®­ç¨âì ¯® ESC
;jr nz,.skip_esc
;xor a
;ld (.key_p),a ; ®â¬¥­ï¥¬ ESC
.skip_esc:
ld a,32-1
.skip_wait:
@ -153,46 +155,6 @@ cmd_dir:
ld hl,(D88E0) ; áâ. à §àï¤
exx
;
;;;;;;;;;;;;;
; call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
; ld hl,T8B37 ; "0"
; ld a,(hl)
; cp " "
; jr nz,.not_zero
; ld a,"0"
; ld (hl),a
; .not_zero:
; ld de,T8B46 ; "0 000 000 000"
; ld hl,T8B2E ; "0000000000"
; ld a,(hl)
; ldi
; cp " "
; jr z,1F
; ld a,"," ; à §¤. à §à冷¢
; 1: ld (de),a
; inc de
; ldi
; ldi
; ld a,(hl)
; ldi
; cp " "
; jr z,1F
; ld a,"," ; à §¤. à §à冷¢
; 1: ld (de),a
; inc de
; ldi
; ldi
; ld a,(hl)
; ldi
; cp " "
; jr z,1F
; ld a,"," ; à §¤. à §à冷¢
; 1: ld (de),a
; inc de
; ldi
; ldi
; ldi
; ret
CALL Size2Char
;;;;;;;;;;;;;
;
@ -270,7 +232,14 @@ cmd_dir:
;
; <20>®¤£®â®¢¨âì áâபã ᯨ᪠ ä ©«®¢/¯ ¯®ª
A88E2: ld bc,8
A88E2:
dec hl
ld a,(hl)
and FAT_ATTR.DIRECTORY
call z,.set_small
inc hl
;
ld bc,8
ld de,PRM1 ; ¡ãä¥à
ldir
xor a
@ -286,13 +255,33 @@ A88E2: ld bc,8
call A8A19 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
ld de,MAIN_MSG.DIR_3 ; ¨­¤¥ªá "%1 %2 %3 %4 %5"
jp MESSAGE ; ¢ë¢®¤ áâப¨
;
.set_small:
ld d,h
ld e,l
ld b,11 ;!HARDCODE ¤«¨­  ¨¬¥­¨ DOS
.loop: inc hl
ld a,(hl)
cp 'A'
jr c,.next
cp 'Z'+1
jr c,.letter
;
cp '€' ;#80
jr c,.next
cp 'Ÿ'+1 ;#9F + 1
jr nc,.next
.letter:
or %0010'0000
ld (hl),a
.next: djnz .loop
ex de,hl
ret
; ‚뢥á⨠¢ ¡ãä¥à ¨¬ï ä ©«  ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
A89A4: ld a,(ix+32)
ld hl,T8B38 ; "<DIR> "
and 10h ; ¯ ¯ª  ?
and FAT_ATTR.DIRECTORY ; ¯ ¯ª  ?
jr nz,A89F4 ; ¤ 
ld l,(ix+28) ; ¬«. à §àï¤
ld h,(ix+29)

View File

@ -11,6 +11,7 @@ MAIN_MSG:
.DATE EQU .DATE_
.TIME EQU .TIME_
.PAUSE EQU .PAUSE_
.DIR_ESCAPE EQU .DIR_ESC_
.INVALID EQU .INV_
.ECHO EQU .ECHO_
.ON EQU .ON_
@ -35,6 +36,7 @@ MAIN_MSG:
stN .DATE_ : db "Current date: %1, %2",CR,LF,0 ; [ ] ¢ë¢®¤ ¤­ï ­¥¤¥«¨ 26/01/2023
stN .TIME_ : db "Current time: %1",CR,LF,0
stN .PAUSE_ : db "Press any key to continue . . .",CR,0
stN .DIR_ESC_ : db 'Command "DIR" aborted by user ',CR,LF,CR,LF,0
stN .INV_ : db "Invalid parametr",CR,LF,0
stN .ECHO_ : db "Echo is %1",CR,LF,0
stN .ON_ : db "on",0

View File

@ -1 +1 @@
303
311