StuBS
main.cc File Reference
#include "boot/startup_ap.h"
#include "machine/lapic.h"
#include "debug/output.h"
#include "device/textstream.h"
#include "machine/ioapic.h"
#include "machine/core.h"
#include "device/mouse.h"
#include "debug/gdb/stub.h"
#include "interrupt/guard.h"
#include "thread/scheduler.h"
#include "thread/thread.h"
#include "device/watch.h"
#include "machine/hpet.h"
#include "device/clock.h"
#include "device/ticker.h"
#include "thread/assassin.h"
#include "syscall/guarded_keyboard.h"
#include "thread/wakeup.h"
#include "boot/multiboot/data.h"
#include "fs/vfs.h"
#include "fs/ramdisk.h"
#include "syscall/guarded_graphics.h"
#include "user/graphics/full-example.h"
#include "user/app1/appl.h"
#include "user/app2/kappl.h"
Include dependency graph for main.cc:

Functions

int main ()
 Kernels main function.
 
int main_ap ()
 Entry point for application processors.
 

Constants

TextStream kout
 
TextStream dout [Core::MAX]
 Debug window.
 
Mouse mouse (1280, 1024)
 
Watch watch
 
Clock clock
 
Ticker ticker
 
static Assassin assassin
 
GuardedKeyboard keyboard
 
static WakeUp wakeup
 
const unsigned fb_width = 1280
 screen width
 
const unsigned fb_height = 1024
 screen height
 
const unsigned fb_bpp = 32
 bits per pixel
 
const unsigned fb_size = fb_width * fb_height * fb_bpp / sizeof(char)
 
char buffer_1 [fb_size]
 
char buffer_2 [fb_size]
 
GuardedGraphics graphics (fb_size, buffer_1, buffer_2)
 
const char * os_name = "MP" "StuBS"
 

Function Documentation

◆ main()

int main ( )

Kernels main function.

Called after initialization of the system by kernel_init()

Note
This code will only be executed on the booting CPU (i.e., the one with ID 0).

◆ main_ap()

int main_ap ( )

Entry point for application processors.

Called after initialization of the system by kernel_init()

Note
Code in this function will be executed on all APs (i.e., all CPUs except ID 0)

Variable Documentation

◆ kout

TextStream kout

◆ dout

Debug window.

Debug output using DBG like DBG << "var = " << var << endl should be displayed in window dedicated to the core it is executed on.

While this is quite easy on single core systems like OOStuBS – they only require a single TextStream object called dout – multi core systems like MPStuBS need an object array with one window per core. In the latter case direct list initialization can be used:

{0, 40, 17, 21}, // Debug window for core 0, like TextStream(0, 40, 17, 21)
{40, 80, 17, 21}, // Debug window for core 1, like TextStream(40, 80, 17, 21)
//...
};
Output text (form different data type sources) on screen in text mode.
Definition textstream.h:23
const unsigned MAX
Maximum number of supported CPUs.
Definition core.h:28
TextStream dout[Core::MAX]
Debug window.
Definition main.cc:7

The debug windows in should be located right below the normal output window without any overlap and should be able to display at least 3 lines. In MPStuBS, two windows can be placed side-by-side, having 40 columns each.

As an optional extension, the distribution of the windows can be done automatically in MPStuBS (according to the actual numbers of cores) with TextStream::arrange() – in this case the standard constructor (without parameters) is sufficient.

Optional:
Automatically arrange windows with TextStream::arrange()

◆ mouse

Mouse mouse(1280, 1024) ( 1280  ,
1024   
)

◆ watch

Watch watch

◆ clock

Clock clock

◆ ticker

Ticker ticker

◆ assassin

Assassin assassin
static

◆ keyboard

GuardedKeyboard keyboard

◆ wakeup

WakeUp wakeup
static

◆ fb_width

const unsigned fb_width = 1280

screen width

◆ fb_height

const unsigned fb_height = 1024

screen height

◆ fb_bpp

const unsigned fb_bpp = 32

bits per pixel

◆ fb_size

const unsigned fb_size = fb_width * fb_height * fb_bpp / sizeof(char)

◆ buffer_1

char buffer_1[fb_size]

◆ buffer_2

char buffer_2[fb_size]

◆ graphics

◆ os_name

const char* os_name = "MP" "StuBS"