diff --git a/zion/common/port.h b/zion/common/port.h new file mode 100644 index 0000000..4919ff4 --- /dev/null +++ b/zion/common/port.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +static inline uint8_t inb(uint16_t port) { + uint8_t result; + asm volatile("inb %1, %0" : "=a"(result) : "Nd"(port)); + return result; +} + +static inline void outb(uint16_t port, uint8_t value) { + asm volatile("outb %0, %1" ::"a"(value), "Nd"(port)); +} diff --git a/zion/zion.cpp b/zion/zion.cpp index c22c920..8e59f54 100644 --- a/zion/zion.cpp +++ b/zion/zion.cpp @@ -1,10 +1,8 @@ #include -#define COM1 0x3f8 +#include "common/port.h" -void outb(uint16_t port, uint8_t value) { - asm volatile("outb %0, %1" ::"a"(value), "Nd"(port)); -} +#define COM1 0x3f8 extern "C" void zion() { outb(COM1, 'a');