/* DEFINES ********************************************************************/
-#define CONSOLE_VIDEO_MEM_END 0xBFFFF
#define ROM_AREA_START 0xE0000
#define ROM_AREA_END 0xFFFFF
#define BDA_SEGMENT 0x40
+
#define BIOS_PIC_MASTER_INT 0x08
-#define BIOS_PIC_SLAVE_INT 0x70
+#define BIOS_PIC_SLAVE_INT 0x70
+
#define BIOS_SEGMENT 0xF000
+
#define BIOS_VIDEO_INTERRUPT 0x10
#define BIOS_EQUIPMENT_INTERRUPT 0x11
#define BIOS_KBD_INTERRUPT 0x16
#define BIOS_TIME_INTERRUPT 0x1A
#define BIOS_SYS_TIMER_INTERRUPT 0x1C
+
#define CONSOLE_FONT_HEIGHT 8
#define BIOS_KBD_BUFFER_SIZE 16
#define BIOS_EQUIPMENT_LIST 0x2C // HACK: Disable FPU for now
#define BIOS_DEFAULT_VIDEO_MODE 0x03
#define BIOS_MAX_PAGES 8
+#define BIOS_PAGE_SIZE 0x1000
#define BIOS_MAX_VIDEO_MODE 0x13
+#define DEFAULT_ATTRIBUTE 0x07
+#define GRAPHICS_VIDEO_SEG 0xA000
+#define TEXT_VIDEO_SEG 0xB800
-typedef struct
+#define BDA_KBDFLAG_RSHIFT (1 << 0)
+#define BDA_KBDFLAG_LSHIFT (1 << 1)
+#define BDA_KBDFLAG_CTRL (1 << 2)
+#define BDA_KBDFLAG_ALT (1 << 3)
+#define BDA_KBDFLAG_SCROLL_ON (1 << 4)
+#define BDA_KBDFLAG_NUMLOCK_ON (1 << 5)
+#define BDA_KBDFLAG_CAPSLOCK_ON (1 << 6)
+#define BDA_KBDFLAG_INSERT_ON (1 << 7)
+#define BDA_KBDFLAG_RALT (1 << 8)
+#define BDA_KBDFLAG_LALT (1 << 9)
+#define BDA_KBDFLAG_SYSRQ (1 << 10)
+#define BDA_KBDFLAG_PAUSE (1 << 11)
+#define BDA_KBDFLAG_SCROLL (1 << 12)
+#define BDA_KBDFLAG_NUMLOCK (1 << 13)
+#define BDA_KBDFLAG_CAPSLOCK (1 << 14)
+#define BDA_KBDFLAG_INSERT (1 << 15)
+
+enum
{
- DWORD Width;
- DWORD Height;
- BOOLEAN Text;
- BYTE Bpp;
- BOOLEAN Gray;
- BYTE Pages;
- WORD Segment;
-} VIDEO_MODE;
+ SCROLL_DIRECTION_UP,
+ SCROLL_DIRECTION_DOWN,
+ SCROLL_DIRECTION_LEFT,
+ SCROLL_DIRECTION_RIGHT
+};
#pragma pack(push, 1)
{
WORD SerialPorts[4];
WORD ParallelPorts[3];
- WORD EbdaSegment;
+ WORD EbdaSegment; // Sometimes, ParallelPort
WORD EquipmentList;
- BYTE Reserved0;
+ BYTE Reserved0; // Errors in PCjr infrared keyboard link
WORD MemorySize;
- WORD Reserved1;
- WORD KeyboardFlags;
+ WORD Reserved1; // Scratch pad for manufacturing error tests
+ WORD KeybdShiftFlags;
BYTE AlternateKeypad;
WORD KeybdBufferHead;
WORD KeybdBufferTail;
BYTE ComTimeOut[4];
WORD KeybdBufferStart;
WORD KeybdBufferEnd;
+ BYTE ScreenRows;
+ WORD CharacterHeight;
} BIOS_DATA_AREA, *PBIOS_DATA_AREA;
#pragma pack(pop)
/* FUNCTIONS ******************************************************************/
+extern PBIOS_DATA_AREA Bda;
+
BOOLEAN BiosInitialize(VOID);
VOID BiosCleanup(VOID);
-VOID BiosUpdateConsole(ULONG StartAddress, ULONG EndAddress);
-VOID BiosUpdateVideoMemory(ULONG StartAddress, ULONG EndAddress);
-inline DWORD BiosGetVideoMemoryStart(VOID);
-inline VOID BiosVerticalRefresh(VOID);
+BYTE BiosGetVideoMode(VOID);
+BOOLEAN BiosSetVideoMode(BYTE ModeNumber);
WORD BiosPeekCharacter(VOID);
WORD BiosGetCharacter(VOID);
+VOID BiosSetCursorPosition(BYTE Row, BYTE Column, BYTE Page);
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);
+VOID BiosPrintCharacter(CHAR Character, BYTE Attribute, BYTE Page);
+BOOLEAN BiosScrollWindow(
+ INT Direction,
+ DWORD Amount,
+ SMALL_RECT Rectangle,
+ BYTE Page,
+ BYTE FillAttribute
+);
+
+#endif // _BIOS_H_
-#endif
+/* EOF */