mirror of
https://github.com/Tolik-Trek/FORMAT.git
synced 2026-06-15 09:21:40 +03:00
в общем FAT32 работает
This commit is contained in:
parent
da1d4e1cb7
commit
209709448f
@ -1 +1 @@
|
|||||||
Subproject commit c020ce3b569f171558e159af931aca3a0fdb78bf
|
Subproject commit 440cb45e755dbb4c4c00ac1d193a6701c5684704
|
||||||
@ -1,3 +1,16 @@
|
|||||||
|
;ÚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¿
|
||||||
|
;³ DSS Drive Formatter for Sprinter ³
|
||||||
|
;³ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ³
|
||||||
|
;³ Tolik_Trek ³
|
||||||
|
;³ 2026 ³
|
||||||
|
;ÀÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÙ
|
||||||
|
|
||||||
|
INCLUDE "shared_includes/constants/SP2000.inc"
|
||||||
|
INCLUDE "shared_includes/constants/bios_equ.inc"
|
||||||
|
INCLUDE "shared_includes/constants/dss_equ.inc"
|
||||||
|
INCLUDE "shared_includes/structures/FileSystem.inc"
|
||||||
|
|
||||||
|
|
||||||
;ÚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¿
|
;ÚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¿
|
||||||
;³ FORMAT - Disk Format Utility for Sprinter ³
|
;³ FORMAT - Disk Format Utility for Sprinter ³
|
||||||
;³ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ³
|
;³ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ³
|
||||||
@ -56,6 +69,8 @@ main: DI
|
|||||||
CALL prepare
|
CALL prepare
|
||||||
JR NC,.ok_drive
|
JR NC,.ok_drive
|
||||||
;
|
;
|
||||||
|
CALL FAT32_FORMAT
|
||||||
|
;
|
||||||
LD A,"\a" ; bell
|
LD A,"\a" ; bell
|
||||||
SYS ESTEX_pchar
|
SYS ESTEX_pchar
|
||||||
LD DE,ProcessErr_Msg.ptr
|
LD DE,ProcessErr_Msg.ptr
|
||||||
@ -784,17 +799,6 @@ badClust_Msg: DB cr,lf,"Bad cluster size.",cr,lf,cr,lf,0
|
|||||||
|
|
||||||
buff EQU ( high $ + ((low $)<?1) ) * 256
|
buff EQU ( high $ + ((low $)<?1) ) * 256
|
||||||
|
|
||||||
; ALIGN 256
|
|
||||||
; buff:
|
|
||||||
|
|
||||||
|
|
||||||
; equ ($/80h)*80h+80h
|
|
||||||
|
|
||||||
|
|
||||||
DISPLAY "programm size: ",$-EXEHeader
|
|
||||||
Loader_End:
|
|
||||||
DISPLAY "last address: ",$
|
|
||||||
; SAVEBIN "format.exe",EXEHeader,$-EXEHeader
|
|
||||||
|
|
||||||
|
|
||||||
IFUSED FAT32_FORMAT
|
IFUSED FAT32_FORMAT
|
||||||
@ -841,48 +845,9 @@ BOOT_SECTOR EQU #00
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
!RESERVED_SECTORS: predefined (¯®ª )
|
|
||||||
.FAT12_FDD EQU 1
|
|
||||||
.FAT12_HDD
|
|
||||||
.FAT16_HDD
|
|
||||||
.FAT32_HDD EQU 32
|
|
||||||
|
|
||||||
CALCULATED_FAT_PARAMETERS:
|
|
||||||
.FAT_TYPE BYTE TABLES.FAT12 ; [x]
|
|
||||||
.BytesPerSector: WORD #200 ; predefined ; [x]
|
|
||||||
.SectorsPerCluster: BYTE 32 ; predefined ; [x]
|
|
||||||
.RESERVED_SECTORS: WORD 0 ; [x]
|
|
||||||
.Number_of_FATs: BYTE 2 ; predefined ;
|
|
||||||
.FilesInRootDIR: WORD 0 ; FAT32 constant ; [ ] FAT ; [x] FAT32
|
|
||||||
.SectorsPerDrive: WORD 0 ; FAT32 constant ; [x] +-
|
|
||||||
.DRIVE_TYPE: WORD 0 ; ; [x] +-
|
|
||||||
.SectorsPerFAT16: WORD 0 ; FAT32 constant ;
|
|
||||||
.HEADS WORD 0 ;
|
|
||||||
.HIDDEN DWORD 0 ; ®â ç « MBR, extMBR ; [x]
|
|
||||||
.BPB_BIG_TOTAL_SECTORS_L WORD 0 ; [x] +-
|
|
||||||
.BPB_BIG_TOTAL_SECTORS_H WORD 0 ; [x] +-
|
|
||||||
; FAT 12, FAT 16
|
|
||||||
.BPB_PHISICAL_DRIVE_NUMBER BYTE #80 ; [x]
|
|
||||||
.reserved_1 BYTE 0 ;
|
|
||||||
.FAT.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
|
||||||
.FAT.SERIAL_NUMBER DWORD 0 ;
|
|
||||||
.FAT.LABEL TEXT 11 ;
|
|
||||||
.ID_FAT TEXT 8 ;
|
|
||||||
; FAT32
|
|
||||||
.SectorsPerFAT32 DWORD 0 ;
|
|
||||||
.MainFATnumber WORD 0 ; BPB_ExtFlags ;
|
|
||||||
.Version WORD 0 ; constant ;
|
|
||||||
.RootDirStartCluster DWORD 2 ;
|
|
||||||
.FSINFO_Sector WORD 1 ; constant ;
|
|
||||||
.CopyBootSector WORD 6 ; constant ;
|
|
||||||
.reserved_block: BLOCK 12 ; constant ;
|
|
||||||
.FDD_Number BYTE 0 ;
|
|
||||||
.reserved_2: BYTE 0 ; constant ;
|
|
||||||
.FAT32.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
|
||||||
.FAT32.SERIAL_NUMBER DWORD 0 ;
|
|
||||||
.FAT32.LABEL TEXT 11 ;
|
|
||||||
.ID_FAT32 TEXT 8 ; constant ;
|
|
||||||
; #5A ;
|
|
||||||
|
|
||||||
|
|
||||||
¤«ï ᬥ饨ï FAT ¤® ªà ⮣® 4096 § 票ï:
|
¤«ï ᬥ饨ï FAT ¤® ªà ⮣® 4096 § 票ï:
|
||||||
@ -894,8 +859,28 @@ reserved_sectors = ( ((.HIDDEN + min_last_sector) & #0F)>0 ) * #10) - .HIDDEN
|
|||||||
;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
;!TODO:
|
||||||
|
; Dss.DRV.Open
|
||||||
|
; Dss.DRV.Close
|
||||||
|
|
||||||
|
|
||||||
|
; DSS Drive Formatter
|
||||||
|
FAT32_FORMAT:
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
FORMAT_FAT32: LD (.Save_SP),SP
|
|
||||||
|
MAKE_AUTO: LD (STOP_ERROR.Save_SP),SP
|
||||||
|
;!FIXIT
|
||||||
|
LD A,(FMTDISK)
|
||||||
|
LD (VARIABLES.CurrentDrive),A
|
||||||
|
;
|
||||||
|
CALL CALCULATE_FAT
|
||||||
|
CALL FORMAT_DRIVE
|
||||||
|
;!FIXIT
|
||||||
|
;CALL MAKE_ROOT_DIR_LABEL ; ¯¥à¢ ï § ¯¨áì ¢ root dir - ¬¥âª , ¯®â®¬ 㫨
|
||||||
|
RET
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
CALCULATE_FAT: ;LD (STOP_ERROR.Save_SP),SP
|
||||||
; Ž¯à¥¤¥«¥¨¥ ¯ à ¬¥â஢ ®á¨â¥«ï ¨ ¢ë¡®à FAT
|
; Ž¯à¥¤¥«¥¨¥ ¯ à ¬¥â஢ ®á¨â¥«ï ¨ ¢ë¡®à FAT
|
||||||
.STEP1: ; íâ ¤®«¦ ¡ëâì ®¡é¥© ¤«ï § ¯®«¥¨ï £¥®¬¥âਨ ¤¨áª
|
.STEP1: ; íâ ¤®«¦ ¡ëâì ®¡é¥© ¤«ï § ¯®«¥¨ï £¥®¬¥âਨ ¤¨áª
|
||||||
|
|
||||||
@ -907,19 +892,20 @@ FORMAT_FAT32: LD (.Save_SP),SP
|
|||||||
CP BIOS.Error.InvalidSubFunction
|
CP BIOS.Error.InvalidSubFunction
|
||||||
JR Z,.GetParams ; ¥á«¨ ¥â â ª®© ¯®¤äãªæ¨¨ ¢ ¤à ©¢¥à¥, ⮠ᬥ饨¥ = 0
|
JR Z,.GetParams ; ¥á«¨ ¥â â ª®© ¯®¤äãªæ¨¨ ¢ ¤à ©¢¥à¥, ⮠ᬥ饨¥ = 0
|
||||||
SCF
|
SCF
|
||||||
JR .ERROR
|
JP STOP_ERROR
|
||||||
;
|
;
|
||||||
.set_hidden: LD (CALCULATED_FAT_PARAMETERS.HIDDEN),DE
|
.set_hidden: LD (CALCULATED_FAT_PARAMETERS.HIDDEN),DE
|
||||||
LD (CALCULATED_FAT_PARAMETERS.HIDDEN + 2),HL
|
LD (CALCULATED_FAT_PARAMETERS.HIDDEN + 2),HL
|
||||||
.GetParams: LD A,(VARIABLES.CurrentDrive)
|
.GetParams: LD A,(VARIABLES.CurrentDrive)
|
||||||
LD BC,Dss.DRV.GenIOCTL.GetParams
|
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
JR C,.ERROR
|
JP C,STOP_ERROR
|
||||||
;!TODO CHECK ERROR ¥¯®¤å®¤ï騩 ¤¨áª
|
;!TODO CHECK ERROR ¥¯®¤å®¤ï騩 ¤¨áª
|
||||||
;
|
;
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
AND #F0
|
AND #F0
|
||||||
LD (CALCULATED_FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER),A
|
LD (CALCULATED_FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER),A
|
||||||
|
LD (CALCULATED_FAT_PARAMETERS.FDD_Number),A
|
||||||
; !FIXIT ¢ ਠ⠤«ï ¢¨â
|
; !FIXIT ¢ ਠ⠤«ï ¢¨â
|
||||||
LD A,H
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
@ -940,23 +926,25 @@ FORMAT_FAT32: LD (.Save_SP),SP
|
|||||||
LD (CALCULATED_FAT_PARAMETERS.BytesPerSector),BC
|
LD (CALCULATED_FAT_PARAMETERS.BytesPerSector),BC
|
||||||
; à §¬¥à ¤¨áª ¢ ¡ ©â å
|
; à §¬¥à ¤¨áª ¢ ¡ ©â å
|
||||||
CALL MUL32_POWER2
|
CALL MUL32_POWER2
|
||||||
LD (VOLUME_SIZE_BYTES),DE
|
LD (VARIABLES.VOLUME_SIZE_BYTES),DE
|
||||||
LD (VOLUME_SIZE_BYTES + 2),HL
|
LD (VARIABLES.VOLUME_SIZE_BYTES + 2),HL
|
||||||
LD (VOLUME_SIZE_BYTES + 4),A
|
LD (VARIABLES.VOLUME_SIZE_BYTES + 4),A
|
||||||
LD E,H
|
LD E,H
|
||||||
LD D,A
|
LD D,A
|
||||||
CALL AUTO_CHOOSE_FAT_PARAMS
|
CALL AUTO_CHOOSE_FAT_PARAMS
|
||||||
JR C,.ERROR
|
JR C,STOP_ERROR
|
||||||
;
|
;
|
||||||
LD A,C
|
LD A,C
|
||||||
LD (CALCULATED_FAT_PARAMETERS.FAT_TYPE),A
|
LD (CALCULATED_FAT_PARAMETERS.FAT_TYPE),A
|
||||||
CP TABLES.FAT32
|
CP TABLES.FAT32
|
||||||
LD A,(RESERVED_SECTORS.FAT32)
|
LD HL,RESERVED_SECTORS.FAT32
|
||||||
JR Z,.set_reserved_s
|
JR Z,.set_reserved_s
|
||||||
;
|
;
|
||||||
LD A,(RESERVED_SECTORS.FAT)
|
;!FIXIT ¯à®¢¥àª FDD/HDD
|
||||||
|
LD HL,RESERVED_SECTORS.FAT_HDD
|
||||||
|
;
|
||||||
.set_reserved_s:
|
.set_reserved_s:
|
||||||
LD (CALCULATED_FAT_PARAMETERS.RESERVED_SECTORS),A
|
LD (CALCULATED_FAT_PARAMETERS.RESERVED_SECTORS),HL
|
||||||
LD HL,(CALCULATED_FAT_PARAMETERS.BytesPerSector)
|
LD HL,(CALCULATED_FAT_PARAMETERS.BytesPerSector)
|
||||||
DEC HL
|
DEC HL
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
@ -966,31 +954,511 @@ FORMAT_FAT32: LD (.Save_SP),SP
|
|||||||
; á«ãç ©, ¥á«¨ â ¡«¨çë© ª« áâ¥à ¬¥ìè¥ á¥ªâ®à
|
; á«ãç ©, ¥á«¨ â ¡«¨çë© ª« áâ¥à ¬¥ìè¥ á¥ªâ®à
|
||||||
LD A,1
|
LD A,1
|
||||||
.BPS_OK: CALL C,DIV16_POWER2
|
.BPS_OK: CALL C,DIV16_POWER2
|
||||||
JR C,.ERROR
|
JR C,STOP_ERROR
|
||||||
;
|
;
|
||||||
LD (CALCULATED_FAT_PARAMETERS.SectorsPerCluster),A
|
LD (CALCULATED_FAT_PARAMETERS.SectorsPerCluster),A
|
||||||
;
|
;
|
||||||
CALL GET_DRIVE_TYPE
|
CALL GET_DRIVE_TYPE
|
||||||
JR C,.ERROR
|
JR C,STOP_ERROR
|
||||||
;
|
;
|
||||||
LD A,B
|
LD A,B
|
||||||
LD (CALCULATED_FAT_PARAMETERS.DRIVE_TYPE),A
|
LD (CALCULATED_FAT_PARAMETERS.DRIVE_TYPE),A
|
||||||
|
LD HL,(CALCULATED_FAT_PARAMETERS.SectorsPerDrive)
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR NZ,.total_sectors
|
||||||
;
|
;
|
||||||
|
LD HL,(CALCULATED_FAT_PARAMETERS.BPB_BIG_TOTAL_SECTORS_H)
|
||||||
|
LD (CALC_TOTAL_CLUSTERS.t_sec_h),HL
|
||||||
|
LD HL,(CALCULATED_FAT_PARAMETERS.BPB_BIG_TOTAL_SECTORS_L)
|
||||||
|
.total_sectors: LD (CALC_TOTAL_CLUSTERS.t_sec_l),HL
|
||||||
|
CALL CALC_TOTAL_CLUSTERS
|
||||||
|
LD HL,(CALC_TOTAL_CLUSTERS.fat_size_l)
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.FilesInRootDIR)
|
||||||
|
AND A
|
||||||
|
JR Z,.it_is_fat32
|
||||||
|
;
|
||||||
|
LD (CALCULATED_FAT_PARAMETERS.SectorsPerFAT16),HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.it_is_fat32: LD (CALCULATED_FAT_PARAMETERS.SectorsPerFAT32),HL
|
||||||
|
LD HL,(CALC_TOTAL_CLUSTERS.fat_size_h)
|
||||||
|
LD (CALCULATED_FAT_PARAMETERS.SectorsPerFAT32 + 2),HL
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
STOP_ERROR: ;
|
||||||
.ERROR: ;
|
|
||||||
.Save_SP+1: LD SP,0
|
.Save_SP+1: LD SP,0
|
||||||
;!TODO
|
;!TODO
|
||||||
|
SCF
|
||||||
;
|
;
|
||||||
RET
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
; data_sectors = total_sectors - reserved_sectors - root_dir_sectors - (num_fats * fat_sz)
|
||||||
|
; IN:
|
||||||
|
; DE:HL = total_sectors
|
||||||
|
CALC_TOTAL_CLUSTERS:
|
||||||
|
.t_sec_h+1: LD DE,0
|
||||||
|
.t_sec_l+1: LD HL,0
|
||||||
|
; data_sectors
|
||||||
|
AND A
|
||||||
|
; total_sectors - reserved_sectors
|
||||||
|
LD BC,(CALCULATED_FAT_PARAMETERS.RESERVED_SECTORS)
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,.skip_dec_DE
|
||||||
|
;
|
||||||
|
AND A
|
||||||
|
DEC DE
|
||||||
|
.skip_dec_DE: ; DE:HL = total_sectors - reserved_sectors
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
;num_fats * fat_sz32; fat_sz32 ¢ ª« áâ¥à å
|
||||||
|
.fat_size_l+1: LD BC,0
|
||||||
|
.fat_size_h+1: LD DE,0
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.Number_of_FATs)
|
||||||
|
CALL DEBCxA
|
||||||
|
;
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
PUSH IX
|
||||||
|
POP DE
|
||||||
|
;num_fats * fat_sz32 = BCDE
|
||||||
|
;
|
||||||
|
LD HL,(CALCULATED_FAT_PARAMETERS.RootDirSectors) ; !FIXIT ¯¨á âì ¯à®æ¥¤ãàã ¢ëç¨á«¥¨ï RootDirSectors ¤® ¢ë§®¢ í⮩
|
||||||
|
ADD HL,DE
|
||||||
|
JR NC,.skip_inc
|
||||||
|
;
|
||||||
|
AND A
|
||||||
|
INC BC
|
||||||
|
.skip_inc: EX DE,HL
|
||||||
|
;num_fats * fat_sz32 + root_dir_sectors = BC:DE
|
||||||
|
;
|
||||||
|
POP HL
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
POP HL
|
||||||
|
SBC HL,BC
|
||||||
|
JR C,STOP_ERROR
|
||||||
|
; data_sectors = HL:DE
|
||||||
|
;
|
||||||
|
; total_clusters
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.SectorsPerCluster)
|
||||||
|
CALL HLDE_Div_A
|
||||||
|
LD (CALCULATED_FAT_PARAMETERS.NotUsedSpace),A
|
||||||
|
; total_clusters = HL:DE
|
||||||
|
;
|
||||||
|
LD (CALCULATED_FAT_PARAMETERS.total_clusters),DE
|
||||||
|
LD (CALCULATED_FAT_PARAMETERS.total_clusters + 2),HL
|
||||||
|
; fat_size
|
||||||
|
LD B,D
|
||||||
|
LD C,E
|
||||||
|
EX DE,HL
|
||||||
|
; total_clusters = DE:BC
|
||||||
|
;
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.FAT_TYPE)
|
||||||
|
.call_calc: CALL DEBCxA
|
||||||
|
;DE:BC * A = HL:IX
|
||||||
|
;
|
||||||
|
LD BC,(CALCULATED_FAT_PARAMETERS.BytesPerSector)
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.FAT_TYPE)
|
||||||
|
CP TABLES.FAT12
|
||||||
|
JR NZ,.no_sla
|
||||||
|
;
|
||||||
|
SLA C
|
||||||
|
RL B
|
||||||
|
.no_sla: DEC BC
|
||||||
|
ADD IX,BC
|
||||||
|
JR NC,.skip_inc_HL
|
||||||
|
;
|
||||||
|
INC HL
|
||||||
|
.skip_inc_HL: INC BC
|
||||||
|
CALL HLIX_div_BC
|
||||||
|
; ®ªà㣫¥¨¥ ¢¯¥àñ¤
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR Z,.set_new_size
|
||||||
|
;
|
||||||
|
LD BC,1
|
||||||
|
ADD IX,BC
|
||||||
|
DEC C
|
||||||
|
ADC HL,BC
|
||||||
|
; fat_size = HLIX
|
||||||
|
.set_new_size: LD DE,(.fat_size_l)
|
||||||
|
LD BC,(.fat_size_h)
|
||||||
|
LD (.fat_size_l),IX
|
||||||
|
LD (.fat_size_h),HL
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
JR NZ,.next_loop
|
||||||
|
;
|
||||||
|
PUSH IX
|
||||||
|
POP HL
|
||||||
|
SBC HL,DE
|
||||||
|
RET Z
|
||||||
|
.next_loop: ;
|
||||||
|
.counter+1: LD A,32 ; loop counter
|
||||||
|
DEC A
|
||||||
|
LD (.counter),A
|
||||||
|
JP NZ,CALC_TOTAL_CLUSTERS
|
||||||
|
JP STOP_ERROR
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
IFUSED DIV_by_Shifts
|
||||||
|
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||||
|
DIV_by_Shifts: LD C,A
|
||||||
|
DEC A
|
||||||
|
JR Z,.exit
|
||||||
|
;
|
||||||
|
AND E
|
||||||
|
LD B,A ; ®áâ ⮪
|
||||||
|
LD A,C
|
||||||
|
RRCA
|
||||||
|
.loop: SRL H
|
||||||
|
RR L
|
||||||
|
RR D
|
||||||
|
RR E
|
||||||
|
RRCA
|
||||||
|
JP NC,.loop
|
||||||
|
;
|
||||||
|
LD A,B
|
||||||
|
.exit: LD B,D
|
||||||
|
LD C,E
|
||||||
|
EX DE,HL
|
||||||
|
LD H,0
|
||||||
|
LD L,A
|
||||||
|
RET
|
||||||
|
ENDIF
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
; IN:
|
||||||
|
; DEBC, A
|
||||||
|
; OUT:
|
||||||
|
; HLIX = DEBC*A
|
||||||
|
DEBCxA: LD HL,0
|
||||||
|
LD IX,0
|
||||||
|
AND A
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
.loop: ADD IX,BC
|
||||||
|
ADC HL,DE
|
||||||
|
JP C,STOP_ERROR ; ¤®å¥à
|
||||||
|
;
|
||||||
|
DEC A
|
||||||
|
JR NZ,.loop
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
total_sectors DWORD 0x10000000
|
||||||
|
reserved_sectors WORD
|
||||||
|
data_sectors DWORD
|
||||||
|
total_clusters 3 bytes 0x400000
|
||||||
|
|
||||||
|
total_clusters * 4 4 bytes
|
||||||
|
fat_sz32 max 3 bytes <EFBFBD> §¬¥à â ¡«¨æë ¢ ᥪâ®à å
|
||||||
|
|
||||||
|
data_sectors = total_sectors - reserved_sectors - (num_fats * fat_sz32)
|
||||||
|
total_clusters = data_sectors / sectors_per_cluster
|
||||||
|
fat_sz32 = (total_clusters * 4 + (bytes_per_sector - 1)) / bytes_per_sector
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
;HLIX/BC -> HLIX remainder DE
|
||||||
|
HLIX_div_BC: EX DE,HL
|
||||||
|
; Negate BC to allow add instead of sbc
|
||||||
|
XOR A
|
||||||
|
; Need to set HL to 0 anyways, so save 2cc and a byte
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
SUB C
|
||||||
|
LD C,A
|
||||||
|
SBC A,A
|
||||||
|
SUB B
|
||||||
|
LD B,A
|
||||||
|
LD A,D
|
||||||
|
CALL .sub8
|
||||||
|
RLA
|
||||||
|
LD D,A
|
||||||
|
LD A,E
|
||||||
|
CALL .sub8
|
||||||
|
RLA
|
||||||
|
LD E,A
|
||||||
|
LD A,XH
|
||||||
|
CALL .sub8
|
||||||
|
RLA
|
||||||
|
LD XH,A
|
||||||
|
LD A,XL
|
||||||
|
CALL .sub8
|
||||||
|
RLA
|
||||||
|
LD XL,A
|
||||||
|
EX DE,HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.sub8: CALL .iter1
|
||||||
|
.iter1: CALL .iter2
|
||||||
|
.iter2: CALL .sub
|
||||||
|
.sub: RLA
|
||||||
|
ADC HL,HL
|
||||||
|
JR C,.skip
|
||||||
|
;
|
||||||
|
ADD HL,BC
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
SBC HL,BC
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.skip: ADD HL,BC
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
||||||
|
;
|
||||||
|
LD HL,CALCULATED_FAT_PARAMETERS.PART1
|
||||||
|
LD DE,SECTOR_BUFFER
|
||||||
|
LD BC,CALCULATED_FAT_PARAMETERS.PART1_SIZE
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.FAT_TYPE)
|
||||||
|
CP TABLES.FAT32
|
||||||
|
;!FIXIT
|
||||||
|
JP NZ,STOP_ERROR
|
||||||
|
;
|
||||||
|
CALL MAKE_SYS_SECTORS
|
||||||
|
CALL CLEAN_SECTOR_BUFFER
|
||||||
|
; clean all fat tables at drive
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.FAT_TYPE)
|
||||||
|
CP TABLES.FAT32
|
||||||
|
LD BC,(CALCULATED_FAT_PARAMETERS.SectorsPerFAT32)
|
||||||
|
LD DE,(CALCULATED_FAT_PARAMETERS.SectorsPerFAT32 + 2)
|
||||||
|
JR Z,.its_fat32
|
||||||
|
;
|
||||||
|
LD BC,(CALCULATED_FAT_PARAMETERS.SectorsPerFAT16)
|
||||||
|
LD DE,0
|
||||||
|
.its_fat32: LD (.add_l),BC
|
||||||
|
LD (.add_h),DE
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.Number_of_FATs)
|
||||||
|
CALL DEBCxA
|
||||||
|
; HL:IX - ¢á¥£® ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
EXX
|
||||||
|
; HL':DE' - ¢á¥£® ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||||||
|
;
|
||||||
|
LD IX,(CALCULATED_FAT_PARAMETERS.RESERVED_SECTORS)
|
||||||
|
LD HL,0
|
||||||
|
EXX
|
||||||
|
.write_loop: PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
; HL:IX - ⥪ã騩 ᥪâ®à FAT
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
;
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
LD BC,1
|
||||||
|
ADD IX,BC
|
||||||
|
DEC C
|
||||||
|
ADC HL,BC
|
||||||
|
EXX
|
||||||
|
LD BC,1
|
||||||
|
POP HL
|
||||||
|
SBC HL,BC
|
||||||
|
POP DE
|
||||||
|
EX DE,HL
|
||||||
|
DEC C
|
||||||
|
SBC HL,BC
|
||||||
|
JR NZ,.write_loop
|
||||||
|
;
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,.write_loop
|
||||||
|
EXX
|
||||||
|
; make fat table
|
||||||
|
LD HL,(CALCULATED_FAT_PARAMETERS.DRIVE_TYPE)
|
||||||
|
LD H,#FF
|
||||||
|
LD (SECTOR_BUFFER),HL
|
||||||
|
LD L,H
|
||||||
|
LD (SECTOR_BUFFER + 2),HL
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.FAT_TYPE)
|
||||||
|
CP TABLES.FAT12
|
||||||
|
JR NZ,.not_fat12
|
||||||
|
; fat12
|
||||||
|
XOR A
|
||||||
|
LD (SECTOR_BUFFER + 3),A
|
||||||
|
JR .write_fat
|
||||||
|
;
|
||||||
|
.not_fat12 CP TABLES.FAT16
|
||||||
|
JR Z,.write_fat
|
||||||
|
;fat32
|
||||||
|
;
|
||||||
|
LD HL,.Fat32Data
|
||||||
|
LD DE,SECTOR_BUFFER + 3
|
||||||
|
LD BC,.Fat32Data.Size
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
.write_fat: LD A,(CALCULATED_FAT_PARAMETERS.Number_of_FATs)
|
||||||
|
LD HL,0
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
PUSH HL
|
||||||
|
POP IX
|
||||||
|
LD BC,(CALCULATED_FAT_PARAMETERS.RESERVED_SECTORS)
|
||||||
|
;
|
||||||
|
.write_tbl_fat: ADD IX,BC
|
||||||
|
ADC HL,DE
|
||||||
|
PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
; HL:IX - ⥪ã騩 ᥪâ®à FAT
|
||||||
|
;
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
;
|
||||||
|
.add_l+1: LD BC,0
|
||||||
|
.add_h+1: LD DE,0
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
DEC A
|
||||||
|
JR NZ,.write_tbl_fat
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.Fat32Data: DB #0F,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#0F
|
||||||
|
.Fat32Data.Size EQU $-.Fat32Data
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
MAKE_SYS_SECTORS:
|
||||||
|
LD HL,CALCULATED_FAT_PARAMETERS.PART2_FAT32
|
||||||
|
LD BC,CALCULATED_FAT_PARAMETERS.PART2_FAT32_SIZE + CALCULATED_FAT_PARAMETERS.PART3_SHARED_SIZE
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
LD HL,#AA55
|
||||||
|
LD (SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE),HL
|
||||||
|
;
|
||||||
|
LD HL,0
|
||||||
|
LD IX,0
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
LD HL,0
|
||||||
|
LD IX,(CALCULATED_FAT_PARAMETERS.CopyBootSector)
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
;
|
||||||
|
LD A,(CALCULATED_FAT_PARAMETERS.FAT_TYPE)
|
||||||
|
CP TABLES.FAT32
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
CALL CLEAN_SECTOR_BUFFER
|
||||||
|
LD HL,#AA55
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.SECTOR_SIGNATURE),HL
|
||||||
|
;
|
||||||
|
LD HL,#5252
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.LEAD_SIGNATURE),HL
|
||||||
|
LD HL,#4161
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.LEAD_SIGNATURE + 2),HL
|
||||||
|
;
|
||||||
|
LD HL,#7272
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE),HL
|
||||||
|
LD HL,#6141
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE + 2),HL
|
||||||
|
;
|
||||||
|
LD HL,(CALCULATED_FAT_PARAMETERS.FAT32_RootDirClusters)
|
||||||
|
LD DE,(CALCULATED_FAT_PARAMETERS.RootDirStartCluster) ; FIXED!
|
||||||
|
ADD HL,DE
|
||||||
|
LD DE,(CALCULATED_FAT_PARAMETERS.RootDirStartCluster + 2)
|
||||||
|
JR NC,.no_inc_de
|
||||||
|
;
|
||||||
|
INC DE
|
||||||
|
.no_inc_de: LD (SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER + 2),DE
|
||||||
|
;
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
LD HL,(CALCULATED_FAT_PARAMETERS.total_clusters)
|
||||||
|
LD IX,(CALCULATED_FAT_PARAMETERS.total_clusters + 2)
|
||||||
|
SBC HL,BC
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT),HL
|
||||||
|
PUSH IX
|
||||||
|
POP HL
|
||||||
|
SBC HL,DE
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT + 2),HL
|
||||||
|
;
|
||||||
|
LD IX,(CALCULATED_FAT_PARAMETERS.FSINFO_Sector)
|
||||||
|
LD HL,0
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
;
|
||||||
|
LD HL,#FFFF
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER + 2),HL
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT),HL
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT + 2),HL
|
||||||
|
INC HL
|
||||||
|
LD IX,(CALCULATED_FAT_PARAMETERS.CopyBootSector)
|
||||||
|
LD DE,(CALCULATED_FAT_PARAMETERS.FSINFO_Sector)
|
||||||
|
ADD IX,DE
|
||||||
|
PUSH IX
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
;
|
||||||
|
CALL CLEAN_SECTOR_BUFFER
|
||||||
|
LD HL,#AA55
|
||||||
|
LD (SECTOR_BUFFER + _sFSinfo.SECTOR_SIGNATURE),HL
|
||||||
|
LD HL,0
|
||||||
|
LD IX,(CALCULATED_FAT_PARAMETERS.FSINFO_Sector)
|
||||||
|
INC IX
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
POP IX
|
||||||
|
INC IX
|
||||||
|
LD HL,0
|
||||||
|
CALL WRITE_SECTOR_BUFFER
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
CLEAN_SECTOR_BUFFER:
|
||||||
|
LD HL,SECTOR_BUFFER
|
||||||
|
LD DE,SECTOR_BUFFER + 1
|
||||||
|
LD BC,4096 - 1 ; ¡ã¤ã饥, ¤«ï ᥪâ®à®¢ ¡®«ìè¥ 512
|
||||||
|
LD (HL),0
|
||||||
|
LDIR
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
;!FIXIT check error
|
||||||
|
WRITE_SECTOR_BUFFER:
|
||||||
|
LD A,(VARIABLES.CurrentDrive)
|
||||||
|
.sectors+2: LD BC,256*1 + Dss.DRV.Write
|
||||||
|
LD DE,SECTOR_BUFFER
|
||||||
|
JP ToDSS.DRV
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
;!TODO ¤®¤¥« âì ¤«ï ¤¨áª¥â
|
;!TODO ¤®¤¥« âì ¤«ï ¤¨áª¥â
|
||||||
;;;;;;;;
|
|
||||||
GET_DRIVE_TYPE: LD A,(CALCULATED_FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER)
|
GET_DRIVE_TYPE: LD A,(CALCULATED_FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER)
|
||||||
CP DRIVE_CODES.SPRINTER.ATA
|
CP DRIVE_CODES.SPRINTER.ATA
|
||||||
LD B,BOOT_SECTOR.Hard_Drive
|
LD B,BOOT_SECTOR.Hard_Drive
|
||||||
@ -998,10 +1466,10 @@ GET_DRIVE_TYPE: LD A,(CALCULATED_FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER)
|
|||||||
; ¤¨áª¥âë ¨ ª®£¤ -¨¡ã¤ì ATAPI
|
; ¤¨áª¥âë ¨ ª®£¤ -¨¡ã¤ì ATAPI
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;;;;;;;;
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
; -> DE - 4 ¨ 5 ¡ ©âë à §¬¥à à §¤¥« .
|
; -> DE - 4 ¨ 5 ¡ ©âë à §¬¥à à §¤¥« .
|
||||||
; ¤®«¦® ¡ëâì ãáâ ®¢«¥® § 票¥ VOLUME_SIZE_BYTES.
|
; ¤®«¦® ¡ëâì ãáâ ®¢«¥® § 票¥ VOLUME_SIZE_BYTES.
|
||||||
; <- DE - CLUSTER SIZE.
|
; <- DE - CLUSTER SIZE.
|
||||||
@ -1014,6 +1482,7 @@ AUTO_CHOOSE_FAT_PARAMS:
|
|||||||
LD H,(IX+1)
|
LD H,(IX+1)
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR C,.found
|
JR C,.found
|
||||||
|
JR Z,.found
|
||||||
;
|
;
|
||||||
ADD IX,BC
|
ADD IX,BC
|
||||||
DEC A
|
DEC A
|
||||||
@ -1025,7 +1494,7 @@ AUTO_CHOOSE_FAT_PARAMS:
|
|||||||
OR E
|
OR E
|
||||||
JR NZ,.found
|
JR NZ,.found
|
||||||
;
|
;
|
||||||
LD HL,(VOLUME_SIZE_BYTES + 1)
|
LD HL,(VARIABLES.VOLUME_SIZE_BYTES + 1)
|
||||||
LD DE,8
|
LD DE,8
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
RET C ; à §¤¥« ᫨誮¬ ¬ « ¤«ï FAT12 (<2048)
|
RET C ; à §¤¥« ᫨誮¬ ¬ « ¤«ï FAT12 (<2048)
|
||||||
@ -1039,13 +1508,22 @@ AUTO_CHOOSE_FAT_PARAMS:
|
|||||||
LD A,C
|
LD A,C
|
||||||
.restore_SP+1: LD SP,0
|
.restore_SP+1: LD SP,0
|
||||||
EI
|
EI
|
||||||
|
AND A
|
||||||
RET
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
; -> HLDE * BC. BC = á⥯¥ì ¤¢®©ª¨
|
; -> HLDE * BC. BC = á⥯¥ì ¤¢®©ª¨
|
||||||
; <- AHLDE
|
; <- AHLDE
|
||||||
; CF=1 - error
|
; CF=1 - error
|
||||||
MUL32_POWER2: XOR A
|
MUL32_POWER2: SRL B
|
||||||
|
RR C
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
.loop: EX DE,HL
|
.loop: EX DE,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
@ -1057,11 +1535,13 @@ MUL32_POWER2: XOR A
|
|||||||
RR C
|
RR C
|
||||||
JR NC,.loop
|
JR NC,.loop
|
||||||
;
|
;
|
||||||
EX DE,HL
|
;EX DE,HL
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
; -> HL / DE. DE = á⥯¥ì ¤¢®©ª¨
|
; -> HL / DE. DE = á⥯¥ì ¤¢®©ª¨
|
||||||
; <- A = HL / DE
|
; <- A = HL / DE
|
||||||
; CF=1 - error
|
; CF=1 - error
|
||||||
@ -1073,36 +1553,179 @@ DIV16_POWER2: XOR A
|
|||||||
RET Z ; error: ¤¥«¨¬®¥ < ¤¥«¨â¥«ï
|
RET Z ; error: ¤¥«¨¬®¥ < ¤¥«¨â¥«ï
|
||||||
CCF
|
CCF
|
||||||
RET
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
MACRO DIV_RL
|
||||||
|
RL H
|
||||||
|
RLA
|
||||||
|
ADD A,C
|
||||||
|
JR C,.exit
|
||||||
|
SUB C
|
||||||
|
.exit:
|
||||||
|
ENDM
|
||||||
|
;
|
||||||
|
;Input: HLDE is numerator, A<129 is the divisor.
|
||||||
|
;Output: HLDE is quotient, A is remainder, C is negated
|
||||||
|
HLDE_Div_A: NEG
|
||||||
|
LD C,A
|
||||||
|
XOR A
|
||||||
|
CALL .div
|
||||||
|
LD B,H
|
||||||
|
LD H,L
|
||||||
|
CALL .div
|
||||||
|
LD L,H
|
||||||
|
LD H,D
|
||||||
|
CALL .div
|
||||||
|
LD D,H
|
||||||
|
LD H,E
|
||||||
|
CALL .div
|
||||||
|
LD E,H
|
||||||
|
LD H,B
|
||||||
|
RL E
|
||||||
|
RL D
|
||||||
|
ADC HL,HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.div: DIV_RL
|
||||||
|
DIV_RL
|
||||||
|
DIV_RL
|
||||||
|
DIV_RL
|
||||||
|
DIV_RL
|
||||||
|
DIV_RL
|
||||||
|
DIV_RL
|
||||||
|
RL H
|
||||||
|
RLA
|
||||||
|
ADD A,C
|
||||||
|
RET C
|
||||||
|
SUB C
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MACRO FAT_TYPES_LINE vol_size, clu_size, fat_type
|
||||||
MACRO FAT_TYPES_LINE (vol_size, clu_size, fat_type)
|
WORD vol_size, clu_size
|
||||||
WORD vol_size, clu_size : BYTE fat_type
|
BYTE fat_type
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
MODULE TABLES
|
MODULE TABLES
|
||||||
FAT12 EQU 0
|
FAT12 EQU 3
|
||||||
FAT16 EQU 1
|
FAT16 EQU 2
|
||||||
FAT32 EQU 2
|
FAT32 EQU 4
|
||||||
; VOL SIZE CLUSTER SIZE FAT TYPE
|
; VOL SIZE CLUSTER SIZE FAT TYPE
|
||||||
FAT_TYPES: FAT_TYPES_LINE (#0800, 32768, FAT32) ; > 32768
|
FAT_TYPES: FAT_TYPES_LINE #0800, 32768, FAT32 ; > 32768
|
||||||
FAT_TYPES_LINE (#0400, 16384, FAT32) ; 16384..32768 Mb
|
FAT_TYPES_LINE #0400, 16384, FAT32 ; 16384..32768 Mb
|
||||||
FAT_TYPES_LINE (#0200, 8192, FAT32) ; 8192..16384 Mb
|
FAT_TYPES_LINE #0200, 8192, FAT32 ; 8192..16384 Mb
|
||||||
FAT_TYPES_LINE (#0100, 4096, FAT32) ; 4096..8192 Mb
|
FAT_TYPES_LINE #0100, 4096, FAT32 ; 4096..8192 Mb
|
||||||
FAT_TYPES_LINE (#0080, 32768, FAT16) ; 2048..4096 Mb
|
FAT_TYPES_LINE #0080, 32768, FAT16 ; 2048..4096 Mb
|
||||||
FAT_TYPES_LINE (#0040, 16384, FAT16) ; 1023..2048 Mb
|
FAT_TYPES_LINE #0040, 16384, FAT16 ; 1023..2048 Mb
|
||||||
FAT_TYPES_LINE (#0020, 8192, FAT16) ; 511..1023 Mb
|
FAT_TYPES_LINE #0020, 8192, FAT16 ; 511..1023 Mb
|
||||||
FAT_TYPES_LINE (#0010, 4096, FAT16) ; 256..511 Mb
|
FAT_TYPES_LINE #0010, 4096, FAT16 ; 256..511 Mb
|
||||||
FAT_TYPES_LINE (#0008, 2048, FAT16) ; 128..256 Mb
|
FAT_TYPES_LINE #0008, 2048, FAT16 ; 128..256 Mb
|
||||||
FAT_TYPES_LINE (#0004, 1024, FAT16) ; 64..128 Mb
|
FAT_TYPES_LINE #0004, 1024, FAT16 ; 64..128 Mb
|
||||||
FAT_TYPES_LINE (#0002, 512, FAT16) ; 32..64 Mb
|
FAT_TYPES_LINE #0002, 512, FAT16 ; 32..64 Mb
|
||||||
; ¥á«¨ ¬¥ìè¥, â® FAT12
|
; ¥á«¨ ¬¥ìè¥, â® FAT12
|
||||||
.LineSize EQU 5
|
.LineSize EQU 5
|
||||||
.Records EQU ($ - .FAT_TYPES)/.LineSize
|
.Records EQU ($ - FAT_TYPES)/.LineSize
|
||||||
ENDMODULE
|
ENDMODULE
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
RESERVED_SECTORS: ;predefined (¯®ª )
|
||||||
|
.FAT_FDD EQU 1
|
||||||
|
.FAT_HDD EQU 8
|
||||||
|
.FAT32 EQU #2032 ;32
|
||||||
;
|
;
|
||||||
|
|
||||||
ENDIF
|
|
||||||
|
;
|
||||||
|
VARIABLES EQU $
|
||||||
|
.CurrentDrive DB 0
|
||||||
|
.VOLUME_SIZE_BYTES BLOCK 5,0
|
||||||
|
;
|
||||||
|
|
||||||
|
; root_dir_sectors = ((root_dir_entries * 32) + (bytes_per_sector - 1)) / bytes_per_sector
|
||||||
|
CALCULATED_FAT_PARAMETERS:
|
||||||
|
.FAT_TYPE BYTE TABLES.FAT12 ; [x]
|
||||||
|
.RootDirSectors WORD 0
|
||||||
|
.NotUsedSpace BYTE 0 ; in sectors
|
||||||
|
.total_clusters: DWORD 0
|
||||||
|
.FAT32_RootDirClusters WORD 1
|
||||||
|
.PART1 EQU $
|
||||||
|
;
|
||||||
|
.JMP: BYTE #EB,#FE,#00 ; [x] opcode jmp $
|
||||||
|
.ID_NAME BYTE "DDF " ; DSS Drive Formatter
|
||||||
|
.ID_NAME_VER BYTE "0."
|
||||||
|
.ID_NAME_MOD BYTE "00"
|
||||||
|
.BytesPerSector: WORD #200 ; predefined ; [x]
|
||||||
|
.SectorsPerCluster: BYTE 0 ; [x]
|
||||||
|
.RESERVED_SECTORS: WORD 0 ; [x]
|
||||||
|
.Number_of_FATs: BYTE 2 ; predefined ; [ ]
|
||||||
|
.FilesInRootDIR: WORD 0 ; FAT32 constant ; [ ] FAT ; [x] FAT32
|
||||||
|
.SectorsPerDrive: WORD 0 ; FAT32 constant ; [x] +-
|
||||||
|
.DRIVE_TYPE: BYTE 0 ; ; [x] +-
|
||||||
|
.SectorsPerFAT16: WORD 0 ; FAT32 constant ; [x]
|
||||||
|
.SectorsPerTrack WORD 9 ; BPB_SecPerTrk ; [ ] <20> §¬¥à ¤®à®¦ª¨ ¢ ᥪâ®à å
|
||||||
|
.HEADS WORD 2 ; [ ]
|
||||||
|
.HIDDEN DWORD 0 ; ®â ç « MBR, extMBR ; [x]
|
||||||
|
.BPB_BIG_TOTAL_SECTORS_L WORD 0 ; [x] +-
|
||||||
|
.BPB_BIG_TOTAL_SECTORS_H WORD 0 ; [x] +-
|
||||||
|
.PART1_SIZE EQU $ - .PART1
|
||||||
|
; FAT 12, FAT 16
|
||||||
|
.PART2_FAT12_16 EQU $
|
||||||
|
;
|
||||||
|
.BPB_PHISICAL_DRIVE_NUMBER BYTE #80 ; [x]
|
||||||
|
.reserved_1 BYTE 0 ; predefined ;
|
||||||
|
; .FAT.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
||||||
|
; .FAT.SERIAL_NUMBER DWORD 0 ;
|
||||||
|
; .FAT.LABEL DB 'NO_LABEL ' ;
|
||||||
|
; .ID_FAT DB 'FAT16 ' ;
|
||||||
|
.PART2_FAT12_16_END EQU $
|
||||||
|
|
||||||
|
; FAT32
|
||||||
|
.PART2_FAT32 EQU $
|
||||||
|
;
|
||||||
|
.SectorsPerFAT32 DWORD 0 ; [x] ;!TODO error ¥á«¨ áâ à訩 ¡ ©â !=0
|
||||||
|
.MainFATnumber WORD 0 ; BPB_ExtFlags ;
|
||||||
|
.Version WORD 0 ; constant ;
|
||||||
|
.RootDirStartCluster DWORD 2 ; FIXED! ¨á¯®«ì§ã¥âáï ¢ ä®à¬ã«¥
|
||||||
|
.FSINFO_Sector WORD 1 ; constant ;
|
||||||
|
.CopyBootSector WORD 6 ; constant ;
|
||||||
|
.reserved_block: BLOCK 12 ; constant ;
|
||||||
|
.FDD_Number BYTE 0 ; [x]
|
||||||
|
.reserved_2: BYTE 0 ; constant ;
|
||||||
|
; .FAT32.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
||||||
|
; .FAT32.SERIAL_NUMBER DWORD 0 ;
|
||||||
|
; .FAT32.LABEL DB 'NO_LABEL ' ;
|
||||||
|
; .ID_FAT32 DB 'FAT32 ' ;
|
||||||
|
.PART2_FAT32_SIZE EQU $ - .PART2_FAT32
|
||||||
|
; SHARED
|
||||||
|
.PART3_SHARED EQU $
|
||||||
|
;
|
||||||
|
.FAT.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
||||||
|
.FAT.SERIAL_NUMBER DWORD 0 ; [ ]
|
||||||
|
.FAT.LABEL DB 'NO_LABEL ' ; [ ] ;!TODO ¤®¯®«¨â¥«ì® ¯¨á âì ¢ ª®à¥¢ãî ¤¨à¥ªâ®à¨î
|
||||||
|
.ID_FAT DB 'FAT32 ' ;
|
||||||
|
.PART3_SHARED_SIZE EQU $ - .PART3_SHARED
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
SECTOR_BUFFER EQU $
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DISPLAY "programm size: ",$-EXEHeader
|
||||||
|
Loader_End:
|
||||||
|
DISPLAY "last address: ",$
|
||||||
Loading…
Reference in New Issue
Block a user