home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
-
-
-
- ⌠ iAPX; Show CPU/NPX Profile and test 'em
- ⌡ Copyright 1986-94 by Chris Lueders
-
- Version 1.22
-
- For noncommercial use and distribution
-
-
-
-
- See file LICENSE.DOC for license info
-
-
-
-
-
- This doc file and related material (at least the IAPX.COM file)
- was written by Chris Lueders. Feel free to contact me whenever you
- like to. Try one of the following ways:
-
- via FidoNet : Chris Lueders @ 2:2453/30
- via Internet : chris@rhein.de
- via Support BBS : Zaphods BBS, +49-228-262894 V32b/HST
- +49-228-9111041 ISDN X75
-
-
-
- Please call me if you have problems with special items or special
- boards you used for running this software. Please call me if you
- have further suggestions for future versions, too.
-
-
-
- *** WARRANTY ***
-
- Absolutely none.
-
- THE AUTHOR AND HIS ACCOCCIATES SHALL NOT BE HELD RESPONSIBLE FOR
- ANY DAMAGES, LIABILITY, OR LOSS OF REVENUE DUE TO THE USE OR
- INABILITY TO USE THIS PROGRAM. THIS INCLUDES, BUT IS NOT LIMITED
- TO, ANY INTERRUPTION OF SERVICE, LOSS OF BUSINESS OR
- ANTICIPATORY PROFITS, OR CONSEQUENTIAL DAMAGE RESULTING FROM THE
- USE OF THIS PROGRAM. IN AREAS WERE SUCH LIMITATIONS ARE NOT
- LEGAL THIS PROGRAM IS NOT LICENSED FOR USE.
-
-
-
- *** DISCLAIMER ***
-
- This program is a processor testing tool. Therefore it messes
- around with the CPU as it likes. PLEASE BE AWARE THAT THIS CAN
- TRASH YOUR SYSTEM. To prevent loss of data, ENSURE DISK CACHES TO
- BE WRITTEN TO DISK PRIOR TO START THIS PROGRAM!
-
- We tried to take any precaution, but we can take NO WARRANTY that
- this tool will run correctly and won't crash your machine. Herewith
- you have been warned ...
-
-
-
- ====== 1 - What's that small program for? Do I need it? ===================
-
- OF COURSE !
- You may think "What program may this be with it's dox four times as
- big as the executable?". I'll try to tell you.
-
- iAPX is a program designed for showing you some data and internals
- of your computer. You may use it in case you buy or sell a computer
- to check the CPU and/or NPX for type, clock ratings and known bugs.
-
- The "normal" use may be one of the following:
-
- 1. You meet a friend, who has a new machine, but doesn't know
- anything about it. You like to get some infos, but forgot
- your computer hardware technician service kit. So, just run this
- small program instead of working on the hardware. Some folks
- won't let you open their computer, so this method is much more
- "user friendly"
-
- It's not only faster; it's even more neat and will discover some
- results that you can't get staring at the hardware yourself.
-
- 2. You want to buy a new computer (or only a board). You neither
- trust the company that sells the boards, nor the chips themselves.
- As you intend to run Novell Netware 386 on this machine, you want
- to know if this CPU has some of the known errors even Netware
- checks for. Solution: simply start iAPX and it'll test the CPU
- for all known (at least to me) bugs. If all is correct, you may
- (more) safely purchase this board. If not, I highly recommend not
- to buy this board.
-
-
- iAPX has 3 commandline switches (say: "Wow!"):
-
- ⌠ iAPX; Show CPU/NPX Profile and test 'em; MS-DOS Vsn for IBM/PC
- ⌡ V1.22, chris@rhein.de 86-94; S/N 941011:1135; DOS 2.00; ...
-
- Commandline syntax :
- iAPX [?][p][r]
-
- ? - This screen
- P - Pause after each page of screen output
- R - Reset to get CPU ID/Rev; use with caution! This option is
- somewhat nasty; ENSURE DISK CACHES TO BE WRITTEN TO DISK !!
-
- Thanx to Bob Smith from Qualitas, Inc. I got some help from ...
-
- Refer to the documentation for more information.
-
- This is the output of the "?" switch. The "P" switch will pause the
- output before it scrolls off your screen. The "R" switch enables CPU
- RESET to kick the ID/Rev value out of it ... See later chapters in
- this doc on this topic.
-
-
- A typical call of iAPX looks like this (done on one of my machines
- with the "R" option enabled):
-
- ⌠ iAPX; Show CPU/NPX Profile and test 'em; MS-DOS Vsn for IBM/PC
- ⌡ V1.22, chris@rhein.de 86-94; S/N 941011:1135; DOS 2.00; ...
-
- - Main Processor : Intel 386 DX
- Clock rate 1 : 40.1 MHz
- Clock rate 2 : 40.4 MHz
-
- - Check CPU bugs :
- POPA : FAILED
-
- - Int_Desc_Table : Limit=03ff, Base=00000000
- Glob_Desc_Table : Limit=0010, Base=000de828
- Flags : PE MP EM IOPL ET
- 0 0 0 3 1
-
- - Number Cruncher : none
-
- - BIOS CPU ID/Rev : not supported
-
- Reset ID/Rev : 0308
- that is : 386 DX, Step D1
-
-
- See the next section for details on every single line.
- (I'd like to mention, that this machine is the only type of 386 based
- computer i've ever met, that had NO bug. ;-))
-
-
-
- ====== 2 - What do these lines of output suggest to me? ====================
-
-
- Ok, we'll look at each line seperately and i'll try to explain the
- contents and meaning of each of them.
-
-
-
- ------ 2.1 - Main Processor ------------------------------------------------
-
- Guess what - this is the type of CPU you use. iAPX has the ability
- to check for the following types:
-
- - Intel 8088 - Intel 80286
- - Intel 8086 - Intel 80386 SX
- - NEC V20 - Intel 80386 DX
- - NEC V30 - Intel 80486 SX
- - Intel 80188 - Intel 80486 DX
- - Intel 80186
-
- The measurements of clock rating, the selection of appropriate
- CPU tests, and the display of CPU infos is based on this type
- check. If there were an error in these routines it would
- likely mess up all other parts of the output (and possibly your
- whole system as well).
-
- Note, that iAPX cannot determine if you're using a 486 DX or a
- 486 SX with 487 SX attached. This is because the 487 SX is a full
- 486 DX, and the 486 SX is disabled if a 487 SX is active and
- running. (You can plug it out (at your own risk, buddy) and the
- system is still running !!). If iAPX mentions you were using an
- 486 SX, the NPX failed responding.
-
-
-
- ------ 2.2 - Clock ratings -------------------------------------------------
-
- iAPX tries to measure the rating of the clock that drives
- your CPU and/or NPX. This is, unfortunately, not an easy task, so
- I decided to implement two indepentent tests to check for this
- value. Don't be worried about *two* rates; they both describe the
- same clock.
-
- I personally think that test no. 1 is the better method of
- measurement, and I intend to remove the second test in future
- versions. If you discover big differences between these two values,
- please let me know; and please tell me further, what type of CPU you
- are running and what environment was active while testing (QEMM, DV,
- Windows (what mode?), OS/2 (version? mode?), &c).
-
- The measurement of the clocks is VERY nasty if you use one of the
- newer clone CPUs by AMD, C&T or something like that, because these
- CPUs look like an Intel, work like an Intel, but they're faster. So
- *IF* you're using such an CPU i'd appreciate an output of iAPX to
- get the timings of these newer releases.
-
-
-
- ------ 2.3 - Test CPU for known bugs ---------------------------------------
-
- There are several known bugs in the Intel CPU's running in the
- computers of the world (and even in the clones such as them coming
- from AMD). I thought it could be very interesting (e.g. if you buy
- a board or a whole machine, see above) if the processor is one
- of the many buggy versions still for sale today. For example, three
- of four tested 386 machines in my office had the POPA bug. Hopefully
- the most compilers will generate "CPU bug tolerant" code, but if
- not.. it might hang!
-
- The errors I try to diagnose mostly relate to a special CPU type
- (e.g. 80386), but I'm testing every CPU for proper operation if the
- intruction set gives me the possibility to do so.
-
-
- 2.3.1 - IDIV [mem]
-
- This was a bug in an early version of the 80186. The processor faulted,
- if you tried to IDIV with a negative divisor in memory (and not in
- a register).
- So far, I never discovered a CPU that messed up with this test (I
- must admit I never met a 80186 in person :-).
-
-
- 2.3.2 - REP [instr]
-
- This was also a bug in one of the early versions of the 80186 pro-
- cessor. If the CPU got a HOLD signal while working in a REP [instr]
- cycle, it served the HOLD and afterwards "forgot" to take up it's work
- with the REP again. Never found a faulty CPU till now.
-
-
- 2.3.3 - POPA
-
- Very common bug in 386 machines. I've tested that on 12 machines,
- 10 of which were faulty! It seems this bug has been fixed only in
- recentl 386SX versions (all 386DX i got sofar are bad; even AMD
- chips).
-
- Symptoms: Sometimes the processor messes up the AX register
- after a POPA instruction, which depends on the next opcode you give
- it to eat. To fix any problems with this instruction, simply put a
- NOP instruction after the POPA. After that it'll work out fine.
-
- If you try this one on a buggy CPU, it will mess up your AX register:
-
- mov ax,1234h
- mov bx,0
- mov di,0
- pusha
- popa
- mov cx,[bx+di]
-
- That's by no means an odd or unusual sequence of instructions. What's
- more, the 'mov cx, ...' operation is done correctly. It's the 'popa'
- which fails. See IAPX.DAT for the original data i based my tests on.
- It seems to me, that not only 32-bit but also 16-bit operations will
- cause this problem. iAPX only checks for this bug using the 16-Bit
- version to be also able to test 186/286 CPUs.
-
-
- 2.3.4 - 16-Bit MUL and 32-Bit MUL
-
- Less common error, but may encounter. This was a bug in the early
- versions of the 386 DX processor. I never got one of these buggy
- units, but even Novell does this kindo check and won't operate if
- it's discovered. See IAPX.DAT for further information.
-
-
- 2.3.5 - 32 Bit STOSB
-
- I heard that the 32bit STOSB instruction has some problems sometimes.
- It may not correctly increment the high word of the EDI register.
- Until now i didn't find a faulty CPU.
-
-
- 2.3.6 - BSWAP
-
- In one of the german computer magazines it was rumoured that the
- BSWAP instruction on 486 does not work correctly and only would swap
- one half down but forget to swap the other half down. So we check
- this as well.
-
-
- 2.3.7 - CMPXCHG
-
- I read about the CMPXCHG instruction yielding an INT 6 (invalid
- opcode) on some CPU's.
-
-
-
- ------ 2.4 - Further information on some CPU registers ---------------------
-
- It may be interesting for you (e.g. if you intend to write some nasty
- .ASM programs like this one), where some system tables are hidden and
- how the setting of the CPU flags is. This output shows them:
-
- Int_Desc_Table : Limit=07ff, Base=00115c48
-
- This is the adress and length of the Interrupt-Descriptor-Table. Most
- users think it's located at 0:0 even if they use QEMM or something
- similar, but that's wrong.
-
- Glob_Desc_Table : Limit=028f, Base=00116448
-
- Address and Length of the Global-Descriptor-Table.
-
- Flags : PE MP EM IOPL ET
- 0 0 0 3 1
-
- Some of the "static" system flags. It may be useful to take a look
- at these if you have problems with some sort of programs, e.g. NPX
- sensitive software.
-
- - PE bit: Protect Enable. If set, the processor is in protected mode.
- Though DOS doesn't run in 80286 protected mode, this
- means a supervisor task (such as QEMM, 386max) has
- switched the CPU (386 or above) to the V86 (virtual 8086)
- mode. This mode can emulate various 8086 lookalike tasks
- at the same time. Normally, only one task is active and
- this task is DOS. But the V86 mode lets the supervisor
- task shadow RAM, swap memory and so on.
-
- - MP bit: Monitor coProcessor. If set (and TS=1) an exception will
- be generated if the CPU encounters a WAIT instruction.
-
- - EM bit: EMulate coprocessor. If set an exception will be generated
- each time a coprocessor instruction is going to be executed.
- With aid of this bit, you can enable a floating point emu-
- lation. If EM=1, no coprocessor timings will be performed.
-
- - ET bit: Extension Type. In former versions of this documentation
- i mentioned not to know about this bit. Now i got the
- correct meaning. If set to 0, it means the attached NPX
- is 16-bit, if set to 1 it's 32-bit. It is (was) used to be
- able to run 80287 NPX on a 80386 CPU.
-
- - IOPL: I/O Privilege Level. Used to control the use of special
- instructions, memory areas and other protection scemes.
- Will be 3 under most circumstances, even when PE=0.
-
-
-
- ------ 2.5 - Numerix Processor ---------------------------------------------
-
- This will show you the type of coprocessor the CPU has attached (if
- any). Note: it's not that easy you might think. You can, for example,
- use an 80287 together with an 80386, so it may be interesting if
- there is the "right" coprocessor active.
-
- The clock rating of the coprocessor may be interesting too. You can
- obtain a "fast socket" for your 80287 running on an 80286. This will
- alter the clock rating of the NPX while retaining the clock rating of
- the main processor.
-
- iAPX also detects NPX software emulations but does not check, if the
- emulator tries to be 387 compatible or not.
-
-
-
- ------ 2.6 - Computing the CPU ID and revision -----------------------------
-
- At RESET the DX register of the 386 SX/DX or above will hold a value
- indicating the type of processor and it's revision. It is not easy
- to get this data. As described above, you have to issue a RESET to
- get this info. Unfortunately, RESET is the hardest hit you can do to
- a CPU. So please be alarmed NOT TO MESS AROUND with this option.
-
- I have taken some precautions to prevent system hangs or data
- corruption. This includes flushing the chache buffers of e.g.
- HyperDisk 4.50 and above. I, myself, never had problems with this
- option, but i was told of crashes with e.g. the Intel Inboard.
-
- To prevent you and your system from spurious hangs, this test will
- only be executed if the option "R" (=RESET) is stated at the command
- line. The output looks like this:
-
- - Reset ID/Rev : 2308
- that is : 386 SX, Step C
-
- I added all decodings I could find for the ID/Rev word and
- implemented them, but maybe you'll get unknown values. The revisions
- and steps in Intel processor design usually increase with time.
- Therefore, higher Revisions (lower byte of DX) indicate newer
- releases.
-
- The known IDs are:
-
- 03 - 386 DX
- 23 - 386 SX
- 43 - 386 SL
- 04 - 486 DX/SX
-
- AS far as I know, at least all 386 SX before the step C and all
- 386 DX before step D1 are faulty. If you intend to buy a computer,
- I suggest not to buy a machine with this CPU revisions.
-
-
-
- ====== 3 - Program messages ================================================
-
- "!!! Incorrect DOS version."
- The DOS version is lower than 2.00. This is at least required to
- run iAPX.
-
- "!!! System malfunction."
- Indicates something unusual went wrong, such as unseccessful
- memory allocation.
-
- " ? WARNING : DesqView detected; ratings are most likely incorrect."
- " ? WARNING : Windows 3 in 386 enhanced mode detected; ..."
- If DesqView or Windows 3 in enhanced mode is active, the timings
- are very incorrect. Kick the multitasker out of your memory and
- start the program again to get exact results.
-
-
- "Stand by ..."
- System timings and measurements are performed. Should only last
- about 0.2 seconds. If it hangs, please let me know. Tell me *ALL*
- about your system (type, speed, software, OS ...)
-
-
- " ? WARNING : 8253 not responding correctly or
- interrupt failure; no timings performed."
- The test on the presence of the 8253 timer chip and the timer tick
- interrupt failed. Should not occur on proper boards. Check your
- setup and hardware.
-
-
- "Timer Interrupt in loop ?"
- While in a timing loop, an interrupt occured. This will abort
- iAPX immediately. Try to reboot your system as soon as possible
- to ensure stable operation.
-
-
- "Press key to continue ..."
- You're prompted to press any key you like to start screen
- scrolling again. After that, the message will disappear.
-
-
- "Overflow"
- An register overflow was detected. Suggests a fault in this
- program. Please inform the author about this and include the
- register dump iAPX produces in such occasions and the version
- of iAPX.
-
-
- " ? WARNING : CPU is in protected mode; cannot reset."
- This indicates that the CPU may not be tested at this time,
- because a supervisor task has full control over the CPU. Remove
- supervisory software (QEMM386, 386MAX, etc.), reboot and try
- again.
-
-
- "Reset ..."
- If you're able to read this message, your mashine is already dead.
- It will be cleared immedeately after the RESET operation has
- succeeded.
-
-
- " ? WARNING : A20 gate activation failed; cannot reset."
- To issue a RESET to get the CPU ID/Rev the A20 gate must be active
- (that is, memory above 1Mb must be adressable). The attempt to
- active this gate failed.
-
-
- " ? WARNING : A20 reinitialization failure; REBOOT ASAP!"
- After RESET iAPX was unable to reset the A20 gate to the old
- setting. THIS MAY BE VERY DANGEROUS! Reboot your machine as soon
- as possible!
-
-
-
- ====== 4 - Technical notes =================================================
-
- iAPX was (you guessed it) written in Assembler, compiled with Micro-
- soft's MASM 5.10, linked with MS-LINK 5.10 and edited with M 1.00.
- Debugging was performed with NU-MEGA's Soft-ICE 2.50, CodeView and
- AFD-Pro. By now it consists of 3000 lines handmade assembler code
- (and is only about 6kb big after assembly! Try this with Windows SDK!)
-
- WARNING! The program may fault on machines that are not 100% IBM-
- compatible. Very important are the ports for the 8259 (interrupt-
- controller) and 8253 (timer-chip).
-
-
-
- ====== 5 - Epilogue ========================================================
-
- Thanx a lot to the following people for their assistance, wise
- advices and betasites:
-
- Martin Winkler, Uwe Engelmann, Stefan Rieck, Torsten Harling, Kalle
- Braun, Ralf Pradella, Lars Bergengruen, Bjoern Schoof, Alexander
- Bell, Mario Gongolsky, Yousuf Khan, vg@sai1.stollmann.de (Volkmar
- Grote), harald.feldmann@almac.co.uk (Harald Feldmann) and all
- people, which I forgot to mention.
-
- Beta testing was performed at the following sites:
-
- - The Ultimate Collection
- - Freak Out
- - The most down point in Germany
- - Dr. Clone's human experimental lab (hit by a 'HOLD MAIL' spell)
- - Anthem
- - comma GmbH, Bonn/FRG
-
-
- The latest non-beta versions of this program may be obtained using a
- file request with magic 'IAPX' at 2:2453/30 @ fidonet.
-
-
-
- ====== 6 - End of file =====================================================
-
- Thanx for using iAPX and for reading this. Please distribute and
- share it with others!
-
- /chris/
-