Use local time instead of system time for the clock.
Implement the "set system date" and "set system time" DOS functions.


svn path=/branches/ntvdm/; revision=59277
This commit is contained in:
Aleksandar Andrejevic 2013-06-21 22:14:07 +00:00
parent fe6988cbdd
commit b040791380

View file

@ -570,7 +570,7 @@ VOID DosInt21h(WORD CodeSegment)
/* Get system date */
case 0x2A:
{
GetSystemTime(&SystemTime);
GetLocalTime(&SystemTime);
EmulatorSetRegister(EMULATOR_REG_CX,
(Ecx & 0xFFFF0000) | SystemTime.wYear);
EmulatorSetRegister(EMULATOR_REG_DX,
@ -581,11 +581,33 @@ VOID DosInt21h(WORD CodeSegment)
(Eax & 0xFFFFFF00) | SystemTime.wDayOfWeek);
break;
}
/* Set system date */
case 0x2B:
{
GetLocalTime(&SystemTime);
SystemTime.wYear = LOWORD(Ecx);
SystemTime.wMonth = HIBYTE(Edx);
SystemTime.wDay = LOBYTE(Edx);
if (SetLocalTime(&SystemTime))
{
/* Return success */
EmulatorSetRegister(EMULATOR_REG_AX, Eax & 0xFFFFFF00);
}
else
{
/* Return failure */
EmulatorSetRegister(EMULATOR_REG_AX, Eax | 0xFF);
}
break;
}
/* Get system time */
case 0x2C:
{
GetSystemTime(&SystemTime);
GetLocalTime(&SystemTime);
EmulatorSetRegister(EMULATOR_REG_CX,
(Ecx & 0xFFFF0000)
| (SystemTime.wHour << 8)
@ -596,6 +618,29 @@ VOID DosInt21h(WORD CodeSegment)
| (SystemTime.wMilliseconds / 10));
break;
}
/* Set system time */
case 0x2D:
{
GetLocalTime(&SystemTime);
SystemTime.wHour = HIBYTE(Ecx);
SystemTime.wMinute = LOBYTE(Ecx);
SystemTime.wSecond = HIBYTE(Edx);
SystemTime.wMilliseconds = LOBYTE(Edx) * 10;
if (SetLocalTime(&SystemTime))
{
/* Return success */
EmulatorSetRegister(EMULATOR_REG_AX, Eax & 0xFFFFFF00);
}
else
{
/* Return failure */
EmulatorSetRegister(EMULATOR_REG_AX, Eax | 0xFF);
}
break;
}
/* Allocate Memory */
case 0x48: