ゲームを録り溜めていくと、そのうちテープに記録した構造を忘れて焦る事が多々あります。少なくとも私はそうです。そのため、そんな事が起きないように、カセットポンで mon<ret> L<ret> と入力するだけで、勝手にロードして勝手に実行する IPLもどきを作成して、ゲームプロ ...
November 2021
Z80 スタックに纏わる話
Z80 アセンブラにとって、高速化は命題となります。その中で2バイトをまとめて処理出来る push / pop は使い方によってはかなりの高速化が期待出来るため、本来の使い方以外の使用方法がいくつも開発されてきました。今回はそんなスタック(以下、SP と略す)に纏わるお話で ...
PCG8100 サウンドドライバの実装
サウンドドライバを作成するサウンドドライバの構造と、PCG8100 からの発音の仕組みが分かりましたので、今回は実際にフローチャートに則ってサウンドドライバを作成してみました。これがサンプルサウンドドライバのワークエリアです。 MML:.ADDRES equ 0 ...
PCG8100 から発音させる
カウンタ値PC-8001 の周辺機器である PCG8100 に搭載されている発音チップ 8253 は、発音したい周波数をそのまま設定はできません。カウンタ値という値を設定する事になります。このカウンタ値は分周比から計算して、各音程毎にテーブル化しておきます。音程は有名なところで ...
Z80 サウンドドライバの構造
サウンドドライバに求められる機能これから数回に分けて、Z80等のアセンブラでのサウンドドライバの作り方について解説していきます。最初は理屈から、…という事で、まずはゲーム内で演奏されるサウンドドライバに求められる機能ですが、私は以下の優先度で考えています。※ ...
C# List<Point>.RemoveAll の高速化
マップエディタを作成中に var canvasPoints = new List<Point>(); この canvasPoints リストから var removePoints = new List<Point>(); removePoints に該当するポイントを全て取り除きたいとします。リストにはまとめて削除できる RemoveAll というメソ ...
PC-8001 機種判定
PC-8001 系でゲームプログラムを作成していると、機種の違いにより、どうしても機種判別が必要となる事態になったりします。例えば、PC-8001mk2 のグラフィックRAMを拡張メモリとして使いたいとか、PC-8801のROM/RAMバンク切り替えのポート番号が、PC-8001と異なっているとか ...
PC-8001 テープロード中にアニメーション
拙作 Newシティヒーローの冒頭ローディング画面の処理で、カセットテープのロード中にアニメをしているシーンがあります。今回はこの実装について説明します。 まるでスレッドで動いているようにも見えますが、実際にはテープロードの次回バイト読み込みまでの待ち時間内で、 ...
PC-8001 画面に文字を出す
マシン語を使って画面に文字やグラフィックを表示する基本的な処理を解説します。 画面はどこにある?PC-8001 の VRAM は、標準では 0xF300 から存在しています。80x25 キャラクタの表示ですが、1ライン毎に 40バイトのアトリビュートエリアが付帯していますので、1行の長さ ...
Z80 レジスタとフラグ
Z80 アセンブラを始めるにあたり最初に理解しておくアーキテクチャを説明します。 メモリ空間8ビットコンピュータの場合は、メモリ空間は 16ビットとなります。0x0000 - 0xFFFF が有効範囲ですが、殆どの場合は、そのどこかに BASIC ROMが存在しているため自由に使用できま ...