From c3f1550bba75c34002821e428f14eccb8dab2510 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 4 Jan 2014 02:19:25 +0100 Subject: [PATCH] Remove kernel/serialterminal.{cpp,h}. --- kernel/Makefile | 1 - kernel/kernel.cpp | 1 - kernel/serialterminal.cpp | 159 -------------------------------------- kernel/serialterminal.h | 40 ---------- kernel/time.cpp | 4 - kernel/uart.cpp | 133 ------------------------------- kernel/uart.h | 4 - 7 files changed, 342 deletions(-) delete mode 100644 kernel/serialterminal.cpp delete mode 100644 kernel/serialterminal.h diff --git a/kernel/Makefile b/kernel/Makefile index 5b8373c8..a4b305a8 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -127,7 +127,6 @@ refcount.o \ resource.o \ scheduler.o \ segment.o \ -serialterminal.o \ signal.o \ string.o \ symbol.o \ diff --git a/kernel/kernel.cpp b/kernel/kernel.cpp index 4fc7899b..0870eb10 100644 --- a/kernel/kernel.cpp +++ b/kernel/kernel.cpp @@ -90,7 +90,6 @@ #include "pipe.h" #include "poll.h" #include "resource.h" -#include "serialterminal.h" #include "textterminal.h" #include "uart.h" #include "vga.h" diff --git a/kernel/serialterminal.cpp b/kernel/serialterminal.cpp deleted file mode 100644 index ca35f686..00000000 --- a/kernel/serialterminal.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/******************************************************************************* - - Copyright(C) Jonas 'Sortie' Termansen 2011. - - This file is part of Sortix. - - Sortix 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. - - Sortix 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 - Sortix. If not, see . - - serialterminal.cpp - A terminal on a serial line. - -*******************************************************************************/ - -#include - -#include -#include -#include - -#include "vga.h" -#include "uart.h" -#include "serialterminal.h" - -namespace Sortix -{ - namespace SerialTerminal - { - void Reset() - { - // Set the cursor to (0,0) and clear the screen. - const char InitMessage[] = "\e[37m\e[40m\e[2J\e[H"; - UART::Write(InitMessage, strlen(InitMessage)); - } - - bool isEsc; - bool isEscDepress; - int sigpending; - - const bool ECHO_TO_VGA = true; - - bool cursordisabled; - - void Init() - { - Reset(); - - isEsc = isEscDepress = false; - sigpending = -1; - cursordisabled = false; - } - - void OnTick() - { - // TODO: Yeah, this is a bad hack. - int c; - while ( (c=UART::TryPopChar()) != -1 ) - { - // TODO: Support for hooking the serial input up against the keyboard API have broken - #if 0 - // TODO: This is no longer compatible with the keyboard API, so - // it has been commented out. Besides, JSSortix isn't really - // supported anyway. It'd be nice to refactor this into a - // SerialKeyboard class or something. - - using namespace Maxsi::Keyboard; - - if ( !isEsc && c == '\e' ) { isEsc = true; continue; } - if ( isEsc && c == '\e' ) { isEsc = false; } - if ( isEsc && c == '[' ) { continue; } - if ( isEsc && c == ']' ) { isEscDepress = true; continue; } - if ( isEsc && !isEscDepress && c == 'A' ) { Keyboard::QueueKeystroke(UP); } - if ( isEsc && !isEscDepress && c == 'B' ) { Keyboard::QueueKeystroke(DOWN); } - if ( isEsc && !isEscDepress && c == 'C' ) { Keyboard::QueueKeystroke(RIGHT); } - if ( isEsc && !isEscDepress && c == 'D' ) { Keyboard::QueueKeystroke(LEFT); } - if ( isEsc && isEscDepress && c == 'A' ) { Keyboard::QueueKeystroke(UP | DEPRESSED); } - if ( isEsc && isEscDepress && c == 'B' ) { Keyboard::QueueKeystroke(DOWN | DEPRESSED); } - if ( isEsc && isEscDepress && c == 'C' ) { Keyboard::QueueKeystroke(RIGHT | DEPRESSED); } - if ( isEsc && isEscDepress && c == 'D' ) { Keyboard::QueueKeystroke(LEFT | DEPRESSED); } - if ( isEsc ) { isEsc = false; isEscDepress = false; continue; } - if ( c == '\e' ) { c = ESC; } - if ( c == ('\e' | (1<<7)) ) { c = ESC | DEPRESSED; } - if ( c == 145 ) // Control Depressed - { - if ( sigpending < 0 ) { continue; } - if ( sigpending == 'C' - 'A' + 1 ) - { - Scheduler::SigIntHack(); - continue; - } - - Keyboard::QueueKeystroke(CTRL); - Keyboard::QueueKeystroke('A' + sigpending - 1); - Keyboard::QueueKeystroke(CTRL | DEPRESSED); - sigpending = -1; - continue; - } - if ( c < 32 ) { sigpending = c; } else { sigpending = -1; } - switch ( c ) - { - default: - // Ignore most unprintable characters. - if ( c < 32 ) { continue; } - case '\b': - case '\t': - case '\r': - case '\n': - case '\e': - case '\f': - break; - } - if ( c == 127 ) { c = '\b'; } - if ( c & (1<<7) ) - { - c &= ~(1<<7); c |= DEPRESSED; - } - Keyboard::QueueKeystroke(c); - #endif - } - } - - void OnVGAModified() - { - if ( !cursordisabled ) - { - const char* msg = "\e[l"; - UART::Write(msg, strlen(msg)); - cursordisabled = true; - } - UART::RenderVGA((const uint16_t*) 0xB8000); - } - - size_t Print(void* /*user*/, const char* string, size_t stringlen) - { - // TODO: Echoing to the VGA terminal is broken -#if 0 - if ( ECHO_TO_VGA ) { VGATerminal::Print(NULL, string, stringlen); } -#endif - if ( cursordisabled ) - { - const char* msg = "\e[h"; - UART::Write(msg, strlen(msg)); - cursordisabled = false; - } - UART::Write(string, stringlen); - return stringlen; - } - } -} diff --git a/kernel/serialterminal.h b/kernel/serialterminal.h deleted file mode 100644 index 7eda0183..00000000 --- a/kernel/serialterminal.h +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. - - This file is part of Sortix. - - Sortix 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. - - Sortix 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 - Sortix. If not, see . - - serialterminal.h - A terminal on a serial line. - -*******************************************************************************/ - -#ifndef SORTIX_SERIALTERMINAL_H -#define SORTIX_SERIALTERMINAL_H - -namespace Sortix -{ - namespace SerialTerminal - { - void Init(); - void Reset(); - void OnTick(); - void OnVGAModified(); - size_t Print(void* user, const char* string, size_t stringlen); - } -} - -#endif diff --git a/kernel/time.cpp b/kernel/time.cpp index b304547d..1e354ab3 100644 --- a/kernel/time.cpp +++ b/kernel/time.cpp @@ -39,10 +39,6 @@ #include #include -#ifdef PLATFORM_SERIAL -#include "serialterminal.h" -#endif - namespace Sortix { namespace Time { diff --git a/kernel/uart.cpp b/kernel/uart.cpp index f3a38c98..f2183564 100644 --- a/kernel/uart.cpp +++ b/kernel/uart.cpp @@ -65,10 +65,6 @@ namespace Sortix const unsigned BASE_BAUD = 1843200/16; const unsigned BOTH_EMPTY = LSR_TEMT | LSR_THRE; - const unsigned FrameWidth = 80; - const unsigned FrameHeight = 25; - uint16_t VGALastFrame[FrameWidth * FrameHeight]; - unsigned ProbeBaud(unsigned Port) { uint8_t lcr = CPU::InPortB(Port + LCR); @@ -98,8 +94,6 @@ namespace Sortix void Init() { - InvalidateVGA(); - Baud = ProbeBaud(Port); CPU::OutPortB(Port + LCR, 0x3); // 8n1 @@ -187,132 +181,5 @@ namespace Sortix return Result; } - - void WriteNumberAsString(uint8_t Num) - { - if ( Num > 100 ) { WriteChar(Num / 100); } - if ( Num > 10 ) { WriteChar(Num / 10); } - - WriteChar(Num % 10); - } - - // Change from VGA color to another color system. - unsigned ConversionTable[16] = { 0, 4, 2, 6, 1, 5, 3, 7, 0, 4, 2, 6, 1, 5, 3, 7 }; - - void InvalidateVGA() - { - for ( unsigned I = 0; I < FrameWidth * FrameHeight; I++ ) { VGALastFrame[I] = 0; } - } - - void RenderVGA(const uint16_t* Frame) - { - const uint16_t* Source = Frame; - - unsigned LastColor = 1337; - unsigned SkippedSince = 0; - bool posundefined = true; - - for ( unsigned Y = 0; Y < FrameHeight; Y++) - { - for ( unsigned X = 0; X < FrameWidth; X++ ) - { - unsigned Index = Y * FrameWidth + X; - - unsigned Element = Source[Index]; - unsigned OldElement = VGALastFrame[Index]; - - if ( Element == OldElement ) { continue; } - - // Update the position if we skipped some characters. - if ( Index - SkippedSince > 8 || posundefined ) - { - const unsigned LineId = Y + 1; - const unsigned ColumnId = X + 1; - - if ( ColumnId > 1 ) - { - UART::WriteChar('\e'); - UART::WriteChar('['); - UART::WriteChar('0' + LineId / 10); - UART::WriteChar('0' + LineId % 10); - UART::WriteChar(';'); - UART::WriteChar('0' + ColumnId / 10); - UART::WriteChar('0' + ColumnId % 10); - UART::WriteChar('H'); - } - else - { - UART::WriteChar('\e'); - UART::WriteChar('['); - UART::WriteChar('0' + LineId / 10); - UART::WriteChar('0' + LineId % 10); - UART::WriteChar('H'); - } - - SkippedSince = Index; - posundefined = false; - } - - for ( unsigned Pos = SkippedSince; Pos <= Index; Pos++ ) - { - Element = Source[Pos]; - OldElement = VGALastFrame[Pos]; - - unsigned NewColor = (ConversionTable[ (Element >> 12) & 0xF ] << 3) | (ConversionTable[ (Element >> 8) & 0xF ]); - - // Change the color if we need to. - if ( LastColor != NewColor ) - { - unsigned OldFGColor = LastColor % 8; - unsigned OldBGColor = LastColor / 8; - unsigned FGColor = NewColor % 8; - unsigned BGColor = NewColor / 8; - if ( LastColor == 1337 ) { OldFGColor = 9; OldBGColor = 9; } - - if ( (OldFGColor != FGColor) && (OldBGColor != BGColor) ) - { - UART::WriteChar('\e'); - UART::WriteChar('['); - UART::WriteChar('3'); - UART::WriteChar('0' + FGColor); - UART::WriteChar(';'); - UART::WriteChar('4'); - UART::WriteChar('0' + BGColor); - UART::WriteChar('m'); - } - else if ( OldFGColor != FGColor ) - { - UART::WriteChar('\e'); - UART::WriteChar('['); - UART::WriteChar('3'); - UART::WriteChar('0' + FGColor); - UART::WriteChar('m'); - } - else if ( OldBGColor != BGColor ) - { - UART::WriteChar('\e'); - UART::WriteChar('['); - UART::WriteChar('4'); - UART::WriteChar('0' + BGColor); - UART::WriteChar('m'); - } - - LastColor = NewColor; - } - - VGALastFrame[Pos] = Element; - - Element &= 0x7F; - - // Filter away any non-printable characters. - if ( Element < 32 || Element > 126 ) { Element = '?'; } - - UART::WriteChar(Element); - } - - SkippedSince = Index + 1; - } - } - } } } diff --git a/kernel/uart.h b/kernel/uart.h index 69aa992d..db8b2cae 100644 --- a/kernel/uart.h +++ b/kernel/uart.h @@ -34,10 +34,6 @@ namespace Sortix void Write(const void* Buffer, size_t Size); void WriteChar(char C); int TryPopChar(); -#ifdef SORTIX_VGA_H - void InvalidateVGA(); - void RenderVGA(const uint16_t* frame = (const uint16_t*) 0xB8000UL); -#endif } }