Commit graph

263 commits

Author SHA1 Message Date
Aleksandar Andrejevic e2dbefc310 Sync with trunk.
svn path=/branches/ntvdm/; revision=62849
2014-04-21 01:45:58 +00:00
Aleksandar Andrejevic 931a83808f [FAST486]
The FPU function number is actually just the REG component of a mod-reg-r/m byte.


svn path=/branches/ntvdm/; revision=62346
2014-02-27 06:11:05 +00:00
Aleksandar Andrejevic 2d9fbc6954 [FAST486]
Fix the previous commit. FPU_CHECK should be called after the fetch.


svn path=/branches/ntvdm/; revision=62345
2014-02-27 03:57:20 +00:00
Aleksandar Andrejevic 935289b5bc [FAST486]
All of the FPU opcodes fetch another byte which is the function number.
This is done by the CPU and it occurs even if there is no FPU attached.


svn path=/branches/ntvdm/; revision=62344
2014-02-27 03:54:43 +00:00
Aleksandar Andrejevic c3e55a625c [FAST486]
Actually, we should return FALSE if any exception occurred...


svn path=/branches/ntvdm/; revision=62325
2014-02-25 00:26:00 +00:00
Aleksandar Andrejevic 8abb2bdad6 [FAST486]
Return TRUE if nothing unexpected occurred.


svn path=/branches/ntvdm/; revision=62324
2014-02-25 00:02:54 +00:00
Aleksandar Andrejevic e61c05c35c [FAST486]
Add missing returns after calls to Fast486Exception.


svn path=/branches/ntvdm/; revision=62316
2014-02-24 03:53:02 +00:00
Hermès Bélusca-Maïto ec52f30bc5 [FAST486]
- Fix return values of Fast486OpcodeSahf and Fast486OpcodeLahf handlers.
- [TheFlash], can you please see what we should return after calling Fast486ExceptionWithErrorCode in Fast486OpcodePopFlags ?

svn path=/branches/ntvdm/; revision=62313
2014-02-23 21:02:02 +00:00
Amine Khaldi 121bde3b83 * Sync up to trunk HEAD (r62286).
svn path=/branches/ntvdm/; revision=62287
2014-02-22 10:50:51 +00:00
Aleksandar Andrejevic 0b434e7c6c [FAST486]
Add a macro ALIGNMENT_CHECK that checks for unaligned pointers and generates an exception.


svn path=/branches/ntvdm/; revision=62279
2014-02-21 01:29:13 +00:00
Aleksandar Andrejevic 011259b78f [FAST486]
Update the AC flag in the POPF instruction.


svn path=/branches/ntvdm/; revision=62278
2014-02-21 01:15:03 +00:00
Aleksandar Andrejevic b9dd7fc5fc [FAST486]
Enable the Alignment Check flag. Apparently the 486 supports it.


svn path=/branches/ntvdm/; revision=62277
2014-02-21 01:05:47 +00:00
Hermès Bélusca-Maïto a4f4c415ac [FAST486]
- When pushing 16-bit value, check only low word of ESP (i.e. SP).
- Don't forget to clear high word of EIP, for the Jump instruction of group 4 (0xFF).

svn path=/branches/ntvdm/; revision=62258
2014-02-19 20:24:53 +00:00
Hermès Bélusca-Maïto 87ac13a950 [FAST486]: Hardcoded_values--;
svn path=/branches/ntvdm/; revision=62256
2014-02-19 19:27:05 +00:00
Hermès Bélusca-Maïto 852cd2db79 [FAST486]: Fix argument type.
svn path=/branches/ntvdm/; revision=62255
2014-02-19 19:23:36 +00:00
Hermès Bélusca-Maïto 5380113016 Sync with trunk rev.61910 to get latest improvements and bugfixes.
svn path=/branches/ntvdm/; revision=61911
2014-02-01 22:56:13 +00:00
Hermès Bélusca-Maïto 3224e67cfc Sync to trunk revision 61757.
svn path=/branches/ntvdm/; revision=61758
2014-01-22 22:56:41 +00:00
Aleksandar Andrejevic 6e741d3856 [FAST486]
Implement the LAR instruction.


