11/10/20 04:18:36.65
厚みの割には軽いよね
初代無印PC-9801のキーボードの重い事重い事…
933:ナイコンさん
11/11/25 16:16:54.66
やすぶしーん
934:ナイコンさん
11/11/27 02:55:12.77
中身は随分スッカラカンで基盤なんてほとんど無いから
もっと薄くコンパクトに出来るだろうな
935:ナイコンさん
11/11/27 05:25:13.69
魑魅魍魎を組み込んでスタンドアローン…
そんなふうに考えていた時期が俺にもありました
936:ナイコンさん
11/11/27 11:35:25.97
俺にはありませんでした。
937:ナイコンさん
11/11/28 02:17:19.09
魑魅魍魎じゃ15pのキーボード刺さんないだろ
938:ナイコンさん
11/11/28 12:33:19.19
ファミコン互換機をみかけるたびに15ピン拡張ポートがないかと
確認するのですが、昔はあったらしいけど、今の日本橋ではみつからないですね。
romにパッチあてて、コントローラ2あたりにキーボードをつなげるようにすれば
いいんだろうけど、なかなかむつかしそうですね。
939:ナイコンさん
11/11/28 12:37:43.80
ファミリーベーシックを逆アセンブルした方、いらっしゃいませんか?
逆アセンブル時に使用するcode/dataを区別するヒントファイルを
いただけないでしょうか。
また、実行結果からcodeとdataの範囲情報を出力できるエミュレータとか
ありましたらおしえていただけないでしょうか。
よろしくおねがいします。
940:ナイコンさん
11/11/28 17:18:24.23
>>939
昔、一応VBAマクロでV3.0を逆アセンブルしたことはある。
面倒だったので全然解析してないけど。
この辺のページとか参考にしてたかな。
URLリンク(hp.vector.co.jp)
でも今は、なんか便利そうなのが…
URLリンク(mrchecker.web.fc2.com)
codeとdata云々はちょっと意味がわからんかったけど、
上のツール使ったら分かったりしない?
941:ナイコンさん
11/11/28 18:15:12.24
コードとデータなんて機械的に分けられるもんじゃねえだろ
ジャンプテーブルなんか使ってたらひとたまりもない
942:ナイコンさん
11/11/28 20:53:44.11
そういう時はIDAの出番だよ
ほぼ間違いなくコードとデータに分けてくれる
プラグインを使えばコメントさえ付けてくれる
オレはファミコンの解析はこれ一つでやっている
943:ナイコンさん
11/11/29 10:54:03.08
終了時にプログラムカウンタの通過したバンク・アドレスを出力すりゃいいんだから
改造としては簡単な部類だと思うが
ビルド環境の導入から始めても2時間も掛からんだろ
俺はやらんがね
944:ナイコンさん
11/11/29 20:50:07.15
みなさん、レスありがとうございます。
>>940
codeとdataの分離なしに逆アセンブルすると、
dataの部分もcodeとして逆アセンブルしたり、
opコード(1バイト目)でなく、オペランド(2バイト目以降)を
逆アセンブルしてしまって、わけがわからなくなるのです
地道に読んでいけばよいのですが、一万行くらいになりそうなので
先人の知恵にすがりたかったのです。
>>942
IDAのフリー版をインストールしてみましたが、86系しかモジュールが入って
いませんでした。これは非常に強力そうだけど、けっこうお高いのですね。
ちょっと買えそうにないです(泣)
コード解析機能のある逆アセンブラとして、td6502というのを見つけたので、
これでとりあえでためしてみます。
>>943
たしかにエミュの改造は小改造ですみそうなのですが、私のちからでは
ビルド環境をそろえるのと、エミュの動作を調べるのでけっこうな
時間を食いそうに思い躊躇しています。
コード解析つきの逆アセンブラで地道にすすめて、きりがなさそうだと
感じたらエミュにも挑戦するかもしれません。
ファミリーベーシックが動いて、ビルドが簡単で、ソースが読みやすい
そんな都合の良さそうなものがなにかありますでしょうか?
(Cぐらいしか読めません。ビルドはlinuxだと比較的簡単なんでしょうか?)
後だしになってもうしわけありません。
やりたいことはメッセージボードやミュージックボードの、自作プログラムを
書き込んで問題なさそうな領域の調査やBASICのパッチあてです。
何か追加情報ありましたらレスいただけるとありがたいです。
945:940
11/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には数箇所あった。
それは、オペコードではなく「オペランドのアドレスに向かってジャンプ(またはブランチ)する」というもの。
これによって、通常の逆アセンブルをやっていては絶対に通らない部分がある。
(つづく)
946:940
11/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:ナイコンさん
11/12/01 23:38:27.46
普通にNES用の逆アセンブラツールじゃいかんの?
948:ナイコンさん
11/12/02 17:24:34.76
944です。
レスありがとうございます。
>>945
なるほどー。V3の内蔵プログラム領域というのは見つけるのが簡単そうですね。
V3が安く店頭に出てきたらぜひやってみようと思います。(今は2.0をさわってます)
ジャンプテーブルの件、逆アセンブラによってはcode/dataの他にジャンプテーブルも
記述できるようですので、特定でき次第逆アセンブラのヒントファイルに書いていく予定です。
オペランドにジャンプするというのはいやらしいですね。8ビットパソコンのプロテクトなんかでは
そんなのもあったような気がするけど、rom化するプログラムでそんなことをすることがあったのですね!
>>947
へたれなのでできるかぎり自動化したいのです。
現状、G-NESにトレースログを出力(他のエミュにもあるとは思うけど)する機能があることが
わかったので、トレースログからcode部を抽出していっているところです。
あれこれトレースして6キロバイト分くらいコード部がでてきました。まだまだ先が長いです。
949:ナイコンさん
12/02/07 02:59:56.77
ZACNER IIとかって内蔵ゲームの領域潰してプログラムされてたの?
そうすると4KB超って事になるんだろうか?
950:ナイコンさん
12/03/11 11:12:53.09
今ファミコン互換機が新聞広告に載ってるぞ
951:ナイコンさん
12/03/13 20:51:46.03
あんまりファミベに関係ないな
952:ナイコンさん
12/03/14 12:28:02.44
スレ違いではありますが、どんな機種が広告ででてたのですか?
15ピンポートとかありました?