mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
Убран баг в ATTRIB для GET на разделе FAT с кластером 64 кб. Исправлен улёт стека в ПЗУ в процедуре запуска EXE. Исправлен баг со скроллом в ECHOKEY.
135 lines
5.5 KiB
PHP
135 lines
5.5 KiB
PHP
;
|
||
STRUCT _sStack ; 256 bytes
|
||
.buffer BLOCK 256,0
|
||
;.SPoint BYTE 0
|
||
ENDS
|
||
;
|
||
|
||
;
|
||
STRUCT _sEXE_HEADER ; 512 bytes
|
||
.EXE_EXT TEXT 3,{"EX","E"} ; 0-2 EXE ‘¨£ âãà
|
||
.VERSION BYTE 0 ; 3 Version of EXE file
|
||
.OFFCOD1 WORD 00 ; 4-5 ‘ ª ª®£® á¬¥é¥¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
|
||
.OFFCOD2 WORD 00 ; 6-7 ¯ ¬ïâì ¯® ¤à¥áã (Code_addr) Low addr, High addr.
|
||
.LOADER WORD 00 ; 8-9 <EFBFBD> §¬¥à ¯¥à¢¨ç®£® § £àã§ç¨ª ¨«¨ 0
|
||
.RESERVED BLOCK 6,0 ; 10-15 Reserved
|
||
.LD_ADDR WORD 00 ; 16-17 €¤à¥á à ᯮ«®¦¥¨ï ª®¤ ¢ ¯ ¬ï⨠(#4100-#FFFF)
|
||
.PC_REG WORD 00 ; 18-19 €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
|
||
.SP_REG WORD 00 ; 20-21 €¤à¥á á⥪ (Reg. SP)
|
||
.UnUsedPoint BYTE 0 ; 22
|
||
; ¢ .RESERVED2 ¥«ì§ï ¯à®¯¨á âì BLOCK 512-.UnUsedPoint,0; ¯®í⮬ã å प®¤
|
||
.RESERVED2 BLOCK 512-23,0 ; 23-512 Œ®¦® ¨á¯®«ì§®¢ âì ¯®¤ ⥪áâ ¤«ï ¢ë¯¥¤àñ¦ ¨«¨ ¥ ¨á¯®«ì§®¢ âì
|
||
ENDS
|
||
;
|
||
|
||
;File Manipulator (FM)
|
||
;[ ] fat32
|
||
STRUCT _sFM ; 54 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 FAT_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 _sFS_Buffer
|
||
.DRIVE: BYTE #FF
|
||
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; 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
|
||
.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 0
|
||
.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 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
||
ENDS
|
||
;
|
||
|
||
;
|
||
STRUCT _sBuffers
|
||
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
||
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
||
.FS_Buffer _sFS_Buffer
|
||
;.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 & SECTOR_BUFFER
|
||
.MemoryTable BLOCK 256,0 ; 256 bytes
|
||
.CurrentPath WORD 0
|
||
.CurrentDirectory BLOCK DIRECTORY_PATH_LENGTH,0
|
||
.WorkDirectory BLOCK DIRECTORY_PATH_LENGTH,0
|
||
.BUFFER_CLP BLOCK CLP_Buffer,0 ; ¡ãä¥à ¤«ï CMD ¢ Execute.asm
|
||
ENDS
|
||
; |