2019/07/01 z88dk のサンプルと内蔵ライブラリ

z88dk について、もう少し詳細な説明をした方が良いと思ったので、

記載しておきます。

 

z88dk、エミュレータ g800 でテストしている影響で、

内部のプラットフォームでは g800 になっています。

PC-G850 向けは g850 のファイル名も見られます。

 

zcc で実行できる C 言語は ANSI C にほぼ準拠してあります。
テキスト表示を含めて、ある程度の処理は

標準の C 言語のように扱えるでしょう。

 

サンプルプログラム

サンプルプログラムがあります。

 

https://github.com/z88dk/z88dk/tree/master/examples/g800

 

これを make すればいいのですが、
記載時現在、Nightly Build では sin.c のコンパイルが失敗しています。

 
GitHub に issue を入れました。#1212 → 浮動小数点数型の処理に問題があり修正が入りました (2019/07/02)

 

個々でビルドもできますが、turtle 関連はライブラリになっているので、make が無難そうです。
個別にビルドしたい場合、例えば box.c のビルドであれば……

 

zcc +g800 -lm -create-app -clib=g850b -o box.ihx box.c

 

こんな感じです。+g800 の指定で .ihx ファイル(Hex ファイル)を生成します。
-clib=g850b を付ける事で PC-G850 シリーズ向けの 6 行表示になります。
これを外すと 4 行表示になります。

ちなみに -clib=g850 はテキストに 3×5 ドットのフォントを使用し、36×8 文字表示できます。


g800 をコマンドラインから実行できるようにしてあるのであれば……

 

g800 -machine=g850 box.ihx 100

 

ポケコンへ転送する場合も .ihx ファイルを転送します。
ここに入っている send.py がコマンドラインからポケコンへ送出するプログラムなので、
これを使用する事も可能です。

 

各サンプルプログラムを紹介しておきます。

box.c → box.ihx

箱をランダムに線画していきます。

 

mandel.c → mandel.ihx

マンデルブロ集合の線画をします。上画像が PC-G850 シリーズでの正しい表示です。

このように表示されている場合、lib/config/g800.cfg
CLIB=g850b の時に g800_clib が適用されているため、グラフィックが 4 行表示と誤認識されているようです。

テキストを使用していないので、-clib=g850b の代わりに -clib=g850 を使用して回避できます。

GitHub に issue を入れました。#1215 → ソースが改善されました (2019/07/06) 

 

physics.c → physics.ihx

丸が何個が飛び跳ねます。

 

sin.c → sin.ihx

サインカープを描きます。実行直後は線、まもなく線で描きます。

エラーが出てビルドできない問題は 2019/07/02 に修正が入っています。

 

turtle.c + turtle_example.c → turtle_example.ihx

タートルグラフィックを行います。🐢_トコトコ……

ペンを置いて→40先進→20度回転……と線画していきます。

turtle.c は turtle.lib を生成します。turtle_exaple はそのライブラリを用いた線画サンプルです。

 

#include <graphics.h>

サンプルではいずれも graphics.h を include してあります。

z88dk にはプラットファーム共通のモノクログラフィックライブラリがあり、

これにポケコンのグラフィックも含めてあります。

 

https://github.com/z88dk/z88dk/wiki/Classic-Monochrome-Graphics

 

ライブラリの関数は次に記載してあります。

 

モノクログラフィック | z88dk を使う。

 

#include <games.h>

更に z88dk にはプラットファーム共通のモノクロスプライト機能が備わっています。

 

https://github.com/z88dk/z88dk/wiki/monosprites

 

ライブラリの詳細と関数は次に記載してあります。

 

モノクロスプライト | z88dk を使う。

 

表示サンプルはこんな感じです。


PC-G850 関連でグラフィックを扱おうとすると、

GPRINT の線画方法で行う必要があり、
まともに扱うためにはライブラリを制作する必要が出てきます。

この点 z88dk では備わっているグラフィックライブラリによって容易に扱えます。

 

モノグラフィック・モノスプライトはプラットフォーム共通で使えるので、

PC-G850 向けで作ったものを MSX などの他で動かす事もできます。

アイデア次第では面白い事ができそうですね。

追加 - LOCATE の代わり

ゲームなどを作ろうとすると、テキストを特定座標で表示したいと思うでしょう。

しかし、 C 言語には locate がありません。
その上 PC-E200・G シリーズのファンクションコールは

文字出力の時に座標も指定するので、扱いが面倒です。

 

探索したところ、z88dk の conio.h に gotoxy を発見。

 

https://github.com/z88dk/z88dk/wiki/Classic-conio

 

早速試してみました。CLS は graphic.h の clg、INKEY$ は stdio.h の getk が使えます。

動作しています。GOTOXY の座標は LOCATE と同じ左上が 0,0 でした。

他のプラットファームでは GOTOXY が動作しない場合があります。

 

追加 2019/07/07 - モノクログラフィック

モノクログラフィックについて、ふうせん🎈 Fu-sen. のブログで記載しています。
PC-G850 と MSX で共通のソースから表示させています。

 

z88dk で作って MSX とポケコンで実行する。| ふうせん🎈 Fu-sen.