From 457a2117706cdaee34f894e67c89da7bf29f6143 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 12 Apr 2021 10:28:04 +0200 Subject: Refactoring --- src/drivers/8042.c | 16 ++++++++++++ src/drivers/8042.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++ src/drivers/framebuffer.c | 58 ++++++++++++++++++++++++++++++++++++++++++ src/drivers/framebuffer.h | 35 ++++++++++++++++++++++++++ src/drivers/pic.c | 28 +++++++++++++++++++++ src/drivers/pic.h | 9 +++++++ 6 files changed, 210 insertions(+) create mode 100644 src/drivers/8042.c create mode 100644 src/drivers/8042.h create mode 100644 src/drivers/framebuffer.c create mode 100644 src/drivers/framebuffer.h create mode 100644 src/drivers/pic.c create mode 100644 src/drivers/pic.h (limited to 'src/drivers') diff --git a/src/drivers/8042.c b/src/drivers/8042.c new file mode 100644 index 0000000..c6d3f22 --- /dev/null +++ b/src/drivers/8042.c @@ -0,0 +1,16 @@ +#include "8042.h" +#include "drivers/framebuffer.h" +#include "core/asm.h" + +DEFINE_AZERTY; + +void _8042_keypress(){ + u8 data; + do { + inb(0x64,data); + } + while((data&0x01) == 0); + inb(0x60,data); + if(data<0x80) + putchar(AZERTY[data]); +} diff --git a/src/drivers/8042.h b/src/drivers/8042.h new file mode 100644 index 0000000..5e61ffd --- /dev/null +++ b/src/drivers/8042.h @@ -0,0 +1,64 @@ +#ifndef _8042_H +#define _8042_H + +#include "core/types.h" + +void _8042_keypress(); + +#define DEFINE_AZERTY char AZERTY[]={\ + '\0',\ + '\0',\ + '&',\ + '\0',\ + '"',\ + '\'',\ + '(',\ + '-',\ + '\0',\ + '_',/* 10 */\ + '\0',\ + '\0',\ + ')',\ + '=',\ + '\0',\ + '\t',\ + 'a',\ + 'z',\ + 'e',\ + 'r',\ + 't',\ + 'y',\ + 'u',\ + 'i',\ + 'o',\ + 'p',\ + '^',\ + '$',\ + '\0',\ + '\0',\ + 'q',/* 0x1E (30) */\ + 's',\ + 'd',\ + 'f',\ + 'g',\ + 'h',\ + 'j',\ + 'k',\ + 'l',\ + 'm',\ + '\0',\ + '\0',\ + '\0',\ + '*',\ + 'w',\ + 'x',\ + 'c',\ + 'v',\ + 'b',/* 0x30 (48) */\ + 'n',\ + ',',\ + ';',\ + ':',\ +} + +#endif \ No newline at end of file diff --git a/src/drivers/framebuffer.c b/src/drivers/framebuffer.c new file mode 100644 index 0000000..110dc73 --- /dev/null +++ b/src/drivers/framebuffer.c @@ -0,0 +1,58 @@ +#include "framebuffer.h" + +#define MAX_COL 80 +#define MAX_LINE 25 + +VIDEO_STATE VS={ + (u8 *)0xB8000, + 0, + 0, + BLACK, + GRAY, +}; + +void putchar(char c){ + // Handle newline here + if(c=='\n'){ + VS.col=0; + VS.line+=1; + if(VS.line>=MAX_LINE){ + VS.line=MAX_LINE-1; + scrollup(); + } + return; + } + + // Print char + VS.mem[VS.col*2+MAX_COL*VS.line*2]=c; + VS.mem[VS.col*2+MAX_COL*VS.line*2+1]=VS.fg|VS.bg<<4; + + // Refresh location + VS.col+=1; + if(VS.col>= MAX_COL){ + VS.col=0; + VS.line+=1; + if(VS.line>=MAX_LINE){ + VS.line=MAX_LINE-1; + scrollup(); + } + } +} + +void clear(){ + for(char i=0;i