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](/pubs/pc/reference/compaq/static/images/Compaq_DeskPro_386-16_System_Board_V2-640.jpg "link:/pubs/pc/reference/compaq/static/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 K.2 109592-003 109591-003 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](/modules/filedump/) command: filedump --file=109592-001.hex --merge=109591-001.hex --output=1988-01-28.json For a more human-readable dump, use this command: filedump --file=109592-001.hex --merge=109591-001.hex --comments And for those who prefer a binary file, the FileDump API can be used to recreate binary data from JSON data: > [http://www.pcjs.org/api/v1/dump?file=http://www.pcjs.org/devices/pc/bios/compaq/deskpro386/1988-01-28.json&format=rom](http://www.pcjs.org/api/v1/dump?file=http://www.pcjs.org/devices/pc/bios/compaq/deskpro386/1988-01-28.json&format=rom) Similarly, [1989-04-14.json]() was generated by first creating [1989-04-14.rom](http://www.pcjs.org/api/v1/dump?file=http://www.pcjs.org/devices/pc/bios/compaq/deskpro386/1989-04-14.json&format=rom) from the two 16Kb BIN files provided by [Al Kossow](http://www.vintage-computer.com/vcforum/member.php?2256-Al-Kossow): filedump --file=private/109592-005.U11.bin --merge=private/109591-005.U13.bin --output=private/1989-04-14.rom --format=rom filedump --file=private/1989-04-14.rom --output=1989-04-14.json 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](/pubs/pc/datasheets/static/27128A.pdf) datasheet -- the closest match I could find online. ![Compaq DeskPro 386 System ROM Version 2](/pubs/pc/reference/compaq/static/images/Compaq_DeskPro_386-16_System_ROM_V2_Breadboard-640.jpg "link:/pubs/pc/reference/compaq/static/images/Compaq_DeskPro_386-16_System_ROM_V2_Breadboard.jpg") 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. Producing Source Code with NDISASM --- From the current directory, I ran: ndisasm -o0x8000 private/1988-01-28.rom > 1988-01-28.nasm Then I massaged the output with a regex: ^([0-9A-F]+)\s+([0-9A-F]+)\s+(o32 |a32 |)([^\s]*) *(.*)$ --> \t$3$4\t$5\t\t\t; $1 $2 Then I ran custom TextOut command to clean up the code: node ~/Sites/pcjs/modules/textout/bin/textout --file=1988-01-28.nasm --nasm > t.nasm mv t.nasm 1988-01-28.nasm The result: [1988-01-28.nasm](1988-01-28.nasm). Now it needs a human touch.