dos_compilers/Intel iC-86 Compiler v4.5/INC/BIOS.H
2024-07-04 06:47:32 -07:00

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 */