.{memory, buffer} := @use("../../../libraries/stn/src/lib.hb")

serial_print := fn(ptr: ^u8): void {
	letter := 0
	loop if *ptr == 0 break else {
		letter = *ptr
		memory.outb(0xF803, letter)
		ptr += 1
	}
	return
}

serial_println := fn(ptr: ^u8): void {
	serial_print(ptr)
	memory.outb(0xF803, 12)
	memory.outb(0xF803, 13)
	return
}

main := fn(): int {
	// This must be done first and foremost to prevent racing
	a := buffer.create("XNumber\0")
	serial_println("Starting Serial Driver.\0")

	mem := memory.request_page(1)

	loop {
		ptr := @eca(int, 4, a, mem, 0x1000)
		if ptr == 0 {
			serial_println("No message\0")
		}
		if ptr > 0 {
			serial_println("Yes message\0")
			serial_println(mem)
			break
		}
	}

	// Note that the first byte is reserved, pad accordingly.
	b := buffer.search("XNumber\0")

	if a == b {
		serial_println("Stopping Serial Driver.\0")
	}

	return 0
}