Author: aandrejevic Date: Sun Oct 19 14:46:02 2014 New Revision: 64823
URL: http://svn.reactos.org/svn/reactos?rev=64823&view=rev Log: [FAST486] Implement the HLT instruction. Remove the IdleCallback, since it's unused and probably won't be used. (The load reduction will be implemented in NTVDM instead.)
Modified: trunk/reactos/include/reactos/libs/fast486/fast486.h trunk/reactos/lib/fast486/fast486.c trunk/reactos/lib/fast486/opcodes.c trunk/reactos/subsystems/ntvdm/cpu/cpu.c
Modified: trunk/reactos/include/reactos/libs/fast486/fast486.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/libs/fast48... ============================================================================== --- trunk/reactos/include/reactos/libs/fast486/fast486.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/libs/fast486/fast486.h [iso-8859-1] Sun Oct 19 14:46:02 2014 @@ -205,13 +205,6 @@ PVOID Buffer, ULONG DataCount, UCHAR DataSize -); - -typedef -VOID -(NTAPI *FAST486_IDLE_PROC) -( - PFAST486_STATE State );
typedef @@ -474,7 +467,6 @@ FAST486_MEM_WRITE_PROC MemWriteCallback; FAST486_IO_READ_PROC IoReadCallback; FAST486_IO_WRITE_PROC IoWriteCallback; - FAST486_IDLE_PROC IdleCallback; FAST486_BOP_PROC BopCallback; FAST486_INT_ACK_PROC IntAckCallback; FAST486_REG GeneralRegs[FAST486_NUM_GEN_REGS]; @@ -490,6 +482,7 @@ ULONG ExceptionCount; ULONG PrefixFlags; FAST486_SEG_REGS SegmentOverride; + BOOLEAN Halted; FAST486_INT_STATUS IntStatus; UCHAR PendingIntNum; PULONG Tlb; @@ -510,7 +503,6 @@ FAST486_MEM_WRITE_PROC MemWriteCallback, FAST486_IO_READ_PROC IoReadCallback, FAST486_IO_WRITE_PROC IoWriteCallback, - FAST486_IDLE_PROC IdleCallback, FAST486_BOP_PROC BopCallback, FAST486_INT_ACK_PROC IntAckCallback, PULONG Tlb);
Modified: trunk/reactos/lib/fast486/fast486.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/fast486.c?rev=6... ============================================================================== --- trunk/reactos/lib/fast486/fast486.c [iso-8859-1] (original) +++ trunk/reactos/lib/fast486/fast486.c [iso-8859-1] Sun Oct 19 14:46:02 2014 @@ -55,28 +55,31 @@ do { NextInst: - /* Check if this is a new instruction */ - if (State->PrefixFlags == 0) State->SavedInstPtr = State->InstPtr; - - /* Perform an instruction fetch */ - if (!Fast486FetchByte(State, &Opcode)) - { - /* Exception occurred */ + if (!State->Halted) + { + /* Check if this is a new instruction */ + if (State->PrefixFlags == 0) State->SavedInstPtr = State->InstPtr; + + /* Perform an instruction fetch */ + if (!Fast486FetchByte(State, &Opcode)) + { + /* Exception occurred */ + State->PrefixFlags = 0; + continue; + } + + // TODO: Check for CALL/RET to update ProcedureCallCount. + + /* Call the opcode handler */ + CurrentHandler = Fast486OpcodeHandlers[Opcode]; + CurrentHandler(State, Opcode); + + /* If this is a prefix, go to the next instruction immediately */ + if (CurrentHandler == Fast486OpcodePrefix) goto NextInst; + + /* A non-prefix opcode has been executed, reset the prefix flags */ State->PrefixFlags = 0; - continue; - } - - // TODO: Check for CALL/RET to update ProcedureCallCount. - - /* Call the opcode handler */ - CurrentHandler = Fast486OpcodeHandlers[Opcode]; - CurrentHandler(State, Opcode); - - /* If this is a prefix, go to the next instruction immediately */ - if (CurrentHandler == Fast486OpcodePrefix) goto NextInst; - - /* A non-prefix opcode has been executed, reset the prefix flags */ - State->PrefixFlags = 0; + }
/* * Check if there is an interrupt to execute, or a hardware interrupt signal @@ -84,6 +87,9 @@ */ if (State->Flags.Tf) { + /* No longer halted */ + State->Halted = FALSE; + /* Perform the interrupt */ Fast486PerformInterrupt(State, 0x01);
@@ -165,13 +171,6 @@
static VOID NTAPI -Fast486IdleCallback(PFAST486_STATE State) -{ - UNREFERENCED_PARAMETER(State); -} - -static VOID -NTAPI Fast486BopCallback(PFAST486_STATE State, UCHAR BopCode) { UNREFERENCED_PARAMETER(State); @@ -197,7 +196,6 @@ FAST486_MEM_WRITE_PROC MemWriteCallback, FAST486_IO_READ_PROC IoReadCallback, FAST486_IO_WRITE_PROC IoWriteCallback, - FAST486_IDLE_PROC IdleCallback, FAST486_BOP_PROC BopCallback, FAST486_INT_ACK_PROC IntAckCallback, PULONG Tlb) @@ -207,7 +205,6 @@ State->MemWriteCallback = (MemWriteCallback ? MemWriteCallback : Fast486MemWriteCallback); State->IoReadCallback = (IoReadCallback ? IoReadCallback : Fast486IoReadCallback ); State->IoWriteCallback = (IoWriteCallback ? IoWriteCallback : Fast486IoWriteCallback ); - State->IdleCallback = (IdleCallback ? IdleCallback : Fast486IdleCallback ); State->BopCallback = (BopCallback ? BopCallback : Fast486BopCallback ); State->IntAckCallback = (IntAckCallback ? IntAckCallback : Fast486IntAckCallback );
@@ -229,7 +226,6 @@ FAST486_MEM_WRITE_PROC MemWriteCallback = State->MemWriteCallback; FAST486_IO_READ_PROC IoReadCallback = State->IoReadCallback; FAST486_IO_WRITE_PROC IoWriteCallback = State->IoWriteCallback; - FAST486_IDLE_PROC IdleCallback = State->IdleCallback; FAST486_BOP_PROC BopCallback = State->BopCallback; FAST486_INT_ACK_PROC IntAckCallback = State->IntAckCallback; PULONG Tlb = State->Tlb; @@ -283,7 +279,6 @@ State->MemWriteCallback = MemWriteCallback; State->IoReadCallback = IoReadCallback; State->IoWriteCallback = IoWriteCallback; - State->IdleCallback = IdleCallback; State->BopCallback = BopCallback; State->IntAckCallback = IntAckCallback; State->Tlb = Tlb;
Modified: trunk/reactos/lib/fast486/opcodes.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/opcodes.c?rev=6... ============================================================================== --- trunk/reactos/lib/fast486/opcodes.c [iso-8859-1] (original) +++ trunk/reactos/lib/fast486/opcodes.c [iso-8859-1] Sun Oct 19 14:46:02 2014 @@ -574,12 +574,6 @@
FAST486_OPCODE_HANDLER(Fast486OpcodeNop) { - if (State->PrefixFlags & FAST486_PREFIX_REP) - { - /* Idle cycle */ - State->IdleCallback(State); - } - return TRUE; }
@@ -895,7 +889,7 @@ }
/* Halt */ - // TODO: Halt the CPU until an interrupt occurs, using IdleCallback if needed. + State->Halted = TRUE;
/* Return success */ return TRUE;
Modified: trunk/reactos/subsystems/ntvdm/cpu/cpu.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/ntvdm/cpu/cpu.c?... ============================================================================== --- trunk/reactos/subsystems/ntvdm/cpu/cpu.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/ntvdm/cpu/cpu.c [iso-8859-1] Sun Oct 19 14:46:02 2014 @@ -163,7 +163,6 @@ EmulatorWriteMemory, EmulatorReadIo, EmulatorWriteIo, - NULL, EmulatorBiosOperation, EmulatorIntAcknowledge, NULL /* TODO: Use a TLB */);