Research & Development


img
あの有名なピラミッドも建造方法が分かってきたのは割と最近だそうですね。

昔の PC もハードや市販ゲームが残るのは結構なことですが、案外ラクガキのような
手作り作品の方が雰囲気を伝える上ではいいのかもしれないと思ったり。

というわけで記事を書くまでも無い小品やツール類を置いていこうと思います。
過去記事のサルベージもひっそりと。



■ 各種圧縮アルゴリズムと解凍ルーチンの性能を評価する


別ページに飛びます。




■ PC-6000 シリーズ用 LZ4 圧縮ストリームローダー

lz4stream_20181027.zip

テープ用とディスク用の圧縮ストリームローダーです。
LZ4 (URL: https://github.com/lz4/lz4/releases)で圧縮したバイナリを解凍しながらメモリ上にロードできます。
サンプルは PC-6001mk2 用で、圧縮された screen3 画像をロードします。

圧縮は以下の通り。オプションはなくてもいいですが -9 をつければ若干圧縮率が上がります。
> LZ4.EXE [オプション] [ファイル名]

ついでにストリームでない Z80 汎用の LZ4 解凍ルーチンと CRC32 ルーチンも付属しておきます。
こちらは一括でロードされたメモリ上の圧縮バイナリを展開するものです。



■ BASIC 版 BASE64 デコーダ


base64dec_bas.txt

base64 デコーダは短い BASIC プログラムです。
機械語を BASIC プログラムから書き込むためには 16進数を DATA 文にずらずら並べないといけないのですが
リストが長くなる上に見栄えもよくありません。P6 特有のグラフィック文字やかな文字にエンコードすれば短くはなりますが
Windows マシンなどの開発環境で表示できず相性が悪いです。
base64 であればエンコーダも一般的な上に実装も簡単、ということでつくってみました。

サンプルでは &H9000-&H90FF の範囲に 0-255 の数値を書き込みます。



■ 汎用バイナリデータ操作ツール


binpaste_20171115.zip

このサイトの色々なソフトに同梱されているツールを単品で置いておきます。その2。
バイナリファイルを切り出したり分割したりパッチを当てたり色々出来ます。
いきあたりばったりで作ったものなので、作りがかなり雑です。バグ残っているかも。

このツールは他の配布物に同梱してもかまいません。許可は不要。
ただし本ツールに起因するトラブルについては筆者は関知しません。



■ PC-6000 シリーズ用 D88 ディスクイメージ書き込みツール


d88tool_20181219.zip
このサイトの色々なソフトに同梱されているツールを単品で置いておきます。

1D/1DD/2D フォーマットの D88 ディスクイメージを作ったり、トラックセクタを指定して書き込んだり
BASIC のプログラムを書き込んだり削除したり出来ます。
PC-80S31 等の外付けドライブを使っている実機ユーザー向けに 2D にも対応しました。1DD と同等の扱いです。

このツールは他の配布物に同梱してもかまいません。許可は不要。
ただし本ツールに起因するトラブルについては筆者は関知しません。



■ PC-6x01/mk2/SR 対応 内蔵/外付ドライブテスト



fdtest_20181027.zip
mk2/66/SR + 1D/1DD/2D 用 ドライブテストです。ディスクの全領域を正しく読めるかテストします。
拙作のディスクルーチンの使用例も兼ねています。IPL での機種自動判別や SD-6031 等にも対応しています。

・SHIFTを押しながら起動 → 内蔵ドライブがあっても強制的に外付でテスト。66(SR)+外付を想定。
・SPACEを押しながら起動 → ROM 内ルーチンを使用してテスト。速度比較用かも。
・なにも押さずに起動 → 内蔵、外付の順にドライブを検索して本ルーチンでテスト。

結果は Ok か Err で表示されます。


■ PC-88SR 用サウンドドライバを PC-6001mk2/66/SR で動かす


改稿しました。別ページに飛びます。



■ P6 初代機でポリゴンを表示してみる

polym2p1.zip (mode2 pages1)

wireflame(ワイヤーフレーム)
wire_cull(裏面除去)
rawpoly(素ポリゴン)
flat(フラットシェーディング)
texture(テクスチャマッピング)
projection(透視変換)


ネタ元のサイトはこちら JAVAde3D (WebArchive)。大いに勉強させて頂きました。
同サイトのコンテンツの一部はこちら (MONA OS)に転載されています。

私の Z80用ソースを読んで理解するよりも高級言語で理解した方が早いです。
四角ポリゴンや変換行列など他にも色々作ったのですが、最低限のものしか含まれていません。
同梱のソースもバグが潜んでいる可能性があります。過信無用。

■ PC-6000 シリーズで CP/M を


長くなったので別ページにしました。


■ 悪林檎

badapple6_20140203.zip (mode4 files1 pages1 で起動後、RUN"IPL.BAS")
内蔵/外付/1D(2枚組)/1DD版(1枚)を同梱。66SR は BASIC の細工が必要かも。

10fpsです。圧縮率とディスク2枚の容量から逆算しての数値。圧縮方法は RLE です。
エミュレータで動かしてもズレが出る場合があります。内蔵ドライブ版はもう少し改良の余地があるかも。

解像度 64x48 で VRAM 512byte なのですが、これを半分ずつ256*2で圧縮することでアドレスの繰り上がりを回避しています。地味テク。
inc hl だと 512回で 3072clk ですが、これを inc l にすると 2048clk で済むという計算です。



■ アリスソフトの PC-98 用ゲーム BGM を PC-6001mk2/66/SR で演奏する

P6 移植キットの補助プログラムとミュージックプレイヤーを置いています。

別ページに飛びます。



■ 拡大回転縮小デモ

rotzoom_m2p1.zip (mode2 pages1)
回転拡大縮小のデモです。2軸回転+16段階拡大縮小。とても遅いです。

考え方としては、物体の方を動かすのでは無く画面の方を動かします。
画面の中心を(p0x,p0y)として画面を移動したときに、ワールド座標のどこに位置するかをまず考えます。
スクリーン座標は左上を(p1x,p1y)、右下を(p4x,p4y)として1ラインずつ描いていきます。
その際、左上(p1x,p1y)がテクスチャのどこを参照するかをワールド座標から計算しておき、
ワールド座標における p1->p2 と p1->p3 への傾きに応じてテクスチャをスキャンしていきます。

拡大縮小は単なるテーブルです。元の絵64x64ドットのどこを参照するかを縮小16段階に応じて持っています。
これだけのデモなので、縮小した絵そのものを持っていてもメモリは大して圧迫しなかったかもしれません。


■ 実数演算パッケージ "SOROBAN" の移植

機種・システム非依存の Z80 用実数演算パッケージ "SOROBAN"(大貫信昭氏作)を AS 用のアセンブラソースに起こしたものです(勝手移植)。
ソース自体は Oh!X 1989.03 月号に載っていたのですが、独自のアセンブラ言語 (OHM-Z80) で記述されていました。
簡単なコメント付です。冒頭のジャンプテーブルとジャンプ先を見れば使い方は大体分かると思います。
ラベル名等はオリジナルを参考にしていますが割とアバウトです。変な方言などは無いので zasm 等の他のアセンブラにも簡単に持って行けるかも。

サンプルとして PC-6001 で円周率を計算するプログラムをつけてあります。
このプログラムも同誌に掲載されたものを P6 向けに移植したものです。
pi6.zip (mode1 pages1)

S-OS 移植記念。
こちら(http://www.retropc.net/ohishi/s-os/index.html)でも PC-6000シリーズが S-OS 対応機種に追記されましたね。

■ フラクタル画像(マンデルブロ集合)

もうひとつ SOROBAN を使った短いプログラムを。
数値をいろいろ弄ると出力される画像も変わるのですが、BASIC から値を渡すうまい方法を思いつかなかったので(手抜き)そのままです。
SOROBAN 側で、文字列→浮動小数バイト列に変換する関数があるので、"-1.2" などの文字列を埋め込めればOK。
今のままではちょっと地味なので、よりサイケな数値に変更したいところ。

実機でやるとどれくらい時間かかるか分かりません。
こういうのは必死に描いている所を見るのが楽しいので、out &h93,2とかすると若干興ざめな気がしますね。


ローダーは P6VW の bin2p6 出力を改変して使わせていただきました。
mandelbrot.zip (mode5 pages3)

▲ TOP