CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

テトリス

イメージ 1

前に作ったDOS画面上で動作するテトリスを移植してみました。
キー入力関数kbhit()、getch()や乱数発生のrand()を作成してライブラリに追加しています。
乱数発生ルーチンは8086アセンブラで作られていた例を見つけてきてそっくりC言語に置き換え
ています。乱数の質はかなり怪しいですがこういう用途であればまったく問題なし。

int rand(void)
{
 static int be,bc;
 int ax,dx;

 ax=0x43FD;
 dx=0x0003;

 if((dx||be)==0){
 ax*=bc;
 }
 else{
  dx+=dx*bc+ax*ax;
  ax*=bc;
 }
 ax+=0x9EC3;
 dx+=0x26;
 bc=ax;
 be=dx;
 ax=dx&0x7FFF;

 return ax;
}

画面出力部分はVRAMに描画する関数に置きかえるだけで簡単にできました。
ただLCD上で10*20の盤面を表示するには1つのセルが2*2ドットとなり、
かなり見にくいですが。