6503がようやく動いた報告

イメージ
  回路図まで載っけて作りましたと宣言した前回。 いざ色々動かそうとしたものの、 プログラムがまともに動かないので試行錯誤してたら何年たってたんですかねこれ 。月日が経つのは怖いですね。 今回ようやく6503と6532が無事に動きました。 何につまづいたのかというと、多分アセンブラの文法です。 6502系のアセンブラって結構豊富で、 いろんなところから出てるんですがそれぞれアドレスの表記とか微 妙に違うんですね。 で、 今回久しぶりにca65というアセンブラを使用してみたのがつま づいた原因でした。 一度設定すれば大体の6502系には対応できるのが魅力ですが、 本当よくわからないmakeファイルの設定とかで地獄を見ました 。 以下何やってたのか簡単にまとめていきます。 新しい道具も作ったよ! ■:まず動かない いや、電気は通ってるしクロックは走ってるんですよ。 なのに6532の挙動がおかしくてIRQはでっぱなしだしcpu は止まるし訳がわかりません。 そこで今一度6532のデータシートを読むと、 「 NMIとIRQはオープンコレクタなので 必ずプルアップすること 」 ってあるんですね。何その罠。 というわけでプルアップ抵抗を追加しました。 これでcpuがすぐに止まる事故は解決… と思いきやまだ止まります。というか出力がよくわからない。 そこで大昔に作りかけてやめた出力確認用LEDパネルを作成する ことにしました。 ■:めちゃくちゃ便利なLEDパネル 5年くらい前にこんなの作ったら便利やろってLEDだけ並べて、 回路に不備があることに気がついてなげたもの。 今ならなんとかできそうってことで抵抗とトランジスタ をばーっと取り付けて、 カードエッジからも表のポートからも入力できるようにしました。 これまでは毎回ブレッドボードでled回路組んでたんでクソめん どくさいし抜けるしで散々だったのですが、 これで見やすい簡単出力もicに負担がなく万々歳になりました。 やったぜ。 まあ回路図書かずにえいやっと作ったので裏はすごいことになって ます。ちゃんと整えて、 入力スイッチもつけて体裁整えたら普通に便利道具になりそう。 クロックパルスも出せるようにしたいですね。 ledドライブのために2sc1815を贅沢に使用してます。 意外と高いですがいつ買ったのか結構あったので奮発...

ファミリーベーシックでゲームプログラミング

すげえ!ファミコンがコンピューターになっちゃった!

先日とあるきっかけでこちらの「ファミリーベーシック」なるものを入手。
これはあのファミリーコンピュータ―にキーボードをつないで、コンピューターとして使ってしまおうというモノなのです。
しかし、ゲーム機の拡張として作られたものなので機能の制限はかなりありまして、まず

  1. 自分で好きなキャラクターを一から作ることはできない
  2. 使えるメモリーは2kb(特殊なコマンドで4kbまで拡張可能)まで。
  3. 言語はBasicオンリー。65536以上の桁はオーバーフロー?
  4. 記録媒体はカセットテープかファミコンカセット内のSRAM。電池式で3カ月まで。
  5. 保存できるデータはカセット内だと1つのみ
といった感じです。キャラクターが作れないというところはすでにファミコンのカセット内に用意されたマリオやレディ、ペンギンといった画像素材を用いて使います。組み合わせ次第でいろいろなキャラクターが作れるので結構面白いです。
このように中で使えるキャラクタパターンが巻末付録として収録。なくしたらおしまいだぞ!

しかし問題はこのメモリの容量の少なさ。どれくらい少ないかというと、使う画像の宣言をしてマリオのジャンプとアニメーションの分岐をベーシックでつらつら書き、REM文で少しメモを残そうものならもうそれでメモリはパンパン。もちろんこの中にBGMやSE、バックグラウンドの画像パターンも納めなくてはいけないわけでございますからできることなんて大体予想が付くというものです。南無。
ご立派なBASICコマンドはたくさんあるけれども、これをすべて一つのプログラムの中に使い切ることはできないくらい容量は限られている・・・といっても過言ではないと思う。

■|何はともあれプログラミング。使ってみると意外と面白い。

以上のことからも、この非常に制限された中でいかに面白いゲームを作るかが試されるものであることはご理解いただけたと思います。しかしかつてこのセットでもうそれはそれは多くの子供大人問わず制作に挑んだわけでございまして。ならばとひとつ私も挑戦してみました。
ファミリーベーシックに付属するプログラミングの教科書。
正直ワクワクする表紙。経年劣化でボロボロだが。
最初のほうはカラーで説明が展開されていく。
マリオの絵が今のとは比べ物にならないほどお粗末である。

もちろん制限はさっき述べた通りですので、取り合えず動かしてみようという風なプログラミングではゲームになる前にメモリの上限を迎えてしまいます。ファミコン恐ろしい子。
 しかしそれだけではなくこのファミコンの音源やパッド入力がこれ一つでできてしまうという点でして、STICK(1)とか宣言するだけでファミコンのあのコントローラーで操作できてしまうんです。すごくないですか。動いたときは普通に感動しますよこれ。

ただ問題もございまして、BGMを下手に流すと音を流している間はなんとそれ以外の一切の動作が止まります。止まるんです。なのでループの中でうまくタスクを分散し、サウンドもゲームも滑らかに動くように考えて整理してプログラミングしなくてはなりません。今の開発環境なら、マシンスペックに物言わせてそんな順序考えずにいくつもファイル作ってあとは実行ボタン押すだけですからね。Unityとか。

なのでほんとにパズルを解くかの如くプログラミングをすることになるので、パソコンの処理のさせ方とかの考えるトレーニングにめちゃくちゃなります。実際にこのプログラミングをした後にUnityで作っているゲーム制作に戻ったのですが、この考えを取り入れて整理したところもっさりした動作が恐ろしく滑らかになりました。バグも取れましたし。(どんなコードを書いていたのかはお察しください。)

あえて昔の環境でプログラミングすることにより「パソコンにやさしい」コードが描けるようになること間違いなし。ファミコン実機をお持ちの方、一度ためしてみてはいかかでしょうか。

コメント

このブログの人気の投稿

ファミコンの完全自作ROM&カセットを作ろう!!その1~立ちはだかるコンパイラの壁~

ファミコンの完全自作ROM&カセット作ろう!〜cc65で起動ROMをつくる〜