summaryrefslogtreecommitdiff
path: root/bios/bios.ha
diff options
context:
space:
mode:
Diffstat (limited to 'bios/bios.ha')
-rw-r--r--bios/bios.ha41
1 files changed, 41 insertions, 0 deletions
diff --git a/bios/bios.ha b/bios/bios.ha
new file mode 100644
index 0000000..afae0f6
--- /dev/null
+++ b/bios/bios.ha
@@ -0,0 +1,41 @@
+// Struct defining the contents of the register state used
+// for bios calls
+export type state = struct {
+ @offset(0) eax: u32,
+ @offset(4) ebx: u32,
+ @offset(8) ecx: u32,
+ @offset(12) edx: u32,
+ @offset(16) edi: u32,
+ @offset(20) esi: u32,
+ @offset(24) ds: u16,
+ @offset(26) es: u16,
+ @offset(28) ss: u16,
+ @offset(30) gs: u16,
+ @offset(32) fs: u16
+};
+
+// The set real mode registers
+export let regs: state;
+
+// The address of a 512 bytes workspace that is located below 0xFFFFF and can be used to store the results
+// of various bios calls
+export const @symbol("_ws") ws: u16;
+
+// The boot drive number as given by the BIOS at boot time
+export const @symbol("drive_no") drive_number: u8;
+
+// The amount of sectors per track that the boot drive has
+export const @symbol("drive_spt") drive_sectors_per_track: u8;
+
+// The amount of heads that the boot drive has
+export const @symbol("drive_heads") drive_heads: u8;
+
+// Clears the BIOS mode registers
+export fn clearregs() void = {
+ regs = state {
+ ...
+ };
+};
+
+// Call a BIOS interrupt
+export fn call(intno: u8) void;