2019/06/07(金) [n年前の日記]
#1 [mz][prog] Z80用の逆アセンブラを試用
MZ-700のマニュアルの、巻末に乗っている 1Z-009Aのソースリストを眺め始めたのだけど、横になって印刷されてるから読み辛いなと。やはりソースリストは、PC画面+エディタで眺めたい。
そこでふと、Z80用の逆アセンブラで、バイナリを逆アセンブルしてソースリストを出力できたらどうだろうと思い立ち。
ググってみたところ、以下のページでそれらツールが紹介されていて。
_Z80 Development Tools
DASMx と DISASM 4 を試用してみようかなと。ちなみに環境は Windows10 x64 1809。
そこでふと、Z80用の逆アセンブラで、バイナリを逆アセンブルしてソースリストを出力できたらどうだろうと思い立ち。
ググってみたところ、以下のページでそれらツールが紹介されていて。
_Z80 Development Tools
DASMx と DISASM 4 を試用してみようかなと。ちなみに環境は Windows10 x64 1809。
◎ DISASM 4 を試用。 :
以下から入手。
_DISASMの詳細情報 : Vector ソフトを探す!
解凍すると色んなファイルが入ってるけど、Z80用なら、以下のファイルがあればいいのかなと。
ただ、このツールは昔のMS-DOS用なので、64bit/32bit版Windows のDOS窓上では「古過ぎるよ」と怒られて動かない。そういった、昔の MS-DOS用ツールを動かすには、エミュレータ等を経由しないといけない。
_MS-DOS Player for Win32-x64 謎WIPページ
解凍して、source/binary/ の中から、msdos.exe を入手。
msdos.exe と、DAZ80.EXE その他を、逆アセンブルしたいバイナリのあるフォルダにコピーして、以下のように打って実行。
hoge.lst が出力される。出力結果は以下のような感じ。タブ幅はおそらく8文字、だと思う。
コメント部分のカタカナが気になるけれど、ASCIIコードとして扱った場合はこうなる、みたいな情報かなと…。
しかし、ラベル等に任意の文字列を指定できない。できるのかもしれないけれど、やり方が分からない。
一応、hoge.bin に対し、hoge.def というテキストファイルを作成して、そこに各種指定を記述していけば出力結果が変わるらしいけど…。バイトデータやワードデータの指定はできるように見えたけど、ラベル名等については指定ができるのかちょっとよく分からなかった。
_DISASMの詳細情報 : Vector ソフトを探す!
解凍すると色んなファイルが入ってるけど、Z80用なら、以下のファイルがあればいいのかなと。
- DAZ80.EXE
- DISASM.HLP
- DISASM4.DOC
ただ、このツールは昔のMS-DOS用なので、64bit/32bit版Windows のDOS窓上では「古過ぎるよ」と怒られて動かない。そういった、昔の MS-DOS用ツールを動かすには、エミュレータ等を経由しないといけない。
_MS-DOS Player for Win32-x64 謎WIPページ
解凍して、source/binary/ の中から、msdos.exe を入手。
msdos.exe と、DAZ80.EXE その他を、逆アセンブルしたいバイナリのあるフォルダにコピーして、以下のように打って実行。
msdos DAZ80.exe hoge.bin
hoge.lst が出力される。出力結果は以下のような感じ。タブ幅はおそらく8文字、だと思う。
;MS-DOS Dis-Assem ( Z80 ) #1 < 1z009a.bin >
ORG 00000H
L0000: ;006D ;0528 ;071D ;0E4D
0000 C34A00 JP L004A ;テJ.
L0003: ;00B8 ;012B
0003 C3E607 JP L07E6 ;テ..
L0005 EQU 00005H ;0063
0006 C30E09 JP L090E ;テ..
L0009: ;0098 ;00AD ;010D ;0451
;05FA ;06C3 ;0F75 ;0FA1
0009 C31809 JP L0918 ;テ..
コメント部分のカタカナが気になるけれど、ASCIIコードとして扱った場合はこうなる、みたいな情報かなと…。
しかし、ラベル等に任意の文字列を指定できない。できるのかもしれないけれど、やり方が分からない。
一応、hoge.bin に対し、hoge.def というテキストファイルを作成して、そこに各種指定を記述していけば出力結果が変わるらしいけど…。バイトデータやワードデータの指定はできるように見えたけど、ラベル名等については指定ができるのかちょっとよく分からなかった。
◎ DASMx を試用。 :
DASMx ならラベル等の指定ができるらしいので、そちらも試用してみる。
dasmx140.zip というのが最終版、なのだろうか。ググって入手。
解凍して、Dasmx.exe を、逆アセンブルしたいバイナリの入ってるフォルダにコピー。以下で逆アセンブルできるらしい。
hoge.lst が生成される。出力結果は以下のような感じ。これもタブ幅は8文字の模様。
hoge.bin に対して hoge.sym というテキストファイルを作成して、そこに色々指定することで出力結果が変わるらしい。ただ、書き方がよく分からない。もう少し調べてみないと。
dasmx140.zip というのが最終版、なのだろうか。ググって入手。
解凍して、Dasmx.exe を、逆アセンブルしたいバイナリの入ってるフォルダにコピー。以下で逆アセンブルできるらしい。
Dasmx.exe -cZ80 -o 0x0000 hoge.bin
- -cZ80 で、Z80用として逆アセンブルする。
- -o 0x0000 で、開始用アドレスを指定。
hoge.lst が生成される。出力結果は以下のような感じ。これもタブ幅は8文字の模様。
;
; Disassembled by:
; DASMx object code disassembler
; (c) Copyright 1996-2003 Conquest Consultants
; Version 1.40 (Oct 18 2003)
;
; File: 1z009a.bin
;
; Size: 4096 bytes
; Checksum: B849
; CRC-32: 255C5074
;
; Date: Sat Jun 08 10:00:51 2019
;
; CPU: Zilog Z80 (Z80 family)
;
;
;
org 00000H
;
0000 L0000:
0000 : C3 4A 00 " J " jp L004A
0003 L0003:
0003 : C3 E6 07 " " jp L07E6
0006 : C3 0E 09 " " jp L090E
0009 L0009:
0009 : C3 18 09 " " jp L0918
000C L000C:
000C : C3 20 09 " " jp L0920
000F : C3 24 09 " $ " jp L0924
0012 L0012:
0012 : C3 35 09 " 5 " jp L0935
0015 : C3 93 08 " " jp L0893
hoge.bin に対して hoge.sym というテキストファイルを作成して、そこに色々指定することで出力結果が変わるらしい。ただ、書き方がよく分からない。もう少し調べてみないと。
[ ツッコむ ]
以上です。