1/* 2 * Copyright 2004-2010, Axel D��rfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef BIOS_H 6#define BIOS_H 7 8 9#include <SupportDefs.h> 10 11 12// The values in this structure are passed to the BIOS call, and 13// are updated to the register contents after that call. 14 15struct bios_regs { 16 uint32 eax; 17 uint32 ebx; 18 uint32 ecx; 19 uint32 edx; 20 uint32 esi; 21 uint32 edi; 22 uint16 es; 23 uint16 flags; 24}; 25 26#define CARRY_FLAG 0x01 27#define ZERO_FLAG 0x40 28 29#define ADDRESS_SEGMENT(address) ((addr_t)(address) >> 4) 30#define ADDRESS_OFFSET(address) ((addr_t)(address) & 0xf) 31#define LINEAR_ADDRESS(segment, offset) \ 32 (((addr_t)(segment) << 4) + (addr_t)(offset)) 33#define SEGMENTED_TO_LINEAR(segmented) \ 34 LINEAR_ADDRESS((addr_t)(segmented) >> 16, (addr_t)(segmented) & 0xffff) 35 36 37static const addr_t kDataSegmentScratch = 0x10020; // about 768 bytes 38static const addr_t kDataSegmentBase = 0x10000; 39static const addr_t kExtraSegmentScratch = 0x2000; // about 24 kB 40 41 42#ifdef __cplusplus 43extern "C" { 44#endif 45 46void call_bios(uint8 num, struct bios_regs* regs); 47uint32 boot_key_in_keyboard_buffer(void); 48 49#ifdef __cplusplus 50} 51#endif 52 53 54#endif /* BIOS_H */ 55