Small code fix up

- Moved memcmp function to temporary libc/mem.h
- I/O functions are inlined
- ATA_DEVICE read function won't print the 512 bytes by default
This commit is contained in:
Nigel Barink 2021-12-24 20:08:18 +01:00
parent 767dac7e73
commit 2621399349
7 changed files with 53 additions and 36 deletions

View File

@ -18,8 +18,9 @@ $(BUILD_DIR)/pci.o \
$(BUILD_DIR)/pic.o \
$(BUILD_DIR)/string.o \
$(BUILD_DIR)/pcidevice.o \
$(BUILD_DIR)/atapiDevice.o
$(BUILD_DIR)/atapiDevice.o \
$(BUILD_DIR)/ataDevice.o \
$(BUILD_DIR)/rsdp.o \
SRC_DIR = src
@ -54,7 +55,7 @@ test:
$(EMULATOR) -kernel $(BUILD_DIR)/myos.bin -serial stdio -vga std -display gtk -m 2G -cpu core2duo
test_iso:
$(EMULATOR) -cdrom $(BUILD_DIR)/barinkOS.iso -serial stdio -vga std -display gtk -m 2G -cpu core2duo
$(EMULATOR) -boot d -cdrom $(BUILD_DIR)/barinkOS.iso -serial stdio -vga std -display gtk -m 2G -cpu core2duo
build_kernel: $(OBJ_LINK_LIST)
$(CC) -T $(SRC_DIR)/kernel//linker.ld -o $(BUILD_DIR)/myos.bin \
@ -112,3 +113,10 @@ $(BUILD_DIR)/pcidevice.o:
$(BUILD_DIR)/atapiDevice.o:
$(CPP) -c $(SRC_DIR)/kernel/drivers/atapi/atapiDevice.cpp -o $(BUILD_DIR)/atapiDevice.o $(CFLAGS) -fno-exceptions -fno-rtti
$(BUILD_DIR)/ataDevice.o:
$(CPP) -c $(SRC_DIR)/kernel/drivers/ata/ataDevice.cpp -o $(BUILD_DIR)/ataDevice.o $(CFLAGS) -fno-exceptions -fno-rtti
$(BUILD_DIR)/rsdp.o:
$(CPP) -c $(SRC_DIR)/kernel/drivers/rsdp/rsdp.cpp -o $(BUILD_DIR)/rsdp.o $(CFLAGS) -fno-exceptions -fno-rtti

View File

@ -180,7 +180,8 @@ void ATA_DEVICE::Read(uint16_t DEVICE_CHANNEL, DEVICE_DRIVE drive, uint32_t LBA
for ( int i = 0; i < 256; i++){
uint16_t data;
asm volatile ("inw %1, %0" : "=a"(data): "Nd"(DEVICE_CHANNEL));
printf (" %x ", data);
// printf (" %x ", data);
buffer[i] = data;
}

View File

@ -2,7 +2,6 @@
#define GB4 524288
#define GB2 262144
int memcmp( const void* ptr1, const void* ptr2, size_t num);
extern "C" void kernel_main (void);
@ -34,27 +33,10 @@ extern "C" void kernel_main (void);
initGDT();
kernel_main();
}
int memcmp( const void* ptr1, const void* ptr2, size_t num)
{
const unsigned char * cs = (const unsigned char*) ptr1;
const unsigned char * ct = (const unsigned char*) ptr2;
for (int i = 0 ; i < num ; i++, cs++, ct++ ){
if( *cs < *ct){
return -1;
} else if( *cs > *ct){
return 1;
}
}
return 0;
}
extern "C" void kernel_main (void) {
@ -105,9 +87,5 @@ extern "C" void kernel_main (void);
printf( "UTC time: %02d-%02d-%02d %02d:%02d:%02d [ Formatted as YY-MM-DD h:mm:ss]\r" ,year, month, day, hour, minute, second);
delay(1000);
}
}

View File

@ -3,7 +3,7 @@
#include "tty/kterm.h"
#include "io.h"
#define PORT 0x3f8
static int init_serial() {
inline static int init_serial() {
outb(PORT + 1, 0x00); // Disable all interrupts
outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor)
outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud
@ -25,33 +25,33 @@ static int init_serial() {
return 0;
}
int is_transmit_empty() {
inline int is_transmit_empty() {
return inb(PORT + 5) & 0x20;
}
void write_serial(char a) {
inline void write_serial(char a) {
while (is_transmit_empty() == 0);
outb(PORT,a);
}
int serial_received() {
inline int serial_received() {
return inb(PORT + 5) & 1;
}
char read_serial() {
inline char read_serial() {
while (serial_received() == 0);
return inb(PORT);
}
void print_serial(const char* string ){
inline void print_serial(const char* string ){
for(size_t i = 0; i < strlen(string); i ++){
write_serial(string[i]);
}
}
void test_serial(){
inline void test_serial(){
/** Serial test **/
kterm_writestring("Writing to COM1 serial port:");
init_serial();

View File

@ -1,5 +1,4 @@
#include "kterm.h"
static const size_t VGA_WIDTH = 80;
static const size_t VGA_HEIGHT = 25;
@ -173,6 +172,13 @@ static void itoa (char *buf, int base, int d) {
}
/**
* @brief For now this will not only write to VGA memory but also write to serial
*
* @param format
* @param ...
*/
void printf ( const char *format, ...) {
char **arg = (char **)&format;

View File

@ -1,3 +1,5 @@
#pragma once
// NOTE: These should not be inline
inline void* memset (void* ptr, int value, size_t num){
for( int i = 0; i < num; i++ )
{
@ -6,3 +8,23 @@ inline void* memset (void* ptr, int value, size_t num){
}
return ptr;
}
inline int memcmp( const void* ptr1, const void* ptr2, size_t num)
{
const unsigned char * cs = (const unsigned char*) ptr1;
const unsigned char * ct = (const unsigned char*) ptr2;
for (int i = 0 ; i < num ; i++, cs++, ct++ ){
if( *cs < *ct){
return -1;
} else if( *cs > *ct){
return 1;
}
}
return 0;
}

View File

@ -6,4 +6,6 @@ size_t strlen(const char* str) {
len++;
}
return len;
}
}