[comp.os.minix] BIOS disk driver

alanf%smile@Sun.COM (Alan Fargusson) (11/29/88)

There is a problem with calling the ROM BIOS when you are using interrupts on
the Z-248.  The problem is that the BIOS switches to an internal stack which
is very small.  If an interrupt occurs during the call to the BIOS it is
likely that this stack will overflow.  There are other potential problems as
well.

I found this problem while debuging an interrupt driven serial port driver for
MS-DOS.  Older versions of the Zenith BIOS seem to work better.
- - - - - - - - - - - - - - - - - - - - -
Alan Fargusson		Sun Microsystems
alanf@sun.com		..!sun!alanf

ast@cs.vu.nl (Andy Tanenbaum) (11/30/88)

In article <79151@sun.uucp> alanf%smile@Sun.COM (Alan Fargusson) writes:
>There is a problem with calling the ROM BIOS when you are using interrupts on
>the Z-248.  The problem is that the BIOS switches to an internal stack which
>is very small.  If an interrupt occurs during the call to the BIOS it is
>likely that this stack will overflow.  There are other potential problems as
>well.

Progress at last.  Do you have any suggestions about how to fix it?  I had
hopes that the BIOS routine would work on all machines.  Perhaps this is a
pipe dream.  However, it seems strange that bios_wini.c does work on my
machine, which is also a Z-248.  What is going on here?

What other problems are there?

Andy Tanenbaum

SJONES%HAMPVMS.BITNET@cunyvm.cuny.edu (Steve Jones) (12/02/88)

Date: Wed, 30 Nov 88 10:59:58 GMT
From: Andy Tanenbaum <ast@CS.VU.NL>
+ In article <79151@sun.uucp> alanf%smile@Sun.COM (Alan Fargusson) writes:
+ >There is a problem with calling the ROM BIOS when you are using interrupts on
+ >the Z-248. [...]
+
+ Progress at last.  Do you have any suggestions about how to fix it?  I had
+ hopes that the BIOS routine would work on all machines.  Perhaps this is a
+ pipe dream.  However, it seems strange that bios_wini.c does work on my
+ machine, which is also a Z-248.  What is going on here?

Well, I don't know how much this might have to do with it, but someone
recently ordered a Z-248 through the college and got one with ROM's that
were over a year old, and about 4 revisions behind. The possibility of
newer ROM's providing more stack space, or other goodies, presents itself.

Luck,
--Steve.

BITNET:  sjones@hampvms         INET:  sjones%hampvms.bitnet@mitvma.mit.edu
CSNET:   sjones%hamp@umass-cs   UUCP:  ...uunet!hampvms.bitnet!sjones

"When you have learned to snatch the error code from the trap frame, it will
 be time for you to leave."  -- The Tao of Programming

allbery@ncoast.UUCP (Brandon S. Allbery) (12/08/88)

As quoted from <1730@ast.cs.vu.nl> by ast@cs.vu.nl (Andy Tanenbaum):
+---------------
| In article <79151@sun.uucp> alanf%smile@Sun.COM (Alan Fargusson) writes:
| >There is a problem with calling the ROM BIOS when you are using interrupts on
| >the Z-248.  The problem is that the BIOS switches to an internal stack which
| >is very small.  If an interrupt occurs during the call to the BIOS it is
| >likely that this stack will overflow.  There are other potential problems as
| >well.
| 
| Progress at last.  Do you have any suggestions about how to fix it?  I had
| hopes that the BIOS routine would work on all machines.  Perhaps this is a
| pipe dream.  However, it seems strange that bios_wini.c does work on my
| machine, which is also a Z-248.  What is going on here?
+---------------

(1) Perhaps the PS/2 has an even smaller internal stack?

(2) I've heard that Model 50's have unusual *serial port* incompatibilities.
    If one of these involves sending an interrupt where it's not expected
    (e.g. to the floppy driver?) things could conceivably blow up.  (It
    looks suspiciously like it uses an interrupt normally used by some
    networks, since initializing the serial port on a PS/2 with Novell
    Advanced Netware installed wedges the system pretty thoroughly.  Might
    Minix be using one of those vectors for something?)

(3) Even if (2) isn't the cause, it speaks of possible *other* interrupt
    incompatibilities.  Maybe the BIOS doesn't like to be interrupted, for
    instance.  (One assumes that the BIOS clock interrupt would have some way
    of dealing with this.)  Or the BIOS hooks an interrupt vector for some
    reason *after* Minix hooks it, causing some normal interrupt to send
    the computer off executing something that won't work because DOS isn't
    loaded.

++Brandon
-- 
Brandon S. Allbery, comp.sources.misc moderator and one admin of ncoast PA UN*X
uunet!hal.cwru.edu!ncoast!allbery  <PREFERRED!>	    ncoast!allbery@hal.cwru.edu
allberyb@skybridge.sdi.cwru.edu	      <ALSO>		   allbery@uunet.uu.net
comp.sources.misc is moving off ncoast -- please do NOT send submissions direct
      Send comp.sources.misc submissions to comp-sources-misc@<backbone>.