toaruos/main.c

113 lines
1.4 KiB
C
Raw Normal View History

2011-01-16 04:01:19 +03:00
#include <system.h>
/*
* memcpy
* Copy from source to destination. Assumes that
* source and destination are not overlapping.
*/
unsigned char *
memcpy(
unsigned char *dest,
const unsigned char *src,
int count
) {
int i;
i = 0;
for ( ; i < count; ++i ) {
dest[i] = src[i];
}
return dest;
}
/*
* memset
* Set `count` bytes to `val`.
*/
unsigned char *
memset(
unsigned char *dest,
unsigned char val,
int count
) {
int i;
i = 0;
for ( ; i < count; ++i ) {
dest[i] = val;
}
return dest;
}
/*
* memsetw
* Set `count` shorts to `val`.
*/
unsigned short *
memsetw(
unsigned short *dest,
unsigned short val,
int count
) {
int i;
i = 0;
for ( ; i < count; ++i ) {
dest[i] = val;
}
return dest;
}
/*
* strlen
* Returns the length of a given `str`.
*/
int
strlen(
const char *str
) {
int i = 0;
while (str[i] != (char)0) {
++i;
}
return i;
}
/*
* inportb
* Read from an I/O port.
*/
unsigned char
inportb(
unsigned short _port
) {
unsigned char rv;
__asm__ __volatile__ ("inb %1, %0" : "=a" (rv) : "dN" (_port));
return rv;
}
/*
* outportb
* Write to an I/O port.
*/
void
outportb(
unsigned short _port,
unsigned char _data
) {
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
/*
* Kernel Entry Point
*/
int
main() {
2011-01-16 04:59:11 +03:00
gdt_install();
2011-01-16 06:11:17 +03:00
idt_install();
2011-01-16 06:41:17 +03:00
isrs_install();
2011-01-16 07:17:42 +03:00
irq_install();
2011-01-16 04:01:19 +03:00
init_video();
2011-01-16 06:19:12 +03:00
puts("Good Morning!\n");
2011-01-16 04:01:19 +03:00
for (;;);
return 0;
}