WKern
Loading...
Searching...
No Matches
fileio.h
Go to the documentation of this file.
1/*
2WKern - A Bare Metal OS / Kernel I am making (For Fun)
3Copyright (C) 2025 Wdboyes13
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 3 of the License, or
8any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <https://www.gnu.org/licenses/>.
17*/
18
19#pragma once
20#include <global.h>
21#include <types/nums.h>
22
26
28#define ATA_IO_BASE 0x1F0
29
31#define ATA_CTRL 0x3F6
32
34#define ATA_STATUS (ATA_IO_BASE + 7)
35
37#define ATA_COMMAND (ATA_IO_BASE + 7)
38
40#define ATA_DRIVE (ATA_IO_BASE + 6)
41
43#define ATA_ERROR (ATA_IO_BASE + 1)
44
46#define ATA_SECCNT (ATA_IO_BASE + 2)
47
49#define ATA_LBA_LOW (ATA_IO_BASE + 3)
50
52#define ATA_LBA_MID (ATA_IO_BASE + 4)
53
55#define ATA_LBA_HI (ATA_IO_BASE + 5)
56
58#define ATA_DATA (ATA_IO_BASE + 0)
59
61#define ATA_CMD_READ_SECTORS 0x20
62
64#define ATA_SR_BSY 0x80
65
67#define ATA_SR_DRQ 0x08
68
70#define ATA_SR_ERR 0x01
71
73#define ATA_WRITE_CMD 0x30
74
107
130
132extern struct FaT16Info fat16;
133
139void AtaReadSector(u32 lba, u8 *buffer);
140
147void AtaWriteSector(u32 lba, const u8 *buffer);
148
150extern volatile u8 irq14stat;
151extern volatile u8 irq15stat;
152
158
166void Writefile(const char *filename, const char *ext, const char *data,
167 u32 size);
168
172void Fat16Ls(void);
173
179u32 Fat16Mount(u32 partition_lba);
180
186void Fileconts(const char *filename, const char *ext);
187
193void Mkfile(const char *filename, const char *ext);
194
200void Fat16RemoveFile(const char *filename, const char *ext);
201
210static inline void Padname(const char *src, char *dest, int len) {
211 int i = 0;
212 while (i < len && src[i] != '\0') {
213 char ch = src[i];
214 dest[i] = (ch >= 'a' && ch <= 'z') ? (ch - 32) : ch; // Uppercase
215 i++;
216 }
217 while (i < len) {
218 dest[i++] = ' '; // Space-pad
219 }
220}
struct FaT16Info fat16
Holds FAT16 filesystem info and a sector buffer.
Definition fat16_mnt.c:25
void Fileconts(const char *filename, const char *ext)
Prints contents of a FAT16 file.
Definition printconts.c:40
void Mkfile(const char *filename, const char *ext)
Creates a new empty file in the FAT16 root directory.
Definition mkfile.c:41
void Writefile(const char *filename, const char *ext, const char *data, u32 size)
Writes data to a FAT16 file, replacing its contents.
Definition write.c:41
void AtaWriteSector(u32 lba, const u8 *buffer)
Writes a 512-byte sector to ATA disk from buffer.
Definition ATA.c:100
void Fat16Ls(void)
Lists files in the FAT16 root directory.
Definition ls.c:37
volatile u8 irq14stat
IRQ status flags for IRQ14 and IRQ15 (primary and secondary IDE interrupts)
Definition irqflags.c:22
void Fat16RemoveFile(const char *filename, const char *ext)
Removes a file from the FAT16 root directory and frees clusters.
Definition rmfile.c:38
void AtaReadSector(u32 lba, u8 *buffer)
Reads a 512-byte sector from ATA disk into buffer.
Definition ATA.c:65
u32 FindFat16Partition(void)
Finds the FAT16 partition on disk.
Definition MBR.c:69
u32 Fat16Mount(u32 partition_lba)
Mounts FAT16 partition and reads filesystem info.
Definition fat16_mnt.c:67
volatile u8 irq15stat
Definition irqflags.c:23
#define PKG
Add attribute packed.
Definition global.h:35
unsigned int u32
32-Bit Unsigned Int
Definition nums.h:30
unsigned short u16
16-Bit Unsigned Int
Definition nums.h:36
unsigned char u8
8-Bit Unsigned Int
Definition nums.h:32
FAT16 BIOS Parameter Block (BPB) structure — describes volume layout.
Definition fileio.h:81
u8 fs_type[8]
Definition fileio.h:105
u16 reserved_sectors
Definition fileio.h:86
u8 jmp[3]
Definition fileio.h:82
u8 num_fats
Definition fileio.h:87
u8 drive_number
Definition fileio.h:100
u8 media_descriptor
Definition fileio.h:91
u16 root_entry_count
Definition fileio.h:88
u16 total_sectors_short
Definition fileio.h:89
u16 sectors_per_track
Definition fileio.h:93
u16 sectors_per_fat
Definition fileio.h:92
u8 oem[8]
Definition fileio.h:83
u8 sectors_per_cluster
Definition fileio.h:85
u16 num_heads
Definition fileio.h:94
u32 hidden_sectors
Definition fileio.h:95
u16 bytes_per_sector
Definition fileio.h:84
u32 total_sectors_long
Definition fileio.h:96
u8 reserved1
Definition fileio.h:101
u8 boot_signature
Definition fileio.h:102
u8 volume_label[11]
Definition fileio.h:104
u32 volume_id
Definition fileio.h:103
Parsed FAT16 filesystem layout and parameters.
Definition fileio.h:114
u32 total_sectors_32
Definition fileio.h:127
u32 data_start_lba
Definition fileio.h:117
u16 total_sectors_16
Definition fileio.h:126
u16 sectors_per_fat
Definition fileio.h:123
u8 num_fats
Definition fileio.h:122
u32 fat_start_lba
Definition fileio.h:115
u16 reserved_sectors
Definition fileio.h:125
u16 bytes_per_sector
Definition fileio.h:120
u8 sectors_per_cluster
Definition fileio.h:121
u32 total_cluster
Definition fileio.h:128
u16 root_entry_count
Definition fileio.h:119
u32 root_dir_start_lba
Definition fileio.h:116