#include "arch/lapic.h" #include "boot/startup_ap.h" #include "debug/output.h" #include "arch/cga.h" #include "arch/textwindow.h" #include "arch/serial.h" #include "device/serialstream.h" #include "device/textstream.h" TextStream kout = TextStream(0, 80, 0, 12, true); TextStream dout[8] = { TextStream(0 ,20,12,25,false), TextStream(20,40,12,25,false), TextStream(40,60,12,25,false), TextStream(60,80,12,25,false), TextStream(0 ,0 ,0, 0,false), TextStream(0 ,0 ,0, 0,false), TextStream(0 ,0 ,0, 0,false), TextStream(0 ,0 ,0, 0,false), }; // Main function // (the bootstrap processor starts here)} extern "C" int main() { unsigned int numCPUs = Core::count(); DBG_VERBOSE << "Number of CPUs: " << numCPUs << endl; ////test cga implemantation // CGA::setCursor(1, 2); // unsigned x,y; // CGA::getCursor(x, y); // CGA::setCursor(x+1, y+1); // for(uint8_t i = 0; i < 10; i++) // CGA::show(i, i, i+0x30, CGA::Attribute()); ////test textwindow implemantation //TextWindow tw_global = TextWindow(0, 80, 0, 25, true); //tw_global.reset(' ', CGA::Attribute(CGA::LIGHT_GREEN, CGA::BLUE, false)); //// test SerialStream //SerialStream ss = SerialStream(); //ss.print("test", 4); //ss.setAttribute(SerialStream::UNDERSCORE); //ss.print("test", 4); //ss.setAttribute(SerialStream::RESET); //ss.setForeground(SerialStream::MAGENTA); //ss.print("test", 4); //ss.setBackground(SerialStream::CYAN); //ss.print("test", 4); //ss.setPos(10, 10); //ss.print("test\n", 5); //ss.setBackground(SerialStream::BLACK); kout << "Test -> " << endl; kout << "bool: " << true << " -> true" << endl; kout << "zero: " << 0 << " -> 0" << endl; kout << "binary: " << bin << 42 << dec << " -> 0b101010" << endl; kout << "octal: " << oct << 42 << dec << " -> 052" << endl; kout << "hex: " << hex << 42 << dec << " -> 0x2a" << endl; kout << "uint64_t max: " << ~((uint64_t)0) << " -> 18446744073709551615" << endl; kout << "int64_t max: " << ~(1ll<<63) << " -> 9223372036854775807" << endl; kout << "int64_t min: " << (1ll<<63) << " -> -9223372036854775808" << endl; kout << "some int64_t: " << (-1234567890123456789) << " -> -1234567890123456789" << endl; kout << "some int64_t: " << (1234567890123456789) << " -> 1234567890123456789" << endl; kout << "pointer: " << reinterpret_cast(1994473406541717165ull) << " -> 0x1badcafefee1dead" << endl; kout << "smiley: " << static_cast(1) << endl; /* Start application processors * To avoid unexpected behaviour, make sure that interrupts are not * enabled before the APs are booted. Otherwise it might interfere with the * Startup IPIs or even block devices like keyboard because of a missing EOI */ ApplicationProcessor::boot(); return 0; } // Main function for application processors extern "C" int main_ap() { DBG_VERBOSE << "CPU core " << static_cast(Core::getID()) << " / LAPIC " << static_cast(LAPIC::getID()) << " in main_ap()" << endl; //TextWindow dout0 = TextWindow(0,20,13,19, false); //dout0.reset(); //dout0.reset(' ', CGA::Attribute(CGA::LIGHT_GREEN, CGA::RED, false)); ////test Serial Serial s = Serial(); s.write('a'); //uint8_t from = static_cast(LAPIC::getID()) * 20; //uint8_t to = from+20; //dout[LAPIC::getID()] = TextStream(from, to, 0, 6, false); dout[LAPIC::getID()] << "test\n" << flush; dout[LAPIC::getID()] << static_cast(LAPIC::getID()) << flush; return 0; }