mieki256's diary



2019/06/07(金) [n年前の日記]

#1 [mz][prog] Z80用の逆アセンブラを試用

MZ-700のマニュアルの、巻末に乗っている 1Z-009Aのソースリストを眺め始めたのだけど、横になって印刷されてるから読み辛いなと。やはりソースリストは、PC画面+エディタで眺めたい。

そこでふと、Z80用の逆アセンブラで、バイナリを逆アセンブルしてソースリストを出力できたらどうだろうと思い立ち。

ググってみたところ、以下のページでそれらツールが紹介されていて。

_Z80 Development Tools

DASMx と DISASM 4 を試用してみようかなと。ちなみに環境は Windows10 x64 1809。

DISASM 4 を試用。 :

以下から入手。

_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 を、逆アセンブルしたいバイナリの入ってるフォルダにコピー。以下で逆アセンブルできるらしい。

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 というテキストファイルを作成して、そこに色々指定することで出力結果が変わるらしい。ただ、書き方がよく分からない。もう少し調べてみないと。

以上です。

過去ログ表示

Prev - 2019/06 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project