Commit graph

140 commits

Author SHA1 Message Date
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
Aleksandar Andrejevic 95b0bb7b60 [SOFT386]
Implement opcode group 0xF6.


svn path=/branches/ntvdm/; revision=60568
2013-10-06 23:57:41 +00:00
Aleksandar Andrejevic f10f82d938 [SOFT386]
Start implementing extended opcodes.


svn path=/branches/ntvdm/; revision=60562
2013-10-06 15:22:52 +00:00
Aleksandar Andrejevic 15a8cc4515 [SOFT386]
Set the opcode handler for the INS and OUTS instructions to be
Soft386OpcodeIns and Soft386OpcodeOuts, respectively.


svn path=/branches/ntvdm/; revision=60543
2013-10-05 20:12:08 +00:00
Aleksandar Andrejevic fbcc4ad158 [SOFT386]
Halfplement INS and OUTS.


svn path=/branches/ntvdm/; revision=60540
2013-10-05 20:06:19 +00:00
Aleksandar Andrejevic 3593b8c8ef [SOFT386]
Fix bugs in STOS and LODS (only one register is incremented).
Implement CMPS and SCAS.


svn path=/branches/ntvdm/; revision=60525
2013-10-04 19:51:11 +00:00
Aleksandar Andrejevic c190ca817c [SOFT386]
Halfplement MOVS, STOS and LODS.
Stubplement CMPS and SCAS.


svn path=/branches/ntvdm/; revision=60515
2013-10-03 20:56:36 +00:00
Aleksandar Andrejevic c2e98bca7f [SOFT386]
Implement the (undocumented) opcode SALC.


svn path=/branches/ntvdm/; revision=60492
2013-10-01 15:02:07 +00:00
Aleksandar Andrejevic 49616f8975 [SOFT386]
Halfplement group 0xFF (Only INC/DEC).


svn path=/branches/ntvdm/; revision=60487
2013-10-01 01:31:36 +00:00
Aleksandar Andrejevic 17a32f3b2a [SOFT386]
Change the license of Soft386 to GPLv2. The previous license was also
GPLv2, but it had a runtime linking exception. The new license is the
original GPLv2 with no exceptions.


svn path=/branches/ntvdm/; revision=60485
2013-09-30 22:01:38 +00:00
Aleksandar Andrejevic 1294b156ea [SOFT386]
Fix previous fix.


svn path=/branches/ntvdm/; revision=60468
2013-09-30 03:10:38 +00:00
Aleksandar Andrejevic d4d6e6eca9 [SOFT386]
Fix limit check.


svn path=/branches/ntvdm/; revision=60467
2013-09-30 03:05:08 +00:00
Aleksandar Andrejevic 6bde6a89b7 [SOFT386]
Fix previous fix.


svn path=/branches/ntvdm/; revision=60466
2013-09-30 02:28:17 +00:00
Aleksandar Andrejevic 462be21fd0 [SOFT386]
Remove whitespace from empty line.
Fix addressing bug.


svn path=/branches/ntvdm/; revision=60465
2013-09-30 02:06:55 +00:00
Aleksandar Andrejevic 79355ae971 [SOFT386]
Fix prefix handling.


svn path=/branches/ntvdm/; revision=60464
2013-09-30 00:27:56 +00:00
Aleksandar Andrejevic b9a1962978 [SOFT386]
Fix the LOOP instruction. LOOP should loop while ECX is not zero, not otherwise.


svn path=/branches/ntvdm/; revision=60463
2013-09-30 00:02:53 +00:00
Aleksandar Andrejevic ed24b5ee8e [SOFT386]
Fetching the immediate operand once is sufficient.


svn path=/branches/ntvdm/; revision=60462
2013-09-29 23:45:06 +00:00
Aleksandar Andrejevic 747864f105 [SOFT386]
Move the code for ADD/OR/ADC/SBB/AND/SUB/XOR/CMP to Soft386ArithmeticOperation,
and use that function to implement groups 0x80, 0x81, 0x82 and 0x83.


svn path=/branches/ntvdm/; revision=60461
2013-09-29 23:38:31 +00:00