ファミリーベーシック活用テクニック

このエントリーをはてなブックマークに追加
939ナイコンさん
ファミリーベーシックを逆アセンブルした方、いらっしゃいませんか?

逆アセンブル時に使用するcode/dataを区別するヒントファイルを
いただけないでしょうか。

また、実行結果からcodeとdataの範囲情報を出力できるエミュレータとか
ありましたらおしえていただけないでしょうか。

よろしくおねがいします。

940ナイコンさん:2011/11/28(月) 17:18:24.23
>>939
昔、一応VBAマクロでV3.0を逆アセンブルしたことはある。
面倒だったので全然解析してないけど。

この辺のページとか参考にしてたかな。
ttp://hp.vector.co.jp/authors/VA042397/nes/6502.html

でも今は、なんか便利そうなのが…
ttp://mrchecker.web.fc2.com/index.htm

codeとdata云々はちょっと意味がわからんかったけど、
上のツール使ったら分かったりしない?
941ナイコンさん:2011/11/28(月) 18:15:12.24
コードとデータなんて機械的に分けられるもんじゃねえだろ
ジャンプテーブルなんか使ってたらひとたまりもない
942ナイコンさん:2011/11/28(月) 20:53:44.11
そういう時はIDAの出番だよ
ほぼ間違いなくコードとデータに分けてくれる
プラグインを使えばコメントさえ付けてくれる

オレはファミコンの解析はこれ一つでやっている
943ナイコンさん:2011/11/29(火) 10:54:03.08
終了時にプログラムカウンタの通過したバンク・アドレスを出力すりゃいいんだから
改造としては簡単な部類だと思うが
ビルド環境の導入から始めても2時間も掛からんだろ

俺はやらんがね
944ナイコンさん:2011/11/29(火) 20:50:07.15
みなさん、レスありがとうございます。

>>940
codeとdataの分離なしに逆アセンブルすると、
dataの部分もcodeとして逆アセンブルしたり、
opコード(1バイト目)でなく、オペランド(2バイト目以降)を
逆アセンブルしてしまって、わけがわからなくなるのです
地道に読んでいけばよいのですが、一万行くらいになりそうなので
先人の知恵にすがりたかったのです。

>>942
IDAのフリー版をインストールしてみましたが、86系しかモジュールが入って
いませんでした。これは非常に強力そうだけど、けっこうお高いのですね。
ちょっと買えそうにないです(泣)
コード解析機能のある逆アセンブラとして、td6502というのを見つけたので、
これでとりあえでためしてみます。

>>943
たしかにエミュの改造は小改造ですみそうなのですが、私のちからでは
ビルド環境をそろえるのと、エミュの動作を調べるのでけっこうな
時間を食いそうに思い躊躇しています。
コード解析つきの逆アセンブラで地道にすすめて、きりがなさそうだと
感じたらエミュにも挑戦するかもしれません。
ファミリーベーシックが動いて、ビルドが簡単で、ソースが読みやすい
そんな都合の良さそうなものがなにかありますでしょうか?
(Cぐらいしか読めません。ビルドはlinuxだと比較的簡単なんでしょうか?)

後だしになってもうしわけありません。
やりたいことはメッセージボードやミュージックボードの、自作プログラムを
書き込んで問題なさそうな領域の調査やBASICのパッチあてです。
何か追加情報ありましたらレスいただけるとありがたいです。
945940:2011/11/29(火) 22:28:15.09
>>944
ツール系は他の詳しそうな人に任せる。
944の望むモノは理解できたので、以下、経験談。

ファミリーベーシックは、V2もV3も、プログラムROMは32Kバイトで
&H8000〜&HFFFFにプログラムROMがマップされる、というところはおk?

その最終部分、&HFFFA〜&HFFFFまでの6バイトに、
NMIとリセットとIRQの割り込みベクタがリトルエンディアンで書き込まれている。
よって、ここに記載されているアドレスを起点にして順にたどれば、
データを間違ってディスアセンブルする、という現象はひとまず回避できる。