svn path=/branches/ntvdm/; revision=61650
2014-01-17 03:15:27 +00:00
Hermès Bélusca-Maïto 49ab546ac3 Sync up with trunk r61578.
svn path=/branches/ntvdm/; revision=61579
2014-01-11 00:00:10 +00:00
Aleksandar Andrejevic d07be4e31b [FAST486]: Fix a comment.
svn path=/branches/ntvdm/; revision=61310
2013-12-21 03:50:19 +00:00
Aleksandar Andrejevic 3dd500ab28 [FAST486]
Implement the LSL instruction.
Remove instructions that don't exist on a 486 from the TODO list.


svn path=/branches/ntvdm/; revision=61309
2013-12-21 03:48:46 +00:00
Aleksandar Andrejevic f8861a562a [FAST486]
Remove the waiting code for the HLT instruction until I figure out how to do it properly.


svn path=/branches/ntvdm/; revision=61276
2013-12-15 05:08:57 +00:00
Aleksandar Andrejevic ec32b3ef34 [FAST486]
Fix the calculation of PageLength for the last page.


svn path=/branches/ntvdm/; revision=61275
2013-12-15 05:02:59 +00:00
Aleksandar Andrejevic 4c80791d47 [FAST486]
Fix linear memory access when paging is enabled.


svn path=/branches/ntvdm/; revision=61274
2013-12-15 04:15:03 +00:00
Aleksandar Andrejevic efcf73c467 [FAST486]
The LDT can be loaded with a NULL descriptor. That invalidates the LDT but doesn't cause
any exception.


svn path=/branches/ntvdm/; revision=61269
2013-12-14 02:30:42 +00:00
Aleksandar Andrejevic 18b844dffa [FAST486]
Fix the emulation of the Local Descriptor Table.


svn path=/branches/ntvdm/; revision=61268
2013-12-14 02:13:01 +00:00
Aleksandar Andrejevic 5303c91efa [FAST486]
Implement the extended opcode group 0x0F, 0x00 (SLDT, STR, LLDT, LTR, VERR, VERW).


svn path=/branches/ntvdm/; revision=61264
2013-12-13 03:32:41 +00:00
Hermès Bélusca-Maïto a2bd742ecd [FAST486]
- Call Fast486GetCurrentPrivLevel only when needed.
- Fix a type.

svn path=/branches/ntvdm/; revision=61211
2013-12-03 23:51:51 +00:00
Aleksandar Andrejevic 978c08c15c [FAST486]
Implement the BOUND instruction.


svn path=/branches/ntvdm/; revision=61205
2013-12-03 01:30:15 +00:00
Aleksandar Andrejevic 2064d10bad [FAST486]
Check for division by zero, and generate the appropriate exception.


svn path=/branches/ntvdm/; revision=61204
2013-12-03 00:56:47 +00:00
Aleksandar Andrejevic e7a6deb93f [FAST486]
The current "fast" method used in MOVS gives incorrect results. It has been temporarily
replaced with a slow method that works correctly.
The string functions do nothing when CX is 0 on entry, fix CMPS and SCAS.


svn path=/branches/ntvdm/; revision=61203
2013-12-03 00:12:55 +00:00
Aleksandar Andrejevic 03ecfdff3f [FAST486]
Fix MOVS and STOS when DF = 1. The starting position in the block was off by 1.


svn path=/branches/ntvdm/; revision=61163
2013-12-01 03:16:49 +00:00
Aleksandar Andrejevic ba237b0251 [FAST486]
Revert r61158, and fix the prefix issue correctly, but resetting the flags
again after the call to Fast486InterruptInternal.


svn path=/branches/ntvdm/; revision=61160
2013-11-30 23:45:59 +00:00
Aleksandar Andrejevic 7393337fcf [FAST486]
Use the size of CS, and not SS, in Fast486OpcodePopReg.


svn path=/branches/ntvdm/; revision=61159
2013-11-30 23:14:54 +00:00
Aleksandar Andrejevic 2cbcfd75c5 [FAST486]
Move the prefix reset below the interrupt check, because Fast486InterruptInternal
might set OPSIZE in some circumstances.


