Skip to content
Open
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
57 changes: 29 additions & 28 deletions evolution_by_versions/03_539kernel_progenitor/main.c
Original file line number Diff line number Diff line change
@@ -1,45 +1,46 @@
volatile unsigned char *video = 0xB8000;
volatile unsigned char *video = (unsigned char *)0xB8000;

int nextTextPos = 0;
int currLine = 0;

void print( char * );
void print(char *);
void println();
void printi( int );
void printi(int);

void kernel_main()
{
print( "Welcome to 539kernel!" );
print("Welcome to 539kernel!");
println();
print( "We are now in Protected-mode" );
print("We are now in Protected-mode");
println();
printi( 539 );
printi(539);
println();

while( 1 );

while (1)
;
}

void interrupt_handler( int interrupt_number )
void interrupt_handler(int interrupt_number)
{
println();
print( "Interrupt Received " );
printi( interrupt_number );
print("Interrupt Received ");
printi(interrupt_number);
}

void print( char *str )
void print(char *str)
{
int currCharLocationInVidMem, currColorLocationInVidMem;
while ( *str != '\0' )

while (*str != '\0')
{
currCharLocationInVidMem = nextTextPos * 2;
currCharLocationInVidMem = nextTextPos * 2;
currColorLocationInVidMem = currCharLocationInVidMem + 1;
video[ currCharLocationInVidMem ] = *str;
video[ currColorLocationInVidMem ] = 15;

video[currCharLocationInVidMem] = *str;
video[currColorLocationInVidMem] = 15;

nextTextPos++;

str++;
}
}
Expand All @@ -49,21 +50,21 @@ void println()
nextTextPos = ++currLine * 80;
}

void printi( int number )
void printi(int number)
{
char* digitToStr[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
if ( number >= 0 && number <= 9 )
char *digitToStr[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};

if (number >= 0 && number <= 9)
{
print( digitToStr[ number ] );
print(digitToStr[number]);
return;
}
else
{
int remaining = number % 10;
number = number / 10;
printi( number );
printi( remaining );

printi(number);
printi(remaining);
}
}