More old OS/2 disk information
This commit is contained in:
parent
8eb1e0aa21
commit
aeb518f078
12 changed files with 445 additions and 11 deletions
|
|
@ -12,7 +12,7 @@
|
|||
<keyboard ref="/devices/pc/keyboard/keyboard-minimal-functions.xml"/>
|
||||
<debugger id="debugger" messages="fault" commands=""/>
|
||||
<panel ref="/devices/pc/panel/wide.xml"/>
|
||||
<fdc ref="/disks/pc/library.xml" width="340px" automount='{A: {name: "PC-DOS 3.20 (Disk 1)", path: "/disks/pc/dos/ibm/3.20/PCDOS320-DISK1.json"}, B: {name: "PC-DOS 3.20 (Disk 2)", path: "/disks/pc/dos/ibm/3.20/PCDOS320-DISK2.json"}}'/>
|
||||
<fdc ref="/disks/pc/library.xml" automount='{A: {name: "PC-DOS 3.20 (Disk 1)", path: "/disks/pc/dos/ibm/3.20/PCDOS320-DISK1.json"}, B: {name: "PC-DOS 3.20 (Disk 2)", path: "/disks/pc/dos/ibm/3.20/PCDOS320-DISK2.json"}}'/>
|
||||
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2}]'/>
|
||||
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
|
||||
<serial id="com1" adapter="1"/>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<name>IBM PC AT (8Mhz), 128Kb EGA, 2Mb RAM, 20Mb Hard Disk</name>
|
||||
<computer id="at-ega-2048k" name="IBM PC AT" buswidth="24"/>
|
||||
<cpu id="cpu286" model="80286" cycles="8000000"/>
|
||||
<ram id="ramLow" addr="0x00000" test="true" size="0xa0000" comment="ROM BIOS memory test has NOT been disabled"/>
|
||||
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
|
||||
<ram id="ramExt" addr="0x100000" size="0x160000" comment=""/>
|
||||
<rom id="romEGA" addr="0xc0000" size="0x4000" file="/devices/pc/video/ibm/ega/ibm-ega.json" notify="videoEGA"/>
|
||||
<rom id="romBIOS" addr="0xf0000" size="0x10000" alias="0xff0000" file="/devices/pc/bios/5170/1985-11-15.json"/>
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ redirect_from:
|
|||
OS/2 1.0 Debugger Boot Disk
|
||||
---
|
||||
|
||||
This disk contains a version of OS/2 1.0 built on October 12, 1988, which included the built-in kernel debugger
|
||||
This disk contained a version of OS/2 1.0 built on October 12, 1988, which included the built-in kernel debugger
|
||||
used by Microsoft and IBM for internal development, along with a rudimentary program selector.
|
||||
|
||||
Note that [IBM OS/2 1.0](/disks/pc/os2/ibm/1.0/) was finalized in October 1987, nearly a year before the timestamps
|
||||
|
|
|
|||
|
|
@ -9,24 +9,34 @@ Other OS/2 Disks
|
|||
|
||||
### OS/2 CP-DOS Boot Disk (v7.68)
|
||||
|
||||
The [OS/2 CP-DOS Boot Disk (v7.68)](/disks/pc/os2/misc/cpdos/86295/) contains a pre-1.0 version of OS/2
|
||||
The [OS/2 CP-DOS Boot Disk (v7.68)](/disks/pc/os2/misc/cpdos/86295/) contained a pre-1.0 version of OS/2
|
||||
(aka **CP-DOS** or **286DOS** or **DOS5**) built on October 22, 1986.
|
||||
|
||||
### OS/2 FOOTBALL Boot Disk (v7.68.17)
|
||||
|
||||
The [OS/2 FOOTBALL Boot Disk (v7.68.17)](/disks/pc/os2/misc/football/87058/) contains a prototype version of OS/2
|
||||
The [OS/2 FOOTBALL Boot Disk (v7.68.17)](/disks/pc/os2/misc/football/87058/) contained a prototype version of OS/2
|
||||
from February 1987 that was designed to test two important new features of the Intel 80386 processor: paging and V86-mode.
|
||||
This prototype was forked from pre-1.0 OS/2 sources, and the only hardware it supported was the Compaq DeskPro 386-16.
|
||||
|
||||
### OS/2 FOOTBALL Boot Disk (v4.41.00)
|
||||
|
||||
The [OS/2 FOOTBALL Boot Disk (v4.41.00)](/disks/pc/os2/misc/football/87357/) contains an updated FOOTBALL prototype.
|
||||
The [OS/2 FOOTBALL Boot Disk (v4.41.00)](/disks/pc/os2/misc/football/87357/) contained an updated FOOTBALL prototype.
|
||||
It was built in December 1987, using final OS/2 1.0 sources merged with assorted FOOTBALL changes, and although
|
||||
it was originally assigned version number 1.3, this version of OS/2 would ultimately become 2.0.
|
||||
|
||||
### OS/2 SIZZLE Boot Disk (v7.68.18)
|
||||
|
||||
The [OS/2 SIZZLE Boot Disk (v7.68.18)](/disks/pc/os2/misc/cpdos/87007/) contained a pre-1.0 version of OS/2
|
||||
(aka **CP-DOS** or **286DOS** or **DOS5**) built on January 7, 1987.
|
||||
|
||||
### OS/2 SIZZLE Boot Disk (v7.68.18 DEBUG)
|
||||
|
||||
The [OS/2 SIZZLE Boot Disk (v7.68.18 DEBUG)](/disks/pc/os2/misc/cpdos/87007/debug/) was largely identical to the
|
||||
previous disk, with the exception of a *DEBUG* kernel (with built-in debugger) and a different assortment of tools.
|
||||
|
||||
### OS/2 1.0 Debugger Boot Disk
|
||||
|
||||
The [OS/2 1.0 Debugger Boot Disk](/disks/pc/os2/misc/1.0/88286/) contains a version of OS/2 1.0 built on
|
||||
The [OS/2 1.0 Debugger Boot Disk](/disks/pc/os2/misc/1.0/88286/) contained a version of OS/2 1.0 built on
|
||||
October 12, 1988, which included the built-in kernel debugger used by Microsoft and IBM for internal development,
|
||||
along with a rudimentary program selector. For more details, see the [OS/2 1.0](/blog/2014/12/04/) blog post.
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ machines:
|
|||
OS/2 CP-DOS Boot Disk (v7.68)
|
||||
---
|
||||
|
||||
This disk contains a pre-1.0 version of OS/2 (aka **CP-DOS** or **286DOS**) built on October 22, 1986.
|
||||
This disk contained a pre-1.0 version of OS/2 (aka **CP-DOS** or **286DOS**) built on October 22, 1986.
|
||||
|
||||
When this disk boots, the following message is displayed on-screen:
|
||||
|
||||
|
|
|
|||
90
disks/pc/os2/misc/cpdos/87007/README.md
Normal file
90
disks/pc/os2/misc/cpdos/87007/README.md
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
---
|
||||
layout: page
|
||||
title: OS/2 SIZZLE Boot Disk (v7.68.18)
|
||||
permalink: /disks/pc/os2/misc/cpdos/87007/
|
||||
machines:
|
||||
- id: ibm5170
|
||||
type: pc-dbg
|
||||
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/machine.xml
|
||||
automount:
|
||||
A:
|
||||
name: OS/2 SIZZLE Boot Disk (v7.68.18)
|
||||
path: /disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107.json
|
||||
---
|
||||
|
||||
OS/2 SIZZLE Boot Disk (v7.68.18)
|
||||
---
|
||||
|
||||
This disk contained a pre-1.0 version of OS/2 (aka **CP-DOS** or **286DOS**) built on January 7, 1987.
|
||||
|
||||
When this disk boots, the following message is displayed on-screen:
|
||||
|
||||
CP-DOS version 1.0
|
||||
Copyright 1986 IBM Corp.
|
||||
|
||||
SIZZLE Internal revision 7.68.18, 86/12/12
|
||||
|
||||
A directory listing of this disk is provided [below](#directory-of-os2-sizzle-boot-disk-v76818).
|
||||
|
||||
{% include machine.html id="ibm5170" %}
|
||||
|
||||
### Directory of OS/2 SIZZLE Boot Disk (v7.68.18)
|
||||
|
||||
Volume in drive A has no label
|
||||
|
||||
Directory of A:\
|
||||
|
||||
IBMBIO COM 49408 01-07-87 12:18p
|
||||
IBMDOS COM 172881 01-07-87 11:45a
|
||||
OSO001 MSG 40730 01-07-87 1:41p
|
||||
CMD EXE 47056 10-22-86 7:41p
|
||||
COMMAND COM 23724 10-22-86 7:41p
|
||||
COUNTRY SYS 6175 10-22-86 7:57p
|
||||
MSG EXE 5824 10-22-86 7:58p
|
||||
NLS EXE 3124 10-23-86 8:38a
|
||||
SWAPPER EXE 4150 10-22-86 8:04p
|
||||
ANSICALL EXE 3165 01-07-87 12:19p
|
||||
BKSCALLS EXE 3611 01-07-87 12:21p
|
||||
BMSCALLS EXE 2064 01-07-87 12:23p
|
||||
BVSCALLS EXE 11710 01-07-87 12:30p
|
||||
DOSCALL1 EXE 7071 01-07-87 12:33p
|
||||
KBDCALLS EXE 4138 01-07-87 12:34p
|
||||
MONCALLS EXE 5655 01-07-87 12:35p
|
||||
MOUCALLS EXE 5177 01-07-87 12:36p
|
||||
QUECALLS EXE 11508 01-07-87 1:03p
|
||||
SESMGR EXE 25744 01-07-87 1:41p
|
||||
SHELL EXE 4096 01-07-87 1:43p
|
||||
VIOCALLS EXE 9833 01-07-87 1:10p
|
||||
COM SYS 12342 10-22-86 10:11p
|
||||
COM MSG 144 10-22-86 10:39a
|
||||
EXTDSKDD EXE 1885 10-22-86 7:31p
|
||||
MOUSE00 SYS 12342 10-22-86 7:31p
|
||||
MOUSE01 SYS 12342 10-22-86 7:32p
|
||||
MOUSE02 SYS 12342 10-22-86 7:32p
|
||||
MOUSE03 SYS 12854 10-22-86 7:31p
|
||||
POINTDD SYS 4240 10-22-86 7:32p
|
||||
VDISK SYS 4662 10-22-86 7:33p
|
||||
OSO001H MSG 82177 01-07-87 1:40p
|
||||
IBMBIO MAP 14290 01-07-87 12:18p
|
||||
IBMDOS MAP 75444 01-07-87 11:45a
|
||||
CONFIG SYS 138 01-05-87 3:42p
|
||||
DOS3TOOL <DIR> 01-07-87 2:21p
|
||||
TEMP BAT 13 01-10-87 4:41p
|
||||
36 file(s) 692059 bytes
|
||||
|
||||
Directory of A:\DOS3TOOL
|
||||
|
||||
. <DIR> 01-07-87 2:21p
|
||||
.. <DIR> 01-07-87 2:21p
|
||||
MSC EXE 29428 02-10-86 10:12a
|
||||
CL EXE 27655 12-07-86 3:49p
|
||||
P1 EXE 130969 12-07-86 3:49p
|
||||
P2 EXE 116077 12-07-86 3:49p
|
||||
P3 EXE 115357 12-07-86 3:49p
|
||||
7 file(s) 419486 bytes
|
||||
|
||||
Total files listed:
|
||||
43 file(s) 1111545 bytes
|
||||
88576 bytes free
|
||||
|
||||
Return to [Other OS/2 Disks](/disks/pc/os2/misc/).
|
||||
100
disks/pc/os2/misc/cpdos/87007/debug/README.md
Normal file
100
disks/pc/os2/misc/cpdos/87007/debug/README.md
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
---
|
||||
layout: page
|
||||
title: OS/2 SIZZLE Boot Disk (v7.68.18 DEBUG)
|
||||
permalink: /disks/pc/os2/misc/cpdos/87007/debug/
|
||||
machines:
|
||||
- id: ibm5170
|
||||
type: pc-dbg
|
||||
config: /devices/pc/machine/5170/ega/1152kb/rev3/debugger/machine.xml
|
||||
automount:
|
||||
A:
|
||||
name: OS/2 SIZZLE Boot Disk (v7.68.18 DEBUG)
|
||||
path: /disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107-DEBUG.json
|
||||
---
|
||||
|
||||
OS/2 SIZZLE Boot Disk (v7.68.18 DEBUG)
|
||||
---
|
||||
|
||||
This disk contained a *DEBUG* pre-1.0 version of OS/2 (aka **CP-DOS** or **286DOS**) built on January 7, 1987, and
|
||||
it is largely identical to the [OS/2 SIZZLE Boot Disk (v7.68.18)](/disks/pc/os2/misc/cpdos/87007/), with
|
||||
the exception of a *DEBUG* kernel (with built-in debugger) and a different assortment of tools.
|
||||
|
||||
When this disk boots, the following message is displayed on-screen:
|
||||
|
||||
CP-DOS version 1.0
|
||||
Copyright 1986 IBM Corp.
|
||||
|
||||
SIZZLE Internal revision 7.68.18, 86/12/12
|
||||
|
||||
A directory listing of this disk is provided [below](#directory-of-os2-sizzle-boot-disk-v76818-debug).
|
||||
|
||||
{% include machine.html id="ibm5170" %}
|
||||
|
||||
### Directory of OS/2 SIZZLE Boot Disk (v7.68.18 DEBUG)
|
||||
|
||||
Volume in drive A has no label
|
||||
|
||||
Directory of A:\
|
||||
|
||||
IBMBIO COM 53056 01-07-87 2:41p
|
||||
IBMDOS COM 202569 01-07-87 2:39p
|
||||
OSO001 MSG 40730 01-07-87 1:41p
|
||||
CMD EXE 47056 10-22-86 7:41p
|
||||
COMMAND COM 23724 10-22-86 7:41p
|
||||
COUNTRY SYS 6175 10-22-86 7:57p
|
||||
MSG EXE 5824 10-22-86 7:58p
|
||||
NLS EXE 3124 10-23-86 8:38a
|
||||
SWAPPER EXE 4150 10-22-86 8:04p
|
||||
ANSICALL EXE 3165 01-07-87 12:19p
|
||||
BKSCALLS EXE 3611 01-07-87 12:21p
|
||||
BMSCALLS EXE 2064 01-07-87 12:23p
|
||||
BVSCALLS EXE 11710 01-07-87 12:30p
|
||||
DOSCALL1 EXE 7071 01-07-87 12:33p
|
||||
KBDCALLS EXE 4138 01-07-87 12:34p
|
||||
MONCALLS EXE 5655 01-07-87 12:35p
|
||||
MOUCALLS EXE 5177 01-07-87 12:36p
|
||||
QUECALLS EXE 11508 01-07-87 1:03p
|
||||
SESMGR EXE 25744 01-07-87 1:41p
|
||||
SHELL EXE 4096 01-07-87 1:43p
|
||||
VIOCALLS EXE 9833 01-07-87 1:10p
|
||||
COM SYS 12342 10-22-86 10:11p
|
||||
COM MSG 144 10-22-86 10:39a
|
||||
EXTDSKDD EXE 1885 10-22-86 7:31p
|
||||
MOUSE00 SYS 12342 10-22-86 7:31p
|
||||
MOUSE01 SYS 12342 10-22-86 7:32p
|
||||
MOUSE02 SYS 12342 10-22-86 7:32p
|
||||
MOUSE03 SYS 12854 10-22-86 7:31p
|
||||
POINTDD SYS 4240 10-22-86 7:32p
|
||||
VDISK SYS 4662 10-22-86 7:33p
|
||||
OSO001H MSG 82177 01-07-87 1:40p
|
||||
IBMBIO MAP 14557 01-07-87 2:41p
|
||||
IBMDOS MAP 83303 01-07-87 2:39p
|
||||
CONFIG SYS 138 01-05-87 3:42p
|
||||
DOS3TOOL <DIR> 01-07-87 2:49p
|
||||
35 file(s) 733508 bytes
|
||||
|
||||
Directory of A:\DOS3TOOL
|
||||
|
||||
. <DIR> 01-07-87 2:49p
|
||||
.. <DIR> 01-07-87 2:49p
|
||||
MASM EXE 95369 12-07-86 3:50p
|
||||
LINK4 EXE 75544 10-22-86 7:55p
|
||||
MAKE EXE 49120 07-02-86 3:49p
|
||||
TRESP EXE 14133 08-01-86 10:57a
|
||||
LIB EXE 29359 06-27-86 4:00a
|
||||
LINK EXE 47547 06-27-86 4:00a
|
||||
IMPLIB EXE 23396 10-22-86 7:57p
|
||||
SED EXE 19882 01-15-85 4:47p
|
||||
RELOC EXE 15635 05-14-86 12:00p
|
||||
MKMSGF EXE 14830 09-10-86 1:07p
|
||||
MSGBIND EXE 12966 07-18-86 11:47a
|
||||
MSGSPLIT EXE 11188 09-19-86 7:58a
|
||||
SYMDEB EXE 37021 10-16-85 4:00a
|
||||
BOOT BAT 169 01-07-87 2:43p
|
||||
16 file(s) 446159 bytes
|
||||
|
||||
Total files listed:
|
||||
51 file(s) 1179667 bytes
|
||||
19456 bytes free
|
||||
|
||||
Return to [Other OS/2 Disks](/disks/pc/os2/misc/).
|
||||
1
disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107-DEBUG.json
Normal file
1
disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107-DEBUG.json
Normal file
File diff suppressed because one or more lines are too long
1
disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107.json
Normal file
1
disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107.json
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -15,8 +15,10 @@ machines:
|
|||
OS/2 FOOTBALL Boot Disk (v7.68.17)
|
||||
---
|
||||
|
||||
This disk contains a prototype version of OS/2 from February 1987, code-named **FOOTBALL** (aka **PIGSKIN**).
|
||||
It predates the completion of OS/2 1.0 by some eight months.
|
||||
This disk contained a prototype version of OS/2 from February 1987, code-named **FOOTBALL** (aka **PIGSKIN**).
|
||||
It predated the completion of OS/2 1.0 by some eight months.
|
||||
|
||||
See the original [Design Document](#design-document) describing the **FOOTBALL** prototype.
|
||||
|
||||
On boot, the following message is displayed on-screen:
|
||||
|
||||
|
|
@ -133,4 +135,228 @@ Under PCjs, the kernel crashes shortly thereafter. This issue is still under in
|
|||
CPGREP EXE 25286 10-21-86 9:08p
|
||||
31 File(s) 549888 bytes free
|
||||
|
||||
Design Document
|
||||
---
|
||||
|
||||
The following text is from an email titled "3xBox Design Document" sent to the
|
||||
*football* alias on Saturday, February 28, 1987, at 5:02pm.
|
||||
|
||||
### Overview
|
||||
|
||||
The goal for this research project was to demonstrate the feasability of
|
||||
supporting multiple virtual DOS 3.x machines on a 286DOS-based kernel running
|
||||
on an 386 personal computer. Each "3xBox" would have its own virtual screen,
|
||||
keyboard, interrupt vectors, and address space. Furthermore, well- behaved
|
||||
DOS 3.x applications that do text (as opposed to graphic) screen output would
|
||||
run in the background.
|
||||
|
||||
In order to acheive this goal in a reasonable amount of time, we started from
|
||||
the 286DOS "sizzle" kernel and made the minimum amount of changes necessary,
|
||||
both in code and fundamental design. The resulting DOS will be referred to
|
||||
as "386DOS" in this paper.
|
||||
|
||||
386DOS provides up to four 3xBoxes, depending upon the available RAM. More
|
||||
3xBoxes could be supported if a slight change is made to the method of
|
||||
allocating page tables.
|
||||
|
||||
Well-behaved DOS 3.x applications (i.e., MS-Multiplan, MS-Word, Lotus 1-2-3)
|
||||
can run in the background, multi-tasking against one another and against the
|
||||
foreground screen group. Lotus 1-2-3 (version 2.01) passes its floppy-based
|
||||
copy protection when in the foreground.
|
||||
|
||||
It should be noted that 386DOS, while functional, is not an optimal design/
|
||||
implementation of multiple 3xBoxes. In particular, interrupt management, the
|
||||
device driver model, and the existence of V86-mode kernel code should be
|
||||
modified before 386DOS is made a commercial product.
|
||||
|
||||
Unless stated otherwise, most of the concepts extant in 286DOS apply to 386DOS.
|
||||
|
||||
### V86 Mode and the 386
|
||||
|
||||
The 386 CPU has three distinct execution modes: REAL, PROT, and V86. REAL
|
||||
and PROT modes are largely compatible with the corresponding modes of an 286.
|
||||
V86 modes is exactly the same as RING 3 PROT mode, with the following
|
||||
differences:
|
||||
|
||||
o Memory Address Hierarchy
|
||||
A 386 has three levels of memory addresses:
|
||||
- Virtual (Intel refers to this as Logical)
|
||||
This is either the selector:offset or segment:offset address used
|
||||
by unprivledged machine language code.
|
||||
- Linear
|
||||
This is the 32-bit address arrived at either via a GDT/LDT
|
||||
selector lookup, or via the 8086-compatible (seg << 4 + offset).
|
||||
- Physical
|
||||
This is the 32-bit address arrived at by pushing a linear address
|
||||
through the paging mechanism. This is the address that the CPU
|
||||
sends out on the bus to select physical memory.
|
||||
|
||||
When in V86 mode, the CPU performs the 8086-compatible computation.
|
||||
|
||||
o I/O instructions are NOT IOPL-sensitive
|
||||
Trapping of I/O is done using the IO Permission Map.
|
||||
|
||||
o All instructions which modify or expose the Interrupt Flag ARE IOPL-
|
||||
sensitive.
|
||||
This allows the OS to simulate the Interrupt Flag, if desired.
|
||||
|
||||
### V86 IRETD Frame
|
||||
|
||||
When any interrupt, trap, exception, or fault occurs in V86 mode, the CPU
|
||||
switches to PROT mode and switches to the TSS Ring 0 Stack and builds the
|
||||
following stack frame:
|
||||
|
||||
(0) (old GS)
|
||||
(0) (old FS)
|
||||
(0) (old DS)
|
||||
(0) (old ES)
|
||||
(0) (old SS)
|
||||
(old ESP)
|
||||
(old EFLAGS)
|
||||
(0) (old CS)
|
||||
(old EIP) <- (SS:SP)
|
||||
|
||||
### CPU Mode Determination
|
||||
|
||||
A new implementation of the WHATMODE macro was written in order to distinguish
|
||||
between the three CPU modes: REAL, PROT, and V86. REAL mode is indicated by
|
||||
a 0 PE bit in CR0 (a.k.a. MSW on a 286). If the PE bit is 1, then the mode
|
||||
may be either PROT or V86. These two modes may be distinguished by attempting
|
||||
to change the IOPL bits in the FLAGS word. At Ring 0 in PROT mode (the only
|
||||
place WHATMODE is used), the IOPL may be changed. In V86 mode, IOPL cannot
|
||||
be changed. So, we change IOPL and then check to see if it changed. If so,
|
||||
PROT mode, else V86 mode.
|
||||
|
||||
### CPU Mode Switching
|
||||
|
||||
The 286DOS kernel relies extensively on switching inbetween REAL and PROT.
|
||||
This functionality is provided by the RealMode and ProtMode routines.
|
||||
In 386DOS, RealMode is no longer needed. As soon as we switch to PROT mode
|
||||
during SysInit, the CPU only uses PROT and V86 modes.
|
||||
|
||||
Two new routines, ProtToV86 and V86ToProt, that are analogous to RealMode and
|
||||
ProtMode. ProtToV86 is quite straightforward. We build a V86 IRETD frame
|
||||
on the stack with the VM bit set in the EFLAGS image. We set the SS:SP
|
||||
image to be equivalent to the stack just above the V86 IRETD frame, and
|
||||
set the CS:IP image to instruction following an IRETD. Then, we issue the
|
||||
IRETD and the CPU continues processing following the IRETD and in V86 mode.
|
||||
|
||||
V86ToProt is a bit trickier. The only way to get out of V86 mode is to
|
||||
trap or fault or issue a software interrupt. We chose to use a software
|
||||
interrupt, 30h, which we call the V86 Services interrupt. The INT 30h entry
|
||||
in the IDT is a ring 3 interrupt gate, so issuing an INT 30 from V86 mode
|
||||
causes a V86 IRETD frame to be built on the TSS Ring 0 stack and control
|
||||
transfers to the INT 30h vector. The handler verifies that the INT 30h
|
||||
was issued by the V86ToProt routine (checks CS:IP on the stack). If not,
|
||||
the interrupt is reflected back to the requesting 3xBox (See Interrupt
|
||||
Reflection). If it was V86ToProt, we clean off the stack frame and return to
|
||||
the caller. NOTE: V86 Services is also used for completing the 386 LOADALL
|
||||
used by PhysToVirt to map "high" memory in "REAL" mode.
|
||||
|
||||
### Stack Switching
|
||||
|
||||
In order to maintain the 286DOS mode switch and stack switch semantics
|
||||
when V86 mode is used, we have a new stack (the V86 Stack) in the 3xBox PTDA.
|
||||
|
||||
### 286DOS Modes and Stacks
|
||||
|
||||
The RealMode and ProtMode procedures in 286DOS are the only ways to switch
|
||||
the CPU execution mode. These routines both maintain SS:SP, allowing
|
||||
RealMode and ProtMode to be reentrant. The TSS Ring 0 stack is always the
|
||||
current TCB stack in the current PTDA. The only other stacks in the system
|
||||
are the Interrupt Stack and user stack(s).
|
||||
|
||||
### 386DOS Modes and Stacks
|
||||
|
||||
In 386DOS, any interrupt or exception while in V86 mode causes a switch to
|
||||
PROT mode and the TSS Ring 0 Stack. So we have a new way to mode switch with
|
||||
an incompatible stack semantic. We had to fix this mode switch to make it
|
||||
compatible with 286DOS.
|
||||
|
||||
### Observation
|
||||
|
||||
In V86 mode, the current stack must not be the TSS Ring 0 Stack. The CPU
|
||||
only leaves V86 mode via an interrupt/exception, which causes a stack switch
|
||||
to the TSS Ring 0 Stack. If the current stack was the same as the TSS Ring 0
|
||||
Stack, then the stack might get corrupted. In 286DOS, the Ring 0 Stack is
|
||||
the PTDA. Since we run on this stack in V86 mode, we need a new Ring 0 stack
|
||||
when a 3xBox is running.
|
||||
|
||||
### Approach
|
||||
|
||||
1) When a PMBox is running, the TSS Ring 0 Stack is a PTDA TCB stack.
|
||||
+ This is consistent with the 286DOS model.
|
||||
|
||||
2) When a 3xBox is running, the TSS Ring 0 Stack is the "V86 Stack".
|
||||
+ The V86 Stack is allocated in the 3xBox PTDA.
|
||||
+ If the cause of the mode switch can be handled without enabling
|
||||
interrupts (e.g., interrupt reflection, IN/OUT trapping), we stay
|
||||
on the V86 stack.
|
||||
+ Otherwise, copy the V86 IRETD frame to the previous stack and
|
||||
switch back to the previous stack.
|
||||
|
||||
### Details
|
||||
|
||||
1) Leaving V86 mode
|
||||
a. V86ToProt (analog of ProtMode)
|
||||
+ Issue special V86ToProt software interrupt. If the interrupt
|
||||
gate is DPL=3 (and it must be a 386 Interrupt Gate), then the 386
|
||||
switches to Ring 0 (and the TSS Ring 0 stack) and transfers
|
||||
control to the handler.
|
||||
+ To ensure that 3xBox apps don't use this feature, the interrupt
|
||||
handler checks that CS=DosGroup and IP is in the correct range.
|
||||
If not, then the interrupt is reflected (see below).
|
||||
+ To make V86ToProt compatible with ProtMode, the interrupt handler
|
||||
switches to the old stack (we get SS:ESP from TSS Ring 0 stack,
|
||||
which is where we are running).
|
||||
+ Finally, V86ToProt restores saved registers and flags from the
|
||||
stack and returns to caller.
|
||||
|
||||
b. Software interrupt
|
||||
+ GP-Fault handler reflects to 3xBox IVT handler in V86 mode.
|
||||
o Add IRET frame on old stack, taking IP, CS, FLAGS from
|
||||
TSS Ring 0 Stack.
|
||||
o Look up handler in 3xBox IVT.
|
||||
o Edit TSS Ring 0 Stack EIP and CS to point to IVT handler.
|
||||
o IRETD
|
||||
+ IVT interrupt handler IRET uses IRET frame we built on old stack.
|
||||
|
||||
c. Hardware interrupt
|
||||
+ To make this operation compatible with 286Dos, the interrupt
|
||||
handler copies the V86 stack from the TSS Ring 0 stack to
|
||||
the old stack, then switches stacks to the newly modified old
|
||||
stack. This allows the Interupt Manager to do an IRETD to
|
||||
get back to the correct mode.
|
||||
|
||||
d. Exception
|
||||
+ Remain on V86 stack, process exception, and IRETD.
|
||||
|
||||
2) Entering V86 mode
|
||||
a. ProtToV86
|
||||
+ Build V86 IRETD frame on current stack and IRETD.
|
||||
b. LinToVirtDM_HANDLE
|
||||
+ Execute 386 LOADALL with VM bit set in EFLAGS image in loadall
|
||||
buffer.
|
||||
|
||||
### Interrupt Management
|
||||
|
||||
All software interrupts, hardware interrupts, and CPU traps and exceptions
|
||||
are vectored through a common IDT, regardless of whether the CPU is in PROT
|
||||
or V86 mode.
|
||||
|
||||
NOTE: Background 3xBoxes get no hardware interrupts. In the commercial 386DOS,
|
||||
this restriction can be relaxed so that interrupts, other than for the
|
||||
keyboard and mouse (since those are implicitly for the foreground box),
|
||||
can be given to background 3xBoxes.
|
||||
|
||||
### Passing Hardware Interrupts to the Foreground 3xBox
|
||||
|
||||
In the interrupt manager:
|
||||
|
||||
IF a 3xBox is foreground -AND-
|
||||
the current mapped 3xBox is background
|
||||
THEN
|
||||
MapIn foreground 3xBox;
|
||||
Dispatch interrupt;
|
||||
|
||||
Return to [Other OS/2 Disks](/disks/pc/os2/misc/).
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ machines:
|
|||
OS/2 FOOTBALL Boot Disk (v4.41.00)
|
||||
---
|
||||
|
||||
This disk contains an updated version of [OS/2 FOOTBALL Boot Disk (v7.68.17)](/disks/pc/os2/misc/football/87058/).
|
||||
This disk contained an updated version of [OS/2 FOOTBALL Boot Disk (v7.68.17)](/disks/pc/os2/misc/football/87058/).
|
||||
It was built in December 1987, using final OS/2 1.0 sources merged with assorted FOOTBALL changes, and although
|
||||
it was originally assigned version number 1.3, this version of OS/2 would ultimately become 2.0.
|
||||
|
||||
|
|
|
|||
|
|
@ -14,4 +14,10 @@
|
|||
<disk id="disk04" size="1228800" chs="80:2:15" img="1.0/static/OS210-88286.img" href="/disks/pc/os2/misc/1.0/OS210-88286.json">
|
||||
<name>OS/2 1.0 Debugger Boot Disk</name>
|
||||
</disk>
|
||||
<disk id="disk05" size="1228800" chs="80:2:15" img="cpdos/static/SIZZLE-76818-19870107.img" href="/disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107.json" md5="be9f5b8f1b7882cf039f254ac11d9b2e" md5json="1a666f759f0e5dd27251626b4bc290dd">
|
||||
<name>OS/2 SIZZLE Boot Disk (v7.68.18)</name>
|
||||
</disk>
|
||||
<disk id="disk06" size="1228800" chs="80:2:15" img="cpdos/static/SIZZLE-76818-19870107-DEBUG.img" href="/disks/pc/os2/misc/cpdos/SIZZLE-76818-19870107-DEBUG.json" md5="c0bc3c29cf5cd319b2104ea091090cf3" md5json="fc59fc2622dbd459f88d79368c631fec">
|
||||
<name>OS/2 SIZZLE Boot Disk (v7.68.18 DEBUG)</name>
|
||||
</disk>
|
||||
</manifest>
|
||||
|
|
|
|||
Loading…
Reference in a new issue