2023年7月2日日曜日

iCE40LMボードで遊ぶ 3

一応フォントのデザインは出来たのでこのデータをiCE40LMのBRAMの初期値データに変換した。BRAMに初期値を設定してROMとして使う。 この初期値の設定方法だがiCEcube2の場合はインスタンスするBRAMのParameterとして設定する必要がある。そのため、Cのchar型の配列としてフォントを定義し、プログラムでこれをパラメータ文に変換した。
で、最終的に出来たfont_romのコードがこれ。
このゲームはVRAMを使っていない。syncgenはHSYNCやVSYNC等のVIDEO同期信号を生成しているが、掃引している座標値も同時に出力している。 ゲームの各部はこの座標値と自分の座標位置を常に比較しており、自分の領域に来たらフラグを立てる。ビデオデータ出力段はこれらのフラグを見て最終的に出力するデータを決定している。フォントの表示もこの方法で処理している。
以下は、実際に動かしたところ。フォントは16x16にして正解だった。8x8だと小さすぎて見にくかっただろうと思う。 表示している内容だが、右上は消したブロックの数にした。左上の数字はゲームの残り回数だ。このゲームは元々5回まではブロックの状態を引き継いでゲームを続けられるようにしていたので、その残り回数を表示するようにした。この値が0になると全ブロックが復活する仕様だ。
RTLの合成は成功した。タイミングエラーも出ていない。リソース使用率もまだまだ余裕がある。
以下は動作環境。奥の3段重ねの基板はiCE40LMのConfigROMプログラム用の基板だ。一番上のボードにFT2232HLが載っている。Lattice DiamondのProgrammerを使って書き込む。左下の赤黒のコードが付いている黒い物体はゲーム開始用のプッシュスイッチだ。その右側はビープ音再生用のスピーカー。さらにその右側はラケット(バー)を左右に動かすためのロータリーエンコーダーだ。
で、実際にプレイしてみた。実に楽しいのだが、自分の反射神経が驚くほど衰えていることに愕然としている。実機評価にならない(笑)。でも、なかなか楽しい。

ということで、文字表示は成功した。 \(^_^)/

0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...