From 7ac48c1893d9c36bb7670abd5d58bc69783d887d Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Thu, 20 Dec 2018 18:24:09 +0100 Subject: [PATCH] Adding FAT in the mbr, moving test and 'work' in the loader --- src/boot/mbr.inc | 77 ------------------------------------ src/boot/pseudo_kern.c | 28 -------------- src/boot/pseudo_screen.c | 84 ---------------------------------------- 3 files changed, 189 deletions(-) delete mode 100644 src/boot/pseudo_kern.c delete mode 100644 src/boot/pseudo_screen.c diff --git a/src/boot/mbr.inc b/src/boot/mbr.inc index a03437e..682cfd7 100644 --- a/src/boot/mbr.inc +++ b/src/boot/mbr.inc @@ -9,80 +9,3 @@ ;=----------------------------------------------------------------------------=; -;-----------------------------------------------------------------------; -; Checks if the CPU is compatible with 64-bits operating systems ; -; If the 21th bit of the eax register is set, then CPUID is supported ; -; We then test CPUID's result to see if long mode is supported ; -;-----------------------------------------------------------------------; -[BITS 16] -Is64bits: - pushfd ; recovering the flags in eax - pop eax - mov ecx, eax - xor eax, 0x200000 - push eax - popfd - - pushfd - pop eax - xor eax, ecx - shr eax, 21 - and eax, 1 ; magical spell of murta - push ecx - popfd - - test eax, eax - jz .NonCompat ; if (CPUID non supporté) goto NonCompat - - mov eax, 0x80000000 - cpuid - cmp eax, 0x80000001 - jb .NonCompat ; if (eax <= 0x80000001) goto NonCompat - - mov eax, 0x80000001 - cpuid - test edx, 1 << 29 - jz .NonCompat ; if (edx != 1 << 29) goto NonCompat - - ret ; back to mbr.s - -.NonCompat: - stc - ret - -;-------------------------------------------------------------------; -; loading second stage loader (loader.s) ; -;-------------------------------------------------------------------; -LoadSec: - - ;; prepare data for reading the disk - xor ax, ax - mov dl, [Bootdrv] - int 0x13 - - mov ax, SECOND_STAGE - mov es, ax - xor bx, bx - - mov ah, 2 ; ah = 2 = function read sectors from disk - mov al, 2 ; al = number of sectors to read (1 - 128) - xor ch, ch ; ch = track/cylinder number - mov cl, 2 ; sector number - xor dh, dh ; dh = head number - mov dl, [Bootdrv] - int 0x13 - jc .read_error - - ret - -.read_error: - popa - stc - ret - - - - - - - diff --git a/src/boot/pseudo_kern.c b/src/boot/pseudo_kern.c deleted file mode 100644 index ca7f3fc..0000000 --- a/src/boot/pseudo_kern.c +++ /dev/null @@ -1,28 +0,0 @@ -//----------------------------------------------------------------------------// -// GNU GPL OS/K // -// // -// Authors: spectral` // -// NeoX // -// // -// Desc: Kernel entry point // -//----------------------------------------------------------------------------// - -extern void scrollup(unsigned int); -extern void print(char *); - -extern kY; -extern kattr; - -void _start(void) -{ - kY = 18; - kattr = 0x5E; - print("un message\n"); - - kattr = 0x4E; - print("un autre message\n"); - - scrollup(2); - - while (1); -} diff --git a/src/boot/pseudo_screen.c b/src/boot/pseudo_screen.c deleted file mode 100644 index 8df3ea7..0000000 --- a/src/boot/pseudo_screen.c +++ /dev/null @@ -1,84 +0,0 @@ -//----------------------------------------------------------------------------// -// GNU GPL OS/K // -// // -// Authors: spectral` // -// NeoX // -// // -// Desc: Kernel screen func // -//----------------------------------------------------------------------------// -#include "types.h" - -#define RAMSCREEN 0xB8000 /* debut de la memoire video */ -#define SIZESCREEN 0xFA0 /* 4000, nombres d'octets d'une page texte */ -#define SCREENLIM 0xB8FA0 - -char kX = 0; /* position courante du curseur a l'ecran */ -char kY = 17; -char kattr = 0x0E; /* attributs video des caracteres a afficher */ - - -/* - * 'scrollup' scrolle l'ecran (la console mappee en ram) vers le haut - * de n lignes (de 0 a 25). - */ -void scrollup(unsigned int n) -{ - unsigned char *video, *tmp; - - for (video = (unsigned char *) RAMSCREEN; - video < (unsigned char *) SCREENLIM; video += 2) { - tmp = (unsigned char *) (video + n * 160); - - if (tmp < (unsigned char *) SCREENLIM) { - *video = *tmp; - *(video + 1) = *(tmp + 1); - } else { - *video = 0; - *(video + 1) = 0x07; - } - } - - kY -= n; - if (kY < 0) - kY = 0; -} - -void putcar(uchar c) -{ - unsigned char *video; - int i; - - if (c == 10) { /* CR-NL */ - kX = 0; - kY++; - } else if (c == 9) { /* TAB */ - kX = kX + 8 - (kX % 8); - } else if (c == 13) { /* CR */ - kX = 0; - } else { /* autres caracteres */ - video = (unsigned char *) (RAMSCREEN + 2 * kX + 160 * kY); - *video = c; - *(video + 1) = kattr; - - kX++; - if (kX > 79) { - kX = 0; - kY++; - } - } - - if (kY > 24) - scrollup(kY - 24); -} - -/* - * 'print' affiche a l'ecran, a la position courante du curseur, une chaine - * de caracteres terminee par \0. - */ -void print(char *string) -{ - while (*string != 0) { /* tant que le caractere est different de 0x0 */ - putcar(*string); - string++; - } -}