/* miscellaneous BIOS stuff */ #ifndef BIOS_H #define BIOS_H #ifdef __cplusplus extern "C" { #endif #include "bios_offsets.hh" #define DOSEMU_BIOS_SIZE() (bios_f000_end - bios_data_start + 1) /* * symbols to access BIOS-data with meaningful names, not just addresses, * which are only numbers. The names are retranslatios from an old german * book :-( */ #define BIOS_BASE_ADDRESS_COM1 0x400 #define BIOS_BASE_ADDRESS_COM2 0x402 #define BIOS_BASE_ADDRESS_COM3 0x404 #define BIOS_BASE_ADDRESS_COM4 0x406 #define BIOS_ADDRESS_LPT1 0x408 #define BIOS_ADDRESS_LPT2 0x40a #define BIOS_ADDRESS_LPT3 0x40c /* 0x40e is reserved */ #define BIOS_CONFIGURATION 0x410 /* 0x412 is reserved */ #define BIOS_MEMORY_SIZE 0x413 /* #define bios_expansion_memory_size (*(unsigned int *) 0x415) */ #define BIOS_KEYBOARD_STATE 0x417 #define BIOS_KEYBOARD_FLAGS1 BIOS_KEYBOARD_STATE #define BIOS_KEYBOARD_FLAGS2 0x418 #define BIOS_KEYBOARD_TOKEN 0x419 /* used for keyboard input with Alt-Number */ #define BIOS_KEYBOARD_BUFFER_HEAD 0x41a #define BIOS_KEYBOARD_BUFFER_TAIL 0x41c #define BIOS_KEYBOARD_BUFFER 0x41e /* #define bios_keyboard_buffer (*(unsigned int *) 0x41e) */ #define BIOS_DRIVE_ACTIVE 0x43e #define BIOS_DRIVE_RUNNING 0x43f #define BIOS_MOTOR_TIMEOUT 0x440 #define BIOS_DISK_STATUS 0x441 #define BIOS_FDC_RESULT_BUFFER 0x442 #define BIOS_VIDEO_MODE 0x449 #define BIOS_SCREEN_COLUMNS 0x44a #define BIOS_VIDEO_MEMORY_USED 0x44c #define BIOS_VIDEO_MEMORY_ADDRESS 0x44e #define set_bios_cursor_x_position(screen, val) \ LOWMEM_WRITE_BYTE(0x450 + 2*(screen), (val)) #define get_bios_cursor_x_position(screen) \ LOWMEM_READ_BYTE(0x450 + 2*(screen)) #define set_bios_cursor_y_position(screen, val) \ LOWMEM_WRITE_BYTE(0x451 + 2*(screen), (val)) #define get_bios_cursor_y_position(screen) \ LOWMEM_READ_BYTE(0x451 + 2*(screen)) #define BIOS_CURSOR_SHAPE 0x460 #define BIOS_CURSOR_LAST_LINE 0x460 #define BIOS_CURSOR_FIRST_LINE 0x461 #define BIOS_CURRENT_SCREEN_PAGE 0x462 #define BIOS_VIDEO_PORT 0x463 #define BIOS_VDU_CONTROL 0x465 #define BIOS_VDU_COLOR_REGISTER 0x466 /* 0x467-0x468 is reserved */ #define BIOS_TIMER 0x46c #define BIOS_24_HOURS_FLAG 0x470 #define BIOS_KEYBOARD_FLAGS 0x471 #define BIOS_CTRL_ALT_DEL_FLAG 0x472 #define BIOS_HDISK_STATUS 0x474 #define BIOS_HARDDISK_COUNT 0x475 /* 0x474, 0x476, 0x477 is reserved */ #define BIOS_LPT1_TIMEOUT 0x478 #define BIOS_LPT2_TIMEOUT 0x479 #define BIOS_LPT3_TIMEOUT 0x47a /* 0x47b is reserved */ #define BIOS_COM1_TIMEOUT 0x47c #define BIOS_COM2_TIMEOUT 0x47d /* 0x47e is reserved */ /* 0x47f-0x4ff is unknow for me */ #define BIOS_KEYBOARD_BUFFER_START 0x480 #define BIOS_KEYBOARD_BUFFER_END 0x482 #define BIOS_ROWS_ON_SCREEN_MINUS_1 0x484 #define BIOS_FONT_HEIGHT 0x485 #define BIOS_VIDEO_INFO_0 0x487 #define BIOS_VIDEO_INFO_1 0x488 #define BIOS_VIDEO_INFO_2 0x489 #define BIOS_VIDEO_COMBO 0x48a #define BIOS_KEYBOARD_FLAGS3 0x496 #define BIOS_KEYBOARD_LEDS 0x497 #define BIOS_PRINT_SCREEN_FLAG 0x500 #define BIOS_VIDEO_SAVEPTR 0x4a8 #define BIT(x) (1< 4, CONF_NLPT with num > 3, CONF_NFLOP * with num > 4 */ #define CONF_NSER(c,num) {c&=~(BIT(9)|BIT(10)|BIT(11)); c|=(num<<9);} #define CONF_NLPT(c,num) {c&=~(BIT(14)|BIT(15)); c|=(num<<14);} #define CONF_NFLOP(c,num) {c&=~(CONF_FLOP|BIT(6)|BIT(7)); \ if (num) c|=((num-1)<<6)|CONF_FLOP;} extern unsigned int bios_configuration; // The virtual // BIOS-configuration void bios_setup_init(void); #define HLT_OFF(offs) (offs-DPMI_OFF) void post_hook(void); #ifdef __cplusplus }; #endif #endif /* BIOS_H */