#ifndef BIOS_H
#define BIOS_H
#include <SupportDefs.h>
struct bios_regs {
uint32 eax;
uint32 ebx;
uint32 ecx;
uint32 edx;
uint32 esi;
uint32 edi;
uint16 es;
uint16 flags;
#ifdef __cplusplus
bios_regs() : eax(0), ebx(0), ecx(0), edx(0), esi(0), edi(0), es(0), flags(0) {}
#endif
};
#define CARRY_FLAG 0x01
#define ZERO_FLAG 0x40
#define ADDRESS_SEGMENT(address) ((addr_t)(address) >> 4)
#define ADDRESS_OFFSET(address) ((addr_t)(address) & 0xf)
#define LINEAR_ADDRESS(segment, offset) \
(((addr_t)(segment) << 4) + (addr_t)(offset))
#define SEGMENTED_TO_LINEAR(segmented) \
LINEAR_ADDRESS((addr_t)(segmented) >> 16, (addr_t)(segmented) & 0xffff)
static const addr_t kDataSegmentScratch = 0x10020;
static const addr_t kDataSegmentBase = 0x10000;
static const addr_t kExtraSegmentScratch = 0x2000;
#ifdef __cplusplus
extern "C" {
#endif
void call_bios(uint8 num, struct bios_regs* regs);
uint32 boot_key_in_keyboard_buffer(void);
#ifdef __cplusplus
}
#endif
#endif