Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .global loader
- .set ALIGN, 1<<0
- .set MEMINFO, 1<<1
- .set FLAGS, ALIGN | MEMINFO
- .set MAGIC, 0x1BADB002
- .set CHECKSUM, -(MAGIC + FLAGS)
- .align 4
- .long MAGIC
- .long FLAGS
- .long CHECKSUM
- .set SIZE, 0x4000
- .comm stack, SIZE, 32
- loader:
- mov $(stack + SIZE), %esp
- push %eax
- push %ebx
- call k_main
- cli
- hang:
- hlt
- jmp hang
- #define BLACK 0
- #define BLUE 1
- #define GREEN 2
- #define CYAN 3
- #define RED 4
- #define MAGENTA 5
- #define BROWN 6
- #define L_GREY 7
- #define D_ GREY 8
- #define L_BLUE 9
- #define L_GREEN 10
- #define L_CYAN 11
- #define L_RED 12
- #define L_MAGENTA 13
- #define L_BROWN 14
- #define WHITE 15
- int color(char background, char foreground)
- {
- return (background << 4) | foreground;
- }
- int line_break(unsigned int line, unsigned int i, char *message)
- {
- unsigned int count = 0;
- while(*++message != ' ' && *message != '\0')
- {
- count++;
- }
- if((count << 1) + i >= (++line*160))
- {
- return 1;
- }
- return 0;
- }
- void clear_screen()
- {
- short *vidmem = (short *) 0xb8000;
- unsigned int i = 0;
- while( i < 2000)
- {
- vidmem[i++]=0;
- }
- }
- unsigned int print(char *message, unsigned int line, int color)
- {
- char *vidmem = (char *) 0xb8000;
- unsigned int i = (line*160);
- for(;*message != '\0'; *message++)
- {
- if(*message=='\n' || (*message == ' ' && line_break(line, i, message)))
- {
- i=(++line*160);
- }
- else
- {
- vidmem[i++]=*message;
- vidmem[i++]= color;
- }
- }
- return 1;
- }
- void k_main( void* mbd, unsigned int magic )
- {
- clear_screen();
- print("Hello World", 0, color(BLACK, L_GREY));
Add Comment
Please, Sign In to add comment