mirror of
https://github.com/reactos/reactos.git
synced 2024-10-08 10:24:06 +00:00
[NTVDM]
Improve the I/O read/write callbacks to allow multiple reads or writes at once. svn path=/branches/ntvdm/; revision=60849
This commit is contained in:
parent
c0a85cdfce
commit
a0587b741a
|
@ -82,146 +82,152 @@ static VOID WINAPI EmulatorWriteMemory(PFAST486_STATE State, ULONG Address, PVOI
|
||||||
|
|
||||||
static VOID WINAPI EmulatorReadIo(PFAST486_STATE State, ULONG Port, PVOID Buffer, ULONG Size)
|
static VOID WINAPI EmulatorReadIo(PFAST486_STATE State, ULONG Port, PVOID Buffer, ULONG Size)
|
||||||
{
|
{
|
||||||
|
INT i;
|
||||||
LPBYTE Address = (LPBYTE)Buffer;
|
LPBYTE Address = (LPBYTE)Buffer;
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(State);
|
UNREFERENCED_PARAMETER(State);
|
||||||
UNREFERENCED_PARAMETER(Size);
|
|
||||||
|
|
||||||
switch (Port)
|
for (i = 0; i < Size; i++)
|
||||||
{
|
{
|
||||||
case PIC_MASTER_CMD:
|
switch (Port)
|
||||||
case PIC_SLAVE_CMD:
|
|
||||||
{
|
{
|
||||||
*Address = PicReadCommand(Port);
|
case PIC_MASTER_CMD:
|
||||||
break;
|
case PIC_SLAVE_CMD:
|
||||||
}
|
{
|
||||||
|
*(Address++) = PicReadCommand(Port);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case PIC_MASTER_DATA:
|
case PIC_MASTER_DATA:
|
||||||
case PIC_SLAVE_DATA:
|
case PIC_SLAVE_DATA:
|
||||||
{
|
{
|
||||||
*Address = PicReadData(Port);
|
*(Address++) = PicReadData(Port);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PIT_DATA_PORT(0):
|
case PIT_DATA_PORT(0):
|
||||||
case PIT_DATA_PORT(1):
|
case PIT_DATA_PORT(1):
|
||||||
case PIT_DATA_PORT(2):
|
case PIT_DATA_PORT(2):
|
||||||
{
|
{
|
||||||
*Address = PitReadData(Port - PIT_DATA_PORT(0));
|
*(Address++) = PitReadData(Port - PIT_DATA_PORT(0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PS2_CONTROL_PORT:
|
case PS2_CONTROL_PORT:
|
||||||
{
|
{
|
||||||
*Address = KeyboardReadStatus();
|
*(Address++) = KeyboardReadStatus();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PS2_DATA_PORT:
|
case PS2_DATA_PORT:
|
||||||
{
|
{
|
||||||
*Address = KeyboardReadData();
|
*(Address++) = KeyboardReadData();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VGA_AC_WRITE:
|
case VGA_AC_WRITE:
|
||||||
case VGA_AC_READ:
|
case VGA_AC_READ:
|
||||||
case VGA_SEQ_INDEX:
|
case VGA_SEQ_INDEX:
|
||||||
case VGA_SEQ_DATA:
|
case VGA_SEQ_DATA:
|
||||||
case VGA_DAC_READ_INDEX:
|
case VGA_DAC_READ_INDEX:
|
||||||
case VGA_DAC_WRITE_INDEX:
|
case VGA_DAC_WRITE_INDEX:
|
||||||
case VGA_DAC_DATA:
|
case VGA_DAC_DATA:
|
||||||
case VGA_MISC_READ:
|
case VGA_MISC_READ:
|
||||||
case VGA_MISC_WRITE:
|
case VGA_MISC_WRITE:
|
||||||
case VGA_CRTC_INDEX:
|
case VGA_CRTC_INDEX:
|
||||||
case VGA_CRTC_DATA:
|
case VGA_CRTC_DATA:
|
||||||
case VGA_GC_INDEX:
|
case VGA_GC_INDEX:
|
||||||
case VGA_GC_DATA:
|
case VGA_GC_DATA:
|
||||||
case VGA_STAT_MONO:
|
case VGA_STAT_MONO:
|
||||||
case VGA_STAT_COLOR:
|
case VGA_STAT_COLOR:
|
||||||
{
|
{
|
||||||
*Address = VgaReadPort(Port);
|
*(Address++) = VgaReadPort(Port);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT1("Read from unknown port: 0x%X\n", Port);
|
DPRINT1("Read from unknown port: 0x%X\n", Port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID WINAPI EmulatorWriteIo(PFAST486_STATE State, ULONG Port, PVOID Buffer, ULONG Size)
|
static VOID WINAPI EmulatorWriteIo(PFAST486_STATE State, ULONG Port, PVOID Buffer, ULONG Size)
|
||||||
{
|
{
|
||||||
BYTE Byte = *(LPBYTE)Buffer;
|
INT i;
|
||||||
|
LPBYTE Address = (LPBYTE)Buffer;
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(State);
|
UNREFERENCED_PARAMETER(State);
|
||||||
UNREFERENCED_PARAMETER(Size);
|
|
||||||
|
|
||||||
switch (Port)
|
for (i = 0; i < Size; i++)
|
||||||
{
|
{
|
||||||
case PIT_COMMAND_PORT:
|
switch (Port)
|
||||||
{
|
{
|
||||||
PitWriteCommand(Byte);
|
case PIT_COMMAND_PORT:
|
||||||
break;
|
{
|
||||||
}
|
PitWriteCommand(*(Address++));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case PIT_DATA_PORT(0):
|
case PIT_DATA_PORT(0):
|
||||||
case PIT_DATA_PORT(1):
|
case PIT_DATA_PORT(1):
|
||||||
case PIT_DATA_PORT(2):
|
case PIT_DATA_PORT(2):
|
||||||
{
|
{
|
||||||
PitWriteData(Port - PIT_DATA_PORT(0), Byte);
|
PitWriteData(Port - PIT_DATA_PORT(0), *(Address++));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PIC_MASTER_CMD:
|
case PIC_MASTER_CMD:
|
||||||
case PIC_SLAVE_CMD:
|
case PIC_SLAVE_CMD:
|
||||||
{
|
{
|
||||||
PicWriteCommand(Port, Byte);
|
PicWriteCommand(Port, *(Address++));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PIC_MASTER_DATA:
|
case PIC_MASTER_DATA:
|
||||||
case PIC_SLAVE_DATA:
|
case PIC_SLAVE_DATA:
|
||||||
{
|
{
|
||||||
PicWriteData(Port, Byte);
|
PicWriteData(Port, *(Address++));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PS2_CONTROL_PORT:
|
case PS2_CONTROL_PORT:
|
||||||
{
|
{
|
||||||
KeyboardWriteCommand(Byte);
|
KeyboardWriteCommand(*(Address++));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PS2_DATA_PORT:
|
case PS2_DATA_PORT:
|
||||||
{
|
{
|
||||||
KeyboardWriteData(Byte);
|
KeyboardWriteData(*(Address++));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VGA_AC_WRITE:
|
case VGA_AC_WRITE:
|
||||||
case VGA_AC_READ:
|
case VGA_AC_READ:
|
||||||
case VGA_SEQ_INDEX:
|
case VGA_SEQ_INDEX:
|
||||||
case VGA_SEQ_DATA:
|
case VGA_SEQ_DATA:
|
||||||
case VGA_DAC_READ_INDEX:
|
case VGA_DAC_READ_INDEX:
|
||||||
case VGA_DAC_WRITE_INDEX:
|
case VGA_DAC_WRITE_INDEX:
|
||||||
case VGA_DAC_DATA:
|
case VGA_DAC_DATA:
|
||||||
case VGA_MISC_READ:
|
case VGA_MISC_READ:
|
||||||
case VGA_MISC_WRITE:
|
case VGA_MISC_WRITE:
|
||||||
case VGA_CRTC_INDEX:
|
case VGA_CRTC_INDEX:
|
||||||
case VGA_CRTC_DATA:
|
case VGA_CRTC_DATA:
|
||||||
case VGA_GC_INDEX:
|
case VGA_GC_INDEX:
|
||||||
case VGA_GC_DATA:
|
case VGA_GC_DATA:
|
||||||
case VGA_STAT_MONO:
|
case VGA_STAT_MONO:
|
||||||
case VGA_STAT_COLOR:
|
case VGA_STAT_COLOR:
|
||||||
{
|
{
|
||||||
VgaWritePort(Port, Byte);
|
VgaWritePort(Port, *(Address++));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT1("Write to unknown port: 0x%X\n", Port);
|
DPRINT1("Write to unknown port: 0x%X\n", Port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue