[FAST486][NTVDM]
[reactos.git] / subsystems / ntvdm / bios.h
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: bios.h
5 * PURPOSE: VDM BIOS (header file)
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 */
8
9 #ifndef _BIOS_H_
10 #define _BIOS_H_
11
12 /* INCLUDES *******************************************************************/
13
14 #include "ntvdm.h"
15
16 /* DEFINES ********************************************************************/
17
18 #define ROM_AREA_START 0xE0000
19 #define ROM_AREA_END 0xFFFFF
20 #define BDA_SEGMENT 0x40
21
22 #define BIOS_PIC_MASTER_INT 0x08
23 #define BIOS_PIC_SLAVE_INT 0x70
24
25 #define BIOS_SEGMENT 0xF000
26
27 #define BIOS_VIDEO_INTERRUPT 0x10
28 #define BIOS_EQUIPMENT_INTERRUPT 0x11
29 #define BIOS_KBD_INTERRUPT 0x16
30 #define BIOS_TIME_INTERRUPT 0x1A
31 #define BIOS_SYS_TIMER_INTERRUPT 0x1C
32
33 #define CONSOLE_FONT_HEIGHT 8
34 #define BIOS_KBD_BUFFER_SIZE 16
35 #define BIOS_EQUIPMENT_LIST 0x2C // HACK: Disable FPU for now
36 #define BIOS_DEFAULT_VIDEO_MODE 0x03
37 #define BIOS_MAX_PAGES 8
38 #define BIOS_PAGE_SIZE 0x1000
39 #define BIOS_MAX_VIDEO_MODE 0x13
40 #define DEFAULT_ATTRIBUTE 0x07
41 #define GRAPHICS_VIDEO_SEG 0xA000
42 #define TEXT_VIDEO_SEG 0xB800
43
44 #define BDA_KBDFLAG_RSHIFT (1 << 0)
45 #define BDA_KBDFLAG_LSHIFT (1 << 1)
46 #define BDA_KBDFLAG_CTRL (1 << 2)
47 #define BDA_KBDFLAG_ALT (1 << 3)
48 #define BDA_KBDFLAG_SCROLL_ON (1 << 4)
49 #define BDA_KBDFLAG_NUMLOCK_ON (1 << 5)
50 #define BDA_KBDFLAG_CAPSLOCK_ON (1 << 6)
51 #define BDA_KBDFLAG_INSERT_ON (1 << 7)
52 #define BDA_KBDFLAG_RALT (1 << 8)
53 #define BDA_KBDFLAG_LALT (1 << 9)
54 #define BDA_KBDFLAG_SYSRQ (1 << 10)
55 #define BDA_KBDFLAG_PAUSE (1 << 11)
56 #define BDA_KBDFLAG_SCROLL (1 << 12)
57 #define BDA_KBDFLAG_NUMLOCK (1 << 13)
58 #define BDA_KBDFLAG_CAPSLOCK (1 << 14)
59 #define BDA_KBDFLAG_INSERT (1 << 15)
60
61 enum
62 {
63 SCROLL_DIRECTION_UP,
64 SCROLL_DIRECTION_DOWN,
65 SCROLL_DIRECTION_LEFT,
66 SCROLL_DIRECTION_RIGHT
67 };
68
69 #pragma pack(push, 1)
70
71 typedef struct
72 {
73 WORD SerialPorts[4];
74 WORD ParallelPorts[3];
75 WORD EbdaSegment; // Sometimes, ParallelPort
76 WORD EquipmentList;
77 BYTE Reserved0; // Errors in PCjr infrared keyboard link
78 WORD MemorySize;
79 WORD Reserved1; // Scratch pad for manufacturing error tests
80 WORD KeybdShiftFlags;
81 BYTE AlternateKeypad;
82 WORD KeybdBufferHead;
83 WORD KeybdBufferTail;
84 WORD KeybdBuffer[BIOS_KBD_BUFFER_SIZE];
85 BYTE DriveRecalibrate;
86 BYTE DriveMotorStatus;
87 BYTE MotorShutdownCounter;
88 BYTE LastDisketteOperation;
89 BYTE Reserved2[7];
90 BYTE VideoMode;
91 WORD ScreenColumns;
92 WORD VideoPageSize;
93 WORD VideoPageOffset;
94 WORD CursorPosition[BIOS_MAX_PAGES];
95 BYTE CursorEndLine;
96 BYTE CursorStartLine;
97 BYTE VideoPage;
98 WORD CrtBasePort;
99 BYTE CrtModeControl;
100 BYTE CrtColorPaletteMask;
101 DWORD Uptime;
102 BYTE Reserved3;
103 DWORD TickCounter;
104 BYTE MidnightPassed;
105 BYTE BreakFlag;
106 WORD SoftReset;
107 BYTE LastDiskOperation;
108 BYTE NumDisks;
109 BYTE DriveControlByte;
110 BYTE DiskPortOffset;
111 BYTE LptTimeOut[4];
112 BYTE ComTimeOut[4];
113 WORD KeybdBufferStart;
114 WORD KeybdBufferEnd;
115 BYTE ScreenRows;
116 WORD CharacterHeight;
117 } BIOS_DATA_AREA, *PBIOS_DATA_AREA;
118
119 #pragma pack(pop)
120
121 /* FUNCTIONS ******************************************************************/
122
123 extern PBIOS_DATA_AREA Bda;
124
125 BOOLEAN BiosInitialize(VOID);
126 VOID BiosCleanup(VOID);
127 BYTE BiosGetVideoMode(VOID);
128 BOOLEAN BiosSetVideoMode(BYTE ModeNumber);
129 WORD BiosPeekCharacter(VOID);
130 WORD BiosGetCharacter(VOID);
131 VOID BiosSetCursorPosition(BYTE Row, BYTE Column, BYTE Page);
132 VOID BiosVideoService(LPWORD Stack);
133 VOID BiosEquipmentService(LPWORD Stack);
134 VOID BiosKeyboardService(LPWORD Stack);
135 VOID BiosTimeService(LPWORD Stack);
136 VOID BiosHandleIrq(BYTE IrqNumber, LPWORD Stack);
137 VOID BiosSystemTimerInterrupt(LPWORD Stack);
138 VOID BiosPrintCharacter(CHAR Character, BYTE Attribute, BYTE Page);
139 BOOLEAN BiosScrollWindow(
140 INT Direction,
141 DWORD Amount,
142 SMALL_RECT Rectangle,
143 BYTE Page,
144 BYTE FillAttribute
145 );
146
147 #endif // _BIOS_H_
148
149 /* EOF */