トップページ > 電子工作インデックス > シューティングゲーム > 困った!
前のページでつくった、「1ドット分をchar型配列の1要素分にあてる」…という 非常に無駄(データ量が8倍かさばる)な画面処理関数なのですが、 もしコレを実際のゲーム画面(要可変)に使用するとなると、当然H8のRAMを利用 することになります。ここで、液晶1画面の128×64=8192ドットっていうのは… 1ドットあたりchar型配列ですから1バイト使用することになるので、 ピッタリ8KBのRAM領域が必要になります。これはH8-3052の全RAM容量ですね。 …ということは、他に変数を定義することができなくなってしまいます!(爆) これではマズイので、ちゃんと1ドットあたり1ビット使用の経済的な配列の 使い方をする画像表示関数を作ることにします。 配列変換 のほうも、この関数に適したタイプのデータ(16進数出力というやつ)を出力できるように改良しておきます。
//******************************************************************** //表示用データを入れておく配列を用意。(ヨコ128ドットが8列並んでいるイメージです。) //この配列には”配列変換”で生成した画像データや、ゲーム画面を扱う配列などを用意します。 //ちゃんと1bitを1pixelとして使用する配列なので、char型をタテに8個分…ということで。 char display_data[8][128]={}; //******************************************************************** //配列からデータを取り込んで1画面表示を行う関数 (改良版) void array_out(void) { //for文用変数。高速化のためにregister指定としました。 register char i,j,k; //配列のデータを一時的に移すための変数。 //今回は普通のchar型変数です。 char temp; //チップセレクト(k=0でchip1(左)、k=1でchip2(右)) for(k=0;k<=1;k++) { //表示位置を0番地に指定。 out(0x40,k+1,0); out(0xc0,k+1,0); //ページセレクト(一番上のラインから、8ビットごとに8列 = 64ドット) for(j=0;j<8;j++) { out((0xb8|j),k+1,0); //コラムセレクト(ヨコ方向への移動。 自動ですが…) for(i=0;i<64;i++) { if(i==0) { //最初のときだけ、左寄せにして位置をリセットします。 out(0x40,k+1,0); } //1バイトまとめて転送。 temp = display_data[j][i+64*k]; //out()関数を呼び出して出力。 out(temp.byte,k+1,1); } } } } //********************************************************************
以上で画像を出力する関数の基本は出来上がったことになります。H8の内部RAM上で扱える 画像の枚数は7枚となりました。(8枚ピッタリだとfor文用変数などが定義できなくなります。) 次からは実際のシューティングゲーム用のハードウェアを作る作業に移っていきます。