aboutsummaryrefslogtreecommitdiffstats
path: root/src/disk.h
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2008-03-11 11:14:59 -0400
committerKevin O'Connor <kevin@koconnor.net>2008-03-11 11:14:59 -0400
commited12849c9b06e371f11596a32da5997c96d9bc95 (patch)
tree690280737159fb0f8feb42301d37e660517928f2 /src/disk.h
parent2cdd8b6fb1aced4ec08c5e98705922c27285ddfb (diff)
downloadseabios-ed12849c9b06e371f11596a32da5997c96d9bc95.tar.gz
Reduce stack usage for ISRs; minor fixes.
Don't back up all registers on isr handlers - they don't read/modify them. This saves stack space. extended_bios_data_area_s must be packed to match ebda spec. Enable irqs on int 08 - follows old bochs bios code. Fix bug in int 76 -- should clear disk_interrupt_flag not floppy_harddisk_info. Make sure we alert in disk_ret on failure case. int 18/19 entry points need to setup cld/%ds too. asm in handle_1587 clobbers flags - note that in clobber list.
Diffstat (limited to 'src/disk.h')
-rw-r--r--src/disk.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/disk.h b/src/disk.h
index 36e95e53..0f92b1e4 100644
--- a/src/disk.h
+++ b/src/disk.h
@@ -8,6 +8,7 @@
#include "ioport.h" // outb
#include "biosvar.h" // struct bregs
+#include "util.h" // set_code_fail
#define DISK_RET_SUCCESS 0x00
#define DISK_RET_EPARAM 0x01
@@ -34,7 +35,7 @@ struct int13ext_s {
u16 segment;
u32 lba1;
u32 lba2;
-};
+} PACKED;
#define GET_INT13EXT(regs,var) \
GET_FARVAR((regs)->ds, ((struct int13ext_s*)((regs)->si+0))->var)
@@ -63,7 +64,7 @@ struct int13dpt_s {
u8 device_path[8];
u8 reserved3;
u8 checksum;
-};
+} PACKED;
#define GET_INT13DPT(regs,var) \
GET_FARVAR((regs)->ds, ((struct int13dpt_s*)((regs)->si+0))->var)
@@ -83,7 +84,7 @@ struct floppy_dbt_s {
u8 fill_byte;
u8 settle_time;
u8 startup_time;
-};
+} PACKED;
struct floppy_ext_dbt_s {
struct floppy_dbt_s dbt;
@@ -91,15 +92,17 @@ struct floppy_ext_dbt_s {
u8 max_track;
u8 data_rate;
u8 drive_type;
-};
+} PACKED;
// Helper function for setting up a return code.
static inline void
disk_ret(struct bregs *regs, u8 code)
{
- regs->ah = code;
SET_BDA(disk_last_status, code);
- set_cf(regs, code);
+ if (code)
+ set_code_fail(regs, code);
+ else
+ set_code_success(regs);
}
// floppy.c
@@ -109,7 +112,6 @@ void floppy_tick();
// disk.c
void emu_access(struct bregs *regs, u8 device, u16 command);
-void extended_access(struct bregs *regs, u8 device, u16 command);
void disk_13(struct bregs *regs, u8 device);
void disk_13XX(struct bregs *regs, u8 device);