Commit graph

157 commits

Author SHA1 Message Date
Aleksandar Andrejevic f5d3c9254c [FAST486]
Separate external interrupts from interrupt signals (which are
interrupts whose number is not known until they can be serviced,
just like hardware interrupts on a real CPU).
[NTVDM]
Improve the PIC emulation code (IRQ priorities, etc...).
Instead of checking for interrupts in the main loop, move the
PS/2 input parsing to a different thread.
Improve BIOS keyboard IRQ handling.


svn path=/branches/ntvdm/; revision=60761
2013-10-27 00:37:01 +00:00
Aleksandar Andrejevic e954b0db71 [SOFTX86]
Remove softx86, as it is no longer used by anything.


svn path=/branches/ntvdm/; revision=60757
2013-10-26 20:53:33 +00:00
Aleksandar Andrejevic dfd1c031d6 [FAST486]
Implement the CLTS instruction.


svn path=/branches/ntvdm/; revision=60752
2013-10-26 17:33:10 +00:00
Aleksandar Andrejevic 1525a235a2 [FAST486]
Implement the MOV instruction for control and debug registers.
Remove definitions for non-existant registers CR1, CR4, CR5, CR6 and CR7.
The standard 80486 doesn't have a CR4 register (although some implementations
of the 80486 had large page support and CR4, it was not reliable).
As for the debug registers, DR4 is the same as DR6, and DR5 is the same as DR7.


svn path=/branches/ntvdm/; revision=60747
2013-10-26 00:56:11 +00:00
Aleksandar Andrejevic 87f5903d48 [FAST486]
Implement extended opcode groups 0xB9 (UD2) and 0xBA (BT/BTS/BTR/BTC).


svn path=/branches/ntvdm/; revision=60745
2013-10-25 18:15:24 +00:00
Aleksandar Andrejevic 5eb7c07bb8 Sync with trunk for console graphics palettes.
svn path=/branches/ntvdm/; revision=60735
2013-10-23 00:26:50 +00:00
Aleksandar Andrejevic 67b093f38c [FAST486]
Create a macro SWAP (swaps two variables) to shorten the code.
Implement the BSWAP instruction.


svn path=/branches/ntvdm/; revision=60717
2013-10-20 00:55:31 +00:00
Aleksandar Andrejevic a93095e678 [FAST486]
Implement BT, BTS, BTR and BTC.


svn path=/branches/ntvdm/; revision=60716
2013-10-20 00:25:41 +00:00
Aleksandar Andrejevic 1a968e6f61 [FAST486]
Fix more prefix handling.
Create the macros TOGGLE_ADSIZE and TOGGLE_OPSIZE to shorten the code.


svn path=/branches/ntvdm/; revision=60715
2013-10-19 23:43:53 +00:00
Aleksandar Andrejevic 97c51f53c4 [FAST486]
Fix prefix handling.
Create a macro NO_LOCK_PREFIX to shorten the code.


svn path=/branches/ntvdm/; revision=60714
2013-10-19 23:03:40 +00:00
Aleksandar Andrejevic 75a0ca07a1 [FAST486]
Implement CMPXCHG.


svn path=/branches/ntvdm/; revision=60712
2013-10-19 18:56:58 +00:00
Aleksandar Andrejevic a98544e517 [FAST486]
Implement PUSH/POP FS/GS.


svn path=/branches/ntvdm/; revision=60711
2013-10-19 18:36:04 +00:00
Aleksandar Andrejevic ca7d21eff4 [FAST486]
The 80486 doesn't have any time stamp counter (TSC) at all.


svn path=/branches/ntvdm/; revision=60710
2013-10-19 18:28:27 +00:00
Aleksandar Andrejevic d3bc33ee5d [FAST486]
And add those newly implemented opcodes into the table...


svn path=/branches/ntvdm/; revision=60708
2013-10-19 18:00:19 +00:00
Aleksandar Andrejevic 7105c52d86 [FAST486]
Implement SETO, SETNO, SETC, SETNC, SETZ, SETNZ, SETBE, SETNBE, SETS, SETNS, SETP
SETNP, SETL, SETNL, SETLE and SETNLE.


