mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-16 01:41:17 +03:00
boot.asm, dssboot.asm - поддержка записи/чтения части загрузчика в/из нулевого сектора
This commit is contained in:
parent
fda917aed8
commit
f2eb4e47e3
869
BOOT/DSSBOOT.ASM
869
BOOT/DSSBOOT.ASM
@ -1,6 +1,6 @@
|
|||||||
;---------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
;Rev Date Name Decription
|
;Rev Date Name Decription
|
||||||
;---------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
;R04 25-03-2023 BAO ; !FIXIT
|
;R04 25-03-2023 BAO ; !FIXIT
|
||||||
;R03 23-01-2000 DNS OPTIMIZE NEW BOOTING PROCEDURE
|
;R03 23-01-2000 DNS OPTIMIZE NEW BOOTING PROCEDURE
|
||||||
;R02 08-01-2000 DNS NEW BOOTING PROCEDURE
|
;R02 08-01-2000 DNS NEW BOOTING PROCEDURE
|
||||||
@ -11,14 +11,24 @@
|
|||||||
; + System Bootstrap +
|
; + System Bootstrap +
|
||||||
; + Initial revision 09 Nov 1998 +
|
; + Initial revision 09 Nov 1998 +
|
||||||
; +------------------------------+
|
; +------------------------------+
|
||||||
|
|
||||||
MODULE DSS_Boot_Loader
|
MODULE DSS_Boot_Loader
|
||||||
|
|
||||||
; BIOS 3.06 § £à㦠¥â ®¤¨ ᥪâ®à § £àã§ç¨ª ¨ ¯¥à¥¤ ñâ ¥¬ã ã¯à ¢«¥¨¥.
|
; BIOS 3.06 § £à㦠¥â ®¤¨ ᥪâ®à § £àã§ç¨ª ¨ ¯¥à¥¤ ñâ ¥¬ã ã¯à ¢«¥¨¥.
|
||||||
DEFINE ORIGINAL_DSS 0
|
|
||||||
DEFINE UNIVERSAL_BOOT 1
|
|
||||||
LOAD_SECTORS EQU SECTORS_OF_LOADER-1
|
|
||||||
|
|
||||||
DISP #8000
|
; 0 - ®à¨£¨ «ìë© ¢ ਠ⠧ ¯ã᪠DSS, 1 - ¢ ਠ⠑ ©¬
|
||||||
|
DEFINE ORIGINAL_DSS 0
|
||||||
|
; 1 - ¡ã¤¥â £à㧨âì ¢¥àá¨î ‘ ©¬ ¨ ®á®¢ãî. 0 - ⮫쪮 ®á®¢ãî.
|
||||||
|
DEFINE UNIVERSAL_BOOT 1
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
ORG_ADDRESS EQU #8000
|
||||||
|
LOAD_SECTORS EQU SECTORS_OF_LOADER.AFTER_BPB
|
||||||
|
LOADER_IN_BPB:
|
||||||
|
.MAX_SIZE EQU 300
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
DISP ORG_ADDRESS
|
||||||
|
|
||||||
OUTPUT 'build/DSSloader.bin'
|
OUTPUT 'build/DSSloader.bin'
|
||||||
|
|
||||||
@ -301,9 +311,10 @@ PART_TB: PUSH BC
|
|||||||
LD B, +(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD)
|
LD B, +(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD)
|
||||||
;
|
;
|
||||||
LD HL,YEPDOS
|
LD HL,YEPDOS
|
||||||
|
;
|
||||||
PUSH HL
|
PUSH HL
|
||||||
.part_loop: LD A,(IX + _sMBR_PARTITION_RECORD.FS_ID)
|
.part_loop: LD A,(IX + _sMBR_PARTITION_RECORD.FS_ID)
|
||||||
; …‘‹ˆ ¤®¡ ¢¨âáï ¯®¤¤¥à¦ª ¥éñ ®¤®£® ⨯ ”‘, â® ¯®¬¥ïâì 1 2
|
; …‘‹ˆ ¤®¡ ¢¨âáï ¯®¤¤¥à¦ª ¥éñ ¥áª®«ìª¨å ⨯®¢ ”‘, â® ¯®¬¥ïâì 1fs 2fs
|
||||||
; 1
|
; 1
|
||||||
CP PartitionSysTypes.FAT16_LBA
|
CP PartitionSysTypes.FAT16_LBA
|
||||||
RET Z ;JR Z,YEPDOS
|
RET Z ;JR Z,YEPDOS
|
||||||
@ -318,13 +329,13 @@ PART_TB: PUSH BC
|
|||||||
CP PartitionSysTypes.FAT32_LBA
|
CP PartitionSysTypes.FAT32_LBA
|
||||||
RET Z ;JR Z,YEPDOS
|
RET Z ;JR Z,YEPDOS
|
||||||
;
|
;
|
||||||
; 2
|
; 2fs
|
||||||
; EXX
|
; EXX
|
||||||
; LD HL,SUPPORTED_PARTITIONS
|
; LD HL,SUPPORTED_PARTITIONS
|
||||||
; LD BC,SUPPORTED_PARTITIONS.Size
|
; LD BC,SUPPORTED_PARTITIONS.Size
|
||||||
; CPIR
|
; CPIR
|
||||||
; EXX
|
; EXX
|
||||||
;JR Z,YEPDOS
|
; RET Z ;JR Z,YEPDOS
|
||||||
;
|
;
|
||||||
.next: LD DE,_sMBR_PARTITION_RECORD
|
.next: LD DE,_sMBR_PARTITION_RECORD
|
||||||
ADD IX,DE
|
ADD IX,DE
|
||||||
@ -332,7 +343,7 @@ PART_TB: PUSH BC
|
|||||||
;
|
;
|
||||||
LD HL,MESSAGES.ERRPART
|
LD HL,MESSAGES.ERRPART
|
||||||
JP FAIL
|
JP FAIL
|
||||||
; 2
|
; 2fs
|
||||||
; SUPPORTED_PARTITIONS:
|
; SUPPORTED_PARTITIONS:
|
||||||
; ;.Empty DB #00
|
; ;.Empty DB #00
|
||||||
; .FAT12 DB #01
|
; .FAT12 DB #01
|
||||||
@ -380,161 +391,14 @@ YEPDOS: ;[ ] 17.12.2023
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/*
|
|
||||||
GET_BPB: LD IX,#0000
|
|
||||||
LD HL,#0000
|
|
||||||
LD DE,BOOT_BUFFER
|
|
||||||
LD BC,1*256 + BIOS.DRV_READ
|
|
||||||
LD A,(DRIVE)
|
|
||||||
RST ToBIOS_18
|
|
||||||
RET C
|
|
||||||
LD A,(DRIVE)
|
|
||||||
LD B,A
|
|
||||||
AND #F0
|
|
||||||
LD C,A
|
|
||||||
CP #80
|
|
||||||
JR NZ,.NX1
|
|
||||||
CALL PART_TB ;HDD
|
|
||||||
RET C
|
|
||||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
|
||||||
LD (DRIVE+1),HL
|
|
||||||
;
|
;
|
||||||
.NX1: CP #00
|
|
||||||
JR NZ,.NX2
|
|
||||||
;
|
|
||||||
; SET_PRM if FDD
|
|
||||||
PUSH BC
|
|
||||||
LD A,B
|
|
||||||
LD C,BIOS.DRV_GET_PAR
|
|
||||||
RST ToBIOS_18
|
|
||||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerTrack)
|
|
||||||
LD L,A
|
|
||||||
POP AF
|
|
||||||
;PUSH AF
|
|
||||||
LD C,BIOS.DRV_SET_PAR
|
|
||||||
RST ToBIOS_18
|
|
||||||
;POP BC
|
|
||||||
;LD A,C ; å¥à ?
|
|
||||||
;RET
|
|
||||||
|
|
||||||
.NX2: LD HL,(BOOT_BUFFER + BOOT_SECTOR.MBR_SIGNATURE)
|
|
||||||
LD DE,#AA55
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
;
|
|
||||||
LD IY,BOOT_BUFFER ;Analysing Block Parametr BIOS
|
|
||||||
LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
|
||||||
CP #F0
|
|
||||||
RET C
|
|
||||||
LD HL,0 ;calc. first sector FAT
|
|
||||||
LD (FatBuffer.RootDirFirstSector_H),HL
|
|
||||||
;
|
|
||||||
LD E,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) ;Reserve sec
|
|
||||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.RESERVED_SECTORS+1)
|
|
||||||
ADD HL,DE
|
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL ;first sector FAT
|
|
||||||
LD E,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16) ;sectors in FAT
|
|
||||||
LD D,(IY+_sBOOT_SECTOR_PARAMS.SectorsPerFAT16+1)
|
|
||||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs) ;amount FATs
|
|
||||||
.C_DATA1: ADD HL,DE
|
|
||||||
DEC A
|
|
||||||
JR NZ,.C_DATA1
|
|
||||||
LD (FatBuffer.RootDirFirstSector_L),HL ;first sector DIR
|
|
||||||
EX DE,HL
|
|
||||||
LD L,(IY+_sBOOT_SECTOR_PARAMS.FilesInRootDIR) ;Number file handel
|
|
||||||
LD H,(IY+_sBOOT_SECTOR_PARAMS.FilesInRootDIR+1)
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
LD A,H
|
|
||||||
SRL A
|
|
||||||
LD (FatBuffer.DirSizeInSectors),A ;Sectors per dir
|
|
||||||
LD L,A
|
|
||||||
LD H,0
|
|
||||||
ADD HL,DE
|
|
||||||
LD (FatBuffer.FirstDataSector_L),HL ;First sector data
|
|
||||||
;
|
|
||||||
LD C,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector) ;Size sector
|
|
||||||
LD B,(IY+_sBOOT_SECTOR_PARAMS.BytesPerSector+1)
|
|
||||||
LD HL,0
|
|
||||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
|
||||||
.NEXTAD3: ADD HL,BC ;calc. cluster size
|
|
||||||
DEC A
|
|
||||||
JR NZ,.NEXTAD3
|
|
||||||
LD (FatBuffer.BytesPerCluster),HL
|
|
||||||
LD HL,BOOT_BUFFER + BOOT_SECTOR.ID_FAT
|
|
||||||
LD DE,FATMSG
|
|
||||||
LD B,3
|
|
||||||
.R_BPBL1: LD A,(DE)
|
|
||||||
CP (HL)
|
|
||||||
JP NZ,.IBMDOS_
|
|
||||||
INC HL
|
|
||||||
INC DE
|
|
||||||
DJNZ .R_BPBL1
|
|
||||||
.FID: LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
CP " "
|
|
||||||
JR Z,.FID
|
|
||||||
CP "1"
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
LD A,(HL)
|
|
||||||
CP "6" ; FAT16
|
|
||||||
;LD HL,#FFFF
|
|
||||||
JR Z,.BPB_FAT
|
|
||||||
CP "2" ; FAT12
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
;LD HL,#0FFF
|
|
||||||
.BPB_FAT: LD (FatBuffer.FAT_TYPE),A
|
|
||||||
;LD (FatBuffer.END_CHAIN_CLUSTER_L),HL
|
|
||||||
;
|
|
||||||
LD IX,(PARTITION_START_L)
|
|
||||||
LD HL,(PARTITION_START_H)
|
|
||||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
|
||||||
LD BC,#0000
|
|
||||||
ADD IX,DE
|
|
||||||
ADC HL,BC
|
|
||||||
;HL:IX
|
|
||||||
LD DE,FAT_SECTORS_BUFFER
|
|
||||||
LD BC,3*256 + BIOS.DRV_READ
|
|
||||||
LD A,(DRIVE)
|
|
||||||
RST ToBIOS_18
|
|
||||||
RET C
|
|
||||||
LD HL,0
|
|
||||||
LD (FatBuffer.CacheBlock),HL
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.IBMDOS_ LD A,(IY+_sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
|
||||||
CP #F0
|
|
||||||
RET C
|
|
||||||
CP #F8
|
|
||||||
LD A,"6"
|
|
||||||
LD HL,#FFFF
|
|
||||||
JR Z,.BPB_FAT
|
|
||||||
LD A,"2"
|
|
||||||
LD HL,#0FFF
|
|
||||||
JR .BPB_FAT
|
|
||||||
;*/
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
;/*
|
|
||||||
GET_BPB: LD HL,#0000
|
GET_BPB: LD HL,#0000
|
||||||
;
|
;
|
||||||
LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1 ; fat32
|
LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1
|
||||||
LD (FatBuffer.RootDirFirstSector_H),HL
|
LD (FatBuffer.RootDirFirstSector_H),HL
|
||||||
;LD (FatBuffer.CacheBlock),HL
|
;LD (FatBuffer.CacheBlock),HL
|
||||||
XOR A
|
XOR A
|
||||||
LD (FatBuffer.SectorsPerFAT_H),A ; fat32
|
LD (FatBuffer.SectorsPerFAT_H),A
|
||||||
;
|
;
|
||||||
PUSH HL
|
PUSH HL
|
||||||
POP IX
|
POP IX
|
||||||
@ -545,6 +409,12 @@ GET_BPB: LD HL,#0000
|
|||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
RST ToBIOS_18
|
RST ToBIOS_18
|
||||||
RET C
|
RET C
|
||||||
|
; ¯¥à¥ª¨¤ë¢ ¨¥ ç á⨠§ £àã§ç¨ª ¨§ 0 ᥪâ®à
|
||||||
|
LD HL,BOOT_BUFFER + (_sBOOT_SECTOR.PARTITION_TABLE - ZERO_SECTOR_OF_BPB.Size)
|
||||||
|
LD DE,ZERO_SECTOR_OF_BPB
|
||||||
|
LD BC,ZERO_SECTOR_OF_BPB.Size
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
LD B,A
|
LD B,A
|
||||||
AND #F0
|
AND #F0
|
||||||
@ -632,14 +502,12 @@ GET_BPB: LD HL,#0000
|
|||||||
;
|
;
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32
|
LD HL,(BOOT_BUFFER + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32
|
||||||
; fat32
|
|
||||||
LD A,H
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
JR Z,.skip_loop2
|
JR Z,.skip_loop2
|
||||||
;
|
;
|
||||||
DEC HL
|
DEC HL
|
||||||
XOR A
|
XOR A
|
||||||
;NEXTAD2
|
|
||||||
.loop2: INC A
|
.loop2: INC A
|
||||||
RET C
|
RET C
|
||||||
SBC HL,BC
|
SBC HL,BC
|
||||||
@ -799,33 +667,8 @@ GET_BPB: LD HL,#0000
|
|||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
;;;;;;;;
|
|
||||||
;
|
|
||||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
|
||||||
; DIV_for_SPC:
|
|
||||||
; LD C,A
|
|
||||||
; DEC A
|
|
||||||
; JR Z,.DIV_exit
|
|
||||||
; ;
|
|
||||||
; AND E
|
|
||||||
; LD B,A ; ®áâ ⮪
|
|
||||||
; LD A,C
|
|
||||||
; RRCA
|
|
||||||
; ;
|
|
||||||
; .DIV_loop: SRL H
|
|
||||||
; RR L
|
|
||||||
; RR D
|
|
||||||
; RR E
|
|
||||||
; RRCA
|
|
||||||
; JP NC,.DIV_loop
|
|
||||||
; LD A,B
|
|
||||||
; .DIV_exit: LD B,D
|
|
||||||
; LD C,E
|
|
||||||
; EX DE,HL
|
|
||||||
; LD H,0
|
|
||||||
; LD L,A
|
|
||||||
; RET
|
|
||||||
;
|
|
||||||
;NSECTOR:
|
;NSECTOR:
|
||||||
; in: HL':HL - CLUSTER
|
; in: HL':HL - CLUSTER
|
||||||
; out: HL:IX - SECTOR
|
; out: HL:IX - SECTOR
|
||||||
@ -866,8 +709,7 @@ CLUSTER_TO_SECTOR:
|
|||||||
POP BC
|
POP BC
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
;*/
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
; ¯®¨áª system.dos
|
; ¯®¨áª system.dos
|
||||||
GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
|
GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
|
||||||
@ -879,7 +721,7 @@ GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
|
|||||||
LD A,(FatBuffer.DirSizeInSectors)
|
LD A,(FatBuffer.DirSizeInSectors)
|
||||||
JR NZ,.NEXTSEC
|
JR NZ,.NEXTSEC
|
||||||
;
|
;
|
||||||
LD A,(FatBuffer.SectorsPerCluster);!FIXIT ¯à®çâñâ ⮫쪮 ¯¥à¢ë© ª« áâ¥à ä ©«®¢ FAT32
|
LD A,(FatBuffer.SectorsPerCluster);!FIXIT ¯à®çâñâ ⮫쪮 ¯¥à¢ë© ª« áâ¥à ª â «®£ FAT32
|
||||||
.NEXTSEC: PUSH AF
|
.NEXTSEC: PUSH AF
|
||||||
ADD IX,BC
|
ADD IX,BC
|
||||||
JR NC,.skip_inc
|
JR NC,.skip_inc
|
||||||
@ -1018,232 +860,9 @@ LOAD_CORE: LD (READMEM),DE
|
|||||||
EXX
|
EXX
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
JP .loop
|
JP .loop
|
||||||
|
;
|
||||||
; HL - CLUSTER
|
|
||||||
; DE - ADDRESS
|
|
||||||
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥¨¥ à §¬¥à SYSTEM.DOS ¨ ¢®§¬®¦®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ¨æë
|
|
||||||
; FLOAD: LD (READMEM),DE
|
|
||||||
; .LD_FILE: PUSH HL ; system.dos first cluster
|
|
||||||
; CALL NSECTOR ; Cluster to Sector
|
|
||||||
; LD DE,(READMEM)
|
|
||||||
; LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
|
||||||
; CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
|
|
||||||
; LD C,BIOS.DRV_READ_LONG
|
|
||||||
; JR C,.SMALL_CLUSTER
|
|
||||||
; LD A,(BANKDOS)
|
|
||||||
; EX AF,AF'
|
|
||||||
; ;LD BC,#20*256 + BIOS.DRV_READ_LONG
|
|
||||||
; LD B,#20 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
|
|
||||||
; .set_drv: LD A,(DRIVE)
|
|
||||||
; RST ToBIOS_18
|
|
||||||
; JP C,GOOD_DRIVE.NoShell
|
|
||||||
; POP HL
|
|
||||||
; ; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
|
||||||
; ;AND A
|
|
||||||
; ;RET
|
|
||||||
; LD A,(BIG_SHELL)
|
|
||||||
; OR A
|
|
||||||
; RET Z
|
|
||||||
; ;
|
|
||||||
; XOR A
|
|
||||||
; LD (BIG_SHELL),A
|
|
||||||
; PUSH HL
|
|
||||||
; CALL NSECTOR
|
|
||||||
; LD DE,#20 ; !HARDCODE ª®«-¢® ¯à®ç¨â ëå ᥪâ®à®¢
|
|
||||||
; AND A
|
|
||||||
; ADD IX,DE
|
|
||||||
; JR NC,.no_inc_hl
|
|
||||||
; INC HL
|
|
||||||
; .no_inc_hl: LD BC,SUBLOAD_SIZE*256 + BIOS.DRV_READ ; !HARDCODE ª®«-¢® „ާ £à㦠¥¬ëå ᥪâ®à®¢
|
|
||||||
; LD DE,#4000
|
|
||||||
; JR .set_drv
|
|
||||||
; ;
|
|
||||||
; .SMALL_CLUSTER: LD B,A
|
|
||||||
; LD A,(BANKDOS)
|
|
||||||
; EX AF,AF'
|
|
||||||
; LD A,(DRIVE)
|
|
||||||
; RST ToBIOS_18
|
|
||||||
; JP C,GOOD_DRIVE.NoShell
|
|
||||||
; ;
|
|
||||||
; LD HL,(READMEM)
|
|
||||||
; LD DE,(CLU_LEN)
|
|
||||||
; ADD HL,DE
|
|
||||||
; LD (READMEM),HL
|
|
||||||
; ; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
|
||||||
; ;POP HL
|
|
||||||
; ;RET C
|
|
||||||
; CALL C,.more_than_1
|
|
||||||
; POP HL
|
|
||||||
; RET C
|
|
||||||
; ;
|
|
||||||
; CALL R_F_FAT ; next cluster in chain
|
|
||||||
; RET C
|
|
||||||
; EX DE,HL
|
|
||||||
; JP .LD_FILE
|
|
||||||
; ; [ ] § £à㧪 system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
|
|
||||||
; .more_than_1: LD A,(BIG_SHELL)
|
|
||||||
; OR A
|
|
||||||
; SCF
|
|
||||||
; RET Z
|
|
||||||
; IN A,(SLOT1)
|
|
||||||
; LD HL,BANKDOS
|
|
||||||
; CP (HL)
|
|
||||||
; CCF
|
|
||||||
; RET Z
|
|
||||||
; LD (BANKDOS),A
|
|
||||||
; LD HL,#C000
|
|
||||||
; LD (READMEM),HL
|
|
||||||
; LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
|
||||||
; SUB SUBLOAD_SIZE + 1
|
|
||||||
; CCF
|
|
||||||
; RET NC
|
|
||||||
; LD A,SUBLOAD_SIZE
|
|
||||||
; LD (BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster),A
|
|
||||||
; AND A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
|
|
||||||
;
|
|
||||||
/*
|
|
||||||
; --> HL - CLUSTER
|
|
||||||
; <-- HL:IX - SECTOR
|
|
||||||
NSECTOR: LD DE,0
|
|
||||||
DEC HL
|
|
||||||
DEC HL
|
|
||||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
|
||||||
XOR 1
|
|
||||||
JR Z,.skip
|
|
||||||
;
|
|
||||||
RRA
|
|
||||||
.loop: ADD HL,HL
|
|
||||||
RL E
|
|
||||||
RL D
|
|
||||||
RRA
|
|
||||||
JP NC,.loop
|
|
||||||
;
|
|
||||||
.skip: EX DE,HL
|
|
||||||
PUSH DE
|
|
||||||
POP IX
|
|
||||||
LD DE,(FatBuffer.FirstDataSector_L) ;first data sector
|
|
||||||
XOR A
|
|
||||||
ADD IX,DE
|
|
||||||
LD D,A
|
|
||||||
LD E,A
|
|
||||||
ADC HL,DE
|
|
||||||
;
|
|
||||||
LD DE,(PARTITION_START_L)
|
|
||||||
ADD IX,DE
|
|
||||||
LD DE,(PARTITION_START_H)
|
|
||||||
ADC HL,DE
|
|
||||||
RET
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------------------------------------------------------------------
|
|
||||||
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
|
||||||
; ¢å®¤: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
|
||||||
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32)
|
|
||||||
; ¢ë室: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
|
||||||
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®)
|
|
||||||
; de - ®¬¥à á«¥¤. ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
|
||||||
; de' - ®¬¥à á«¥¤. ª« áâ¥à (áâ à襥 á«®¢®)
|
|
||||||
; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥
|
|
||||||
; CF - ª®¥æ 楯®çª¨
|
|
||||||
;------------------------------------------------------------------------------------------------
|
|
||||||
READ_FROM_FAT: PUSH HL
|
|
||||||
;
|
|
||||||
IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
LD A,SHARED_PAGE
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;
|
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
|
||||||
CP FAT_TYPE.x16
|
|
||||||
JR C,.FAT12
|
|
||||||
JR NZ,.FAT32
|
|
||||||
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ®¬¥à
|
|
||||||
.FAT16: CALL GET_FAT16_CELL
|
|
||||||
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
|
||||||
INC HL
|
|
||||||
LD D,(HL)
|
|
||||||
;
|
|
||||||
LD HL,SERVICE_SECTORS.FAT16
|
|
||||||
.exit: POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
|
|
||||||
XOR A
|
|
||||||
; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
|
||||||
SBC HL,DE
|
|
||||||
POP HL
|
|
||||||
;!FIXIT fat32 ¯¥à¥áâà 客ª
|
|
||||||
EXX
|
|
||||||
LD H,A
|
|
||||||
LD L,A
|
|
||||||
LD D,A
|
|
||||||
LD E,A
|
|
||||||
EXX
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
;
|
|
||||||
.FAT12: CALL GET_FAT12_CELL
|
|
||||||
LD E,(HL)
|
|
||||||
INC HL
|
|
||||||
LD D,(HL)
|
|
||||||
LD HL,SERVICE_SECTORS.FAT12
|
|
||||||
JR NC,.Correct_2
|
|
||||||
.Correct_1: LD A,E
|
|
||||||
AND #F0
|
|
||||||
DUP 4 ; ¢¯à ¢® 4 ¡¨âa
|
|
||||||
RR D
|
|
||||||
RRA
|
|
||||||
EDUP
|
|
||||||
LD E,A
|
|
||||||
JR .exit
|
|
||||||
;
|
|
||||||
.Correct_2: LD A,D
|
|
||||||
AND #0F
|
|
||||||
LD D,A
|
|
||||||
JR .exit
|
|
||||||
;
|
|
||||||
.FAT32: EXX
|
|
||||||
PUSH HL
|
|
||||||
EXX
|
|
||||||
;
|
|
||||||
CALL GET_FAT32_CELL
|
|
||||||
; ¯à®ç¨â âì ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
|
||||||
LD E,(HL)
|
|
||||||
INC HL
|
|
||||||
LD D,(HL)
|
|
||||||
INC HL
|
|
||||||
; ¯à®ç¨â âì áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
|
||||||
LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,(HL)
|
|
||||||
EXX
|
|
||||||
AND #0F
|
|
||||||
LD D,A
|
|
||||||
EX AF,AF'
|
|
||||||
LD E,A
|
|
||||||
EXX
|
|
||||||
; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
|
|
||||||
XOR A
|
|
||||||
; ¯à®¢¥àª á«ã¦. ª« áâ¥àë ¬« ¤è¥£® á«®¢ ª« áâ¥à
|
|
||||||
LD HL,SERVICE_SECTORS.FAT32.Low
|
|
||||||
SBC HL,DE
|
|
||||||
; ¯à®¢¥àª á«ã¦. ª« áâ¥àë áâ à襣® á«®¢ ª« áâ¥à
|
|
||||||
EXX
|
|
||||||
LD HL,SERVICE_SECTORS.FAT32.High
|
|
||||||
SBC HL,DE
|
|
||||||
POP HL
|
|
||||||
EXX
|
|
||||||
POP BC
|
|
||||||
LD A,B
|
|
||||||
OUT (SLOT3),A
|
|
||||||
POP HL
|
|
||||||
LD A,0
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
;¢å®¤: HL - ®¬¥à ª« áâ¥à
|
;¢å®¤: HL - ®¬¥à ª« áâ¥à
|
||||||
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
||||||
; CF - çñâë©/¥çñâë© ¤à¥á ª« áâ¥à
|
; CF - çñâë©/¥çñâë© ¤à¥á ª« áâ¥à
|
||||||
@ -1302,7 +921,6 @@ GET_FAT16_CELL: LD A,H
|
|||||||
AND FAT_CACHE.Part_Mask_16
|
AND FAT_CACHE.Part_Mask_16
|
||||||
;
|
;
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||||
; [x] fat32 ¯®¬¥ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ìè¥ ®¬¥à ¡«®ª ¢ ॣ. A ¯¥à¥¤ ¢ «áï
|
|
||||||
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||||
CP E
|
CP E
|
||||||
LD E,A
|
LD E,A
|
||||||
@ -1312,167 +930,6 @@ GET_FAT16_CELL: LD A,H
|
|||||||
ADD HL,DE ; ï祩ªã FAT
|
ADD HL,DE ; ï祩ªã FAT
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
;¢å®¤: HL':HL - ®¬¥à ª« áâ¥à
|
|
||||||
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
|
||||||
GET_FAT32_CELL: ; ¤¢¨£ ¥¬ ¢«¥¢® HL':H
|
|
||||||
LD A,H
|
|
||||||
EXX
|
|
||||||
LD C,A
|
|
||||||
LD A,H
|
|
||||||
AND FAT_CACHE.Size_Mask_32 ; #0F
|
|
||||||
LD H,A
|
|
||||||
LD A,C
|
|
||||||
;
|
|
||||||
LD B,FAT_CACHE.Degree ; 4 ᤢ¨£
|
|
||||||
.loop_block: RLCA ; << H
|
|
||||||
RL L ; << L'
|
|
||||||
RL H ; << H'
|
|
||||||
DJNZ .loop_block
|
|
||||||
EXX
|
|
||||||
; ‚ ¨â®£¥ âãâ ¢ HL' ®¬¥à ¡«®ª FAT
|
|
||||||
;
|
|
||||||
; HL - FAT32 OFFSET (FROM CASH)
|
|
||||||
LD A,H
|
|
||||||
AND FAT_CACHE.Size_Mask_32 ; #0F
|
|
||||||
LD H,A
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
PUSH HL ; [ç] fat32 á®åà 塞 á«ãç ©, ¥á«¨ READ_FAT_TABLE ¨á¯®àâ¨â
|
|
||||||
AND A
|
|
||||||
;
|
|
||||||
EXX
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
|
||||||
SBC HL,DE
|
|
||||||
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
|
|
||||||
POP HL
|
|
||||||
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
|
||||||
ADD HL,DE ; ï祩ªã FAT
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
/*
|
|
||||||
;-----------------
|
|
||||||
; HL - CLUSTER
|
|
||||||
; DE - (CLUSTER)
|
|
||||||
R_F_FAT: PUSH HL
|
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
|
||||||
CP "2"
|
|
||||||
JP Z,.R_F_F12
|
|
||||||
;
|
|
||||||
.R_F_F16: LD DE,768 ; DE - CLUSTERS IN CASH
|
|
||||||
XOR A
|
|
||||||
.R_F_00H: INC A ; HL - CLUSTER ; [ ] fat32 âãâ áçñâ稪 ¢ 32 ¡¨â 㦥 ¨«¨ 16, ¥á«¨ áâà ¨æã FF ¨á¯®«ì§®¢ âì
|
|
||||||
SBC HL,DE
|
|
||||||
JP NC,.R_F_00H
|
|
||||||
ADD HL,DE
|
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
|
||||||
DEC A
|
|
||||||
LD BC,(FatBuffer.CacheBlock) ; A - ELEMENT OF CASH
|
|
||||||
CP C
|
|
||||||
CALL NZ,RE_FAT
|
|
||||||
LD DE,FAT_SECTORS_BUFFER
|
|
||||||
ADD HL,DE
|
|
||||||
LD E,(HL)
|
|
||||||
INC HL
|
|
||||||
LD D,(HL)
|
|
||||||
LD HL,#FFEF
|
|
||||||
;
|
|
||||||
.exit: XOR A
|
|
||||||
SBC HL,DE
|
|
||||||
POP HL
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.R_F_F12 LD D,H
|
|
||||||
LD E,L
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,DE
|
|
||||||
RR H
|
|
||||||
RR L
|
|
||||||
PUSH AF
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,BC
|
|
||||||
EX DE,HL
|
|
||||||
XOR A ; DE - SIZE SECTOR * 3
|
|
||||||
.R_F_00: INC A ; HL - FAT OFFSET
|
|
||||||
SBC HL,DE
|
|
||||||
JP NC,.R_F_00
|
|
||||||
ADD HL,DE
|
|
||||||
DEC A
|
|
||||||
LD BC,(FatBuffer.CacheBlock)
|
|
||||||
CP C
|
|
||||||
CALL NZ,RE_FAT
|
|
||||||
LD DE,FAT_SECTORS_BUFFER
|
|
||||||
ADD HL,DE
|
|
||||||
POP AF
|
|
||||||
LD E,(HL)
|
|
||||||
INC HL
|
|
||||||
LD D,(HL)
|
|
||||||
JP C,.R_F_F01
|
|
||||||
LD A,D
|
|
||||||
AND #0F
|
|
||||||
LD D,A
|
|
||||||
JR .R_F_F02
|
|
||||||
;
|
|
||||||
.R_F_F01: LD A,E
|
|
||||||
AND #F0
|
|
||||||
RR D ; ¢¯à ¢® 4 ¡¨âa
|
|
||||||
RRA
|
|
||||||
RR D
|
|
||||||
RRA
|
|
||||||
RR D
|
|
||||||
RRA
|
|
||||||
RR D
|
|
||||||
RRA
|
|
||||||
LD E,A
|
|
||||||
;
|
|
||||||
.R_F_F02: LD HL,#0FEF
|
|
||||||
JR .exit
|
|
||||||
; XOR A
|
|
||||||
; SBC HL,DE
|
|
||||||
; POP HL
|
|
||||||
; RET
|
|
||||||
;
|
|
||||||
*/
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
/*
|
|
||||||
RE_FAT: PUSH HL
|
|
||||||
LD L,A
|
|
||||||
LD H,0
|
|
||||||
LD (FatBuffer.CacheBlock),HL
|
|
||||||
LD E,L
|
|
||||||
LD D,H
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,DE
|
|
||||||
LD IX,0
|
|
||||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
|
||||||
ADD HL,DE
|
|
||||||
EX DE,HL
|
|
||||||
JR NC,.NOINX
|
|
||||||
INC IX
|
|
||||||
.NOINX: LD HL,(PARTITION_START_L)
|
|
||||||
ADD HL,DE
|
|
||||||
EX DE,HL
|
|
||||||
LD BC,(PARTITION_START_H)
|
|
||||||
JR NC,.NOINX2
|
|
||||||
INC IX
|
|
||||||
.NOINX2: ADD IX,BC
|
|
||||||
PUSH IX
|
|
||||||
PUSH DE
|
|
||||||
POP IX
|
|
||||||
POP HL
|
|
||||||
LD DE,FAT_SECTORS_BUFFER
|
|
||||||
LD BC,3*256 + BIOS.DRV_READ
|
|
||||||
LD A,(DRIVE)
|
|
||||||
RST ToBIOS_18
|
|
||||||
POP HL
|
|
||||||
RET
|
|
||||||
*/
|
|
||||||
;
|
;
|
||||||
;RE_FAT:
|
;RE_FAT:
|
||||||
;RX01
|
;RX01
|
||||||
@ -1542,6 +999,198 @@ GET_SECTOR_OF_FAT:
|
|||||||
;
|
;
|
||||||
LD C,A
|
LD C,A
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||||
|
; DIV_for_SPC:
|
||||||
|
; LD C,A
|
||||||
|
; DEC A
|
||||||
|
; JR Z,.DIV_exit
|
||||||
|
; ;
|
||||||
|
; AND E
|
||||||
|
; LD B,A ; ®áâ ⮪
|
||||||
|
; LD A,C
|
||||||
|
; RRCA
|
||||||
|
; ;
|
||||||
|
; .DIV_loop: SRL H
|
||||||
|
; RR L
|
||||||
|
; RR D
|
||||||
|
; RR E
|
||||||
|
; RRCA
|
||||||
|
; JP NC,.DIV_loop
|
||||||
|
; LD A,B
|
||||||
|
; .DIV_exit: LD B,D
|
||||||
|
; LD C,E
|
||||||
|
; EX DE,HL
|
||||||
|
; LD H,0
|
||||||
|
; LD L,A
|
||||||
|
; RET
|
||||||
|
|
||||||
|
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
DISPLAY "SECTORS 1..3 DATA ENDS: ",/H,$,". Size: ",/D,$-ORG_ADDRESS," b. Free: ",/D,512*3-($-ORG_ADDRESS)," b."
|
||||||
|
ZERO_SECTOR_OF_BPB:
|
||||||
|
.physical EQU $$$
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
;¢å®¤: HL':HL - ®¬¥à ª« áâ¥à
|
||||||
|
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
||||||
|
GET_FAT32_CELL: ; ¤¢¨£ ¥¬ ¢«¥¢® HL':H
|
||||||
|
LD A,H
|
||||||
|
EXX
|
||||||
|
LD C,A
|
||||||
|
LD A,H
|
||||||
|
AND FAT_CACHE.Size_Mask_32 ; #0F
|
||||||
|
LD H,A
|
||||||
|
LD A,C
|
||||||
|
;
|
||||||
|
LD B,FAT_CACHE.Degree ; 4 ᤢ¨£
|
||||||
|
.loop_block: RLCA ; << H
|
||||||
|
RL L ; << L'
|
||||||
|
RL H ; << H'
|
||||||
|
DJNZ .loop_block
|
||||||
|
EXX
|
||||||
|
; ‚ ¨â®£¥ âãâ ¢ HL' ®¬¥à ¡«®ª FAT
|
||||||
|
;
|
||||||
|
; HL - FAT32 OFFSET (FROM CASH)
|
||||||
|
LD A,H
|
||||||
|
AND FAT_CACHE.Size_Mask_32 ; #0F
|
||||||
|
LD H,A
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
PUSH HL
|
||||||
|
AND A
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
|
||||||
|
SBC HL,DE
|
||||||
|
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
|
||||||
|
POP HL
|
||||||
|
LD DE,FATPAGE.cache ; ç «® ª¥è FAT-
|
||||||
|
ADD HL,DE ; ï祩ªã FAT
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------------------------------
|
||||||
|
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
; ¢å®¤: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||||
|
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32)
|
||||||
|
; ¢ë室: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||||
|
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®)
|
||||||
|
; de - ®¬¥à á«¥¤. ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||||
|
; de' - ®¬¥à á«¥¤. ª« áâ¥à (áâ à襥 á«®¢®)
|
||||||
|
; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥
|
||||||
|
; CF - ª®¥æ 楯®çª¨
|
||||||
|
;------------------------------------------------------------------------------------------------
|
||||||
|
READ_FROM_FAT: PUSH HL
|
||||||
|
;
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
LD A,SHARED_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
|
CP FAT_TYPE.x16
|
||||||
|
JR C,.FAT12
|
||||||
|
JR NZ,.FAT32
|
||||||
|
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ®¬¥à
|
||||||
|
.FAT16: CALL GET_FAT16_CELL
|
||||||
|
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
;
|
||||||
|
LD HL,SERVICE_SECTORS.FAT16
|
||||||
|
.exit: POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
|
||||||
|
XOR A
|
||||||
|
; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||||
|
SBC HL,DE
|
||||||
|
POP HL
|
||||||
|
EXX
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
LD D,A
|
||||||
|
LD E,A
|
||||||
|
EXX
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;
|
||||||
|
.FAT12: CALL GET_FAT12_CELL
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
LD HL,SERVICE_SECTORS.FAT12
|
||||||
|
JR NC,.Correct_2
|
||||||
|
.Correct_1: LD A,E
|
||||||
|
AND #F0
|
||||||
|
DUP 4 ; ¢¯à ¢® 4 ¡¨âa
|
||||||
|
RR D
|
||||||
|
RRA
|
||||||
|
EDUP
|
||||||
|
LD E,A
|
||||||
|
JR .exit
|
||||||
|
;
|
||||||
|
.Correct_2: LD A,D
|
||||||
|
AND #0F
|
||||||
|
LD D,A
|
||||||
|
JR .exit
|
||||||
|
;
|
||||||
|
.FAT32: EXX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
CALL GET_FAT32_CELL
|
||||||
|
; ¯à®ç¨â âì ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
INC HL
|
||||||
|
; ¯à®ç¨â âì áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,(HL)
|
||||||
|
EXX
|
||||||
|
AND #0F
|
||||||
|
LD D,A
|
||||||
|
EX AF,AF'
|
||||||
|
LD E,A
|
||||||
|
EXX
|
||||||
|
; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
|
||||||
|
XOR A
|
||||||
|
; ¯à®¢¥àª á«ã¦. ª« áâ¥àë ¬« ¤è¥£® á«®¢ ª« áâ¥à
|
||||||
|
LD HL,SERVICE_SECTORS.FAT32.Low
|
||||||
|
SBC HL,DE
|
||||||
|
; ¯à®¢¥àª á«ã¦. ª« áâ¥àë áâ à襣® á«®¢ ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
LD HL,SERVICE_SECTORS.FAT32.High
|
||||||
|
SBC HL,DE
|
||||||
|
POP HL
|
||||||
|
EXX
|
||||||
|
POP BC
|
||||||
|
LD A,B
|
||||||
|
OUT (SLOT3),A
|
||||||
|
POP HL
|
||||||
|
LD A,0
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
DISPLAY "SECTORS 0 DATA ENDS:\t\t",/H,$,". Size: ",/D,$-ZERO_SECTOR_OF_BPB," b. Free: ",/D,LOADER_IN_BPB.MAX_SIZE-($-ZERO_SECTOR_OF_BPB)," b."
|
||||||
|
DISPLAY "_sBOOT_SECTOR.BOOT_CODE ", /H, _sBOOT_SECTOR.BOOT_CODE
|
||||||
|
DISPLAY "_sBOOT_SECTOR.PARTITION_TABLE ", /H, _sBOOT_SECTOR.PARTITION_TABLE
|
||||||
|
DISPLAY "_sBOOT_SECTOR.MBR_SIGNATURE ", /H, _sBOOT_SECTOR.MBR_SIGNATURE
|
||||||
|
ZERO_SECTOR_OF_BPB_END:
|
||||||
|
ZERO_SECTOR_OF_BPB.Size EQU ZERO_SECTOR_OF_BPB_END - ZERO_SECTOR_OF_BPB
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
//// //// //// //// //// //// //// //// ////
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; Area for boot sector [512Bytes]
|
; Area for boot sector [512Bytes]
|
||||||
;BOOT _sBOOT_SECTOR_PARAMS = $
|
;BOOT _sBOOT_SECTOR_PARAMS = $
|
||||||
@ -1554,72 +1203,6 @@ FAT_SECTORS_BUFFER EQU #C000
|
|||||||
VALUE EQU DIR_BUFFER+512
|
VALUE EQU DIR_BUFFER+512
|
||||||
|
|
||||||
FatBuffer _sysFatBuffer = VALUE
|
FatBuffer _sysFatBuffer = VALUE
|
||||||
/*
|
|
||||||
.DRIVE: BYTE #FF
|
|
||||||
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32
|
|
||||||
.CacheBlock: WORD #0000
|
|
||||||
.CacheUpdated: BYTE #00
|
|
||||||
.RootDirStartCluster_L: WORD #0000
|
|
||||||
.RootDirStartCluster_H: WORD #0000 ; fat32
|
|
||||||
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
|
||||||
.FAT1_SEC_H: WORD #0000 ; fat32
|
|
||||||
.FAT2_SEC_L: WORD #0000
|
|
||||||
.FAT2_SEC_H: WORD #0000 ; fat32
|
|
||||||
.Number_Of_FATs BYTE #02
|
|
||||||
.SectorsPerFAT_L WORD #0000
|
|
||||||
.SectorsPerFAT_H BYTE #00
|
|
||||||
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
|
||||||
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
|
||||||
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
|
|
||||||
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
|
||||||
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high
|
|
||||||
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
|
||||||
.END_CHAIN_CLUSTER_L: WORD #FFFF
|
|
||||||
.END_CHAIN_CLUSTER_H: WORD #0FFF
|
|
||||||
.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
|
|
||||||
.UPD_FSINFO: BYTE 0
|
|
||||||
.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
|
||||||
.FREE_CLUSTERS_COUNT_H: WORD #FFFF
|
|
||||||
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
|
||||||
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
|
||||||
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
|
||||||
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
|
||||||
|
|
||||||
|
|
||||||
FatBuffer EQU VALUE
|
|
||||||
.CacheBlock EQU FatBuffer+0 ; FatCache
|
|
||||||
.FAT1_SEC_L EQU FatBuffer+2 ; FAT_FRM MSD_FAT_SEC first sector FAT
|
|
||||||
.RootDirFirstSector_H EQU FatBuffer+4 ; DIR_FRH MSD_CAT_SEC first sector DIR
|
|
||||||
.RootDirFirstSector_L EQU FatBuffer+6 ; DIR_FRL MSD_CAT_SEC first sector DIR
|
|
||||||
.DirSizeInSectors EQU FatBuffer+8 ; DIR_S_S DIR_SEC_SIZE
|
|
||||||
.FirstDataSector_L EQU FatBuffer+9 ; DAT_FRM MSD_DAT_SEC
|
|
||||||
.FAT_TYPE EQU FatBuffer+11; FAT_TYP ; !FIXIT TYPE FAT (#32 - 12bit, #36 - 16bit)
|
|
||||||
.BytesPerCluster EQU FatBuffer+12; CLU_LEN
|
|
||||||
.FAT1_SEC_H EQU FatBuffer+14 ;
|
|
||||||
.SectorsPerFAT_L EQU FatBuffer+16
|
|
||||||
.SectorsPerFAT_H EQU FatBuffer+18
|
|
||||||
.FAT2_SEC_L EQU FatBuffer+20
|
|
||||||
.FAT2_SEC_H EQU FatBuffer+22
|
|
||||||
;.END_CHAIN_CLUSTER_L EQU FatBuffer+14; ENDCLUS
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
; FatCache EQU VALUE+0 ; .CacheBlock
|
|
||||||
; FAT_FRM EQU FatCache+2 ; .FAT1_SEC_L MSD_FAT_SEC first sector FAT
|
|
||||||
; DIR_FRH EQU FatCache+4 ; .RootDirFirstSector_H MSD_CAT_SEC first sector DIR
|
|
||||||
; DIR_FRL EQU FatCache+6 ; .RootDirFirstSector_L MSD_CAT_SEC first sector DIR
|
|
||||||
; DIR_S_S EQU FatCache+8 ; .DirSizeInSectors DIR_SEC_SIZE
|
|
||||||
; DAT_FRM EQU FatCache+9 ; .FirstDataSector_L MSD_DAT_SEC
|
|
||||||
; FAT_TYP EQU FatCache+11; .FAT_TYPE ; !FIXIT TYPE FAT (#32 - 12bit, #36 - 16bit)
|
|
||||||
; CLU_LEN EQU FatCache+12; .BytesPerCluster
|
|
||||||
; ENDCLUS EQU FatCache+14; .END_CHAIN_CLUSTER_L
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
HANDBUF EQU VALUE + _sysFatBuffer
|
HANDBUF EQU VALUE + _sysFatBuffer
|
||||||
|
|||||||
170
BOOT/boot.asm
170
BOOT/boot.asm
@ -1,6 +1,9 @@
|
|||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; CHANGELOG
|
; CHANGELOG
|
||||||
; [ ] - ®¯à¥¤¥«¥¨¥ ¯®¯ë⪨ ᤥ« âì § £àã§®çë¬ ¥ ¯¥à¢ë© à §¤¥«
|
; [x] - § £à㧪 á «î¡®£® primary active à §¤¥«
|
||||||
|
; [x] - ¯®¤¤¥à¦ª § £à㧪¨ á FAT32 à §¤¥«
|
||||||
|
; [x] - § £à㧪 á RAM ¤¨áª
|
||||||
|
; [x] - bug fixes and optimizations)))
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
@ -85,7 +88,9 @@
|
|||||||
major_version equ 2 ; áâ. ®¬¥à ¢¥àᨨ
|
major_version equ 2 ; áâ. ®¬¥à ¢¥àᨨ
|
||||||
minor_version equ 0 ; ¬«. ®¬¥à
|
minor_version equ 0 ; ¬«. ®¬¥à
|
||||||
;;
|
;;
|
||||||
SECTORS_OF_LOADER EQU 4
|
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
||||||
|
.IN_BPB EQU 1
|
||||||
|
.AFTER_BPB EQU 3
|
||||||
|
|
||||||
org_addr EQU #8000 + CLP_Buffer
|
org_addr EQU #8000 + CLP_Buffer
|
||||||
code_addr EQU BEGIN
|
code_addr EQU BEGIN
|
||||||
@ -110,7 +115,7 @@ BEGIN: in a,(SLOT3)
|
|||||||
ld de,#0146 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
|
ld de,#0146 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
|
||||||
and a
|
and a
|
||||||
sbc hl,de
|
sbc hl,de
|
||||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
;jr nc,version_ok
|
;jr nc,version_ok
|
||||||
jr z,.check_build ; ¥á«¨ ®¬¥à ¢¥àᨨ 1.70
|
jr z,.check_build ; ¥á«¨ ®¬¥à ¢¥àᨨ 1.70
|
||||||
jr nc,version_ok ; ¥á«¨ ®¬¥à ¢¥àᨨ ¡®«ìè¥ 1.70
|
jr nc,version_ok ; ¥á«¨ ®¬¥à ¢¥àᨨ ¡®«ìè¥ 1.70
|
||||||
@ -120,7 +125,7 @@ BEGIN: in a,(SLOT3)
|
|||||||
call print_string
|
call print_string
|
||||||
ld a,-1
|
ld a,-1
|
||||||
jp exit
|
jp exit
|
||||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
.check_build: ld hl,810 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
|
.check_build: ld hl,810 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
|
||||||
sbc hl,bc
|
sbc hl,bc
|
||||||
jr nc,BEGIN.old_ver
|
jr nc,BEGIN.old_ver
|
||||||
@ -315,8 +320,6 @@ write_boot_loader:
|
|||||||
jr z,write_to_floppy
|
jr z,write_to_floppy
|
||||||
cp #FA ; RAM disk
|
cp #FA ; RAM disk
|
||||||
jr z,write_to_ram_disk
|
jr z,write_to_ram_disk
|
||||||
; pop hl ; ¢®ááâ. ¡ « á á⥪
|
|
||||||
; call close_device
|
|
||||||
cp #F8 ; ¢¨â
|
cp #F8 ; ¢¨â
|
||||||
jp z,write_to_hard_disk
|
jp z,write_to_hard_disk
|
||||||
scf ; ¥§ ª®¬ë© ä®à¬ â
|
scf ; ¥§ ª®¬ë© ä®à¬ â
|
||||||
@ -348,19 +351,20 @@ write_to_floppy:
|
|||||||
ld (buffer + BOOT_SECTOR.Number_of_FATs),a ; ç¨á«® ª®¯¨© FAT-®¢
|
ld (buffer + BOOT_SECTOR.Number_of_FATs),a ; ç¨á«® ª®¯¨© FAT-®¢
|
||||||
ld hl,(buffer + BOOT_SECTOR.RESERVED_SECTORS) ; § १¥à¢. ᥪâ®à®¢
|
ld hl,(buffer + BOOT_SECTOR.RESERVED_SECTORS) ; § १¥à¢. ᥪâ®à®¢
|
||||||
ld bc,(buffer + BOOT_SECTOR.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
ld bc,(buffer + BOOT_SECTOR.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
||||||
; ld a,b
|
|
||||||
; or c
|
|
||||||
; scf
|
|
||||||
; ret z ; 0 ᥪâ®à®¢ FAT
|
|
||||||
; ;
|
|
||||||
add hl,bc
|
add hl,bc
|
||||||
ld (buffer + BOOT_SECTOR.RESERVED_SECTORS),hl ; § १¥à¢. ᥪâ®à®¢
|
ld (buffer + BOOT_SECTOR.RESERVED_SECTORS),hl ; § १¥à¢. ᥪâ®à®¢
|
||||||
dec hl
|
dec hl
|
||||||
ld de,SECTORS_OF_LOADER
|
ld de,SECTORS_OF_LOADER.AFTER_BPB
|
||||||
and a
|
and a
|
||||||
sbc hl,de
|
sbc hl,de
|
||||||
ret c
|
ret c
|
||||||
overwrite_floppy:
|
overwrite_floppy:
|
||||||
|
; ¯¥à¥ª¨¤ë¢ ¨¥ ç á⨠§ £àã§ç¨ª ¢ 0 ᥪâ®à
|
||||||
|
LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical
|
||||||
|
LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size)
|
||||||
|
LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
; § ¯¨á âì boot-ᥪâ®à § ¤
|
; § ¯¨á âì boot-ᥪâ®à § ¤
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
@ -374,7 +378,7 @@ overwrite_floppy:
|
|||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
ld ix,1 ; ¬«. à §àï¤
|
ld ix,1 ; ¬«. à §àï¤
|
||||||
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
||||||
ld bc,SECTORS_OF_LOADER*256 + Dss.DRV.Write ; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
ld bc,SECTORS_OF_LOADER.AFTER_BPB*256+Dss.DRV.Write; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
||||||
rst ToDSS.DRV
|
rst ToDSS.DRV
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -386,69 +390,27 @@ overwrite_floppy:
|
|||||||
; ¢ë室: CF-®è¨¡ª § ¯¨á¨
|
; ¢ë室: CF-®è¨¡ª § ¯¨á¨
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
write_to_ram_disk:
|
write_to_ram_disk:
|
||||||
write_to_: ld a,(disk) ; ®¬¥à § ¤ ®£® ¤¨áª
|
CALL write_no_BPB
|
||||||
ld de,#55AA
|
|
||||||
ld bc,Dss.DRV.GenIOCTL.GetParams
|
|
||||||
rst ToDSS.DRV
|
|
||||||
ex af,af'
|
|
||||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
|
||||||
ld b,a
|
|
||||||
inc c
|
|
||||||
scf
|
|
||||||
ret z ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
|
||||||
dec c
|
|
||||||
CP #80 ;!HARDCODE ⨯ ¤à ©¢ - HDD
|
|
||||||
JR NC,.skip_FAT_check
|
|
||||||
push bc ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
|
||||||
; [x] 02/02/2024 ¯à®¢¥àª ¢«¥§ ¥¬®áâì § £àã§ç¨ª (ç⮡ ¥ ¯®¯®àâ¨âì ä â)
|
|
||||||
LD HL,0
|
|
||||||
LD IX,0
|
|
||||||
LD DE,buffer
|
|
||||||
LD BC,1*256 + BIOS.DRV_READ
|
|
||||||
RST ToBIOS
|
|
||||||
POP BC
|
|
||||||
LD HL,(buffer + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
|
||||||
LD DE,SECTORS_OF_LOADER + 1 ; ¬¨¨¬ «ì®¥ à ááâ®ï¨¥ ¤à ©¢¥ ®â ã«¥¢®£® ᥪâ®à ¤® ä â (¤«¨ § £àã§ç¨ª + 1)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
RET C
|
RET C
|
||||||
|
; buffer = sector 0
|
||||||
;
|
;
|
||||||
.skip_FAT_check:;
|
JR write_to_BPB
|
||||||
push bc
|
|
||||||
ld a,b
|
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
|
||||||
ld ix,1 ; ¬«. à §àï¤
|
|
||||||
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
|
||||||
ld bc,SECTORS_OF_LOADER*256 + BIOS.DRV_WRITE ; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
|
||||||
rst ToBIOS
|
|
||||||
;[ ] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
|
||||||
pop bc
|
|
||||||
;
|
|
||||||
ret
|
|
||||||
write_to_hard_disk:
|
write_to_hard_disk:
|
||||||
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
CALL write_to_
|
CALL write_no_BPB
|
||||||
RET C
|
RET C
|
||||||
; ¯à®¢¥àª <20>€Œ-¤¨áª
|
; buffer = sector 0
|
||||||
|
;
|
||||||
|
; ¯à®¢¥àª <20>€Œ-¤¨áª (à §¤¥«ë à ¬¤¨áª¥ ¯®ª ¥ ¯®¤¤¥à¦¨¢ îâáï)
|
||||||
LD A,B
|
LD A,B
|
||||||
CP #80-1 ;!HARDCODE HDD number
|
CP #80-1 ;!HARDCODE HDD number
|
||||||
CCF
|
JR C,write_to_BPB
|
||||||
RET NC
|
|
||||||
;
|
;
|
||||||
PUSH BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
PUSH BC
|
||||||
LD HL,0
|
CALL Read_MBR
|
||||||
LD IX,0
|
|
||||||
LD DE,buffer
|
|
||||||
LD BC,1*256 + BIOS.DRV_READ
|
|
||||||
RST ToBIOS
|
|
||||||
; check signature
|
|
||||||
LD HL,(buffer + _sBOOT_SECTOR.MBR_SIGNATURE)
|
|
||||||
LD DE,#AA55
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
POP BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
|
||||||
SCF
|
|
||||||
RET NZ
|
RET NZ
|
||||||
|
POP BC
|
||||||
PUSH BC
|
PUSH BC
|
||||||
; set active in buffer
|
; set active in buffer
|
||||||
INC C
|
INC C
|
||||||
@ -464,7 +426,6 @@ write_to_hard_disk:
|
|||||||
;
|
;
|
||||||
LD A,#80
|
LD A,#80
|
||||||
LD (HL),A
|
LD (HL),A
|
||||||
;!FIXIT fat32 not supported
|
|
||||||
PUSH HL
|
PUSH HL
|
||||||
INC HL
|
INC HL
|
||||||
INC HL
|
INC HL
|
||||||
@ -492,9 +453,16 @@ write_to_hard_disk:
|
|||||||
.next: AND A
|
.next: AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
DJNZ .loop
|
DJNZ .loop
|
||||||
; save buffer to disk
|
;
|
||||||
POP BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
JR write_to_BPB.no_push
|
||||||
ld a,b
|
write_to_BPB: PUSH BC
|
||||||
|
; ¯¥à¥ª¨¤ë¢ ¨¥ ç á⨠§ £àã§ç¨ª ¢ 0 ᥪâ®à
|
||||||
|
.no_push: LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical
|
||||||
|
LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size)
|
||||||
|
LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size
|
||||||
|
LDIR
|
||||||
|
; § ¯¨áì ¢ 0 ᥪâ®à ªã᪠§ £àã§ç¨ª
|
||||||
|
pop af ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
ld ix,0 ; ¬«. à §àï¤
|
ld ix,0 ; ¬«. à §àï¤
|
||||||
ld de,buffer ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
ld de,buffer ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
||||||
@ -502,6 +470,64 @@ write_to_hard_disk:
|
|||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
write_no_BPB: ld a,(disk) ; ®¬¥à § ¤ ®£® ¤¨áª
|
||||||
|
ld de,#55AA
|
||||||
|
ld bc,Dss.DRV.GenIOCTL.GetParams
|
||||||
|
rst ToDSS.DRV
|
||||||
|
ex af,af'
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
ld b,a
|
||||||
|
inc c
|
||||||
|
scf
|
||||||
|
ret z ; !TODO § £à㧪 á à áè¨à¥®£® à §¤¥« ¥ ¯®¤¤¥à¦¨¢ ¥âáï
|
||||||
|
dec c
|
||||||
|
CP #80 ;!HARDCODE ⨯ ¤à ©¢ - HDD
|
||||||
|
JR NC,.skip_FAT_check
|
||||||
|
PUSH BC
|
||||||
|
; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
||||||
|
; A - PHISICAL DRIVE NUMBER
|
||||||
|
; [x] 02/02/2024 ¯à®¢¥àª ¢«¥§ ¥¬®áâì § £àã§ç¨ª (ç⮡ ¥ ¯®¯®àâ¨âì ä â)
|
||||||
|
CALL Read_MBR
|
||||||
|
RET NZ
|
||||||
|
POP BC
|
||||||
|
LD HL,(buffer + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||||
|
; ¬¨¨¬ «ì®¥ à ááâ®ï¨¥ ¤à ©¢¥ ®â ã«¥¢®£® ᥪâ®à ¤® ä â (¤«¨ § £àã§ç¨ª + 1)
|
||||||
|
LD DE,SECTORS_OF_LOADER.AFTER_BPB + 1
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
.skip_FAT_check:;
|
||||||
|
push bc
|
||||||
|
ld a,b
|
||||||
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
|
ld ix,1 ; ¬«. à §àï¤
|
||||||
|
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
||||||
|
ld bc,SECTORS_OF_LOADER.AFTER_BPB*256+BIOS.DRV_WRITE; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
||||||
|
rst ToBIOS
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
pop bc
|
||||||
|
;
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
; in: a - drive
|
||||||
|
; out CF = 1.
|
||||||
|
; ZF = 1 - OK,
|
||||||
|
; ZF = 0 - error
|
||||||
|
Read_MBR: LD HL,0
|
||||||
|
LD IX,0
|
||||||
|
LD DE,buffer
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
LD HL,(buffer + _sBOOT_SECTOR.MBR_SIGNATURE)
|
||||||
|
LD DE,#AA55
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
; ‚뤥«¨âì § ¤ ë© ¤¨áª ¨§ ª®¬-áâப¨
|
; ‚뤥«¨âì § ¤ ë© ¤¨áª ¨§ ª®¬-áâப¨
|
||||||
;
|
;
|
||||||
@ -867,6 +893,8 @@ write_file: ld a,FAT_ATTR.ARCHIVE ;
|
|||||||
; „Ž‘-§ £àã§ç¨ª
|
; „Ž‘-§ £àã§ç¨ª
|
||||||
code_loader: include 'dssboot.asm' ; 㨢¥àá «ìë© § £àã§ç¨ª ¤«ï áâ ண® ¨ ®¢®£® ¤®á
|
code_loader: include 'dssboot.asm' ; 㨢¥àá «ìë© § £àã§ç¨ª ¤«ï áâ ண® ¨ ®¢®£® ¤®á
|
||||||
code_loader.size EQU $-code_loader
|
code_loader.size EQU $-code_loader
|
||||||
|
ASSERT SECTORS_OF_LOADER*512 >= (code_loader.size), "incorrect value of the SECTORS_OF_LOADER variable"
|
||||||
|
|
||||||
|
|
||||||
DISPLAY " dssboot size: ", /D,code_loader.size, " bytes. Sectors: ",/D,(code_loader.size/512 + (code_loader.size mod 512)/(code_loader.size mod 512))
|
DISPLAY " dssboot size: ", /D,code_loader.size, " bytes. Sectors: ",/D,(code_loader.size/512 + (code_loader.size mod 512)/(code_loader.size mod 512))
|
||||||
|
|
||||||
|
|||||||
@ -876,7 +876,7 @@ GET_FAT32_CELL:
|
|||||||
LD H,A
|
LD H,A
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
PUSH HL ; [ç] fat32 á®åà 塞 á«ãç ©, ¥á«¨ READ_FAT_TABLE ¨á¯®àâ¨â
|
PUSH HL ; [x] fat32 á®åà 塞 á«ãç ©, ¥á«¨ READ_FAT_TABLE ¨á¯®àâ¨â
|
||||||
AND A
|
AND A
|
||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user