Cleanup of fixed space addresses.
The BIOS_CONFIG_TABLE must be aligned to 1 (or gcc may change it).
Consistently use __aligned(x) wrapper throughout C code.
Register the official fixed address handlers - even if it is only a
jump to the real handler.
Declare .type of data objects - it improves disassembler output.
Put labels at all fixed addresses - it improves disassembler output.
entry_hwirq should be calling 'cli' - use regular entry macro.
int1D is a data table, not code - so don't put an iretw there.
diff --git a/src/cbt.c b/src/cbt.c
index 26744ca..8a2a11a 100644
--- a/src/cbt.c
+++ b/src/cbt.c
@@ -27,7 +27,7 @@
// INT 16/AH=09h (keyboard functionality) supported
#define CBT_F2_INT1609 (1<<6)
-struct bios_config_table_s BIOS_CONFIG_TABLE = {
+struct bios_config_table_s BIOS_CONFIG_TABLE __aligned(1) = {
.size = sizeof(BIOS_CONFIG_TABLE) - 2,
.model = CONFIG_MODEL_ID,
.submodel = CONFIG_SUBMODEL_ID,
diff --git a/src/floppy_dbt.c b/src/floppy_dbt.c
index 987568b..c04d222 100644
--- a/src/floppy_dbt.c
+++ b/src/floppy_dbt.c
@@ -9,7 +9,7 @@
// Since no provisions are made for multiple drive types, most
// values in this table are ignored. I set parameters for 1.44M
// floppy here
-struct floppy_dbt_s diskette_param_table __attribute__((aligned (1))) VISIBLE16 = {
+struct floppy_dbt_s diskette_param_table __aligned(1) VISIBLE16 = {
.specify1 = 0xAF,
.specify2 = 0x02, // head load time 0000001, DMA used
.shutoff_ticks = 0x25,
diff --git a/src/font.c b/src/font.c
index 01c73ed..17f0690 100644
--- a/src/font.c
+++ b/src/font.c
@@ -7,7 +7,7 @@
* found at ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
* This font is public domain
*/
-const u8 vgafont8[128*8] __attribute__((aligned (1))) = {
+const u8 vgafont8[128*8] __aligned(1) = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e,
0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e,
diff --git a/src/pirtable.c b/src/pirtable.c
index 705cc50..8e3c366 100644
--- a/src/pirtable.c
+++ b/src/pirtable.c
@@ -12,7 +12,7 @@
struct pir_table {
struct pir_header pir;
struct pir_slot slots[6];
-} PACKED PIR_TABLE __attribute__((aligned(16))) = {
+} PACKED PIR_TABLE __aligned(16) = {
#if CONFIG_PIRTABLE
.pir = {
.version = 0x0100,
diff --git a/src/post.c b/src/post.c
index 31b9c2f..77c7797 100644
--- a/src/post.c
+++ b/src/post.c
@@ -54,15 +54,15 @@
// 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(0x11, entry_11_official);
+ set_irq(0x12, entry_12_official);
+ set_irq(0x13, entry_13_official);
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(0x19, entry_19_official);
set_irq(0x1a, entry_1a);
set_irq(0x1c, entry_1c);
set_irq(0x40, entry_40);
diff --git a/src/rombios16.lds.S b/src/rombios16.lds.S
index d51d69c..009eb89 100644
--- a/src/rombios16.lds.S
+++ b/src/rombios16.lds.S
@@ -14,8 +14,10 @@
code16_start = . ;
.text16 : {
*(.text)
+ code16_rodata = . ;
*(.rodata*)
*(.data)
+ code16_bss = . ;
*(.bss)
*(COMMON)
}
diff --git a/src/rombios32.lds.S b/src/rombios32.lds.S
index 3308345..cc3fc36 100644
--- a/src/rombios32.lds.S
+++ b/src/rombios32.lds.S
@@ -16,13 +16,11 @@
*(.text)
code32_rodata = . ;
*(.rodata*)
- code32_data = . ;
*(.data)
. = ALIGN(16) ;
- __bss_start = . ;
+ code32_bss = . ;
*(.bss)
*(COMMON)
- __bss_end = . ;
}
code32_end = . ;
}
diff --git a/src/romlayout.S b/src/romlayout.S
index d0b463c..e5da763 100644
--- a/src/romlayout.S
+++ b/src/romlayout.S
@@ -304,6 +304,7 @@
retl
// Entry point when a post call looks like a resume.
+// %eax = shutdown status from cmos
entry_resume:
// Save old shutdown status.
movl %eax, %ebx
@@ -393,6 +394,7 @@
// Set base to f0000 to correspond to beginning of BIOS,
// in case I actually define an IDT later
// Set limit to 0
+ .type pmode_IDT_info, @object
pmode_IDT_info:
.word 0x0000 // limit 15:00
.long 0xf0000 // base 16:47
@@ -402,15 +404,18 @@
// Set to typical real-mode values.
// base = 000000
// limit = 03ff
+ .type rmode_IDT_info, @object
rmode_IDT_info:
.word 0x03ff // limit 15:00
.long 0 // base 16:47
+ .type rombios32_gdt_48, @object
rombios32_gdt_48:
.word (rombios32_gdt_end - rombios32_gdt)
.long (BUILD_BIOS_ADDR + rombios32_gdt)
.balign 8
+ .type rombios32_gdt, @object
rombios32_gdt:
.word 0, 0, 0, 0
.word 0, 0, 0, 0
@@ -432,6 +437,7 @@
// actually a PnP BIOS, so make sure it is *not* aligned, so OSes will
// not see it if they scan.
.global pnp_string
+ .type pnp_string, @object
.balign 2
.byte 0
pnp_string:
@@ -463,20 +469,19 @@
ORG 0xe2c3
IRQ_ENTRY nmi
- IRQ_ENTRY_ARG 13
- IRQ_ENTRY_ARG 12
- IRQ_ENTRY_ARG 11
- IRQ_ENTRY 76
- IRQ_ENTRY 1c
- IRQ_ENTRY 70
-
ORG 0xe3fe
+ .global entry_13_official
+entry_13_official:
jmp entry_13
ORG 0xe401
+ .type __fdpt, @object
+__fdpt:
// XXX - Fixed Disk Parameter Table
ORG 0xe6f2
+ .global entry_19_official
+entry_19_official:
jmp entry_19
ORG 0xe6f5
@@ -484,16 +489,76 @@
.text
ORG 0xe729
+ .type __brgt, @object
+__brgt:
// XXX - Baud Rate Generator Table
ORG 0xe739
IRQ_ENTRY_ARG 14
+ ORG 0xe82e
+ IRQ_ENTRY_ARG 16
+
+ ORG 0xe987
+ IRQ_ENTRY 09
+
+ ORG 0xec59
+ IRQ_ENTRY_ARG 40
+
+ ORG 0xef57
+ IRQ_ENTRY 0e
+
+ ORG 0xefc7
+.include "out/floppy_dbt.proc.16.s"
+ .text
+
+ ORG 0xefd2
+ IRQ_ENTRY_ARG 17
+
+ ORG 0xf045
+__int10_0x0f:
+ // XXX - INT 10 Functions 0-Fh Entry Point
+ iretw
+
+ ORG 0xf065
+ IRQ_ENTRY_ARG 10
+
+ ORG 0xf0a4
+ .type __int1d, @object
+__int1d:
+ // XXX - INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
+ .space 0x58
+
+ .global freespace2_start, freespace2_end
+freespace2_start:
+
+ ORG 0xf841
+freespace2_end:
+ .global entry_12_official
+entry_12_official:
+ jmp entry_12
+
+ ORG 0xf84d
+ .global entry_11_official
+entry_11_official:
+ jmp entry_11
+
+ ORG 0xf859
+ IRQ_ENTRY_ARG 15
+
+ // Fit other misc defs if the freespace between 0xf859-0xfa6e
+
+ IRQ_ENTRY_ARG 13
+ IRQ_ENTRY_ARG 12
+ IRQ_ENTRY_ARG 11
+ IRQ_ENTRY 76
+ IRQ_ENTRY 1c
+ IRQ_ENTRY 70
IRQ_ENTRY 74
IRQ_ENTRY 75
+ IRQ_ENTRY hwirq
// int 18/19 are special - they reset the stack and do not return.
- .global entry_19
entry_19:
RESET_STACK
pushl $_code32_handle_19
@@ -523,53 +588,6 @@
IRQ_TRAMPOLINE 1c
IRQ_TRAMPOLINE 4a
- ORG 0xe82e
- IRQ_ENTRY_ARG 16
-
- .global entry_hwirq
-entry_hwirq:
- ENTRY handle_hwirq
-
- ORG 0xe987
- IRQ_ENTRY 09
-
- ORG 0xec59
- IRQ_ENTRY_ARG 40
-
- ORG 0xef57
- IRQ_ENTRY 0e
-
- ORG 0xefc7
-.include "out/floppy_dbt.proc.16.s"
- .text
-
- ORG 0xefd2
- IRQ_ENTRY_ARG 17
-
- ORG 0xf045
- // XXX int 10
- iretw
-
- ORG 0xf065
- IRQ_ENTRY_ARG 10
-
- ORG 0xf0a4
- // XXX int 1D
- iretw
-
- .global freespace2_start, freespace2_end
-freespace2_start:
-
- ORG 0xf841
-freespace2_end:
- jmp entry_12
-
- ORG 0xf84d
- jmp entry_11
-
- ORG 0xf859
- IRQ_ENTRY_ARG 15
-
ORG 0xfa6e
.include "out/font.proc.16.s"
.text
@@ -581,11 +599,14 @@
IRQ_ENTRY 08
ORG 0xfef3
+__initvector:
// XXX - Initial Interrupt Vector Offsets Loaded by POST
ORG 0xff00
+ .type __copyright, @object
+__copyright:
// XXX - BIOS_COPYRIGHT_STRING
- .ascii "(c) 2002 MandrakeSoft S.A. Written by Kevin Lawton & the Bochs team."
+ .asciz "(c) 2002 MandrakeSoft S.A. Written by Kevin Lawton & the Bochs team."
ORG 0xff53
.global dummy_iret_handler
@@ -601,13 +622,18 @@
ljmpw $SEG_BIOS, $post16
ORG 0xfff5
+ .type __biosdate, @object
+__biosdate:
// BIOS build date
.ascii "06/23/99"
ORG 0xfffe
+ .type __model_id, @object
+__model_id:
.byte CONFIG_MODEL_ID
.global bios_checksum
+ .type bios_checksum, @object
bios_checksum:
.byte 0x00