Initial commit (a clone of the jsmachines project as of v1.15.3)

This commit is contained in:
jeffpar 2014-09-27 14:52:57 -07:00
commit a5e3e6a59d
714 changed files with 130602 additions and 0 deletions

View file

@ -0,0 +1,42 @@
80286 REP MOVS and REP INS Restartability
---
The repeated string instructions on 80286 were made restartable after protection violations on the (B-2/B-3) and
later 80286 steppings. Should a protection violation occur when using these instructions in protected mode, it is
possible for the Exception 13 (General Protection Violation) handler to adjust the SI register and/or the DI register
and/or the CX register to allow proper restart of these instructions after it has corrected the protection violation.
[Note that when an external interrupt {from the INTR pin) interrupts a repeated string instruction, the repeated
string instructions on any stepping of 80286 all restart properly just by returning from the interrupt procedure.]
When a protection violation occurs, the exact rules for the exception 13 handler to use when restarting the repeated
string instructions were given in the Intel technical memo "iAPX 286 LOADALL Instruction." However, there is an
errata in the 80286 (B-2/B-3) and (C-2) steppings which prevent the restart rules given in "iAPX 286 LOADALL Instruction"
from properly restarting the REP MOVS and REP INS and REP OUTS instructions after a protection violation under all
conditions. Specifically, there is an inconsistency if a violation occurs on the last word or byte to be transferred by
REP MOVS or REP INS instructions, or a if an IOPL violation occurs from the REP OUTS instruction when the CX register
is initially 0001H.
Case of REP MOVSW or REP MOVSB:
> If the destination of the last word (REP MOVSW) or byte (REP MOVSB) to be moved causes a protection violation,
then the value in the CX register is 0000H. However, for the restart rule covering REP MOVS destination violations
to work properly at all times, the value in CX under this condition should be 0ffffH.
Case of REP INSW or REP INSB:
> If the memory destination of the last word (REP INSW) or byte (REP INSB) to be inputted causes a protection-violation,
then the value in the CX register is 0000H. However, for the restart rule covering REP INS destination violations to work
properly at all times, the value in CX under this condition should be 0ffffH.
Case of REP OUTSW or REP OUTSB:
> If the CX register is initially 0001H and a REP OUTSW or REP OUTSB causes an IOPL violation, then the value in the CX
register will be 0000H. However, for the rule covering REP OUTS restartability after IOPL violations to work properly
at all times, the value in CX (after the CPU detects the violation) under this condition should be 0ffffH.
The above three problems are being corrected in all future steppings of the 80286. When the corrections are made, the CX
register will hold 0ffffH when the CPU detects a violation due to the conditions above. Note that even when REP MOVS and
REP INS restartability is corrected, CX will correctly continue to be 0000H when these instructions complete without generating
a protection violation.
[This information is from an Intel document titled "80286 REP MOVS and REP INS Restartability, 15 October 1984"]