テスト用プログラムの作成 (LIFEゲーム)
サンプルプログラムとしてLIFEゲームを取り上げます。
- 生物の生死をシミュレーションするゲーム。
- 3×3の格子において、中心マスの生物の変化をまわりの8マスの状況によ
り定義する。
- 誕生:中心に生物がいないとき、まわりに3つの生物が居れば、中心の生
物は生き残る。
- 維持:中心に生物がいるとき、まわりに2〜3つの生物が居れば、中心の生
物は生き残る。
- 死亡:その他の場合、中心の生物は居なくなる。
- プログラムは以下のように処理すれば良い。
- 初期エリアを用意し、生物を配置しておく。
- 初期エリアの情報を画面上に表示する。
- 必要に応じて時間待ちをする。(プロセッサの動作が早いので)
- LIFEのアルゴリズムにしたがい、各マス毎の生物の情報を求め、ワークエ
リアの方へ保存していく。
- すべてのマスについてアルゴリズムを適用すると、ワークエリアに次世代
の生物情報が完成する。
- ワークエリアの内容を初期エリアにコピーする。
- 2. 以降を繰り返す
キャラクタタイプの表示装置の場合、表示したい箇所のVRAMアドレスのメモリに
キャラクタコードを書込み際すれば良い。
VRAMのベースアドレスを VRAM、書き込みたい箇所の座標をX、Yとするとき、
VRAM + ( Y * 80 ) + X のアドレスに書き込めば良い。
プログラムは、以下のようにアセンブルし、プログラムメモリ内に初期プログラ
ムとして配置できるようにしておく。
kiteasm -l life.asm
lst2ram -s -f -2 life.lst
メモリの初期化は以下のように $readmemh を利用する。
initial
begin
$readmemh( "life.ram", MEM );
end
以下に、LIFE プログラムの一例を示す。
;;
;; Life Game for LCD Monitor on SpartanIIIe board
;;
.word MAIN ; ARレジスタの初期値を0にしたことにより、
.word 0 ; スタートベクタが0番地に配置された。
.word 0 ; KITE-2 の仕様に合わせ、最初の16ワードを
.word 0 ; ベクタテーブルとする。
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
MAIN: ld16 #STACK ; sp = 0x800 スタックポインタの初期化
mv sp, acc
;;
;; Main Loop
;;
NEXT1: call disp ; 生物情報の画面への表示
call wait ; 時間待ち
call clear_work ; ワークエリアの初期化
call simulation ; ライフ本体
call copy_work ; ワークエリアから初期エリアへコピー
jp NEXT1
disp: ...
wait: ...
clear_work: ...
simulation: ...
copy_work: ...
end
| Back |
CAD Home |