TOP > 逆アセンブラ

1.ゲーム用 逆アセンブラ 2.更新情報 3.基本使用  4.「設定」部  5.「逆アセンブル」部
6.右クリック 7.ROMアドレス検索-A 8.ROMアドレス検索-B 9.メニュー 10.Z80 ニーモニック表示について 


1.ゲーム用 逆アセンブラ

ソフト名 使用方法 表示方法  対応ファイル(拡張子)
NES 6502逆アセンブラ - リニアスイープ ファミコンのROM
(*.nes)
FDS 6502逆アセンブラ 使用方法 リニアスイープ

ディスクカードのROM
 (*.fds ヘッダなし対応/*.nes[map20]) : ディスクBIOSのROM(*.rom)

SNES 65816逆アセンブラ 使用方法 リニアスイープ スーファミのROM
(*.smc/*.sfc)
SNES SPC700逆アセンブラ - リニアスイープ スーファミのサウンドファイル
(*.spc) ファイルサイズ$10180以上[SPCヘッダがあり65920bytes以上のファイル]
PCE 6280逆アセンブラ - リニアスイープ PCエンジンのROM
 (*.pce)
GB Z80C逆アセンブラ - リニアスイープ ゲームボーイのROM
 (*.gb/*.gbc)
SMS Z80逆アセンブラ - リニアスイープ SC-3000/SG-1000/マーク3/ゲームギアのROM
 (*sc/*.sg/*.sms/*.gg)
MSX Z80逆アセンブラ - リニアスイープ MSXのROM
 (*.rom)

TOPページよりダウンロードしてください。「.NET Framework 4.0」ランタイム 
 

2.更新情報


 

3.基本使用


ROMイメージファイルをフォームにドラッグ&ドロップします。(メニューの「ファイル」からも開くことができます。またアイコンにドラッグ&ドロップすることも可能です。)

・FDS 6502逆アセンブラの場合
自動的にコールドスタート逆アセをします。

@ROMイメージのアドレスを指定します。

・FDS 6502逆アセンブラの場合
ブロック名を指定します。(PRG/RAMのみ)

・その他
ROMイメージのアドレスを指定します。
xx:yyyyyy
xx はバンクNo
yyyyyy はROMイメージのアドレスとなります。

A逆アセンブルを開始します。

・下部に逆アセの結果が表示されます。


4.「設定」部
 

NES

 FDS

SNES

 SPC

GB

 PCE

SMS

MSX

 
A:バンクタイプ バンクタイプを選択します。選択によりC・Dが変動します。
:リスト選択 チェックを入れるとそのリストが逆アセの対象となります。(1回目の読込時はチェックを外すことができません)
C:メモリマップ NES/MSXはバンクタイプにより変動します。GB/SMS/PCEは固定です。
D:ROM 逆アセンブルするROMイメージの開始アドレスを指定します。XXYYYY XXはバンクNoでYYYYはROMのアドレスとなります。
E再コールドスタータ 指定のロードNoを再度コールドスタートします。
F:逆アセンブル開始 逆アセンブルを開始します。FDSはPRGのみとなります。
G:検索 「ROMアドレス検索」を表示/非表示にします。[8.「ROMアドレス検索」部]参照
H:メモリマップ開始アドレス メモリマップの開始アドレスを選択します。
I:A X Y レジスタ A X Y レジスタの表示を AUTO(自動的に16bit,8bit表示)/2byte(16bit) /1byte(8bit) にします。
J:メモリマップ速度 「SLOW」 または「FAST」の切り替えをします。注意:切り替えをすると今までの逆アセがクリアされます。
K:008000 00:8000-00:FFFFのメモリマップを逆アセ表示します。

 
5.「逆アセンブル」部
 
■L :タブ (メモリマップ)
●各タブに メモリマップが自動的に割り当てられています。

■M:アドレスメモリー
「逆アセンブルリスト(P) 」
の1行をダブルクリックすると
そのアドレスを記録します。
また、呼び出し・ジャンプ・分岐命令がある場合は
さらにその移動先に移動します。
●記録したアドレスに戻る場合は、「<< 」をクリックします。
●記録した全アドレスをクリアする場合は、「X」をクリックします。
●M1/M2の2ヶ所に記録することができます。
●連続して100個記録することができます。
記録だけで移動したくない場合は、右クリックで記録して下さい。
例 
1 アドレス「8000」をダブルクリック(自動的に 「8000」を記録)
2 アドレス「9000」をダブルクリック(自動的に 「9000」を記録)
3 アドレス「A000」をダブルクリック(自動的に 「A000」を記録)
4 アドレス「B000」をダブルクリック(自動的に 「B000」を記録)
5 「<<」1回目 「B000」へ移動します(自動的に「B000」削除)
6 「<<」2回目 「A000」へ移動します(自動的に「A000」削除)
7 「<<」3回目 「9000」へ移動します(自動的に「9000」削除)
8 「<<」4回目 「8000」へ移動します(自動的に「8000」削除)

■N:アドレスブックマーク
ブックマークするアドレスを入力し、「BM」で登録します。
複数登録することができます。
右クリックの「アドレス ブックマーク」からでも登録することができます。
ブックマークしたアドレスに移動したい場合は、
リストから選択して「JP」をクリックします。
クリアしたい場合は、「X」をクリックします。

■O:アドレスジャンプ
移動したいアドレスを 入力します。場合によって「JP」をクリックします。
クリアしたい場合は、「X」をクリックします。

■P:逆アセンブルリスト
逆アセンブル結果を表示します。
1行をダブルクリックするとそのアドレスを記録し、ジャンプ・分岐命令がある場合はさらにそのジャンプ先に移動します。

■Q下記情報を表示します。
NES:MAP/PRG/CHR/NMI/RST/IRQ
FDS:NMI1/NMI2/NMI3/RST/IRQ
SNES:MODE/ROMサイズ/SRAMサイズ
    N(ネイティブ) COP/BRK/ABT/NMI/IRQ
    E(エミュレーション) COP/ABT/NMI/RST/IRQ
SPC:保存前のレジスタ情報
PCE:IRQ2/IRQ1/TIRQ/NMI/RST

GB:ROM-SIZE/RAM-SIZE/CRAT-TYPE/
        VBI/LSI/TMR/STC/HLP
SMS:INIT/ NMI
MSX:INIT/STATEMENT/DEVICE/TEXT

下線があるものは、クリックするとリスト上に対象となるアドレスが
あれば移動します。

6.「逆アセンブルリスト」 右クリック

■JSR元を検索/JMP元を検索/分岐元を検索

  
  
■JSR元を検索(CALL元)/■JMP元を検索(JP元)/■分岐元を検索(JR元)
選択したアドレスに対するジャンプ元/分岐元を検索することができます。

・±0は、クリックした「アドレス」
・+1は、クリックした「アドレス+1」
・+2は、クリックした「アドレス+2」

検索結果は「ROMアドレス検索結果リスト(Z)」に表示されます。

右上の画像では $8054 の分岐元(±0) を検索しています。
その結果(Z)は、$01804C $018051 となっています。
この2つはROMイメージのアドレスなので、これをメモリマップのアドレスで表すと $804C $8051  となます。
その結果、「$804C 」と、「$8051 」から分岐していることがわかります。
また、「ROMアドレス検索結果リスト(Z)」の一行をダブルクリックすると「逆アセンブルリスト(P)」に対象となるアドレスがあれば
「逆アセンブルリスト(P)」のアドレスに移動することができます。


■リスト内検索



■リスト内検索
・オペコード+オペランド
・ニーモニック1
・ニーモニック2

検索結果は「ROMアドレス検索結果リスト(Z)」に表示されます。
「ROMアドレス検索結果リスト(Z)」の一行をダブルクリックすると
「逆アセンブルリスト(P)」のアドレスに移動することができます。



■再逆アセンブル
 
■再逆アセンブル
選択したアドレスから任意のアドレスまで(100行)、再度逆アセンブルします。

データからプログラムに切り替わるときに、読み間違いがあることがあります。
またSNES65816の場合、AXYレジスタの8/16bitにより、読み間違いがあることがあります。
このようなときは、再逆アセンブルして読み直すと正しい結果が得られます。

右上画像は、C000 がデータです。
しかし ASL $78D8,X として処理されています。
開始アドレスを「 +1 [C001〜] 」に指定して
終了アドレスは、C003は正しいので、C003までの2行 を再逆アセンブルします。
そうすると正しい結果が得られます。

■アドレスをメモリー

■[M1]アドレスをメモリー/■[M2]アドレスをメモリー
アドレスを記録しますが、ジャンプ・分岐命令があっても移動はしません。
(ダブルクリックとは違います)

■[M1/M2]を切り替える
M1←→M2のチェックを切り替えます。

■アドレス ブックマーク
右クリックしたアドレスをブックマークします。
(5.「逆アセンブル」部 ■N:アドレスブックマーク)参照


■挿入/編集/削除

■挿入/編集
リストの1行を挿入/編集/削除ができます。
Mne1とMne2は自動表示です。

:アドレス
:オペコード
:オペランド
:備考
:データ扱いにする場合、チェックを入れます。
:選択行を選びます。
1.2.3.4 をクリアします。
:選択行を削除します。
:選択行の上に挿入します。
10:選択行を編集(上書き)します。

■削除
選択行を削除します。

 

■コピー(クリップボード)

■選択行コピー
選択行から任意の行(100行まで)までクリップボードにコピーします。

■選択リストコピー
選択したリスト全部をクリップボードにコピーします。


■ニーモニック詳細

■ニーモニック詳細
選択したアドレスに対するニーモニック詳細表示をします。 

参考資料」:参考資料を呼び出します(オプションの参考資料と同じ)
論理演算」:論理演算を呼び出します(オプションの論理演算と同じ)
表示」:「逆アセンブルリスト(P)」で選択している行のニーモニック詳細表示をします。
」:「逆アセンブルリスト(P)」で選択している上の行のニーモニック詳細表示をします。
」:「逆アセンブルリスト(P)」で選択している次の行のニーモニック詳細表示をします。



■カラーチェック

■カラーチェック 青/赤/黄
選択したアドレス1行に色を付けることができます。

■カラーチェック外す
色付けしたアドレス1行の色を外します。




7.「ROMアドレス検索」部 - A
 



 ROMアドレス検索画面が表示になります。
 ROMアドレス検索画面が非表示になります。
・検索結果はROMイメージのアドレスとなりますのでご注意下さい。
・NESの場合はPRG領域の検索となります。

■R:I/O 8「ROMアドレス検索」部 - B参照

■Sバンク 8「ROMアドレス検索」部 - B参照

■Tオペコード3行
A9 **
BD ** **
8D ** ** の連続した3行を検索する場合は、

         オペコード(16進)
     _____________
    ↓        ↓        ↓
1行 [
A9 ][ 2 ] 2行 [ BD ][ 3 ] 3行 [ 8D ]と入力します。
       ↑        ↑
    オペコード+オペランドの数

■UJSR/JMP 1000単位
1000単位ごとのJSR/JMPのあるアドレスを検索します。
重複するJSR/JMPを削除する場合は、「重削」にチェックをいれます。

■Vオペコード・オペランド
$4123にジャンプ(JSR)するものを検索する場合は、
code [
20 ] rand [ 4123 ] と入力します。
入力は16進となります。
オペコードは入力しなくてもよろしいです。
その場合全てのオペランドを検索することになります。
(検索数が多くなり時間がかかります。)
また、「ALL」はROM内全域で、「1000h単位」は1000hごとの検索となります。

■X:検索を開始します。

■W:「ROMアドレス検索結果リスト(Z) 」をクリアします。

■Y検索毎に「ROMアドレス検索結果リスト(Z) 」をクリアしたい場合は、
チェックを入れます。

■Z:ROMアドレス検索結果を表示します。
「ROMアドレス検索結果リスト(Z) 」
の一行をダブルクリックすると
「逆アセンブルリスト(P)」
に対象となるアドレスがあれば
「逆アセンブルリスト(P)」
のアドレスに移動することができます。
 

 

8.「ROMアドレス検索」部 - B
 
 R:I/Oポート アドレス検索
NES PCE GB SG/SMS/GG MSX SNES/SPC
[$2000-2002] PPU
[$2003-2004] SPR
[$2005] SCROLL
[$4000-4003] SND-CH1
[$4004-4007] SND-CH2
[$4008-400B] SND-CH3
[$400C-400F] SND-CH4
[$4010-4013] SND-PCM
[$4014] SPR-RAM
[$4015] SND-CH
[$4016-4017] JOYPAD
[$4017] F-IRQ
[$0000] VDC-REGIST
[$0001] VDC-STATUS
[$0002] VDC-DATA-L
[$0003] VDC-DATA-M
[$0400] VCE-RESET
[$0402] VCE-P-OFFL
[$0403] VCE-P-OFFM
[$0404] VCE-P-16-L
[$0405] VCE-P-16-M
[$0800] PSG-CHANNE
[$0801] PSG-VOLUME
[$0802] PSG-FRE-L
[$0803] PSG-FRE-H
[$0804] PSG-ON
[$0805] PSG-BALANC
[$0806] PSG-WAVE
[$0807] PSG-NOISE
[$0808] PSG-LFO-FR
[$0809] PSG-LFO-CN
[$0C00] TMR-RELOAD
[$0C01] TMR-CONTRO
[$1000] CONTROLPAD
[$1402] IRQ-MASK
[$1403] IRQ-S/TIRQ
[$FF00] P1
[$FF01] SB
[$FF02] SC
[$FF04] DIV
[$FF05] TIMA
[$FF06] TMA
[$FF07] TAC
[$FF0F] IF
[$FF10-14] SND1
[$FF16-19] SND2
[$FF1A-1E] SND3
[$FF20-23] SND4
[$FF24] SND-VOL
[$FF25] SND-CNT
[$FF26] SND-ON/OFF
[$FF30-3F] WaveRAM
[$FF40-41] LCDC/STAT
[$FF42-43] SCY/SCX
[$FF44] LY
[$FF45] LYC
[$FF46] DMA
[$FF47] BGP
[$FF48-49] BGPO/OBP1
[$FF4A-4B ]WY/WX
[$FF4D] KEY1
[$FF4F] VBK
[$FF51-55] HDMA
[$FF56] RP
[$FF58-59] BCP
[$FF6A-6B] OCP
[$FF70] SVBK
[$FFFF] IE
[$00] JOY/COUNTLY(GG)
[$3E] ? (MASTER)
[$3F] COUNTLY
[$7E] V-COUNTER
[$7F] H-COUNTER
[$7F] PSG
[$BE] VDP-DATA
[$BF] VDP-CONTL
[$DC] JOYPAD
[$DD] JOYPAD/EX/CO
[$DC-DF] KEYBOAD
[$F0-F2] FM-UNIT
BIOS
[$
000C] RDSLT
     |
[$0189] PCMREC

I/O Port
[7C-7D]MSX-MUSIC (FM)
[80-87]RS232
[88-8B]VDP
[90-91]ULA5RA087
[98-9B]99XX VRAM/VPD
[A0-A2]PSG
[A8-AB]PPI
[B0-B3]SONY-RAMPACK
[B4-B5]RP-5C01-RTC
[B8-BB]SANYO-L-PEN
[BC-BF]VHD-CONTROL
[C0-C1]MSX-AUDIO
[C8-CF]MSX-INTERF
[D0-D7]DISK-CONTROL
[D8-DB]Kanji ROM
[E5-E7]MSX-ENGINE
[F5]SYSTEM CONT
[F6]COLOR BUS
[F7]AUDIO/VIDEO
[FC-FF]RAM BANK
SNES
I/O 2000-4FFF

SPC
I/O F0-FF
 Sバンク切り替え アドレス検索
NES  PCE  GB  SG/SMS/GG  MSX  SNES/SPC
マッパー別に対応しています。
対応マッパー
1,2,3,4,5,7,9,10,16,18,19
21,22,23,24,25,26
32,33,34,65,66,67,68,69
70,72,73,75,76,77,78
80,82,85,86,87,88,89
92,93,94,95,96,97
101,118,180,184,185,188

マッパー 2,3の場合、
改造ROM、自作ROMには対応していません。
MPR0 $0000-$1FFF R/W
MPR1 $2000-$3FFF R/W
MPR2 $4000-$5FFF R/W
MPR3 $6000-$7FFF R/W
MPR4 $8000-$9FFF R/W
MPR5 $A000-$BFFF R/W
MPR6 $C000-$DFFF R/W
MPR7 $E000-$FFFF R/W
$0000-$3FFF Write
$4000-$7FFF
Write
$8000-$BFFF RAM-
Write
$0000-$3FFF R/W
$4000-$7FFF R/W
$8000-$BFFF R/W

ASCII 8K
ROM 4000-5FFF
ROM 6000-7FFF
ROM 8000-9FFF
ROM A000-BFFF
RAM

ASCII 16K
ROM 4000-7FFF
ROM 8000-BFFF
RAM

KONAMI 8K
ROM 6000-7FFF
ROM 8000-9FFF
ROM A000-BFFF

KONAMI SCC 8K
ROM 4000-5FFF
ROM 6000-7FFF
ROM 8000-9FFF
ROM A000-BFFF
RAM
SCC

OTHER
ALL(BANK:4000-BFFF)

 

なし

 
9.メニュー

■ファイル → 保存

 

■保存
逆アセンブルした結果を出力します。

NES
・テキスト形式で出力
・アセンブル入力形式をTXT形式で出力
・BIN形式出力
・NSF形式出力(簡易NSFヘッダ)

FDS
・テキスト形式で出力
・プロック04をbin形式で出力

SNES
・テキスト形式で出力

SPC
・テキスト形式で出力

PCE
・テキスト形式で出力

GB
・テキスト形式で出力
・BIN形式出力
・GBS形式出力(簡易GBSヘッダ)

SMS/MSX
・テキスト形式で出力
・BIN形式出力
・KSS形式出力(簡易KSSヘッダ) 


■オプション → 参考資料

■参考資料

NES
6502オペコード表
I/O PORT
FDS
6502オペコード表
I/O PORT
WORK RAM/BIOS
SNES
65816オペコード表
I/O PORT
SPC
SPC700オペコード表
I/O PORT
PCE
6280オペコード表
I/O PORT
バンク
GB
Z80Cオペコード表
I/O PORT
SMS
Z80オペコード表
I/O PORT
PSG
MSX
Z80オペコード表
BIOS/I/O PORT/PSG/マッパー
 


■オプション → 論理演算

■論理演算
論理演算/シフト/ローテートの計算と同時にフラグの計算もします。

--- 6502/6280/65816/SPC700 ---
AND ORA EOR BIT ASL LSR ROL ROR ADC SBC CMP(CPX/CPY)

--- Z80/Z80C ---
AND OR XOR RLCA RRCA RLC RRC RL RR SLA SRL SRA RLD RRD ADC SBC ADD SUB CP

■オプション → メモリーマップ推測

■メモリマップ推測/解析
SNES/SPCはありません。
FDSはヘッダ情報表示となります。


■オプション → 読込み設定

■読込み設定
「FDS6502」と「SNES65816」は、この機能はありません。

起動直後は、「メモリから読込む」の設定になっています。

・メモリから読込む
最初に一度だけファイルを読込みます。
読込み後、ファイル編集してもその内容が反映されません。

・ファイルから読込む
逆アセンブルするたびにファイルを読み込みます。
バイナリエディター等でファイルを編集した場合、その内容が反映されます。

※ファイルサイズ変更/ファイル名変更/ファイル移動/ファイル削除 をした場合、読み込むことができません。
※ヘッダを変更しても、最初に読み込んだときの情報が表示されます。
※その他機能は、逆アセ後から有効になります。


■オプション → デバッグ
■デバッグ
「NES6502」と「FDS6502」のみの対応です。

============= 手動入力解析 =============

■メモリ書込み

@M1:アドレス入力
AM4:命令選択
BM2:データ入力
CM3:「転送」ボタンを押す
※命令によってはM2の入力はありません。

■メモリ読込み
@M1:アドレス入力
AM4:命令選択
BM3:「転送」ボタンを押す

■A/X/Yレジスタ入力
・即値の場合
@A1に直接入力します。
・即値以外の場合
@A2:命令選択
AA3:「INPUT」ボタンを押します

スタックポインター
・「A/P PUSH」 と 「PULL」の場合
@S1:命令選択
AS2:「* PUSH/PULL」ボタンを押します
・「JSR/BRK/NMI/IRQ PUSH」の場合
@逆アセリストのプッシュする一行を選択しておきます。
AS1:命令選択
BS2:「* PUSH」ボタンを押します

ステータスレジスタ
自動で表示します。
修正する場合は、Pに入力するか、各フラグの0か1を選択してください。

============== ステップ解析 ==============

@
逆アセリストのスタートするアドレスを選択しておきます。
AD1:「デバッグ開始」ボタンを押します。また、D2の選択からリセットスタート($FFFC)をすることができます。
BD8:「ステップ」ボタンを押します。D7はステップする回数です。1-100の任意の数値を入力してください。

・下部にログを表示します。
・PRGバンク切り替えにも対応しています。

D6:スキップ このソフトはエミュレーションではないため、$2002等のステータス状態を読み取ることができません。そのため、永遠にループから抜けることができないので、スキップするか、手動でメモリを書き変えてください。
D4:割込 D5からNMI/IRQを選択して割込みを行います。
D3:デバッグ終了 ステップ入力のデバッグを終了します。

■オプション → 大文字/小文字

■大文字/小文字
「逆アセンブルリスト(P) 」のMne1の表示を大文字/小文字にします。

 
10.ニーモニック表示について
 
言語  標準表記   当表記
Z80  LD A,80
LD HL,4123
LD A,#$80
LD HL,#$4123
Z80  LD A,(C895) LD A,($C895)
Z80
符号付8BIT  
LD B,(IX+10)
LD B,(IX+F0)
LD B,(IX+10)
LD B,(IX-70)
Z80C[GB]
符号付8BIT  
E8:ADD SP,10
E8:ADD SP,F0
F8:LDHL HL,SP+10
F8:LDHL HL,SP+F0
ADD SP,+10
ADD SP,-70
LDHL HL,SP+10
LDHL HL,SP-70
65816  *** $7E1234
*** $7E1234,x
→  *** $7E1234
*** $7E1234,x
65816  PEA $1234  PEA #$1234 

数値(即値)の場合は、先頭に#$、アドレスの場合は、先頭に$としています。

 
ゲーム用逆アセンブラ Copyright (C) 2010 by BAB

 

 

inserted by FC2 system