add a shnitton of loggers
This commit is contained in:
@ -8,12 +8,12 @@ void BufferedCGA::init(unsigned int pages) {
|
||||
this->screen_buffer = std::make_unique<CGA::cga_page_t>();
|
||||
|
||||
if (this->scrollback_buffer == NULL || this->screen_buffer == NULL) {
|
||||
if constexpr (DEBUG) { kout << "Error initializing scrollback buffer" << endl; }
|
||||
log << ERROR << "Error initializing scrollback buffer" << endl;
|
||||
return;
|
||||
}
|
||||
|
||||
this->initialized = true;
|
||||
if constexpr (DEBUG) { kout << "Initialized scrollback buffer" << endl; }
|
||||
log << INFO << "Initialized scrollback buffer" << endl;
|
||||
}
|
||||
|
||||
void BufferedCGA::display_scrollback() {
|
||||
@ -26,7 +26,7 @@ void BufferedCGA::display_scrollback() {
|
||||
this->scrollback_buffer->get((CGA::cga_line_t*)CGA_START, this->scrollback - 1);
|
||||
}
|
||||
} else {
|
||||
if constexpr (DEBUG) { kout << "ScrollbackBuffer not initialized" << endl; }
|
||||
log << DEBUG << "ScrollbackBuffer not initialized" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ void BufferedCGA::scrollup() {
|
||||
if (this->initialized) {
|
||||
this->scrollback_buffer->put((CGA::cga_line_t*)CGA_START);
|
||||
} else {
|
||||
if constexpr (DEBUG) { kout << "ScrollbackBuffer not initialized" << endl; }
|
||||
log << DEBUG << "ScrollbackBuffer not initialized" << endl;
|
||||
}
|
||||
|
||||
CGA::scrollup();
|
||||
@ -59,7 +59,7 @@ void BufferedCGA::clear() {
|
||||
this->scrollback_buffer->clear();
|
||||
mmem::zero<CGA::cga_page_t>(this->screen_buffer.get());
|
||||
} else {
|
||||
if constexpr (DEBUG) { kout << "ScrollbackBuffer not initialized" << endl; }
|
||||
log << DEBUG << "ScrollbackBuffer not initialized" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ void BufferedCGA::scroll_page_backward() {
|
||||
}
|
||||
this->display_scrollback();
|
||||
} else {
|
||||
if constexpr (DEBUG) { kout << "ScrollbackBuffer not initialized" << endl; }
|
||||
log << DEBUG << "ScrollbackBuffer not initialized" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,6 +90,6 @@ void BufferedCGA::scroll_page_forward() {
|
||||
}
|
||||
this->display_scrollback();
|
||||
} else {
|
||||
if constexpr (DEBUG) { kout << "ScrollbackBuffer not initialized" << endl; }
|
||||
log << DEBUG << "ScrollbackBuffer not initialized" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
#include "devices/CGA.h"
|
||||
#include "devices/Keyboard.h"
|
||||
#include "user/lib/Logger.h"
|
||||
#include "user/ScrollbackBuffer.h"
|
||||
#include <memory>
|
||||
|
||||
@ -16,8 +17,10 @@ private:
|
||||
|
||||
BufferedCGA(const BufferedCGA&) = delete;
|
||||
|
||||
Logger log;
|
||||
|
||||
public:
|
||||
BufferedCGA() : initialized(false), scrollback(0) {}
|
||||
BufferedCGA() : initialized(false), scrollback(0), log("BufferedCGA") {}
|
||||
|
||||
unsigned char scrollback; // The page that is displayed, public to enable page display
|
||||
|
||||
|
||||
@ -148,7 +148,7 @@ void LFBgraphics::drawStraightLine(unsigned int x1, unsigned int y1, unsigned in
|
||||
this->drawPixel(i, y1, col);
|
||||
}
|
||||
} else {
|
||||
kout << "Error (LFBgraphics::drawStraightLine): Line is not straight" << endl;
|
||||
log << ERROR << "Line is not straight" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#define __LFBgraphics_include__
|
||||
|
||||
#include "devices/fonts/Fonts.h"
|
||||
#include "user/lib/Logger.h"
|
||||
|
||||
// Hilfsfunktionen um Farbwerte fuer einen Pixel zu erzeugen
|
||||
#define RGB_24(r, g, b) (unsigned int)((r << 16) + (g << 8) + b)
|
||||
@ -24,10 +25,11 @@
|
||||
#define BUFFER_VISIBLE 1
|
||||
|
||||
class LFBgraphics {
|
||||
|
||||
private:
|
||||
LFBgraphics(const LFBgraphics& copy) = delete; // Verhindere Kopieren
|
||||
|
||||
Logger log;
|
||||
|
||||
// Hilfsfunktion fuer drawString
|
||||
void drawMonoBitmap(unsigned int x, unsigned int y,
|
||||
unsigned int width, unsigned int height,
|
||||
@ -40,7 +42,7 @@ public:
|
||||
unsigned int hfb; // Adresse des versteckten Buffers (optional, fuer Animationen)
|
||||
unsigned int mode; // Zeichnen im sichtbaren = 1 oder unsichtbaren = 0 Puffer
|
||||
|
||||
LFBgraphics() : mode(BUFFER_VISIBLE) {};
|
||||
LFBgraphics() : log("LFBgraphics"), mode(BUFFER_VISIBLE) {};
|
||||
|
||||
void clear();
|
||||
void drawPixel(unsigned int x, unsigned int y, unsigned int col);
|
||||
|
||||
@ -29,7 +29,6 @@ void PIT::interval(int us) {
|
||||
control.outb(0x36); // Zähler 0 Mode 3
|
||||
|
||||
unsigned int cntStart = (1193180.0 / 1000000.0) * us; // 1.19Mhz PIT
|
||||
// kout << "PIT cntStart: " << dec << cntStart << endl;
|
||||
|
||||
IOport data0(0x40);
|
||||
data0.outb(cntStart & 0xFF); // Zaehler-0 laden (Lobyte)
|
||||
|
||||
@ -14,11 +14,10 @@
|
||||
#include "kernel/interrupts/ISR.h"
|
||||
|
||||
class PIT : public ISR {
|
||||
|
||||
private:
|
||||
PIT(const PIT ©) = delete; // Verhindere Kopieren
|
||||
|
||||
enum { time_base = 838 }; /* ns */
|
||||
PIT(const PIT& copy) = delete; // Verhindere Kopieren
|
||||
|
||||
enum { time_base = 838 }; /* ns */
|
||||
int timer_interval;
|
||||
|
||||
char indicator[4] = {'|', '/', '-', '\\'};
|
||||
@ -27,24 +26,24 @@ private:
|
||||
|
||||
public:
|
||||
// Zeitgeber initialisieren.
|
||||
PIT (int us) {
|
||||
interval (us);
|
||||
PIT(int us) {
|
||||
this->interval(us);
|
||||
}
|
||||
|
||||
|
||||
// Konfiguriertes Zeitintervall auslesen.
|
||||
int interval () {
|
||||
int interval() {
|
||||
return timer_interval;
|
||||
}
|
||||
|
||||
|
||||
// Zeitintervall in Mikrosekunden, nachdem periodisch ein Interrupt
|
||||
//erzeugt werden soll.
|
||||
void interval (int us);
|
||||
void interval(int us);
|
||||
|
||||
// Aktivierung der Unterbrechungen fuer den Zeitgeber
|
||||
void plugin ();
|
||||
|
||||
void plugin();
|
||||
|
||||
// Unterbrechnungsroutine des Zeitgebers.
|
||||
void trigger ();
|
||||
void trigger();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -8,64 +8,59 @@
|
||||
* Autor: Michael Schoettner, HHU, 18.3.2017 *
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
#include "devices/VESA.h"
|
||||
#include "kernel/BIOS.h"
|
||||
#include "kernel/Globals.h"
|
||||
|
||||
|
||||
// Informationen ueber einen VESA-Grafikmodus
|
||||
// (siehe http://wiki.osdev.org/VESA_Video_Modes)
|
||||
struct VbeModeInfoBlock {
|
||||
unsigned short attributes;
|
||||
unsigned char winA,winB;
|
||||
unsigned short granularity;
|
||||
unsigned short winsize;
|
||||
unsigned short segmentA, segmentB;
|
||||
unsigned short realFctPtr[2];
|
||||
unsigned short pitch; // Bytes pro Scanline
|
||||
|
||||
unsigned short Xres, Yres;
|
||||
unsigned char Wchar, Ychar, planes, bpp, banks;
|
||||
unsigned char memory_model, bank_size, image_pages;
|
||||
unsigned char reserved0;
|
||||
|
||||
unsigned char red_mask, red_position;
|
||||
unsigned char green_mask, green_position;
|
||||
unsigned char blue_mask, blue_position;
|
||||
unsigned char rsv_mask, rsv_position;
|
||||
unsigned char directcolor_attributes;
|
||||
|
||||
unsigned int physbase; // Adresse des Linear-Framebuffers
|
||||
unsigned int OffScreenMemOffset;
|
||||
unsigned short OffScreenMemSize;
|
||||
} __attribute__((packed));
|
||||
unsigned short attributes;
|
||||
unsigned char winA, winB;
|
||||
unsigned short granularity;
|
||||
unsigned short winsize;
|
||||
unsigned short segmentA, segmentB;
|
||||
unsigned short realFctPtr[2];
|
||||
unsigned short pitch; // Bytes pro Scanline
|
||||
|
||||
unsigned short Xres, Yres;
|
||||
unsigned char Wchar, Ychar, planes, bpp, banks;
|
||||
unsigned char memory_model, bank_size, image_pages;
|
||||
unsigned char reserved0;
|
||||
|
||||
unsigned char red_mask, red_position;
|
||||
unsigned char green_mask, green_position;
|
||||
unsigned char blue_mask, blue_position;
|
||||
unsigned char rsv_mask, rsv_position;
|
||||
unsigned char directcolor_attributes;
|
||||
|
||||
unsigned int physbase; // Adresse des Linear-Framebuffers
|
||||
unsigned int OffScreenMemOffset;
|
||||
unsigned short OffScreenMemSize;
|
||||
} __attribute__((packed));
|
||||
|
||||
// Informationen ueber die Grafikkarte
|
||||
// (siehe http://wiki.osdev.org/VESA_Video_Modes)
|
||||
struct VbeInfoBlock {
|
||||
char VbeSignature[4]; // == "VESA"
|
||||
unsigned short VbeVersion; // == 0x0300 for VBE 3.0
|
||||
unsigned short OemStringPtr[2]; // isa vbeFarPtr
|
||||
unsigned char Capabilities[4];
|
||||
unsigned short VideoModePtr[2]; // isa vbeFarPtr
|
||||
unsigned short TotalMemory; // as # of 64KB blocks
|
||||
char VbeSignature[4]; // == "VESA"
|
||||
unsigned short VbeVersion; // == 0x0300 for VBE 3.0
|
||||
unsigned short OemStringPtr[2]; // isa vbeFarPtr
|
||||
unsigned char Capabilities[4];
|
||||
unsigned short VideoModePtr[2]; // isa vbeFarPtr
|
||||
unsigned short TotalMemory; // as # of 64KB blocks
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Methode: VESA::initTextMode *
|
||||
*---------------------------------------------------------------------------*
|
||||
* Beschreibung: Schalter in den Text-Modus 80x25 Zeichen. *
|
||||
*****************************************************************************/
|
||||
void VESA::initTextMode() {
|
||||
BC_params->AX = 0x4f02; // SVFA BIOS, init mode
|
||||
BC_params->BX = 0x4003; // 80x25
|
||||
BC_params->AX = 0x4f02; // SVFA BIOS, init mode
|
||||
BC_params->BX = 0x4003; // 80x25
|
||||
bios.Int(0x10);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Methode: VESA::initGraphicMode *
|
||||
*---------------------------------------------------------------------------*
|
||||
@ -81,29 +76,29 @@ bool VESA::initGraphicMode(unsigned short mode) {
|
||||
BC_params->ES = RETURN_MEM >> 4;
|
||||
BC_params->DI = RETURN_MEM & 0xF;
|
||||
bios.Int(0x10);
|
||||
|
||||
struct VbeInfoBlock *ib = (struct VbeInfoBlock *) RETURN_MEM;
|
||||
|
||||
|
||||
struct VbeInfoBlock* ib = (struct VbeInfoBlock*)RETURN_MEM;
|
||||
|
||||
// Signaturen pruefen
|
||||
if (BC_params->AX != 0x004F) {
|
||||
kout << "Error: VESA wird nicht unterstuetzt." << endl;
|
||||
log << ERROR << "VESA wird nicht unterstuetzt." << endl;
|
||||
return false;
|
||||
}
|
||||
if (ib->VbeSignature[0]!='V' || ib->VbeSignature[1]!='E' ||
|
||||
ib->VbeSignature[2]!='S' || ib->VbeSignature[3]!='A' ) {
|
||||
kout << "Error: VESA wird nicht unterstuetzt." << endl;
|
||||
if (ib->VbeSignature[0] != 'V' || ib->VbeSignature[1] != 'E' ||
|
||||
ib->VbeSignature[2] != 'S' || ib->VbeSignature[3] != 'A') {
|
||||
log << ERROR << "VESA wird nicht unterstuetzt." << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
// kout << "TotalVideoMemory: " << ((ib->TotalMemory*65536) / (1024*1024)) << " MB" << endl;
|
||||
// kout << "TotalVideoMemory: " << ((ib->TotalMemory*65536) / (1024*1024)) << " MB" << endl;
|
||||
|
||||
// Gewuenschten Grafikmodus aus Antwort suchen
|
||||
unsigned short *modePtr = (unsigned short*)( (ib->VideoModePtr[1]<<4) + ib->VideoModePtr[0]);
|
||||
for (int i=0; modePtr[i]!=0xFFFF; ++i ) {
|
||||
unsigned short* modePtr = (unsigned short*)((ib->VideoModePtr[1] << 4) + ib->VideoModePtr[0]);
|
||||
for (int i = 0; modePtr[i] != 0xFFFF; ++i) {
|
||||
// Gewuenschter Grafikmodus gefunden?
|
||||
if (modePtr[i] == mode) {
|
||||
struct VbeModeInfoBlock *minf = (struct VbeModeInfoBlock *)RETURN_MEM;
|
||||
|
||||
struct VbeModeInfoBlock* minf = (struct VbeModeInfoBlock*)RETURN_MEM;
|
||||
|
||||
// Weitere Infos ueber diesen Grafikmodus abfragen
|
||||
BC_params->AX = 0x4F01;
|
||||
BC_params->CX = mode;
|
||||
@ -112,26 +107,26 @@ bool VESA::initGraphicMode(unsigned short mode) {
|
||||
bios.Int(0x10);
|
||||
|
||||
// Text-Modi 0-3 haben keinen LFB
|
||||
if ( mode > 3 && (minf->attributes & 0x90) == 0 ) {
|
||||
kout << "Error: Grafikmodus bietet keinen linearen Framebuffer." << endl;
|
||||
if (mode > 3 && (minf->attributes & 0x90) == 0) {
|
||||
log << ERROR << "Grafikmodus bietet keinen linearen Framebuffer." << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
mode_nr = mode;
|
||||
xres = minf->Xres;
|
||||
yres = minf->Yres;
|
||||
bpp = (int) minf->bpp;
|
||||
lfb = minf->physbase;
|
||||
|
||||
hfb = (unsigned int) new char [xres*yres*bpp/8];
|
||||
|
||||
bpp = (int)minf->bpp;
|
||||
lfb = minf->physbase;
|
||||
|
||||
hfb = (unsigned int)new char[xres * yres * bpp / 8];
|
||||
|
||||
// Grafikmodus einschalten
|
||||
BC_params->AX = 0x4f02; // SVFA BIOS, init mode
|
||||
BC_params->AX = 0x4f02; // SVFA BIOS, init mode
|
||||
BC_params->BX = mode;
|
||||
bios.Int(0x10);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
kout << "Error: Grafikmodus nicht gefunden." << endl;
|
||||
log << ERROR << "Grafikmodus nicht gefunden." << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -11,34 +11,30 @@
|
||||
#ifndef __VESA_include__
|
||||
#define __VESA_include__
|
||||
|
||||
|
||||
#include "devices/LFBgraphics.h"
|
||||
|
||||
#include "user/lib/Logger.h"
|
||||
|
||||
// Ausgewaehlte Grafikmodi mit Mode-Nummer
|
||||
#define MODE_640_480_16BITS 0x111
|
||||
#define MODE_640_480_24BITS 0x112
|
||||
#define MODE_800_600_16BITS 0x114
|
||||
#define MODE_800_600_24BITS 0x115
|
||||
#define MODE_1024_768_16BITS 0x117
|
||||
#define MODE_1024_768_24BITS 0x118
|
||||
|
||||
#define MODE_640_480_16BITS 0x111
|
||||
#define MODE_640_480_24BITS 0x112
|
||||
#define MODE_800_600_16BITS 0x114
|
||||
#define MODE_800_600_24BITS 0x115
|
||||
#define MODE_1024_768_16BITS 0x117
|
||||
#define MODE_1024_768_24BITS 0x118
|
||||
|
||||
class VESA : public LFBgraphics {
|
||||
|
||||
private:
|
||||
int mode_nr; // Nummer des Modus
|
||||
|
||||
VESA (const VESA ©); // Verhindere Kopieren
|
||||
int mode_nr; // Nummer des Modus
|
||||
Logger log;
|
||||
|
||||
VESA(const VESA& copy) = delete; // Verhindere Kopieren
|
||||
|
||||
public:
|
||||
VESA () {}
|
||||
|
||||
VESA() : log("VESA") {}
|
||||
|
||||
// Bestimmten Grafikmodus einschalten
|
||||
bool initGraphicMode (unsigned short mode);
|
||||
bool initGraphicMode(unsigned short mode);
|
||||
void initTextMode();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user