This allows one to easily enable verbose output from handlers.
void VISIBLE16
handle_18()
{
- debug_enter(NULL);
+ debug_enter(NULL, DEBUG_HDL_18);
u16 seq = GET_EBDA(ipl.sequence) + 1;
do_boot(seq);
}
void VISIBLE16
handle_19()
{
- debug_enter(NULL);
+ debug_enter(NULL, DEBUG_HDL_19);
do_boot(0);
}
void VISIBLE16
handle_1a(struct bregs *regs)
{
- //debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_1a);
switch (regs->ah) {
case 0x00: handle_1a00(regs); break;
case 0x01: handle_1a01(regs); break;
void VISIBLE16
handle_1c()
{
- //debug_enter(regs);
+ debug_isr(DEBUG_ISR_1c);
}
// INT 08h System Timer ISR Entry Point
void VISIBLE16
handle_08()
{
- //debug_isr();
+ debug_isr(DEBUG_ISR_08);
irq_enable();
floppy_tick();
void VISIBLE16
handle_70()
{
- //debug_isr();
+ debug_isr(DEBUG_ISR_70);
// Check which modes are enabled and have occurred.
u8 registerB = inb_cmos(CMOS_STATUS_B);
// Start of fixed addresses in 0xf0000 segment.
#define BUILD_START_FIXED 0xe050
+// Debugging levels. If non-zero and CONFIG_DEBUG_LEVEL is greater
+// than the specified value, then the corresponding irq handler will
+// report every enter event.
+#define DEBUG_HDL_05 1
+#define DEBUG_HDL_10 1
+#define DEBUG_HDL_11 1
+#define DEBUG_HDL_12 1
+#define DEBUG_HDL_15 9
+#define DEBUG_ISR_nmi 1
+#define DEBUG_ISR_75 1
+#define DEBUG_HDL_16 9
+#define DEBUG_ISR_09 9
+#define DEBUG_HDL_18 1
+#define DEBUG_HDL_19 1
+#define DEBUG_HDL_1a 9
+#define DEBUG_ISR_1c 9
+#define DEBUG_ISR_08 9
+#define DEBUG_ISR_70 9
+#define DEBUG_HDL_40 1
+#define DEBUG_HDL_13 9
+#define DEBUG_ISR_76 9
+#define DEBUG_HDL_14 1
+#define DEBUG_HDL_17 1
+#define DEBUG_ISR_74 9
+#define DEBUG_ISR_0e 9
+
#endif // config.h
void VISIBLE16
handle_40(struct bregs *regs)
{
- debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_40);
handle_legacy_disk(regs, regs->dl);
}
void VISIBLE16
handle_13(struct bregs *regs)
{
- //debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_13);
u8 drive = regs->dl;
if (CONFIG_CDROM_EMU) {
void VISIBLE16
handle_76()
{
- //debug_isr();
+ debug_isr(DEBUG_ISR_76);
SET_BDA(disk_interrupt_flag, 0xff);
eoi_both_pics();
}
void VISIBLE16
handle_0e()
{
- //debug_isr();
+ debug_isr(DEBUG_ISR_0e);
if ((inb(PORT_FD_STATUS) & 0xc0) != 0xc0) {
outb(0x08, PORT_FD_DATA); // sense interrupt status
while ((inb(PORT_FD_STATUS) & 0xc0) != 0xc0)
void VISIBLE16
handle_16(struct bregs *regs)
{
- //debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_16);
set_leds();
void VISIBLE16
handle_09()
{
- //debug_isr();
+ debug_isr(DEBUG_ISR_09);
// disable keyboard
outb(0xad, PORT_PS2_STATUS);
// This file may be distributed under the terms of the GNU GPLv3 license.
#include "biosvar.h" // struct bregs
-#include "util.h" // debug_enter
+#include "util.h" // debug_isr
#define DEBUGF1(fmt, args...) bprintf(0, fmt , ##args)
#define DEBUGF(fmt, args...)
void VISIBLE16
handle_74()
{
- //debug_isr();
+ debug_isr(DEBUG_ISR_74);
irq_enable();
int74_function();
void VISIBLE16
handle_14(struct bregs *regs)
{
- debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_14);
irq_enable();
void VISIBLE16
handle_17(struct bregs *regs)
{
- debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_17);
irq_enable();
void VISIBLE16
handle_15(struct bregs *regs)
{
- //debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_15);
switch (regs->ah) {
case 0x24: handle_1524(regs); break;
case 0x4f: handle_154f(regs); break;
void VISIBLE16
handle_12(struct bregs *regs)
{
- debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_12);
regs->ax = GET_BDA(mem_size_kb);
}
void VISIBLE16
handle_11(struct bregs *regs)
{
- debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_11);
regs->ax = GET_BDA(equipment_list_flags);
}
void VISIBLE16
handle_05(struct bregs *regs)
{
- debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_05);
}
// INT 10h Video Support Service Entry Point
void VISIBLE16
handle_10(struct bregs *regs)
{
- debug_enter(regs);
+ debug_enter(regs, DEBUG_HDL_10);
// dont do anything, since the VGA BIOS handles int10h requests
}
void VISIBLE16
handle_nmi()
{
- debug_isr();
+ debug_isr(DEBUG_ISR_nmi);
BX_PANIC("NMI Handler called\n");
}
void VISIBLE16
handle_75()
{
- debug_isr();
+ debug_isr(DEBUG_ISR_75);
// clear irq13
outb(0, PORT_MATH_CLEAR);
void __debug_fail(const char *fname, struct bregs *regs);
void __debug_stub(const char *fname, struct bregs *regs);
void __debug_isr(const char *fname);
-#define debug_enter(regs) \
- __debug_enter(__func__, regs)
+#define debug_enter(regs, lvl) do { \
+ if ((lvl) && (lvl) <= CONFIG_DEBUG_LEVEL) \
+ __debug_enter(__func__, regs); \
+ } while (0)
+#define debug_isr(lvl) do { \
+ if ((lvl) && (lvl) <= CONFIG_DEBUG_LEVEL) \
+ __debug_isr(__func__); \
+ } while (0)
#define debug_stub(regs) \
__debug_stub(__func__, regs)
-#define debug_isr(regs) \
- __debug_isr(__func__)
// Frequently used return codes
#define RET_EUNSUPPORTED 0x86