// BIOS Data Area (and similar) definitions #ifndef __BDA_H #define __BDA_H #include "disk.h" // struct fdpt_s #include "types.h" // u8 /**************************************************************** * Interupt vector table ****************************************************************/ struct rmode_IVT { struct segoff_s ivec[256]; }; /**************************************************************** * Bios Data Area (BDA) ****************************************************************/ struct bios_data_area_s { // 40:00 u16 port_com[4]; u16 port_lpt[3]; u16 ebda_seg; // 40:10 u16 equipment_list_flags; u8 pad1; u16 mem_size_kb; u8 pad2; u8 ps2_ctrl_flag; u8 kbd_flag0; u8 kbd_flag1; u8 alt_keypad; u16 kbd_buf_head; u16 kbd_buf_tail; // 40:1e u8 kbd_buf[32]; u8 floppy_recalibration_status; u8 floppy_motor_status; // 40:40 u8 floppy_motor_counter; u8 floppy_last_status; u8 floppy_return_status[7]; u8 video_mode; u16 video_cols; u16 video_pagesize; u16 video_pagestart; // 40:50 u16 cursor_pos[8]; // 40:60 u16 cursor_type; u8 video_page; u16 crtc_address; u8 video_msr; u8 video_pal; struct segoff_s jump; u8 other_6b; u32 timer_counter; // 40:70 u8 timer_rollover; u8 break_flag; u16 soft_reset_flag; u8 disk_last_status; u8 hdcount; u8 disk_control_byte; u8 port_disk; u8 lpt_timeout[4]; u8 com_timeout[4]; // 40:80 u16 kbd_buf_start_offset; u16 kbd_buf_end_offset; u8 video_rows; u16 char_height; u8 video_ctl; u8 video_switches; u8 modeset_ctl; u8 dcc_index; u8 floppy_last_data_rate; u8 disk_status_controller; u8 disk_error_controller; u8 disk_interrupt_flag; u8 floppy_harddisk_info; // 40:90 u8 floppy_media_state[4]; u8 floppy_track[2]; u8 kbd_flag2; u8 kbd_led; struct segoff_s user_wait_complete_flag; u32 user_wait_timeout; // 40:A0 u8 rtc_wait_flag; u8 other_a1[7]; struct segoff_s video_savetable; u8 other_ac[4]; // 40:B0 u8 other_b0[5*16]; } PACKED; // BDA floppy_recalibration_status bitdefs #define FRS_IRQ (1<<7) // BDA rtc_wait_flag bitdefs #define RWS_WAIT_PENDING (1<<0) #define RWS_WAIT_ELAPSED (1<<7) // BDA floppy_media_state bitdefs #define FMS_DRIVE_STATE_MASK (0x07) #define FMS_MEDIA_DRIVE_ESTABLISHED (1<<4) #define FMS_DOUBLE_STEPPING (1<<5) #define FMS_DATA_RATE_MASK (0xc0) // Limit of BDA timer_counter field #define TICKS_PER_DAY 1573040 /**************************************************************** * Extended Bios Data Area (EBDA) ****************************************************************/ struct extended_bios_data_area_s { u8 size; u8 reserved1[0x21]; struct segoff_s far_call_pointer; u8 mouse_flag1; u8 mouse_flag2; u8 mouse_data[0x08]; // 0x30 u8 other1[0x0d]; // 0x3d struct fdpt_s fdpt[2]; // 0x5d u8 other2[0xC4]; // 0x121 - Begin custom storage. } PACKED; /**************************************************************** * Bios Config Table ****************************************************************/ struct bios_config_table_s { u16 size; u8 model; u8 submodel; u8 biosrev; u8 feature1, feature2, feature3, feature4, feature5; } PACKED; #endif // bda.h