Vintage PC pages
Home -> Vintage PCs -> Compaq Portable III

The Compaq Portable III


Where the Portable and Portable II have a fairly similar design, with a desktop-ish ISA motherboard in a big case with a little CRT, the Portable III makes some more radical changes:

Video output

The video hardware is a superset of CGA, with a doubled vertical resolution (640x400 rather than 640x200), outputting on an amber plasma display.

There is no font ROM. The font (8x8 or 8x16) is held in another bank of video RAM, and loaded by the BIOS at boot time.

Some I/O ports used by the video hardware are:

13C6h [r/w]
	Bits 0-2: Master mode. 0=CGA  1=EGA  3=MDA  Other values unknown
	Bit 3:    Active monitor. Set for internal, reset for external.
		  When an external monitor is in use, the font is assumed 
		  to be 8x8; otherwise, it is 8x16.
	Bit 6:    If, when read, this is 0, then the Compaq extended video
                  functions (INT 10h / AX = 0BFh) are available.
17C6h [read]
	Video hardware capabilities. As described in the Interrupt List:

	Bit 0:    0 if CGA supported, else 1.
	Bits 1-2: Reserved (1)
	Bit 3:    0 if MDA supported, else 1.
	Bit 4:    0 if BitBlt engine supported, else 1.
	Bit 5:    0 if 132-column mode is available, else 1.
	Bit 6:    0 if 640x480x256 mode is available, else 1.
	Bit 7:    0 if 8-bit DAC is available, else 1.

	On my system, this returns 0E6h -- ie, CGA, MDA and BitBlt engine.

1BC6h [read]
	Bits 0-3: External monitor type
	Bits 4-7: Internal monitor type
		   0=> none
		   1=> dual-mode monitor
		   2=> CGA 640x200
		   3=> Compaq Color monitor
		   4=> 640x400 flat panel
                  (INT 10h/AX=BF03h describes other possible values, but 
                   these are VGA types not supported by the Portable).

23C6h [r/w]
	Bit 0:    Set for 400-line graphics mode. Reset for 200-line graphics
                  mode or for text.
	Bit 3:    Set to map the character generator RAM into memory where
                  the video RAM would normally be (at B8000 or B0000). The 
		  main font is at offset 0, the alternate font at offset 
		  1000h. Character cells are always 16 rows high; on an 
                  external CGA monitor, only the top 8 will be displayed.
	Bit 4:    Active intensity bit interpretation (toggled by INT 10h
                  with AX=1402h and BL=0B1h)
	Bits 5-7: plasma high intensity attribute is treated as:
		   0 => Ignore   
		   1 => Reverse video
		   2 => Underscore
		   3 => Alternate font
		   4 => Half intensity

27C6h [r/w]
	Bits 0-5: Plasma timeout in minutes, 0-3Fh.
	Bits 6-7: Unknown. Always 0 when written; masked off when read.


The Portable has two drive bays. One, which is the width of a normal 5.25" bay but not as high, contains a slimline high-density 5.25" floppy drive. The other, which is a full-sized bay, contains a 3.5" ATA hard drive on a shock-absorbing mount. The design of the case would also permit a twin-floppy configuration.

The BIOS supports only predefined drive geometries; if you want to use anything else, you'll need to use a disk manager overlay. For reference, the geometries are:

TypeCylindersHeadsSectorsCapacityLanding zoneWrite precompensationControl byte
130641710.2 M3051280x00
261541720.4 M6381280x00
361561730.6 M6151280x00
4102481768.0 M10235120x00
594061746.8 M9395120x00
669751728.9 M6961280x00
746281730.7 M5112560x00
892551738.4 M9241280x00
99001517112.1 M899-10x08
1098051740.7 M980-10x00
1192571753.7 M9241280x00
1292591769.1 M9241280x08
1361281740.6 M6112560x00
1498041732.5 M9801280x00
150000.0 M000x00
1661241720.3 M61200x00
1798051740.7 M9801280x00
1896661748.1 M9661280x00
19102381767.9 M1023-10x00
2073351730.4 M7322560x00
2173371742.6 M7322560x00
2280561740.1 M805-10x00
2392481761.4 M924-10x00
249661417112.3 M966-10x08
259661617128.3 M966-10x08
2610231417118.9 M1023-10x08
27966101780.2 M966-10x08
28748161799.3 M748-10x08
2980562661.3 M805-10x00
3061542530.0 M6151280x00
3161582560.1 M6151280x00
3290592599.4 M9051280x08
3374883499.3 M748-10x00
34966734112.3 M966-10x00
35966834128.3 M966-10x00
36966934144.3 M966-10x08
3796653480.2 M966-10x00
386111663300.7 M611-10x08
3910231133181.3 M1023-10x08
4010231534254.8 M1023-10x08
4110231533247.3 M1023-10x08
4210231663503.5 M1023-10x08
4380542640.9 M805-10x00
4480522620.4 M805-10x00
4574883396.4 M748-10x00
4674863372.3 M748-10x00
4796652559.0 M9661280x00


The keyboard controller (part number 106436-001) is probably the same one used in the Portable II. It supports all the functions of IBM's AT keyboard controller, plus a few of its own, mainly to set the processor speed.

XT keyboard compatibility

The original IBM AT keyboard controller has a backward-compatible mode where it supports an XT keyboard. This has to be selected manually. There are then three modes it can operate in:

  1. AT keyboard, scancode translation from Set 3 to Set 1
  2. AT keyboard, no scancode translation (native Set 3 codes)
  3. XT keyboard, no scancode translation (native Set 1 codes)

The Compaq keyboard controller goes further, by auto-sensing the keyboard type. If an XT keyboard is connected but the IBM-compatible 'use XT protocol' option has not been selected, it will make the keyboard appear to be an AT keyboard, simulating responses to commands such as 'set LEDs' or 'set repeat rate'. Depending what keyboard is connected, it can operate in five modes:

  1. AT keyboard, scancode translation from Set 3 to Set 1
  2. AT keyboard, no scancode translation (native Set 3 codes)
  3. XT keyboard (selected manually), no scancode translation (native Set 1 codes)
  4. XT keyboard (simulating AT), no scancode translation (native Set 1 codes)
  5. XT keyboard (simulating AT), reverse scancode translation (translates from Set 1 to Set 3)

The difference between modes 3 and 4 is how the keyboard is presented to the PC. In mode 3, the PC knows it has an XT keyboard. In mode 4, the PC thinks it has an AT keyboard (unless it queries the real keyboard type with command 0A5h below).

Keyboard controller commands

For more details see table P0401 in the Interrupt List, file PORTS.A:

Set 6MHz speed
Set 8MHz speed
Set 16MHz speed
Toggle CPU speed
Special read (get keyboard type and other values). In the value returned:
	Bit    5 set for XT keyboard, clear for AT.
	Bits 2,3 give CPU speed.
		 Bits 2 and 3 set:  8 MHz
		 Bit  2 set:       16 MHz
		 Else:              6 MHz (if available; see below).
Set CPU speed limit. Followed by one byte giving the new limit (0 or 1).

On some motherboards(?), port 86h also seems to be involved in CPU speed switching. When read:

	If bits 6 and 7 are set, CPU speed is 16MHz, slowing to 8MHz during 
                              floppy access.
	If bit 3 is set,   8MHz and 16MHz are available.
		    clear, 6MHz, 8MHz and 16MHz are available.

When the CPU speed is being set, this port is used if the value read had bit 3 set. Various permuations of bits 5,6,7 are then used to select the speed.


The Portable III has 32k of BIOS in two 16k chips.

John Elliott 18 July 2012.