From d0e7d197c1fc83074c25b70d7b88d237641bfc3b Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Thu, 23 May 2019 23:21:58 +0200 Subject: [PATCH] Work on HD --- include/io/ata.h | 41 +++++++++++++++++++++++++++++++++++++ kaleid/kernel/io/ata.c | 43 +++++++++++++++++++++++++++++++++++++++ kaleid/kernel/sh/shcmds.c | 25 +++++++++++++++++------ 3 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 include/io/ata.h create mode 100644 kaleid/kernel/io/ata.c diff --git a/include/io/ata.h b/include/io/ata.h new file mode 100644 index 0000000..73ff34b --- /dev/null +++ b/include/io/ata.h @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Basic Read Only ATA Long mode Driver // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#ifndef _KERNEL_H +#include +#endif + +#ifndef _IO_ATA_H +#define _IO_ATA_H + +#include + +//----------------------------------------------------------------------------// + +void IoReadATA(void *sectorBuffer, char n, char first); +void IoDumpSector(void); + +//----------------------------------------------------------------------------// + +#endif diff --git a/kaleid/kernel/io/ata.c b/kaleid/kernel/io/ata.c new file mode 100644 index 0000000..e92e4fa --- /dev/null +++ b/kaleid/kernel/io/ata.c @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Basic Read Only ATA Long mode Driver // +// // +// // +// Copyright © 2018-2019 The OS/K Team // +// // +// This file is part of OS/K. // +// // +// OS/K is free software: you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation, either version 3 of the License, or // +// any later version. // +// // +// OS/K is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY//without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with OS/K. If not, see . // +//----------------------------------------------------------------------------// + +#include +#include + +void IoDumpFirstSector(void) +{ + char sector[513] = {0}; + KernLog("Sector addr : %p\n", §or[0]); + + IoReadATA(sector, 1, 1); + + for (int i = 0; i < 513; i++) { + if (isascii(sector[i])) + KernLog("%c", sector[i]); + else + KernLog(" "); + } + + KernLog("\n\n"); +} diff --git a/kaleid/kernel/sh/shcmds.c b/kaleid/kernel/sh/shcmds.c index ab3214a..a96e8ea 100644 --- a/kaleid/kernel/sh/shcmds.c +++ b/kaleid/kernel/sh/shcmds.c @@ -127,8 +127,10 @@ error_t CmdDie(int argc, char **argv, char *cmdline) error_t CmdDumpATASect(int argc, char **argv, char *cmdline) { - char sector[513] = {0}; + char sector[600] = {0}; int sectNumber = ShAtoi(argv[1]); + int x = 0; + size_t ret; if (!sectNumber) { KernLog("Bad argument\n\n"); @@ -139,11 +141,22 @@ error_t CmdDumpATASect(int argc, char **argv, char *cmdline) IoReadATA(sector, 1, sectNumber); - for (int i = 0; i < 513; i++) { - if (isprint(sector[i])) - KernLog("%c", sector[i]); - else - KernLog(" "); + while(x < 513) { + for (int i = 0; i < 13; i++) { + KernLog("%02x ", (uchar)sector[i+x]); + } + KernLog(" "); + for (int i = 0; i < 13; i++) { + if (isprint(sector[i+x])) + KernLog("%C%c%C", + VGA_COLOR_LIGHT_BLUE, + sector[i+x], + shcol); + else + KernLog("%c", 0); + } + KernLog("\n"); + x += 20; } KernLog("\n\n");