[NTVDM]: Break the BIOS into the BIOS and the video BIOS.

svn path=/branches/ntvdm/; revision=61586
This commit is contained in:
Hermès Bélusca-Maïto 2014-01-11 17:05:25 +00:00
parent 3d36bf4451
commit 25105f6bec
6 changed files with 1635 additions and 1543 deletions

View file

@ -7,6 +7,7 @@ spec2def(ntvdm.exe ntvdm.spec)
list(APPEND SOURCE list(APPEND SOURCE
bios/bios.c bios/bios.c
bios/vidbios.c
hardware/cmos.c hardware/cmos.c
hardware/pic.c hardware/pic.c
hardware/ps2.c hardware/ps2.c

File diff suppressed because it is too large Load diff

View file

@ -12,6 +12,7 @@
/* INCLUDES *******************************************************************/ /* INCLUDES *******************************************************************/
#include "ntvdm.h" #include "ntvdm.h"
#include "vidbios.h"
/* DEFINES ********************************************************************/ /* DEFINES ********************************************************************/
@ -24,7 +25,6 @@
#define BIOS_PIC_MASTER_INT 0x08 #define BIOS_PIC_MASTER_INT 0x08
#define BIOS_PIC_SLAVE_INT 0x70 #define BIOS_PIC_SLAVE_INT 0x70
#define BIOS_VIDEO_INTERRUPT 0x10
#define BIOS_EQUIPMENT_INTERRUPT 0x11 #define BIOS_EQUIPMENT_INTERRUPT 0x11
#define BIOS_MEMORY_SIZE 0x12 #define BIOS_MEMORY_SIZE 0x12
#define BIOS_MISC_INTERRUPT 0x15 #define BIOS_MISC_INTERRUPT 0x15
@ -32,18 +32,9 @@
#define BIOS_TIME_INTERRUPT 0x1A #define BIOS_TIME_INTERRUPT 0x1A
#define BIOS_SYS_TIMER_INTERRUPT 0x1C #define BIOS_SYS_TIMER_INTERRUPT 0x1C
#define CONSOLE_FONT_HEIGHT 8
#define BIOS_KBD_BUFFER_SIZE 16 #define BIOS_KBD_BUFFER_SIZE 16
#define BIOS_EQUIPMENT_LIST 0x2C // HACK: Disable FPU for now #define BIOS_EQUIPMENT_LIST 0x2C // HACK: Disable FPU for now
#define BIOS_DEFAULT_VIDEO_MODE 0x03
#define BIOS_MAX_PAGES 8
#define BIOS_MAX_VIDEO_MODE 0x13
#define DEFAULT_ATTRIBUTE 0x07
#define GRAPHICS_VIDEO_SEG 0xA000
#define TEXT_VIDEO_SEG 0xB800
#define BDA_KBDFLAG_RSHIFT (1 << 0) #define BDA_KBDFLAG_RSHIFT (1 << 0)
#define BDA_KBDFLAG_LSHIFT (1 << 1) #define BDA_KBDFLAG_LSHIFT (1 << 1)
#define BDA_KBDFLAG_CTRL (1 << 2) #define BDA_KBDFLAG_CTRL (1 << 2)
@ -61,14 +52,6 @@
#define BDA_KBDFLAG_CAPSLOCK (1 << 14) #define BDA_KBDFLAG_CAPSLOCK (1 << 14)
#define BDA_KBDFLAG_INSERT (1 << 15) #define BDA_KBDFLAG_INSERT (1 << 15)
enum
{
SCROLL_DIRECTION_UP,
SCROLL_DIRECTION_DOWN,
SCROLL_DIRECTION_LEFT,
SCROLL_DIRECTION_RIGHT
};
/* /*
* BIOS Data Area at 0040:XXXX * BIOS Data Area at 0040:XXXX
* *
@ -153,7 +136,6 @@ extern PBIOS_DATA_AREA Bda;
WORD BiosPeekCharacter(VOID); WORD BiosPeekCharacter(VOID);
WORD BiosGetCharacter(VOID); WORD BiosGetCharacter(VOID);
VOID BiosPrintCharacter(CHAR Character, BYTE Attribute, BYTE Page);
BOOLEAN BiosInitialize(VOID); BOOLEAN BiosInitialize(VOID);
VOID BiosCleanup(VOID); VOID BiosCleanup(VOID);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,46 @@
/*
* COPYRIGHT: GPL - See COPYING in the top level directory
* PROJECT: ReactOS Virtual DOS Machine
* FILE: vidbios.h
* PURPOSE: VDM Video BIOS
* PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
*/
#ifndef _VIDBIOS_H_
#define _VIDBIOS_H_
/* INCLUDES *******************************************************************/
#include "ntvdm.h"
/* DEFINES ********************************************************************/
#define BIOS_VIDEO_INTERRUPT 0x10
#define CONSOLE_FONT_HEIGHT 8
#define BIOS_DEFAULT_VIDEO_MODE 0x03
#define BIOS_MAX_PAGES 8
#define BIOS_MAX_VIDEO_MODE 0x13
#define DEFAULT_ATTRIBUTE 0x07
#define GRAPHICS_VIDEO_SEG 0xA000
#define TEXT_VIDEO_SEG 0xB800
enum
{
SCROLL_DIRECTION_UP,
SCROLL_DIRECTION_DOWN,
SCROLL_DIRECTION_LEFT,
SCROLL_DIRECTION_RIGHT
};
/* FUNCTIONS ******************************************************************/
VOID VidBiosPrintCharacter(CHAR Character, BYTE Attribute, BYTE Page);
BOOLEAN VidBiosInitialize(HANDLE BiosConsoleOutput);
VOID VidBiosCleanup(VOID);
#endif // _VIDBIOS_H_
/* EOF */

View file

@ -732,7 +732,7 @@ WORD DosWriteFile(WORD FileHandle, LPVOID Buffer, WORD Count, LPWORD BytesWritte
for (i = 0; i < Count; i++) for (i = 0; i < Count; i++)
{ {
/* Call the BIOS to print the character */ /* Call the BIOS to print the character */
BiosPrintCharacter(((LPBYTE)Buffer)[i], DOS_CHAR_ATTRIBUTE, Bda->VideoPage); VidBiosPrintCharacter(((LPBYTE)Buffer)[i], DOS_CHAR_ATTRIBUTE, Bda->VideoPage);
BytesWritten32++; BytesWritten32++;
} }
} }
@ -2679,11 +2679,11 @@ VOID WINAPI DosFastConOut(LPWORD Stack)
/* /*
* The default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh. * The default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh.
* Do better and call directly BiosPrintCharacter: it's what INT 10/AH=0Eh * Do better and call directly VidBiosPrintCharacter: it's what INT 10/AH=0Eh
* does. Otherwise we would have to set BL to DOS_CHAR_ATTRIBUTE and * does. Otherwise we would have to set BL to DOS_CHAR_ATTRIBUTE and
* BH to Bda->VideoPage. * BH to Bda->VideoPage.
*/ */
BiosPrintCharacter(getAL(), DOS_CHAR_ATTRIBUTE, Bda->VideoPage); VidBiosPrintCharacter(getAL(), DOS_CHAR_ATTRIBUTE, Bda->VideoPage);
} }
VOID WINAPI DosInt2Fh(LPWORD Stack) VOID WINAPI DosInt2Fh(LPWORD Stack)