Details regarding use of NDISASM
This commit is contained in:
parent
fd323fc9c7
commit
35d3e99c06
3 changed files with 26 additions and 5 deletions
|
|
@ -1,3 +1,5 @@
|
||||||
|
org 0x8000
|
||||||
|
|
||||||
xchg bh,bl ; 00008000 86FB '..'
|
xchg bh,bl ; 00008000 86FB '..'
|
||||||
xor bh,bh ; 00008002 32FF '2.'
|
xor bh,bh ; 00008002 32FF '2.'
|
||||||
shl bx,1 ; 00008004 D1E3 '..'
|
shl bx,1 ; 00008004 D1E3 '..'
|
||||||
|
|
@ -10604,15 +10606,17 @@ xdfee: lea di,[si+0x10] ; 0000DFEE 8D7C10 '.|.'
|
||||||
db 0xFF ; 0000DFFE FF '.'
|
db 0xFF ; 0000DFFE FF '.'
|
||||||
db 0xFF ; 0000DFFF FF '.'
|
db 0xFF ; 0000DFFF FF '.'
|
||||||
jmp short xe05e ; 0000E000 EB5C '.\'
|
jmp short xe05e ; 0000E000 EB5C '.\'
|
||||||
|
|
||||||
db 'AUTHORS CAB93GLB93RWS93DJC93NPB(C)Copyright COMPAQ Computer Corporation 1982,83,84,85,86'
|
db 'AUTHORS CAB93GLB93RWS93DJC93NPB(C)Copyright COMPAQ Computer Corporation 1982,83,84,85,86'
|
||||||
|
|
||||||
sub al,0xe9 ; 0000E05A 2CE9 ',.'
|
sub al,0xe9 ; 0000E05A 2CE9 ',.'
|
||||||
dec cx ; 0000E05C 49 'I'
|
dec cx ; 0000E05C 49 'I'
|
||||||
db 0xDA ; 0000E05D DA '.'
|
db 0xDA ; 0000E05D DA '.'
|
||||||
xe05e: jmp 0xf000:0x8e31 ; 0000E05E EA318E00F0 '.1...'
|
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 '..'
|
out 0x84,al ; 0000E107 E684 '..'
|
||||||
mov al,0x12 ; 0000E109 B012 '..'
|
mov al,0x12 ; 0000E109 B012 '..'
|
||||||
out 0x4b,al ; 0000E10B E64B '.K'
|
out 0x4b,al ; 0000E10B E64B '.K'
|
||||||
|
|
|
||||||
|
|
@ -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
|
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.
|
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
|
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
|
node ~/Sites/pcjs/modules/textout/bin/textout --file=1988-01-28.nasm --nasm > t.nasm
|
||||||
mv t.nasm 1988-01-28.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
|
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.
|
||||||
|
|
|
||||||
|
|
@ -175,6 +175,7 @@ var asExtsPlainText = [
|
||||||
"bas",
|
"bas",
|
||||||
"hex",
|
"hex",
|
||||||
"map",
|
"map",
|
||||||
|
"nasm",
|
||||||
"txt"
|
"txt"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue