117 lines
5.9 KiB
Markdown
117 lines
5.9 KiB
Markdown
---
|
|
layout: page
|
|
title: COMPAQ DeskPro 386 ROMs
|
|
permalink: /devices/pcx86/rom/compaq/deskpro386/
|
|
redirect_from:
|
|
- /devices/pc/rom/compaq/deskpro386/
|
|
- /devices/pc/bios/compaq/deskpro386/
|
|
- /devices/pc/compaq/deskpro386/
|
|
- /devices/pc/rom/compaq/bios/deskpro386/
|
|
---
|
|
|
|
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.
|
|
|
|
[<img src="http://archive.pcjs.org/pubs/pc/reference/compaq/images/Compaq_DeskPro_386-16_System_Board_V2-640.jpg" alt="Compaq DeskPro 386 System Board Version 2"/>](http://archive.pcjs.org/pubs/pc/reference/compaq/images/Compaq_DeskPro_386-16_System_Board_V2.jpg)
|
|
|
|
Thanks to folks on the [Vintage Computer](http://www.vintage-computer.com/) 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](1988-01-28/1988-01-28.json) was created with the following [FileDump](/modules/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](1989-04-14/1989-04-14.json) was generated by first creating **1989-04-14.rom**
|
|
from the two 16Kb BIN files provided by [Al Kossow](http://www.vintage-computer.com/vcforum/member.php?2256-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](http://github.com/phooky/PROM/blob/master/tools/eeprom_read/eeprom_read.pde)
|
|
on a [chipKIT Uno32](http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,892,893&Prod=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](http://www.nycresistor.com/2012/07/07/stick-a-straw-in-its-brain-and-suck-how-to-read-a-rom/)"
|
|
by [NYC Resistor](http://www.nycresistor.com/) contributor [phooky](http://www.nycresistor.com/author/phooky/).
|
|
|
|
The DeskPro 386 ROMs were P27128A-2 chips, so I wired my Uno32 based on this
|
|
[27128A](http://archive.pcjs.org/pubs/pc/datasheets/27128A.pdf) datasheet -- the closest match I could find online.
|
|
|
|

|
|
|
|
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](/modules/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](1988-01-28/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.
|