mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
DSS: детект разрядности FAT в BPB теперь по всем канонам. Допиливание до FAT32.
SYS: Загрузка System.dos > #4000 байтов. Исправлен баг с ненужной проверкой расстояния от BPB до FAT для HDD. SHELL: мелкие правки
This commit is contained in:
parent
9b975b7a88
commit
bb63a4071d
1479
BOOT/DSSBOOT.ASM
1479
BOOT/DSSBOOT.ASM
File diff suppressed because it is too large
Load Diff
@ -24,6 +24,7 @@
|
||||
include 'shared_includes/macroses/accelerator.z80'
|
||||
include 'shared_includes/macroses/macros.z80'
|
||||
include 'shared_includes/structures/FileSystem.inc'
|
||||
include '../DSS/defines.inc'
|
||||
|
||||
DEFINE EXEinfoMACRO 0
|
||||
DEFINE App_EXE_Version 1
|
||||
@ -348,9 +349,11 @@ write_to_: ld a,(disk) ;
|
||||
ld b,a
|
||||
inc c
|
||||
scf
|
||||
ret z ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
ret z ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
dec c
|
||||
push bc ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
||||
CP #80 ;!HARDCODE ⨯ ¤à ©¢ - HDD
|
||||
JR NC,.skip_FAT_check
|
||||
push bc ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
||||
; [x] 02/02/2024 ¯à®¢¥àª ¢«¥§ ¥¬®áâì § £àã§ç¨ª (ç⮡ ¥ ¯®¯®àâ¨âì ä â)
|
||||
LD HL,0
|
||||
LD IX,0
|
||||
@ -364,6 +367,7 @@ write_to_: ld a,(disk) ;
|
||||
SBC HL,DE
|
||||
RET C
|
||||
;
|
||||
.skip_FAT_check:;
|
||||
push bc
|
||||
ld a,b
|
||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
; POP BC
|
||||
; JP C,NDISK11
|
||||
; LD A,B
|
||||
; LD (FatBuffer.DRIVE),A
|
||||
; LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||
; CALL RD_BPB
|
||||
; RET C
|
||||
; LD A,(LDRIVE)
|
||||
|
||||
@ -62,9 +62,9 @@ DEL_FN: ;!TEST
|
||||
PUSH DE
|
||||
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
POP AF
|
||||
POP DE
|
||||
EXX
|
||||
POP AF
|
||||
POP DE
|
||||
EXX
|
||||
JP NC,.loop
|
||||
|
||||
@ -132,14 +132,14 @@ MKDIR:
|
||||
CP "."
|
||||
JR Z,.copy_dir_record
|
||||
; fat32
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR NZ,.fat16_root_dir
|
||||
; fat 32
|
||||
EX DE,HL
|
||||
LD HL,(FatBuffer.RootDirStartCluster_L)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),HL
|
||||
LD HL,(FatBuffer.RootDirStartCluster_H)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),HL
|
||||
EX DE,HL
|
||||
JR .set_rec
|
||||
@ -169,7 +169,7 @@ MKDIR:
|
||||
EXX
|
||||
POP HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
||||
.MKD12: PUSH AF
|
||||
PUSH HL ; áâ. à §àï¤
|
||||
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
||||
@ -178,7 +178,7 @@ MKDIR:
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||
LD BC,1*256 + Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
|
||||
@ -67,7 +67,7 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
||||
LD (IY+_sFM.F_POSITION+1),A
|
||||
LD (IY+_sFM.F_POSITION+2),A
|
||||
LD (IY+_sFM.F_POSITION+3),A
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD (IY+_sFM.DRIVE),A
|
||||
; fat32
|
||||
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
|
||||
|
||||
@ -51,7 +51,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
PUSH HL
|
||||
EXX
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
LD B,A
|
||||
LD C,Dss.DRV.Read
|
||||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||
@ -67,7 +67,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||
;LD BC,1*256 + Dss.DRV.Read
|
||||
LD B,1
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
RST ToDSS.DRV
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
|
||||
@ -18,7 +18,7 @@ WRITE.RD_ONLY:
|
||||
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§ĄëâŽçëĽ ˘ë§Ž˘ë WRITE_FAT_TABLE
|
||||
CALL .Start
|
||||
PUSH AF
|
||||
LD A,(FatBuffer.CacheUpdated)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||||
OR A
|
||||
CALL NZ,WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą Şă ŞĽč FAT ¨ § ݍá âě ĽŁŽ ¤¨áŞ
|
||||
POP AF
|
||||
|
||||
@ -16,7 +16,7 @@ CURDISK_FN:
|
||||
CURDISK:
|
||||
LD A,(LDRIVE)
|
||||
LD C,A
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
@ -59,7 +59,7 @@ DISKINF: LD C,B
|
||||
1: LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
||||
CALL .mCOPY_LOOP
|
||||
; 12, 16 or 32
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x16
|
||||
JR C,.next_prm
|
||||
;
|
||||
@ -73,11 +73,11 @@ DISKINF: LD C,B
|
||||
.put_char: LD (DE),A
|
||||
POP DE
|
||||
;
|
||||
.next_prm: LD HL,FatBuffer.BPB_SERIAL_NUMBER
|
||||
.next_prm: LD HL,CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER
|
||||
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
||||
CALL .mCOPY_LOOP
|
||||
;
|
||||
LD HL,FatBuffer.BPB_LABEL
|
||||
LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
|
||||
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
||||
CALL .mCOPY_LOOP
|
||||
; fat32
|
||||
@ -121,7 +121,7 @@ DISKINF: LD C,B
|
||||
;JR Z,CURRDS ;R06
|
||||
.CurrentDisk: LD A,(CurrentPath)
|
||||
SUB 'A'
|
||||
LD HL,FatBuffer.DRIVE
|
||||
LD HL,CORE_BUFFERS.FatBuffer.DRIVE
|
||||
CP (HL)
|
||||
JR Z,.CheckFreeSpace
|
||||
;
|
||||
@ -138,15 +138,15 @@ DISKINF: LD C,B
|
||||
;.FRESP2:
|
||||
LD D,B
|
||||
LD E,C
|
||||
LD HL,(FatBuffer.MaxClusterLow)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||
DEC HL
|
||||
; fat 32
|
||||
EXX
|
||||
LD HL,(FatBuffer.MaxClusterHigh)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||
DEC HL
|
||||
EXX
|
||||
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
|
||||
@ -181,7 +181,7 @@ TMPNAME: DZ ' ' ; 12
|
||||
; IN: A - drive number
|
||||
OPENDSK:;!TEST DRV.Open ®¡å®¤ R10
|
||||
LD C,A
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
CP C
|
||||
IF CHECK_DRIVE_CHANGE
|
||||
JR NZ,.open
|
||||
@ -200,12 +200,12 @@ OPENDSK:;!TEST DRV.Open
|
||||
POP BC
|
||||
JP C,.error
|
||||
;[x] 29/02/2024 fix "open drive error"
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD D,A
|
||||
PUSH DE
|
||||
;
|
||||
LD A,B
|
||||
LD (FatBuffer.DRIVE),A
|
||||
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||
;
|
||||
CALL RD_BPB
|
||||
;[x] 29/02/2024 fix "open drive error"
|
||||
@ -217,6 +217,7 @@ OPENDSK:;!TEST DRV.Open
|
||||
.exit: LD A,(LDRIVE)
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
.error: CP DSS_Error.sys.INVALID_DRIVE
|
||||
SCF
|
||||
RET Z
|
||||
@ -356,7 +357,7 @@ MASK: LD HL,TMPNAME
|
||||
;----------------------------------------------------------------------;
|
||||
;!TEST Current Dir ;[x] 15/10/23
|
||||
DIR_PATH_CHANGE:
|
||||
.FullCurrent: LD A,(FatBuffer.DRIVE)
|
||||
.FullCurrent: LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
ADD 'A'
|
||||
LD (CurrentPath),A
|
||||
;
|
||||
@ -365,7 +366,7 @@ DIR_PATH_CHANGE:
|
||||
;
|
||||
.FullWork: LD A,(CurrentPath)
|
||||
SUB 'A'
|
||||
LD (FatBuffer.DRIVE),A
|
||||
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||
;
|
||||
.Work: LD HL,WorkDirectory
|
||||
JP CURRDIR_FN
|
||||
@ -391,7 +392,7 @@ DIR_PATH_CHECK: LD A,(HL)
|
||||
JR Z,.checkDir
|
||||
;
|
||||
LD HL,CurrentPath
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
ADD 'A'
|
||||
CP (HL)
|
||||
JR NZ,.gotoPath
|
||||
@ -413,7 +414,7 @@ DIR_PATH_CHECK: LD A,(HL)
|
||||
JR .gotoPath
|
||||
;
|
||||
.checkDrive: LD HL,CurrentPath
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
ADD 'A'
|
||||
CP (HL)
|
||||
RET
|
||||
|
||||
@ -241,11 +241,16 @@ PORTAL.out_MAIN: ;
|
||||
CLEAR_BUFFER_AND_INIT_PROC:
|
||||
;------[CLEAR BUFFERS]------;
|
||||
;R07 ;R11
|
||||
XOR A
|
||||
LD HL,CLEAR_ZONE.start
|
||||
LD DE,CLEAR_ZONE.start+1
|
||||
LD BC,CLEAR_ZONE.size-1
|
||||
LD (HL),0
|
||||
LD (HL),A
|
||||
LDIR
|
||||
; A = 0
|
||||
DEC A
|
||||
LD (CORE_BUFFERS.FatBuffer.DRIVE),A
|
||||
;
|
||||
;R07 ;R11
|
||||
;R11
|
||||
LD HL,CORE_BUFFERS.FM_BUF
|
||||
@ -405,7 +410,8 @@ BUFFERSplace _sBuffers=$
|
||||
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
||||
.Size EQU _sFM
|
||||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||||
BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector ; [ ] fat32 ;!FIXIT CORE_BUFFERS.BootSector à §®© ¤«¨ë
|
||||
;BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector ; [ ] fat32 ;!FIXIT CORE_BUFFERS.BootSector à §®© ¤«¨ë
|
||||
FatBuffer _sFatBuffer = BUFFERSplace.FatBuffer
|
||||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||||
XSTACK EQU BUFFERSplace.Stack.SPoint
|
||||
BUFFER EQU BUFFERSplace.Buffer
|
||||
@ -415,11 +421,11 @@ CLEAR_ZONE.size EQU _sBuffers
|
||||
|
||||
ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||
DISPLAY "BUFFERSplace.BootSector ",/H,CORE_BUFFERS.BUFFERSplace.BootSector
|
||||
DISPLAY "BootSector ", /H, CORE_BUFFERS.BootSector
|
||||
DISPLAY "BootSector.Size ", /D, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.BootSector
|
||||
DISPLAY "BUFFERSplace ", /H, CORE_BUFFERS.BUFFERSplace
|
||||
DISPLAY "FatBuffer ", /H, CORE_BUFFERS.FatBuffer
|
||||
DISPLAY "FatBuffer.Size ", /D, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.FatBuffer
|
||||
DISPLAY "EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY "Size ", /H, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.BootSector
|
||||
DISPLAY "Size ", /H, CORE_BUFFERS.XSTACK - CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||
|
||||
|
||||
@ -597,7 +603,9 @@ DRV_CONTENT:
|
||||
DRV_CONTENT.SIZE EQU $-DRV_CONTENT
|
||||
|
||||
DISPLAY "END ADDRESS: ",/H,$
|
||||
ASSERT $<#4001,'-> Memory leack!!!';
|
||||
DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512
|
||||
ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!';
|
||||
ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!';
|
||||
;[END]
|
||||
|
||||
;
|
||||
|
||||
@ -345,9 +345,9 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||
JR NZ,.SUBDIR
|
||||
.REROOT: ; fat32
|
||||
EX DE,HL
|
||||
LD HL,(FatBuffer.RootDirStartCluster_L)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD HL,(FatBuffer.RootDirStartCluster_H)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
|
||||
EX DE,HL
|
||||
CALL LOADDIR
|
||||
@ -423,11 +423,11 @@ LOADDIR: ;!TODO optimize
|
||||
; ; LD (HL),L
|
||||
; ; LDIR
|
||||
; ;
|
||||
; LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
; LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
||||
; ; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
; ; [x] fat32
|
||||
; LD A,(FatBuffer.FAT_TYPE)
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
; XOR 32
|
||||
; JR Z,.read_dir
|
||||
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||
@ -446,14 +446,14 @@ LOADDIR: ;!TODO optimize
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
;
|
||||
.LoadRootDir: LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||
LD A,(FatBuffer.DirSizeInSectors)
|
||||
.LoadRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||
LD IX,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||
CP B
|
||||
JR NC,.RTD1
|
||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||
.RTD1: LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
.RTD1: LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
||||
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||||
RST ToDSS.DRV
|
||||
@ -475,10 +475,10 @@ LOAD_SAVE_DIR_PREPARE:
|
||||
AND A
|
||||
EX AF,AF'
|
||||
;
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD (IY+_sFM.DRIVE),A
|
||||
; [x] fat32
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32 - 1
|
||||
JR NC,.exit
|
||||
;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||
@ -504,10 +504,10 @@ SAVEDIR: ;!TODO optimize
|
||||
; AND A
|
||||
; PUSH AF
|
||||
; ;
|
||||
; LD A,(FatBuffer.DRIVE)
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
; LD (IY+_sFM.DRIVE),A
|
||||
; ; [x] fat32
|
||||
; LD A,(FatBuffer.FAT_TYPE)
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
; XOR 32
|
||||
; JR Z,.save_dir
|
||||
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||
@ -528,15 +528,15 @@ SAVEDIR: ;!TODO optimize
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
;
|
||||
.SaveRootDir: LD HL,(FatBuffer.RootDirFirstSector_H)
|
||||
LD IX,(FatBuffer.RootDirFirstSector_L)
|
||||
LD A,(FatBuffer.DirSizeInSectors)
|
||||
.SaveRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H)
|
||||
LD IX,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_L)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||
LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors
|
||||
SUB B
|
||||
JR NC,.RTD1S
|
||||
ADD A,B
|
||||
LD B,A
|
||||
.RTD1S: LD A,(FatBuffer.DRIVE)
|
||||
.RTD1S: LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD DE,DIRPAGE.buffer
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
@ -593,7 +593,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
||||
SBC HL,DE
|
||||
JR NC,SAVEDIR
|
||||
LD HL,(SAVEDIR.DIRSIZE)
|
||||
LD BC,(FatBuffer.BytesPerCluster)
|
||||
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerCluster)
|
||||
ADD HL,BC
|
||||
LD (SAVEDIR.DIRSIZE),HL
|
||||
AND A
|
||||
@ -604,7 +604,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
; ¥ ¨á¯®«ì§ã¥âáï
|
||||
; TESTDSK: ;????? ¢®§¬®¦®, çâ® âãâ «®£¨ç¥¥, 祬 ¢ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
|
||||
; LD A,(FatBuffer.DRIVE)
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
; LD C,Dss.DRV.MediaCheck
|
||||
; RST ToDSS.DRV
|
||||
; OR A
|
||||
@ -618,7 +618,7 @@ RD_BPB: LD C,SLOT3
|
||||
PUSH BC
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000 ;R08
|
||||
LD C,Dss.DRV.GetBPB
|
||||
RST ToDSS.DRV
|
||||
@ -642,6 +642,17 @@ RD_BPB: LD C,SLOT3
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JP C,DOS_X_Error.UnknownBPB
|
||||
;
|
||||
;!TODO ¯à®¢¥à¨âì ¯® ¬¥âª¥ à §¤¥« , çâ® íâ® FAT, ¯®â®¬ ®¯à¥¤¥«ïâì ª ª®© FAT
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
||||
LD (CORE_BUFFERS.FatBuffer.BytesPerSector),HL
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerCluster),A
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER)
|
||||
LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER),HL
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER+2)
|
||||
LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER+2),HL
|
||||
; calc. first sector FAT
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||
;
|
||||
@ -649,20 +660,20 @@ RD_BPB: LD C,SLOT3
|
||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
||||
; ADD HL,DE
|
||||
;
|
||||
;!FIXIT ¤«ï fat32 ¢âëª âì áî¤ á¥ªâ®à ªâ¨¢®© â ¡«¨æë
|
||||
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
||||
LD (FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
||||
;!FIXIT ¤«ï fat32 ¢âëª âì áî¤ á¥ªâ®à ªâ¨¢®© â ¡«¨æë
|
||||
LD (CORE_BUFFERS.FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
||||
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
||||
;[ ] fat32
|
||||
XOR A
|
||||
LD B,A
|
||||
LD C,A
|
||||
LD (FatBuffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||
LD (FatBuffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||
LD (FatBuffer.RootDirStartCluster_L),BC ; [ ] fat32
|
||||
LD (FatBuffer.RootDirStartCluster_H),BC ; [ ] fat32
|
||||
LD (FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
|
||||
LD (FatBuffer.MaxClusterHigh),BC ; [ ] fat32 reset variables
|
||||
LD (FatBuffer.SectorsPerFAT_H),A ; [ ] fat32
|
||||
LD (CORE_BUFFERS.FatBuffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),BC ; [ ] fat32
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),BC ; [ ] fat32
|
||||
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
|
||||
LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC ; [ ] fat32 reset variables
|
||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A ; [ ] fat32
|
||||
;
|
||||
;
|
||||
LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerFAT16)
|
||||
@ -670,20 +681,21 @@ RD_BPB: LD C,SLOT3
|
||||
OR D
|
||||
JR NZ,.skip_high
|
||||
;
|
||||
LD BC,(CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.FAT32.SectorsPerFAT32+4)
|
||||
LD (FatBuffer.SectorsPerFAT_H),BC
|
||||
LD DE,(CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.FAT32.SectorsPerFAT32)
|
||||
.skip_high: LD (FatBuffer.SectorsPerFAT_L),DE
|
||||
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32+4)
|
||||
LD A,C
|
||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
||||
LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32)
|
||||
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs) ; amount FATs
|
||||
CP 1
|
||||
JR Z,.one_FAT
|
||||
DEC A
|
||||
ADD HL,DE
|
||||
LD (FatBuffer.FAT2_SEC_L),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL
|
||||
JR NC,.no_inc_BC
|
||||
INC BC
|
||||
.no_inc_BC: LD (FatBuffer.FAT2_SEC_H),BC
|
||||
.no_inc_BC: LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC
|
||||
.one_FAT: ;C_DATA1
|
||||
.loop1: ADD HL,DE
|
||||
JR NC,.loop1_1
|
||||
@ -691,9 +703,9 @@ RD_BPB: LD C,SLOT3
|
||||
.loop1_1: DEC A
|
||||
JR NZ,.loop1
|
||||
;
|
||||
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||
|
||||
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
||||
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||
LD A,B
|
||||
AND A
|
||||
;
|
||||
@ -708,7 +720,7 @@ RD_BPB: LD C,SLOT3
|
||||
LD B,0 ; BC - File handels in sectors
|
||||
;;;;
|
||||
IF COMPILE_UNUSED_CODE
|
||||
LD (FatBuffer.FilesPerSector),A
|
||||
LD (CORE_BUFFERS.FatBuffer.FilesPerSector),A
|
||||
ENDIF
|
||||
;
|
||||
EX DE,HL
|
||||
@ -724,14 +736,14 @@ RD_BPB: LD C,SLOT3
|
||||
EX DE,HL
|
||||
LD C,A ; A - sectors in DIR
|
||||
LD B,0
|
||||
LD (FatBuffer.DirSizeInSectors),A
|
||||
LD (CORE_BUFFERS.FatBuffer.DirSizeInSectors),A
|
||||
|
||||
ADD HL,BC ; Start DATA area
|
||||
LD (FatBuffer.FirstDataSector_L),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.FirstDataSector_L),HL
|
||||
; B = 0
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
;!TODO FATcacheSize
|
||||
; calc. cluster size
|
||||
XOR 1
|
||||
@ -741,7 +753,7 @@ RD_BPB: LD C,SLOT3
|
||||
RRA
|
||||
JP NC,.loop3
|
||||
.loop3.end: ;
|
||||
LD (FatBuffer.BytesPerCluster),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.BytesPerCluster),HL
|
||||
;
|
||||
IF COMPILE_UNUSED_CODE
|
||||
EX DE,HL
|
||||
@ -752,69 +764,71 @@ RD_BPB: LD C,SLOT3
|
||||
JP Z,DOS_X_Error.UnknownBPB
|
||||
SBC HL,DE
|
||||
JR NC,.loop4
|
||||
LD (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||
LD (CORE_BUFFERS.FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||
ENDIF
|
||||
;
|
||||
;!TODO detect fat type by clusters!
|
||||
; [ ] fat32
|
||||
LD HL,CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.FAT16.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||
LD DE,FAT_STRING
|
||||
LD B,3
|
||||
;R_BPBL1
|
||||
.loop5: LD A,(DE)
|
||||
CP (HL)
|
||||
JP NZ,.IBM_DOS
|
||||
INC HL
|
||||
INC DE
|
||||
DJNZ .loop5
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
; LD HL,CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||
; LD DE,FAT_STRING
|
||||
; LD B,3
|
||||
; ;R_BPBL1
|
||||
; .loop5: LD A,(DE)
|
||||
; CP (HL)
|
||||
; JP NZ,.IBM_DOS
|
||||
; INC HL
|
||||
; INC DE
|
||||
; DJNZ .loop5
|
||||
;FID
|
||||
.loop6: LD A,(HL)
|
||||
INC HL
|
||||
CP ' '
|
||||
JR Z,.loop6
|
||||
;
|
||||
CP '1'
|
||||
;[ ] fat32
|
||||
JP Z,.fat1x
|
||||
CP '3'
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
LD A,#52 ; #52-#20 = #32 fat type
|
||||
LD HL,#0FFF
|
||||
LD (FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||
LD (FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT
|
||||
LD H,L
|
||||
JR .BPB_FAT
|
||||
;
|
||||
.fat1x: LD A,(HL)
|
||||
CP '2' ; FAT16
|
||||
LD HL,#0FFF
|
||||
JR Z,.BPB_FAT
|
||||
CP '6' ; FAT12
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
LD H,L
|
||||
.BPB_FAT: SUB #20 ; A-#20 = fat type (#12, #16, #32)
|
||||
LD (FatBuffer.FAT_TYPE),A
|
||||
LD (FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||
; .loop6: LD A,(HL)
|
||||
; INC HL
|
||||
; CP ' '
|
||||
; JR Z,.loop6
|
||||
; ;
|
||||
; CP '1'
|
||||
; JP Z,.fat1x
|
||||
; CP '3'
|
||||
; JP NZ,DOS_X_Error.UnknownBPB
|
||||
; LD A,#52 ; #52-#20 = #32 fat type
|
||||
; LD HL,#0FFF
|
||||
; LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||
; LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT
|
||||
; LD H,L
|
||||
; JR .BPB_FAT
|
||||
; ;
|
||||
; .fat1x: LD A,(HL)
|
||||
; CP '2' ; FAT16
|
||||
; LD HL,#0FFF
|
||||
; JR Z,.BPB_FAT
|
||||
; CP '6' ; FAT12
|
||||
; JP NZ,DOS_X_Error.UnknownBPB
|
||||
; LD H,L
|
||||
; .BPB_FAT: SUB #20 ; A-#20 = fat type (#12, #16, #32)
|
||||
; LD (CORE_BUFFERS.FatBuffer.FAT_TYPE),A
|
||||
; LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||
;!TODO ¥ ¨á¯®«ì§ã¥âáï § 票¥ ¢ëç¨á«ï¥¬®¥ ¨ á®åà 塞®¥ ¢ FatBuffer
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; LD HL,0
|
||||
; LD BC,(CORE_BUFFERS.BootSector.SectorsPerTrack) ; Sector per track
|
||||
; LD A,(CORE_BUFFERS.BootSector.HEADS)
|
||||
; LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerTrack) ; Sector per track
|
||||
; LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.HEADS)
|
||||
; .BPB_L1: ; calc. sector per cylinder
|
||||
; ADD HL,BC
|
||||
; DEC A
|
||||
; JR NZ,.BPB_L1
|
||||
; LD (FatBuffer.S_X_H),HL
|
||||
; LD (CORE_BUFFERS.FatBuffer.S_X_H),HL
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; [ ] fat32
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerDrive)
|
||||
LD DE,(FatBuffer.FirstDataSector_L)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
||||
LD A,H
|
||||
OR L
|
||||
JP NZ,.HDDSMAL
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_L)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_H)
|
||||
PUSH BC ; Total Sectors high
|
||||
PUSH HL ; Total Sectors low
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JP NC,.HDDBIG
|
||||
@ -822,25 +836,104 @@ RD_BPB: LD C,SLOT3
|
||||
JP .HDDBIG
|
||||
;
|
||||
.HDDSMAL: ; CF = 0
|
||||
SBC HL,DE
|
||||
LD BC,0
|
||||
.HDDBIG: LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
||||
PUSH BC ; Total Sectors high
|
||||
PUSH HL ; Total Sectors low
|
||||
SBC HL,DE
|
||||
;
|
||||
.HDDBIG: LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
SCF
|
||||
.S4C01: RRA
|
||||
JR C,.S4C02
|
||||
.loop7: RRA
|
||||
JR C,.loop7_exit
|
||||
RR B
|
||||
RR C
|
||||
RR H
|
||||
RR L
|
||||
JP .S4C01
|
||||
.S4C02: INC HL
|
||||
LD (FatBuffer.MaxClusterLow),HL
|
||||
JP .loop7
|
||||
;
|
||||
.loop7_exit: INC HL
|
||||
LD (CORE_BUFFERS.FatBuffer.MaxClusterLow),HL
|
||||
;
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD (FatBuffer.CacheBlock),HL
|
||||
LD (FatBuffer.CacheUpdated),A
|
||||
LD (CORE_BUFFERS.FatBuffer.CacheBlock),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||
; A = 0
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_H)
|
||||
LD H,A
|
||||
EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_L)
|
||||
; DE:HL = SectorsPerFAT
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.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
|
||||
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||
LD B,0
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||
LD C,A
|
||||
ADD HL,BC
|
||||
JR NC,.no_inc_DE
|
||||
INC DE
|
||||
.no_inc_DE: ; .RESERVED_SECTORS + .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||
ADD HL,BC
|
||||
JR NC,.no_inc_de
|
||||
INC DE
|
||||
.no_inc_de: ; Total_Sectors - (.RESERVED_SECTORS + .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT)
|
||||
AND A
|
||||
LD B,D
|
||||
LD C,E
|
||||
POP DE ; Total Sectors low
|
||||
EX DE,HL
|
||||
SBC HL,DE
|
||||
EX (SP),HL ; Total Sectors high
|
||||
SBC HL,BC
|
||||
POP DE ; Total Sectors low
|
||||
; HL:DE = DataSec
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
CALL DIV_for_SPC
|
||||
; ¢ëïá塞 à §à冷áâì FAT
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,.its_FAT32
|
||||
;
|
||||
LD HL,4084
|
||||
SBC HL,BC
|
||||
JR NC,.its_FAT12
|
||||
;
|
||||
LD HL,65525
|
||||
SBC HL,BC
|
||||
JR C,.its_FAT32
|
||||
;
|
||||
; It's FAT16
|
||||
LD A,FAT_TYPE.x16
|
||||
LD HL,#FFFF
|
||||
JR .BPB_FAT
|
||||
;
|
||||
.its_FAT12: LD HL,#0FFF
|
||||
LD A,FAT_TYPE.x12
|
||||
JR .BPB_FAT
|
||||
;
|
||||
.its_FAT32: LD A,FAT_TYPE.x32
|
||||
LD HL,#0FFF
|
||||
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT
|
||||
LD H,L
|
||||
;
|
||||
.BPB_FAT: LD (CORE_BUFFERS.FatBuffer.FAT_TYPE),A
|
||||
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||
;
|
||||
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
@ -848,8 +941,9 @@ RD_BPB: LD C,SLOT3
|
||||
; [ ] fat32
|
||||
; XOR A
|
||||
; HL = 0
|
||||
EX DE,HL
|
||||
; EX DE,HL
|
||||
;
|
||||
LD DE,0
|
||||
CALL READ_FAT_TABLE
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
@ -881,6 +975,7 @@ DOS_X_Error:
|
||||
;
|
||||
;
|
||||
;!TODO ª ¡ãä¥à ¬!
|
||||
/*
|
||||
FatBuffer:
|
||||
;.MSG: DB 'FAT'
|
||||
.DRIVE: DB #FF
|
||||
@ -918,4 +1013,5 @@ FatBuffer:
|
||||
;.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||
;.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||
;
|
||||
*/
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -113,23 +113,23 @@ INC_FAT:
|
||||
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster
|
||||
; hl' = áâ à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï áà ¢¥¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
|
||||
CHECK_CLUSTER_IS_SMALLER:
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
XOR FAT_TYPE.x32
|
||||
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
EXX
|
||||
EX DE,HL
|
||||
LD HL,(FatBuffer.MaxClusterHigh)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
EXX
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
;RET C
|
||||
RET NZ ; ¥á«¨ FatBuffer.MaxClusterHigh - hl' != 0, â® ª« áâ¥à ª®à४âë©
|
||||
RET NZ ; ¥á«¨ CORE_BUFFERS.FatBuffer.MaxClusterHigh - hl' != 0, â® ª« áâ¥à ª®à४âë©
|
||||
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
.low: EX DE,HL
|
||||
LD HL,(FatBuffer.MaxClusterLow)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
@ -157,7 +157,7 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
||||
;
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x16
|
||||
JR C,.FAT12
|
||||
JR NZ,.FAT32
|
||||
@ -255,9 +255,9 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
||||
; .Custom:
|
||||
; HL':HL ¨ DE':DE â ª¨¥ ¦¥ ª ª ¨ ¢å®¤¥
|
||||
;------------------------------------------------------------------------------------------------
|
||||
WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ; ®¬¥à ª« áâ¥à
|
||||
WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ; ®¬¥à ª« áâ¥à
|
||||
EXX
|
||||
LD DE,(FatBuffer.END_CHAIN_CLUSTER_H) ; ®¬¥à ª« áâ¥à
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H) ; ®¬¥à ª« áâ¥à
|
||||
EXX
|
||||
.Custom: PUSH DE
|
||||
EXX
|
||||
@ -278,9 +278,9 @@ WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ;
|
||||
PUSH DE ; ¬« ¤è¨© ®¬¥à ª« áâ¥à ª®â®àë© ¢¯¨á âì
|
||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||
;LD A,1
|
||||
;LD (FatBuffer.CacheUpdated),A
|
||||
;LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||
;
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x16
|
||||
JR C,.FAT12
|
||||
JR NZ,.FAT32
|
||||
@ -296,7 +296,7 @@ WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ;
|
||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||
XOR A
|
||||
INC A
|
||||
LD (FatBuffer.CacheUpdated),A
|
||||
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||
; CF = 0
|
||||
RET
|
||||
;
|
||||
@ -360,7 +360,7 @@ WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ;
|
||||
; out: C:HL - logical number
|
||||
; B = 0
|
||||
GET_SECTOR_OF_FAT:
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
LD B,FAT_CACHE.Degree_32 ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥ãî
|
||||
XOR FAT_TYPE.x32
|
||||
JR Z,.next
|
||||
@ -383,7 +383,7 @@ GET_SECTOR_OF_FAT:
|
||||
; ADC A,C
|
||||
; EDUP
|
||||
; LD C,A
|
||||
; LD A,(FatBuffer.FAT_TYPE)
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
; CP FAT_TYPE.x32
|
||||
; RET NZ
|
||||
; ADD HL,HL ;x2
|
||||
@ -400,34 +400,34 @@ GET_SECTOR_OF_FAT:
|
||||
; DE - NEW FAT BLOCK
|
||||
READ_FAT_TABLE: PUSH HL
|
||||
PUSH DE
|
||||
LD A,(FatBuffer.CacheUpdated)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||||
OR A
|
||||
CALL NZ,WRITE_FAT_TABLE.Start
|
||||
POP DE
|
||||
;
|
||||
EX DE,HL
|
||||
LD (FatBuffer.CacheBlock),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.CacheBlock),HL
|
||||
;
|
||||
CALL GET_SECTOR_OF_FAT
|
||||
;
|
||||
; BC:HL - ®¬¥à «®£.ᥪâ®à
|
||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FAT1_SEC_L)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
LD HL,(FatBuffer.FAT1_SEC_H)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.FAT1_SEC_H)
|
||||
; JR NC,.no_inc
|
||||
; INC HL
|
||||
.no_inc: ADC HL,BC
|
||||
; HL:IX - SECTOR FAT FOR READING
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
XOR FAT_TYPE.x32
|
||||
LD BC,FAT_CACHE.Sectors_16 * 256 + Dss.DRV.Read ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
||||
JR NZ,.next
|
||||
LD B,FAT_CACHE.Sectors_32 ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
|
||||
.next: LD DE,FATPAGE.cache ; ªã¤ ; DE - FAT ADDRESS
|
||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
RST ToDSS.DRV
|
||||
POP HL
|
||||
RET
|
||||
@ -443,7 +443,7 @@ WRITE_FAT_TABLE:
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
||||
.Start: LD HL,(FatBuffer.CacheBlock)
|
||||
.Start: LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
||||
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
||||
CALL GET_SECTOR_OF_FAT
|
||||
; B=0, C:HL - ᬥ饨¥ ¢ ᥪâ®à å ¢ãâਠ⠡«¨æë FAT ç «® ¡«®ª
|
||||
@ -453,7 +453,7 @@ WRITE_FAT_TABLE:
|
||||
;LD C,L
|
||||
;
|
||||
LD DE,FAT_CACHE.Sectors_32
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR Z,.next
|
||||
LD DE,FAT_CACHE.Sectors_16 ; !FIXIT ¡à âì íâ® § 票¥ ¨§ ¯¥à¥¬¥®© ¢¥§¤¥
|
||||
@ -466,10 +466,10 @@ WRITE_FAT_TABLE:
|
||||
;
|
||||
.no_inc: ; ª®¥æ ¡«®ª ¢ë室¨â § ¯à¥¤¥«ë â ¡«¨æë?
|
||||
LD B,E ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
||||
LD A,(FatBuffer.SectorsPerFAT_H)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_H)
|
||||
LD (.sub_A),A
|
||||
;LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
||||
LD DE,(FatBuffer.SectorsPerFAT_L)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_L)
|
||||
AND A
|
||||
LD A,C
|
||||
SBC HL,DE
|
||||
@ -493,8 +493,8 @@ WRITE_FAT_TABLE:
|
||||
;PUSH HL
|
||||
;
|
||||
; B = ç¨á«® ᥪâ®à®¢
|
||||
LD IX,(FatBuffer.FAT1_SEC_H)
|
||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
||||
LD IX,(CORE_BUFFERS.FatBuffer.FAT1_SEC_H)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FAT1_SEC_L)
|
||||
;LD B,A
|
||||
;LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
|
||||
PUSH BC
|
||||
@ -505,26 +505,26 @@ WRITE_FAT_TABLE:
|
||||
CALL .SAVE_FAT_XX
|
||||
; [x] ¥á«¨ ¢á¥£® ®¤ â ¡«¨æ FAT, â® ¯®¢â®à®© § ¯¨á¨ ¥ ¯à®¨á室¨â 13/03/2024
|
||||
POP BC ; B = ç¨á«® ᥪâ®à®¢, C = áâ à訩 ¡ ©â á¬¥é¥¨ï ¢ ᥪâ®à å
|
||||
LD HL,(FatBuffer.FAT1_SEC_H)
|
||||
LD DE,(FatBuffer.FAT2_SEC_H)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.FAT1_SEC_H)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FAT2_SEC_H)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR NZ,.not_one_FAT
|
||||
LD HL,(FatBuffer.FAT2_SEC_L)
|
||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.FAT2_SEC_L)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FAT1_SEC_L)
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
JR Z,.only_one_FAT
|
||||
;
|
||||
; á®åà 塞 ¢â®àãî ª®¯¨î FAT
|
||||
.not_one_FAT: LD IX,(FatBuffer.FAT2_SEC_H)
|
||||
LD DE,(FatBuffer.FAT2_SEC_L)
|
||||
.not_one_FAT: LD IX,(CORE_BUFFERS.FatBuffer.FAT2_SEC_H)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FAT2_SEC_L)
|
||||
LD HL,(.save_hl)
|
||||
CALL .SAVE_FAT_XX
|
||||
AND A ;!TODO ¥â ª®âà®«ï ®è¨¡®ª
|
||||
.only_one_FAT: ;
|
||||
.ERR: LD A,0
|
||||
LD (FatBuffer.CacheUpdated),A
|
||||
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||
RET
|
||||
; ‚室: IX:DE - ç «® â ¡«¨æë FAT ¢ ᥪâ®à å
|
||||
; C:HL - ᬥ饨¥ ¢ â ¡«¨æ¥ ¢ ᥪâ®à å
|
||||
@ -546,7 +546,7 @@ WRITE_FAT_TABLE:
|
||||
LD XL,E
|
||||
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® ¡«®ª FAT
|
||||
LD DE,FATPAGE.cache ; ®âªã¤
|
||||
LD A,(FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD C,Dss.DRV.Write
|
||||
JP ToDSS.DRV
|
||||
|
||||
@ -585,7 +585,7 @@ GET_FAT32_CELL:
|
||||
;
|
||||
EXX
|
||||
EX DE,HL
|
||||
LD HL,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
SBC HL,DE
|
||||
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
|
||||
POP HL
|
||||
@ -611,9 +611,9 @@ GET_FAT16_CELL:
|
||||
;
|
||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||
; [x] fat32 ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
||||
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
; LD BC,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
; CP C
|
||||
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
CP E
|
||||
LD E,A
|
||||
;
|
||||
@ -654,9 +654,9 @@ GET_FAT12_CELL:
|
||||
;AND FAT_CACHE.Part_Mask_16
|
||||
;
|
||||
; [ ] ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
||||
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
; LD BC,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
; CP C
|
||||
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||
CP E
|
||||
LD E,A
|
||||
;
|
||||
@ -683,7 +683,7 @@ CLUSTER_TO_SECTOR:
|
||||
; DE:HL - cluster
|
||||
DEC HL
|
||||
DEC HL
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
XOR 1
|
||||
JR Z,.skip
|
||||
;
|
||||
@ -698,13 +698,13 @@ CLUSTER_TO_SECTOR:
|
||||
.skip: EX DE,HL
|
||||
LD XL,E
|
||||
LD XH,D
|
||||
LD DE,(FatBuffer.FirstDataSector_L)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
||||
; [x] fat32
|
||||
;XOR A
|
||||
;
|
||||
ADD IX,DE
|
||||
; [x] fat32
|
||||
LD DE,(FatBuffer.FirstDataSector_H)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_H)
|
||||
;LD D,A
|
||||
;LD E,A
|
||||
;
|
||||
@ -720,7 +720,7 @@ CLUSTER_TO_SECTOR:
|
||||
; IX - buffer in RAM
|
||||
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï
|
||||
BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
LD C,A
|
||||
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï, C - SectorsPerCluster
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
@ -809,7 +809,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
||||
JR NC,.skip2
|
||||
INC HL
|
||||
.skip2: LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Read
|
||||
RST ToDSS.DRV
|
||||
@ -817,7 +817,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
||||
JR C,.Error
|
||||
POP BC ; B = ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã, C = (SectorsPerCluster - ®áâ ⮪) «¨¡® ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||
;!TEST
|
||||
LD A,B
|
||||
LD B,C
|
||||
@ -833,7 +833,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
||||
RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã = 0?
|
||||
LD B,A
|
||||
;
|
||||
.loop4: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||
.loop4: LD HL,CORE_BUFFERS.FatBuffer.SectorsPerCluster
|
||||
LD A,B
|
||||
SUB (HL)
|
||||
LD B,A
|
||||
@ -861,7 +861,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
||||
PUSH BC
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Read
|
||||
RST ToDSS.DRV
|
||||
@ -869,7 +869,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
|
||||
;
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||
.loop3: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop3
|
||||
@ -915,7 +915,7 @@ CHECK_FIRST_CLUSTER:
|
||||
; IY - FM
|
||||
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||||
BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
LD C,A
|
||||
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥨ï, C - SectorsPerCluster
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
@ -1031,7 +1031,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
||||
INC HL
|
||||
; DOUBLE 1
|
||||
.skip2: LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
@ -1040,7 +1040,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
||||
JR C,.Error_3
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||
;
|
||||
LD A,B
|
||||
LD B,C
|
||||
@ -1057,7 +1057,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
||||
RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤®ç¨âªã = 0?
|
||||
LD B,A
|
||||
;
|
||||
.big_loop: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||
.big_loop: LD HL,CORE_BUFFERS.FatBuffer.SectorsPerCluster
|
||||
LD A,B
|
||||
SUB (HL)
|
||||
LD B,A
|
||||
@ -1090,7 +1090,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
; DOUBLE 1
|
||||
LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
@ -1098,7 +1098,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX
|
||||
JR C,.Error_3
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||
.loop3: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop3
|
||||
@ -1268,12 +1268,12 @@ GET_OFFSET_IN_SECTORS:
|
||||
;!TODO fat32
|
||||
;=======================================================================
|
||||
;BPB
|
||||
;LD (FatBuffer.FAT2_SEC_L),HL
|
||||
;LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||
;LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL
|
||||
;LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||
;BPB32
|
||||
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à¥¢®£® ª â «®£ (®¡ëç® 2) 4 ¡ ©â
|
||||
;FAT Max Cluster
|
||||
;LD (FatBuffer.MaxClusterLow),HL
|
||||
;LD (CORE_BUFFERS.FatBuffer.MaxClusterLow),HL
|
||||
;=======================================================================
|
||||
|
||||
;//MODULE: FAT_X
|
||||
|
||||
@ -538,5 +538,12 @@ GET_RAMDRV_NUM:
|
||||
LD A,(BC)
|
||||
OR #60 ;!HARDCODE ᤥ« âì ®¬¥à à §ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
|
||||
RET
|
||||
ENDDRVR EQU $
|
||||
;
|
||||
|
||||
;
|
||||
;TEST_DB_DEL_ME: DB 'Make here more than one page to load test'
|
||||
;
|
||||
|
||||
;
|
||||
;ENDDRVR EQU $
|
||||
;
|
||||
@ -73,14 +73,55 @@
|
||||
; LEN2 EQU 29 ; AMODE EQU 41
|
||||
; LEN3 EQU 30 ; FTASK EQU 42
|
||||
|
||||
;
|
||||
STRUCT _sFatBuffer
|
||||
;.MSG: BYTE 'FAT'
|
||||
.DRIVE: BYTE #FF
|
||||
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
|
||||
.CacheBlock: WORD #0000
|
||||
.CacheUpdated: BYTE #00
|
||||
;.SectorsPerBank: BYTE #00
|
||||
.RootDirStartCluster_L: WORD #0000
|
||||
.RootDirStartCluster_H: WORD #0000 ; [ ] fat32
|
||||
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||
.FAT1_SEC_H: WORD #0000 ; [ ] fat32
|
||||
.FAT2_SEC_L: WORD #0000
|
||||
.FAT2_SEC_H: WORD #0000 ; [ ] fat32
|
||||
.SectorsPerFAT_L WORD #0000
|
||||
.SectorsPerFAT_H BYTE #00
|
||||
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
|
||||
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
||||
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high ; [ ] fat32 ¡ë«® ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£
|
||||
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
||||
.END_CHAIN_CLUSTER_L: WORD #FFFF
|
||||
.END_CHAIN_CLUSTER_H: WORD #0FFF ; [ ] fat3
|
||||
.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
;
|
||||
.BytesPerSector WORD #0000
|
||||
.SectorsPerCluster BYTE #00
|
||||
.BPB_SERIAL_NUMBER DWORD #00000000
|
||||
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||
; IF COMPILE_UNUSED_CODE
|
||||
; .FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||
; .ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
||||
; ENDIF
|
||||
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
||||
ENDS
|
||||
;
|
||||
|
||||
;
|
||||
STRUCT _sBuffers
|
||||
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
||||
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
||||
.BootSector BLOCK 90,0 ; _sBOOT_SECTOR_PARAMS: 62 bytes FAT16, 90 bytes FAT32
|
||||
.FatBuffer _sFatBuffer
|
||||
;.BootSector BLOCK 90,0 ; _sBOOT_SECTOR_PARAMS: 62 bytes FAT16, 90 bytes FAT32
|
||||
.EXE_Header _sEXE_HEADER ; 512 bytes
|
||||
.Stack _sStack ; 256 bytes
|
||||
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
||||
.MemoryTable BLOCK 256,0 ; 256 bytes
|
||||
ENDS
|
||||
;
|
||||
;
|
||||
@ -1 +1 @@
|
||||
952
|
||||
950
|
||||
@ -149,4 +149,9 @@ MOUSE_BAUD:
|
||||
.multiplier_2 EQU 45 ; ¢â®à®© ¬®¦¨â¥«ì = 45. 875000/Œ1*Œ2=1215
|
||||
ENDIF
|
||||
;----------------------------------------------------;
|
||||
;
|
||||
;
|
||||
|
||||
;
|
||||
;----------------------------------------------------;
|
||||
SUBLOAD_SIZE EQU 10 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ¨æã
|
||||
;----------------------------------------------------;
|
||||
|
||||
@ -103,8 +103,14 @@ BATCH:
|
||||
;CALL Restore_Screen
|
||||
;R10
|
||||
;pop af
|
||||
ret c
|
||||
ld (BAT_FM),a ; ¤¥áªà. bat-ä ©«
|
||||
JR NC,.good
|
||||
CP DSS_Error.sys.TOO_MANY_FILES_IN_DIR
|
||||
SCF
|
||||
RET NZ
|
||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||
RET
|
||||
;
|
||||
.good: ld (BAT_FM),a ; ¤¥áªà. bat-ä ©«
|
||||
; ¢ë¯®«. ª®¬ ¤ bat-ä ©«
|
||||
call NEWLINE
|
||||
;!TODO ¢«®¦¥ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â® ¢ ¢ë§ë¢ î騩 bat
|
||||
|
||||
@ -1 +1 @@
|
||||
314
|
||||
315
|
||||
@ -1 +1 @@
|
||||
Subproject commit 18c132c6e9b507cb92d2144f5497278f021a0292
|
||||
Subproject commit 0e2bbfb73ceb70a16b2ab2b5ee6cbc6bd5005bf7
|
||||
Loading…
Reference in New Issue
Block a user