aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/output.c20
-rw-r--r--src/post.c3
-rw-r--r--src/serial.c49
-rw-r--r--src/util.h2
4 files changed, 27 insertions, 47 deletions
diff --git a/src/output.c b/src/output.c
index 1c3831d..054082f 100644
--- a/src/output.c
+++ b/src/output.c
@@ -10,6 +10,20 @@
#include "util.h" // printf
#include "biosvar.h" // struct bregs
+#define DEBUG_PORT 0x03f8
+#define DEBUG_TIMEOUT 100000
+
+static void
+debug_serial(char c)
+{
+ int timeout = DEBUG_TIMEOUT;
+ while ((inb(DEBUG_PORT+5) & 0x60) != 0x60)
+ if (!timeout--)
+ // Ran out of time.
+ return;
+ outb(c, DEBUG_PORT);
+}
+
static void
screenc(u8 c)
{
@@ -216,13 +230,13 @@ static void
dump_regs(const char *fname, const char *type, struct bregs *regs)
{
if (!regs) {
- __dprintf("%s %s: NULL\n", type, fname);
+ dprintf(1, "%s %s: NULL\n", type, fname);
return;
}
- __dprintf("%s %s: a=%x b=%x c=%x d=%x si=%x di=%x\n"
+ dprintf(1, "%s %s: a=%x b=%x c=%x d=%x si=%x di=%x\n"
, type, fname, regs->eax, regs->ebx, regs->ecx, regs->edx
, regs->esi, regs->edi);
- __dprintf(" ds=%x es=%x ip=%x cs=%x f=%x r=%p\n"
+ dprintf(1, " ds=%x es=%x ip=%x cs=%x f=%x r=%p\n"
, regs->ds, regs->es, regs->ip, regs->cs, regs->flags, regs);
}
diff --git a/src/post.c b/src/post.c
index f8b12a5..4b56551 100644
--- a/src/post.c
+++ b/src/post.c
@@ -214,9 +214,6 @@ rom_scan(u32 start, u32 end)
static void
post()
{
- if (CONFIG_DEBUG_SERIAL)
- debug_serial_setup();
-
dprintf(1, "Start bios\n");
dprintf(3, "init bda\n");
diff --git a/src/serial.c b/src/serial.c
index 026c399..f9988a3 100644
--- a/src/serial.c
+++ b/src/serial.c
@@ -76,10 +76,15 @@ handle_1400(struct bregs *regs)
set_success(regs);
}
-static int
-write_serial(u16 addr, u16 timeout, char c)
+// SERIAL - WRITE CHARACTER TO PORT
+static void
+handle_1401(struct bregs *regs)
{
+ u16 addr = getComAddr(regs);
+ if (!addr)
+ return;
u16 timer = GET_BDA(timer_counter);
+ u16 timeout = GET_BDA(com_timeout[regs->dx]);
while (((inb(addr+5) & 0x60) != 0x60) && (timeout)) {
u16 val16 = GET_BDA(timer_counter);
if (val16 != timer) {
@@ -87,24 +92,10 @@ write_serial(u16 addr, u16 timeout, char c)
timeout--;
}
}
- if (!timeout)
- // Ran out of time.
- return -1;
- outb(c, addr);
- return 0;
-}
-
-// SERIAL - WRITE CHARACTER TO PORT
-static void
-handle_1401(struct bregs *regs)
-{
- u16 addr = getComAddr(regs);
- if (!addr)
- return;
- u16 timeout = GET_BDA(com_timeout[regs->dx]);
- int ret = write_serial(addr, timeout, regs->al);
+ if (timeout)
+ outb(regs->al, addr);
regs->ah = inb(addr+5);
- if (ret)
+ if (!timeout)
regs->ah |= 0x80;
set_success(regs);
}
@@ -172,26 +163,6 @@ handle_14(struct bregs *regs)
/****************************************************************
- * Serial debugging
- ****************************************************************/
-
-#define BX_DEBUG_PORT 0x03f8
-
-void
-debug_serial_setup()
-{
- /* setup for serial logging: 8N1 */
- outb(0x03, BX_DEBUG_PORT+3);
-}
-
-void
-debug_serial(char c)
-{
- write_serial(BX_DEBUG_PORT, 0x0a, c);
-}
-
-
-/****************************************************************
* LPT ports
****************************************************************/
diff --git a/src/util.h b/src/util.h
index 11ca269..ec6faed 100644
--- a/src/util.h
+++ b/src/util.h
@@ -149,8 +149,6 @@ void handle_15c2(struct bregs *regs);
// serial.c
void serial_setup();
-void debug_serial_setup();
-void debug_serial(char c);
void lpt_setup();
// clock.c