#include #include #include #include #include size_t strlen(const char* string) { size_t size = 0; while (string[size]) size++; return size; } unsigned char inb(unsigned short port) { unsigned char ptr; asm volatile("inb %1, %0" : "=a" (ptr) : "dN" (port)); return ptr; } void outb(unsigned short port, unsigned char data) { asm volatile("outb %1, %0" : : "dN" (port), "a" (data)); } void memcpy(void* dest, void* src, size_t n) { char* src_c = (char*)src; char* dest_c = (char*)dest; for(size_t i = 0; i < n; i++) { dest_c[i] = src_c[i]; } } void memset(void* src, int chr, size_t n) { unsigned char* ptr = src; while(n--) { *ptr++ = (unsigned char) chr; } } void int_to_ascii(int num, char* string) { size_t i = 0; //Counter. //TODO: Convert this to a for-loop? int32_t calc = 0; bool negative = false; if(num == 0) { string[0] = '0'; string[1] = '\0'; return; } if(num < 0) { negative = true; num = -num; } while(num != 0) { calc = num % 10; num = num / 10; calc += 48; string[i] = calc; i++; } if(negative) { string[i] = '-'; i++; } for(size_t j = 0; j < i/2; j++) { calc = string[j]; string[j] = string[i-j-1]; string[j-i-1] = calc; } } void int_to_hex(int num, char* string) { empty_string(string); uint8_t i = 8; uint8_t temp = 0; while(i != 0) { i--; temp = num & 0xF; num = num >> 4; if(temp >= 10) { temp += 7; } temp += 48; string[i] = temp; } } void empty_string(char* string) { size_t len = strlen(string); for(size_t i = 0; i < len + 1; i++) { string[i] = '\0'; } }