次に、他の人も描いている通り、6502は非常にややこしい間接アドレッシングがあって、
ジャンプ先アドレスがリトルエンディアンで2バイトずつ、ずらずら並んでいるところがある。
ここも、それらを検知したうえで、それぞれ基点として逆アセンブルしなければならない。
(V3.0の場合は5箇所ぐらいみつかった)

あと、非常にトリッキーなアセンブルをしている箇所が、少なくともV3.0には数箇所あった。
それは、オペコードではなく「オペランドのアドレスに向かってジャンプ(またはブランチ)する」というもの。
これによって、通常の逆アセンブルをやっていては絶対に通らない部分がある。
(つづく)
946940:2011/11/29(火) 22:29:02.02
(つづき)
たとえば、

AE A5 33

という並びの3バイトのマシン語を解釈すると「LDX $33A5」となる。
だが、&H33A5はファミコンでは未使用のアドレスなので、
結果的に「LDX #$00」と同じ動きになる。

一方、この3バイトのマシン語の2バイト目「A5」に向かってジャンプする命令が別の箇所に存在する。
この場合、CPUは「A5 33」の2バイトを解釈して「LDA $33」となり、
&H0033の値をAレジスタにロードするという、
6502独自のゼロページ命令として解釈される。

これによって、「LDX #$00」と「LDA $33」が3バイトで表現され、都合1バイトメモリが節約できるわけ。

この辺に注意して逆アセンブラを自作し、何度も何度ももジャンプベクタを
見つけてはそれを起点に加えて逆アセンブルを繰り返していけば、
逆アセンブルは出来ると思うよ。8ビットでオペコードも少ないし、情熱があれば何とかなる。

ただ、V2.0の場合、メッセージボードやミュージックボードもマシン語で書かれているから、
「使っても良さそうな領域」と「使えなさそうな領域」の区別は結構難しい気がする。

むしろ、V3.0を使い、GAME1〜GAME4の、
ベーシックの中間コードを丸つぶししてパッチを当てるほうが楽だと思うんですがね。
947ナイコンさん:2011/12/01(木) 23:38:27.46
普通にNES用の逆アセンブラツールじゃいかんの?
948ナイコンさん:2011/12/02(金) 17:24:34.76
944です。
レスありがとうございます。

>>945
なるほどー。V3の内蔵プログラム領域というのは見つけるのが簡単そうですね。
V3が安く店頭に出てきたらぜひやってみようと思います。(今は2.0をさわってます)
ジャンプテーブルの件、逆アセンブラによってはcode/dataの他にジャンプテーブルも
記述できるようですので、特定でき次第逆アセンブラのヒントファイルに書いていく予定です。
オペランドにジャンプするというのはいやらしいですね。8ビットパソコンのプロテクトなんかでは
そんなのもあったような気がするけど、rom化するプログラムでそんなことをすることがあったのですね!

>>947
へたれなのでできるかぎり自動化したいのです。

現状、G-NESにトレースログを出力(他のエミュにもあるとは思うけど)する機能があることが
わかったので、トレースログからcode部を抽出していっているところです。
あれこれトレースして6キロバイト分くらいコード部がでてきました。まだまだ先が長いです。


949ナイコンさん:2012/02/07(火) 02:59:56.77
ZACNER IIとかって内蔵ゲームの領域潰してプログラムされてたの?
そうすると4KB超って事になるんだろうか?
950ナイコンさん:2012/03/11(日) 11:12:53.09
今ファミコン互換機が新聞広告に載ってるぞ
951ナイコンさん:2012/03/13(火) 20:51:46.03
あんまりファミベに関係ないな
952ナイコンさん:2012/03/14(水) 12:28:02.44
スレ違いではありますが、どんな機種が広告ででてたのですか?
15ピンポートとかありました?
953nidcst:2012/03/27(火) 20:20:43.77
954ナイコンさん:2012/03/27(火) 21:23:19.00
ファミリーベーシック V2.1Aを解析したサイトがあった。
955ナイコンさん:2012/03/28(水) 10:28:28.95
俺もみつけた
956ナイコンさん:2012/03/28(水) 12:40:12.13
enri氏のサイト以外でしたら教えていただけないでしょうか。
(enri氏のサイトは年末に大幅加筆されてすごく参考になりました)
957ナイコンさん:2012/05/12(土) 17:10:18.45
そーいえば随分前の方でV4やらなんやら言ってたけど俺はハックしてv14.5aまで行ってるよ
でも.nesでグラ改造のみ...
958ナイコンさん:2012/06/05(火) 11:08:48.47
959ナイコンさん:2012/10/03(水) 17:22:57.12
【SFC】スーパーファミリーベーシックがあったら
http://kohada.2ch.net/test/read.cgi/retro2/1349252489/l50
960ナイコンさん:2012/10/03(水) 17:24:08.93
【SFC】スーパーファミリーベーシックがあったら
http://kohada.2ch.net/test/read.cgi/retro2/1349252489/l50
961 【大吉】 :2013/01/01(火) 20:32:55.95
あけまして
 おめでとうございます
