diff options
| author | Javier <dev.git@javispedro.com> | 2026-08-29 17:45:02 +0200 |
|---|---|---|
| committer | Javier <dev.git@javispedro.com> | 2026-08-29 17:45:02 +0200 |
| commit | 003a26a76982f512e2f3a1108e46b88aa29ab306 (patch) | |
| tree | 6c508e3ee1fc995ed9e13ffc5075927ff94ed5fe /bda.h | |
| parent | d25f344b9980c2d030f8388df84aaf8ff88d2591 (diff) | |
| download | vbados-003a26a76982f512e2f3a1108e46b88aa29ab306.tar.gz vbados-003a26a76982f512e2f3a1108e46b88aa29ab306.zip | |
split bda from int10vga.h , update kitten version to latest from freedos
Diffstat (limited to 'bda.h')
| -rw-r--r-- | bda.h | 48 |
1 files changed, 48 insertions, 0 deletions
@@ -0,0 +1,48 @@ +#ifndef BDA_H +#define BDA_H + +#include "utils.h" + +#define BIOS_DATA_AREA_SEGMENT 0x40 + +static inline uint32_t bda_get_dword(unsigned int offset) { + uint32_t __far *p = MK_FP(BIOS_DATA_AREA_SEGMENT, offset); + return *p; +} + +static inline uint16_t bda_get_word(unsigned int offset) { + uint16_t __far *p = MK_FP(BIOS_DATA_AREA_SEGMENT, offset); + return *p; +} + +static inline uint8_t bda_get_byte(unsigned int offset) { + uint8_t __far *p = MK_FP(BIOS_DATA_AREA_SEGMENT, offset); + return *p; +} + +#define bda_get_ebda_segment() bda_get_word(0x0e) + +#define bda_get_video_mode() bda_get_byte(0x49) +#define bda_get_num_columns() bda_get_word(0x4a) +#define bda_get_video_page_size() bda_get_word(0x4c) +#define bda_get_cur_video_page() bda_get_word(0x62) +#define bda_get_last_row() bda_get_byte(0x84) +#define bda_get_char_height() bda_get_word(0x85) + +#define bda_get_tick_count() bda_get_dword(0x6c) +#define bda_get_tick_count_lo() bda_get_word(0x6c) + +static inline void bda_wait_tick() { + uint16_t cur_ticks = bda_get_tick_count_lo(); + do { + pause(); + } while (cur_ticks == bda_get_tick_count_lo()); +} + +static inline void bda_wait_ticks(unsigned int ticks) { + for (; ticks > 0; ticks--) { + bda_wait_tick(); + } +} + +#endif // BDA_H |
