COMPAQ DeskPro 386 ROMs

The oldest COMPAQ DeskPro 386 ROM I have is a Rev J.4 ROM from a “Version 2” motherboard designed in 1987 and released in 1988.

Compaq DeskPro 386 System Board Version 2

Thanks to folks on the Vintage Computer forums, I also have a Rev N.1 ROM from 1989.

However, I’m still on the lookout for any “Version 1” motherboards from 1986, so that I can obtain dumps of COMPAQ’s ROMs for their earliest 80386-based systems.

System ROM Locations on COMPAQ DESKPRO 386 System Board Version 2 (Assembly No. 000558-001)

U13 (EVEN)
U15 (ODD)

System ROM Revisions

Rev  Even ROM #  Odd ROM #   Size  Date
---  ----------  ----------  ----  ----
E    108285-001  108284-001
F    108328-001  108327-001
G    108328-002  108327-002
H.8  113270-008  113269-008
J.4  109592-001  109591-001  32Kb  1988-01-28 (from a 386/16 motherboard)
K.2  109592-003  109591-003  32Kb  1988-05-10 (from a 386/25 motherboard)
M.1  109592-004  109591-004
N.1  109592-005  109591-005  32Kb  1989-04-14	

1988-01-28.json was created with the following FileDump command:

cd 1988-01-28
filedump --file=109592-001.hex --merge=109591-001.hex --output=1988-01-28.json

For a more human-readable dump, use the --comments option:

filedump --file=109592-001.hex --merge=109591-001.hex --output=1988-01-28.dump --comments

And for those who want a binary file, the FileDump API can be used to recreate binary data from JSON data:

http://localhost:8088/api/v1/dump?file=http://localhost:8088/devices/pcx86/rom/compaq/deskpro386/1988-01-28/1988-01-28.json&format=rom

Similarly, 1989-04-14.json was generated by first creating 1989-04-14.rom from the two 16Kb BIN files provided by Al Kossow:

cd 1989-04-14
filedump --file=archive/109592-005.U11.bin --merge=archive/109591-005.U13.bin --output=archive/1989-04-14.rom --format=rom
filedump --file=archive/1989-04-14.rom --output=1989-04-14.json

Dumping the ROMs

The .hex files for the 1988-01-28 DeskPro ROM were produced by running eeprom_read on a chipKIT Uno32 Arduino-compatible prototyping board, and capturing the serial port output on my MacBook Pro – as outlined in “Stick a Straw in Its Brain and Suck: How to Read a ROM” by NYC Resistor contributor phooky.

The DeskPro 386 ROMs were P27128A-2 chips, so I wired my Uno32 based on this 27128A datasheet – the closest match I could find online.

<img src="https://s3-us-west-2.amazonaws.com/archive.pcjs.org/pubs/pc/reference/compaq/images/Compaq_DeskPro_386-16_System_ROM_V2_Breadboard-640.jpg" alt="Compaq DeskPro 386 System ROM Version 2"/>

On my first dump attempt, every ROM address returned 0xFF. After looking at the 27128A datasheet more closely, I noticed the DEVICE OPERATION table indicated that, for a READ operation, /CE and /OE pins should be connected to INPUT LOW VOLTAGE, while the /PGM should be connected to INPUT HIGH VOLTAGE. So I wired pin 27 (/PGM) to +5V instead of GND, and the dump worked perfectly. The NYC Resistor article implied that every active low pin should be connected to GND, but apparently there are exceptions to that general rule.

Recreating ROM Source Code

In the current directory, an original ROM can be regenerated from the JSON-encoded file:

cd 1988-01-28
node ../../../../../../modules/filedump/bin/filedump --file=1988-01-28.json --output=1988-01-28.rom --format=rom

The ROM can then be fed into NDISASM, the disassembler included with NASM:

ndisasm -o0x8000 -se105h -se05ah -se6ffh -sf025h -sf8aah 1988-01-28.rom > 1988-01-28.asm

The -o0x8000 argument is required to “org” the file at the proper starting address, but the -s arguments are optional; they simply establish a few sync points within the ROM image that save a little cleanup effort, by preventing disassembly in the middle of instructions.

Next, the PCjs TextOut command, with the –nasm option, prepares the code for reassembly:

node ../../../../../../modules/textout/bin/textout --file=1988-01-28.asm --nasm > temp.asm
mv temp.asm 1988-01-28.asm

The result, 1988-01-28.asm, after a small amount of manual cleanup, can now be successfully reassembled:

nasm -f bin 1988-01-28.asm -l 1988-01-28.lst -o 1988-01-28.rom

However, it does NOT produce a binary identical to the original ROM, in part because of instruction ambiguities (ie, instructions that can be assembled multiple ways). It’s possible the reassembled ROM may still work, but more research is required.

One interesting section of the COMPAQ DeskPro ROM is this string at offset 0xE002:

db	'AUTHORS CAB93GLB93RWS93DJC93NPB(C)Copyright COMPAQ Computer Corporation 1982,83,84,85,86'

which appears to list the initials of 5 authors: CAB, GLB, RWS, DJC, and NPB. The meaning of the “93” sequences is unknown; they may have simply been a form of obfuscation.