svn path=/branches/ntvdm/; revision=60706
2013-10-19 17:57:26 +00:00
Aleksandar Andrejevic 2583e4f51e [FAST486]
Remove TODOs for instructions that don't exist on the 80486.


svn path=/branches/ntvdm/; revision=60704
2013-10-19 17:29:44 +00:00
Hermès Bélusca-Maïto 51040fc61e Bye bye Soft386, welcome Fast486, courtesy Aleksandar Andrejevic.
[NTVDM]: Define by default NEW_EMULATOR, i.e. use Fast486 instead of softx86.

svn path=/branches/ntvdm/; revision=60703
2013-10-19 16:55:51 +00:00
Aleksandar Andrejevic 9b02129308 [SOFT386]
Implement extended conditional jumps.


svn path=/branches/ntvdm/; revision=60699
2013-10-19 00:35:06 +00:00
Aleksandar Andrejevic 2095b2a844 [SOFT386]
Number the opcodes in the TODO list.


svn path=/branches/ntvdm/; revision=60698
2013-10-19 00:19:57 +00:00
Aleksandar Andrejevic 0e8be812b0 [SOFT386]
Implement the hardware interrupt system.
Modify Soft386Interrupt to assume hardware interrupts, because
software interrupts from outside the emulator may cause race conditions.


svn path=/branches/ntvdm/; revision=60696
2013-10-18 22:50:00 +00:00
Aleksandar Andrejevic 3041ad0330 [SOFT386]
Fix previous fix.


svn path=/branches/ntvdm/; revision=60695
2013-10-18 22:01:35 +00:00
Aleksandar Andrejevic fb5036618e [SOFT386]
Fix typecasts to make sure the value is sign-extended.


svn path=/branches/ntvdm/; revision=60694
2013-10-18 21:45:10 +00:00
Amine Khaldi 25445ea35f * Sync up to trunk head (r60691).
svn path=/branches/ntvdm/; revision=60692
2013-10-17 11:19:05 +00:00
Aleksandar Andrejevic 6bbc6fef9a [SOFT386]
Allow the DS segment to overriden in LODS, MOVS and CMPS.


svn path=/branches/ntvdm/; revision=60689
2013-10-16 03:44:06 +00:00
Aleksandar Andrejevic 40ed113494 [SOFT386]
Implement the far absolute indirect JMP/CALL instructions in group 0xFF.


svn path=/branches/ntvdm/; revision=60688
2013-10-16 03:14:12 +00:00
Aleksandar Andrejevic 489dfb314e [SOFT386]
Fix bugs in SF calculation.


svn path=/branches/ntvdm/; revision=60687
2013-10-16 02:22:40 +00:00
Aleksandar Andrejevic 1df88c9d1d [SOFT386]
Implement the near absolute indirect JMP/CALL in opcode group 0xFF.


svn path=/branches/ntvdm/; revision=60686
2013-10-16 01:44:39 +00:00
Aleksandar Andrejevic 4b14d9a672 [SOFT386]
Start implementing call gate support.
Implement the direct far call opcode (0x9A).


svn path=/branches/ntvdm/; revision=60685
2013-10-16 00:41:24 +00:00
Aleksandar Andrejevic 2f4594cf30 [SOFT386]
Implement the PUSH instruction in opcode group 0xFF.


svn path=/branches/ntvdm/; revision=60681
2013-10-15 19:03:40 +00:00
Aleksandar Andrejevic 151db5ddd0 [SOFT386]
Implement far returns (both versions in Soft386OpcodeRetFar).


svn path=/branches/ntvdm/; revision=60680
2013-10-15 18:54:11 +00:00
Aleksandar Andrejevic 8d2a19ae5d [SOFT386]
Implement far jumps.


svn path=/branches/ntvdm/; revision=60679
2013-10-15 17:27:23 +00:00
Aleksandar Andrejevic 642b52c4e1 [SOFT386]
Halfplement REPZ/REPNZ for CMPS and SCAS.


svn path=/branches/ntvdm/; revision=60658
2013-10-13 23:59:52 +00:00
Aleksandar Andrejevic 4ad8a401ef [SOFT386]
Implement the REP prefix for MOVS.
Fix the REP prefix in INS, OUTS and STOS to simulate the DI
wrap-around even if DF is set.