svn path=/branches/ntvdm/; revision=61158
2013-11-30 22:17:18 +00:00
Aleksandar Andrejevic 9c6b9c9bab [FAST486]
FPU instructions never generate #UD. If CR0.EM is set, they generate #NM.
If there is no FPU and CR0.EM is cleared, they do nothing.
Add a helper macro FPU_ST for accessing FPU registers.
Add a compile-time option to disable the FPU.


svn path=/branches/ntvdm/; revision=61150
2013-11-30 02:03:51 +00:00
Aleksandar Andrejevic 81c27b5b19 [FAST486]
Start implementing the FPU. Stubplement the FPU opcode handlers.


svn path=/branches/ntvdm/; revision=61141
2013-11-29 03:00:59 +00:00
Aleksandar Andrejevic d358641f7c [FAST486]
Fix the order of operations.


svn path=/branches/ntvdm/; revision=61106
2013-11-26 18:11:53 +00:00
Aleksandar Andrejevic 556bace69f [FAST486]
Complete the previous commit with a fix for Fast486WriteLinearMemory too.


svn path=/branches/ntvdm/; revision=61105
2013-11-26 17:56:18 +00:00
Aleksandar Andrejevic f45361126f [FAST486]
Handle the case when the last page is also the first page in Fast486ReadLinearMemory ( when paging is enabled).


svn path=/branches/ntvdm/; revision=61104
2013-11-26 17:55:07 +00:00
Aleksandar Andrejevic 8e356f7a95 [FAST486]
The 486 doesn't have AC, VIF, VIP or ID.
Fix and simplify POPF.
[NTVDM]
Fix the count in the XMS copy function (INT 15h, AH = 87h).


svn path=/branches/ntvdm/; revision=61082
2013-11-23 01:34:03 +00:00
Aleksandar Andrejevic 9a8c7e2a04 [FAST486]
Fix CF calculation in SHRD/SHLD.


svn path=/branches/ntvdm/; revision=61070
2013-11-22 02:47:48 +00:00
Aleksandar Andrejevic 24954c9d07 [FAST486]
DAA, DAS: Update the flags.
AAA, AAS: Subtract from AX instead of AL. The specification says AL, but
so far in all known CPUs and emulators, AX is subtracted.
AAD: Clear AH.


svn path=/branches/ntvdm/; revision=61069
2013-11-22 02:02:05 +00:00
Aleksandar Andrejevic 363543b325 [FAST486]
Fix the calculation of AF in ADC and the calculation of AF and CF in SBB.


svn path=/branches/ntvdm/; revision=61068
2013-11-22 01:22:00 +00:00
Aleksandar Andrejevic c0d571c92a [FAST486]
In the string functions, use ADSIZE and not OPSIZE.
In SCAS and CMPS, fix the "(1 << 32) - 1" bug.


svn path=/branches/ntvdm/; revision=61067
2013-11-22 00:46:28 +00:00
Aleksandar Andrejevic 9c999826e1 [FAST486]
Put the conditional expression in parenthesis so that the addition happens after it.


svn path=/branches/ntvdm/; revision=61063
2013-11-21 04:07:15 +00:00
Aleksandar Andrejevic 37b16fec31 [FAST486]
Fix a bug in Fast486LoadSegment.


svn path=/branches/ntvdm/; revision=61062
2013-11-21 03:18:34 +00:00
Aleksandar Andrejevic f90a1db2b7 [FAST486]
The top half of EIP is cleared after a 16-bit jump.


svn path=/branches/ntvdm/; revision=61058
2013-11-20 14:21:47 +00:00
Aleksandar Andrejevic 459e3a6f48 [FAST486]
Read the LDT instead of the GDT when the table indicator is set.


svn path=/branches/ntvdm/; revision=61057
2013-11-20 10:48:26 +00:00
Aleksandar Andrejevic e2fb91925e [FAST486]
Implement privilege checks when loading the code selector.


svn path=/branches/ntvdm/; revision=61056
2013-11-20 10:43:12 +00:00