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,
@ -582,10 +582,32 @@ VOID DosInt21h(WORD CodeSegment)
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)
@ -597,6 +619,29 @@ VOID DosInt21h(WORD CodeSegment)
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:
{