home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 25 / CD_ASCQ_25_1095.iso / dos / prg / 4p_v311 / 80x86.cpu < prev    next >
Text File  |  1995-08-27  |  67KB  |  1,139 lines

  1.  
  2.  This file includes new knowledge about many Intel processors and their clones.
  3.  If you're writing system software, then you should read this file.  Thank you!
  4.  
  5.    (C)  Copyright    Christian Ludloff
  6.    (M)  07/1994      Ludwig-Kühn-Straße 15
  7.    (P)  01.09.1995   D-09123 CHEMNITZ, Germany
  8.    (V)  3.1.1        voice  +49-(0)371-242091
  9.    (?)  80x86.CPU    fax    +49-(0)371-242091
  10.                      eMail  cl@box.in-chemnitz.de
  11.                      eMail  cl@vgasoft.com
  12.                      Fido   2:2426/2240.14
  13.  
  14.    This file is mine! And remember: What's mine is mine!
  15.  
  16.  Please, send updates or corrections directly to me and do not modify this file
  17.  yourself. I will mention your name at the end of the file when adding your new
  18.  knowledge. That's the only way to fight against xxx versions.       Thank you!
  19.  
  20.  ==============================================================================
  21.  
  22.  The new flags in the EFLAGS register
  23.  ====================================
  24.  
  25.  ------------------------------------------------------------------------------
  26.  bit     description
  27.  ------------------------------------------------------------------------------
  28.  21      CPUID instruction support flag
  29.            If you can  use this bit (set/reset), then your CPU supports the new
  30.            CPUID instruction. So you must not install a handler for the invalid
  31.            opcode exception before you execute this new processor instruction.
  32.  20      VIP - Virtual Interrupt Pending flag
  33.  19      VIF - Virtual Interrupt Flag
  34.            These two bits are used by the virtual interrupt feature of the V86-
  35.            enhanced CPUs from Intel. You can use the CPUID instruction to check
  36.            your processor for the support of this feature.
  37.  ------------------------------------------------------------------------------
  38.  
  39.  
  40.  
  41.  The new Control Register CR4
  42.  ============================
  43.  
  44.  This register contains some flag bits  to enable or disable  the new features.
  45.  You will find it only on iPentium processors  and on some newer Intel CPUs. To
  46.  find out, whether your CPU  contains the CR4 or not, you should  use the CPUID
  47.  instruction (feature flags).  If your processor supports  the enhanced virtual
  48.  mode, then it will support at least bit 0 and 1 of CR4 (as the newer i486 do).
  49.  Don't try to set bits, which are not supported by your CR4 register!
  50.  
  51.  ------------------------------------------------------------------------------
  52.  bit     description
  53.  ------------------------------------------------------------------------------
  54.  31..7   reserved
  55.  6       MCE - enable machine check exception (new; exception #12h)
  56.            1=enable the machine check exception
  57.            0=disable the machine check exception (like a i486)
  58.  5       reserved (for enabling the 36bit-addressing and the 2MB-paging)
  59.  4       PSE - enable page size extension
  60.            1=enable the 4MB pages
  61.            0=disable the 4MB pages (like a i486)
  62.  3       DE - enable debugging extension
  63.            1=enable the I/O breakpoints (see DR7.R/W) and access to new DR4/DR5
  64.            0=disable the I/O breakpoints (like a i486)
  65.  2       TSD - enable read time stamp counter instruction
  66.            1=enable RDTSC instruction for CPL=0 only
  67.            0=enable RDTSC instruction for all CPLs
  68.  1       PVI - enable protected mode virtual interrupts
  69.            1=enable virtual interrupts in protected mode
  70.            0=disable virtual interrupts in protected mode (like a i386)
  71.  0       VME - enable virtual mode virtual interrupts
  72.            1=enable virtual interrupts in virtual mode
  73.            0=disable virtual interrupts in virtual mode (like a i386)
  74.  ------------------------------------------------------------------------------
  75.  
  76.  
  77.  
  78.  The new Probe Mode Control Register
  79.  ===================================
  80.  
  81.  This register is visible through the iPentium ICE (In-Circuit-Emulator) only.
  82.  
  83.  ------------------------------------------------------------------------------
  84.  bit     description
  85.  ------------------------------------------------------------------------------
  86.  31      SMM (SMM active, read only, similar to former DR6.bit12)
  87.            1=SMM is active
  88.            0=SMM is not active
  89.  30..7   reserved
  90.  2       PB1 (performance monitoring or breakpoint monitoring, see MSR #11h.25)
  91.            1=pin PM1/BP1 monitors breakpoint #1 matches
  92.            0=pin PM1/BP1 monitors performance monitoring counter #1
  93.  1       PB0 (performance monitoring or breakpoint monitoring, see MSR #11h.9)
  94.            1=pin PM0/BP0 monitors breakpoint #0 matches
  95.            0=pin PM0/BP0 monitors performance monitoring counter #0
  96.  0       ICEBP (ICEBP enabled, similar to former DR7.bit12)
  97.            1=every debug exception activates PRDY and enters the Probe Mode
  98.            0=normal behaviour
  99.  ------------------------------------------------------------------------------
  100.  
  101.  
  102.  
  103.  The new R/W-bits in the Debug Register DR7
  104.  ==========================================
  105.  
  106.  R/W=1-0 - set a breakpoint for I/O accesses
  107.  (new; but if CR4.DE=0, then reserved like on i386)
  108.  
  109.  
  110.  
  111.  The GD-bit in the Debug Register DR7
  112.  ====================================
  113.  
  114.  The DR7 contains the GD bit too (bit13). This bit is supported on the i386 and
  115.  the i486 too. If it is set to 1, then any access (read and write) to any Debug
  116.  register causes the exception #01h. The exception handler is called with GD=0,
  117.  so that it can access the Debug Registers. This former undocumented bit can be
  118.  used to crash almost all modern debuggers. But remember: If your own code trys
  119.  to set the GD bit to 1 and it is always set to 1, then your access to DR7 will
  120.  cause the exception #01h too! So I don't recommend you to use this bit, if you
  121.  want your software to run as stable and to be as compatible, as possible!
  122.  There's only one way, to clear the GD bit and you must be in real mode for the
  123.  following routine: install your own IDT by loading a new value to the IDTR and
  124.  create a handler for the exception #01h, which leaves the GD bit in DR7 set to
  125.  0 and which returns directly to the code, to re-install the old IDTR value. As
  126.  you can see, the GD-clearing is not possible (for CPL=3 code) in virtual mode,
  127.  because you have to install an 'in-complete' exception #01h handler.
  128.  
  129.  
  130.  
  131.  The new implemented model specific registers MSR #00h-13h
  132.  =========================================================
  133.  
  134.  Only the iPentium processor contains these new registers. They are 64 bit wide
  135.  and you must use EDX:EAX to handle them.  You will find some MSRs on the newer
  136.  IBM 386/486SLC processors too.  On the new iP6 processor the MSRs are included
  137.  too, but Intel may have changed their functions. The performance monitoring is
  138.  now possible for more than two counters at the same time and more events.
  139.  
  140.  Here Intel  implemented the  Machine Check Exception Registers,  the new added
  141.  Test Registers (old TR0-7 don't exist any longer!), the Time Stamp Counter and
  142.  the two Performance Monitoring Counters #0 and #1 with the Counter Control and
  143.  Event Selection Register.
  144.  
  145.  ------------------------------------------------------------------------------
  146.  MSR     description (Intel iPentium)
  147.  ------------------------------------------------------------------------------
  148.  00h     MCA - machine check exception address register (read only)
  149.            This register contains the physical address  after a data parity er-
  150.            ror occured on the CPU bus.  This may end up in a  machine check ex-
  151.            ception (#12h), when you enable it via CR4.MCE.
  152.          bit63..0  ADDRESS (64 bit wide)
  153.  ------------------------------------------------------------------------------
  154.  01h     MCT - machine check exception type register (read only)
  155.            Describes the type of the bus cycle if a machine check exception oc-
  156.            cured on your processor's bus.
  157.          bit63..6  reserved
  158.          bit5      THERR       (1=thermal error,     0=no thermal error   )
  159.                      This bit is set to one, if the cooling fan is removed. The
  160.                      THERR also indicates, if the cooling fan fails (fan state)
  161.                      and the processor is set to 1:1 clock speed ratio (to save
  162.                      power). The CHK bit will not be affected by the THERR bit!
  163.          bit4      LOCK-state  (1=LOCK active,       0=LOCK inactive      )
  164.          bit3      M/IO-state  (1=memory access,     0=I/O access         )
  165.          bit2      D/C-state   (1=data access,       0=code access        )
  166.          bit1      W/R-state   (1=write,             0=read               )
  167.          bit0      CHK-state   (1=MSR #00/01h valid, 0=MSR #00/01h invalid)
  168.  ------------------------------------------------------------------------------
  169.  02h     TR1 - parity reversal test register ('write only')
  170.          bit63..14 reserved
  171.          bit13     MC   microcode (reverse parity on read)
  172.          bit12     DTD  data TLB data
  173.          bit11     DTT  data TLB tag
  174.          bit10     DD   data cache data (use byte writes for individual access)
  175.          bit9      DT   data cache tag
  176.          bit8      ITD  code TLB data
  177.          bit7      ITT  code TLB tag
  178.          bit6      ID3  code cache data odd bits (255,253..131,129)
  179.          bit5      ID2  code cache data even bits (254,252..130,128)
  180.          bit4      ID1  code cache data odd bits (127,125..3,1)
  181.          bit3      ID0  code cache data even bits (126,124..2,0)
  182.          bit2      IT   code (instruction) cache tag
  183.          bit1      NS   no shutdown
  184.                           1=assert IERR# only on parity error
  185.                           0=assert IERR# and shutdown on parity error
  186.          bit0      PES  parity error summary (read&write, set on any par. err.)
  187.            Writing a one  into bits12..2  reverses the sense of  the parity ge-
  188.            neration for any write  into the corresponding array (for normal and
  189.            for testability accesses).  For the microcode bad parity may be for-
  190.            ced on a read by setting TR1.MC to one.
  191.  ------------------------------------------------------------------------------
  192.  03h     reserved and never implemented by Intel (don't try to read it)
  193.  ------------------------------------------------------------------------------
  194.  04h     TR2 - instruction cache end bit test register (read and write)
  195.          bit63..4  reserved
  196.          bit3..0   END BITS
  197.                      These bits indicate  instruction boundaries.  If the given
  198.                      byte is the last byte in an instruction, the corresponding
  199.                      end bit is set to one.  This mechanism  aids the decode of
  200.                      two variable length  instructions  per clock  by providing
  201.                      information on where the boundary between instructions is.
  202.  ------------------------------------------------------------------------------
  203.  05h     TR3 - cache data test register (read and write)
  204.          bit63..32 reserved
  205.          bit31..0  DATA
  206.                      This is  where the data is held on its way into  or out of
  207.                      the internal L1-cache.
  208.  ------------------------------------------------------------------------------
  209.  06h     TR4 - cache tag test register (read and write)
  210.          bit63..32 reserved
  211.          bit31..8  TAG
  212.          bit7..3   reserved
  213.          bit2      LRU
  214.                      1=points to way #1          0=points to way #0
  215.          bit1..0   VALID
  216.                    if TR5.CD=0 (code cache)
  217.                      x-1=cache line valid        x-0=cache line invalid
  218.                    if TR5.CD=1 (data cache)
  219.                      1-1=cache line in M state   1-0=cache line in E state
  220.                      0-1=cache line in S state   0-0=cache line in I state
  221.  ------------------------------------------------------------------------------
  222.  07h     TR5 - cache control test register ('write only')
  223.          bit63..15 reserved
  224.          bit14     WB - selects writeback or writethrough
  225.                      1=writeback (for that particular line; data cache only)
  226.                      0=writethrough (for that particular line; both caches)
  227.          bit13     CD - selects code or data cache
  228.                      1=data cache                0=code cache
  229.          bit12     ENTRY - selects one of the two ways in the cache
  230.                      1=way #1                    0=way #0
  231.          bit11..5  SET
  232.                      0..127h - select one of the 128 sets
  233.          bit4..2   BUFFER
  234.                      0..7h - select one of the 8 portions of a cache line to be
  235.                              visible through TR3
  236.          bit1..0   CONTROL - select the operation
  237.                      1-1=flush                   1-0=testability read
  238.                      0-1=testability write       0-0=normal operation
  239.  ------------------------------------------------------------------------------
  240.  08h     TR6 - TLB command test register (read and write)
  241.          bit63..32 reserved
  242.          bit31..12 LINEAR ADDRESS
  243.          bit11     V - valid state (valid or invalid TLB entry)
  244.                      1=valid TLB-entry           0=invalid TLB-entry
  245.          bit10     D - dirty state (write access made to page; data TLB only)
  246.                      1=write access was made     0=write access was not made
  247.          bit9      U - user state (privilege level access allowed)
  248.                      1=CPL=0                     0=CPL=0..3
  249.          bit8      W - writeable state (writes allowed; data TLB only)
  250.                      1=allows writes             0=no writes, read only
  251.          bit7..3   reserved
  252.          bit2      PS - selects the page size (data TLB only)
  253.                      1=4MB pages                 0=4KB pages
  254.          bit1      CD - selects code or data TLB
  255.                      1=data TLB                  0=code TLB
  256.          bit0      OP - selects the operation
  257.                      1=TLB read                  0=TLB write
  258.  ------------------------------------------------------------------------------
  259.  09h     TR7 - TLB data test register (read and write)
  260.          bit63..32 reserved
  261.          bit31..12 PHYSICAL ADDRESS
  262.          bit11     PCD - page level cache disable bit (paging attribute PCD)
  263.          bit10     PWT - page level write through bit (paging attribute PWT)
  264.          bit9      L2 \
  265.          bit8      L1  > three LRU bits (entry to be replaced)
  266.          bit7      L0 /
  267.          bit6..5   reserved
  268.          bit4      H - hit indicator (set to 1 during testability writes)
  269.                      1=input linear address matches a valid entry
  270.                      0=input linear address don't matches a valid entry
  271.          bit3..2   ENTRY - select one of the four ways
  272.                      testability write -> way to write
  273.                      testability read  -> way that resulted in a read hit
  274.          bit1..0   reserved
  275.  ------------------------------------------------------------------------------
  276.  0Ah     reserved and not longer implemented by Intel (don't try to read it)
  277.          Because the iPentium A-step processor was supposed to include a 36bit-
  278.          addressing and 2MB-paging, there has been the TR8 too. But at the last
  279.          minute Intel has removed these features and the TR8 from the iPentium.
  280.          TR8 - TLB data test register (part II)
  281.          bit63-4   reserved
  282.          bit3-0    PHYSICAL ADDRESS (A35..A32)
  283.  ------------------------------------------------------------------------------
  284.  0Bh     TR9 - BTB tag test register (read and write)
  285.          bit63..32 reserved
  286.          bit31..6  TAG ADDRESS
  287.          bit5..2   reserved
  288.          bit1..0   HISTORY
  289.  ------------------------------------------------------------------------------
  290.  0Ch     TR10 - BTB target test register (read and write)
  291.          bit63..32 reserved
  292.          bit31..0  TARGET ADDRESS
  293.  ------------------------------------------------------------------------------
  294.  0Dh     TR11 - BTB control test register (read and write)
  295.          bit63..12 reserved
  296.          bit11..6  SET
  297.                      0..63h - select one of the 64 sets to access
  298.          bit5..4   reserved
  299.          bit3..2   ENTRY - select a way
  300.                      0..3h - select one of the four ways within the set
  301.          bit1..0   CONTROL - select the operation
  302.                      1-1=flush                   1-0=testability read
  303.                      0-1=testability write       0-0=normal operation
  304.  ------------------------------------------------------------------------------
  305.  0Eh     TR12 - new feature control register ('write only')
  306.          bit63..10 ?    reserved
  307.          bit9      ITR  interrupt priority
  308.                           1=enable I/O instruction restart feature  for the SMM
  309.                             and change the interrupt priority
  310.                           0=disable I/O instruction restart feature for the SMM
  311.                             and use the standard interrupt priority
  312.                         See Pentium Family User's Manual  volume #1 (data book)
  313.                         table 19-2 for some details. This bit should be suppor-
  314.                         ted only on the iP54C models with the new added I/O in-
  315.                         struction restart feature for the SMM.
  316.          bit8      fTR  fast tracing (see TR12.TR too)
  317.                           1=CPU generates fast branch-trace-message bus-cycles
  318.                           0=CPU don't generates fast branch-trace-message bus-
  319.                             cycles
  320.                         The fast tracing feature should exist only on such Pen-
  321.                         tium processors working with different ex- and internal
  322.                         speeds (like the new iP54C model). So the new fast mes-
  323.                         sages produce only the second bus-cycle.
  324.          bit7      ?    unknown (but used!)
  325.          bit6      AHD  auto halt disable (iP54C only)
  326.                           1=auto halt feature disabled
  327.                           0=auto halt feature enabled
  328.          bit5      ?    unknown
  329.          bit4      AD   APIC disable (iP54C B-step with integrated APIC only)
  330.                           1=internal APIC disabled
  331.                           0=internal APIC enabled
  332.                         To re-enable the APIC, a warm reset of the part must be
  333.                         performed, after clearing this bit.
  334.          bit3      CI   cache inhibit
  335.                           1=internal L1-cache disabled (L2-cache unchanged)
  336.                           0=internal L1-cache enabled (L2-cache unchanged)
  337.          bit2      SE   single pipe execution
  338.                           1=v-pipeline disabled and not used
  339.                           0=both pipelines enabled and used
  340.          bit1      TR   tracing
  341.                           1=CPU generates branch-trace-message bus-cycles for
  342.                             the external execution control
  343.                           0=CPU don't generates the branch-trace-message bus-
  344.                             cycles
  345.          bit0      NBP  no branch prediction
  346.                           1=BTB not used (then a move to CR3 disables BTB use!)
  347.                           0=BTB used to predict branches
  348.  ------------------------------------------------------------------------------
  349.  0Fh     reserved and never implemented by Intel (don't try to read it)
  350.  ------------------------------------------------------------------------------
  351.  10h     time stamp counter (read and write)
  352.            This counter counts the internal CPU clock cycles since the last re-
  353.            set. It has a capacity  of about 5850 years  when you have a 100 MHz
  354.            processor. You can read the value via the RDTSC / RDMSR instruction.
  355.          bit63..0  time stamp counter value (64 bit wide, read/write)
  356.  ------------------------------------------------------------------------------
  357.  11h     counter event selection and control register (read and write)
  358.            This register controls the two internal counters #0 and #1. They can
  359.            be programmed to count about 40 different events.
  360.          bit63..32 reserved (for two more counters in future models?)
  361.          bit31..26 reserved
  362.          bit25     external pin PM1 selection
  363.                      1=pin shows counter overflows
  364.                      0=pin shows counter increments
  365.          bit24     counter type for counter #1
  366.                      1=count clock cycles only
  367.                      0=count events
  368.          bit23     enable counting in CPL=3 for counter #1
  369.                      1=enable counting when CPL=3 ('count user software')
  370.                      0=disable counting when CPL=3
  371.          bit22     enable couning in CPL=2..0 for counter #1
  372.                      1=enable counting when CPL=2..0 ('count system overhead')
  373.                      0=disable counting when CPL=2..0
  374.          bit21..16 event type to count with counter #1 (see list below!)
  375.          bit15..10 reserved
  376.          bit 9     external pin PM0 selection
  377.                      1=pin shows counter overflows
  378.                      0=pin shows counter increments
  379.          bit8      counter type for counter #0
  380.                      1=count clock cycles only
  381.                      0=count events
  382.          bit7      enable counting in CPL=3 for counter #0
  383.                      1=enable counting when CPL=3 ('count user software')
  384.                      0=disable counting when CPL=3
  385.          bit6      enable counting in CPL=2..0 for counter #0
  386.                      1=enable counting when CPL=2..0 ('count system overhead')
  387.                      0=disable counting when CPL=2..0
  388.          bit5..0   event type to count with counter #0 (see list below!)
  389.  ------------------------------------------------------------------------------
  390.  12h     counter #0 (read and write)
  391.          bit63..40 reserved
  392.          bit39..0  counter #0 value (40 bit wide)
  393.  ------------------------------------------------------------------------------
  394.  13h     counter #1 (read and write)
  395.          bit63..40 reserved
  396.          bit39..0  counter #1 value (40 bit wide)
  397.  ------------------------------------------------------------------------------
  398.  >13h    reserved and not implemented by Intel (don't try to read them)
  399.  ------------------------------------------------------------------------------
  400.  
  401.  The IBM 386/486SLC processors include the following Model Specific Registers:
  402.  
  403.  ------------------------------------------------------------------------------
  404.  MSR     description (IBM 386/486SLC and IBM 486BL3 'Blue Lightning')
  405.  ------------------------------------------------------------------------------
  406.  1000h   processor operation register (IBM 386/486SLC)
  407.          bit63..19 reserved
  408.          bit18     low power PLA mode (IBM 486SLC only?)
  409.                      1=power down additional dynamic parts during halt-state
  410.                      0=don't power down these parts during low-power halt-state
  411.          bit17     factory read testing (IBM 486SLC only?)
  412.                      1=force all reads from ext. memory, even if cache is on
  413.                      0=don't force all reads from external memory
  414.          bit16     factory internal cache parity testing (IBM 486SLC only?)
  415.                      1=use odd parity (generates a cache parity error)
  416.                      0=use even parity (normal operation)
  417.          bit15     enable cacheability of floating point operand reads
  418.                      1=boosts performance, if an external Cyrix FPU is used
  419.                      0=normal operation (if an external Intel FPU is used!!!)
  420.          bit14     switch the ERROR input line...
  421.                      1=...to a hidden memory address strobe output line
  422.                        You can set this bit only at the first WRMSR after a CPU
  423.                        reset. Further attempts at changing the bit are ignored!
  424.                      0=...to the ERROR input pin to Intel compatible ERROR
  425.          bit13     low power halt mode (HLT instruction: stops internal clock)
  426.                      1=enable low power halt mode
  427.                      0=disable low power halt mode
  428.          bit12     wait for READY after output
  429.                      1=the processor waits until READY is active after all out-
  430.                        put instructions, before executing the next instruction
  431.                      0=don't wait for READY
  432.          bit11     cache reload status (set, when internal cache reload occurs)
  433.          bit10     internal L1-cache enable set source
  434.                      1=use MSR #1001h for the limits set
  435.                        You can set this bit only at the first WRMSR after a CPU
  436.                        reset. Further attempts at changing the bit are ignored!
  437.                      0=use external hardware line input
  438.          bit9      disable cache lock mode
  439.                      1=allows the CPU to recognize the locked read-modify-write
  440.                        cycle, but does not cache the line
  441.                      0=normal operation
  442.          bit8      reserved for unknown function or unused
  443.          bit7      enable internal L1-cache
  444.                      1=enable internal L1-cache
  445.                      0=disable internal L1-cache
  446.          bit6      disable caching for E0000h to E0FFFh (4K)
  447.                      1=disable caching (if Double Byte Character Support used)
  448.                      0=enable caching (if DBCS not used on japanes systems)
  449.          bit5      enable power interrupt PWI
  450.                      1=enable power interrupt PWI
  451.                      0=disable power interrupt PWI
  452.          bit4      enable flush snooping
  453.                      1=enable flush snooping (can be used, if bit3=0)
  454.                      0=disable flush snooping
  455.          bit3      enable snoop input
  456.                      1=enable snoop input
  457.                      0=disable snoop input
  458.          bit2      enable A20 mask
  459.                      1=line A20 disabled, unless paging is active (see CR0.PG)
  460.                      0=external control or entire address range is accessable
  461.          bit1      enable cache parity
  462.                      1=if a parity error occurs,  then the internal L1-cache is
  463.                        flushed, disabled (bit7=0), the flag is set (bit0=1) and
  464.                        cache parity is disabled (bit1=0); NMI handler is called
  465.                      0=disable cache parity
  466.          bit0      parity error occured
  467.                      1=parity error occured (even, if bit1=1 -> no action)
  468.                      0=no parity error occured (set bit0=0 to clear this flag)
  469.  ------------------------------------------------------------------------------
  470.  1001h   cache region control register (IBM 386/486SLC)
  471.          bit63-48  reserved
  472.          bit47-32  extended memory cache limit
  473.                      number of 64K blocks starting at the 1M boundary, that can
  474.                      be cached (so 0Fh means 15MB are cacheable...)
  475.          bit31-16  read only cache blocks
  476.                      each bit represents a 64K region in the 1st MB, that has a
  477.                      ROM memory (bit31=1 -> ROM at F000h...), a write into area
  478.                      marked as ROM will not be updated in cache memory
  479.          bit15-0   first 1MB cacheable
  480.                      each bit represents a 64K region in the first MB, that can
  481.                      be cached (bit15=1 -> cache F000h ... bit0=1 -> cache 0h)
  482.  ------------------------------------------------------------------------------
  483.  1002h   processor operation register 2 (not on IBM 386SLC)
  484.          bit63-30  reserved
  485.          bit29     enable external dynamic frequency shift
  486.                      1=enable external dynamic frequency shift
  487.                      0=disable external dynamic frequency shift
  488.          bit28     dynamic frequency shift ready
  489.                      1=CPU is ready for the shift (requested by hardware or by
  490.                        setting bit27=1) -> clock can be changed
  491.                      0=CPU is not ready for the shift
  492.          bit27     dynamic frequency shift request
  493.                      1=request the CPU to prepare for a clock input frq. change
  494.                      0=normal operation
  495.          bit26-24  clock mode
  496.                      000=divide incoming clock by 2 (same as i386SX)
  497.                      011=use the incoming clock; make no divide; used for doub-
  498.                          ling the internal CPU speed
  499.                      100=3:1 clock mode
  500.          bit23-0   reserved
  501.  ------------------------------------------------------------------------------
  502.  1004h   processor control register (at least IBM 486BL3)
  503.          bit63-24  reserved
  504.          bit23     OS/2 boot
  505.                      0=for DD1-hardware
  506.                      1=for DD0-hardware: for OS/2 boot
  507.          bit22     MOV CR0 decode
  508.                      0=for DD0-, DD1A-, DD1B-, DD1D-hardware
  509.                      1=for DD1C-hardware
  510.          bit21     reserved
  511.          bit20     cache low power
  512.                      0=DD0: ever, DD1: cache stays on
  513.                      1=DD1: disable cache when not in use
  514.          bit19     reserved
  515.          bit18     NOP
  516.                      0=DD0: NOP=2 cycles, DD1: NOP=3 cycles
  517.                      1=DD0: NOP=3 cycles, DD1: NOP=2 cycles
  518.          bit17     NA16 (bus pipelining for 16 bit)
  519.          bit16-5   unknown
  520.          bit4      MOVS split
  521.          bit3      power saving cache feature
  522.          bit2      reserved
  523.          bit1      enable MOV CRx decode (DD1B, DD1C: reserved)
  524.          bit0      reserved
  525.  ------------------------------------------------------------------------------
  526.  
  527.  Some MSRs could exist on every ≥386 CPU.  They are used by the vendor during a
  528.  test at the factory. I wish you a happy searching. But if you find one, you're
  529.  not able to use it, before you know it's structure. Send me the no., please!
  530.  
  531.  
  532.  
  533.  The events for the two iPentium counters #0 and #1
  534.  ==================================================
  535.  
  536.  ------------------------------------------------------------------------------
  537.  bits    no   description
  538.  ------------------------------------------------------------------------------
  539.  000000  00h  data reads
  540.  000001  01h  data writes
  541.  000010  02h  data TLB misses
  542.  000011  03h  data read misses
  543.  000100  04h  data write misses
  544.  000101  05h  writes (hits) to M or E state lines
  545.  000110  06h  data cache lines written back
  546.  000111  07h  external snoops
  547.  001000  08h  data cache snoop hits
  548.  001001  09h  memory accesses in both pipes
  549.  001010  0Ah  bank conflicts
  550.  001011  0Bh  misaligned data memory references
  551.  001100  0Ch  code reads
  552.  001101  0Dh  code TLB misses
  553.  001110  0Eh  code cache misses
  554.  001111  0Fh  any segment register loaded
  555.  010000  10h  segment descriptor cache accesses
  556.  010001  11h  segment descriptor cache hits
  557.  010010  12h  branches
  558.  010011  13h  BTB hits
  559.  010100  14h  taken branches or BTB hits
  560.  010101  15h  pipeline flushes
  561.  010110  16h  instructions executed in both pipes
  562.  010111  17h  instructions executed in the v-pipe
  563.  011000  18h  clocks while bus cycle in progress (bus utilization)
  564.  011001  19h  pipe stalled by full write buffers (writes backup)
  565.  011010  1Ah  pipe stalled by waiting for data memory reads
  566.  011011  1Bh  pipe stalled by writes to M or E lines
  567.  011100  1Ch  locked bus cycles
  568.  011101  1Dh  I/O read or write cycles
  569.  011110  1Eh  non-cacheable memory references
  570.  011111  1Fh  pipeline stalled by address generation interlock
  571.  100000  20h  unknown, but counts
  572.  100001  21h  unknown, but counts
  573.  100010  22h  floating-point operations
  574.  100011  23h  breakpoint matches on DR0 register
  575.  100100  24h  breakpoint matches on DR1 register
  576.  100101  25h  breakpoint matches on DR2 register
  577.  100110  26h  breakpoint matches on DR3 register
  578.  100111  27h  hardware interrupts
  579.  101000  28h  data reads or data writes
  580.  101001  29h  data read misses or data write misses
  581.     2Ah..3Fh  reserved and unused (no counting)
  582.  ------------------------------------------------------------------------------
  583.  
  584.  At the moment it seems, that Intel has changed/enhanced this list for the iP6!
  585.  
  586.  
  587.  
  588.  The new instructions
  589.  ====================
  590.  
  591.  i486:    The newer processors with "&" printed on the package will support the
  592.           CPUID-flag in EFLAGS, the CPUID instruction, the CR4 register bits1/0
  593.           and instructions for access to the CR4 register, the enhanced virtual
  594.           mode, the system management mode SMM and the RSM instruction. The new
  595.           i486DX2WB processor supports the 4MB-pages too. If this CPU runs with
  596.           writeback mode, then the CPUID value is '0470'. If it is running with
  597.           writethrough mode, then you receive the value '0436'.  The real mask-
  598.           revision (stepping) you will get only after the processor reset!
  599.  Pentium: The iPentium processors support all the news listed above and the new
  600.           instructions listed below.
  601.  UMC,AMD: The UMC U5S, the UMC U5D and the AMD enhanced DX2/DX4 processors sup-
  602.           port the CPUID-flag in EFLAGS and the CPUID instruction.
  603.  IBM:     The IBM 386/486SLC and the IBM 486BL3 'Blue Lightning' processors are
  604.           supporting some MSRs (see above) and the instructions to use them.
  605.  
  606.  ------------------------------------------------------------------------------
  607.  name    opcodes   description
  608.  ------------------------------------------------------------------------------
  609.  CPUID   0F A2     CPU identification
  610.                    in:   EAX=0         get max. identification level and vendor
  611.                    out:  EAX=1         max. identification level is 1 now
  612.                          EBX-EDX-ECX   vendor identification
  613.                            'GenuineIntel' - Intel i486, iPentium or iP6 CPU
  614.                            'UMC UMC UMC ' - UMC U5S or U5D processor
  615.                            'AuthenticAMD' - AMD 486DX2 or DX4 (enh.) processor
  616.                            'CyrixInstead' - Cyrix M1 processor
  617.                    in:   EAX=1         get chip type and the supported features
  618.                    out:  EAX=0:TFMS    CPU type (type, family, model, stepping)
  619.                            type        The type is encoded in the bits13/12.
  620.                                        00=1st dual iPentium CPU (iP54C)
  621.                                        01=iPentium OverDrive processor
  622.                                        10=2nd dual iPentium CPU (iP54C)
  623.                                        11=reserved
  624.                            family      4=486, 5=iPentium, 6=iP6
  625.                            model       Intel486: 0=DX, 1=DX50, 2=SX, 3=DX2,
  626.                                                  4=SL, 5=SX2, 7=DX2WB, 8=DX4
  627.                                        UMC486:   1=U5D, 2=U5S
  628.                                        AMD486:   3=DX2, 7=DX2WB, 8=DX4, 9=DX4WB
  629.                                        iPentium: 0=5V-60/66 MHz A-step chips,
  630.                                                  1=5V-60/66 MHz, 2=3.3V-75/90/
  631.                                                  100/120/133MHz, 3=P24T, 4=OvDr
  632.                                                  for iPentium-3.3V, 5=OvDr for
  633.                                                  iDX4, 6=OvDr for iPentium-5V
  634.                                        iP6:      4=P55CT (iPentium-3.3V OvDr)
  635.                            stepping    steppings sometimes cover several masks
  636.                            comment     iPentium-5V: no fDIVbug since step no.7
  637.                                        iPentium-3V: no fDIVbug since step no.4
  638.                          EDX=flags     supported features (i486, iPentium, iP6)
  639.                            bit31..10   reserved (=0)
  640.                            bit9=1      CPU contains a local APIC (iPentium-3V)
  641.                            bit8=1      CMPXCHG8B instruction supported
  642.                            bit7=1      machine check exception supported
  643.                            bit6=0      reserved (36bit-addressing & 2MB-paging)
  644.                            bit5=1      iPentium-style MSRs supported
  645.                            bit4=1      time stamp counter TSC supported
  646.                            bit3=1      page size extensions supported
  647.                            bit2=1      I/O breakpoints supported
  648.                            bit1=1      enhanced virtual 8086 mode supported
  649.                            bit0=1      CPU contains a floating-point unit (FPU)
  650.                    info: can be used in all CPLs; serializes the pipelines; the
  651.                          first iPentiums did not supported several CPUID levels
  652.                          and they show EAX=FMS and EBX-EDX-ECX=vendor only! (so
  653.                          they seem to provide more than 500h CPUID levels)
  654.  ------------------------------------------------------------------------------
  655.  RDMSR   0F 32     read a model specific register value
  656.                    in:   ECX      number of the MSR (0..13h on the iPentium)
  657.                    out:  EDX:EAX  value of the MSR (64 bit wide)
  658.                    clks: 20-24 (iPentium)
  659.                    info: instruction can only be used when CPL=0 (but many EMMs
  660.                          do allow the usage from CPL>0 without problems; if the
  661.                          instruction is used in a Windows 3.1 DOS-box, then the
  662.                          DOS-session will be 'crashed' due to an opcode error)
  663.  ------------------------------------------------------------------------------
  664.  WRMSR   0F 30     write a value to a model specific register
  665.                    in:   ECX      number of the MSR (0..13h on the iPentium)
  666.                          EDX:EAX  value (64 bit wide)
  667.                    clks: 30-45 (iPentium)
  668.                    info: instruction can only be used when CPL=0 (but some EMMs
  669.                          like QEMM 7.04 do allow the usage from CPL>0)
  670.  ------------------------------------------------------------------------------
  671.  RDTSC   0F 31     read time stamp counter value
  672.                    out:  EDX:EAX  time stamp counter value (64 bit wide)
  673.                    clks: 6 (iPentium, CPL=0), 11 (iPentium, CPL=1-3)
  674.                    info: instruction can be disabled for CPL=1..3 via CR4.TSD
  675.  ------------------------------------------------------------------------------
  676.  CMPXCH8B      0F C7      compare & exchange 64 bits, similar to CMPXCHG
  677.  RSM           0F AA      resume from system management mode (only in SMM!)
  678.  MOV EAX,CR4   0F 20 E0   read the CR4 register value
  679.  MOV CR4,EAX   0F 22 E0   write a value to the CR4 register
  680.  ------------------------------------------------------------------------------
  681.  
  682.  The MOV EAX,TRxh and MOV TRxh,EAX instructions are not longer supported by the
  683.  iPentium processors, because the Test Registers were placed into the MSRs.
  684.  
  685.  
  686.  
  687.  The iPentium stepping values
  688.  ============================
  689.  
  690.  Intel Pentium P5 processor
  691.  ------------------------------------------------------------------------------
  692.  type    family  model   step    mask    clock   SX-no   Vcc in V    °C   note
  693.  ------------------------------------------------------------------------------
  694.  0       5       1       3       B1      50/50   Q0399   4.75-5.25   85   1,2
  695.  0       5       1       3       B1      60/60   Q0352   4.75-5.25   85   1
  696.  0       5       1       3       B1      60/60   Q0400   4.75-5.25   75   1,2
  697.  0       5       1       3       B1      60/60   Q0394   4.75-5.25   80   2,3
  698.  0       5       1       3       B1      66/66   Q0353   4.90-5.25   75   1 
  699.  0       5       1       3       B1      66/66   Q0395   4.90-5.25   70   2,3
  700.  0       5       1       3       B1      60/60   Q0412   4.75-5.25   85   1
  701.  0       5       1       3       B1      60/60   SX753   4.75-5.25   85   1
  702.  0       5       1       3       B1      66/66   Q0413   4.90-5.40   75   1
  703.  0       5       1       3       B1      66/66   SX754   4.90-5.40   75   1,4
  704.  ------------------------------------------------------------------------------
  705.  0       5       1       5       C1      60/60   Q0466   4.75-5.25   80   3
  706.  0       5       1       5       C1      60/60   SX835   4.75-5.25   80   3
  707.  0       5       1       5       C1      66/66   Q0467   4.90-5.40   70   3
  708.  0       5       1       5       C1      66/66   SX837   4.90-5.40   70   3
  709.  ------------------------------------------------------------------------------
  710.  0       5       1       7       D1      60/60   Q0625   4.75-5.25   80   3
  711.  0       5       1       7       D1      60/60   SX948   4.75-5.25   80   3
  712.  0       5       1       7       D1      60/60   SX974   5.15-5.40   70   3
  713.  0       5       1       7       D1      66/66   Q0626   4.90-5.40   70   3
  714.  0       5       1       7       D1      66/66   SX950   4.90-5.40   70   3
  715.  0       5       1       7       D1      66/66   Q0627   5.15-5.40   70   3
  716.  0       5       1       7       D1      66/66   SX949   5.15-5.40   70   3
  717.  ------------------------------------------------------------------------------
  718.  1: non-heat spreader package
  719.  2: engineering samples only
  720.  3: heat spreader package
  721.  4: 66 MHz B1 shipped after work week 34 of 1993 were tested to Vcc=4.90-5.40V
  722.  
  723.  
  724.  
  725.  Intel Pentium P54 processor
  726.  ------------------------------------------------------------------------------
  727.  type    family  model   step    mask    clock      SX-no   comment
  728.  ------------------------------------------------------------------------------
  729.  0       5       2       1       B1      75/50      Q0540   ES
  730.  0       5       2       1       B1      75/50      Q0541   ES
  731.  0       5       2       1       B1      90/60      Q0542   STD
  732.  0       5       2       1       B1      90/60      Q0613   VR
  733.  0       5       2       1       B1      90/60      Q0543   DP
  734.  0       5       2       1       B1      100/66     Q0563   STD
  735.  0       5       2       1       B1      100/66     Q0587   VR
  736.  0       5       2       1       B1      100/66     Q0614   VR
  737.  0       5       2       1       B1      75/50      Q0601   TCP
  738.  0       5       2       1       B1      90/60      SX879   STD
  739.  0       5       2       1       B1      90/60      SX885   MD
  740.  0       5       2       1       B1      90/60      SX909   VR
  741.  0       5       2       1       B1      90/60      SX874   DP,STD
  742.  0       5       2       1       B1      100/66     SX886   MD
  743.  0       5       2       1       B1      100/66     SX910   VR,MD
  744.  ------------------------------------------------------------------------------
  745.  0       5       2       2       B3      90/60      Q0628   STD
  746.  0/2     5       2       2       B3      90/60      Q0611   STD
  747.  0/2     5       2       2       B3      90/60      Q0612   VR
  748.  0       5       2       2       B3      100/66     Q0677   VRE,MD
  749.  0       5       2       2       B3      75/50      Q0606   TCP
  750.  0       5       2       2       B3      75/50      SX951   TCP
  751.  0       5       2       2       B3      90/60      SX923   STD
  752.  0       5       2       2       B3      90/60      SX922   VR
  753.  0       5       2       2       B3      90/60      SX921   MD
  754.  2       5       2       2       B3      90/60      SX942   DP,STD
  755.  2       5       2       2       B3      90/60      SX943   DP,VR
  756.  2       5       2       2       B3      90/60      SX944   DP,MD
  757.  0       5       2       2       B3      100/66     SX960   VRE,MD
  758.  ------------------------------------------------------------------------------
  759.  0/2     5       2       4       B5      75/50      Q0704   TCP
  760.  0/2     5       2       4       B5      75/50      Q0666   STD
  761.  0/2     5       2       4       B5      90/60      Q0653   STD
  762.  0/2     5       2       4       B5      90/60      Q0654   VR
  763.  0/2     5       2       4       B5      90/60      Q0655   MD
  764.  0/2     5       2       4       B5      100/66     Q0656   MD
  765.  0/2     5       2       4       B5      100/66     Q0657   VR,MD
  766.  0/2     5       2       4       B5      100/66     Q0658   VRE,MD
  767.  0/2     5       2       4       B5      120/60     Q0707   VRE,MD,max.60°C
  768.  0/2     5       2       4       B5      120/60     Q0708   STD,max.60°C
  769.  0/2     5       2       4       B5      75/50      SX975   TCP
  770.  0/2     5       2       4       B5      75/50      SX961   STD
  771.  0/2     5       2       4       B5      90/60      SX957   STD
  772.  0/2     5       2       4       B5      90/60      SX958   VR
  773.  0/2     5       2       4       B5      90/60      SX959   MD
  774.  0/2     5       2       4       B5      100/66     SX962   VRE,MD
  775.  ------------------------------------------------------------------------------
  776.  0/2     5       2       5       C2      75/50      Q0725   TCP
  777.  0/2     5       2       5       C2      75/50      Q0700   STD
  778.  0/2     5       2       5       C2      75/50      Q0749   MD
  779.  0/2     5       2       5       C2      90/60      Q0699   STD
  780.  0/2     5       2       5       C2      100/50,66  Q0698   VRE,MD
  781.  0/2     5       2       5       C2      100/50,66  Q0697   STD
  782.  0/2     5       2       5       C2      120/60     Q0711   VRE,MD
  783.  0/2     5       2       5       C2      120/60     Q0732   VRE,MD
  784.  0/2     5       2       5       C2      133/66     Q0733   MD
  785.  0/2     5       2       5       C2      133/66     Q0751   MD
  786.  0/2     5       2       5       C2      133/66     Q0775   VRE,MD
  787.  0/2     5       2       5       C2      75/50      SK079   TCP
  788.  0/2     5       2       5       C2      75/50      SX969   STD
  789.  0/2     5       2       5       C2      75/50      SX998   MD
  790.  0/2     5       2       5       C2      90/60      SX968   STD
  791.  0/2     5       2       5       C2      100/50,66  SX970   VRE,MD
  792.  0/2     5       2       5       C2      100/50,66  SX963   STD
  793.  0/2     5       2       5       C2      120/60     SK086   VRE,MD
  794.  0/2     5       2       5       C2      120/60     SX994   VRE,MD
  795.  0/2     5       2       5       C2      133/66     SK098   MD
  796.  0/2     5       2       5       C2      133/66     SK103   VRE,MD
  797.  ------------------------------------------------------------------------------
  798.  0/2     5       2       5       mA1     75/50      Q0686   TCP
  799.  0/2     5       2       5       mA1     75/50      Q0689   SPGA
  800.  0/2     5       2       5       mA1     90/60      Q0694   TCP
  801.  0/2     5       2       5       mA1     90/60      Q0695   SPGA
  802.  0/2     5       2       5       mA1     75/50      SK089   TCP
  803.  0/2     5       2       5       mA1     75/50      SK091   SPGA
  804.  0/2     5       2       5       mA1     90/60      SK090   TCP
  805.  0/2     5       2       5       mA1     90/60      SK092   SPGA
  806.  ------------------------------------------------------------------------------
  807.  STD : Vcc=3.135-3.465V          DP : dual processor
  808.  VR  : Vcc=3.300-3.465V          MD : modified timing
  809.  VRE : Vcc=3.450-3.600V          ES : engineering sample
  810.  
  811.  TCP  : TCP package              mA1-step : voltage reduction technology for
  812.  SPGA : SPGA package                        Pentium 75 and 90 MHz processors
  813.  
  814.  
  815.  
  816.  Intel Pentium OverDrive P24T processor
  817.  ------------------------------------------------------------------------------
  818.  type    family  model   step    mask    clock      SX-no   comment
  819.  ------------------------------------------------------------------------------
  820.  1       5       3       1       B1      63/25      SZ953   version 1.0
  821.  1       5       3       1       B2      63/25      SZ990   version 1.0
  822.  ------------------------------------------------------------------------------
  823.  
  824.  
  825.  
  826.  The (known) iPentium bugs
  827.  =========================
  828.  
  829.  ------------------------------------------------------------------------------
  830.  P5  P54C  P24T
  831.  BCD BBBCA BB  <- masks for  P5: B1,C1,D1 / P54C: B1,B3,B5,C2,mA1 / P24T: B1,B2
  832.  111 13521 12  errata descriptions, see Intel order #242480-005 for all details
  833.  ------------------------------------------------------------------------------
  834.  x             BOFF# hold timing
  835.  x             incomplete initialization may flush the internal pipeline
  836.  x             IV pin may not be asserted under certain conditions
  837.  x             testability writes to data TLB may store wrong parity
  838.  x             LRU bits in the data cache TLBs are updated incorrectly
  839.  x             a replacement writeback cycle may invade a locked seqeunce
  840.  x             RUNBIST instruction generates incorrect BIST signature
  841.  xx            data breakpoint mistakenly remembered on a faulty instruction
  842.  xxx           RESET affects RUNBIST instruction execution in boundary scan
  843.  xx  xxx   xx  locked operation during instruction exec tracing may hang CPU
  844.  xx  xxx   xx  BP or single-step may be missed for one instruction after STI
  845.  xx            internal snoop problem due to reflection on address bus
  846.  xx            internal parity error on uninitialized data cache entry
  847.  xx  xxx   xx  missing shutdown after an IERR#
  848.  xx  x         processor core may not serialize on bus idle
  849.  xx  xxx       SMIACT# assertion during replacement writeback cycle
  850.  xxx xxx       overflow undetected on some number on FIST
  851.  xxx xxx       six operands result in unexpected FIST operation
  852.  xx  x         snoop with table-walk violation may not invalid. snooped line
  853.  xx  xx        FDIV bug (Intel: 'slight precision loss')
  854.  xxx           power-up BIST failure
  855.  xxx xxx   xx  FLUSH#, INIT or MCE dropped due to floating-point exception
  856.  xxx xxxxx xx  floating point operations may clear alignment check bit (AC)
  857.  xxx xxxxx xx  CMPXCHG8B accross page boundary may cause invalid opcode exc.
  858.  xxx xxx   xx  single step debug exception breaks out of HALT
  859.  xxx xxxxx xx  EIP altered after specific FP oper. followed by MOV Sreg,Reg
  860.  xxx xxxxx xx  WRMSR into illegal MSR does not generate GP fault
  861.  xxx xxx   xx  inconsist. data cache state from concurr. snoop/memory write
  862.      xxx   xx  no I/O restart during single-stepping or data BP exceptions
  863.      xxx   xx  NMI or INIT in SMM with I/O restart during single-stepping
  864.      xxx   xx  SMI# and FLUSH# during shutdown
  865.      xxx   xx  FLUSH# with a breakpoint pending causes false DR6 values
  866.      xxxxx xx  STPCLK# deassertion not recognized for 5 CLKs after BRDY#
  867.      xxx       future Pentium OvDr CPU FERR# contention in 2-socket systems
  868.      x         code cache lines not invalidated if snooped on AutoHALT/stop
  869.      x         STPCLK# assertion during HALT instruction hangs system
  870.      xxxxx xx  NMI or INIT during HALT within SMM causes bus activity
  871.      xxxxx     RUNBIST restrictions when run through boundary scan circuitry
  872.      xxxx      FRC mode miscompare due to uninitialized internal register
  873.      xxxxx xx  STPCLK# restrictions during EWBE#
  874.      xxx   xx  multiple allocations into branch target buffer
  875.      xxx       100 MHz REP MOVS speed path
  876.      xxx   xx  branche trace message corruption in slow trace mode
  877.      xxxx      FRC lock-step failure during APIC write
  878.      xxxxx     BE4#-BE0# sampled incorrectly at Min Vih
  879.      xxxx      incorrect PCHK# output during boundary scan if in DP mode
  880.      xxx       BE3#-BE0# not driven during boundary scan if RESET high
  881.            xx  BIST disabled
  882.            xx  maximum Icc usage
  883.            xx  CLK required for UP# to be driven
  884.  ------------------------------------------------------------------------------
  885.      ###       problem with external snooping while 2 cycles are pending on bus
  886.      ###       STPCLK# assertion and the stop grant bus cycle
  887.      ###       external snooping with AHOLD asserted may cause CPU to hang
  888.      ###       address parity check not supported in dual processing mode
  889.      ##        inconsistent cache state from interCPU pipelined READ -> WRITE
  890.      ###       processors hang during zero WS, pipelined bus cycles
  891.      ###       bus lock-up problem in a specific dual processing mode sequence
  892.      ####      incorrect assertion of PHITM# without PHIT#
  893.      ####      double issuance of read cycles
  894.      ####      line invalidation may occur on read or prefetch cycles
  895.      ####      EADS# or floating ADS# may cause extra invalidates
  896.      ####      HOLD & BOFF# during APIC cycle may cause DP arbitration problem
  897.      ####      system hang after hold during local APIC 2nd INTA cycle
  898.  ------------------------------------------------------------------------------
  899.      +++       remote read message shows valid status after a checksum error
  900.      +++       change of clearing an unread error in the error register
  901.      +++       writes to error register clear register
  902.      +++       three interrupts of the same priority cause lost local interrupt
  903.      +++       APIC bus synch lost due to checksum error on remote read message
  904.      +++       HOLD during READ from local APIC register causes incorrect PCHK#
  905.      +++       HOLD during outstanding interCPU pipelined APIC cycle hangs CPU
  906.      +++       PICCLK reflection may cause an APIC checksum error
  907.      ++++      spurious interrupt in APIC through local mode
  908.      +++       pot. for lost interrupts while using APIC in through local mode
  909.      ++++      back to back assertions of HOLD may cause lost APIC write cycle
  910.  ------------------------------------------------------------------------------
  911.      *         CPU may not reset correctly due to floating FRCMC# pin
  912.      *  **     BRDY# does not have buffer selection capability
  913.  ------------------------------------------------------------------------------
  914.  x : error exists in this mask revision
  915.  # : dual processing related errata
  916.  + : APIC related errata
  917.  * : 75 MHz TCP related errata
  918.  
  919.  
  920.  
  921.  The RESET-EDX-CPUID-method
  922.  ==========================
  923.  
  924.  All the ≥i386 processors will show their CPUID value after the processor reset
  925.  in the DX register. Sometimes the value seems to be stored in the high part or
  926.  in both, the high and the low part of the EDX register.  This shift is done by
  927.  some BIOS versions (probably to save the value during the power on self test).
  928.  You can get access to the EDX-after-reset-value via generating a processor re-
  929.  set using the triple-fault-method or the keyboard-controller-reset-method. The
  930.  reset test will only be useable when running under real mode!
  931.  On the iPentium processor there are two different resets: the standard and the
  932.  fast reset (only two clock cycles, without erasing caches...). I sometimes re-
  933.  ceived a hang-up on the iPentium-60 I checked my reset-software on.
  934.  
  935.  Please, remember, that this reset test will not work with all BIOS versions!!!
  936.  
  937.  ------------------------------------------------------------------------------
  938.  some register values after a processor reset
  939.  ------------------------------------------------------------------------------
  940.  EAX  processor is okay, if zero (if not, then contact me and the vendor)
  941.  EDX  value like the CPUID instruction xFMS value
  942.    386-xFMS   03xx=i386DX, 13xx=i376?, 23xx=i386SX/CX/EX, 033xx=i376,
  943.               034x=iRapidCAD, 43xx=i386SL
  944.  
  945.    486-xFMS   A3xx=IBM386SLC, A41x=IBM486SLC, A42x=IBM486SLC2, 84xx=IBM486BLC3
  946.               0005=CyrixM5, 0006=CyrixM6, 0007=CyrixM7
  947.  
  948.    586-xFMS   15xC=NexGen Nx586 (similar to iPentium, 1=OverDrive?, C=C-mask?)
  949.  
  950.    family     04=i486, 05=iPentium, 06=iP6
  951.    model      i486:     0=DX, 1=DX50, 2=SX, 3=DX2, 4=SL, 5=SX2, 7=DX2WB, 8=DX4
  952.               iPentium: 0/1=5V-60/66 MHz, 2=3V-75/90/100/120/133 MHz, 3=P24T,
  953.                         4=OvDr for iP5-3.3V, 5=OvDr for iDX4, 6=OvDr for iP5-5V
  954.    stepping   steppings sometimes cover several masks
  955.  ------------------------------------------------------------------------------
  956.  
  957.  
  958.  
  959.  Known 386/486 processor mask revisions
  960.  ======================================
  961.  
  962.  ------------------------------------------------------------------------------
  963.  CPU           known mask revisions for the RESET-EDX-CPUID stepping value
  964.  ------------------------------------------------------------------------------
  965.  i386SX        4=A0, 5=B, 6=C?, 8=C-E, 9=D
  966.  i386CX/EX     9=A
  967.  i386DX        0=A, 3=B0-B10, 5=D0, 8=D1-D2
  968.  i386SL        10=A0-A3, 11=B0-B1
  969.  iRapidCAD     0=A
  970.  i376          5=A, 8=B
  971.  ------------------------------------------------------------------------------
  972.  AMD386SX      5=A, 8=B
  973.  AMD386DX      5=A, 8=B
  974.  ------------------------------------------------------------------------------
  975.  i486DX25/33   0=A0-A1, 1=B2-B6, 2=C0, 3=C1, 4=D0
  976.  i486DX50      0=cA2-cA3, 1=cB0-cB1
  977.  i486SL        0=A
  978.  i486DX2       2=A0-A2, 3=B1, 5=C
  979.  i486SX        0=A0, 2=B0, 7=cA0, 8=cB0, 3=D, A=E
  980.  ------------------------------------------------------------------------------
  981.  
  982.  
  983.  
  984.  Used 'short-cuts'
  985.  =================
  986.  
  987.  i386    Intel 80386 processor (i386SX/CX/EX, i386DX)
  988.  i486    Intel 80486 processor (i486SX, i486SX2, i486DX, i486DX2(WB), i486DX4)
  989.  
  990.  iP5     Intel Pentium processor (with 60 or 66 MHz clock)
  991.  iP54x   Intel Pentium processor (with 75, 90, 100, 120, 133 MHz clock)
  992.  
  993.  iP55CT  Intel P6 OverDrive processor
  994.            This is a true iP6 processor, which fits into an iPentium-133 socket
  995.            no.7 (specification 2). It provides 66 MHz external clock speed. The
  996.            internal clock speed can be 2,5x or 3x as fast. To insert this P55CT
  997.            into an iPentium-board you need a BIOS-update (FLASH), because there
  998.            are some slight differences between the P54 and the P55CT.
  999.  iP6     Intel P6 processor (with 120, 133 MHz clock)
  1000.  
  1001.  iP24D   Intel 80486DX2WB processor
  1002.            This is the new i486DX2 with an integrated 8 KB writeback cache.
  1003.  iP24T   Intel Pentium OverDrive processor
  1004.            This is the new overdrive for an i486-ZIF-socket II or III including
  1005.            2x16 KB cache, 32 bit bus, clock 'doubling' (63/25, 83/33 MHz). This
  1006.            CPU has an integrated cooling solution with a fan. Remember that not
  1007.            all boards will work with this processor - sometimes you may get the
  1008.            complete destruction of the CPU as an upgrade result.  At the moment
  1009.            the i486DX4-100 is the better and faster (than 63/25 part) solution!
  1010.  
  1011.  chipsets from Intel:  Mercury, Saturn, Neptune, Triton and Orion
  1012.  
  1013.  Nx586   This is the NexGen586 processor. It has iPentium-like structures. This
  1014.          CPU has been created as a competitor for the iPentium processor. There
  1015.          are the following technical parameters: 33 MHz external and 2.5x33 MHz
  1016.          internal clock speed; no FPU (there will be a Nx587 part including the
  1017.          FPU which replaces the Nx586); integrated L2-cache controller; 3.3V; a
  1018.          i386 compatible core (no enhanced virtual mode, MSRs and so on); a L1-
  1019.          cache with 2x16 KB; features like branch prediction, register renaming
  1020.          and data forwarding or speculative execution; a 463 pin PGA package; a
  1021.          0.5µ CMOS technology. The Nx586VL chipset has been created to use this
  1022.          processor in an environment with Vesa Local Bus (VLB).  This processor
  1023.          will not fit in the original iPentium socket  and it is not compatible
  1024.          to the iPentium by internal (programming) details, but by the speed!
  1025.  
  1026.          NexGen processor detection example (check for i386 compatibility 1st!)
  1027.          is_a_386:  MOV AX,5555h    ; To detect the NexGen processor,  first do
  1028.          set_zero:  XOR DX,DX       ; check, whether it is an i80386 compatible
  1029.                     MOV CX,2h       ; processor, or not. If it is a 32 bit CPU,
  1030.                     DIV CX          ; then execute the division,  which changes
  1031.                     JNZ no_NexGen   ; zero flag on non-NexGen processors.  Only
  1032.                     JZ  is_NexGen   ; the NexGen will not change the zero flag.
  1033.          This test routine is based on the original NexGen processor detection.
  1034.  
  1035.  K86     AMD processor with an architecture, similar to the Intel iP6
  1036.          compareable to the iPentium-120/133 by the speed (130 MIPS)
  1037.  
  1038.  M5      Cyrix Cx80486S(2), Cx80486D(2), Cx80486S(2)-V, Cx80486D(2)-V processor
  1039.  M6      Cyrix Cx80486DX, Cx80486DX-V processor
  1040.  M7      Cyrix Cx80486DX2, Cx80486DX2-V processor
  1041.  
  1042.  M1      Cyrix processor with an architecture, similar to the Intel iP6
  1043.          compareable to the iPentium-120/133 by the speed (130 MIPS)
  1044.  M1sc    Cyrix M1 processor, designed for the 486DX4 socket ('Cyrix 5x86 CPU')
  1045.          compareable to the iPentium-75 by the speed
  1046.  
  1047.  CPL     actual Code Privilege Level (0..2=system, 3=user)
  1048.          When running under real mode you are at CPL=0. If you use a memory ma-
  1049.          nager like EMM386, WIN/3, QEMM or 386MAX,  then the manager is running
  1050.          at CPL=0 and your DOS-session/-box runs with CPL=3.
  1051.  
  1052.  CRx     Control Register x
  1053.  DRx     Debug Register x
  1054.  TRx     Test Register x
  1055.  
  1056.  MSR     Model Specific Register (64 bit wide)
  1057.  TSC     Time Stamp Counter (64 bit wide)
  1058.  
  1059.  TLB     Translation Lookaside Buffer (≥i486)
  1060.  BTB     Branch Target Buffer (≥iPentium)
  1061.  
  1062.  
  1063.  
  1064.  Used sources
  1065.  ============
  1066.  
  1067.  ------------------------------------------------------------------------------
  1068.  Pentium Family User's Manual vol.#1, Intel 1994, ISBN 1-55512-225-6
  1069.  Pentium Family User's Manual vol.#2, Intel 1994, ISBN 1-55512-226-4
  1070.  Pentium Family User's Manual vol.#3, Intel 1994, ISBN 1-55512-227-2
  1071.  Optimizations for Intel's 32-Bit Processors, Intel, order number 2411799-001
  1072.  Pentium Processor Specification Update, 6/95, Intel, order number 242480-005
  1073.  ------------------------------------------------------------------------------
  1074.  Hans-Peter Messmer, Pentium, Addison-Wesley 1994, ISBN 3-89319-630-7
  1075.  Hans-Peter Messmer, PC-Hardwarebuch, Addison-Wesley 1995, ISBN 3-89319-710-9
  1076.  Ross P. Nelson, 80386/486, Microsoft Press, ISBN 3-86063-200-0
  1077.  A. Schulman, Undocumented DOS 2nd ed., Addison-Wesley 1994, ISBN 0-201-63287-X
  1078.  Frank van Gilluwe, Undocumented PC, Addison-Wesley 1994, ISBN 0-201-62277-7
  1079.  ------------------------------------------------------------------------------
  1080.  Mike Schmit, Optimizing Pentium Code, Dr. Dobbs 1/94 p.40 - about the iPentium
  1081.  Terje Mathisen, Pentium Secrets, BYTE 7/94 p.191          - about the iPentium
  1082.  Georg Schnurer, Noch'n Gedicht, c't 9/94 p.27             - about the UMC U5S
  1083.  Andreas Stiller, Kontrapunkt, c't 11/94 p.79              - about the Nx586
  1084.  Christian Ludloff, Zwischen den Zeilen, c't 11/94 p.266   - about the iPentium
  1085.  Andreas Stiller, Schwindel entlarvt, c't 12/94 p.62       - some CPUID models
  1086.  Christian Ludloff, Wundersame Wandlung, c't 02/95 p.242   - about the iPentium
  1087.  Andreas Stiller, Intels Antwort, c't 03/95 p.66           - some CPUID models
  1088.  Andreas Stiller, Prozessorgeflüster, c't 04/95 p.26       - some CPUID models
  1089.  Georg Schnurer, Discovery 6, c't 04/95 p.120              - about the new iP6
  1090.  Georg Schnurer, Wider den Flaschenhals, c't 04/95 p.132   - about the iPentium
  1091.  Andreas Stiller, Prozessorgeflüster, c't 05/95 p.34       - about the Cyrix M1
  1092.  Andreas Stiller, Prozessorgeflüster, c't 06/95 p.26       - about the Cyrix M1
  1093.  Andreas Stiller, Waschzettel, c't 07/95 p.186             - about masks & bugs
  1094.  Alex Wolfe, Pentium secrets revealed, EE Times 7/3/95 p.1 - about 4p_v302.zip
  1095.  Alex Wolfe, Embedded Insights, EE Times 7/10/95 p.43      - about 4p_v302.zip
  1096.  Andreas Stiller, Prozessorgeflüster, c't 08/95 p.24       - about the iP55CT
  1097.  ------------------------------------------------------------------------------
  1098.  software      package                            thanks for
  1099.  INFO.EXE      SimCity2000 game                   CPUID
  1100.  MFT.EXE       QEMM v7.04 memory manager          CPUID, Performance Monitoring
  1101.  QEMM.SYS      QEMM v7.04 memory manager          CR4use, eV86, enabled WRMSR
  1102.  TASM 3.2      Borland Pascal 7.0 Professional    debugging
  1103.  TP 7.0        Borland Pascal 7.0 Professional    making 'DB 66h' 32bit code
  1104.  CPUIDF.EXE    Intel's Processor Detection Code   CPUID, bug-free iPentiums
  1105.  CPU_ID.ZIP    NexGen's Processor Detection Pack  NexGen detection code sample
  1106.  ------------------------------------------------------------------------------
  1107.  Thanks to c't magazine author Peter Siering for my 1st article in 11/94.
  1108.  Thanks to c't magazine author Andreas Stiller for testing all CPUID 'models'.
  1109.  Thanks to c't magazine author Georg Schnurer for testing and his knowledge.
  1110.  Thanks to Thomas Mönkemeier and his VGA-COPY/386 with my knowledge added in.
  1111.  Thanks to Harald Feldmann from the Netherlands for knowledge/letters/faxes.
  1112.  Thanks to Terje Mathisen from Norway for knowledge and his iPentium article.
  1113.  Thanks to Ralf Brown for adding some knowledge to his DOS-INT-database.
  1114.  Thanks to Peter Frühauf, the CBF-iPentium-60 and all the software-ß-testers.
  1115.  Thanks to Maciej Rozycki from Gdansk (Poland) for his excellent CPU knowledge.
  1116.  Thanks to Don Donato from Folsom (CA, USA) for the P24T test results (CPUID).
  1117.  Thanks to Michael Steele from the NexGen corporation for his CPUID support.
  1118.  Thanks to Alexander Konosevich for the Cyrix processor types and ID values.
  1119.  Thanks to Alex Wolfe for his articles about the 4P package in the EE Times.
  1120.  Thanks to Ingo Warnke for his basic knowledge for the V86 mode by-passing.
  1121.  ------------------------------------------------------------------------------
  1122.  Peter Siering     - ps@ct.ix.de                    - c't magazine (software)
  1123.  Andreas Stiller   - as@ct.ix.de                    - c't magazine (processors)
  1124.  Georg Schnurer    - gs@ct.ix.de                    - c't magazine (hardware)
  1125.  Michael Steele    - michael.steele@nexgen.com      - NexGen prod.market.manag.
  1126.  Harald Feldmann   - feldmann@xs4all.nl (new!)      - processor programming
  1127.  Mike Schmit       - 76347.3661@compuserve.com      - processor programming
  1128.  Terje Mathisen    - terjem@hda.hydro.com           - processor programming
  1129.  Maciej Rozycki    - csa085mr@smokie.elka.pg.gda.pl - processor programming
  1130.  Thomas Mönkemeier - thm@vgasoft.com                - VGA-Copy/386 and mailbox
  1131.  Ralf Brown        - ralf@telerama.lm.com           - DOS interrupt list
  1132.  Andrew Schulman   - 76320.302@compuserve.com       - book The undocumented DOS
  1133.  Frank van Gilluwe - 74000.635@compuserve.com       - book The undocumented PC
  1134.  ------------------------------------------------------------------------------
  1135.  Trademarks are the property of their respective owners. The file may be copied
  1136.  and distributed freely as long  as it is distributed in its entirety and it is
  1137.  not distributed for profit. I don't guarantee anything.           End of file!
  1138.  ------------------------------------------------------------------------------
  1139.