132 lines
5.3 KiB
C++
132 lines
5.3 KiB
C++
|
/* bios.h - BIOS functions
|
||
|
* $Version: 1.2 $
|
||
|
* Copyright 1990,91 Intel Corporation, ALL RIGHTS RESERVED.
|
||
|
*/
|
||
|
|
||
|
#ifndef _biosh
|
||
|
#define _biosh
|
||
|
|
||
|
#pragma fixedparams("_bios_disk", "_bios_equiplist", "_bios_keybrd")
|
||
|
#pragma fixedparams("_bios_memsize", "_bios_printer", "_bios_serialcom")
|
||
|
#pragma fixedparams("_bios_timeofday")
|
||
|
|
||
|
/* BIOS COM port configuration constants */
|
||
|
#define _COM_INIT 0x00 /* Initialize the com port */
|
||
|
#define _COM_SEND 0x01 /* Send a byte to the com port */
|
||
|
#define _COM_RECEIVE 0x02 /* Get a byte from the com port */
|
||
|
#define _COM_STATUS 0x03 /* Get status from the com port */
|
||
|
|
||
|
#define _COM_110 0x00 /* Baud rate: 110 */
|
||
|
#define _COM_150 0x20 /* Baud rate: 150 */
|
||
|
#define _COM_300 0x40 /* Baud rate: 300 */
|
||
|
#define _COM_600 0x60 /* Baud rate: 600 */
|
||
|
#define _COM_1200 0x80 /* Baud rate: 1200 */
|
||
|
#define _COM_2400 0xA0 /* Baud rate: 2400 */
|
||
|
#define _COM_4800 0xC0 /* Baud rate: 4800 */
|
||
|
#define _COM_9600 0xE0 /* Baud rate: 9600 */
|
||
|
|
||
|
#define _COM_CHR7 0x02 /* Seven data bits per character */
|
||
|
#define _COM_CHR8 0x03 /* Eight data bits per character */
|
||
|
|
||
|
#define _COM_NOPARITY 0x00 /* No parity check */
|
||
|
#define _COM_ODDPARITY 0x08 /* Check for odd parity */
|
||
|
#define _COM_EVENPARITY 0x18 /* Check for even parity */
|
||
|
|
||
|
#define _COM_STOP1 0x00 /* One stop bit */
|
||
|
#define _COM_STOP2 0x04 /* Two stop bits */
|
||
|
|
||
|
/* BIOS disk operations */
|
||
|
#define _DISK_RESET 0x00 /* Reset the disk controller */
|
||
|
#define _DISK_STATUS 0x01 /* Get status from the disk */
|
||
|
#define _DISK_READ 0x02 /* Read sectors from the disk */
|
||
|
#define _DISK_WRITE 0x03 /* Write sectors to the disk */
|
||
|
#define _DISK_VERIFY 0x04 /* Verify disk sectors */
|
||
|
#define _DISK_FORMAT 0x05 /* Format a disk track */
|
||
|
|
||
|
#ifndef _FAR
|
||
|
#define _FAR
|
||
|
#define _HUGE
|
||
|
#define _NEAR
|
||
|
#endif
|
||
|
|
||
|
/* BIOS disk structure */
|
||
|
#ifndef _diskinfo_t
|
||
|
#pragma align (diskinfo_t)
|
||
|
struct diskinfo_t {
|
||
|
unsigned short drive;
|
||
|
unsigned short head;
|
||
|
unsigned short track;
|
||
|
unsigned short sector;
|
||
|
unsigned short nsectors;
|
||
|
void _FAR *buffer;
|
||
|
};
|
||
|
#define _diskinfo_t
|
||
|
#define _DISKINFO_T_DEFINED
|
||
|
#endif /* _diskinfo_t */
|
||
|
|
||
|
/* BIOS keyboard operations */
|
||
|
#define _KEYBRD_READ 0x00 /* Get next character from keyboard */
|
||
|
#define _KEYBRD_READY 0x01 /* See if a keystroke is ready */
|
||
|
#define _KEYBRD_SHIFTSTATUS 0x02 /* Get status of shift key */
|
||
|
|
||
|
/* BIOS enhanced keyboards operations */
|
||
|
#define _NKEYBRD_READ 0x10 /* Get next character from keyboard */
|
||
|
#define _NKEYBRD_READY 0x11 /* See if a keystroke is ready */
|
||
|
#define _NKEYBRD_SHIFTSTATUS 0x12 /* Get status of Shift key */
|
||
|
|
||
|
/* BIOS printer operations */
|
||
|
#define _PRINTER_WRITE 0x00 /* Write characters to the printer */
|
||
|
#define _PRINTER_INIT 0x01 /* Initialize the printer */
|
||
|
#define _PRINTER_STATUS 0x02 /* Get status from the printer */
|
||
|
|
||
|
/* BIOS clock operations */
|
||
|
#define _TIME_GETCLOCK 0x00 /* Get the clock counter */
|
||
|
#define _TIME_SETCLOCK 0x01 /* Set the clock counter */
|
||
|
|
||
|
/* Registers union - overlay the DWORD, WORD, and BYTE register
|
||
|
* structures into the same memory area. Declaration of "eax" and "ax"
|
||
|
* entries the same (unsigned) for ease of porting code using "ax". Also,
|
||
|
* note the optional 16-bit implementation of 'x' field.
|
||
|
*/
|
||
|
#ifndef _regs
|
||
|
#pragma align (DWORDREGS)
|
||
|
#pragma align (WORDREGS)
|
||
|
#pragma align (BYTEREGS)
|
||
|
union REGS {
|
||
|
struct DWORDREGS {unsigned eax, ebx, ecx, edx, esi,
|
||
|
edi, cflag, eflags, ebp;} w;
|
||
|
|
||
|
struct WORDREGS {unsigned ax, bx, cx, dx, si,
|
||
|
di, cflag, flags, bp;} x;
|
||
|
|
||
|
#if _ARCHITECTURE_ == 386 || _ARCHITECTURE_ == 486
|
||
|
|
||
|
struct BYTEREGS {unsigned al:8, ah:8, :16, bl:8, bh:8, :16,
|
||
|
cl:8, ch:8, :16, dl:8, dh:8, :16;} h;
|
||
|
#else
|
||
|
struct BYTEREGS {unsigned al:8, ah:8, bl:8, bh:8,
|
||
|
cl:8, ch:8, dl:8, dh:8;} h;
|
||
|
#endif
|
||
|
|
||
|
};
|
||
|
|
||
|
/* Selector/Segment register structure */
|
||
|
#pragma align (SREGS)
|
||
|
struct SREGS {unsigned short es, cs, ss, ds, fs, gs;};
|
||
|
|
||
|
#define _regs
|
||
|
#endif /* _regs */
|
||
|
|
||
|
/*
|
||
|
* Function prototypes
|
||
|
*/
|
||
|
unsigned int _bios_disk(unsigned, struct diskinfo_t *);
|
||
|
unsigned int _bios_equiplist(void);
|
||
|
unsigned int _bios_keybrd(unsigned);
|
||
|
unsigned int _bios_memsize(void);
|
||
|
unsigned int _bios_printer(unsigned, unsigned, unsigned);
|
||
|
unsigned int _bios_serialcom(unsigned, unsigned, unsigned);
|
||
|
unsigned int _bios_timeofday(unsigned, long *);
|
||
|
|
||
|
#endif /* _biosh */
|