Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions source/boot.asm
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
bits 32 ;; 32-bit
bits 32 ;; Specify 32 bit mode to NASM
section .text
align 4
dd 0x1BADB002 ;magic value
Expand All @@ -9,11 +9,11 @@ global start
extern kmain

start:
cli ; disable interrupts
mov esp, stack_space ; set stack pointer
call kmain
hlt ; disable CPU after kernel exit
cli ; disable interrupts
mov esp, stack_space ; set stack pointer
call kmain ; call main kernel function
hlt ; disable CPU after kernel exit

section .bss
resb 8192 ; 8KB of stack space
resb 8192 ; reserve 8KB for stack space
stack_space:
64 changes: 33 additions & 31 deletions source/screen.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,57 @@
#include "include/charcolors.h"

char *vidmemptr = (char *)0xb8000; // pointer to video memory
unsigned int current_loc = 0; // current char location
unsigned int current_loc = 0; // current char location

/*
Writes chars to video memory
*/
void kprint(const char *str)
{
unsigned int i = 0;
while (str[i] != '\0')
{
if (str[i] == '\n'){
unsigned int line_size = CHAR_BYTE_SIZE * COLUMNS_IN_LINE;
current_loc = current_loc + (line_size - current_loc % (line_size));
i++;
continue;
}
vidmemptr[current_loc++] = str[i++]; // print char
vidmemptr[current_loc++] = CHAR_FG_LIGHTGRAY; // light gray font
}
unsigned int i = 0;
while (str[i] != '\0')
{
if (str[i] == '\n')
{
unsigned int line_size = CHAR_BYTE_SIZE * COLUMNS_IN_LINE;
current_loc = current_loc + (line_size - current_loc % (line_size));
i++;
continue;
}
vidmemptr[current_loc++] = str[i++]; // print char
vidmemptr[current_loc++] = CHAR_FG_LIGHTGRAY; // light gray font
}
}

/*
kprint() variant with colored text
*/
void kprintcolored(const char *str, unsigned int color)
{
unsigned int i = 0;
while (str[i] != '\0')
{
if (str[i] == '\n'){ // check for \n symbol
unsigned int line_size = CHAR_BYTE_SIZE * COLUMNS_IN_LINE;
current_loc = current_loc + (line_size - current_loc % (line_size));
i++;
continue;
}
vidmemptr[current_loc++] = str[i++]; // print char
vidmemptr[current_loc++] = color; // set attrib-byte to user-defined color
}
unsigned int i = 0;
while (str[i] != '\0')
{
if (str[i] == '\n')
{ // check for \n symbol
unsigned int line_size = CHAR_BYTE_SIZE * COLUMNS_IN_LINE;
current_loc = current_loc + (line_size - current_loc % (line_size));
i++;
continue;
}
vidmemptr[current_loc++] = str[i++]; // print char
vidmemptr[current_loc++] = color; // set attrib-byte to user-defined color
}
}

/*
Loop over the entire screen, filling video memory with empty chars
*/
void clear_screen(void)
{
unsigned int i = 0;
while (i < SCREENSIZE)
{
vidmemptr[i++] = ' ';
vidmemptr[i++] = 0x07;
}
unsigned int i = 0;
while (i < SCREENSIZE)
{
vidmemptr[i++] = ' ';
vidmemptr[i++] = 0x07;
}
}