mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
many bugfixes
This commit is contained in:
parent
453d3d6b68
commit
beb5dd8196
@ -380,12 +380,16 @@ write_to_: ld a,(disk) ;
|
||||
;
|
||||
ret
|
||||
write_to_hard_disk:
|
||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||
CALL write_to_
|
||||
RET C
|
||||
; ¯à®¢¥àª <20>€Œ-¤¨áª
|
||||
LD A,B
|
||||
CP #80-1 ;!HARDCODE HDD number
|
||||
CCF
|
||||
RET NC
|
||||
;
|
||||
PUSH BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
||||
LD A,B
|
||||
LD HL,0
|
||||
LD IX,0
|
||||
LD DE,buffer
|
||||
@ -414,6 +418,26 @@ write_to_hard_disk:
|
||||
;
|
||||
LD A,#80
|
||||
LD (HL),A
|
||||
;!FIXIT fat32 not supported
|
||||
PUSH HL
|
||||
INC HL
|
||||
INC HL
|
||||
INC HL
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
POP HL
|
||||
CP PartitionSysTypes.FAT12
|
||||
JR Z,.next
|
||||
CP PartitionSysTypes.FAT16_32Mb
|
||||
JR Z,.next
|
||||
CP PartitionSysTypes.FAT16
|
||||
JR Z,.next
|
||||
CP PartitionSysTypes.FAT16_LBA
|
||||
JR Z,.next
|
||||
; NOT SUPPORTED FS
|
||||
POP BC
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.next: AND A
|
||||
SBC HL,DE
|
||||
|
||||
@ -355,11 +355,11 @@ _TST_PROC: CALL GETMEM
|
||||
;
|
||||
;
|
||||
LD HL,(CMDLINE)
|
||||
LD DE,CORE_BUFFERS.SECBUF+1
|
||||
LD DE,CORE_BUFFERS.SECTOR_BUFFER+1
|
||||
CALL SCOPYS
|
||||
LD A,#80 ;!HARDCODE cmd line size
|
||||
SUB B
|
||||
LD (CORE_BUFFERS.SECBUF),A
|
||||
LD (CORE_BUFFERS.SECTOR_BUFFER),A
|
||||
;R02
|
||||
LD SP,CORE_BUFFERS.EXEBUFF+510 ;‚áâ ¢«ï¥âáï ¢ SHARED_PAGE
|
||||
;
|
||||
@ -441,7 +441,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||
EX DE,HL
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
LD HL,CORE_BUFFERS.SECBUF
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||||
LD C,(HL)
|
||||
INC C
|
||||
LDIR
|
||||
@ -588,7 +588,8 @@ WAIT: LD A,(ErrorLevel)
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
FREE_PROCESS_MEMORY:
|
||||
LD HL,MEMTAB
|
||||
;LD HL,MEMTAB
|
||||
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||
LD BC,256 ;!HARDCODE à §¬¥à ¡«®ª áâà ¨æ Ž‡“
|
||||
.loop: LD A,(TASK)
|
||||
CPIR
|
||||
@ -597,7 +598,8 @@ FREE_PROCESS_MEMORY:
|
||||
PUSH BC
|
||||
DEC HL
|
||||
AND A
|
||||
LD DE,MEMTAB
|
||||
;LD DE,MEMTAB
|
||||
LD DE,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||
SBC HL,DE
|
||||
LD A,L
|
||||
CALL RETMEM ; ®á¢®¡. ¡«®ª ¯ ¬ïâ¨
|
||||
|
||||
@ -11,7 +11,8 @@ GETMEM: LD C,BIOS.GetMem
|
||||
LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
||||
RET C
|
||||
LD D,#00
|
||||
LD HL,MEMTAB ; <20><><EFBFBD>ᨢ ᯨ᪠ <20>뤥<EFBFBD>. <20><>࠭<EFBFBD><E0A0AD>
|
||||
;LD HL,MEMTAB ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||
ADD HL,DE
|
||||
LD A,(TASK) ; ã஢¥ì ⥪ã饩 ¯à®£à ¬¬ë
|
||||
LD (HL),A
|
||||
|
||||
@ -53,7 +53,7 @@ MKDIR:
|
||||
EXX
|
||||
;
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
LD HL,MASKARE
|
||||
LD DE,HANDBUF
|
||||
LD BC,11
|
||||
@ -99,7 +99,7 @@ MKDIR:
|
||||
;
|
||||
; á®§¤ ñ¬ á«ã¦¥¡ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ®¬ ª â «®£¥
|
||||
; Š€’€‹Žƒ "."
|
||||
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER ; ¡ãä¥à
|
||||
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
||||
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
|
||||
;
|
||||
@ -162,26 +162,29 @@ MKDIR:
|
||||
.MKD12: PUSH AF
|
||||
PUSH HL ; áâ. à §àï¤
|
||||
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
||||
IN A,(SLOT3)
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||
LD BC,1*256 + Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
; IN A,(SLOT3)
|
||||
; PUSH AF
|
||||
; IN A,(SLOT0)
|
||||
; OUT (SLOT3),A
|
||||
; ;
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
; LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000
|
||||
; LD BC,1*256 + Dss.DRV.Write
|
||||
; RST ToDSS.DRV
|
||||
; ;
|
||||
; POP AF
|
||||
; OUT (SLOT3),A
|
||||
CALL WRITE_SECTOR
|
||||
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||||
;
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
LD HL,CORE_BUFFERS.SECBUF
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||||
; [x] optimization
|
||||
LD A,(HL)
|
||||
OR A
|
||||
JR Z,.skip_clean
|
||||
;
|
||||
LD DE,CORE_BUFFERS.SECBUF+1
|
||||
LD DE,CORE_BUFFERS.SECTOR_BUFFER+1
|
||||
LD BC,511 ;!HARDCODE sector size
|
||||
LD (HL),0
|
||||
LDIR
|
||||
|
||||
@ -6,7 +6,8 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
RETMEM: LD E,A
|
||||
LD D,#00
|
||||
LD HL,MEMTAB ; <20><><EFBFBD>ᨢ ᯨ᪠ <20>뤥<EFBFBD>. <20><>࠭<EFBFBD><E0A0AD>
|
||||
;LD HL,MEMTAB ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||
ADD HL,DE
|
||||
LD A,(TASK) ; ã஢¥ì ⥪ã饩 ¯à®£à ¬¬ë
|
||||
CP (HL)
|
||||
@ -20,7 +21,8 @@ RETMEM: LD E,A
|
||||
;POP DE
|
||||
LD A,DSS_Error.sys.INVALID_MEMORY_HND
|
||||
RET C
|
||||
LD HL,MEMTAB
|
||||
;LD HL,MEMTAB
|
||||
LD HL,CORE_BUFFERS.MemoryTable
|
||||
ADD HL,DE
|
||||
XOR A
|
||||
LD (HL),A
|
||||
|
||||
@ -53,32 +53,33 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
LD B,A
|
||||
LD C,Dss.DRV.Read
|
||||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||
.read_dir_loop: ;PUSH AF
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
PUSH IX
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||
;LD BC,1*256 + Dss.DRV.Read
|
||||
LD B,1
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
RST ToDSS.DRV
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
; IN A,(SLOT3)
|
||||
; PUSH AF
|
||||
; IN A,(SLOT0)
|
||||
; OUT (SLOT3),A
|
||||
; ;
|
||||
; LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000
|
||||
; LD BC,1*256 + Dss.DRV.Read
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
; RST ToDSS.DRV
|
||||
; POP AF
|
||||
; OUT (SLOT3),A
|
||||
CALL READ_SECTOR
|
||||
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||||
;
|
||||
;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ®£® ᥪâ®à
|
||||
LD B,16
|
||||
LD HL,CORE_BUFFERS.SECBUF
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||||
.check_dir_loop:
|
||||
LD A,(HL)
|
||||
OR A
|
||||
JP Z,.RMD15 ;DIR EMPTY
|
||||
JP Z,.dir_empty
|
||||
CP "."
|
||||
JR Z,.next_record
|
||||
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥¨ï ä ©«
|
||||
@ -120,7 +121,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
.delete: POP IX
|
||||
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
;
|
||||
.RMD15: POP HL
|
||||
.dir_empty: POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
|
||||
@ -7,7 +7,8 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
SETMEM: LD E,A
|
||||
LD D,#00
|
||||
LD HL,MEMTAB
|
||||
;LD HL,MEMTAB
|
||||
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||
ADD HL,DE
|
||||
LD A,(TASK)
|
||||
CP (HL)
|
||||
|
||||
@ -290,7 +290,7 @@ CLEAR_BUFFER_AND_INIT_PROC:
|
||||
; DS $/256+1*256-$,0 c:\bin\menu
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
MEMTAB: BLOCK 256,0
|
||||
;MEMTAB: BLOCK 256,0
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
_mInfoALIGN 256,0
|
||||
@ -415,17 +415,32 @@ FatBuffer _sFatBuffer = BUFFERSplace.FatBuffer
|
||||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||||
XSTACK EQU BUFFERSplace.Stack.SPoint
|
||||
BUFFER EQU BUFFERSplace.Buffer
|
||||
SECBUF EQU BUFFER ;!TODO ®â¤¥«¨âì SECBUF ®â BUFFER
|
||||
SECTOR_BUFFER EQU BUFFER ;!TODO ®â¤¥«¨âì SECTOR_BUFFER ®â BUFFER
|
||||
MemoryTable EQU BUFFERSplace.MemoryTable
|
||||
ENDMODULE
|
||||
CLEAR_ZONE.size EQU _sBuffers
|
||||
|
||||
ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||
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.XSTACK - CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start
|
||||
DISPLAY "CLEAR_ZONE.Size ", /H, CLEAR_ZONE.size
|
||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||
DISPLAY "Consist: "
|
||||
DISPLAY " FM_BUF ", /H, CORE_BUFFERS.FM_BUF
|
||||
DISPLAY " FM_BUF.Size: ", /H, CORE_BUFFERS.FM_BUF.Size
|
||||
DISPLAY " FM_BUF.FullSize ", /H, CORE_BUFFERS.FM_BUF.FullSize
|
||||
DISPLAY " FatBuffer ", /H, CORE_BUFFERS.FatBuffer
|
||||
DISPLAY " FatBuffer.Size ", /H, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.FatBuffer
|
||||
DISPLAY " EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY " Size ", /H, CORE_BUFFERS.XSTACK - CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY " XSTACK ", /H, CORE_BUFFERS.XSTACK
|
||||
DISPLAY " Size ", /H, CORE_BUFFERS.BUFFER - CORE_BUFFERS.XSTACK
|
||||
DISPLAY " BUFFER ", /H, CORE_BUFFERS.BUFFER
|
||||
DISPLAY " Size ", /H, CORE_BUFFERS.MemoryTable - CORE_BUFFERS.BUFFER
|
||||
DISPLAY " MemoryTable ", /H, CORE_BUFFERS.MemoryTable
|
||||
DISPLAY " Size ", /H, _sBuffers - (CORE_BUFFERS.MemoryTable - CORE_BUFFERS.BUFFERSplace)
|
||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||
DISPLAY "CLEAR_ZONE.End ", /H, CLEAR_ZONE.start + CLEAR_ZONE.size
|
||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||
|
||||
EXPORT CORE_BUFFERS.BUFFERSplace
|
||||
@ -434,8 +449,8 @@ CLEAR_ZONE.size EQU _sBuffers
|
||||
EXPORT CORE_BUFFERS.EXEBUFF
|
||||
EXPORT CORE_BUFFERS.XSTACK
|
||||
EXPORT CORE_BUFFERS.BUFFER
|
||||
EXPORT CORE_BUFFERS.SECBUF
|
||||
|
||||
EXPORT CORE_BUFFERS.SECTOR_BUFFER
|
||||
EXPORT CORE_BUFFERS.MemoryTable
|
||||
/*
|
||||
;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
FM_BUF _sFM=$
|
||||
@ -464,16 +479,10 @@ EXEBUFF _sEXE_HEADER=$+FM_BUF.FullSize
|
||||
XSTACK EQU EXEBUFF+_sEXE_HEADER+255
|
||||
|
||||
BUFFER EQU XSTACK+1
|
||||
SECBUF EQU BUFFER
|
||||
SECTOR_BUFFER EQU BUFFER
|
||||
;R11 ////////////////////////////////
|
||||
*/
|
||||
DISPLAY "FM_BUF addr: ",/H,CORE_BUFFERS.FM_BUF
|
||||
DISPLAY "FM_BUF.Size: ",/H,CORE_BUFFERS.FM_BUF.Size
|
||||
DISPLAY "FM_BUF.FullSize: ",/H,CORE_BUFFERS.FM_BUF.FullSize
|
||||
DISPLAY "EXEBUFF: ",/H,CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY "XSTACK: ",/H,CORE_BUFFERS.XSTACK
|
||||
DISPLAY "BUFFER: ",/H,CORE_BUFFERS.BUFFER
|
||||
;
|
||||
|
||||
;
|
||||
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
||||
;
|
||||
@ -634,7 +643,7 @@ BIN_END_ADDRESS EQU $
|
||||
|
||||
;R06
|
||||
;R06 BUFFER
|
||||
;R06 SECBUF DB ". ",#10
|
||||
;R06 SECTOR_BUFFER DB ". ",#10
|
||||
;R06 DW 0,0,0,0,0
|
||||
;R06 DW #0000
|
||||
;R06 DW #0000
|
||||
|
||||
@ -10,10 +10,65 @@
|
||||
;---------------------------------------------------------------
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
; á¡à áë¢ ¥â § 票ï ᢮¡®¤ëå ¨ ¯¥à¢®£® ᢮¡®¤®£® ᥪâ®à®¢ "¥®¯à¥¤¥«¥®"
|
||||
RESET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
||||
OR A
|
||||
RET Z
|
||||
;
|
||||
CALL READ_FSinfo
|
||||
;
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT
|
||||
LD B,8 ; 2 x DWORD
|
||||
LD A,#FF
|
||||
;
|
||||
.fsinfo_loop: LD (HL),A
|
||||
INC HL
|
||||
DJNZ .fsinfo_loop
|
||||
;
|
||||
XOR A
|
||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||
JR WRITE_FSinfo
|
||||
; ;
|
||||
; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
||||
READ_BPB: LD C,Dss.DRV.GetBPB
|
||||
JR RW_SECTOR
|
||||
;
|
||||
; ‡ ¯¨á âì FSinfo ¨§ SECTOR_BUFFER
|
||||
WRITE_FSinfo: LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
||||
LD HL,0
|
||||
; ‡ ¯¨á âì ᥪâ®à ¨§ SECTOR_BUFFER
|
||||
; ‚室: HL:IX = Logical Block (sector)
|
||||
WRITE_SECTOR: LD BC,1*256 + Dss.DRV.Write
|
||||
JR RW_SECTOR
|
||||
;
|
||||
; <20>à®ç¨â âì FSinfo ¢ SECTOR_BUFFER
|
||||
READ_FSinfo:
|
||||
LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
||||
LD HL,0
|
||||
; <20>à®ç¨â âì ᥪâ®à ¢ SECTOR_BUFFER
|
||||
; ‚室: HL:IX = Logical Block (sector)
|
||||
READ_SECTOR: LD BC,1*256 + Dss.DRV.Read
|
||||
;
|
||||
RW_SECTOR: IN A,(SLOT3)
|
||||
PUSH AF
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000
|
||||
RST ToDSS.DRV
|
||||
EX AF,AF'
|
||||
;
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
EX AF,AF'
|
||||
RET
|
||||
;
|
||||
|
||||
; [ ] 㤠«¥¨¥ § ¯¨á¨ LFN
|
||||
;
|
||||
; ¢å®¤: IX = ⥪ãé ï § ¯¨áì ¢ áâà ¨æ¥ á ª â «®£®¬ FAT
|
||||
; ¤«ï ª®â®à®© ¤® 㤠«¨âì § ¯¨á¨ LFS
|
||||
; ¢å®¤: IX = ⥪ãé ï § ¯¨áì ¢ áâà ¨æ¥ á ª â «®£®¬ FAT ¤«ï ª®â®à®©
|
||||
; ¤® 㤠«¨âì § ¯¨á¨ LFS
|
||||
DELETE_LFN_RECORDS:
|
||||
PUSH IX
|
||||
LD A,XH
|
||||
@ -40,7 +95,6 @@ DELETE_LFN_RECORDS:
|
||||
.beyond_boundaries: ; !TODO ¯®¤£à㧪 ¤à㣮© ç á⨠ª â «®£ . ¯®ª § £«ãèª
|
||||
POP IX
|
||||
RET
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
@ -360,10 +414,10 @@ FINDDIR:
|
||||
|
||||
CHECK_ROOT_CLUSTER:
|
||||
EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
|
||||
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L) ;R005
|
||||
LD A,L
|
||||
OR H
|
||||
LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H)
|
||||
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
|
||||
OR L
|
||||
OR H
|
||||
EX DE,HL
|
||||
@ -372,22 +426,14 @@ CHECK_ROOT_CLUSTER:
|
||||
;----------------------------------------------------------------------;
|
||||
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
|
||||
; [x] fat32 ;!TEST
|
||||
; !FIXIT «®¢¨âáï ¤¢®©®¥ ®¡à 饨¥ ¯à¨ ®âªàë⨨ ª®àï ¤¨áª , ¯à¨¬¥à
|
||||
OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||
LD A,(HL)
|
||||
OR A
|
||||
JR NZ,.SUBDIR
|
||||
.REROOT: ; fat32
|
||||
; EX DE,HL
|
||||
; LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||
; LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
||||
; LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||
; LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
|
||||
; EX DE,HL
|
||||
LD DE,0
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),DE
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),DE
|
||||
|
||||
;
|
||||
.REROOT: LD DE,0
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),DE
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),DE
|
||||
CALL LOADDIR
|
||||
; CF=0
|
||||
LD HL,WorkDirectory
|
||||
@ -430,13 +476,12 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||
.SUBDIR3: CALL FINDDIR
|
||||
RET C
|
||||
EX DE,HL
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; fat32
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),IY ; fat32
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL ; fat32
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),IY ; fat32
|
||||
LD HL,#4000 ;!HARDCODE
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
|
||||
;EX DE,HL
|
||||
;JP LOADDIR
|
||||
;--------------;
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
|
||||
;-------------; EX DE,HL
|
||||
; JP LOADDIR
|
||||
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
; [x] fat32 ;!TEST
|
||||
LOADDIR: ;!TODO optimize
|
||||
@ -449,14 +494,9 @@ LOADDIR: ;!TODO optimize
|
||||
JR NZ,.LoadRootDir
|
||||
; fat32
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
|
||||
; CALL .read_dir
|
||||
; LD HL,0
|
||||
; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
|
||||
; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
|
||||
; RET
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
|
||||
;
|
||||
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤
|
||||
LD DE,#4000 ; ᪮«ìª®
|
||||
@ -467,7 +507,7 @@ LOADDIR: ;!TODO optimize
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
;
|
||||
.LoadRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||
.LoadRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H) ;!TODO ¢®§¬®¦®, å¢ â¨â LD HL,0
|
||||
LD IX,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||
@ -522,9 +562,9 @@ SAVEDIR: ;!TODO optimize
|
||||
JR NZ,.SaveRootDir
|
||||
; fat32
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
|
||||
;
|
||||
.save_dir: LD HL,DIRPAGE.buffer
|
||||
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||||
@ -537,7 +577,7 @@ SAVEDIR: ;!TODO optimize
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
;
|
||||
.SaveRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H)
|
||||
.SaveRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H) ;!TODO ¢®§¬®¦®, å¢ â¨â LD HL,0
|
||||
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
|
||||
@ -611,60 +651,44 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
; ¥ ¨á¯®«ì§ã¥âáï
|
||||
; TESTDSK: ;????? ¢®§¬®¦®, çâ® âãâ «®£¨ç¥¥, 祬 ¢ ç «¥ OPENDSK, ¥á«¨ ¡ã¤¥â à ¡®â âì Dss.DRV.Open
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
; LD C,Dss.DRV.MediaCheck
|
||||
; RST ToDSS.DRV
|
||||
; OR A
|
||||
; RET Z
|
||||
|
||||
|
||||
; ॣ. A - ®¬¥à ¤¨áª
|
||||
; [ ] fat32
|
||||
RD_BPB: LD C,SLOT3
|
||||
IN B,(C)
|
||||
PUSH BC
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD DE,CORE_BUFFERS.SECBUF+#C000 ;R08
|
||||
LD C,Dss.DRV.GetBPB
|
||||
RST ToDSS.DRV
|
||||
POP BC
|
||||
OUT (C),B
|
||||
; [x] fat32 ;!TEST
|
||||
RD_BPB: ; LD C,SLOT3
|
||||
; IN B,(C)
|
||||
; PUSH BC
|
||||
; IN A,(SLOT0)
|
||||
; OUT (SLOT3),A
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
; LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000 ;R08
|
||||
; LD C,Dss.DRV.GetBPB
|
||||
; RST ToDSS.DRV
|
||||
; POP BC
|
||||
; OUT (C),B
|
||||
CALL READ_BPB
|
||||
JP C,DOS_X_Error.Not_ready
|
||||
;
|
||||
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||
;R05
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
;
|
||||
; ;R08 ; [x] fat32
|
||||
; LD HL,CORE_BUFFERS.SECBUF
|
||||
; LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||||
; LD DE,CORE_BUFFERS.BootSector
|
||||
; LD BC,_sBOOT_SECTOR_PARAMS_FAT32 ; size
|
||||
; LDIR
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.DRIVE_TYPE)
|
||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JP C,DOS_X_Error.UnknownBPB
|
||||
;
|
||||
;!TODO ¯à®¢¥à¨âì ¯® ¬¥âª¥ à §¤¥« , çâ® íâ® FAT, ¯®â®¬ ®¯à¥¤¥«ïâì ª ª®© FAT
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BytesPerSector)
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||
LD (CORE_BUFFERS.FatBuffer.BytesPerSector),HL
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerCluster)
|
||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerCluster),A
|
||||
; calc. first sector FAT
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RESERVED_SECTORS)
|
||||
;
|
||||
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
||||
; ADD HL,DE
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.RESERVED_SECTORS)
|
||||
;!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
|
||||
@ -675,22 +699,21 @@ RD_BPB: LD C,SLOT3
|
||||
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.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 + BOOT_SECTOR.SectorsPerFAT16)
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT16)
|
||||
LD A,E
|
||||
OR D
|
||||
JR NZ,.skip_high
|
||||
;
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT32 + 2)
|
||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
|
||||
LD A,C
|
||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
||||
LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT32)
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
||||
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
||||
CP 1
|
||||
JR Z,.one_FAT
|
||||
DEC A
|
||||
@ -727,7 +750,7 @@ RD_BPB: LD C,SLOT3
|
||||
ENDIF
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32
|
||||
; [ ]fat32 ;!TEST
|
||||
LD A,H
|
||||
OR L
|
||||
@ -762,79 +785,36 @@ RD_BPB: LD C,SLOT3
|
||||
JP NC,.loop3
|
||||
.loop3.end: ;
|
||||
LD (CORE_BUFFERS.FatBuffer.BytesPerCluster),HL
|
||||
;
|
||||
IF COMPILE_UNUSED_CODE
|
||||
EX DE,HL
|
||||
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
||||
XOR A
|
||||
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤ ¯® ¤®¡¨âáï
|
||||
.loop4: INC A
|
||||
JP Z,DOS_X_Error.UnknownBPB
|
||||
SBC HL,DE
|
||||
JR NC,.loop4
|
||||
LD (CORE_BUFFERS.FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||
ENDIF
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
; 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'
|
||||
; 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
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;!TODO ¥ ¨á¯®«ì§ã¥âáï § ç¥¨ï ¢ëç¨á«ï¥¬ë¥ ¨ á®åà ï¥¬ë¥ ¢ FatBuffer
|
||||
; EX DE,HL
|
||||
; LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
||||
; XOR A
|
||||
; ;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤ ¯® ¤®¡¨âáï
|
||||
;.loop4: INC A
|
||||
; JP Z,DOS_X_Error.UnknownBPB
|
||||
; SBC HL,DE
|
||||
; JR NC,.loop4
|
||||
; LD (CORE_BUFFERS.FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||
;
|
||||
; LD HL,0
|
||||
; 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
|
||||
; LD BC,(CORE_BUFFERS.SECTOR_BUFFER + _sBOOT_SECTOR_PARAMS.SectorsPerTrack) ; Sector per track
|
||||
; LD A,(CORE_BUFFERS.SECTOR_BUFFER + _sBOOT_SECTOR_PARAMS.HEADS)
|
||||
;.BPB_L1: ; calc. sector per cylinder
|
||||
; ADD HL,BC
|
||||
; DEC A
|
||||
; JR NZ,.BPB_L1
|
||||
; LD (CORE_BUFFERS.FatBuffer.S_X_H),HL
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; [ ] fat32
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerDrive)
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerDrive)
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
||||
LD A,H
|
||||
OR L
|
||||
JP NZ,.HDDSMAL
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_L)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H)
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_L)
|
||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H)
|
||||
PUSH BC ; Total Sectors high
|
||||
PUSH HL ; Total Sectors low
|
||||
AND A
|
||||
@ -862,7 +842,11 @@ RD_BPB: LD C,SLOT3
|
||||
;
|
||||
.loop7_exit: INC HL
|
||||
LD (CORE_BUFFERS.FatBuffer.MaxClusterLow),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC
|
||||
LD A,L
|
||||
OR H
|
||||
JR NZ,.no_inc_bc
|
||||
INC BC
|
||||
.no_inc_bc: LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC
|
||||
;
|
||||
XOR A
|
||||
LD H,A
|
||||
@ -876,7 +860,7 @@ RD_BPB: LD C,SLOT3
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_L)
|
||||
; DE:HL = SectorsPerFAT
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.Number_of_FATs)
|
||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
||||
LD B,A
|
||||
DEC A
|
||||
JR Z,.loop_mul_end
|
||||
@ -894,7 +878,7 @@ RD_BPB: LD C,SLOT3
|
||||
JR NC,.no_inc_DE
|
||||
INC DE
|
||||
.no_inc_DE: ; .RESERVED_SECTORS + .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RESERVED_SECTORS)
|
||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.RESERVED_SECTORS)
|
||||
ADD HL,BC
|
||||
JR NC,.no_inc_de
|
||||
INC DE
|
||||
@ -926,43 +910,48 @@ RD_BPB: LD C,SLOT3
|
||||
SBC HL,BC
|
||||
JR C,.its_FAT32
|
||||
;
|
||||
; It's FAT16
|
||||
; It's FAT16
|
||||
LD HL,#FFFF
|
||||
LD A,FAT_TYPE.x16
|
||||
.Set_SN: EXX
|
||||
.set_vars: EXX
|
||||
LD HL,0
|
||||
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),HL
|
||||
LD HL,CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT.LABEL
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),HL
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT.LABEL
|
||||
EXX
|
||||
LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT.SERIAL_NUMBER)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT.SERIAL_NUMBER+2)
|
||||
JR .BPB_FAT
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT.SERIAL_NUMBER)
|
||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT.SERIAL_NUMBER+2)
|
||||
JR .SET_VARS
|
||||
;
|
||||
.its_FAT12: LD HL,#0FFF
|
||||
LD A,FAT_TYPE.x12
|
||||
JR .Set_SN
|
||||
JR .set_vars
|
||||
;
|
||||
.its_FAT32: EXX
|
||||
LD HL,CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.LABEL
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT32.LABEL
|
||||
EXX
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RootDirStartCluster)
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.RootDirStartCluster)
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),HL
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RootDirStartCluster+2)
|
||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.RootDirStartCluster+2)
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),BC
|
||||
|
||||
CALL ClusterToSector
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_H),BC
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FSINFO_Sector)
|
||||
LD (CORE_BUFFERS.FatBuffer.FSINFO_Sector),HL
|
||||
;
|
||||
LD A,FAT_TYPE.x32
|
||||
LD HL,#0FFF
|
||||
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||
LD H,L
|
||||
LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.SERIAL_NUMBER)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.SERIAL_NUMBER+2)
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT32.SERIAL_NUMBER)
|
||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT32.SERIAL_NUMBER+2)
|
||||
;
|
||||
.BPB_FAT: LD (CORE_BUFFERS.FatBuffer.FAT_TYPE),A
|
||||
.SET_VARS: LD (CORE_BUFFERS.FatBuffer.FAT_TYPE),A
|
||||
LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER),DE
|
||||
LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER+2),BC
|
||||
@ -970,32 +959,98 @@ RD_BPB: LD C,SLOT3
|
||||
LD DE,CORE_BUFFERS.FatBuffer.BPB_LABEL
|
||||
LD BC,11 ;!HARDCODE
|
||||
LDIR
|
||||
;
|
||||
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
PUSH AF
|
||||
LD DE,0
|
||||
CALL READ_FAT_TABLE
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
CALL R_CLUST
|
||||
;
|
||||
; “áâ ®¢¨âì ç «ìë© ª« áâ¥à ¤«ï ç⥨ï
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR Z,.set_FSinfo
|
||||
;
|
||||
LD HL,#0001
|
||||
LD (G_CLUST.low),HL
|
||||
DEC L
|
||||
LD (G_CLUST.high),HL
|
||||
XOR A
|
||||
RET
|
||||
;!TODO detect fat type by clusters!
|
||||
.IBM_DOS: LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JR C,DOS_X_Error.UnknownBPB
|
||||
; ID ram-¤¨áª - #FA
|
||||
CP #F8 ; !FIXIT fat. ¥ ®¡ï§ â¥«ì® ¥á«¨ ¢¨â, â® ¥ FAT12
|
||||
LD A,'2'
|
||||
LD HL,#0FFF
|
||||
JP NZ,.BPB_FAT
|
||||
;
|
||||
LD A,'6'
|
||||
LD H,L
|
||||
JP .BPB_FAT
|
||||
;
|
||||
.set_FSinfo: ;
|
||||
IFN USE_FSINFO_FAT32
|
||||
CALL READ_FSinfo
|
||||
; !FIXIT ¯à®¢¥àª ®è¨¡ªã
|
||||
;
|
||||
LD A,#FF
|
||||
; ¯à®¢¥àª ®¤®© ¨§ á®â¨ áà ëå ᨣ âãà
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE)
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE + 2)
|
||||
LD BC,#7272
|
||||
SBC HL,BC
|
||||
JR NZ,.error_sig
|
||||
EX DE,HL
|
||||
LD DE,#6141
|
||||
SBC HL,DE
|
||||
JR NZ,.error_sig
|
||||
;
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT
|
||||
LD B,8 ; 2 x DWORD
|
||||
LD A,#FF
|
||||
;
|
||||
.fsinfo_loop: AND (HL)
|
||||
INC HL
|
||||
DJNZ .fsinfo_loop
|
||||
;
|
||||
.error_sig: XOR #FF
|
||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||
;
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,2
|
||||
LD (G_CLUST.low),HL
|
||||
LD L,H
|
||||
LD (G_CLUST.high),HL
|
||||
RET
|
||||
ELSE
|
||||
CALL READ_FSinfo
|
||||
; !FIXIT ¯à®¢¥àª ®è¨¡ªã
|
||||
;
|
||||
; ¯à®¢¥àª ®¤®© ¨§ á®â¨ áà ëå ᨣ âãà
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE)
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE + 2)
|
||||
LD BC,#7272
|
||||
SBC HL,BC
|
||||
JR NZ,.error_sig
|
||||
EX DE,HL
|
||||
LD DE,#6141
|
||||
SBC HL,DE
|
||||
JR NZ,.error_sig
|
||||
; !FIXIT ᤥ« âì ¯à®¢¥àªã ª« áâ¥à®¢ ¢ «¨¤®áâì (¥ ¡®«ìè¥ ¬ ªá¨¬ «ì®£® ¤«ï à §¤¥« )
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER)
|
||||
LD (G_CLUST.low),HL
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2)
|
||||
LD (G_CLUST.high),HL
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT)
|
||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT+2)
|
||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||||
XOR A
|
||||
RET
|
||||
.error_sig: LD HL,#FFFF
|
||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,2
|
||||
LD (G_CLUST.low),HL
|
||||
LD L,H
|
||||
LD (G_CLUST.high),HL
|
||||
RET
|
||||
ENDIF
|
||||
;;;;;;;;
|
||||
|
||||
; --> BC:HL - Cluster
|
||||
; <-- BC:HL - Sector
|
||||
|
||||
@ -13,15 +13,6 @@
|
||||
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
||||
;---------------------------------------------------------------
|
||||
|
||||
; [x] fat32 ;!TEST
|
||||
; “áâ ®¢¨âì ç «ìë© ª« áâ¥à ¤«ï ç⥨ï
|
||||
R_CLUST: LD HL,#0001
|
||||
LD (G_CLUST.low),HL
|
||||
DEC L
|
||||
LD (G_CLUST.high),HL
|
||||
RET
|
||||
|
||||
|
||||
;
|
||||
; [x] fat32 ;!TEST
|
||||
; ©â¨ ¯¥à¢ë© ᢮¡®¤ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢
|
||||
@ -29,14 +20,16 @@ R_CLUST: LD HL,#0001
|
||||
; HL' - áâ à訩 ®¬¥à ᢮¡®¤®£® ª« áâ¥à
|
||||
G_CLUST: ;
|
||||
.low+1: LD HL,#0001
|
||||
EXX
|
||||
.high+1: LD HL,#0000
|
||||
EXX
|
||||
.loop: INC HL ; ®¬¥à ª« áâ¥à
|
||||
LD A,L
|
||||
OR H
|
||||
; [x] fat32
|
||||
EXX
|
||||
.high+1: LD HL,#0000
|
||||
JR NZ,.no_inc
|
||||
INC HL
|
||||
JR NZ,.no_inc
|
||||
INC HL
|
||||
.no_inc: EXX
|
||||
;
|
||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
@ -125,12 +118,11 @@ CHECK_CLUSTER_IS_SMALLER:
|
||||
EX DE,HL
|
||||
EXX
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
;RET C
|
||||
RET NZ ; ¥á«¨ CORE_BUFFERS.FatBuffer.MaxClusterHigh - hl' != 0, â® ª« áâ¥à ª®à४âë©
|
||||
RET C
|
||||
RET NZ
|
||||
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
.low: EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
@ -246,6 +238,24 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
||||
|
||||
;
|
||||
; [x] fat32 ;!TEST
|
||||
;
|
||||
; !TODO optimize
|
||||
; ¯à¨ § ¯¨á¨ ¢ ªíè § ç¥¨ï ®â¬¥ç âì ç¥à¥§ OR ¢ ï祩ª¥ FatBuffer.SectorOfCacheBlock
|
||||
; ¡¨â ᮮ⢥âáâ¢ãî騩 ªãáªã ¢ áâà ¨æ¥ ªíè , ª®â®àë© ¡ë« ¨§¬¥ñ ¨ ¯®â®¬ ᪨¤ë¢ âì ¤¨áª
|
||||
; ⮫쪮 ⥠ªã᪨, ª®â®àë¥ ¡ë«¨ ¨§¬¥¥ë.
|
||||
; |--------------------|
|
||||
; | bit | adresses |
|
||||
; |-----|--------------|
|
||||
; | 0 | #0000..#07FF |
|
||||
; | 1 | #0800..#0FFF |
|
||||
; | 2 | #1000..#17FF |
|
||||
; | 3 | #1800..#1FFF |
|
||||
; | 4 | #2000..#27FF |
|
||||
; | 5 | #2800..#2FFF |
|
||||
; | 6 | #3000..#37FF |
|
||||
; | 7 | #3800..#3FFF |
|
||||
; |--------------------|
|
||||
;
|
||||
;------------------------------------------------------------------------------------------------
|
||||
; ‡ ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¢ ª®â®àë© § ¯¨á âì
|
||||
@ -447,7 +457,10 @@ WRITE_FAT_TABLE:
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
||||
.Start: LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
||||
.Start: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
CALL Z,RESET_FSInfo
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
||||
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
||||
CALL GET_SECTOR_OF_FAT
|
||||
; B=0, C:HL - ᬥ饨¥ ¢ ᥪâ®à å ¢ãâਠ⠡«¨æë FAT ç «® ¡«®ª
|
||||
@ -465,10 +478,9 @@ WRITE_FAT_TABLE:
|
||||
.next: ADD HL,DE ;+ SIZE CASH (16 SECTORS)
|
||||
JR NC,.no_inc
|
||||
INC C
|
||||
.no_inc: ; C:HL ᬥ饨¥ ¢ ᥪâ®à å ¢ãâਠ⠡«¨æë FAT ª®¥æ ¡«®ª
|
||||
;
|
||||
; C:HL ᬥ饨¥ ¢ ᥪâ®à å ¢ãâਠ⠡«¨æë FAT ª®¥æ ¡«®ª
|
||||
;
|
||||
.no_inc: ; ª®¥æ ¡«®ª ¢ë室¨â § ¯à¥¤¥«ë â ¡«¨æë?
|
||||
; ª®¥æ ¡«®ª ¢ë室¨â § ¯à¥¤¥«ë â ¡«¨æë?
|
||||
LD B,E ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_H)
|
||||
LD (.sub_A),A
|
||||
@ -569,7 +581,7 @@ GET_FAT32_CELL:
|
||||
LD H,A
|
||||
LD A,C
|
||||
;
|
||||
LD B,FAT_CACHE.Degree_32 ; 4 ᤢ¨£
|
||||
LD B,FAT_CACHE.Degree ; 4 ᤢ¨£
|
||||
.loop_block:
|
||||
RLCA ; << H
|
||||
RL L ; << L'
|
||||
|
||||
@ -281,7 +281,6 @@ DRVCLC: ; INC A
|
||||
; .TBL_Entry EQU 16
|
||||
; .Size EQU $-LOGDRV
|
||||
|
||||
;!TODO § ¬¥¨âì PUSH EXX?
|
||||
SELHDD: PUSH DE
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
@ -519,192 +518,190 @@ CHECKH: PUSH IY
|
||||
|
||||
;------------------------------[ PARTIT ]------------------------------;
|
||||
DEFINE_PARTITIONS:
|
||||
.FAT32_DOS:
|
||||
.EASYDOS:
|
||||
.MEDIDOS:
|
||||
.HIGHDOS:
|
||||
LD E,(IY + BOOT_SECTOR.Partition.Start_LBA + 0)
|
||||
LD D,(IY + BOOT_SECTOR.Partition.Start_LBA + 1)
|
||||
LD L,(IY + BOOT_SECTOR.Partition.Start_LBA + 2)
|
||||
LD H,(IY + BOOT_SECTOR.Partition.Start_LBA + 3)
|
||||
LD IX,(CURRENT_SECTOR_L)
|
||||
ADD IX,DE
|
||||
LD DE,(CURRENT_SECTOR_H)
|
||||
ADC HL,DE
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
;BPB SECTOR
|
||||
LD IX,(OFFSECT)
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 0),E
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
|
||||
LD E,(IY + BOOT_SECTOR.Partition.Size_LBA + 0)
|
||||
LD D,(IY + BOOT_SECTOR.Partition.Size_LBA + 1)
|
||||
LD L,(IY + BOOT_SECTOR.Partition.Size_LBA + 2)
|
||||
LD H,(IY + BOOT_SECTOR.Partition.Size_LBA + 3)
|
||||
;SIZE DISK
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H
|
||||
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||
.FAT32_DOS: ;
|
||||
.EASYDOS: ;
|
||||
.MEDIDOS: ;
|
||||
.HIGHDOS: ;
|
||||
LD E,(IY + BOOT_SECTOR.Partition.Start_LBA + 0)
|
||||
LD D,(IY + BOOT_SECTOR.Partition.Start_LBA + 1)
|
||||
LD L,(IY + BOOT_SECTOR.Partition.Start_LBA + 2)
|
||||
LD H,(IY + BOOT_SECTOR.Partition.Start_LBA + 3)
|
||||
LD IX,(CURRENT_SECTOR_L)
|
||||
ADD IX,DE
|
||||
LD DE,(CURRENT_SECTOR_H)
|
||||
ADC HL,DE
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
;BPB SECTOR
|
||||
LD IX,(OFFSECT)
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 0),E
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
|
||||
LD E,(IY + BOOT_SECTOR.Partition.Size_LBA + 0)
|
||||
LD D,(IY + BOOT_SECTOR.Partition.Size_LBA + 1)
|
||||
LD L,(IY + BOOT_SECTOR.Partition.Size_LBA + 2)
|
||||
LD H,(IY + BOOT_SECTOR.Partition.Size_LBA + 3)
|
||||
;SIZE DISK
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L
|
||||
LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H
|
||||
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||
.ExtendedPartitionFlag+1:
|
||||
LD A,0
|
||||
OR A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
LD A,#FF
|
||||
JR NZ,.not_supported ; ¥á«¨ à áè¨à¥ë© à §¤¥«, â® ®¡«®¬
|
||||
;
|
||||
POP BC
|
||||
PUSH BC
|
||||
LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||
SUB B
|
||||
.not_supported:
|
||||
LD (IX + LOGDRV.PARTITION_RECORD_NUM),A
|
||||
;
|
||||
;!TEST <09>®¤áâà 客ª ®â ¯¥à¥¯®«¥¨ï â ¡«¨æë LOGDRV
|
||||
LD A,(DRVCLC.count)
|
||||
INC A
|
||||
CP DSS_MAX_DRIVES_AMOUNT+1
|
||||
RET NC
|
||||
LD (DRVCLC.count),A
|
||||
;
|
||||
LD A,(DRV_NUM)
|
||||
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
|
||||
LD DE,LOGDRV.TBL_Entry ;DSKITEM
|
||||
ADD IX,DE
|
||||
LD (OFFSECT),IX
|
||||
JP .NextPartition
|
||||
;
|
||||
.NotExtended:
|
||||
CP PartitionSysTypes.FAT16
|
||||
JR Z,.HIGHDOS
|
||||
CP PartitionSysTypes.FAT16_LBA
|
||||
JR Z,.HIGHDOS
|
||||
CP PartitionSysTypes.FAT16_32Mb
|
||||
JR Z,.MEDIDOS
|
||||
CP PartitionSysTypes.FAT12
|
||||
JR Z,.EASYDOS
|
||||
;[ ] fat32
|
||||
CP PartitionSysTypes.FAT32
|
||||
JP Z,.FAT32_DOS
|
||||
CP PartitionSysTypes.FAT32_LBA
|
||||
JP Z,.FAT32_DOS
|
||||
;
|
||||
CP PartitionSysTypes.Win_Ext_LBA
|
||||
JR Z,.SubLevel
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ
|
||||
;OR A ;PartitionSysTypes.Empty
|
||||
;JR NZ,NXTPART
|
||||
JR .NextPartition ; à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;POP BC ; ¡ « á á⥪
|
||||
;RET
|
||||
;POP BC
|
||||
;OR A
|
||||
;RET Z
|
||||
;NODEFIN:
|
||||
;SCF
|
||||
;RET
|
||||
;
|
||||
.BEGIN: IN A,(SLOT3)
|
||||
PUSH AF
|
||||
LD A,SHARED_PAGE
|
||||
OUT (SLOT3),A
|
||||
CALL .Start
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
.Start: LD IX,0
|
||||
LD DE,0
|
||||
LD (EXTDOSL),DE ;R01
|
||||
LD (EXTDOSH),IX ;R01
|
||||
;
|
||||
.LOOP: LD (CURRENT_SECTOR_L),DE
|
||||
LD (CURRENT_SECTOR_H),IX
|
||||
CALL .LOAD_SECTOR
|
||||
;
|
||||
LD HL,(PARTITION_BUFFER.MBR_SIGNATURE)
|
||||
LD DE,#AA55
|
||||
AND A
|
||||
SBC HL,DE
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
;JR NZ,NODEFIN
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
LD IY,PARTITION_BUFFER.PARTITION_TABLE ; Offset of partition table in the MBR
|
||||
LD B,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||
.DOSAGA:
|
||||
PUSH BC
|
||||
LD A,(IY+_sMBR_PARTITION_RECORD.FS_ID)
|
||||
CP PartitionSysTypes.Extended
|
||||
JR NZ,.NotExtended
|
||||
.SubLevel:
|
||||
PUSH IY
|
||||
LD DE,(CURRENT_SECTOR_L)
|
||||
LD IX,(CURRENT_SECTOR_H)
|
||||
PUSH DE
|
||||
PUSH IX
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
LD A,(.ExtendedPartitionFlag)
|
||||
INC A
|
||||
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;
|
||||
CALL .ParseExtended
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
LD A,(.ExtendedPartitionFlag)
|
||||
DEC A
|
||||
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;
|
||||
POP IX
|
||||
POP DE
|
||||
LD (CURRENT_SECTOR_L),DE
|
||||
LD (CURRENT_SECTOR_H),IX
|
||||
CALL .LOAD_SECTOR
|
||||
POP IY
|
||||
.NextPartition:
|
||||
LD DE,_sMBR_PARTITION_RECORD ;Size of a partition table entry
|
||||
ADD IY,DE
|
||||
POP BC
|
||||
DJNZ .DOSAGA
|
||||
AND A
|
||||
RET
|
||||
.ParseExtended:
|
||||
LD HL,(EXTDOSL)
|
||||
LD DE,(EXTDOSH)
|
||||
LD A,L
|
||||
OR H
|
||||
OR E
|
||||
OR D
|
||||
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
|
||||
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
|
||||
JP NZ,.EXTDOS2
|
||||
LD (EXTDOSL),DE
|
||||
LD (EXTDOSH),HL
|
||||
LD IX,(EXTDOSH)
|
||||
.EXTDOS2:
|
||||
LD IX,(EXTDOSL)
|
||||
ADD IX,DE
|
||||
PUSH IX
|
||||
LD DE,(EXTDOSH)
|
||||
ADC HL,DE
|
||||
PUSH HL
|
||||
POP IX
|
||||
POP DE
|
||||
JP .LOOP
|
||||
;
|
||||
.LOAD_SECTOR:
|
||||
PUSH IY
|
||||
LD IX,(CURRENT_SECTOR_L)
|
||||
LD HL,(CURRENT_SECTOR_H)
|
||||
LD DE,PARTITION_BUFFER
|
||||
LD A,(DRV_NUM)
|
||||
LD BC,1*256 + BIOS.DRV_READ
|
||||
RST ToBIOS
|
||||
POP IY
|
||||
RET
|
||||
LD A,0
|
||||
OR A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
LD A,#FF
|
||||
JR NZ,.not_supported ; ¥á«¨ à áè¨à¥ë© à §¤¥«, â® ®¡«®¬
|
||||
;
|
||||
POP BC
|
||||
PUSH BC
|
||||
LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||
SUB B
|
||||
.not_supported: LD (IX + LOGDRV.PARTITION_RECORD_NUM),A
|
||||
;
|
||||
;!TEST <09>®¤áâà 客ª ®â ¯¥à¥¯®«¥¨ï â ¡«¨æë LOGDRV
|
||||
LD A,(DRVCLC.count)
|
||||
INC A
|
||||
CP DSS_MAX_DRIVES_AMOUNT+1
|
||||
RET NC
|
||||
LD (DRVCLC.count),A
|
||||
;
|
||||
LD A,(DRV_NUM)
|
||||
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
|
||||
LD DE,LOGDRV.TBL_Entry ;DSKITEM
|
||||
ADD IX,DE
|
||||
LD (OFFSECT),IX
|
||||
JP .NextPartition
|
||||
;
|
||||
.NotExtended: CP PartitionSysTypes.FAT16
|
||||
JR Z,.HIGHDOS
|
||||
CP PartitionSysTypes.FAT16_LBA
|
||||
JR Z,.HIGHDOS
|
||||
CP PartitionSysTypes.FAT16_32Mb
|
||||
JR Z,.MEDIDOS
|
||||
CP PartitionSysTypes.FAT12
|
||||
JR Z,.EASYDOS
|
||||
;[ ] fat32
|
||||
CP PartitionSysTypes.FAT32
|
||||
JP Z,.FAT32_DOS
|
||||
CP PartitionSysTypes.FAT32_LBA
|
||||
JP Z,.FAT32_DOS
|
||||
;
|
||||
CP PartitionSysTypes.Win_Ext_LBA
|
||||
JR Z,.SubLevel
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ
|
||||
;OR A ;PartitionSysTypes.Empty
|
||||
;JR NZ,NXTPART
|
||||
JR .NextPartition ; à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;POP BC ; ¡ « á á⥪
|
||||
;RET
|
||||
;POP BC
|
||||
;OR A
|
||||
;RET Z
|
||||
;NODEFIN:
|
||||
;SCF
|
||||
;RET
|
||||
;
|
||||
.BEGIN: IN A,(SLOT3)
|
||||
PUSH AF
|
||||
LD A,SHARED_PAGE
|
||||
OUT (SLOT3),A
|
||||
CALL .Start
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
.Start: LD IX,0
|
||||
LD DE,0
|
||||
LD (EXTDOSL),DE ;R01
|
||||
LD (EXTDOSH),IX ;R01
|
||||
;
|
||||
.LOOP: LD (CURRENT_SECTOR_L),DE
|
||||
LD (CURRENT_SECTOR_H),IX
|
||||
CALL .LOAD_SECTOR
|
||||
;
|
||||
LD HL,(PARTITION_BUFFER.MBR_SIGNATURE)
|
||||
LD DE,#AA55
|
||||
AND A
|
||||
SBC HL,DE
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
;JR NZ,NODEFIN
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
LD IY,PARTITION_BUFFER.PARTITION_TABLE ; Offset of partition table in the MBR
|
||||
LD B,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
|
||||
.DOSAGA: PUSH BC
|
||||
LD A,(IY+_sMBR_PARTITION_RECORD.FS_ID)
|
||||
CP PartitionSysTypes.Extended
|
||||
JR Z,.SubLevel
|
||||
CP PartitionSysTypes.Win_Ext_LBA
|
||||
JR NZ,.NotExtended
|
||||
;
|
||||
.SubLevel: PUSH IY
|
||||
LD DE,(CURRENT_SECTOR_L)
|
||||
LD IX,(CURRENT_SECTOR_H)
|
||||
PUSH DE
|
||||
PUSH IX
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
LD A,(.ExtendedPartitionFlag)
|
||||
INC A
|
||||
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;
|
||||
CALL .ParseExtended
|
||||
;[x] 17/12/23 ¯à®¯ãáª à §¤¥«®¢ á ¥¨§¢¥áâ묨 ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à à §¤¥«®¢
|
||||
LD A,(.ExtendedPartitionFlag)
|
||||
DEC A
|
||||
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||
;
|
||||
POP IX
|
||||
POP DE
|
||||
LD (CURRENT_SECTOR_L),DE
|
||||
LD (CURRENT_SECTOR_H),IX
|
||||
CALL .LOAD_SECTOR
|
||||
POP IY
|
||||
.NextPartition: LD DE,_sMBR_PARTITION_RECORD ;Size of a partition table entry
|
||||
ADD IY,DE
|
||||
POP BC
|
||||
DJNZ .DOSAGA
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
.ParseExtended: LD HL,(EXTDOSL)
|
||||
LD DE,(EXTDOSH)
|
||||
LD A,L
|
||||
OR H
|
||||
OR E
|
||||
OR D
|
||||
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
|
||||
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
|
||||
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
|
||||
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
|
||||
JP NZ,.ext_in_ext
|
||||
LD (EXTDOSL),DE
|
||||
LD (EXTDOSH),HL
|
||||
PUSH DE
|
||||
JR .set_regs
|
||||
;
|
||||
.ext_in_ext: LD IX,(EXTDOSL)
|
||||
ADD IX,DE
|
||||
LD DE,(EXTDOSH)
|
||||
ADC HL,DE
|
||||
PUSH IX
|
||||
.set_regs: PUSH HL
|
||||
POP IX
|
||||
POP DE
|
||||
JP .LOOP
|
||||
;
|
||||
.LOAD_SECTOR: PUSH IY
|
||||
LD IX,(CURRENT_SECTOR_L)
|
||||
LD HL,(CURRENT_SECTOR_H)
|
||||
LD DE,PARTITION_BUFFER
|
||||
LD A,(DRV_NUM)
|
||||
LD BC,1*256 + BIOS.DRV_READ
|
||||
RST ToBIOS
|
||||
POP IY
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
;
|
||||
|
||||
|
||||
@ -75,7 +75,6 @@
|
||||
|
||||
;
|
||||
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
|
||||
@ -99,15 +98,18 @@
|
||||
.END_CHAIN_CLUSTER_H: WORD #0FFF ; [ ] fat3
|
||||
.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||
;
|
||||
.BytesPerSector WORD #0000
|
||||
.SectorsPerCluster BYTE #00
|
||||
.FSINFO_Sector WORD #01
|
||||
.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
|
||||
.RESET_FSINFO BYTE 0
|
||||
; IF USE_FSINFO_FAT32
|
||||
;.FREE_CLUSTERS_COUNT_L WORD #FFFF
|
||||
;.FREE_CLUSTERS_COUNT_H WORD #FFFF
|
||||
; ENDIF
|
||||
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
||||
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
||||
ENDS
|
||||
@ -121,7 +123,7 @@
|
||||
;.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
|
||||
.Buffer BLOCK 512,0 ; FOR BUFFER & SECTOR_BUFFER
|
||||
.MemoryTable BLOCK 256,0 ; 256 bytes
|
||||
ENDS
|
||||
;
|
||||
@ -1 +1 @@
|
||||
952
|
||||
954
|
||||
@ -27,7 +27,7 @@
|
||||
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
DEFINE _FAT32_ENABLE 1 ;!TODO ¯®ª ¥¤®¤¥« ®
|
||||
DEFINE USE_FSINFO_FAT32 0 ; ¥¤®¤¥« ®. € 㦮 «¨?
|
||||
|
||||
SERVICE_SECTORS:
|
||||
.FAT12 EQU #0FEF
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 73f764ccd1ab8de8dea7eef3b4f5cd27e2ea8dab
|
||||
Subproject commit 62170ee7bc7dabe6fd55b94e89826ca510a60097
|
||||
Loading…
Reference in New Issue
Block a user