svn path=/branches/ntvdm/; revision=60645
2013-10-13 21:15:01 +00:00
Aleksandar Andrejevic c425bbc689 [SOFT386]
Implement Soft386Interrupt.
[NTVDM]
Implement EmulatorInterrupt and EmulatorExternalInterrupt for NEW_EMULATOR.


svn path=/branches/ntvdm/; revision=60628
2013-10-12 13:58:34 +00:00
Aleksandar Andrejevic a2e0e03ee6 [SOFT386]
- Fix calculation of the AF flag in opcode groups 0xFE and 0xFF (INC/DEC).
- Fix a bug in the REP prefix by simulating the wrap-around of DI which
  can occur when the current address size is 16-bit.
- Exception error codes are only pushed on the stack in protected mode.


svn path=/branches/ntvdm/; revision=60625
2013-10-11 23:45:42 +00:00
Aleksandar Andrejevic 8dff09c37a [SOFT386]
Improve the performance of Soft386CalculateParity.


svn path=/branches/ntvdm/; revision=60621
2013-10-11 20:54:46 +00:00
Aleksandar Andrejevic da5b8fc439 [SOFT386]
Fix prefix handling.


svn path=/branches/ntvdm/; revision=60620
2013-10-11 20:48:19 +00:00
Aleksandar Andrejevic 47390630ed [SOFT386]
Fix a bad call to RtlFillMemory.


svn path=/branches/ntvdm/; revision=60618
2013-10-11 19:24:58 +00:00
Aleksandar Andrejevic 37059f6dfc [SOFT386]
Fix incorrect (reverse) handling of the DF flag.


svn path=/branches/ntvdm/; revision=60617
2013-10-11 19:02:06 +00:00
Aleksandar Andrejevic caf9a0a671 [SOFT386]
Implement the REP prefix for OUTS, LODS and STOS.


svn path=/branches/ntvdm/; revision=60616
2013-10-11 18:34:31 +00:00
Aleksandar Andrejevic 20486fd1b7 [SOFT386]
Clear the memory block before it's used.


svn path=/branches/ntvdm/; revision=60612
2013-10-11 16:31:35 +00:00
Aleksandar Andrejevic 800969b126 [SOFT386]
Fix a bug in Soft386ExceptionWithErrorCode. The instruction pointer exceptions can
return to should point to the instruction that caused the exception.


svn path=/branches/ntvdm/; revision=60603
2013-10-11 12:24:05 +00:00
Aleksandar Andrejevic b22da55f8f [SOFT386]
Implement the REP prefix for the INS instruction.


svn path=/branches/ntvdm/; revision=60600
2013-10-10 19:01:41 +00:00
Aleksandar Andrejevic aef0bf1635 [SOFT386]
Implement an API for external segment modification.
[NTVDM]
Implement EmulatorSetRegister for NEW_EMULATOR.


svn path=/branches/ntvdm/; revision=60591
2013-10-09 21:48:52 +00:00
Aleksandar Andrejevic e9829f1830 [SOFT386]
Fix the carry flag in the SAR instruction.


svn path=/branches/ntvdm/; revision=60589
2013-10-09 19:49:41 +00:00
Aleksandar Andrejevic 10523b910e [SOFT386]
Don't single-step on a prefix. Single-step should execute one whole instruction.


svn path=/branches/ntvdm/; revision=60588
2013-10-09 19:11:42 +00:00
Aleksandar Andrejevic 182d7c8725 [SOFT386]
Fix more prefix handling code.
Implement the XLAT instruction.


svn path=/branches/ntvdm/; revision=60586
2013-10-09 00:36:37 +00:00
Aleksandar Andrejevic 9339e12e69 [SOFT386]
Fix prefix handling.


svn path=/branches/ntvdm/; revision=60585
2013-10-08 23:03:56 +00:00
Aleksandar Andrejevic 7078f183fb [SOFT386]
Fix a bug in the CMP instruction.
Implement the SBB instruction.


svn path=/branches/ntvdm/; revision=60584
2013-10-08 22:27:48 +00:00
Aleksandar Andrejevic f25d1a9f2a [SOFT386]
Implement opcode group 0xF7.


svn path=/branches/ntvdm/; revision=60582
2013-10-07 20:38:01 +00:00