962ナイコンさん:2013/02/28(木) 12:21:04.19
Enri氏のページが消えてるんですが・・・
どうか移転であってくれ。
963ナイコンさん:2013/02/28(木) 19:55:03.35
毎月末の更新で間違って消した可能性はないだろうか
964ナイコンさん:2013/03/08(金) 03:28:03.13
右上にあった「残り〜」はなんだったんだ
965ナイコンさん:2013/03/30(土) 20:37:12.00
ここって移転先それともミラーか何か?
ttp://www43.tok2.com/home/cmpslv/index.htm
966ナイコンさん:2013/04/21(日) 20:36:40.63
>965
移転先のようですね。
非常に詳細で貴重な情報をあげてくれているので
消えてしまわなくてよかったです。
967ナイコンさん:2013/05/08(水) 19:55:54.58
http://messatu.wordpress.com/

> STTONES 一般リリース☆です
> ■概要
> ファミベで作成したプログラムを単体で動作可能にする変換ツール
968ナイコンさん:2013/05/27(月) 21:54:14.81
ファンコミュニケーションズがSNSプロモ子会社の事業を終了

ジャスダック上場のインターネット広告大手「ファンコミュニケーションズ」は、
6月30日をもって100%出資のソーシャルメディアマーケティング子会社「アドボカシ」(東京都渋谷区)の事業を終了すると発表しました。
969ナイコンさん:2013/06/09(日) 17:44:04.92
>>967
こんなのあったんだ。
俺バイナリエディタでコピペで作ってたよ。
970ナイコンさん:2013/06/15(土) 16:40:47.46
v3持ってないんだけど初代の黒いカセットのヤツでも使える?
971ナイコンさん:2013/06/16(日) 01:29:17.51
使えるとかそんなレベルじゃなくて、なぜかV3込みのNESファイルを吐き出してる。
ちょっと調べるわ。
972971:2013/06/16(日) 11:42:26.22
完全にやっっちゃってるねこれ。

http://messatu.wordpress.com/ で配布されているSTTONES.exe (バージョン1.1.0.0)には
サンプルプログラム部分と分岐1ヶ所潰してリセットベクターを書き換えただけの
ファミリーベーシックV3のロムイメージがリソースとして内包(FAMIBE_V3modelとして読み込み)されています。

著作権的に完全にアウトなのでダウンロードしないで下さい。
973ナイコンさん:2013/06/16(日) 16:52:45.36
これがアウトならば多くの所から出ているファミコンのパチモノもエミュもアウトだろうがw
974ナイコンさん:2013/06/16(日) 17:09:32.63
ふぁみぱちは、ハードウェアのコピーだから問題なくね?
エミュでオフィシャルが許可したようなのってあったっけ?
975ナイコンさん:2013/06/16(日) 17:44:03.28
ふぁみぱちもエミュも同じ動作をするものを一から作りあげたものだから著作物の複製には当たらない
なのでカセットの形状などの意匠権や商標で縛っている
ソフトの著作権は発表後50年間は保護されているので多少改変しようが配布はアウト
976ナイコンさん:2013/06/16(日) 20:00:12.61
引用は著作権に該当しない(研究目的)
977ナイコンさん:2013/06/16(日) 20:45:20.34
STTONESに関しては金とって利益得てる訳じゃないから良いじゃん
コレがダメだというならハック関係でパッチ配布してるの全部ダメじゃね?

