aboutsummaryrefslogtreecommitdiff
path: root/src/post.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/post.c')
-rw-r--r--src/post.c87
1 files changed, 30 insertions, 57 deletions
diff --git a/src/post.c b/src/post.c
index dc909b2..6f407d9 100644
--- a/src/post.c
+++ b/src/post.c
@@ -21,36 +21,17 @@
#define bda ((struct bios_data_area_s *)MAKE_FARPTR(SEG_BDA, 0))
#define ebda ((struct extended_bios_data_area_s *)MAKE_FARPTR(SEG_EBDA, 0))
-static void
-set_irq(int vector, void *loc)
+void
+__set_irq(int vector, void *loc)
{
SET_BDA(ivecs[vector].seg, SEG_BIOS);
SET_BDA(ivecs[vector].offset, (u32)loc - BUILD_BIOS_ADDR);
}
-// Symbols defined in romlayout.S
-extern void dummy_iret_handler();
-extern void entry_08();
-extern void entry_09();
-extern void entry_hwirq();
-extern void entry_0e();
-extern void entry_10();
-extern void entry_11();
-extern void entry_12();
-extern void entry_13();
-extern void entry_14();
-extern void entry_15();
-extern void entry_16();
-extern void entry_17();
-extern void entry_18();
-extern void entry_19();
-extern void entry_1a();
-extern void entry_1c();
-extern void entry_40();
-extern void entry_70();
-extern void entry_74();
-extern void entry_75();
-extern void entry_76();
+#define set_irq(vector, func) do { \
+ extern void func (void); \
+ __set_irq(vector, func); \
+ } while (0)
static void
init_bda()
@@ -60,46 +41,38 @@ init_bda()
SET_BDA(mem_size_kb, BASE_MEM_IN_K);
+ // Initialize all vectors to a dummy handler.
int i;
for (i=0; i<256; i++)
- set_irq(i, &dummy_iret_handler);
-
- set_irq(0x08, &entry_08);
- set_irq(0x09, &entry_09);
- //set_irq(0x0a, &entry_hwirq);
- //set_irq(0x0b, &entry_hwirq);
- //set_irq(0x0c, &entry_hwirq);
- //set_irq(0x0d, &entry_hwirq);
- set_irq(0x0e, &entry_0e);
- //set_irq(0x0f, &entry_hwirq);
- set_irq(0x10, &entry_10);
- set_irq(0x11, &entry_11);
- set_irq(0x12, &entry_12);
- set_irq(0x13, &entry_13);
- set_irq(0x14, &entry_14);
- set_irq(0x15, &entry_15);
- set_irq(0x16, &entry_16);
- set_irq(0x17, &entry_17);
- set_irq(0x18, &entry_18);
- set_irq(0x19, &entry_19);
- set_irq(0x1a, &entry_1a);
- set_irq(0x1c, &entry_1c);
- set_irq(0x40, &entry_40);
- set_irq(0x70, &entry_70);
- //set_irq(0x71, &entry_hwirq);
- //set_irq(0x72, &entry_hwirq);
- //set_irq(0x73, &entry_hwirq);
- set_irq(0x74, &entry_74);
- set_irq(0x75, &entry_75);
- set_irq(0x76, &entry_76);
- //set_irq(0x77, &entry_hwirq);
+ set_irq(i, dummy_iret_handler);
+
+ // Initialize all hw vectors to a default hw handler.
+ for (i=0x08; i<=0x0f; i++)
+ set_irq(i, entry_hwirq);
+ for (i=0x70; i<=0x77; i++)
+ set_irq(i, entry_hwirq);
+
+ // Initialize software handlers.
+ set_irq(0x10, entry_10);
+ set_irq(0x11, entry_11);
+ set_irq(0x12, entry_12);
+ set_irq(0x13, entry_13);
+ set_irq(0x14, entry_14);
+ set_irq(0x15, entry_15);
+ set_irq(0x16, entry_16);
+ set_irq(0x17, entry_17);
+ set_irq(0x18, entry_18);
+ set_irq(0x19, entry_19);
+ set_irq(0x1a, entry_1a);
+ set_irq(0x1c, entry_1c);
+ set_irq(0x40, entry_40);
// set vector 0x79 to zero
// this is used by 'gardian angel' protection system
SET_BDA(ivecs[0x79].seg, 0);
SET_BDA(ivecs[0x79].offset, 0);
- set_irq(0x1E, &diskette_param_table2);
+ __set_irq(0x1E, &diskette_param_table2);
}
static void