Reorged interrupt info, added MS-DOS 3.21 images, and increased memory size of OS/2 1.0 machine to 2Mb

This commit is contained in:
Jeff Parsons 2015-08-26 13:25:34 -07:00
commit 95f7db7c94
11 changed files with 2100 additions and 189 deletions

View file

@ -1,10 +1,61 @@
MS-DOS 3.20
---
The MS-DOS 3.20 floppies in the PCjs collection had a printed date of `March 21, 1986` (see the photo below).
However, all the files on Disks 1 and 2 are timestamped `7-07-86 12:00p`.
Surprisingly Bad Bug in MS-DOS 3.20
---
If you attempt to boot MS-DOS 3.20 on an [IBM PC Model 5150](/devices/pc/machine/5150/cga/384kb/softkbd/) (with either
an MDA or CGA video card), the machine will appear to crash after printing the first character.
When MS-DOS 3.20 prints characters to the screen, it uses this code:
0287:1FA8 CD29 INT 29 ;history=7
0070:017A 50 PUSH AX ;history=6
0070:017B 56 PUSH SI ;history=5
0070:017C 57 PUSH DI ;history=4
0070:017D 55 PUSH BP ;history=3
0070:017E B40E MOV AH,0E ;history=2
0070:0180 B307 MOV BL,07 ;history=1
0070:0182 CD10 INT 10
AX=0E43 BX=0B07 CX=0010 DX=0000 SP=0862 BP=36FE SI=00D3 DI=000B
SS=0287 DS=0287 ES=0287 PS=F012 V0 D0 I0 T0 S0 Z0 A1 P0 C0
whereas MS-DOS 3.30 uses this code:
022F:222E CD29 INT 29 ;history=10
0070:069E 50 PUSH AX ;history=9
0070:069F 56 PUSH SI ;history=8
0070:06A0 57 PUSH DI ;history=7
0070:06A1 55 PUSH BP ;history=6
0070:06A2 53 PUSH BX ;history=5
0070:06A3 B40E MOV AH,0E ;history=4
0070:06A5 B700 MOV BH,00 ;history=3
0070:06A7 B307 MOV BL,07 ;history=2
0070:06A9 CD10 INT 10 ;history=1
MS-DOS 3.20 doesn't clear the BH register before calling INT 0x10 Video BIOS function 0x0E, and the Model 5150 Video
BIOS uses the BH register to select the video page, so when BH contains garbage (0x0B in the above example), it prints
characters off-screen, where they can’t be seen.
As a result, the machine hasn't technically "crashed", but it's printing characters where they can't be seen, making
the machine more or less unusable.
Starting with the IBM PC Model 5160, Video BIOS function 0x0E ignores BH and always use the current page.
Microsoft must not have tested MS-DOS 3.20 on any 5150 machines, or if they did, those machines must have contained
upgraded video cards, such as the EGA, which provided their own Video BIOS. This bug was fixed in MS-DOS 3.21,
but that release apparently wasn't made available until almost a year later (MS-DOS 3.21 files are timestamped
`5-01-87 12:00a`).
MS-DOS 3.20 Photos
---
Here's what one of the MS-DOS 3.20 diskettes looked like.
> ![MS-DOS 3.20 Programmer's Reference](MSDOS320-DISK3-PROGREF1-thumb.jpg "link:MSDOS320-DISK3-PROGREF1.jpg:nogallery")
And the box, courtesy of [www.oldcomputermuseum.com](http://www.oldcomputermuseum.com/os/msdos_3.2.html).
> ![MS-DOS 3.20 Box](http://www.oldcomputermuseum.com/os/os_files/msdos_3.2.jpg)
> ![MS-DOS 3.20 Box](http://www.oldcomputermuseum.com/os/os_files/msdos_3.2.jpg)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.19.2/manifest.xsl"?>
<manifest type="software">
<title>MS-DOS</title>
<version>3.21</version>
<type>DOS</type>
<category>Operating System</category>
<author>Microsoft</author>
<releaseDate>May 1, 1987</releaseDate>
<disk id="disk01" size="368640" chs="40:2:9" img="static/MSDOS321-DISK1.img" href="/disks/pc/dos/microsoft/3.21/MSDOS321-DISK1.json" md5="251b00fc091a252d655a3bc447eb330b" md5json="92c4a838698bef22ab51528d69636bbd">
<name>MS-DOS 3.21 (Disk 1)</name>
</disk>
<disk id="disk02" size="368640" chs="40:2:9" img="static/MSDOS321-DISK2.img" href="/disks/pc/dos/microsoft/3.21/MSDOS321-DISK2.json" md5="c55adcc046038c7909e3f27965ff9b8f" md5json="b891c15e24538935a9aeca47f69659ca">
<name>MS-DOS 3.21 (Disk 2)</name>
</disk>
</manifest>

View file

@ -3,9 +3,10 @@ Multitasking MS-DOS 4.00
These disk images contain the first unearthed copy of Microsoft's "multitasking" version of MS-DOS.
They were were discovered by the [PCjs Project](/docs/about/) in March 2013.
This version of MS-DOS was never officially released in North America. More information is available at
[Wikipedia](http://en.wikipedia.org/wiki/Multi-tasking_MS-DOS_4.0) and
[OS/2 Museum](http://www.os2museum.com/wp/?p=1769).
More information is available at
[Wikipedia](http://en.wikipedia.org/wiki/Multi-tasking_MS-DOS_4.0),
[OS/2 Museum](http://www.os2museum.com/wp/?p=1769), and
[MSDN Blogs](http://blogs.msdn.com/b/larryosterman/archive/2004/03/22/94209.aspx).
Note: The designation "4.0M" is not an official version number; it's an internal version number used only to
differentiate these disk images from those of the official MS-DOS 4.00 release in July 1988.
@ -14,3 +15,108 @@ The [IBM Model 5160](/devices/pc/machine/) machine configuration below boots MS-
"Session Manager" after it's booted, tap the **Alt** key.
[IBM Model 5160](/devices/pc/machine/5160/cga/640kb/dos400m/ "PCjs:ibm5160:::debugger")
Additional Information From [PC DOS Retro](https://sites.google.com/site/pcdosretro/multitaskingdos4) by Vernon Brooks
---
Multitasking MS-DOS 4.0 was a little known and separate development of DOS done in parallel with the development
of DOS 3.0 and 3.1 and was released in late 1985. It should not be confused with the later retail DOS 4.0 that was
released in 1988. DOS 4.0 supported preemptive multitasking, shared memory, semaphores, advanced memory management,
a session manager, imports, exports and a new executable format. Many of the ideas and features introduced here found
their way into OS/2. Unfortunately DOS 4.0 was limited by the real-mode 8086 environment and the 640KB address space.
Also programs which were not well-behaved or relied upon undocumented DOS functions would not run properly under
DOS 4.0, particularly TSR programs. Despite these limitations Microsoft wanted to make DOS 4.0 a retail product but
IBM at the time was not interested in such a version of DOS, instead they formed a joint development agreement with
Microsoft which resulted in the development of OS/2 1.0. Microsoft licensed DOS 4.0 to several European OEMs including
Goupil but it was never shipped in North America. Microsoft released an updated version, DOS 4.1 in late 1987 for
the British company International Computers Limited (ICL). DOS 4.1 incorporated features from DOS 3.2. Like its
predecessor, DOS 4.1 was never shipped in North America.
List of features and differences between standard DOS and Multitasking MS-DOS 4.0:
* based upon DOS 3.1
* INT 21h functions 00h-62h, 83h-91h, 95h-99h
* INT 21h functions 3300h-3302h
* INT 21h functions 4400h-440Ch
* INT 21h functions 4B00h, 4B01h, 4B03h, 4B04h-4B06h, 4B08h, 4B0Ch-4B0Eh
* INT 21h functions 5D00h-5D0Ah
* INT 21h functions 58h and 5D06h not supported
* new INT 21h functions:
* 61h: unknown function
* 8301h: get/set memory partition size
* 8400h-8402h: shared memory functions
* 8500h-8504h: semaphore functions
* 86h: set handle count
* 87h: get process id
* 8801h-8802h: unknown get/set function (handle related)
* 89h: sleep
* 8Ah: child wait
* 8Bh: JOIN/SUBST
* 8Ch: set signal handler
* 8Dh: send signal
* 8Eh: get/set process priority
* 8Fh: unknown function (vector related)
* 90h: unknown function (vector related)
* 91h: unknown function
* 95h: set hard error flag
* 96h: unknown function
* 97h: unknown function
* 98h: unknown function
* 99h: unknown function
* INT 21h functions 1Fh and 32h copy the DPB to DS:BX instead of returning a pointer in DS:BX
* INT 21h function 25h does not directly set interrupt vectors
* device driver command codes 00h-10h (same as DOS 3.x) and 11h-16h (new)
* new device driver command codes:
* 11h: stop console output
* 12h: restart console output
* 13h: generic ioctl (same as DOS 3.2+)
* 14h: unknown
* 15h: unknown
* 16h: unknown
* SYSVARS table:
* 00h DPB pointer (DPB length = 18h)
* 04h SFT pointer (SFT length = 37h)
* 08h CLOCK$ device pointer
* 0Ch KEYBD$ device pointer
* 10h SCREEN$ device pointer
* 14h disk buffer size
* 16h disk buffer chain pointer
* 1Ah ? (always 0, CDS pointer should be here)
* 1Eh FCB SFT pointer
* 22h FCB keep count
* 24h drive count
* 25h switch character
* 26h ? (code pointer)
* 2Ah NUL device header
* no MCB anchor at SYSVARS-2
* MCBs have previous MCB at 06h and next MCB at 08h (same seg as MCB = start/end of chain)
* InDOS flag is always FFh and the critical error flag does not precede it
* KEYBD$ and SCREEN$ in addition to CON
* no INT 28h or INT 2Ah function 84h idle callout
* no INT 2Ah critical section support
* no INT 2Fh redirector support
* no job file table in PSP
* INT 12h (40h:13h) value is altered to limit session memory
* CONFIG.SYS commands: BREAK, BUFFERS, COUNTRY, DEVICE, FCBS, FILES, LASTDRIVE, SHELL (same as DOS 3.1)
* additional internal commands: CALL, DETACH (DET), ENDLOCAL, EXTPROC, MEMSET, SETLOCAL
* NE format executables supported
* no PSP created for NE executables
* DOSCALLS exported function names:
* 01 ALLOCSEG
* 02 REALLOCSEG
* 03 FREESEG
* 04 LOCKSEG
* 05 UNLOCKSEG
* 06 GETSEGSIZE
* 07 GETDSHANDLE
* 08 CRITENTER
* 09 CRITLEAVE
* 0A FCRITENTER
* 0B FCRITLEAVE
* 0C PBLOCK
* 0D PRUN
* 0E SUBSCREEN
* 0F GETPIDS
* 10 DOSDISCARDCODE
* 11 DOSGETHANDLE
* 12 DOSHANDLEJUMP

View file

@ -16,6 +16,7 @@
<manifest ref="/disks/pc/dos/ibm/6.10/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/ibm/7.00/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.20/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.21/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.30/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/3.31/manifest.xml" disk="*"/>
<manifest ref="/disks/pc/dos/microsoft/4.0M/manifest.xml" disk="*"/>

View file

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/versions/pcjs/1.19.2/machine.xsl"?>
<machine id="ibm5170" class="pc" border="1" pos="center" background="#FAEBD7">
<name>IBM PC AT (8Mhz), 128Kb EGA, 1152Kb RAM, 20Mb Hard Disk</name>
<name>IBM PC AT (8Mhz), 128Kb EGA, 2Mb RAM, 20Mb Hard Disk</name>
<computer id="at-ega-1152k" name="IBM PC AT" buswidth="24"/>
<cpu id="cpu286" model="80286" cycles="8000000"/>
<ram id="ramLow" addr="0x00000" test="false" size="0xa0000" comment="ROM BIOS memory test has been disabled"/>
<ram id="ramExt" addr="0x100000" size="0x80000" comment=""/>
<ram id="ramLow" addr="0x00000" test="true" size="0xa0000" comment="ROM BIOS memory test has NOT 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"/>
<video ref="/devices/pc/video/ibm/ega/ibm-ega-128kb-autolockfs.xml"/>
<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" automount='{A:{name:"OS/2 1.0 (1.44M Install)",path:"/disks/pc/os2/ibm/1.0/OS210-INSTALL.json"}}'/>
<fdc ref="/disks/pc/library.xml" automount=''/>
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/os2/ibm/1.0/OS210-HDISK.json"}]'/>
<chipset id="chipset" model="5170" floppies="[1440,1200]"/>
<serial id="com1" adapter="1"/>