SayoriOS  0.3.3
fat12.h
1 #pragma once
2 
3 #include <common.h>
4 
5 #define SECTOR_SIZE 512
6 #define FAT_DELETED_MAGIC ((char)0xE5)
7 #define ENTRY_AVAILABLE 0x00
8 #define ENTRY_ERASED 0xe5
9 #define offsetof(t,d) __builtin_offsetof(t, d)
10 typedef uint32_t addr_t;
11 typedef struct {
12  uint8_t jump_code[3];
13  char oem_name[8];
14  uint16_t bytes_per_sector;
16  uint16_t reserved_sectors;
17  uint8_t fat_count;
18  uint16_t root_dir_capacity;
19  uint16_t logical_sectors16;
20  uint8_t media_type;
21  uint16_t sectors_per_fat;
24  uint32_t hidden_sectors;
25  uint32_t logical_sectors32;
26  uint8_t media_id;
27  uint8_t chs_head;
29  uint32_t serial_number;
30  char volume_label[11];
31  char fsid[8];
32  uint8_t boot_code[448];
33  uint16_t magic;
34 } __attribute__((__packed__)) FAT_BOOT_SECTOR;
35 
36 
37 typedef struct{
38  uint8_t READONLY: 1,
39  HIDDEN: 1,
40  SYSTEN: 1,
41  VOLUMEID: 1,
42  DIR: 1,
43  ARCHIVE: 1,
44  _reserved: 2;
45 }__attribute__((__packed__)) fat_attributes;
46 
47 
48 typedef struct{
49  char Name[11];
50  fat_attributes Attr;
51  uint8_t Reser;
52  uint8_t TimeMS;
53  uint16_t TimeCreateHIS;
54  uint16_t TimeCreateDate;
55  uint16_t TimeAccess;
56  uint16_t FCHB;
57  uint16_t TimeEditHIS;
58  uint16_t TimeEditDate;
59  uint16_t FCLB;
60  uint32_t Size;
61 } FAT_ENTRY;
62 
63 struct dir_entry_t{
64  char name[13];
65  uint32_t size;
66  uint8_t is_archived: 1;
67  uint8_t is_readonly: 1;
68  uint8_t is_system: 1;
69  uint8_t is_hidden: 1;
70  uint8_t is_directory: 1;
71 };
72 
73 struct disk_t{
74  FILE* pdisk;
75  int32_t sec_count;
76 };
77 
78 struct volume_t {
79  FAT_BOOT_SECTOR super;
80  uint32_t fat1_pos;
81  uint32_t root_pos;
82  uint32_t root_sectors;
83  uint32_t cluster2_pos;
84  struct disk_t* disk;
85  uint32_t* fat_table;
86 };
87 
88 struct file_t{
89  FAT_ENTRY *entry;
90  struct volume_t* volume;
91  uint32_t offset;
92 };
93 struct dir_t{
94  FAT_ENTRY * entries;
95  uint32_t capactiy;
96  uint32_t offset;
97  struct volume_t* volume;
98 };
Основные определения ядра
struct registers __attribute__((packed))
Структура данных пакета от мыши
Definition: psf.h:19
uint16_t logical_sectors16
Общее количество секторов в логическом томе. Если это значение равно 0, это означает,...
Definition: fat12.h:19
uint16_t root_dir_capacity
Количество записей корневого каталога (должно быть установлено так, чтобы корневой каталог занимал це...
Definition: fat12.h:18
uint8_t media_type
Этот байт указывает тип дескриптора носителя .
Definition: fat12.h:20
uint8_t fat_count
Количество таблиц размещения файлов (FAT) на носителе. Часто это значение равно 2.
Definition: fat12.h:17
uint32_t serial_number
VolumeID 'Серийный' номер. Используется для отслеживания томов между компьютерами....
Definition: fat12.h:29
uint8_t chs_head
Флаги в Windows NT. В противном случае зарезервировано.
Definition: fat12.h:27
uint16_t magic
Подпись загрузочного раздела 0xAA55.
Definition: fat12.h:33
uint8_t sectors_per_cluster
Количество секторов в кластере.
Definition: fat12.h:15
uint16_t bytes_per_sector
Количество байтов на сектор
Definition: fat12.h:14
uint16_t chs_sectors_per_track
Количество секторов на дорожке.
Definition: fat12.h:22
uint16_t reserved_sectors
Количество зарезервированных секторов. Сектора загрузочной записи включены в это значение.
Definition: fat12.h:16
uint32_t logical_sectors32
Большое количество секторов. Это поле устанавливается, если в томе более 65535 секторов,...
Definition: fat12.h:25
uint8_t ext_bpb_signature
Подпись (должна быть 0x28 или 0x29).
Definition: fat12.h:28
uint32_t hidden_sectors
Количество скрытых секторов. (т.е. LBA начала раздела.)
Definition: fat12.h:24
uint8_t media_id
Номер привода. Значение здесь должно быть идентично значению, возвращаемому прерыванием BIOS 0x13 или...
Definition: fat12.h:26
uint16_t chs_tracks_per_cylinder
Количество головок или сторон на носителе.
Definition: fat12.h:23
uint16_t sectors_per_fat
Количество секторов на FAT. Только FAT12/FAT16.
Definition: fat12.h:21
uint8_t Reser
Зарезервировано для использования Windows NT.
Definition: fat12.h:51
uint32_t Size
Размер файла в байтах.
Definition: fat12.h:60
uint16_t TimeEditHIS
Время последней модификации. Тот же формат, что и время создания.
Definition: fat12.h:57
uint16_t TimeAccess
Дата последнего доступа. Тот же формат, что и дата создания.
Definition: fat12.h:55
fat_attributes Attr
Атрибуты файла
Definition: fat12.h:50
uint16_t TimeEditDate
Дата последней модификации. Тот же формат, что и дата создания.
Definition: fat12.h:58
uint16_t TimeCreateHIS
Время создания файла. Умножьте секунды на 2. (Часы 5 / Минуты 6 / Секунды 5)
Definition: fat12.h:53
uint8_t TimeMS
Время создания в десятых долях секунды.
Definition: fat12.h:52
uint16_t FCHB
Старшие 16 бит первого номера кластера этой записи. Для FAT 12 и FAT 16 это значение всегда равно нул...
Definition: fat12.h:56
uint16_t FCLB
Младшие 16 бит первого номера кластера этой записи. Используйте этот номер, чтобы найти первый класте...
Definition: fat12.h:59
uint16_t TimeCreateDate
Дата создания файла (Год 7 / Месяц 4 / День 5)
Definition: fat12.h:54
Структура файла. Требуется для работы с VFS.
Definition: stdio.h:21
Definition: fat12.h:63
Definition: fat12.h:93
Definition: fat12.h:73
Definition: fat12.h:88
Definition: fat12.h:78