Estex-DSS/DSS/Structures.inc
Anatoliy Belyanskiy bb63a4071d DSS: детект разрядности FAT в BPB теперь по всем канонам. Допиливание до FAT32.
SYS: Загрузка System.dos > #4000 байтов. Исправлен баг с ненужной проверкой расстояния от BPB до FAT для HDD.
SHELL: мелкие правки
2024-04-14 01:54:39 +10:00

127 lines
4.9 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
STRUCT _sStack ; 256 bytes
.buffer BLOCK 256,0
.SPoint BYTE 0
ENDS
;
;
STRUCT _sEXE_HEADER ; 512 bytes
.EXE_EXT TEXT 3,{"EX","E"}
.VERSION BYTE 0
.OFFCOD1 WORD 0
.OFFCOD2 WORD 0
.LOADER WORD 0
.RESERVED BLOCK 6,0
.LD_ADDR WORD 0
.PC_REG WORD 0
.SP_REG WORD 0
.RESERVED2 BLOCK 490,0
ENDS
;
;File Manipulator (FM)
;[ ] fat32
STRUCT _sFM ; 51 bytes
; from FAT
; .NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME
; .EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT
; .ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT
; .RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED
; .RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED
; .CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED
; .CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED
; .RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
; .TIME: WORD #0000 ;+ #16 +22 TIME
; .DATE: WORD #0000 ;+ #18 +24 DATE
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
.FS_REC: _sFAT_DIRECTORY_RECORD
; from Core
.F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
.DIR_CLUSTER_L: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW
.DIR_CLUSTER_H: WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32
.HANDLE: WORD #0000 ;+ #28 +40 HANDLE NUMBER
.DRIVE: BYTE #00 ;+ #2A +42 DRIVE OR CURRENT
.ACCESS_MODE: BYTE #00 ;+ #2B +43 ACCESS MODE
.TASK_NUM: BYTE #00 ;+ #2C +44 TASK
.OptimizedClusters BYTE #00 ;+ #2D +45
.KnownCluster_L: WORD #0000 ;+ #2E +46 Œ« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownCluster_H: WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L: WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H: WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
ENDS
;ACCESS MODE: A=0 ç⥭¨¥/§ ¯¨áì
; A=1 ç⥭¨¥
; A=2 § ¯¨áì
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è­¨å á®åà ­¥­¨© ªíè  FAT
; ;!TODO A=4 § ¯¨á âì ªíè FAT
;
;
; NAM EQU 0 ; LEN4 EQU 31
; EXT EQU 8 ; POS1 EQU 32
; ATR EQU 11 ; POS2 EQU 33
; TIM1 EQU 22 ; POS3 EQU 34
; TIM2 EQU 23 ; POS4 EQU 35
; DAT1 EQU 24 ; DIRCLU1 EQU 36
; DAT2 EQU 25 ; DIRCLU2 EQU 37
; CLU1 EQU 26 ; HND1 EQU 38
; CLU2 EQU 27 ; HND2 EQU 39
; LEN1 EQU 28 ; FDRV EQU 40
; LEN2 EQU 29 ; AMODE EQU 41
; LEN3 EQU 30 ; FTASK EQU 42
;
STRUCT _sFatBuffer
;.MSG: BYTE 'FAT'
.DRIVE: BYTE #FF
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
.CacheBlock: WORD #0000
.CacheUpdated: BYTE #00
;.SectorsPerBank: 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
.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 ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high ; [ ] fat32 ¡ë«® ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£ 
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
.END_CHAIN_CLUSTER_L: WORD #FFFF
.END_CHAIN_CLUSTER_H: WORD #0FFF ; [ ] fat3
.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;
.BytesPerSector WORD #0000
.SectorsPerCluster BYTE #00
.BPB_SERIAL_NUMBER DWORD #00000000
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
; IF COMPILE_UNUSED_CODE
; .FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
; .ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“)
; ENDIF
;.READ_PG: BYTE #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥
ENDS
;
;
STRUCT _sBuffers
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
.FatBuffer _sFatBuffer
;.BootSector BLOCK 90,0 ; _sBOOT_SECTOR_PARAMS: 62 bytes FAT16, 90 bytes FAT32
.EXE_Header _sEXE_HEADER ; 512 bytes
.Stack _sStack ; 256 bytes
.Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
.MemoryTable BLOCK 256,0 ; 256 bytes
ENDS
;