2013-06-26 22:58:41 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: GPL - See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS Virtual DOS Machine
|
|
|
|
* FILE: bios.h
|
|
|
|
* PURPOSE: VDM BIOS (header file)
|
|
|
|
* PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _BIOS_H_
|
|
|
|
#define _BIOS_H_
|
|
|
|
|
|
|
|
/* INCLUDES *******************************************************************/
|
|
|
|
|
|
|
|
#include "ntvdm.h"
|
|
|
|
|
|
|
|
/* DEFINES ********************************************************************/
|
|
|
|
|
2013-07-18 11:44:06 +00:00
|
|
|
#define ROM_AREA_START 0xE0000
|
2013-06-26 22:58:41 +00:00
|
|
|
#define ROM_AREA_END 0xFFFFF
|
2013-07-15 01:37:38 +00:00
|
|
|
#define BDA_SEGMENT 0x40
|
2013-06-26 22:58:41 +00:00
|
|
|
#define BIOS_PIC_MASTER_INT 0x08
|
|
|
|
#define BIOS_PIC_SLAVE_INT 0x70
|
|
|
|
#define BIOS_SEGMENT 0xF000
|
2013-06-29 21:37:44 +00:00
|
|
|
#define BIOS_VIDEO_INTERRUPT 0x10
|
2013-07-02 02:08:30 +00:00
|
|
|
#define BIOS_EQUIPMENT_INTERRUPT 0x11
|
2013-06-29 21:37:44 +00:00
|
|
|
#define BIOS_KBD_INTERRUPT 0x16
|
|
|
|
#define BIOS_TIME_INTERRUPT 0x1A
|
2013-07-05 01:31:50 +00:00
|
|
|
#define BIOS_SYS_TIMER_INTERRUPT 0x1C
|
2013-06-26 22:58:41 +00:00
|
|
|
#define CONSOLE_FONT_HEIGHT 8
|
2013-07-15 01:37:38 +00:00
|
|
|
#define BIOS_KBD_BUFFER_SIZE 16
|
|
|
|
#define BIOS_EQUIPMENT_LIST 0x2C // HACK: Disable FPU for now
|
2013-07-05 00:08:18 +00:00
|
|
|
#define BIOS_DEFAULT_VIDEO_MODE 0x03
|
|
|
|
#define BIOS_MAX_PAGES 8
|
2013-08-05 23:20:25 +00:00
|
|
|
#define BIOS_PAGE_SIZE 0x1000
|
2013-07-05 00:08:18 +00:00
|
|
|
#define BIOS_MAX_VIDEO_MODE 0x13
|
2013-08-05 23:20:25 +00:00
|
|
|
#define DEFAULT_ATTRIBUTE 0x07
|
|
|
|
#define GRAPHICS_VIDEO_SEG 0xA000
|
|
|
|
#define TEXT_VIDEO_SEG 0xB800
|
2013-07-05 00:08:18 +00:00
|
|
|
|
2013-08-05 23:20:25 +00:00
|
|
|
enum
|
2013-07-05 00:08:18 +00:00
|
|
|
{
|
2013-08-05 23:20:25 +00:00
|
|
|
SCROLL_DIRECTION_UP,
|
|
|
|
SCROLL_DIRECTION_DOWN,
|
|
|
|
SCROLL_DIRECTION_LEFT,
|
|
|
|
SCROLL_DIRECTION_RIGHT
|
|
|
|
};
|
2013-06-26 22:58:41 +00:00
|
|
|
|
2013-07-15 01:37:38 +00:00
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
WORD SerialPorts[4];
|
|
|
|
WORD ParallelPorts[3];
|
|
|
|
WORD EbdaSegment;
|
|
|
|
WORD EquipmentList;
|
|
|
|
BYTE Reserved0;
|
|
|
|
WORD MemorySize;
|
|
|
|
WORD Reserved1;
|
|
|
|
WORD KeyboardFlags;
|
|
|
|
BYTE AlternateKeypad;
|
|
|
|
WORD KeybdBufferHead;
|
|
|
|
WORD KeybdBufferTail;
|
|
|
|
WORD KeybdBuffer[BIOS_KBD_BUFFER_SIZE];
|
|
|
|
BYTE DriveRecalibrate;
|
|
|
|
BYTE DriveMotorStatus;
|
|
|
|
BYTE MotorShutdownCounter;
|
|
|
|
BYTE LastDisketteOperation;
|
|
|
|
BYTE Reserved2[7];
|
|
|
|
BYTE VideoMode;
|
|
|
|
WORD ScreenColumns;
|
|
|
|
WORD VideoPageSize;
|
|
|
|
WORD VideoPageOffset;
|
|
|
|
WORD CursorPosition[BIOS_MAX_PAGES];
|
|
|
|
BYTE CursorEndLine;
|
|
|
|
BYTE CursorStartLine;
|
|
|
|
BYTE VideoPage;
|
|
|
|
WORD CrtBasePort;
|
|
|
|
BYTE CrtModeControl;
|
|
|
|
BYTE CrtColorPaletteMask;
|
|
|
|
DWORD Uptime;
|
|
|
|
BYTE Reserved3;
|
|
|
|
DWORD TickCounter;
|
|
|
|
BYTE MidnightPassed;
|
|
|
|
BYTE BreakFlag;
|
|
|
|
WORD SoftReset;
|
|
|
|
BYTE LastDiskOperation;
|
|
|
|
BYTE NumDisks;
|
|
|
|
BYTE DriveControlByte;
|
|
|
|
BYTE DiskPortOffset;
|
|
|
|
BYTE LptTimeOut[4];
|
|
|
|
BYTE ComTimeOut[4];
|
|
|
|
WORD KeybdBufferStart;
|
|
|
|
WORD KeybdBufferEnd;
|
2013-08-05 23:20:25 +00:00
|
|
|
BYTE ScreenRows;
|
|
|
|
WORD CharacterHeight;
|
2013-07-15 01:37:38 +00:00
|
|
|
} BIOS_DATA_AREA, *PBIOS_DATA_AREA;
|
|
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
2013-06-26 22:58:41 +00:00
|
|
|
/* FUNCTIONS ******************************************************************/
|
|
|
|
|
2013-07-23 21:43:57 +00:00
|
|
|
BOOLEAN BiosInitialize(VOID);
|
|
|
|
VOID BiosCleanup(VOID);
|
2013-08-05 23:20:25 +00:00
|
|
|
BYTE BiosGetVideoMode(VOID);
|
|
|
|
BOOLEAN BiosSetVideoMode(BYTE ModeNumber);
|
2013-07-23 21:43:57 +00:00
|
|
|
WORD BiosPeekCharacter(VOID);
|
|
|
|
WORD BiosGetCharacter(VOID);
|
2013-08-07 19:56:28 +00:00
|
|
|
VOID BiosSetCursorPosition(BYTE Row, BYTE Column, BYTE Page);
|
2013-07-23 21:43:57 +00:00
|
|
|
VOID BiosVideoService(LPWORD Stack);
|
|
|
|
VOID BiosEquipmentService(LPWORD Stack);
|
|
|
|
VOID BiosKeyboardService(LPWORD Stack);
|
|
|
|
VOID BiosTimeService(LPWORD Stack);
|
|
|
|
VOID BiosHandleIrq(BYTE IrqNumber, LPWORD Stack);
|
|
|
|
VOID BiosSystemTimerInterrupt(LPWORD Stack);
|
2013-08-05 23:20:25 +00:00
|
|
|
BOOLEAN BiosScrollWindow(
|
|
|
|
INT Direction,
|
|
|
|
DWORD Amount,
|
|
|
|
SMALL_RECT Rectangle,
|
|
|
|
BYTE Page,
|
|
|
|
BYTE FillAttribute
|
|
|
|
);
|
2013-06-26 22:58:41 +00:00
|
|
|
|
2013-08-09 18:55:35 +00:00
|
|
|
#endif // _BIOS_H_
|
|
|
|
|
|
|
|
/* EOF */
|