mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
88%
This commit is contained in:
parent
bb63a4071d
commit
6330028b93
@ -131,25 +131,14 @@ MKDIR:
|
||||
LD A,(DIRPAGE.buffer)
|
||||
CP "."
|
||||
JR Z,.copy_dir_record
|
||||
; fat32
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR NZ,.fat16_root_dir
|
||||
; fat 32
|
||||
EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L)
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),HL
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H)
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),HL
|
||||
EX DE,HL
|
||||
JR .set_rec
|
||||
;
|
||||
.fat16_root_dir:; fat 12/16
|
||||
;LD IX,HANDBUF
|
||||
XOR A
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
|
||||
.set_rec: LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),A
|
||||
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1),A
|
||||
LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||
.copy_dir_record:
|
||||
EX DE,HL
|
||||
LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21
|
||||
|
||||
@ -427,7 +427,14 @@ CLEAR_ZONE.size EQU _sBuffers
|
||||
DISPLAY "EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY "Size ", /H, CORE_BUFFERS.XSTACK - CORE_BUFFERS.EXEBUFF
|
||||
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||
|
||||
|
||||
EXPORT CORE_BUFFERS.BUFFERSplace
|
||||
EXPORT CORE_BUFFERS.FM_BUF
|
||||
EXPORT CORE_BUFFERS.FatBuffer
|
||||
EXPORT CORE_BUFFERS.EXEBUFF
|
||||
EXPORT CORE_BUFFERS.XSTACK
|
||||
EXPORT CORE_BUFFERS.BUFFER
|
||||
EXPORT CORE_BUFFERS.SECBUF
|
||||
|
||||
/*
|
||||
;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
|
||||
@ -323,7 +323,7 @@ FINDDIR:
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
CHECK_ZERO_CLUSTER:
|
||||
CHECK_ROOT_CLUSTER:
|
||||
EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
|
||||
LD A,L
|
||||
@ -334,22 +334,25 @@ CHECK_ZERO_CLUSTER:
|
||||
EX DE,HL
|
||||
RET
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; ¢å®¤: 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
|
||||
; 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
|
||||
|
||||
CALL LOADDIR
|
||||
; CF=0
|
||||
LD HL,WorkDirectory
|
||||
@ -362,7 +365,7 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||
.SUBDIR: CP "."
|
||||
JR NZ,.SUBDIR2
|
||||
; fat32
|
||||
CALL CHECK_ZERO_CLUSTER
|
||||
CALL CHECK_ROOT_CLUSTER
|
||||
JR NZ,.no_root ;R005
|
||||
; "cd ." or "cd .."
|
||||
;R005
|
||||
@ -397,46 +400,29 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||
LD HL,#4000 ;!HARDCODE
|
||||
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
|
||||
;EX DE,HL
|
||||
JP LOADDIR
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
;JP LOADDIR
|
||||
;--------------;
|
||||
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
; [x] fat32 ;!TEST
|
||||
LOADDIR: ;!TODO optimize
|
||||
; XOR A ; FILE MANIPULATOR = 0
|
||||
; LD H,A
|
||||
; LD L,A
|
||||
; LD IX,0
|
||||
; LD B,A ; ®â ç « ä ©«
|
||||
; CALL MOVE_FP
|
||||
; ;
|
||||
; SET_PAGE_X DIRPAGE
|
||||
; AND A
|
||||
; PUSH AF
|
||||
; ;!TEST no ldir
|
||||
; ; ®ç¨áâ¨âì ª¥è ª â «®£
|
||||
; ; LD HL,#C000
|
||||
; ; LD DE,#C001
|
||||
; ; LD BC,#3FFF
|
||||
; ; LD (HL),L
|
||||
; ; LDIR
|
||||
; ;
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
; LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
|
||||
; ; ®¬¥à ¯¥à¢®£® ª« áâ¥à
|
||||
; ; [x] fat32
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
; XOR 32
|
||||
; JR Z,.read_dir
|
||||
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||
; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||
; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
CALL LOAD_SAVE_DIR_PREPARE
|
||||
PUSH AF
|
||||
EX AF,AF'
|
||||
JR Z,.LoadRootDir
|
||||
JR NZ,.read_dir
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR NZ,.LoadRootDir
|
||||
; fat32
|
||||
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
|
||||
; 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
|
||||
;
|
||||
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤
|
||||
LD DE,#4000 ; ᪮«ìª®
|
||||
XOR A ; ¤¥áªà¨¯â®à
|
||||
@ -477,14 +463,12 @@ LOAD_SAVE_DIR_PREPARE:
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
LD (IY+_sFM.DRIVE),A
|
||||
; [x] fat32
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32 - 1
|
||||
JR NC,.exit
|
||||
;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
.exit: EX AF,AF'
|
||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H)
|
||||
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
|
||||
EX AF,AF'
|
||||
RET
|
||||
|
||||
;!TODO FAT procedures
|
||||
@ -493,30 +477,20 @@ LOAD_SAVE_DIR_PREPARE:
|
||||
; ¢å®¤: iy=áâàãªâãà ¤¥áªà¨¯â®à
|
||||
; [x] fat32 ;!TEST
|
||||
SAVEDIR: ;!TODO optimize
|
||||
; XOR A ; FILE MANIPULATOR = 0
|
||||
; LD H,A
|
||||
; LD L,A
|
||||
; LD IX,0
|
||||
; LD B,A ; ®â ç « ä ©«
|
||||
; CALL MOVE_FP
|
||||
; ;
|
||||
; SET_PAGE_X DIRPAGE
|
||||
; AND A
|
||||
; PUSH AF
|
||||
; ;
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||
; LD (IY+_sFM.DRIVE),A
|
||||
; ; [x] fat32
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
; XOR 32
|
||||
; JR Z,.save_dir
|
||||
; ;!FIXIT ¯¥à¥¤¥« âì à ¡®âã ¡¥§ IY
|
||||
; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||
; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
CALL LOAD_SAVE_DIR_PREPARE
|
||||
PUSH AF
|
||||
EX AF,AF'
|
||||
JR Z,.SaveRootDir
|
||||
JR NZ,.save_dir
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR NZ,.SaveRootDir
|
||||
; fat32
|
||||
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
|
||||
;
|
||||
.save_dir: LD HL,DIRPAGE.buffer
|
||||
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||||
;!FIXIT ¥á«¨ ® 㦠, â® ¯à®¢¥à¨âì ¡ £¨ ( ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
|
||||
@ -591,7 +565,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
|
||||
ADD HL,BC
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR NC,SAVEDIR
|
||||
JP NC,SAVEDIR
|
||||
LD HL,(SAVEDIR.DIRSIZE)
|
||||
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerCluster)
|
||||
ADD HL,BC
|
||||
@ -627,7 +601,7 @@ RD_BPB: LD C,SLOT3
|
||||
JP C,DOS_X_Error.Not_ready
|
||||
;
|
||||
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||
;R05
|
||||
AND A
|
||||
SBC HL,DE
|
||||
@ -639,22 +613,18 @@ RD_BPB: LD C,SLOT3
|
||||
; LD BC,_sBOOT_SECTOR_PARAMS_FAT32 ; size
|
||||
; LDIR
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JP C,DOS_X_Error.UnknownBPB
|
||||
;
|
||||
;!TODO ¯à®¢¥à¨âì ¯® ¬¥âª¥ à §¤¥« , çâ® íâ® FAT, ¯®â®¬ ®¯à¥¤¥«ïâì ª ª®© FAT
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector)
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BytesPerSector)
|
||||
LD (CORE_BUFFERS.FatBuffer.BytesPerSector),HL
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster)
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.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)
|
||||
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)
|
||||
@ -669,25 +639,23 @@ RD_BPB: LD C,SLOT3
|
||||
LD C,A
|
||||
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.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)
|
||||
LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT16)
|
||||
LD A,E
|
||||
OR D
|
||||
JR NZ,.skip_high
|
||||
;
|
||||
LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32+4)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT32 + 2)
|
||||
LD A,C
|
||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
||||
LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32)
|
||||
LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT32)
|
||||
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs) ; amount FATs
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
||||
CP 1
|
||||
JR Z,.one_FAT
|
||||
DEC A
|
||||
@ -724,8 +692,13 @@ RD_BPB: LD C,SLOT3
|
||||
ENDIF
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.FilesInRootDIR) ; 0 for fat32
|
||||
DEC HL ; [ ]fat32
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32
|
||||
; [ ]fat32 ;!TEST
|
||||
LD A,H
|
||||
OR L
|
||||
JR Z,.skip_loop2
|
||||
;
|
||||
DEC HL
|
||||
XOR A
|
||||
;NEXTAD2
|
||||
.loop2: INC A
|
||||
@ -733,7 +706,7 @@ RD_BPB: LD C,SLOT3
|
||||
SBC HL,BC
|
||||
JR NC,.loop2
|
||||
;
|
||||
EX DE,HL
|
||||
.skip_loop2: EX DE,HL
|
||||
LD C,A ; A - sectors in DIR
|
||||
LD B,0
|
||||
LD (CORE_BUFFERS.FatBuffer.DirSizeInSectors),A
|
||||
@ -819,14 +792,14 @@ RD_BPB: LD C,SLOT3
|
||||
; LD (CORE_BUFFERS.FatBuffer.S_X_H),HL
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; [ ] fat32
|
||||
LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerDrive)
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerDrive)
|
||||
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)
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_L)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H)
|
||||
PUSH BC ; Total Sectors high
|
||||
PUSH HL ; Total Sectors low
|
||||
AND A
|
||||
@ -841,18 +814,20 @@ RD_BPB: LD C,SLOT3
|
||||
PUSH HL ; Total Sectors low
|
||||
SBC HL,DE
|
||||
;
|
||||
.HDDBIG: LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
SCF
|
||||
.loop7: RRA
|
||||
JR C,.loop7_exit
|
||||
RR B
|
||||
RR C
|
||||
RR H
|
||||
RR L
|
||||
JP .loop7
|
||||
.HDDBIG: CALL ClusterToSector
|
||||
; LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
; SCF
|
||||
; .loop7: RRA
|
||||
; JR C,.loop7_exit
|
||||
; RR B
|
||||
; RR C
|
||||
; RR H
|
||||
; RR L
|
||||
; JP .loop7
|
||||
;
|
||||
.loop7_exit: INC HL
|
||||
LD (CORE_BUFFERS.FatBuffer.MaxClusterLow),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC
|
||||
;
|
||||
XOR A
|
||||
LD H,A
|
||||
@ -866,7 +841,7 @@ RD_BPB: LD C,SLOT3
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_L)
|
||||
; DE:HL = SectorsPerFAT
|
||||
;
|
||||
LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs)
|
||||
LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.Number_of_FATs)
|
||||
LD B,A
|
||||
DEC A
|
||||
JR Z,.loop_mul_end
|
||||
@ -884,7 +859,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 + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RESERVED_SECTORS)
|
||||
ADD HL,BC
|
||||
JR NC,.no_inc_de
|
||||
INC DE
|
||||
@ -917,32 +892,54 @@ RD_BPB: LD C,SLOT3
|
||||
JR C,.its_FAT32
|
||||
;
|
||||
; It's FAT16
|
||||
LD A,FAT_TYPE.x16
|
||||
LD HL,#FFFF
|
||||
LD A,FAT_TYPE.x16
|
||||
.Set_SN: 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
|
||||
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
|
||||
;
|
||||
.its_FAT12: LD HL,#0FFF
|
||||
LD A,FAT_TYPE.x12
|
||||
JR .BPB_FAT
|
||||
JR .Set_SN
|
||||
;
|
||||
.its_FAT32: LD A,FAT_TYPE.x32
|
||||
.its_FAT32: EXX
|
||||
LD HL,CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.LABEL
|
||||
EXX
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RootDirStartCluster)
|
||||
LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),HL
|
||||
LD BC,(CORE_BUFFERS.SECBUF + 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 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
|
||||
LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.SERIAL_NUMBER)
|
||||
LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.SERIAL_NUMBER+2)
|
||||
;
|
||||
.BPB_FAT: 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
|
||||
EXX
|
||||
LD DE,CORE_BUFFERS.FatBuffer.BPB_LABEL
|
||||
LD BC,11 ;!HARDCODE
|
||||
LDIR
|
||||
;
|
||||
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
PUSH AF
|
||||
; [ ] fat32
|
||||
; XOR A
|
||||
; HL = 0
|
||||
; EX DE,HL
|
||||
;
|
||||
LD DE,0
|
||||
CALL READ_FAT_TABLE
|
||||
POP AF
|
||||
@ -951,7 +948,7 @@ RD_BPB: LD C,SLOT3
|
||||
XOR A
|
||||
RET
|
||||
;!TODO detect fat type by clusters!
|
||||
.IBM_DOS: LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||
.IBM_DOS: LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JR C,DOS_X_Error.UnknownBPB
|
||||
; ID ram-¤¨áª - #FA
|
||||
@ -963,7 +960,25 @@ RD_BPB: LD C,SLOT3
|
||||
LD A,'6'
|
||||
LD H,L
|
||||
JP .BPB_FAT
|
||||
;
|
||||
;
|
||||
|
||||
; --> BC:HL - Cluster
|
||||
; <-- BC:HL - Sector
|
||||
ClusterToSector:
|
||||
LD A,B
|
||||
AND #0F
|
||||
LD B,A
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
SCF
|
||||
.loop: RRA
|
||||
RET C
|
||||
RR B
|
||||
RR C
|
||||
RR H
|
||||
RR L
|
||||
JP .loop
|
||||
;
|
||||
|
||||
DOS_X_Error:
|
||||
.UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||
SCF
|
||||
|
||||
@ -240,6 +240,7 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
||||
POP BC
|
||||
LD A,B
|
||||
OUT (SLOT3),A
|
||||
POP HL
|
||||
RET
|
||||
|
||||
;
|
||||
|
||||
@ -1146,13 +1146,6 @@ KBD_Receiver_Overrun:
|
||||
; reg 0 - error reset
|
||||
.reset_errors: LD A,%0011'0000
|
||||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||||
;!TEST SIO INT
|
||||
; reg 0 - return from int
|
||||
IF KEYBOARD_INT_ENABLED
|
||||
LD A,%0011'1000
|
||||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||||
ENDIF
|
||||
;
|
||||
;!TODO ¯à¨ ¤¥â¥ªâ¥ ¯¥à¥¯®«¥¨ï ¡ãä¥à ¯à®æ áïâì ª« ¢¨è¨ ¨§ ¯®àâ #FE ᯥªâàã¬
|
||||
;
|
||||
XOR A
|
||||
|
||||
@ -523,10 +523,10 @@ DEFINE_PARTITIONS:
|
||||
.EASYDOS:
|
||||
.MEDIDOS:
|
||||
.HIGHDOS:
|
||||
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)
|
||||
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)
|
||||
@ -539,10 +539,10 @@ DEFINE_PARTITIONS:
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
|
||||
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
|
||||
LD E,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 0)
|
||||
LD D,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 1)
|
||||
LD L,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 2)
|
||||
LD H,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 3)
|
||||
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
|
||||
|
||||
@ -37,20 +37,20 @@
|
||||
; .DATE: WORD #0000 ;+ #18 +24 DATE
|
||||
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32
|
||||
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
|
||||
.FS_REC: _sFAT_DIRECTORY_RECORD
|
||||
.FS_REC _sFAT_DIRECTORY_RECORD
|
||||
; from Core
|
||||
.F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
|
||||
.DIR_CLUSTER_L: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW
|
||||
.DIR_CLUSTER_H: WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32
|
||||
.HANDLE: WORD #0000 ;+ #28 +40 HANDLE NUMBER
|
||||
.DRIVE: BYTE #00 ;+ #2A +42 DRIVE OR CURRENT
|
||||
.ACCESS_MODE: BYTE #00 ;+ #2B +43 ACCESS MODE
|
||||
.TASK_NUM: BYTE #00 ;+ #2C +44 TASK
|
||||
.F_POSITION DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
|
||||
.DIR_CLUSTER_L WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW
|
||||
.DIR_CLUSTER_H WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32
|
||||
.HANDLE WORD #0000 ;+ #28 +40 HANDLE NUMBER
|
||||
.DRIVE BYTE #00 ;+ #2A +42 DRIVE OR CURRENT
|
||||
.ACCESS_MODE BYTE #00 ;+ #2B +43 ACCESS MODE
|
||||
.TASK_NUM BYTE #00 ;+ #2C +44 TASK
|
||||
.OptimizedClusters BYTE #00 ;+ #2D +45
|
||||
.KnownCluster_L: WORD #0000 ;+ #2E +46 Œ« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownCluster_H: WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownOffset_L: WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownOffset_H: WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownCluster_L WORD #0000 ;+ #2E +46 Œ« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownCluster_H WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownOffset_L WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownOffset_H WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
ENDS
|
||||
;ACCESS MODE: A=0 誺平言/<EFBFBD>祠摐
|
||||
; A=1 誺平言
|
||||
|
||||
@ -1 +1 @@
|
||||
950
|
||||
973
|
||||
@ -1 +1 @@
|
||||
Subproject commit 0e2bbfb73ceb70a16b2ab2b5ee6cbc6bd5005bf7
|
||||
Subproject commit e9bcf54a516df972207fc032925d2dfb74c39a89
|
||||
Loading…
Reference in New Issue
Block a user