summaryrefslogtreecommitdiff
path: root/src/kernel/fat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/fat.h')
-rw-r--r--src/kernel/fat.h37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/kernel/fat.h b/src/kernel/fat.h
index 0fbf59f..73eaaae 100644
--- a/src/kernel/fat.h
+++ b/src/kernel/fat.h
@@ -1,4 +1,5 @@
#include <stdint.h>
+#include <stdbool.h>
#define FAT_INFO ((struct fat_info *)0x7c03)
@@ -24,9 +25,37 @@ struct fat_info {
uint8_t fs_type[8];
} __attribute__ ((packed));
-#define FAT ((void *)0x00026000)
+enum {
+ FA_READ_ONLY = 0x01,
+ FA_HIDDEN = 0x02,
+ FA_SYSTEM = 0x04,
+ FA_LABEL = 0x08,
+ FA_DIRECTORY = 0x10,
+ FA_ARCHIVE = 0x20,
+
+ FA_LFN = 0x0f
+};
+
+struct directory_entry {
+ uint8_t name[11];
+ uint8_t attrib;
+ uint8_t name_case;
+ uint8_t created_decimal;
+ uint16_t created_time;
+ uint16_t created_date;
+ uint16_t accessed_date;
+ uint16_t ignore;
+ uint16_t modified_time;
+ uint16_t modified_date;
+ uint16_t first_cluster;
+ uint32_t length;
+} __attribute__ ((packed));
+
+#define FAT ((uint16_t *)0x00020000)
void load_fat();
-uint16_t get_cluster(uint16_t n);
-void set_cluster(uint16_t n, uint16_t v);
-uint16_t get_start_cluster(uint8_t *path); \ No newline at end of file
+#define CTOS(c) (FAT_INFO->reserved_sectors + FAT_INFO->sectors_per_fat + (FAT_INFO->root_entries >> 4) + (c) - 2)
+
+bool get_entry(uint8_t *path, struct directory_entry *at);
+bool update_entry(uint8_t *path, struct directory_entry *value);
+bool create_entry(uint8_t *path, struct directory_entry *value); \ No newline at end of file