1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-10 06:27:35 +00:00

Virtual consoles kinda work!

We now make three VirtualConsoles at boot: tty0, tty1, and tty2.
We launch an instance of /bin/sh in each one.
You switch between them with Alt+1/2/3

How very very cool :^)
This commit is contained in:
Andreas Kling 2018-10-30 15:33:37 +01:00
parent 68739dc43e
commit 7a7956a595
24 changed files with 251 additions and 103 deletions

View file

@ -37,9 +37,11 @@ system_t system;
VirtualConsole* tty0;
VirtualConsole* tty1;
VirtualConsole* tty2;
Keyboard* keyboard;
void banner()
{
InterruptDisabler disabler;
kprintf("\n\033[33;1mWelcome to \033[36;1mSerenity OS!\033[0m\n\n");
}
@ -107,8 +109,6 @@ static void init_stage2()
Syscall::initialize();
auto keyboard = make<Keyboard>();
Disk::initialize();
#ifdef TEST_VFS
@ -189,11 +189,13 @@ static void init_stage2()
}
#endif
int error;
auto* shTask = Task::createUserTask("/bin/sh", (uid_t)100, (gid_t)100, (pid_t)0, error);
banner();
int error;
auto* sh0 = Task::createUserTask("/bin/sh", (uid_t)100, (gid_t)100, (pid_t)0, error, nullptr, tty0);
auto* sh1 = Task::createUserTask("/bin/sh", (uid_t)100, (gid_t)100, (pid_t)0, error, nullptr, tty1);
auto* sh2 = Task::createUserTask("/bin/sh", (uid_t)100, (gid_t)100, (pid_t)0, error, nullptr, tty2);
#if 0
// It would be nice to exit this process, but right now it instantiates all kinds of things.
// At the very least it needs to be made sure those things stick around as appropriate.
@ -216,21 +218,20 @@ void init()
kmalloc_init();
vga_init();
VirtualConsole::initialize();
tty0 = new VirtualConsole(0, VirtualConsole::AdoptCurrentVGABuffer);
tty1 = new VirtualConsole(1);
tty2 = new VirtualConsole(2);
tty0->setActive(true);
tty1->setActive(false);
tty2->setActive(false);
auto console = make<Console>();
console->setImplementation(tty0);
RTC::initialize();
PIC::initialize();
gdt_init();
idt_init();
keyboard = new Keyboard;
auto console = make<Console>();
VirtualConsole::initialize();
tty0 = new VirtualConsole(0, VirtualConsole::AdoptCurrentVGABuffer);
tty1 = new VirtualConsole(1);
tty2 = new VirtualConsole(2);
VirtualConsole::switchTo(0);
MemoryManager::initialize();
VirtualFileSystem::initializeGlobals();