今回は自分がハマったバグをご紹介。題してZ80バグ取りクイズです😁まず、大前提としてアセンブラはAILZ80ASMを使用しています。動作環境はPC-6001mk2の戦士カートリッジです。GVRAMと全く同じアドレスにExtRAMが割り当てられており、読み込みは ExtRAM、書き込みは INRAM と ...
タグ:アルゴリズム
エンドロール/ラインコピー
バッファに新しい行の文字列画像が出来たら、後はそれを画面にコピーするだけです。ただ、そのコピーの前に現在表示済みの画像も1ラインコピーして上げる処理が必要です。コピー元がバッファか画面上かの違いだけで、やってることは同じです。そのため、ここを如何に高速に処 ...
エンドロール/新しい行の表示
画面下部に新しい文字を表示するには、ダブルバッファに文字を描画していく事は、前回のプログラムの流れで説明しました。 今回は如何に処理の負担を分散しながら新しい行を作成していくかについて説明します。バッファをクリアする文字数が多いと、当然描画には時間がかかり ...
エンドロール/プログラムの流れ
メッセージデータの形式が決まれば、次は実際の処理の流れです。スクロールは、1ドット単位で行われます。そのため、画面下部で文字を描いているのが見えるのは、あまりエレガントとは言えません。また、スクロール中は、その追加文字列の表示を壊すわけにもいかずで、意外と ...
エンドロール/メッセージデータ
映画やゲームなどで最後に制作者名や権利表示が出てくるのがエンドロールです。これは主に制作関係者に対する感謝の気持ちとして、その作品の末尾に名前を載せていたりします。何気なく見てると気が付きませんが、結構作るのに手間がかかります。また、これをレトロPCで実現 ...
素数算出と実行速度の差
某所で素数を列挙するプログラムを見かけて、自分も作ってみようという気になりました。また、ついでに C言語、C++、C# でも同じように作成して、そのコードの違いや実行速度の差を検証もしてみました。私の当初の予定では、圧倒的に C++ が高速だと思ってました。さて、その ...
ALG データ圧縮の考え方
データ圧縮する際に最初に考えるのは「まとめる」事と同じ表現をより小さい値に「置き換える」事です。一箇所指定したら、周辺にドドドッと配置してしまえば、それだけでかなり省メモリです。座標系が1024x512だと座標系はデータが大きいですが、前回のデータからのオフセッ ...
Z80 除算アルゴリズム
乗算に続いて今回は除算、そう割り算です。割り算はA÷Bだと、AからBを何回引けるかという計算なので、単純にA-Bを引けなくなるまで繰り返すと答えが出ます。これまた簡単です。この処理も乗算の時と同様に、最大で256回ループする可能性がある(1で割れば…ですが)ので、こ ...
Z80 乗算アルゴリズム
乗算って、例えばA×Bってのは、AをB回足したのと同じだから、単純に掛ける数の回数で掛けられる数を加算すると、これで答えが出てしまうんです。簡単ですよね。 ただ、この処理系だと最大で256回ループしてしまうので、それを何とか減らしたいワケです。今回はこの乗算につ ...
Z80 左右判定
自分から見て、相手が左右どちらにいるのかを判定したいことがよくあります。コンパイラ系であれば、内積を使えば一発なのですが、Z80 ではなかなかそういう訳にもいきません。そこで今回は、8方向に移動している自分から見て、相手が左右どちらにいるのかをどう判定すれば良 ...