投稿

12月, 2020の投稿を表示しています

6503がようやく動いた報告

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

MZ80を起動せよ!とりあえずBASICでゲームを作ってみようよ

イメージ
以前、無事にMZ80が起動しBASICも立ち上がりました。 ここまできたらあとはプログラミングをしてゲームを作ったり、外部ストレージをつなげたりとかなんですが、このMZのBASICはいままで触ってきたBASICとはちょっと癖が強いのと、速度が遅くて作りづらいというのがります。なので、本格的なアクションゲームを作ろうと思ったら疑似スクリーンバッファを作成しアセンブラで転送するシステムを作る必要があるんですね。 一応z80のアセンブラは触ったことがありますが、それはシングルボードコンピューターでしたのでこういった「一定のエリアでメモリを割り当ててアセンブラと並行する」っていうのが全然わからないんです。なのでとにかくBASICだけでゲームを作ってみようというわけです。 じゃあ問題はゲームの要素を一通り作れてBASICでも十分な速度が楽しめるゲームって何かって話なんです。 ■ゲームの要素を満たしたシンプルな「ゲーム」 まず、ざっくりゲームの流れをば。 1)タイトル 2)プレイ画面 3)ゲームオーバー画面 以上の3つなんですね。「は?クリア画面は?」ってなると思うんですけど、ゲームオーバーってなんか「失敗!」ってイメージあるんですけどあれ「ゲームが終わりました」って意味なんですよね。なので昔のアーケードとかゲームクリアしても最後「ゲームオーバー」って表示されるんですよ。後味わりい!!!!!!某パンツ一枚の騎士さんのゲームとかBGMがゲームオーバーのままなのでもうやるせないです。 話が脱線しました。 ゲームの流れは上の3つですが、まあどんなゲームを作っても上の要素があればまとまって見えるわけです。問題は2番の「プレイ画面」。 ぶっちゃけ個々の中身を分解すべきなんですがたぶんこういう要素なんです。 1)プレイヤーが操作できるもの 2)プレイヤーの操作の影響を受ける動くもの 3)何もしていないとMissになるもの 4)クリアすべき課題 5)得点 以上のものを満たし、簡単に作れるものっていうとたぶん、 ブロック崩し なんですね。何が強いってボールが2と3の要素を兼ねてるんですよ。ここがすごい。 というわけでちょっと作ってみました。 ■どういう構成にすればいいのか考えてみる 基本、自分でBASICを描くときには1-100の間をmainloop関数として使用し、各機能ごとにGOSUBで飛...