From 6f86a1dc28f39dfe5f6fc59c565840d58fe49022 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Wed, 24 Apr 2019 00:05:30 +0200 Subject: [PATCH] Exception are now fully supported, working on keyboard and rtc --- kaleid/kernel/cpu/rtc.c | 41 ++++++++++++++++++++++++ kaleid/kernel/io/keyb.asm | 67 +++++++++++++++++++++++++++++++++++++++ kaleid/kernel/io/keyb.c | 26 +++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 kaleid/kernel/cpu/rtc.c create mode 100644 kaleid/kernel/io/keyb.asm create mode 100644 kaleid/kernel/io/keyb.c diff --git a/kaleid/kernel/cpu/rtc.c b/kaleid/kernel/cpu/rtc.c new file mode 100644 index 0000000..840cc80 --- /dev/null +++ b/kaleid/kernel/cpu/rtc.c @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Interrupt related functions // +// // +// // +// 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 +#include + +void CpuEnableRtc(void) +{ + ulong flags = KePauseIRQs(); + // Setting up the register control + IoWriteByteOnPort(0x70, 0x8A); //selects status reg A and DISABLE NMI + IoWriteByteOnPort(0x71, 0x20); + //Enabling the IRQ 8 + IoWriteByteOnPort(0x70, 0x8B); + char read = IoReadByteFromPort(0x71); // Because read causes reset + IoWriteByteOnPort(0x70, 0x8B); + IoWriteByteOnPort(0x71, read | 0x40); + KeRestoreIRQs(flags); +} diff --git a/kaleid/kernel/io/keyb.asm b/kaleid/kernel/io/keyb.asm new file mode 100644 index 0000000..a1b4075 --- /dev/null +++ b/kaleid/kernel/io/keyb.asm @@ -0,0 +1,67 @@ +;=----------------------------------------------------------------------------=; +; GNU GPL OS/K ; +; ; +; Desc: Basic Read Only Keyboard Driver ; +; (x86_64 architecture only) ; +; ; +; ; +; 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 ; +; (at your option) 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 . ; +;=----------------------------------------------------------------------------=; + +global KeybIsr +extern KeybHandler + +%macro pushAll 0 + push rax + push rcx + push rdx + push rbx + push rbp + push rsi + push rdi +%endmacro + +%macro popAll 0 + pop rdi + pop rsi + pop rbp + pop rbx + pop rdx + pop rcx + pop rax +%endmacro + +;; +;; Keyboard handler +;; +KeybIsr: + cli + pushAll + + xor rax, rax + mov ax, ds + push rax + + call KeybHandler + + pop rax + mov ds, ax + + popAll + sti + iretq diff --git a/kaleid/kernel/io/keyb.c b/kaleid/kernel/io/keyb.c new file mode 100644 index 0000000..8daf699 --- /dev/null +++ b/kaleid/kernel/io/keyb.c @@ -0,0 +1,26 @@ +//----------------------------------------------------------------------------// +// GNU GPL OS/K // +// // +// Desc: Basic Read Only Keyboard 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