add atapi driver

This commit is contained in:
2025-08-14 21:13:10 +03:00
parent d017f0b245
commit ea39cb85f3
4 changed files with 120 additions and 118 deletions
+6 -117
View File
@@ -13,125 +13,10 @@
#include "../include/liballoc.h"
#include "../include/kheap.h"
#include "../include/exec_from_file.h"
#include "../include/atapi.h"
#include <stdint.h>
disk_ops_t ops =
{
.read = ata_read,
.write = ata_write,
};
static fat_t g_fat;
static const char* months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
static int cat(const char* path)
{
file_t file;
int err = fat_fopen(&file, path, "r");
if (err)
return err;
uint8_t buf[512];
for (;;)
{
int cnt = fat_fread(&file, buf, 512);
if (cnt < 0)
return cnt;
printf("%.*s\n", cnt, buf);
printf("%s\n", buf);
if (cnt < 512)
break;
}
return fat_fclose(&file);
}
static int ls(const char* path)
{
dir_t dir;
dir_info_t info;
int err = fat_opendir(&dir, path);
if (err)
return err;
for (;;)
{
err = fat_readdir(&dir, &info);
if (err == FAT_ERR_EOF)
return FAT_ERR_NONE;
if (err)
return err;
printf("%X %s %x %x:%x %x %s%c\n",
info.size, months[info.modified.month], info.modified.day,
info.modified.hour, info.modified.min,
info.namelen, info.name, info.attr & FAT_ATTR_DIR ? '/' : ' ');
err = fat_nextdir(&dir);
if (err)
return err;
}
}
void test(int err, const char* huy)
{
if(err != 0)
printf("ERROR: %X %s\n", err, huy);
else
printf("%s done", huy);
}
void file_fuckery()
{
int err, cnt;
err = fat_mount(&ops, 0, &g_fat, "ebalo");
if(err)
printf("KATYAKATYAKATYAKATYAKATYA: %X\n", err);
printf("%X\n", err);
err = ls("/ebalo");
printf("\n\n\n");
err = fat_mkdir("/ebalo/numbers");
err = fat_mkdir("/ebalo/numbers/nigga");
printf("MKDIR ERR: %X\n", err);
err = fat_unlink("/ebalo/numbers/nigga/");
printf("UNLINK ERR: %X\n", err);
err = fat_unlink("/ebalo/numbers/");
printf("UNLINK ERR: %X\n", err);
/*err = fat_mkdir("/ebalo/numbers");
//err = cat("/ebalo/boot/grub/grub.cfg");
char *filenames[] = {"/ebalo/numbers/d","/ebalo/numbers/e"};
for(int i = 0; i < 2; i++){
printf(filenames[i]);
file_t file;
err = fat_fopen(&file, filenames[i], "w");
if (err)
{printf("1 err %X\n", err); goto unmount;}
for (int i = 0; i < 10; i++)
{
cnt = fat_fprintf(&file, "This is test number %d\n", i);
if (cnt < 0)
{printf("2 cnt: %X\n", cnt); goto unmount;}
}
err = fat_fclose(&file);
}
*/
unmount:
printf("err%X\n", err);
err = fat_umount(&g_fat);
test(err, "unmount");
}
void apply_pic_masks()
{
//0x21 is master pic, 0xa1 is slave pic
@@ -218,7 +103,11 @@ void kmain(unsigned int magic, unsigned int info)
printf("huy1 points to: 0x%X huy2 points to:0x%X\n", huy, huy2);
printf("huy1: %s\nhuy2: %s", huy, huy2);
exec_from_file("/ebalo/main", "/ebalo/");
uint8_t buffer[2048];
read_cdrom(0x170, false, 1230, 1, (uint16_t*)buffer);
printf("buffer:\n %s\n", buffer);
//exec_from_file("/ebalo/main", "/ebalo/");
while(1)
{