Details regarding use of NDISASM

This commit is contained in:
Jeff Parsons 2015-04-06 16:25:48 -07:00 committed by jeffpar
commit 35d3e99c06
3 changed files with 26 additions and 5 deletions

View file

@ -1,3 +1,5 @@
org 0x8000
xchg bh,bl ; 00008000 86FB '..'
xor bh,bh ; 00008002 32FF '2.'
shl bx,1 ; 00008004 D1E3 '..'
@ -10604,15 +10606,17 @@ xdfee: lea di,[si+0x10] ; 0000DFEE 8D7C10 '.|.'
db 0xFF ; 0000DFFE FF '.'
db 0xFF ; 0000DFFF FF '.'
jmp short xe05e ; 0000E000 EB5C '.\'
db 'AUTHORS CAB93GLB93RWS93DJC93NPB(C)Copyright COMPAQ Computer Corporation 1982,83,84,85,86'
sub al,0xe9 ; 0000E05A 2CE9 ',.'
dec cx ; 0000E05C 49 'I'
db 0xDA ; 0000E05D DA '.'
xe05e: jmp 0xf000:0x8e31 ; 0000E05E EA318E00F0 '.1...'
db '((CC))CCooppyyrriigghhtt CCOOMMPPAAQQ CCoommppuutteerr CCoorrppoorraattiioonn 11998822,,8833,,8844,,8855,,8866,,8877--AAllll rriigghhttss rreesseerrvveedd..'
mov al,0xd ; 0000E105 B00D '.',0x0D 0x0D
db '((CC))CCooppyyrriigghhtt CCOOMMPPAAQQ CCoommppuutteerr CCoorrppoorraattiioonn 11998822,,8833,,8844,,8855,,8866,,8877--AAllll rriigghhttss rreesseerrvveedd..'
mov al,0xd ; 0000E105 B00D '.',0x0D 0x0D
out 0x84,al ; 0000E107 E684 '..'
mov al,0x12 ; 0000E109 B012 '..'
out 0x4b,al ; 0000E10B E64B '.K'

View file

@ -63,17 +63,33 @@ while the /PGM should be connected to INPUT HIGH VOLTAGE. So I wired pin 27 (/P
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
Producing BIOS Source Code
---
From the current directory, I ran:
In the current directory, I ran NDISASM (the disassembler included with NASM):
ndisasm -o0x8000 -se105h -se05ah -se6ffh -sf025h -sf8aah private/1988-01-28.rom > 1988-01-28.nasm
Then I ran the TextOut command, with the *--nasm* option, to clean up the code:
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.
Then I ran the PCjs [TextOut](/modules/textout/lib/) command, with the *--nasm* option, to prepare the code for reassembly:
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), can then be reassembled:
The result, [1988-01-28.nasm](1988-01-28.nasm), after a small amount of manual cleanup, can now be successfully reassembled:
nasm -f bin 1988-01-28.nasm -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 that 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'
Anyone care to take a stab at what `CAB93GLB93RWS93DJC93NPB` means? I've already confirmed that
[Google](https://www.google.com/?gws_rd=ssl#q=CAB93GLB93RWS93DJC93NPB) doesn't know.

View file

@ -175,6 +175,7 @@ var asExtsPlainText = [
"bas",
"hex",
"map",
"nasm",
"txt"
];