mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
temp
This commit is contained in:
parent
8448dbef48
commit
9b975b7a88
@ -21,8 +21,6 @@
|
|||||||
;R004 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
|
;R004 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
|
||||||
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
||||||
;R002 19-11-2002 DNS FIX GET/SET ATTRIBUTES
|
;R002 19-11-2002 DNS FIX GET/SET ATTRIBUTES
|
||||||
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
|
||||||
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
|
||||||
;R001 16-12-1999 DNS Y2K fix
|
;R001 16-12-1999 DNS Y2K fix
|
||||||
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||||
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
||||||
|
|||||||
@ -36,7 +36,7 @@ DISKINF: LD C,B
|
|||||||
LD B,1
|
LD B,1
|
||||||
;
|
;
|
||||||
CP #80
|
CP #80
|
||||||
JR C,.CustomDisk
|
JP C,.CustomDisk
|
||||||
CP #FF
|
CP #FF
|
||||||
JR Z,.CurrentDisk
|
JR Z,.CurrentDisk
|
||||||
; more info
|
; more info
|
||||||
@ -54,26 +54,31 @@ DISKINF: LD C,B
|
|||||||
PUSH BC
|
PUSH BC
|
||||||
;;;;
|
;;;;
|
||||||
;
|
;
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
|
||||||
CP FAT_TYPE.x32
|
|
||||||
;
|
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT
|
LD HL,FAT_STRING
|
||||||
JR NZ,1F
|
1: LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
||||||
LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.ID_FAT
|
CALL .mCOPY_LOOP
|
||||||
1: LD C,8 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
; 12, 16 or 32
|
||||||
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
|
CP FAT_TYPE.x16
|
||||||
|
JR C,.next_prm
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
DEC DE
|
||||||
|
LD A,'6'
|
||||||
|
JR Z,.put_char
|
||||||
|
; fat 32
|
||||||
|
DEC DE
|
||||||
|
LD A,'3'
|
||||||
|
.put_char: LD (DE),A
|
||||||
|
POP DE
|
||||||
|
;
|
||||||
|
.next_prm: LD HL,FatBuffer.BPB_SERIAL_NUMBER
|
||||||
|
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
||||||
CALL .mCOPY_LOOP
|
CALL .mCOPY_LOOP
|
||||||
;
|
;
|
||||||
LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER
|
LD HL,FatBuffer.BPB_LABEL
|
||||||
JR NZ,1F
|
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
||||||
LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.BPB_SERIAL_NUMBER
|
|
||||||
1: LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
|
||||||
CALL .mCOPY_LOOP
|
|
||||||
;
|
|
||||||
LD HL,CORE_BUFFERS.BootSector.BPB_LABEL
|
|
||||||
JR NZ,1F
|
|
||||||
LD HL,CORE_BUFFERS.BootSector + _sBOOT_SECTOR_PARAMS_FAT32.BPB_LABEL
|
|
||||||
1: LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
|
||||||
CALL .mCOPY_LOOP
|
CALL .mCOPY_LOOP
|
||||||
; fat32
|
; fat32
|
||||||
EXX
|
EXX
|
||||||
@ -187,4 +192,4 @@ DISKINF: LD C,B
|
|||||||
LDIR
|
LDIR
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
;
|
FAT_STRING: DB 'FAT12'
|
||||||
|
|||||||
@ -20,17 +20,6 @@
|
|||||||
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: FAT_X
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; HL - 11 bytes filename "FILENAMEEXT"
|
; HL - 11 bytes filename "FILENAMEEXT"
|
||||||
; DE - DOS filename "FILENAME.EXT",0
|
; DE - DOS filename "FILENAME.EXT",0
|
||||||
|
|||||||
@ -405,7 +405,7 @@ BUFFERSplace _sBuffers=$
|
|||||||
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
||||||
.Size EQU _sFM
|
.Size EQU _sFM
|
||||||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||||||
BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector
|
BootSector _sBOOT_SECTOR_PARAMS = BUFFERSplace.BootSector ; [ ] fat32 ;!FIXIT CORE_BUFFERS.BootSector à §®© ¤«¨ë
|
||||||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||||||
XSTACK EQU BUFFERSplace.Stack.SPoint
|
XSTACK EQU BUFFERSplace.Stack.SPoint
|
||||||
BUFFER EQU BUFFERSplace.Buffer
|
BUFFER EQU BUFFERSplace.Buffer
|
||||||
@ -414,12 +414,13 @@ SECBUF EQU BUFFER ;!TODO
|
|||||||
CLEAR_ZONE.size EQU _sBuffers
|
CLEAR_ZONE.size EQU _sBuffers
|
||||||
|
|
||||||
ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
||||||
;DISPLAY "--- --- --- --- --- --- --- ---"
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
;DISPLAY "BUFFERSplace.BootSector ",/H,CORE_BUFFERS.BUFFERSplace.BootSector
|
DISPLAY "BUFFERSplace.BootSector ",/H,CORE_BUFFERS.BUFFERSplace.BootSector
|
||||||
;DISPLAY "BootSector ", /H, CORE_BUFFERS.BootSector
|
DISPLAY "BootSector ", /H, CORE_BUFFERS.BootSector
|
||||||
;DISPLAY "EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
DISPLAY "BootSector.Size ", /D, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.BootSector
|
||||||
;DISPLAY "Size ", /H, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.BootSector
|
DISPLAY "EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
||||||
;DISPLAY "--- --- --- --- --- --- --- ---"
|
DISPLAY "Size ", /H, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.BootSector
|
||||||
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -5,9 +5,9 @@
|
|||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
;Rev Date Name Description
|
;Rev Date Name Description
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
||||||
|
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; <20>®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ª â «®£
|
; <20>®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ª â «®£
|
||||||
;
|
;
|
||||||
@ -611,267 +611,278 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
|||||||
; RET Z
|
; RET Z
|
||||||
|
|
||||||
|
|
||||||
; ॣ. D - ®¬¥à ¤¨áª
|
; ॣ. A - ®¬¥à ¤¨áª
|
||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
RD_BPB: LD C,SLOT3
|
RD_BPB: LD C,SLOT3
|
||||||
IN B,(C)
|
IN B,(C)
|
||||||
PUSH BC
|
PUSH BC
|
||||||
IN A,(SLOT0)
|
IN A,(SLOT0)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(FatBuffer.DRIVE)
|
||||||
LD DE,CORE_BUFFERS.SECBUF+#C000 ;R08
|
LD DE,CORE_BUFFERS.SECBUF+#C000 ;R08
|
||||||
LD C,Dss.DRV.GetBPB
|
LD C,Dss.DRV.GetBPB
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
POP BC
|
POP BC
|
||||||
OUT (C),B
|
OUT (C),B
|
||||||
JP C,DOS_X_Error.Not_ready
|
JP C,DOS_X_Error.Not_ready
|
||||||
|
;
|
||||||
|
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||||
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_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 DE,CORE_BUFFERS.BootSector
|
||||||
|
; LD BC,_sBOOT_SECTOR_PARAMS_FAT32 ; size
|
||||||
|
; LDIR
|
||||||
|
;
|
||||||
|
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||||
|
CP #F0
|
||||||
|
JP C,DOS_X_Error.UnknownBPB
|
||||||
|
; calc. first sector FAT
|
||||||
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||||
|
;
|
||||||
|
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
||||||
|
; 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
|
||||||
|
;[ ] 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 DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerFAT16)
|
||||||
|
LD A,E
|
||||||
|
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 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
|
||||||
|
JR NC,.no_inc_BC
|
||||||
|
INC BC
|
||||||
|
.no_inc_BC: LD (FatBuffer.FAT2_SEC_H),BC
|
||||||
|
.one_FAT: ;C_DATA1
|
||||||
|
.loop1: ADD HL,DE
|
||||||
|
JR NC,.loop1_1
|
||||||
|
INC BC
|
||||||
|
.loop1_1: DEC A
|
||||||
|
JR NZ,.loop1
|
||||||
|
;
|
||||||
|
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
||||||
|
|
||||||
LD DE,#AA55 ; ᨣ âãà ;R05
|
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
||||||
LD HL,(CORE_BUFFERS.SECBUF+_sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
LD A,B
|
||||||
;R05
|
AND A
|
||||||
AND A
|
;
|
||||||
SBC HL,DE
|
RL C
|
||||||
JP NZ,DOS_X_Error.UnknownBPB
|
RLA
|
||||||
;R08
|
RL C
|
||||||
LD HL,CORE_BUFFERS.SECBUF
|
RLA
|
||||||
LD DE,CORE_BUFFERS.BootSector
|
RL C
|
||||||
LD BC,_sBOOT_SECTOR_PARAMS ; size
|
RLA
|
||||||
LDIR
|
;
|
||||||
;
|
LD C,A
|
||||||
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
|
LD B,0 ; BC - File handels in sectors
|
||||||
CP #F0
|
;;;;
|
||||||
JP C,DOS_X_Error.UnknownBPB
|
IF COMPILE_UNUSED_CODE
|
||||||
; calc. first sector FAT
|
LD (FatBuffer.FilesPerSector),A
|
||||||
LD HL,(CORE_BUFFERS.BootSector.RESERVED_SECTORS)
|
ENDIF
|
||||||
;
|
;
|
||||||
; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec
|
EX DE,HL
|
||||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.FilesInRootDIR) ; 0 for fat32
|
||||||
; ADD HL,DE
|
DEC HL ; [ ]fat32
|
||||||
;
|
XOR A
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
;NEXTAD2
|
||||||
LD (FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
.loop2: INC A
|
||||||
;[ ] fat32 ;!FIXIT
|
JP Z,DOS_X_Error.UnknownBPB
|
||||||
XOR A
|
SBC HL,BC
|
||||||
LD D,A
|
JR NC,.loop2
|
||||||
LD E,A
|
;
|
||||||
LD (FatBuffer.FAT1_SEC_H),DE ; high word first sector FAT #1
|
EX DE,HL
|
||||||
LD (FatBuffer.FAT2_SEC_H),DE ; high word first sector FAT #1
|
LD C,A ; A - sectors in DIR
|
||||||
LD (FatBuffer.RootDirStartCluster_L),DE
|
LD B,0
|
||||||
LD (FatBuffer.RootDirStartCluster_H),DE
|
LD (FatBuffer.DirSizeInSectors),A
|
||||||
LD (FatBuffer.SectorsPerFAT_H),A
|
|
||||||
;
|
ADD HL,BC ; Start DATA area
|
||||||
;
|
LD (FatBuffer.FirstDataSector_L),HL
|
||||||
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16)
|
; B = 0
|
||||||
LD (FatBuffer.SectorsPerFAT_L),DE
|
;
|
||||||
;
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
||||||
LD A,(CORE_BUFFERS.BootSector.Number_of_FATs) ; amount FATs
|
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
||||||
CP 1
|
;!TODO FATcacheSize
|
||||||
JR Z,.loop1
|
; calc. cluster size
|
||||||
DEC A
|
XOR 1
|
||||||
ADD HL,DE
|
JR Z,.loop3.end
|
||||||
LD (FatBuffer.FAT2_SEC_L),HL
|
RRA
|
||||||
;C_DATA1
|
.loop3: ADD HL,HL
|
||||||
.loop1: ADD HL,DE
|
RRA
|
||||||
DEC A
|
JP NC,.loop3
|
||||||
JR NZ,.loop1
|
.loop3.end: ;
|
||||||
;
|
LD (FatBuffer.BytesPerCluster),HL
|
||||||
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
;
|
||||||
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
|
||||||
LD A,B
|
|
||||||
AND A
|
|
||||||
;
|
|
||||||
RL C
|
|
||||||
RLA
|
|
||||||
RL C
|
|
||||||
RLA
|
|
||||||
RL C
|
|
||||||
RLA
|
|
||||||
;
|
|
||||||
LD C,A
|
|
||||||
LD B,0 ; BC - File handels in sectors
|
|
||||||
;;;;
|
|
||||||
IF COMPILE_UNUSED_CODE
|
IF COMPILE_UNUSED_CODE
|
||||||
LD (FatBuffer.FilesPerSector),A
|
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 (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
||||||
ENDIF
|
ENDIF
|
||||||
;
|
;
|
||||||
EX DE,HL
|
;!TODO detect fat type by clusters!
|
||||||
LD HL,(CORE_BUFFERS.BootSector.FilesInRootDIR) ; 0 for fat32
|
; [ ] fat32
|
||||||
DEC HL ; [ ]fat32
|
LD HL,CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.FAT16.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
||||||
XOR A
|
LD DE,FAT_STRING
|
||||||
;NEXTAD2
|
LD B,3
|
||||||
.loop2: INC A
|
;R_BPBL1
|
||||||
JP Z,DOS_X_Error.UnknownBPB
|
.loop5: LD A,(DE)
|
||||||
SBC HL,BC
|
CP (HL)
|
||||||
JR NC,.loop2
|
JP NZ,.IBM_DOS
|
||||||
;
|
INC HL
|
||||||
EX DE,HL
|
INC DE
|
||||||
LD C,A ; A - sectors in DIR
|
DJNZ .loop5
|
||||||
LD B,0
|
;FID
|
||||||
LD (FatBuffer.DirSizeInSectors),A
|
.loop6: LD A,(HL)
|
||||||
ADD HL,BC ; Start DATA area
|
INC HL
|
||||||
LD (FatBuffer.FirstDataSector_L),HL
|
CP ' '
|
||||||
; B = 0
|
JR Z,.loop6
|
||||||
;
|
;
|
||||||
LD HL,(CORE_BUFFERS.BootSector.BytesPerSector)
|
CP '1'
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
;[ ] fat32
|
||||||
;!TODO FATcacheSize
|
JP Z,.fat1x
|
||||||
; calc. cluster size
|
CP '3'
|
||||||
XOR 1
|
JP NZ,DOS_X_Error.UnknownBPB
|
||||||
JR Z,.loop3.end
|
LD A,#52 ; #52-#20 = #32 fat type
|
||||||
RRA
|
LD HL,#0FFF
|
||||||
.loop3: ADD HL,HL
|
LD (FatBuffer.END_CHAIN_CLUSTER_H),HL
|
||||||
RRA
|
LD (FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT
|
||||||
JP NC,.loop3
|
LD H,L
|
||||||
.loop3.end:
|
JR .BPB_FAT
|
||||||
;
|
;
|
||||||
LD (FatBuffer.BytesPerCluster),HL
|
.fat1x: LD A,(HL)
|
||||||
IF COMPILE_UNUSED_CODE
|
CP '2' ; FAT16
|
||||||
EX DE,HL
|
LD HL,#0FFF
|
||||||
LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
|
JR Z,.BPB_FAT
|
||||||
XOR A
|
CP '6' ; FAT12
|
||||||
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤ ¯® ¤®¡¨âáï
|
JP NZ,DOS_X_Error.UnknownBPB
|
||||||
.loop4: INC A
|
LD H,L
|
||||||
JP Z,DOS_X_Error.UnknownBPB
|
.BPB_FAT: SUB #20 ; A-#20 = fat type (#12, #16, #32)
|
||||||
SBC HL,DE
|
LD (FatBuffer.FAT_TYPE),A
|
||||||
JR NC,.loop4
|
LD (FatBuffer.END_CHAIN_CLUSTER_L),HL
|
||||||
LD (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
|
|
||||||
ENDIF
|
|
||||||
;
|
|
||||||
;!TODO detect fat type by clusters!
|
|
||||||
;[ ] fat32 reset fat32 variables
|
|
||||||
LD HL,0
|
|
||||||
LD (FatBuffer.ENDCLUS_HIGH),HL
|
|
||||||
LD (FatBuffer.MaxClusterHigh),HL
|
|
||||||
;
|
|
||||||
LD HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!! ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥®£® BootSector, â® ¡ã¤¥â ¡ £
|
|
||||||
LD DE,FatBuffer.MSG
|
|
||||||
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,#46 ; #46-#26 = 32 fat type
|
|
||||||
LD HL,#0FFF
|
|
||||||
LD (FatBuffer.ENDCLUS_HIGH),HL
|
|
||||||
LD (FatBuffer.MaxClusterHigh),HL
|
|
||||||
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 #26 ; A-#26 = fat type (12, 16, 32)
|
|
||||||
LD (FatBuffer.FAT_TYPE),A
|
|
||||||
LD (FatBuffer.ENDCLUS_LOW),HL
|
|
||||||
;!TODO ¥ ¨á¯®«ì§ã¥âáï § 票¥ ¢ëç¨á«ï¥¬®¥ ¨ á®åà 塞®¥ ¢ FatBuffer
|
;!TODO ¥ ¨á¯®«ì§ã¥âáï § 票¥ ¢ëç¨á«ï¥¬®¥ ¨ á®åà 塞®¥ ¢ FatBuffer
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; LD HL,0
|
; LD HL,0
|
||||||
; LD BC,(CORE_BUFFERS.BootSector.SectorsPerTrack) ; Sector per track
|
; LD BC,(CORE_BUFFERS.BootSector.SectorsPerTrack) ; Sector per track
|
||||||
; LD A,(CORE_BUFFERS.BootSector.HEADS)
|
; LD A,(CORE_BUFFERS.BootSector.HEADS)
|
||||||
; .BPB_L1:; calc. sector per cylinder
|
; .BPB_L1: ; calc. sector per cylinder
|
||||||
; ADD HL,BC
|
; ADD HL,BC
|
||||||
; DEC A
|
; DEC A
|
||||||
; JR NZ,.BPB_L1
|
; JR NZ,.BPB_L1
|
||||||
; LD (FatBuffer.S_X_H),HL
|
; LD (FatBuffer.S_X_H),HL
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
LD HL,(CORE_BUFFERS.BootSector.SectorsPerDrive)
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerDrive)
|
||||||
LD DE,(FatBuffer.FirstDataSector_L)
|
LD DE,(FatBuffer.FirstDataSector_L)
|
||||||
LD A,H
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
JP NZ,.HDDSMAL
|
JP NZ,.HDDSMAL
|
||||||
;
|
;
|
||||||
LD HL,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_L)
|
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_L)
|
||||||
LD BC,(CORE_BUFFERS.BootSector.BPB_BIG_TOTAL_SECTORS_H)
|
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_H)
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP NC,.HDDBIG
|
JP NC,.HDDBIG
|
||||||
DEC BC
|
DEC BC
|
||||||
JP .HDDBIG
|
JP .HDDBIG
|
||||||
;
|
;
|
||||||
.HDDSMAL:; CF = 0
|
.HDDSMAL: ; CF = 0
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
LD BC,0
|
LD BC,0
|
||||||
.HDDBIG: LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
.HDDBIG: LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
||||||
SCF
|
SCF
|
||||||
.S4C01: RRA
|
.S4C01: RRA
|
||||||
JR C,.S4C02
|
JR C,.S4C02
|
||||||
RR B
|
RR B
|
||||||
RR C
|
RR C
|
||||||
RR H
|
RR H
|
||||||
RR L
|
RR L
|
||||||
JP .S4C01
|
JP .S4C01
|
||||||
.S4C02: INC HL
|
.S4C02: INC HL
|
||||||
LD (FatBuffer.MaxClusterLow),HL
|
LD (FatBuffer.MaxClusterLow),HL
|
||||||
;
|
;
|
||||||
XOR A
|
XOR A
|
||||||
LD H,A
|
LD H,A
|
||||||
LD L,A
|
LD L,A
|
||||||
LD (FatBuffer.CacheBlock),HL
|
LD (FatBuffer.CacheBlock),HL
|
||||||
LD (FatBuffer.CacheUpdated),A
|
LD (FatBuffer.CacheUpdated),A
|
||||||
|
|
||||||
SET_PAGE_X FATPAGE
|
SET_PAGE_X FATPAGE
|
||||||
|
|
||||||
PUSH AF
|
PUSH AF
|
||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
; XOR A
|
; XOR A
|
||||||
; HL = 0
|
; HL = 0
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
;
|
;
|
||||||
CALL READ_FAT_TABLE
|
CALL READ_FAT_TABLE
|
||||||
POP AF
|
POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
CALL R_CLUST
|
CALL R_CLUST
|
||||||
XOR A
|
XOR A
|
||||||
RET
|
RET
|
||||||
;!TODO detect fat type by clusters!
|
;!TODO detect fat type by clusters!
|
||||||
.IBM_DOS:
|
.IBM_DOS: LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||||
LD A,(CORE_BUFFERS.BootSector.DRIVE_TYPE)
|
CP #F0
|
||||||
CP #F0
|
JR C,DOS_X_Error.UnknownBPB
|
||||||
JR C,DOS_X_Error.UnknownBPB
|
; ID ram-¤¨áª - #FA
|
||||||
; ID ram-¤¨áª - #FA
|
CP #F8 ; !FIXIT fat. ¥ ®¡ï§ â¥«ì® ¥á«¨ ¢¨â, â® ¥ FAT12
|
||||||
CP #F8 ; !FIXIT fat. ¥ ®¡ï§ â¥«ì® ¥á«¨ ¢¨â, â® ¥ FAT12
|
LD A,'2'
|
||||||
LD A,'2'
|
LD HL,#0FFF
|
||||||
LD HL,#0FFF
|
JP NZ,.BPB_FAT
|
||||||
JP NZ,.BPB_FAT
|
;
|
||||||
;
|
LD A,'6'
|
||||||
LD A,'6'
|
LD H,L
|
||||||
LD H,L
|
JP .BPB_FAT
|
||||||
JP .BPB_FAT
|
;
|
||||||
;
|
|
||||||
DOS_X_Error:
|
DOS_X_Error:
|
||||||
.UnknownBPB:
|
.UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||||
LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
SCF
|
||||||
SCF
|
RET
|
||||||
RET
|
;
|
||||||
.Not_ready:
|
.Not_ready: LD A,DSS_Error.sys.NOT_READY
|
||||||
LD A,DSS_Error.sys.NOT_READY
|
; CF = 1
|
||||||
; CF = 1
|
RET
|
||||||
RET
|
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
;!TODO ª ¡ãä¥à ¬!
|
;!TODO ª ¡ãä¥à ¬!
|
||||||
FatBuffer:
|
FatBuffer:
|
||||||
.MSG: DB 'FAT'
|
;.MSG: DB 'FAT'
|
||||||
.DRIVE: DB #FF
|
.DRIVE: DB #FF
|
||||||
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
|
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
|
||||||
.CacheBlock: DW #00
|
.CacheBlock: DW #00
|
||||||
@ -885,16 +896,21 @@ FatBuffer:
|
|||||||
.FAT2_SEC_H: DW #0000 ; [ ] fat32
|
.FAT2_SEC_H: DW #0000 ; [ ] fat32
|
||||||
.SectorsPerFAT_L DW #0000
|
.SectorsPerFAT_L DW #0000
|
||||||
.SectorsPerFAT_H DB #00
|
.SectorsPerFAT_H DB #00
|
||||||
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
|
||||||
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
|
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||||
.DirSizeInSectors: DB #00 ; DIR_SEC_SIZE
|
.DirSizeInSectors: DB #00 ; DIR_SEC_SIZE
|
||||||
.FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low
|
.FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low
|
||||||
.FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; [ ] fat32 ¡ë«® ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£
|
.FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; [ ] fat32 ¡ë«® ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£
|
||||||
.BytesPerCluster: DW #0000 ; CLUSTER_LEN
|
.BytesPerCluster: DW #0000 ; CLUSTER_LEN
|
||||||
.ENDCLUS_LOW: DW #FFFF
|
.END_CHAIN_CLUSTER_L: DW #FFFF
|
||||||
.ENDCLUS_HIGH: DW #0FFF ; [ ] fat3
|
.END_CHAIN_CLUSTER_H: DW #0FFF ; [ ] fat3
|
||||||
.MaxClusterLow: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
.MaxClusterLow: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
.MaxClusterHigh: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
.MaxClusterHigh: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
;
|
||||||
|
.BytesPerSector DW #0000
|
||||||
|
.SectorsPerCluster DB #00
|
||||||
|
.BPB_SERIAL_NUMBER DW 0,0
|
||||||
|
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||||
IF COMPILE_UNUSED_CODE
|
IF COMPILE_UNUSED_CODE
|
||||||
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||||
.ClustersPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
.ClustersPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
||||||
|
|||||||
@ -255,9 +255,9 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
|||||||
; .Custom:
|
; .Custom:
|
||||||
; HL':HL ¨ DE':DE â ª¨¥ ¦¥ ª ª ¨ ¢å®¤¥
|
; HL':HL ¨ DE':DE â ª¨¥ ¦¥ ª ª ¨ ¢å®¤¥
|
||||||
;------------------------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------------------------
|
||||||
WRITE_TO_FAT: LD DE,(FatBuffer.ENDCLUS_LOW) ; ®¬¥à ª« áâ¥à
|
WRITE_TO_FAT: LD DE,(FatBuffer.END_CHAIN_CLUSTER_L) ; ®¬¥à ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
LD DE,(FatBuffer.ENDCLUS_HIGH) ; ®¬¥à ª« áâ¥à
|
LD DE,(FatBuffer.END_CHAIN_CLUSTER_H) ; ®¬¥à ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
.Custom: PUSH DE
|
.Custom: PUSH DE
|
||||||
EXX
|
EXX
|
||||||
|
|||||||
@ -111,6 +111,7 @@
|
|||||||
;Input: C = #08
|
;Input: C = #08
|
||||||
; B = Subcommand
|
; B = Subcommand
|
||||||
; DE = #55AA Magic Number
|
; DE = #55AA Magic Number
|
||||||
|
; A = Drive
|
||||||
;
|
;
|
||||||
;Subcommands: #00 - Get Device Parameters
|
;Subcommands: #00 - Get Device Parameters
|
||||||
; #01 - Read track
|
; #01 - Read track
|
||||||
|
|||||||
@ -75,12 +75,12 @@
|
|||||||
|
|
||||||
;
|
;
|
||||||
STRUCT _sBuffers
|
STRUCT _sBuffers
|
||||||
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
||||||
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
||||||
.BootSector _sBOOT_SECTOR_PARAMS ; 62 bytes ;!TODO ¯¥à¥¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
|
.BootSector BLOCK 90,0 ; _sBOOT_SECTOR_PARAMS: 62 bytes FAT16, 90 bytes FAT32
|
||||||
.EXE_Header _sEXE_HEADER ; 512 bytes
|
.EXE_Header _sEXE_HEADER ; 512 bytes
|
||||||
.Stack _sStack ; 256 bytes
|
.Stack _sStack ; 256 bytes
|
||||||
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
||||||
.MemoryTable BLOCK 256,0 ; 256 bytes
|
.MemoryTable BLOCK 256,0 ; 256 bytes
|
||||||
ENDS
|
ENDS
|
||||||
;
|
;
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
949
|
952
|
||||||
@ -36,9 +36,9 @@ SERVICE_SECTORS:
|
|||||||
.FAT32.Low EQU #FFEF
|
.FAT32.Low EQU #FFEF
|
||||||
|
|
||||||
FAT_TYPE:
|
FAT_TYPE:
|
||||||
.x32 EQU 32
|
.x32 EQU #32
|
||||||
.x16 EQU 16
|
.x16 EQU #16
|
||||||
.x12 EQU 12
|
.x12 EQU #12
|
||||||
|
|
||||||
; define _bit (1<?((FAT_CACHE.Sectors-1)
|
; define _bit (1<?((FAT_CACHE.Sectors-1)
|
||||||
; define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
; define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user