On Apr 7, 7:21 pm, "Rod Pemberton" <do_not_h...@notemailnotq.cpm>
> > There is a part B to this. It turns out that int 19h is what I
> > use to terminate this experimental bootstrap with. So that,
> > with the floppy left in the drive, the bootstrap reboots itself.
>
> Did you mean Int 18h?
>
No, int 19h.
> The PnP BIOS Spec. (1994) says that control may be returned to
> system BIOS for recovery via either Int 19h or Int 18h.
>
> The BIOS Boot Spec. (1996) says that hard drive boot sectors
> execute Int 18h for boot failure, but floppy boot sectors use Int
> 19h. Then, the spec redefines the recovery vector for both hard
> drive and floppy boot sectors to be Int 18h.
>
> So, what age are the Phoenix BIOS in those two Dell machines?
The laptop, Latitude CPi, says bios revision A07
Copyright 1985-1988 Phoenix Technologies Ltd.
Copyright 1990-1998 Dell Computer Corp. and others.
The desktop, Dim. 8250, is a much more recent antique:
Phoenix Rom Bios Plus version 1.10 A03 (c) 1985-1988
(c) 1990-2003 Dell Computer Corp.
-So this tells me the Phoenix core was licensed and augmented by Dell.
> I.e., in theory, a floppy boot sector for a pre-1996 machine could
> use either Int 18h or Int 19h, while a floppy boot sector for a
> post-1996 machine should use Int 18h. So, Int 18h would seem to
> be the appropriate choice for both. The BBS also discusses some
> other compatibility issues with use of Int 18h.
>
According to the Phoenix Technical Ref. I have (circa 1991), it calls
Int 19h function the "Bootstrap Loader". It calls Int 18h function
the "Process Boot Failure (XT,ISA,EISA)".
(In another chapter about the POST, describing the System Boot
Procedure:)
Once the POST completes its test and initialization procedures,
it boots the system using Int 19h as follows:
. . .
(typical, as known)
. . .
. If neither A: nor C: contains a disk with a boot sector, POST
issues
an Int 18h, which reports the problem and waits for a keystroke to
call
Int 19h again.
(The next section, headered: "Special use of INT 18h" says:)
"
The IBM BIOS uses INT 18h to point to a ROM-resident BASIC
interpreter.
Manufacturers of PC compatibles include BASIC on disk instead, and
use INT 18h to display the message NO BOOT DEVICE AVAILABLE. The
system user must then press F1 to have POST retry the boot procedure.
INT 18h can be vectored to a "no boot routine". An example of such a
routine would be one that allows a system to be booted over a network.
"
(The EISA Buss appeared with the ia80486, it instituted earliest PnP.)
(There is another section, headered: "Reentry into POST"..)
"
Introduction
Some computer operations require that the microprocessor be reset.
For
example, this occures when the device must return to real mode from
protected mode. If POST is executing when the microprocessor resets
itself, then the proper reentry must be made. To find the correct
point
at which to begin execution, POST reads CMOS RAM location 0Fh. This
one
byte location contains the microprocessor shutdown code that indicates
where POST should continue execution.
POST shutdown codes
The following are the microprocessor shutdown codes that the POST can
find at CMOS RAM location 0Fh:
00h = Normal execution of POST
01h = Chip set initialization for real mode reentry
04h = Jump to bootstrap code
05h = Issue an EOI and JMP to Dword pointer at 40:67h
06h = JMP to Dword pointer at 40:67h without EOI
07h = Return to INT 15h, Function AH=87h Block Move
08h = Return to POST memory test
09h = Return to INT 15h, Function AH=87h Block Move
0Ah = JMP to Dword pointer at 40:67h without EOI
0Bh = Return IRETS through 40:67h
If POST finds a shutdown code of 00h at CMOS RAM location 0Fh, it
performs its complete suite of tests an initializations. POST
also executes its complete suite of tests and initializations if
it finds any code other than the one listed above.
"
(Yes, I see the repeated functionality in the list.)
(ISTM for this method to work, the shutdown code must be checked)
(for very early in the POST execution in order to be restarted)
(without ending up in an endless loop.)
"
System RAM areas used by POST
The data definitions that POST uses are stored in the system RAM at
locations 40:12h, 40:15h, 40:67h, 40:6Bh, and 40:72h, but
initializes everything in 40:0h. See Chapter 3 for descriptions of
these data areas,
"
Chapter 3 Bios Data Area-
40:13h - 1 word - INT 12h - Installed memory in kilobytes (minus
size of the extended BIOS data area, if implemented)
40:15h - (not listed, omitted)
40:67h - 1 word - (*, **) - Address offset of option ROM
* - BIOS Service (INT nn) varies depending on which option ROM is
installed.
** - Also used by POST for return from RESET and by XT for cassette
data.
40:6Bh - 1 byte - POST - Last interrupt that occurred.
40:72h - 1 word - INT 09h,POST - Reset flag, where:
1234h = Bypass memory test
4321h = Preserve memory
64h = Burn-in mode
> > So it reports the GDTR and GDT, which are now the values
> > that were placed there in the prior boot of the bootstrap, not
> > what was leftover from the BIOS. Useful information?
> > -Well, it leads to a method whereby the bootstrap can tell
> > whether it booted previously. That is, whether the current
> > boot was thru int 19h or ctrl-alt-del. fwiw.
>
> Ah, if widely applicable, then that might be something Ben Lunt
> and James Harris would be interested in.
>
Good point, it may not be widely applicable, it remains to be tested
as needed.
Steve
> Rod Pemberton