Kernel: Add prefs font for terminal output before file system
This commit is contained in:
parent
a4980acc88
commit
390a747768
|
@ -31,6 +31,7 @@ BUILDDIR=$(abspath build)
|
||||||
|
|
||||||
KERNEL_OBJS= \
|
KERNEL_OBJS= \
|
||||||
$(KERNEL_ARCH_OBJS) \
|
$(KERNEL_ARCH_OBJS) \
|
||||||
|
font/prefs.o \
|
||||||
kernel/APIC.o \
|
kernel/APIC.o \
|
||||||
kernel/ATA.o \
|
kernel/ATA.o \
|
||||||
kernel/build_libc.o \
|
kernel/build_libc.o \
|
||||||
|
@ -74,7 +75,7 @@ $(ARCHDIR)/crtend.o \
|
||||||
$(ARCHDIR)/crtn.o \
|
$(ARCHDIR)/crtn.o \
|
||||||
|
|
||||||
.PHONY: all always clean install install-headers install-kernel
|
.PHONY: all always clean install install-headers install-kernel
|
||||||
.SUFFIXES: .o .c .cpp .S
|
.SUFFIXES: .o .c .cpp .S .psf
|
||||||
|
|
||||||
all: banan-os.kernel
|
all: banan-os.kernel
|
||||||
|
|
||||||
|
@ -94,10 +95,14 @@ $(ARCHDIR)/crtbegin.o $(ARCHDIR)/crtend.o:
|
||||||
.S.o:
|
.S.o:
|
||||||
$(CC) -MD -c $< -o $(BUILDDIR)/$@ $(CFLAGS)
|
$(CC) -MD -c $< -o $(BUILDDIR)/$@ $(CFLAGS)
|
||||||
|
|
||||||
|
.psf.o:
|
||||||
|
objcopy -O elf64-x86-64 -B i386 -I binary $< $(BUILDDIR)/$@
|
||||||
|
|
||||||
always:
|
always:
|
||||||
mkdir -p $(BUILDDIR)/$(ARCHDIR)
|
mkdir -p $(BUILDDIR)/$(ARCHDIR)
|
||||||
mkdir -p $(BUILDDIR)/kernel
|
mkdir -p $(BUILDDIR)/kernel
|
||||||
mkdir -p $(BUILDDIR)/kernel/FS
|
mkdir -p $(BUILDDIR)/kernel/FS
|
||||||
|
mkdir -p $(BUILDDIR)/font
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(BUILDDIR)
|
rm -rf $(BUILDDIR)
|
||||||
|
|
Binary file not shown.
|
@ -10,6 +10,7 @@ namespace Kernel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static BAN::ErrorOr<Font> load(BAN::StringView);
|
static BAN::ErrorOr<Font> load(BAN::StringView);
|
||||||
|
static BAN::ErrorOr<Font> prefs();
|
||||||
|
|
||||||
uint32_t width() const { return m_width; }
|
uint32_t width() const { return m_width; }
|
||||||
uint32_t height() const { return m_height; }
|
uint32_t height() const { return m_height; }
|
||||||
|
|
|
@ -22,7 +22,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TerminalDriver(const Kernel::Font& font) : m_font(font) {}
|
TerminalDriver() : m_font(MUST(Kernel::Font::prefs())) {}
|
||||||
virtual ~TerminalDriver() {}
|
virtual ~TerminalDriver() {}
|
||||||
virtual uint32_t width() const = 0;
|
virtual uint32_t width() const = 0;
|
||||||
virtual uint32_t height() const = 0;
|
virtual uint32_t height() const = 0;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
class VesaTerminalDriver final : public TerminalDriver
|
class VesaTerminalDriver final : public TerminalDriver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static VesaTerminalDriver* create(const Kernel::Font&);
|
static VesaTerminalDriver* create();
|
||||||
~VesaTerminalDriver();
|
~VesaTerminalDriver();
|
||||||
|
|
||||||
virtual uint32_t width() const override { return m_width / font().width(); }
|
virtual uint32_t width() const override { return m_width / font().width(); }
|
||||||
|
@ -17,9 +17,8 @@ public:
|
||||||
virtual void set_cursor_position(uint32_t, uint32_t) override;
|
virtual void set_cursor_position(uint32_t, uint32_t) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VesaTerminalDriver(uint32_t width, uint32_t height, uint32_t pitch, uint8_t bpp, uintptr_t address, const Kernel::Font& font)
|
VesaTerminalDriver(uint32_t width, uint32_t height, uint32_t pitch, uint8_t bpp, uintptr_t address)
|
||||||
: TerminalDriver(font)
|
: m_width(width)
|
||||||
, m_width(width)
|
|
||||||
, m_height(height)
|
, m_height(height)
|
||||||
, m_pitch(pitch)
|
, m_pitch(pitch)
|
||||||
, m_bpp(bpp)
|
, m_bpp(bpp)
|
||||||
|
|
|
@ -8,9 +8,21 @@
|
||||||
|
|
||||||
#define PSF2_HAS_UNICODE_TABLE 0x00000001
|
#define PSF2_HAS_UNICODE_TABLE 0x00000001
|
||||||
|
|
||||||
|
extern char _binary_font_prefs_psf_start;
|
||||||
|
extern char _binary_font_prefs_psf_end;
|
||||||
|
|
||||||
namespace Kernel
|
namespace Kernel
|
||||||
{
|
{
|
||||||
|
|
||||||
|
BAN::ErrorOr<Font> Font::prefs()
|
||||||
|
{
|
||||||
|
size_t font_data_size = &_binary_font_prefs_psf_end - &_binary_font_prefs_psf_start;
|
||||||
|
BAN::Vector<uint8_t> font_data;
|
||||||
|
TRY(font_data.resize(font_data_size));
|
||||||
|
memcpy(font_data.data(), &_binary_font_prefs_psf_start, font_data_size);
|
||||||
|
return parse_psf1(font_data);
|
||||||
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<Font> Font::load(BAN::StringView path)
|
BAN::ErrorOr<Font> Font::load(BAN::StringView path)
|
||||||
{
|
{
|
||||||
if (!VirtualFileSystem::is_initialized())
|
if (!VirtualFileSystem::is_initialized())
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include <kernel/multiboot.h>
|
#include <kernel/multiboot.h>
|
||||||
#include <kernel/VesaTerminalDriver.h>
|
#include <kernel/VesaTerminalDriver.h>
|
||||||
|
|
||||||
VesaTerminalDriver* VesaTerminalDriver::create(const Kernel::Font& font)
|
VesaTerminalDriver* VesaTerminalDriver::create()
|
||||||
{
|
{
|
||||||
if (!(g_multiboot_info->flags & MULTIBOOT_FLAGS_FRAMEBUFFER))
|
if (!(g_multiboot_info->flags & MULTIBOOT_FLAGS_FRAMEBUFFER))
|
||||||
{
|
{
|
||||||
|
@ -41,8 +41,7 @@ VesaTerminalDriver* VesaTerminalDriver::create(const Kernel::Font& font)
|
||||||
framebuffer.height,
|
framebuffer.height,
|
||||||
framebuffer.pitch,
|
framebuffer.pitch,
|
||||||
framebuffer.bpp,
|
framebuffer.bpp,
|
||||||
framebuffer.addr,
|
framebuffer.addr
|
||||||
font
|
|
||||||
);
|
);
|
||||||
driver->set_cursor_position(0, 0);
|
driver->set_cursor_position(0, 0);
|
||||||
driver->clear(TerminalColor::BLACK);
|
driver->clear(TerminalColor::BLACK);
|
||||||
|
|
|
@ -81,10 +81,10 @@ extern "C" void kernel_main()
|
||||||
MMU::intialize();
|
MMU::intialize();
|
||||||
dprintln("MMU initialized");
|
dprintln("MMU initialized");
|
||||||
|
|
||||||
//TerminalDriver* terminal_driver = VesaTerminalDriver::create();
|
TerminalDriver* terminal_driver = VesaTerminalDriver::create();
|
||||||
//ASSERT(terminal_driver);
|
ASSERT(terminal_driver);
|
||||||
//dprintln("VESA initialized");
|
dprintln("VESA initialized");
|
||||||
//TTY* tty1 = new TTY(terminal_driver);
|
TTY* tty1 = new TTY(terminal_driver);
|
||||||
|
|
||||||
InterruptController::initialize(cmdline.force_pic);
|
InterruptController::initialize(cmdline.force_pic);
|
||||||
dprintln("Interrupt controller initialized");
|
dprintln("Interrupt controller initialized");
|
||||||
|
@ -99,15 +99,24 @@ extern "C" void kernel_main()
|
||||||
Scheduler::initialize();
|
Scheduler::initialize();
|
||||||
Scheduler& scheduler = Scheduler::get();
|
Scheduler& scheduler = Scheduler::get();
|
||||||
MUST(scheduler.add_thread(BAN::Function<void()>(
|
MUST(scheduler.add_thread(BAN::Function<void()>(
|
||||||
[]
|
[terminal_driver]
|
||||||
{
|
{
|
||||||
DiskIO::initialize();
|
DiskIO::initialize();
|
||||||
dprintln("Disk IO initialized");
|
dprintln("Disk IO initialized");
|
||||||
|
|
||||||
auto font = MUST(Font::load("/usr/share/fonts/zap-ext-vga16.psf"));
|
auto font_or_error = Font::load("/usr/share/fonts/zap-ext-vga16.psf");
|
||||||
dprintln("Font loaded");
|
if (font_or_error.is_error())
|
||||||
|
dprintln("{}", font_or_error.error());
|
||||||
Shell(new TTY(VesaTerminalDriver::create(font))).run();
|
else
|
||||||
|
terminal_driver->set_font(font_or_error.release_value());
|
||||||
|
}
|
||||||
|
)));
|
||||||
|
MUST(scheduler.add_thread(BAN::Function<void()>(
|
||||||
|
[tty1]
|
||||||
|
{
|
||||||
|
Shell* shell = new Shell(tty1);
|
||||||
|
ASSERT(shell);
|
||||||
|
shell->run();
|
||||||
}
|
}
|
||||||
)));
|
)));
|
||||||
scheduler.start();
|
scheduler.start();
|
||||||
|
|
Loading…
Reference in New Issue