ケチつける人って作れる人の才能に嫉妬してるだけでしょ
978ナイコンさん:2013/06/16(日) 21:04:31.36
教育目的でも研究目的でもないのは明白であり、
そもそも引用であれば出典を明記しなければならないが
「Copyright (C) 2013 Death☆です」と自分の著作物であると書いている
またほぼ全部を含めるものは出典の範疇を逸脱している

金を取っていなければセーフというのはネットでゲームを配布するだけで捕まっている現状を考えれば判ること
他がやっているから構わないとか小学生じゃないんだからバカみたいなことを言わないでくれ
979ナイコンさん:2013/06/16(日) 21:08:31.50
誤 出典の範疇を逸脱している
正 引用の範疇を逸脱している
980ナイコンさん:2013/06/16(日) 21:13:37.85
http://dic.nicovideo.jp/a/%E8%91%97%E4%BD%9C%E6%A8%A9%E6%B3%95%E7%AC%AC32%E6%9D%A1

概要
公表された著作物は、引用して利用することができる。この場合において、その引用は、公正な慣行に合致するものであり、かつ、報道、批評、研究その他の引用の目的上正当な範囲内で行なわれるものでなければならない。
条件が整っていれば、たとえ批判目的でほぼ丸写しであっても、引用して利用できる。
既に高裁の判例が出てしまっている。
ただし、以上の要件を満たして「引用」が可能である場合でも、引用される側の著作物(他人の著作物)の著作者人格権を侵害するような態様でする引用は許されないと解されます(著作権法第50条)。
981ナイコンさん:2013/06/16(日) 21:23:55.14
素人では手を出せないような手順で解析されたものに対して、
公表された著作物であるからどうたらとは言えないだろう
982ナイコンさん:2013/06/16(日) 21:25:08.76
ニコ百って中学生かよwww
983ナイコンさん:2013/06/16(日) 21:32:14.33
次スレ立ててきた

ファミリーベーシック活用テクニック Part2
http://ikura.2ch.net/test/read.cgi/i4004/1371385808/
984ナイコンさん:2013/06/16(日) 21:56:18.27
文化庁ホームページ
著作権 > 著作権制度に関する情報 > 著作権制度の解説資料 > 著作権制度の概要 > 著作物が自由に使える場合
ttp://www.bunka.go.jp/chosakuken/gaiyou/chosakubutsu_jiyu.html より引用


引用における注意事項

 他人の著作物を自分の著作物の中に取り込む場合,すなわち引用を行う場合,
 一般的には,以下の事項に注意しなければなりません。

  (1)他人の著作物を引用する必然性があること。
  (2)かぎ括弧をつけるなど,自分の著作物と引用部分とが区別されていること。
  (3)自分の著作物と引用する著作物との主従関係が明確であること(自分の著作物が主体)。
  (4)出所の明示がなされていること。(第48条)
  (参照:最判昭和55年3月28日 「パロディー事件」)


(1) (3)に関係するが主体がファミリーベーシックなので、必然性があるとしたらファミリーベーシックを配布することが目的になる

(2) 引用部分が区別されていない
(3) 最終出力されるNESファイルは本来ファミリーベーシック上で動作するプログラムであり、あくまで主体はファミリーベーシックにある
(4) 出所の明示がなされていない

引用の条件を満たす気が微塵も感じられません
作者さん本気で問題ないと考えてるなら隠れてないで堂々と出てこいよ
985ナイコンさん:2013/06/16(日) 21:58:53.51
文化庁のオナニーwww
986ナイコンさん:2013/06/17(月) 13:47:32.27
>>983
ありがとう。
987ナイコンさん:2013/06/17(月) 19:56:17.97
埋めなくて大丈夫?
988ナイコンさん:2013/06/17(月) 20:00:01.15
980越えたら、1日放置で落ちるんじゃない?
989ナイコンさん
こんな過疎板でもそうなの?