56 lines
1.3 KiB
C
Executable File
56 lines
1.3 KiB
C
Executable File
void k_clear_screen() {
|
|
char* vidmem = (char*) 0xb8000;
|
|
unsigned int i=0;
|
|
while(i<(80*2*25)) {
|
|
vidmem[i] = ' ';
|
|
++i;
|
|
vidmem[i] = 0x07;
|
|
++i;
|
|
};
|
|
};
|
|
|
|
unsigned int k_printf(char* message, unsigned int line) {
|
|
char* vidmem = (char*) 0xb8000;
|
|
unsigned int i = line*80*2;
|
|
|
|
while(*message!=0) {
|
|
if(*message==0x2F) {
|
|
*message++;
|
|
if(*message==0x6e) {
|
|
line++;
|
|
i=(line*80*2);
|
|
*message++;
|
|
if(*message==0){return(1);};
|
|
};
|
|
};
|
|
vidmem[i]=*message;
|
|
*message++;
|
|
++i;
|
|
vidmem[i]=0x7;
|
|
++i;
|
|
};
|
|
return 1;
|
|
};
|
|
|
|
inline void outportb(unsigned int port,unsigned char value) {
|
|
asm volatile ("outb %%al,%%dx"::"d" (port), "a" (value));
|
|
};
|
|
|
|
void update_cursor(int row, int col) {
|
|
unsigned short position=(row*80) + col;
|
|
// cursor LOW port to vga INDEX register
|
|
outportb(0x3D4, 0x0F);
|
|
outportb(0x3D5, (unsigned char)(position&0xFF));
|
|
// cursor HIGH port to vga INDEX register
|
|
outportb(0x3D4, 0x0E);
|
|
outportb(0x3D5, (unsigned char)((position>>8)&0xFF));
|
|
};
|
|
|
|
int _main() {
|
|
k_clear_screen();
|
|
k_printf("Welcome to ThiesyyOS.", 0);
|
|
k_printf("The C kernel has been loaded.", 2);
|
|
update_cursor(3, 0);
|
|
return 0;
|
|
};
|