/** * Serial port access. */ module hulk.serial; import hulk.cpu; import core.stdc.stdarg; static import hulk.writef; struct Serial { enum BASE_PORT = 0x3F8; /** * Initialize the serial module. */ static void initialize() { } /** * Write a character to the serial port. * * @param ch Character to write. */ static void write(ubyte ch) { if (ch == '\n') { out8(BASE_PORT, '\r'); } out8(BASE_PORT, ch); } /** * Write a formatted string to the serial port. * * @param s Format string. * @param args Variable arguments structure. */ public static void writef(string s, va_list args) { hulk.writef.writefv(function void(ubyte ch) { Serial.write(ch); }, s, args); } /** * Write a formatted string to the serial port. * * @param s Format string. */ public static extern (C) void writef(string s, ...) { va_list args; va_start(args, s); writef(s, args); va_end(args); } /** * Write a formatted string and newline to the serial port. * * @param s Format string. */ public static extern (C) void writefln(string s, ...) { va_list args; va_start(args, s); writef(s, args); writef("\n", args); va_end(args); } }