I was always under the impression that when Intel moved to a CMOS
manufacturing process for the 8088/8086, they fixed a bug regarding a
repeated LODSB with a segment override -- that the REP prefix was
ignored (bug) in the old 8088s, and was honored (correctly) in the newer
chips. So a simple routine to try to identify the 8088 vs. the 80c88
would look something like:
mov cx,2 ; test if following instruction will be
; repeated twice.
db 0F3h,26h,0ACh ; rep es: lodsb
jcxz Yes ; intel non-CMOS chips do not care of rep
jmp Nope ; before segment prefix override, NEC and
; CMOS-tech ones does.
If I run this on my 5150 with (C)1978 8088, I see the bug (cx does not
update). If I run this on my 5160 with "80c88" printed on the chip, I
do not see the bug (cx goes to 0). So all is well, right?
Well, I use this routine in a detection library for a project I recently
completed(*) and someone is claiming that the code is broken. It
reports an 80c88 when the chip is *not* marked 80c88, but rather "8088
(C) 1983 Intel". So what's going on? Is the chip from 1983 actually an
80c88, since it doesn't have the bug? Or did Intel fix the bug before
moving to a CMOS manufacturing process?
(*) project is a CGA compatibility testing program; you can grab it from
www.oldskool.org/pc/cgacomp
--
Jim Leonard (trixter at
oldskool.org)
http://www.oldskool.org/
Help our electronic games project:
http://www.mobygames.com/
Or check out some trippy MindCandy at
http://www.mindcandydvd.com/
A child borne of the home computer wars:
http://trixter.wordpress.com/