Replace debug_exit calls with debug info while setting a failure.
Calling debug_exit at the end of a call doesn't help much - several of
the registers are already clobbered at this point. It also increases
stack usage because it prevents call tail optimization in many places.
diff --git a/src/system.c b/src/system.c
index 1f34c97..c92e1f0 100644
--- a/src/system.c
+++ b/src/system.c
@@ -35,34 +35,34 @@
handle_152400(struct bregs *regs)
{
set_a20(0);
- handle_ret(regs, 0);
+ set_code_success(regs);
}
static void
handle_152401(struct bregs *regs)
{
set_a20(1);
- handle_ret(regs, 0);
+ set_code_success(regs);
}
static void
handle_152402(struct bregs *regs)
{
regs->al = !!(inb(PORT_A20) & 0x20);
- handle_ret(regs, 0);
+ set_code_success(regs);
}
static void
handle_152403(struct bregs *regs)
{
regs->bx = 3;
- handle_ret(regs, 0);
+ set_code_success(regs);
}
static void
handle_1524XX(struct bregs *regs)
{
- handle_ret(regs, RET_EUNSUPPORTED);
+ set_code_fail(regs, RET_EUNSUPPORTED);
}
static void
@@ -81,7 +81,7 @@
static void
handle_1552(struct bregs *regs)
{
- handle_ret(regs, 0);
+ set_code_success(regs);
}
// Wait for CX:DX microseconds. currently using the
@@ -196,7 +196,7 @@
set_a20(prev_a20_enable);
- handle_ret(regs, 0);
+ set_code_success(regs);
}
// Get the amount of extended memory (above 1M)
@@ -209,7 +209,7 @@
// but real machines mostly return max. 63M.
if (regs->ax > 0xffc0)
regs->ax = 0xffc0;
- set_cf(regs, 0);
+ set_success(regs);
}
// Device busy interrupt. Called by Int 16h when no key available
@@ -228,6 +228,7 @@
static void
handle_154f(struct bregs *regs)
{
+ // set_fail(regs); -- don't report this failure.
set_cf(regs, 1);
}
@@ -236,14 +237,14 @@
{
regs->es = SEG_BIOS;
regs->bx = (u16)&BIOS_CONFIG_TABLE;
- handle_ret(regs, 0);
+ set_code_success(regs);
}
static void
handle_15c1(struct bregs *regs)
{
regs->es = GET_BDA(ebda_seg);
- set_cf(regs, 0);
+ set_success(regs);
}
static void
@@ -272,7 +273,7 @@
regs->ax = regs->cx;
regs->bx = regs->dx;
- set_cf(regs, 0);
+ set_success(regs);
}
#define ACPI_DATA_SIZE 0x00010000L
@@ -300,7 +301,7 @@
handle_15e820(struct bregs *regs)
{
if (regs->edx != 0x534D4150) {
- handle_ret(regs, RET_EUNSUPPORTED);
+ set_code_fail(regs, RET_EUNSUPPORTED);
return;
}
@@ -328,21 +329,21 @@
regs->ebx = 1;
regs->eax = 0x534D4150;
regs->ecx = 0x14;
- set_cf(regs, 0);
+ set_success(regs);
break;
case 1:
set_e820_range(regs->di, 0x0009fc00L, 0x000a0000L, E820_RESERVED);
regs->ebx = 2;
regs->eax = 0x534D4150;
regs->ecx = 0x14;
- set_cf(regs, 0);
+ set_success(regs);
break;
case 2:
set_e820_range(regs->di, 0x000e8000L, 0x00100000L, E820_RESERVED);
regs->ebx = 3;
regs->eax = 0x534D4150;
regs->ecx = 0x14;
- set_cf(regs, 0);
+ set_success(regs);
break;
case 3:
set_e820_range(regs->di, 0x00100000L,
@@ -350,7 +351,7 @@
regs->ebx = 4;
regs->eax = 0x534D4150;
regs->ecx = 0x14;
- set_cf(regs, 0);
+ set_success(regs);
break;
case 4:
set_e820_range(regs->di,
@@ -370,14 +371,14 @@
set_cf(regs, 0);
break;
default: /* AX=E820, DX=534D4150, BX unrecognized */
- handle_ret(regs, RET_EUNSUPPORTED);
+ set_code_fail(regs, RET_EUNSUPPORTED);
}
}
static void
handle_15e8XX(struct bregs *regs)
{
- handle_ret(regs, RET_EUNSUPPORTED);
+ set_code_fail(regs, RET_EUNSUPPORTED);
}
static void
@@ -393,7 +394,7 @@
static void
handle_15XX(struct bregs *regs)
{
- handle_ret(regs, RET_EUNSUPPORTED);
+ set_code_fail(regs, RET_EUNSUPPORTED);
}
// INT 15h System Services Entry Point
@@ -418,7 +419,6 @@
case 0xe8: handle_15e8(regs); break;
default: handle_15XX(regs); break;
}
- //debug_exit(regs);
}
// INT 12h Memory Size Service Entry Point
@@ -427,7 +427,6 @@
{
debug_enter(regs);
regs->ax = GET_BDA(mem_size_kb);
- debug_exit(regs);
}
// INT 11h Equipment List Service Entry Point
@@ -436,7 +435,6 @@
{
debug_enter(regs);
regs->ax = GET_BDA(equipment_list_flags);
- debug_exit(regs);
}
// INT 05h Print Screen Service Entry Point