10/12/11 01:03:21
マニュアルの必要性は痛感しました。
オクで落としたので来週にでも動作検証してみたいです。
今まで勘違いしていたのですが、バックアップスイッチONで
SRAMがOFFになるんですね…。
801:ナイコンさん
10/12/11 07:43:56
マニュアルもそうだがバッ活あたりの解析記事あると楽かもね。
V2.1AのRAMサイズを増やすだけなら1バイト書き換えればいける。
先頭アドレスかえるのは割と多目に書き換えないとダメかな。
ちなみにV2系のSRAMは$7000-$77FFの範囲。
>>796
そのデモ、特定のキー押して起動すると飛ばせたかもw
802:783
10/12/11 08:06:21
>>801
> そのデモ、特定のキー押して起動すると飛ばせたかもw
確かに。すっかり記憶の彼方に飛んでしまってました。
そうすると、キー入力を見る前に所定のコードを走らせる必要がありますね。
>>800
そうですね。バックアップスイッチはONでSRAMのCSをハイに固定しているみたいです。
803:ナイコンさん
10/12/11 21:32:00
T押しながらで飛ばせなかったかな?
804:779
10/12/13 12:28:26
もともとのバックアップシステムはSRAM切り離しすることでデータを
保持するようなので一時保存程度の用途しか想定していない感じで
使い勝手悪そうですね…。
元からついているバックアップスイッチは使わずSRAMは常時アクセス
可能にして、新たにバックアップ専用のSRAMを用意して、未使用の
メモリ空間(V2なら&h6000-67FF)に割り当てて、プログラムエリアの
データを転送して保存するようにしたほうが便利かと思いますが、
そのためにはBIOSに転送用のルーチンを用意しないと駄目ですね。
ハードウエア的には、74HC670x2でバンクレジスタを作れば最大256
バンクのバックアップメモリを持てます。バンクは&h8000に切り
替えたいバンクを書き込むことで切り替えるような感じです。
BASICコマンドを新設できれば最高なんですが…。
805:783
10/12/16 01:03:32
>>804
検証せずに話してます。
新コマンドを「作る」には、結構な大手術が必要だと思います。
コマンドの「空き」(BASICの中間コードの空き)そのものはあると思いますが、
ベクタアドレスやらなんやら、いまの70いくつかの命令(V2.0。V3.0だと100)が
BIOSにぎちぎちに詰まっているので、新たに空き容量を作って新命令を加えることは
難しいです。
やるとすれば、既存の命令をつぶして、新しい命令で「上書きする」ことですね。
CONTとかLOAD?など、プログラムに影響を与えず、コマンドとしても意味の薄そうな
命令をカットして、そのベクタを新命令のプログラムに書き換えてしまう方法です。
これだと比較的手術規模は小さくなると思います。
ただそれでも、メッセージボードなどの各種プログラムの一部を犠牲にしなければなりませんが。
806:ナイコンさん
10/12/16 18:05:57
とりあえず、ベーシックインタープリタのプログラムのことをBIOSって呼ぶのはやめて欲しい。
807:779
10/12/17 01:05:33
キーボードとマニュアル入手したので動作させてみました。
バックアップスイッチを入れると以後動作が止まるんですね。手動で解除できないと
困ることもありそうですので、ハードウエア的な解除スイッチは必要かも知れません。
その際、軽めのプッシュスイッチが使えるのでデフォルトのスライドスイッチに比べて
ハングアップの危険性は減らせると思います。
自分の勘違いが修正されたので回路を見直しましたが、リセットIC、74HC74、
74HC27の追加でいけそうです。とりあえずバックアップに入る時だけPOKEコマンドを
使い、解除はPUSHスイッチを使えばROM書き換えはしなくても実用可能かと。
自動で解除できたほうが便利といえば便利ですが。部品が手に入ったら検証してみます。
コマンド新設の件は戯言と思ってください。やっぱりソースファイルでもないと
厳しいですよね。
808:779
11/01/11 22:17:45
ようやく回路実装しました。材料はHC27、HC74、M51953(リセットIC)とバックアップ
スイッチの状態を示すLEDドライブ用に2SC1815と抵抗数本、セラミックコンデンサ数個です。
タクトスイッチでバックアップon/offを切り替えられるようにしました。
512MbのEPROMにV2.1とV3を焼いて、元々付いていたバックアップスイッチはV2.1/V3
切り替えスイッチとして流用してます。SRAMも62256に載せ替えました。
ロジックとしては、/ROMSEL R//W A14がすべてLレベルのときのD0の状態でバックアップ
スイッチを切り替える仕様なので、POKEコマンドで&h8000-BFFFまでに書き込んだデータ
が反映されるはずなのですが…この件は想定どおりに動作せず。
続きます
809:779
11/01/11 22:27:26
すんません。>>808の512Mbは512kb(64kB)の間違いです。
どうも、POKEしているときにもROMがデータを吐き出しているっぽいです。ちなみにROMが
1個になったことで、HC20のA14デコーダ部分が不要になったので、このゲートにR//Wを繋いで
反転させて、EPROMの/CEを繋ぎ、ROM領域に書き込んだ時にROMがデータを吐き出さないよう
にしたのですが、どうもタイミングがうまく合わないのか、POKEしたデータが反映されず
POKEしたアドレスに書き込んであるROMデータに応じてon/offが切り替わるという状況。
もうちょっとあがいてみます。
810:783
11/01/11 22:46:23
お久しゅうございます。頑張ってらっしゃいますね、応援しています。
感覚でモノをいいます、どうぞ聞き流してください。
アドレスとデータに分けずに、アドレス側だけで回路組めないでしょうか。
データシートなどないので分かりませんが、アドレスバスとデータバスの
出力タイミングが一致しているとは思えませんし、データバスは双方向なので
変なタイミングでショートするとROMかファミコンかが壊れそうな気がしたりしました。
811:779
11/01/12 00:08:17
早速のコメントありがとうございます。
確かにタイミングチャートでもないと、どの信号をどの程度遅延させるべきか分からず
適切に設定するのが難しいですね。仰るようにD0使うのは止めて、代わりにA12をHC74に入れて、
&h8000-8FFF(または&hA000-AFFF)へPOKEはした場合は書き込んだデータに関わらずSRAM ON、
&h9000-9FFF(&B000-BFFF)まではOFF等としたほうが良いかも知れませんね。
これでやってみます。
812:ナイコンさん
11/01/12 02:16:32
久しぶりにスレが賑わっていると思ったら話が高度すぎて理解不可能w
とりあえず完成したら作り方とかモノの説明など記事にしてうpキボンヌ!
813:ナイコンさん
11/01/12 05:17:34
>>812
漏れなんか何を目指しているのかすらわからん・・・
814:779
11/01/12 19:34:49
A12を利用することで、意図する動作が得られました。今後ガワの加工に取り掛かります。
>>812
いまさら実用性としては微妙ですが、完成したら自前のブログで公開するつもりです。
>>813
V2.1とV3を1つのカセットにまとめて、バックアップ領域を16個に拡張、
さらにバックアップスイッチをプッシュスイッチでワンタッチ化すると共に
BASICからPOKE命令でカセットに触らずに切り替えられるようにもしています。
だから何? といわれても「ネタです」としかいいようがありませんが。
815:ナイコンさん
11/01/12 22:54:14
>>814
実に解りやすい説明だ!貴方は天才に違いない
製作が成功してブログに公開された暁には私がとっておきのお礼を進呈するとしよう
816:ナイコンさん
11/01/13 19:49:21
>>814
ついでにそれをディスクベーシック化して
817:ナイコンさん
11/01/13 19:57:52
倍率ドン、さらに倍で8KBに出来ないかと素人考えでいつも思ってたV4
818:ナイコンさん
11/01/14 00:55:11
ディスクシステムに動くように改造したファミリーベーシックって昔あったよね?
確かフリーエリアを増やしたりしてた気がする。
819:ナイコンさん
11/01/14 06:11:43
V2.1Aなら$8570を$77→$7Fにすると4030 BYTES FREEになるよー
820:ナイコンさん
11/01/14 06:15:57
リセットされると元に戻るけど、POKE&H4,&H7Fとやっても
一応フリーエリア増えるかな。
821:ナイコンさん
11/01/14 07:07:11
>>819-820
マジで?!
BASICに認識されなくても良いなら、&H7800以降は普通にマシン語エリアってことですかww
実機が手元にないので確認しようがない…。
822:819-820
11/01/14 08:25:49
恐らくCLEAR命令で書き換えるためにRAMにコピーしてるから
出来るんじゃないのかなーと。
823:ナイコンさん
11/01/14 22:04:50
エミュだとそれで実質マシン語用の容量増えたのと同じような感じになるけど、
実機だとミラーリングされてるだけなんで意味無いです。
意味なくミラーされてるアドレスを参照してるようなマシン語プログラムだと
エミュで上手く動かない可能性アリ・・・どうでもいいことだけど。
824:ナイコンさん
11/01/14 22:34:03
>>823
やっぱりミラーなんだ。焦ってしまったわwww
SRAMは超高かったから、容量の半分を殺して実装とかありえないよね、冷静に考えて…
825:819-820
11/01/14 22:39:30
RAM増設した779の人向けに言ったつもりw
バッ活のDISKBASICでもそこ書き換えてるからね。
826:779
11/01/14 23:50:47
ガワ加工が終わってスイッチ、ロータリーDIPスイッチ、LED、タクトスイッチ
をケースに実装しました。また、リチウム電池でのバックアップに改造しました。
動作確認してますが、不具合発生です。分かる方、知恵をお貸しください。
V2.1ですが、起動後にSRAMを有効にし、プログラムを書き込みます。この
時点では正常に書き込まれてRUNも問題ありません。
その後SRAM無効としてから電源を落とし、再度Tキー押しながら電源を入れ、
BASICを選択してからSRAM有効とします。LISTコマンドを使うとLISTは見れますが、
RUNするとなぜかLISTが破壊されます。NEWして新しくプログラムを書き込めば
RUNも出来ます。
何らかのワークエリアがうまくバックアップされていないのでしょうか?
続きます。
827:779
11/01/15 00:08:19
次にV3ですが、電源投入時はSRAMは無効になっています。バックアップスイッチヲ…の
指示が出るのでタクトスイッチでSRAMを有効とし、プログラムを書き込み、SRAMを
無効化して電源を落とします。再度電源を入れ、指示に従いSRAMを有効にするとメモリ
が初期化されてしまいます。バックアップの手順はV3では異なるのでしょうか?
>>819-820
有用な情報ありがとうございます。物理的なSRAMが4kBあればそこもフリーエリア
として使えるということですね? 次回EPROM書き換えてやってみます。
実機でも2kBのSRAMを亀の子して/CSにアドレスデコーダ噛ませれば行けそうですね。
828:783
11/01/15 00:15:49
覚えているほうから答えます。
V3にはBACKUPというBASIC命令があります。
ダイレクトにBACKUP[RETURN]と入力すると、バックアップスイッチをONにするよう言われるので、
それにしたがってバックアップスイッチをONにすると電源を切れといわれました。
この方法で症状が変わらなければ、なんらか対応が必要だと思うので、
ご報告をお願いします。
829:783
11/01/15 00:32:46
V2.1Aの方の現象は正直分からないです。
RUNをするとLISTが壊れるというのは、
誤った場所に誤ったデータが書き込まれているんだろうと思います。
ただ、バックアップ対象としては、カセット側のSRAMさえ保持できていれば良いので、
現状、バックアップのしくみとしては問題がないはずです。
まず、サンプルプログラムをここに出す事は可能ですか?
あと、V2.1Aで
プログラム入力⇒実行(動作確認)⇒ダイレクトでSYSTEM[RETURN]⇒(GAME BASICモード画面)3を選択⇒
スタート画面に戻るので何かキーを押す⇒…⇒ゲームベーシックを選択して(GAME BASICモード画面から)1を選択
で、もう一度プログラムを実行したら、最初と同じプログラムが正常に動きますか?
とりあえず試してみてください。
よろしくお願いします。
830:779
11/01/15 01:22:20
回答ありがとうございます。
V3の方、試してみましたがOKでした。電源落としてもデータ保持されており、LISTも
RUNも問題なく実行されました。V3では、現状電源投入後とバックアップコマンド実行後に
物理スイッチの操作が必要になるのでここはぜひROM書き換えて自動的に切り替わるように
したいところですね。
V2.1の方は、仰る手順では問題ありませんでしたが、新たに分かったことがあります。
>>829の手順だと、ワタシハ…の後にBASICのデータが残っていますというメッセージが
出て、BASICに入ればLISTもRUNも出来ます。しかし、一旦電源を切った後にTを押さずに
起動するとこのメッセージが出ず、BASICに入るとLISTも残っていません。
ちなみにT起動してBASICに入って、SRAM無効のままLIST取ると、どこかのメモリ領域を
参照したようなグチャグチャなLISTが出ますが、これは正常な反応でしょうか?
入力されたリストの有無を示すワークエリアがおかしいような気がします。
831:ナイコンさん
11/01/15 01:47:44
>>830
V3がOKでV2.1AがNGということは、バックアップのシーケンスにポイントがありそうに思います。
そこ以外あまり差はなさそうですし。
V2.1AでSRAM無効化する前にスタート画面に戻っていますか?
プログラム入力⇒動作確認⇒GAME BASICモード画面⇒スタート画面⇒…⇒オワリ⇒SRAM無効化⇒電源OFF
ではいかがでしょうか?
「T起動してBASICに入って、SRAM無効のままLIST取る」
SRAM無効化というのは、要はライトプロテクトですので、
起動時に走るはずのSRAMの初期化が走っていないのであれば、
プログラムは出鱈目になることもありそうです。
…っていうか、そんなことあった気がします、昔遊んでいて。
ピーッ、ピーッっと、BEEP音鳴りまくりました。
バックアップスイッチONにしたままLISTしたら。
832:779
11/01/15 03:26:06
V2.1のバックアップのやり方分かりました。使い方の問題だったようです。
バックアップスイッチの操作は、BASICモード画面(SYSTEM命令で出る画面)で行う
必要があるようです。Tキー起動の時も、この画面でスイッチを入れないとダメでした。
BASICに入ってから切り替えるとNG。
BASICモード画面で電源を落としておけば、ワタシハ…から起動した場合も指示通りの
スイッチ操作でOKでした。もともとこういうシーケンスだったんですね。
BASICモード画面では特にスイッチ操作の指示が無いので自動化は難しそうですが…。
ちなみにバックアップスイッチon時は/CSがhi固定なので、いわゆるライトプロテクト
ではなくREADもできません。これは改造前からそうなっています。
833:783
11/01/15 07:06:57
上手くいってよかったです。
SRAMの/CS h固定の件、間違えてすみませんでした;;
834:779
11/01/15 19:02:21
V2.1,V3のバックアップ手順が確立しましたが、冷静に考えるとV2.1でもV3でも
BASICでPOKE命令を打つ隙がありませんね。
V2.1では、BASICモード画面でキー入力待ちになった時点でSRAM disable、
1キーが押下された時点でSRAM enableとすれば良さそうですが、プログラムを
割り込ませる隙があるかどうか…。
V3はバックアップスイッチ操作のメッセージを表示させるルーチンを置き換えれば
よいので隙はありそうですが。
如何でしょう?>>783
835:783
11/01/15 19:20:17
いよいよきましたね…
V3のほうを先に考えます。
V3でSRAMをenableにするのは電源投入時、
SRAMをdisableにするのはBACKUPコマンド実行時でよろしいですね?
気長に待ってください…
836:783
11/01/15 20:18:10
「V3.0」のSRAMのenableについて検討しました。
下記、試していただけますか?
ファミコンのアドレス空間でいう下記のデータを書き換えてください。
(ROM上での場所はよく分かりません。すみません!)
↓アドレス
書き換え前:823A 20 6C 61 96 20 20 8D
書き換え後:823A 00 8D YY XX 4C BA 80
書き換え前:FFFC BA 80 BA 80
書き換え後:FFFC 3B 82 3B 82
7 + 4 = 合計11バイトの書き換えです。
YY,XXにはSRAMをenableにするアドレスを「下位8bit、上位8bit」の順に
書きます(6502はリトルエンディアンです)。
たとえば、POKE&HA0B0, 0 でSRAMがenableになる、というような
設定の場合は、YYにはB0を、XXにはA0をそれぞれ書き込みます。
なにぶん実機で試せないのでドキドキですが、ちょっと確認してみてください。
また、失敗すると起動不能に陥る(はず)なので、
現状復帰できる体制を整えて臨んでください。よろしくお願いします。
837:779
11/01/15 22:38:02
書き換え前に教えていただきたいのですが、これはどこの処理に割り込ませたの
でしょうか。EPROMを半田吸い取って外して紫外線で消去して書き換えてまた半田
付けするのは結構手間がかかるもので…。わがままですみません。
実験中だけEPROMをソケットに載せようとは思いますが、紫外線消去はやっぱり面倒…。
電気的に消去できるEEPROMが手に入れば手軽に書き換えられるんですがね。
838:779
11/01/16 02:26:50
基板にICソケット装備してEPROM書き換え体制に入りました。
(紫外線照射用の乾電池式蛍光灯もACアダプタで使えるように改造)
して、仰るように書き換えてみました。
EPROMには前半32kBにV2.1A、後半にV3を書き込んでいますので、 V3の場合は
EPROMの物理アドレスとファミコン内部でのアドレスが一致しています。
SRAM enableはPOKE &H8000,0ですから、
書き換え後:823A 00 8D 00 80 4C BA 80
書き換え後:FFFC 3B 82 3B 82
しかし、残念ながら結果はenableになりませんでした。いつも通り、バックアップ
スイッチをオフにするように指示が出ます。
ちなみに「V2.1Aなら$8570を$77→$7F」こっちの方は、フリーエリアの表示が4kBに
増えたのを確認しました。中身まで書き込めるかは未確認ですが。
839:783
11/01/16 03:42:16
うむむ…残念です。書き換えた場所や内容は正しいですね…。
書き換えたのは電源投入時の一番最初のシーケンスです。
RESET割り込みベクタをフックしました。
URLリンク(hp.vector.co.jp)
FFFC~FFFFはRESETとIRQの割り込みベクタになっています。
つまり、RESETが検知されるとFFFC,FFFDに描かれたアドレスにジャンプするわけです。
IRQのほうはファミリーベーシックではリセットと同じにされているので、
ついでに一緒に書き換えました。どちらも823Bに飛ぶように書き換えています。
823Aは通常"バックアップ スイッチヲ(00)"という文字列が並んでいる部分の
「ス」に相当するアドレスで、文字列を短縮することでマシン語書き込み用に7バイト確保しています。
"バックアップ(00)"として823Aに00Hを書き込んで文字列を短縮し、823B以降に、
【ニーモニック】 【マシン語】 【意味】
STA &HXXYY 8D YY XX ⇒ POKE &HXXYY, ** (**は不定)
JMP &H80BA 4C BA 80 ⇒ &H80BAにジャンプ
を書き込みました。
840:783
11/01/16 03:42:56
ですので、これが上手く書き換えられていると、BACKUPコマンド実行時に
「バックアップ スイッチ ヲ ON ニ ~」というメッセージが
「バックアップ ON ニ~」に変わります。
↑ここ、確認してもらってもよろしいですか?
もしかしたら779さんの考えられている手順と異なる場所に埋め込んだかもしれませんが、
自力で分かる場所はここしかないし、ここで上手くいかなければ他の場所も上手くいかせられないと思います…。
これが上手く行ってるのに挙動が変わらないようなら、追加で以下のアドレスも書き換えていただけますか。
8000 4C BA 80
↓
8000 4C 3B 82
ここにもジャンプ命令があるのですが、資料を読む限りは書き換える必要がないと
判断していた場所です。もし電源投入時のシーケンスが&H8000から始まっているとするなら
ここも書き換える必要があるかと思いました。
841:779
11/01/16 11:24:22
書き換えた場所は何度も確認しました。書き換え前のデータも仰るようになって
いたので間違いないと思います。
>「バックアップ ON ニ~」に変わります。
の部分は確かに「スイッチヲ」が消えてそうなっていました。
電源投入後のシーケンスって普通は&hC000からですよね。16kBのROMの場合はそこに
マッピングされるようですし。
スイッチの自動化がされるのであれば、SRAMに書き込めるかどうかを確認するルーチン
やバックアップスイッチをon/offの指示を出すルーチンは不要になるので、そこを
乗っ取れないでしょうか?SRAMがenableになっているかどうか確認するルーチンを
CALLしている部分をPOKE&h8000相当に置き換えてその後にあると推測される分岐
ルーチンをすっ飛ばしてSRAM enableとして処理すればよいと思います。
842:779
11/01/16 11:41:03
ちなみに、ハードウエア的には電源投入直後はロジック回路の電源電圧が
4.25Vに達してから34msはSRAM disable固定です。リセットICでそうしています。
この時間が短いとなぜか74HC74にうまくリセットがかからないもので。
その間に書き換えたルーチンでの処理がされている可能性もありますね。
843:783
11/01/16 13:46:47
結論から言うと、リセットIC分の時間をどこかで確保してやる必要があると思います。
779さんが用意されたリセットICは、CPUに対するリセットとは異なっていて、リセット時間も別々なんですよね?
ということは、CPUはそのシステムで一番後から起動すべきものが、その保証が取れていないということなので、
CPUがソフト的に、SRAMに対するアクセスを遅らせるのが良いかと思います。
ちなみに、当方ディスアセンブラを持っていませんので、SRAMのチェックがどこで走っているのか、
すぐに探し当てられません。頑張りますが…お待ちください。
(一般のディスアセンブラでは使い勝手が良くないので、自作しないと…)
余裕を持って36ms待たせる場合、ファミコンのクロックが1.7897725MHzですから、
0.036 / (1.7897725 * 10^6)^-1 ≒ 64432
つまり64432クロックウェイトをかける必要があります。
844:783
11/01/16 14:10:22
本当はCPUへのリセット時間を引き算できるし、このシーケンスを挿入するまでの命令で所用するクロックも
引き算できるはずですが、困難なので後に回します。
実装できてから、どこまでループを減らして大丈夫かチューニングすればよいと思います。
プログラムはこんな感じ。
LDX ???? ; 2(2)
START1:
LDA #$FF ; 2(2)
START2:
SBC #$01 ; 2(2)
BNE START2 ; 2(2)
DEX ; 1(2)
BNE START1 ; 2(2)
このプログラムで消費するクロックは、
2+(2+(2+2)*255+3)*??
です。
計算すると、??=63のときに64577クロック消費することが分かるので、
??=#$3F
となります。
レジスタの値、ステータスレジスタなども考慮して挿入場所を決める必要があります。
最悪、スタックに退避させるということで…。
845:783
11/01/16 14:18:48
さっきのプログラムで2(2)というのは、2が必要とされるメモリで、(2)が消費するクロックです。
A2 3F A9 FF E9 01 D0 FC CA D0 F7
これとSRAM enableのコードをどこかに埋め込むということです。
ちなみに、779さんの話をきいて、間違いなくFFFC、FFFDで示される場所にジャンプしている
確信が取れました。6502はベクタアドレスが最上位に配置されるため、
プログラムROMは必ず最上位からマッピングされますから、
ROMの容量によって開始場所が変わるんですね。
ファミリーベーシックは$80BAです。他のプログラムと違いますが、
ROMが32Kbit固定なのでこれでも問題は起きないのです。
さて、検討をはじめますか。時間が必要だと思うので、気長に待ってください。
846:779
11/01/16 14:27:12
リセットICで作ったリセット信号は本体のものとは別です。本体からのリセット
信号がカセット端子に出ていれば良いのですが、そうなっていないようなので。
3.4msではうまくいかなかったので34msにしたのですが、微調整の余地はあります。
リセット時間を短くして試行してみます。
847:783
11/01/16 14:46:01
なるほど。カセットに載ったチップは、自力でCPUよりも早く起動してるんでしょうね…。
KONAMIのVRCとか。
私のは本体起動直後にコードを埋めてしまってますので、
調整は苦しい可能性があります。
ご無理なさらない程度でお願いいたします。
848:779
11/01/16 15:34:10
起動時のSRAM有効化は、ソフトウエアで無理をしなくてもハードウエアで
解決も可能です。PICで適当にウェイトしてからenableにすれば済みます。
改造の敷居はますます高くなってしまいますが。
849:ナイコンさん
11/01/16 17:03:42
>>844
Bccは飛ぶ場合3で飛ばない場合2だよ。
ページ境界跨ぐと更に+1されます
850:783
11/01/16 17:26:18
>>849
ありがとうございます。↓こんな感じですかね。
URLリンク(crystal.freespace.jp)
クロック計算は面倒といえば面倒なのですが、
昔のゲームは全てこれで作られていたわけで、
先人の偉大さには敬服するばかりですね。
851:ナイコンさん
11/01/16 17:40:04
>>850
フレーム単位になりますが長いウェイトは$2002の
bit7を見ると楽ですよ。
ldx #4 ; 大体4フレーム待つ(16.66...ms x4)
.loop
lda $2002
bpl .loop
dex
bne .loop
こんな感じで。
852:ナイコンさん
11/01/17 00:47:14
久々にこのスレに来たら超ハイレベル化しててワロタw
昔、マシン語ゲームがベーマガに載った俺が完全ザコ化してるとかwww
853:ナイコンさん
11/01/17 13:26:25
よう、ザコ(´・3・`)
854:ナイコンさん
11/02/03 19:22:44
ファミコンの驚くべき発想力
URLリンク(www.amazon.co.jp)
ここにいるかたなら楽しめると思います
855:ナイコンさん
11/02/03 22:05:00
いたるところで宣伝してんじゃねーよカス
856:ナイコンさん
11/02/05 13:57:02
>>854
忘れてた。思い出させてくれてありがとう。
857:ナイコンさん
11/02/06 17:02:59
ここに居る人には楽しめない本ですわな
ゲ製板の連中の感想
スレリンク(gamedev板:502-512番)
858:ナイコンさん
11/02/06 17:03:22
そんなもん思い出して誰が得するんだよ
スレリンク(gamedev板:502-番)
> ファミコンの門外漢が調べて書いた感は否めないが
> ファミコンプログラムに興味がある人がギコファミに行く前に
> 読んでおくべき入門書だと思う
> いくら丁寧でもタイトル詐欺はアカンやろ
> 1ページ満たない程度の「0爆弾」概念の説明があるだけ
> あたかも4方向スクロールにネームテーブル4画面モードが必要かのような記載してるくらいなので
> マトモにFCでプログラミングしたことない人だよ
> 0爆弾の説明も透明なスプライトを配置するって書いてるけど、
> それだとスプライトヒット検出のビット立たないしなあ
859:ナイコンさん
11/02/07 00:17:22
使用キャラクタ数を増加させる限界テクニック
・反転すべし
・パレット変更すべし
バカにしてるだろこれw
860:ナイコンさん
11/02/08 01:36:34
>>858は俺のドッペルゲンガーなのか?引用してるレス番まで俺と同じでワロタ
861:ナイコンさん
11/02/13 20:50:11
>>859
今の時代でも当たり前に使われてるよな・・・
862:ナイコンさん
11/02/24 22:22:59.00
ニンテンドーDSi上でプログラム言語「BASIC(ベーシック)」が使える「プチコン」
URLリンク(gigazine.net)
2011年3月9日から 800DSiポイント
863:ナイコンさん
11/02/25 01:14:49.67
1048576 byte free
864:ナイコンさん
11/02/25 01:51:39.23
入力が大変そうだ
PV-7やカマボコキーボードよりも大変かな・・・
865:ナイコンさん
11/02/25 04:36:39.15
タッチペンでポチポチやってくのか
ファミベ時代に人差し指で入力した頃を思い出せてくれるなんて胸熱だな
866:ナイコンさん
11/02/25 12:22:08.99
そんなところまで再現して懐かしのBASIC環境を提供とは・・・できる!
867:sage
11/03/20 00:52:17.71
はじめまして。
懐かしくなって私もファミリーベーシックのカセットを買ってきて、
とりあえずEnri様の解析ページと回路をぽーっと眺めています。
sramを4キロバイト有効ににしたければもともとのsramを剥がして
27256か何かにのせかえてアドレスをもう一本ひっぱってくれば
4キロバイトにはなるような気がします。
プラスアルファとして、$8000以降のrom領域に裏ramを追加できれば
ものすごく便利な気がします。
以前ファミコンを無改造でカセットのみゲームカートリッジの改造を行い、
マイコン遊びができるようにするというようなお題のページで
$8000以降のrom領域に書き込むための考察があったような気がしますが
検索ワードが悪いのか見つかりません。
どなたか上記のようなウェブページに思い当たるところがありましたら
教えていただけないでしょうか。
868:ナイコンさん
11/03/20 01:32:08.37
後半何が言いたいのかわからない
検索の仕方というより日本語自体が使えてない
869:ナイコンさん
11/03/20 03:46:12.98
>>868
日本語が分からないならとっとと半島に帰れよ、チョンが
870:ナイコンさん
11/03/20 07:41:58.60
はい、本性出ました。
871:ナイコンさん
11/03/20 13:58:46.38
867です。
どうもすいません。読み返してみたらご指摘の通り後半意味が通らない文章になっていました。
後半で書きたかったことは以下の通りです。
昔、マイコン遊びという観点で市販ファミコンカセットのプログラムromをramに置き換えて、
ファミコンのcpuから書き込みできるようにできないかということを考えているサイトがあったように記憶しています。
最近ファミコンの内部構造に興味が出てきたので探しているのですが、検索ワードが適切でないのかみつかりません。
そのようなサイトに心当たりがありましたらおしえていただけないでしょうか?
上記のサイトをなぜ今頃探しているかというと、ファミコンカセットのrom領域をramに置き換えを行う場合、
通常の外部バス有りマイコンの基本と同様にcsやrw(rd/wr)の処理だけ考えていればよいかという点について参考にしたいからです。
前半のram増設についてですが、$6000~$7FFFの場合にCSが選択されるので、sramにA11とA12をひっぱってくれば普通に使えそうな
気がしてきました。管理しない領域をファミリーベーシックがクリアしないのであればマシン語モニタのようなものを入れておけば
便利に使えそう。
872:ナイコンさん
11/03/20 19:37:26.88
うーん、森の電脳総合病院かねぇ・・・今は無いみたいだけど。
873:ナイコンさん
11/03/20 22:17:06.77
今はなくともWebArchiveなら・・・!
874:sage
11/03/21 01:50:47.24
867です。
森の電脳総合病院様ですか。ありがとうございます。そういえばそんな感じの名前だったような。
internet archivewではみえなさそうですね。残念です。他に何か似たような情報が載っているサイトが
ありましたらおしえていただけるとありがたいです。
とりあえず、2.0Aカートリッジでsramの増量(2キロバイト->8キロバイト)をやってみました。
同じ幅の8キロバイトsramの手持ちがなかったので32キロバイトsram(TC55257)と交換しました。
A13とA14をGNDに固定しているので容量の3/4を棄ててます。
ファミリーベーシックが管理していない$6000~$6FFF、$7800~$7FFFはリセットしても
クリアされないようです。バックアップスイッチをonしてから電源を切れば、次回起動時も
内容が残ってることを確認したので、ここにマシン語のツールを入れておくというのはできそうです。
けど、8キロバイトあるとそれなりにプログラムが書けそうな感じがしてきますね!(感じだけ(わらい))
別件ですが、起動時のたるいコンピュータの画面を「T」を押しながら起動してスキップしているのですが、
ベーシックのプログラムをクリアされてしまいます。起動時のたるい画面をスキップしつつ、
ベーシックのプログラムを残す方法がありましたらおしえていただけないでしょうか。
次は何をしようかな。i/oポートの増設してパソコンと通信できるようにするか、
それともベーシックのrom領域に裏ramを増設できないか検討するか。
マイコン遊びの順序からすると、ポートの増設かなあ。
875:ナイコンさん
11/03/21 21:08:23.07
>「T」を押しながら起動
メニュー画面でオフにする。
説明書ないの?
876:ナイコンさん
11/03/21 22:04:48.60
ないアルヨ
877:ナイコンさん
11/03/21 22:12:17.63
>>876
どっちだよw
878:ナイコンさん
11/04/06 11:11:19.75
ニンテンドーDSiウェアでBASICプログラミングが楽しめる「プチコン」レビュー
URLリンク(pc.watch.impress.co.jp)
879:ナイコンさん
11/04/06 11:12:16.90
ここかw
880:ナイコンさん
11/04/06 11:16:42.41
)
(
,, ) )
゙ミ;;;;;,_ (
ミ;;;;;;;;、;:..,,.,,,,,
i;i;i;i; '',',;^′..ヽ
゙ゞy、、;:..、) }
.¨.、,_,,、_,,r_,ノ′
/;:;":;.:;";i; '',',;;;_~;;;′.ヽ
゙{y、、;:...:,:.:.、;:..:,:.:. ._ 、} < ここかw
".¨ー=v ''‐ .:v、,,、_,r_,ノ′
/;i;i; '',',;;;_~⌒¨;;;;;;;;ヾ.ミ゙´゙^′..ヽ
゙{y、、;:...:,:.:.、;、;:.:,:.:. ._ .、) 、}
".¨ー=v ''‐ .:v、冫_._ .、,_,,、_,,r_,ノ′
/i;i; '',',;;;_~υ⌒¨;;;;;;;;ヾ.ミ゙´゙^′.ソ.ヽ
゙{y、、;:..ゞ.:,:.:.、;:.ミ.:,:.:. ._υ゚o,,'.、) 、}
ヾ,,..;::;;;::,;,::;):;:;:; .:v、冫_._ .、,_,,、_,,r_,ノ′
881:779
11/04/14 22:17:30.82
>>867
私と似たようなことに興味がおありのようですね。779からの流れを見ていただければ
判ると思いますが、V2.1AはROMの1バイト書き換えでフリーエリア4kBとなりました。
自分は32kBのSRAMに換装してV3と共用で4kBx8バンクをDIPスイッチで切り替えられる
ようにしました。ROM書き換えでバックアップスイッチを自動化するのが最終目標ですが、
ハードウエアの完成の時点で計画が止まってたり…。
そのうち改造記事でも作ってブログにアップするつもりでしたが、伸び伸びに
なってます…。
BASICプログラムを残す場合は、プログラム入力後一旦systemコマンドで
メニュー画面に移って、そこでバックアップスイッチをonにして電源断。
Tキー起動後にメニューが現れたらそこでバックアップスイッチをoffに
してBASICを選択すればOKです。マニュアルを読んでも判りにくいですね。
882:ナイコンさん
11/04/14 23:04:14.38
はい次
883:ナイコンさん
11/04/17 15:56:09.17
悔しいw
884:ナイコンさん
11/04/17 18:03:01.08
ほら、早くw
885:ナイコンさん
11/04/23 09:19:06.56
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
886:ナイコンさん
11/04/23 18:33:19.21
キー押したままやで
887:ナイコンさん
11/04/25 19:21:30.55
)
(
,, ) )
゙ミ;;;;;,_ (
ミ;;;;;;;;、;:..,,.,,,,,
i;i;i;i; '',',;^′..ヽ
゙ゞy、、;:..、) }
.¨.、,_,,、_,,r_,ノ′
/;:;":;.:;";i; '',',;;;_~;;;′.ヽ
゙{y、、;:...:,:.:.、;:..:,:.:. ._ 、} < ここかw
".¨ー=v ''‐ .:v、,,、_,r_,ノ′
/;i;i; '',',;;;_~⌒¨;;;;;;;;ヾ.ミ゙´゙^′..ヽ
゙{y、、;:...:,:.:.、;、;:.:,:.:. ._ .、) 、}
".¨ー=v ''‐ .:v、冫_._ .、,_,,、_,,r_,ノ′
/i;i; '',',;;;_~υ⌒¨;;;;;;;;ヾ.ミ゙´゙^′.ソ.ヽ
゙{y、、;:..ゞ.:,:.:.、;:.ミ.:,:.:. ._υ゚o,,'.、) 、}
ヾ,,..;::;;;::,;,::;):;:;:; .:v、冫_._ .、,_,,、_,,r_,ノ′
888:プチコンまとめWiki ◆oMOeOYErjQ
11/04/28 23:03:58.61
やあ(笑)
889:ナイコンさん
11/04/29 06:11:59.14
私達はお互いに潰し合う仲間です。
同じ馬鹿として、宜しかったら泥仕合に参加して下さいまし。
890:ナイコンさん
11/04/29 07:16:12.30
ほら、早くw
891:ナイコンさん
11/04/29 10:04:51.14
人
(__)
(__)
(`・ω・´) ∬ うんこでござる
.ノ^ y ´~ フ━●
ヽ,,ノ==l ̄
/ l |
"""~""""""~"""~"""~"
892:ナイコンさん
11/05/06 00:25:28.78
867です。
>>881の779さん
プログラムを残す方法を教えていただいてありがとうございます。
今は電池つなげない状態なので、落ち着いたら確認します。
基板をつくりはじめましたが、ポカミスでCPLDに正しく
書き込みができず、足踏みしていましたが形ができてきたので
話のネタに報告します。(つづく)
893:ナイコンさん
11/05/06 00:27:47.63
カートリッジからA14~A0、D7~D0、/ROMSEL、O2、R//Wを
引き出してCPLD(XC9572XLを使用しました)につなぎました。
また、最低限の動作確認のため、LEDを1つ接続しました。
データの方向はD7~D0は入出力、LEDは出力、その他は入力です。
以下がCPLDに書き込んだソースの宣言部以外のすべてです。(つづく)
894:ナイコンさん
11/05/06 00:30:06.90
architecture Behavioral of top is
signal wLED : std_logic;
begin
LED <= wLED;
wLED <= DATA(0) when (O2 = '1') and (nW = '0') and ((not nROMSEL)&ADRS = x"4040");
DATA <= "ZZZZZZZZ" when (O2 = '1') and (nW = '1');
end Behavioral;(つづく)
895:ナイコンさん
11/05/06 00:32:28.71
BASICが起動してPOKE &H4040,0もしくは1でLEDのON/OFFが制御できました。
今後はデータ入力を実験、メモリマッパの実装、romの切り離し制御、
キャラクタromのram化とすすんでいけたらと考えています。(おしまい)
896:ナイコンさん
11/05/08 12:31:58.39
867です。
日記状態ですいません。
自作ファミリーベーシック改造基板に機能追加して、32キロバイトのsramを
$5000から4キロバイト*8バンクで認識されるようにしました。切り替え制御は
$4043にバンク用のi/oを置いてます。CPLDの空きピンが残り3ピンなので、
今回増設したsramを$8000からのbasic romと切り替えできるようになったら
本体側の改造はひとまずおしまいにしようかと考えています。
897:ナイコンさん
11/05/08 15:55:19.51
>>896
今でもファミベを弄っている数少ない同志と見込んで
是非ともそのカセットの作り方など詳しくブログなどで公開して欲しいです!
898:ナイコンさん
11/05/10 00:18:45.09
867です。
毎度日記状態ですいません。
>>897
ブログで写真とかは出してるんですが、回路図のようなものをあげたほうがよいのかなあ。
最小の配線しかないけど、電子工作やったことがない人は配線のデバッグが苦しいかも。
カートリッジのnROMSELからキャラクタrom 2個の22番ピンに行くパターンをカットし
CPLDで制御するようにして裏ramを実現できました。
basicでromを裏ramにコピーし、ついでに$8570を$7Fに変更してリセットしたところ、
2.0Aですが4030 BYTES FREEになりました。
メイン側の改造で最低やりたかったことはここまでです。CPLDはあと2ピン空きがあるけど、
何が実装できるか???
899:779
11/05/12 21:42:55.87
燃料になるか分かりませんが、バックアップスイッチをソフトウエア化
するために必要な回路図を公開しておきます。ROM書き換えが前提ですが…。
URLリンク(niga2.sytes.net)
マニュアル切り替えでもバックアップ切り替えをタクトスイッチで操作
しますので振動で暴走しにくくなってます。
900:ナイコンさん
11/05/13 01:21:42.38
すがすがしいくらい綺麗な回路図をありがとう
901:ナイコンさん
11/06/15 20:49:40.12
867です。
スタンドアロンだとしんどすぎるので、キーボードのカセット入力に
使われている4069から線を引き出してmax232経由でrs232cからインテルhex形式の
データを読み込めるローダを作りました。
タイミングをはかるのにメモリマッパのCPLDのあまりでカウンタを作って
楽をしているのですが、そこだけ作り直せばmax232をつないだだけの
ファミリーベーシックでも動きそうです。そのようなものに需要はありますか?
実機派の人には便利なような気がしますが。
902:ナイコンさん
11/06/16 02:32:47.62
オクたのむ
入札するから
903:ナイコンさん
11/06/18 03:12:10.32
回路図とローダー公開希望!
是非PLD使わないバージョンで
904:ナイコンさん
11/06/21 07:09:48.82
PLAY命令の詳細仕様って無いかな?M,Y,Vの意味がよくわからん
905:ナイコンさん
11/06/21 12:57:37.12
URLリンク(www.nicovideo.jp)
よくできてる。
906:ナイコンさん
11/06/21 21:40:45.11
>>905
ブワッ…
907:ナイコンさん
11/06/22 00:42:44.15
久しぶりにファミベ動画も見てきたよ
908:ナイコンさん
11/07/10 07:31:25.19
867です。
ファミリーベーシックにrs232c経由でインテルhexを流し込むためのローダ、
とりあえずソースとダンプリストをアップしました。
興味のある方どうぞ。
909:ナイコンさん
11/07/10 08:28:58.65
おつです
どこですか
910:ナイコンさん
11/07/10 14:39:48.14
867です。
ファミリーベーシックにrs232c経由でインテルhexを流し込むためのローダのアップ先ですが、
わたしが書いている電子工作のブログに置いてます。週末に置いたので、検索すればすぐみつかると思います。
自分のブログ置いたので、ストレートにアップ先を書くのはちょっと下品かと思って書いていませんでした。
わかりにくくてすいません。
911:ナイコンさん
11/07/13 07:02:38.63
URLリンク(www.google.co.jp)
912:ナイコンさん
11/07/25 21:44:28.52
V3
データレコーダに変わるファミリーベーシックの記憶装置です。
913:ワニチャン
11/07/26 17:53:49.57
はじめて書き込みします。
子供の頃にファミリーベーシックのメッセージボードで隠しメッセージが
出たことがあります。
何せ相当前のことなので記憶だけで書くのですが
通常のメッセージボードとは色違う画面になり
開発者からのメッセージらしきモノがでました。
「アリガトウ...」的なメッセージの後で、
「レンラククダサイ」というような内容だったのですが、
当時はどこに連絡すれば良いか分からず、
結局なにもしなかったのを覚えています。
このメッセージをもう一度見たいのですが、どう出すか分かりますでしょうか?
914:ワニチャン
11/07/26 17:56:44.62
あともうひとつ、当時近くジャスコの4階でファミリーベーシックの
金色のキーボードがあったのですが、あれは何だったか分かりますでしょうか?
うる覚えですが、なんか普通のベーシックとは少し違っていた覚えがあります。
開発機かなんかかな?と思っていましたが、何だったか分かれば知りたいです。
915:ナイコンさん
11/07/26 20:11:09.93
>>開発機かなんかかな?
「開発機」か「なんか」のどちらか2択です。
実は、「なんか」なのです。
ジャスコの4階のファミリーベーシックの金色のキーボードの正体は、
「なんか」なのです。
916:ナイコンさん
11/07/26 23:08:02.79
メーカーが限定で塗ったんなら超レアだけど
ジャスコが勝手に塗ったんなら只の客寄せ
もしオクに出たならそこんところよく確かめないとね
917:ワニチャン
11/07/27 13:20:06.45
色々調べたら、PlayboxBasicってヤツだったんじゃないかと思います。
でもキーボードの画像が見つけられず、真相は分かりませんが。
918:ナイコンさん
11/07/29 16:24:14.68
久々にファミリーベーシックを触ろうと中古屋を巡ったけど
どこにもなかったわ
919:ナイコンさん
11/07/29 16:29:56.29
ないアルヨ
920:ナイコンさん
11/07/29 21:34:17.96
あるナイヨ
921:ナイコンさん
11/07/29 23:27:46.74
ありますん
922:ナイコンさん
11/08/11 19:39:21.49
家族揃ってレーシック受けました
ファミリーレーs
923:ナイコンさん
11/08/12 12:32:20.17
大阪日本橋の状況をはなしのねたにおしらせします。
今は中古ゲーム屋数軒のうち、ある店に1個だけ箱入り中古が売ってる感じ。
入荷して一ヶ月くらいたつのかな。
私は二月ごろ欲しくなった時に在庫がなくて、入荷するまで一ヶ月以上
入荷している店はないか探して買いましが、ほぼ同時期のある日、2軒に
1個ずつ入荷したので両方買ったけど、その後は1ヶ月かそこら見かけなかったので、
これも売れてしまったらまた一ヶ月やそこらは見なくなるんじゃないかと思います。
まあ、待てば店頭にでてくるだけましか。
924:ナイコンさん
11/08/12 16:12:57.78
ファミベのキーボードって押し具合が超イイ感じなんだよな
925:ナイコンさん
11/08/12 17:54:47.02
ヤフオクにあるジャン
926:ナイコンさん
11/08/13 02:44:31.54
あのファミベキーボードのパチパチカタカタ鳴るのとタッチ感イイヨね!
927:ナイコンさん
11/08/17 11:28:53.50
キーが小さいのと、STOPキーの位置に不満はあるけどね
928:ナイコンさん
11/08/26 13:09:04.14
最近実機をみてないからキーのサイズが思い出せない
929:ナイコンさん
11/08/26 14:04:50.44
お子様サイズではあるね
いっちょ押し入れから引きずり出して計ってみるかな
930:ナイコンさん
11/08/27 12:47:38.90
コードが短いね。
931:ナイコンさん
11/08/27 14:09:39.12
厚みがあるよね
932:ナイコンさん
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ピンポートとかありました?