Replying to a message of Jan Wagemakers to Craig Hart:
JW> Because the following has worked with only MSDOS Himem.sys
JW> loaded.
JW> /*
JW> mov ax,0
JW> mov ds,ax ;DS =
JW> mov word ptr [ds:0b8142h],8403h
Out of idle curiosity, what happens if you try this without himem.sys loaded?
I ask, because I have been reading Intel specs for years, and haven't got a
clue what this "Big Real" mode is supposed to be. There are 2 modes on Intel
32-bit CPUs, 16 and 32. The former has one flavour only, and looks basically
like one big DOS machine, while the latter has two flavours: native mode
(segment selectors, not segment addressing, 4 GB address space per selector),
and Virtual-86 mode, with the CPU set up to emulate one or more 80286
processors, each of which has the standard 1 MB "base" memory, plus anywhere
from 0 bytes to bytes of XMS.
If you try this code in 16-bit mode, you will definitely get a CPU exception,
I can't recall the number, but it will be a segment boundary violation. It is
possible that Himem.sys traps that exception with its own error handler,
analyzes the code that caused the exception, kicks the system into 32-bit
mode, and places the word in the specified place before returning to 16-bit
mode.
--- FleetStreet 1.20 NR
---------------
* Origin: BIG BANG Burger Bar: Regina SK Canada (1:140/86)
|