Skip to content
Snippets Groups Projects
Commit 69284517 authored by Thierno souleymane Bah's avatar Thierno souleymane Bah
Browse files

feat(hello world displayed)

parent 60f63f30
No related branches found
No related tags found
No related merge requests found
......@@ -7,7 +7,8 @@ void putc(char aChar); /* print a single char on screen */
void puts(char *aString); /* print a string on the screen */
void puthex(int aNumber); /* print an Hex number on screen */
void empty_irq(int_regs_t *r) {
void empty_irq(int_regs_t *r)
{
}
/* multiboot entry-point with datastructure as arg. */
......@@ -33,39 +34,47 @@ void main(unsigned int * mboot_info)
/* minimal setup done ! */
puts("Hello world\n\n");
for(;;) ; /* nothing more to do... really nothing ! */
for (;;)
; /* nothing more to do... really nothing ! */
}
/* base address for the video output assume to be set as character oriented by the multiboot */
unsigned char *video_memory = (unsigned char *)0xB8000;
/* clear screen */
void clear_screen() {
void clear_screen()
{
int i;
for(i=0;i<80*25;i++) { /* for each one of the 80 char by 25 lines */
for (i = 0; i < 80 * 25; i++)
{ /* for each one of the 80 char by 25 lines */
video_memory[i * 2 + 1] = 0x0F; /* color is set to black background and white char */
video_memory[i * 2] = (unsigned char)' '; /* character shown is the space char */
}
}
/* print a string on the screen */
void puts(char *aString) {
void puts(char *aString)
{
char *current_char = aString;
while(*current_char!=0) {
while (*current_char != 0)
{
putc(*current_char++);
}
}
/* print an number in hexa */
char *hex_digit = "0123456789ABCDEF";
void puthex(int aNumber) {
void puthex(int aNumber)
{
int i;
int started = 0;
for(i=28;i>=0;i-=4) {
for (i = 28; i >= 0; i -= 4)
{
int k = (aNumber >> i) & 0xF;
if(k!=0 || started) {
if (k != 0 || started)
{
putc(hex_digit[k]);
started = 1;
}
......@@ -76,7 +85,8 @@ void puthex(int aNumber) {
int cursor_x = 0; /* here is the cursor position on X [0..79] */
int cursor_y = 0; /* here is the cursor position on Y [0..24] */
void setCursor() {
void setCursor()
{
int cursor_offset = cursor_x + cursor_y * 80;
_outb(0x3d4, 14);
_outb(0x3d5, ((cursor_offset >> 8) & 0xFF));
......@@ -84,20 +94,34 @@ void setCursor() {
_outb(0x3d5, (cursor_offset & 0xFF));
}
void putc(char c) {
if(cursor_x>79) {
void putc(char c)
{
if (cursor_x > 79)
{
cursor_x = 0;
cursor_y++;
}
if(cursor_y>24) {
if (cursor_y > 24)
{
cursor_y = 0;
clear_screen();
}
switch(c) { /* deal with a special char */
case '\r': cursor_x=0; break; /* carriage return */
case '\n': cursor_x=0; cursor_y++; break; /* new ligne */
case 0x8 : if(cursor_x>0) cursor_x--; break;/* backspace */
case 0x9 : cursor_x=(cursor_x+8)&~7; break; /* tabulation */
switch (c)
{ /* deal with a special char */
case '\r':
cursor_x = 0;
break; /* carriage return */
case '\n':
cursor_x = 0;
cursor_y++;
break; /* new ligne */
case 0x8:
if (cursor_x > 0)
cursor_x--;
break; /* backspace */
case 0x9:
cursor_x = (cursor_x + 8) & ~7;
break; /* tabulation */
/* or print a simple character */
default:
video_memory[(cursor_x + 80 * cursor_y) * 2] = c;
......@@ -106,5 +130,3 @@ void putc(char c) {
}
setCursor();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment