[comp.sys.ibm.pc.hardware] Parity error handling under DOS?

baxter@robespierre.ICS.UCI.EDU (Ira Baxter) (08/11/90)

My PC clone has memory-parity error detect.  How does this information make
its way from the the detection circuitry to me, the user, when a parity
error occurs?   I assume there is some sort of non-maskable interrupt vector
provided by the hardware for this... but I hear that *application* software
actually "ignores" such errors; how would the software accomplish this,
and why would anybody writing an application program bother to do this?


--
Ira Baxter

grege@gold.GVG.TEK.COM (Greg Ebert) (08/11/90)

In article <9008101543.aa18551@PARIS.ICS.UCI.EDU> baxter@robespierre.ICS.UCI.EDU (Ira Baxter) writes:
>My PC clone has memory-parity error detect.  How does this information make
>its way from the the detection circuitry to me, the user, when a parity
>error occurs?   I assume there is some sort of non-maskable interrupt vector
>provided by the hardware for this... but I hear that *application* software
>actually "ignores" such errors; how would the software accomplish this,
>and why would anybody writing an application program bother to do this?
>
>
In the AT, and probably the PC, there is an NMI mask register which allows you
to disable IO_CHANNEL_CHECK interrupts. One reason is memory sizing. Typically,
a pattern is written into RAM, and subsequently read-back, to determine if
RAM exists at that particular address. The plethora of idiot programmers out
there may not know how to handle an NMI, so they disable them. Why would you
get a parity error ? Simple. If the scheme uses even-parity, and the hardware
(most likely) reads FFFFh with parity=1 at a non-existent address, bingo,
instant parity error.

I believe the mask register is in port 70h, bit 7. It's been awhile since I
did that ASIC for AST Research, which had the NMI register inside. I
think writing a '1' to this position disables NMI's.

As for why would an applications programmer disable NMI, I dunno. Why would
Micr*s*ft write a program like BASIC or EXE2BIN which requires 'wraparound'
to address 0 after reaching FFFFFh ?
-----------------------------------------------------------------------------
Warning: I wear titanium underpants.