diff --git a/Makefile b/Makefile index 3bb6f15..fe914aa 100644 --- a/Makefile +++ b/Makefile @@ -58,6 +58,9 @@ iso: test-cdrom: qemu-system-i386 -cdrom boot.iso -m 4096M -d int +debug-cdrom: + qemu-system-i386 -s -S -cdrom boot.iso -m 4096M -monitor stdio + test: qemu-system-i386 -drive file=boot.iso,media=disk,format=raw -m 4096M -d int diff --git a/bochsrc b/bochsrc index d393ab0..b7721ba 100644 --- a/bochsrc +++ b/bochsrc @@ -1,6 +1,6 @@ romimage: file=$BXSHARE/BIOS-bochs-latest vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest -#boot: cdrom -#ata0-master: type=cdrom, path="boot.iso", status=inserted -boot:disk -ata0-master: type=disk, path="boot.iso", cylinders=306, heads=16, spt=17 +boot: cdrom +ata0-master: type=cdrom, path="boot.iso", status=inserted +#boot:disk +#ata0-master: type=disk, path="boot.iso", cylinders=306, heads=16, spt=17 diff --git a/include/vfs.h b/include/vfs.h index 41c3745..ada950d 100644 --- a/include/vfs.h +++ b/include/vfs.h @@ -11,6 +11,6 @@ bool read_sector_callback(l9660_fs *fs, void *buf, uint32_t sector); void mount_fs(); void list_files(l9660_dir *dir); -size_t vfs_read_file(l9660_file *file, uint8_t* buffer); +size_t vfs_read_file(l9660_file *file, uint8_t* buffer, size_t final_size); #endif \ No newline at end of file diff --git a/src/fs/vfs.c b/src/fs/vfs.c index 6c9186e..8aa646c 100644 --- a/src/fs/vfs.c +++ b/src/fs/vfs.c @@ -1,6 +1,7 @@ #include "../include/vfs.h" #include "../include/stdio.h" #include "../include/string.h" +#include "../include/paging.h" l9660_fs global_fs; @@ -48,25 +49,38 @@ void list_files(l9660_dir *dir) } } - -size_t vfs_read_file(l9660_file *file, uint8_t* buffer) +//TODO: fix invalid opcode exception that somehow happens when the memcpy is called with buffer+total_read address being 0xE0008CA0 +size_t vfs_read_file(l9660_file *file, uint8_t* buffer, size_t final_size) { size_t total_read = 0; + l9660_status status; + for(;;) { char buf[128]; size_t read; - l9660_read(file, buf, 128, &read); + status = l9660_read(file, buf, 128, &read); + + if (status != L9660_OK) { + printf("An error occurred during file read!\n"); + break; + } + + printf("total_read: %X status: %X buffer+total_read: %X/%X read: %X\n", total_read, status, buffer + total_read, final_size, read); + if(buffer+total_read == 0xE0008CA0) + { + printf("ERROR ERROR\n"); + printf("get_physaddr: %X", get_physaddr((void*)0xE0008CA0)); + } //check for EOF if (read == 0) break; - memcpy(buffer, buf, 128); - buffer += 128; + memcpy(buffer + total_read, buf, read); total_read += read; } - //reset the current position to the original position - buffer -= total_read; + printf("total_read: %X\n", total_read); + return total_read; } \ No newline at end of file diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 236e02a..7807270 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -186,8 +186,6 @@ void kmain(unsigned int magic, unsigned int info) mount_fs(); - test_iso9660(); - exec_from_file("main.", "."); while(1) diff --git a/src/tasking/exec_from_file.c b/src/tasking/exec_from_file.c index 97648b2..1c9a32d 100644 --- a/src/tasking/exec_from_file.c +++ b/src/tasking/exec_from_file.c @@ -14,12 +14,11 @@ int read_file(const char* path, uint8_t** buffer, l9660_dir* dir) { - //file_t file; l9660_file file; l9660_status err; - err = l9660_openat(&file, dir, path);//fat_fopen(&file, path, "r"); + err = l9660_openat(&file, dir, path); if (err != L9660_OK) { debug_log("read_file: err: 0x%X\n", err); @@ -27,28 +26,21 @@ int read_file(const char* path, uint8_t** buffer, l9660_dir* dir) } l9660_seek(&file, L9660_SEEK_END, 0); - uint32_t file_size = l9660_tell(&file);//fat_fsize(&file); + uint32_t file_size = l9660_tell(&file); debug_log("file_size: %X\n", file_size); l9660_seek(&file, L9660_SEEK_SET, 0); - uint8_t buf[512]; - debug_log("heh\n"); - - *buffer = (uint8_t*)malloc(file_size+1); - uint8_t* current = *buffer; + *buffer = (uint8_t*)malloc(file_size); debug_log("eeee\n"); size_t read; - debug_log("info: buffer: %X, *buffer: %X, &buffer: %X\n", buffer, *buffer, &buffer); + uint32_t final_size = (uint32_t)*buffer + file_size; - //err = l9660_read(&file, *buffer, file_size, &read);//fat_fread(&file, *buffer, file_size); - read = vfs_read_file(&file, *buffer); + read = vfs_read_file(&file, *buffer, final_size); debug_log("bytes read: 0x%X\n", read); - - while(1){} - return 0;//fat_fclose(&file); + return 0; } void exec_from_file(const char* filename, const char* dirname) diff --git a/src/tasking/syscalls.c b/src/tasking/syscalls.c index 059e52a..5aa7add 100644 --- a/src/tasking/syscalls.c +++ b/src/tasking/syscalls.c @@ -5,6 +5,7 @@ #include "../include/paging.h" #include "../include/string.h" #include "../include/screen.h" +#include "../include/fat.h" #define STDIN_FILENO 0 #define STDOUT_FILENO 1 @@ -156,7 +157,7 @@ int sys_read(TrapFrame *tf) { return -EBADF; } - return fat_fread(current->file_descriptors[tf->ebx], (void*)tf->ecx, tf->edx); + return 0;//fat_fread(current->file_descriptors[tf->ebx], (void*)tf->ecx, tf->edx); } } @@ -187,7 +188,7 @@ int sys_write(TrapFrame *tf) { return -EBADF; } - return fat_fwrite(current->file_descriptors[tf->ebx], (void*)tf->ecx, tf->edx); + return 0;//fat_fwrite(current->file_descriptors[tf->ebx], (void*)tf->ecx, tf->edx); } } @@ -209,7 +210,7 @@ int sys_open(TrapFrame *tf) { current->file_descriptors[i] = malloc(sizeof(file_t)); // Kernel malloc //debug_log("\n====FILE_DESCRIPTOR: %X\n", i); - int result = fat_fopen(current->file_descriptors[i], filename, mode_str); + int result = 0;//fat_fopen(current->file_descriptors[i], filename, mode_str); if (result < 0) { free(current->file_descriptors[i]); // Free on failure current->file_descriptors[i] = NULL; @@ -230,7 +231,7 @@ int sys_close(TrapFrame *tf) if(current->file_descriptors[fd] != NULL) { //debug_log("SYS_CLOSE: current->file_descriptors[fd] != NULL"); - int result = fat_fclose(current->file_descriptors[fd]); + int result = 0;//fat_fclose(current->file_descriptors[fd]); //debug_log("SYS_CLOSE: fat_fclose result: 0x%X", result); free(current->file_descriptors[fd]); current->file_descriptors[fd] = NULL; @@ -241,10 +242,10 @@ int sys_close(TrapFrame *tf) int sys_chdir(TrapFrame *tf) { - strcat(current->cwd->fat->path, "/"); - strcat(current->cwd->fat->path, (char*)tf->ebx); + //strcat(current->cwd->fat->path, "/"); + //strcat(current->cwd->fat->path, (char*)tf->ebx); - int result = fat_opendir(current->cwd, (const char*)tf->ebx); + int result = 0;//fat_opendir(current->cwd, (const char*)tf->ebx); if(result == 0) return 0; @@ -253,7 +254,7 @@ int sys_chdir(TrapFrame *tf) int sys_getcwd(TrapFrame *tf) { - strcpy((char*)tf->ebx, current->cwd->fat->path); + //strcpy((char*)tf->ebx, current->cwd->fat->path); return tf->ebx; }