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
903
BOOT/DSSBOOT.ASM
903
BOOT/DSSBOOT.ASM
File diff suppressed because it is too large
Load Diff
240
BOOT/boot.asm
240
BOOT/boot.asm
@ -1,6 +1,9 @@
|
|||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; CHANGELOG
|
; CHANGELOG
|
||||||
; [ ] - ®¯à¥¤¥«¥¨¥ ¯®¯ë⪨ ᤥ« âì § £àã§®çë¬ ¥ ¯¥à¢ë© à §¤¥«
|
; [x] - § £à㧪 á «î¡®£® primary active à §¤¥«
|
||||||
|
; [x] - ¯®¤¤¥à¦ª § £à㧪¨ á FAT32 à §¤¥«
|
||||||
|
; [x] - § £à㧪 á RAM ¤¨áª
|
||||||
|
; [x] - bug fixes and optimizations)))
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
@ -20,41 +23,41 @@
|
|||||||
;
|
;
|
||||||
STRUCT _sysFatBuffer
|
STRUCT _sysFatBuffer
|
||||||
;.DRIVE: BYTE #FF
|
;.DRIVE: BYTE #FF
|
||||||
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32
|
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32
|
||||||
.CacheBlock: WORD #0000
|
.CacheBlock: WORD #0000
|
||||||
;.CacheUpdated: BYTE #00
|
;.CacheUpdated: BYTE #00
|
||||||
;.SectorsPerBank: BYTE #00
|
;.SectorsPerBank: BYTE #00
|
||||||
;.RootDirStartCluster_L: WORD #0000
|
;.RootDirStartCluster_L: WORD #0000
|
||||||
;.RootDirStartCluster_H: WORD #0000 ; fat32
|
;.RootDirStartCluster_H: WORD #0000 ; fat32
|
||||||
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||||
.FAT1_SEC_H: WORD #0000 ; fat32
|
.FAT1_SEC_H: WORD #0000 ; fat32
|
||||||
;.FAT2_SEC_L: WORD #0000
|
;.FAT2_SEC_L: WORD #0000
|
||||||
;.FAT2_SEC_H: WORD #0000 ; fat32
|
;.FAT2_SEC_H: WORD #0000 ; fat32
|
||||||
;.Number_Of_FATs BYTE #02
|
;.Number_Of_FATs BYTE #02
|
||||||
.SectorsPerFAT_L WORD #0000
|
.SectorsPerFAT_L WORD #0000
|
||||||
.SectorsPerFAT_H BYTE #00
|
.SectorsPerFAT_H BYTE #00
|
||||||
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
|
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
|
||||||
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
||||||
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high
|
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high
|
||||||
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
||||||
;.END_CHAIN_CLUSTER_L: WORD #FFFF
|
;.END_CHAIN_CLUSTER_L: WORD #FFFF
|
||||||
;.END_CHAIN_CLUSTER_H: WORD #0FFF
|
;.END_CHAIN_CLUSTER_H: WORD #0FFF
|
||||||
;.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
;.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
;.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
;.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
;.BytesPerSector: WORD #0000
|
;.BytesPerSector: WORD #0000
|
||||||
.SectorsPerCluster: BYTE #00
|
.SectorsPerCluster: BYTE #00
|
||||||
;.FSINFO_Sector: WORD #01
|
;.FSINFO_Sector: WORD #01
|
||||||
;.BPB_SERIAL_NUMBER: DWORD #00000000
|
;.BPB_SERIAL_NUMBER: DWORD #00000000
|
||||||
;.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
;.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||||
;.UPD_FSINFO: BYTE 0
|
;.UPD_FSINFO: BYTE 0
|
||||||
;.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
;.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
||||||
;.FREE_CLUSTERS_COUNT_H: WORD #FFFF
|
;.FREE_CLUSTERS_COUNT_H: WORD #FFFF
|
||||||
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||||
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
||||||
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
||||||
ENDS
|
ENDS
|
||||||
|
|
||||||
include 'shared_includes/constants/sp2000.inc'
|
include 'shared_includes/constants/sp2000.inc'
|
||||||
@ -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
|
RET C
|
||||||
ld bc,Dss.DRV.GenIOCTL.GetParams
|
; buffer = sector 0
|
||||||
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
|
|
||||||
;
|
;
|
||||||
.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,16 +453,81 @@ 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
|
|
||||||
ld a,b
|
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
|
||||||
ld ix,0 ; ¬«. à §àï¤
|
|
||||||
ld de,buffer ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
|
||||||
ld bc,1*256 + BIOS.DRV_WRITE ; § ¯¨á âì 1 ᥪâ®à
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
;
|
;
|
||||||
|
JR write_to_BPB.no_push
|
||||||
|
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 ix,0 ; ¬«. à §àï¤
|
||||||
|
ld de,buffer ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
||||||
|
ld bc,1*256 + BIOS.DRV_WRITE ; § ¯¨á âì 1 ᥪâ®à
|
||||||
|
RST ToBIOS
|
||||||
|
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