POKE COM - ポケットコンピュータ(ポケコン)情報サイト

シャープ製 PC-G850 シリーズを中心に、

PC-E200・G800〜G850 シリーズをメインとした

ポケットコンピュータ(ポケコン)の情報を扱います。

 

ポケコンを入手したい人、
ポケコンとパソコンを接続したい人、
ポケコンを活用したい人、ご利用下さい。

 

運営者はシャープ製を中心に
ポケコンを数台所有しています。

 

運営者より

2019年

7月

05日

2019/07/05 stdio.h だけで CLS・LOCATE 相当は可能

引き続き z88dk 情報。

 

z88dk ではテキスト関連は ANSI や VT100 のコンソールとして整えてあります。

つまり、コントロールコードやエスケープシーケンス(ESC)を使えるようにしてあります。

 

画面クリア(CLS)はキャラクターコード 12 を出力、

カーソル移動(LOCATE)は ESC=キャラクターコード 27 として ESC[y;xH です。
この時の x・y 座標は左・上が 1 になります。また H は大文字なのに注意して下さい。

zcc +g800 -create-app -clib=g850 -o text.ihx text.c

stdio.h の printf だけで CLS・LOCATE 相当も可能だったというわけです。

 

追加 2019/07/20

エミュレータの g800 だと printf(12) で画面クリアするのですが、

ポケコン実機では動作していないように思われます。
BASIC でも CHR$(12) では画面クリアされません。

代わりに空白を 24×6=144 文字出力すれば良いんですけどね。

0 コメント

2019年

7月

02日

2019/07/02 z88dk -clib=g850b と -clib=g850 の違い

本日も z88dk に触れます。

PC-G850 向けのビルドはオプションに -clib=g850b を付けるのですが、

-clib=g850 もあります。この違いは?

 

昨日使用していた簡単なテキストを表示するソースを使ってみます。

 

まず、これを -clib=g850b でビルドします。

 

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

普通にテキスト表示されます。

 

では、-clib=g850 でビルドします。

 

zcc +g800 -lm -create-app -clib=g850 -o test.ihx test.c

文字が小さくなりました! -clib=g850 では 3×5 ドットのフォントを使用して表示するようになります。

従って 36×8 文字表示できるわけです。1 画面により多く文字を表示したい場合は便利です。

このフォントと専用の表示ライブラリがファイルに入るので、サイズが大きくなります。

 

https://github.com/z88dk/z88dk/blob/master/libsrc/stdio/ansi/g800/_font_3x5_850.asm

 

フォントは英数部分のみで、カナや特殊記号は入っていません。

マシン語のグラフィック線画も GPRINT 同様に縦8ドットを 1 バイトで構成するので、
3 バイトで 1 文字が作られています。

 

追加 2019/07/12

実際に 5✕7 ドットのフォントで一覧表示しました。

92(&H5C) が ¥ ではなく \、126(&H7E) が ~ ではなく  ̄ になっている事にご注意下さい。
海外の人が対応しているので、そうだとは思ったのですが……

0 コメント

2019年

7月

01日

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

 

主なコマンドをいくつか記載します。

  • void plot(int x, int y)
    点を描きます。
  • void unplot(int x, int y)
    点で消します。
  • void xorplot(int x, int y)
    点で反転します。
  • int point(int x, int y)
    特定座標に線画されているかを得ます。
  • int getmaxx()
    横の最大座標を得ます。 
  • int getmaxy()
    縦の最大座標を得ます。 
  • void draw(int x1, int y1, int x2, int y2)
    線を描きます。
  • void xordraw(int x1, int y1, int x2, int y2)
    線で反転します。
  • void undraw(int x1, int y1, int x2, int y2)
    線で消します。
  • void drawto(int px, int py)
    最後に描いた座標を開始点として座標まで線を描きます。
  • void xordrawto(int px, int py)
    最後に描いた座標を開始点として座標まで線で反転します。
  • void undrawto(int px, int py)
    最後に描いた座標を開始点として座標まで線で消します。
  • void drawr(int px, int py)
    最後に描いた座標からの相対座標で線を描きます。
  • void xordrawr(int px, int py)
    最後に描いた座標からの相対座標で線を反転します。
  • void undrawr(int px, int py)
    最後に描いた座標からの相対座標で線を消します。
  • void drawb(int tlx, int tly, int width, int height)
    四角枠で描きます。開始座標と大きさになっている事に注意して下さい。
  • void undrawb(int tlx, int tly, int width, int height)
    四角枠で消します。
  • void xorborder(int tlx, int tly, int width, int height)
    四角枠で反転します。
  • void circle(int x, int y, int radius, int skip)
    円枠を描きます。
  • void uncircle(int x, int y, int radius, int skip)
    円枠で消します。
  • void clg(void)
    画面をクリアします。ポケコンの場合、テキスト・グラフィックの関係なく消去されます。
    他のプラットファームではグラフィックモードへの初期化も兼ねます。

C_~の関数("Chunky" plotting primitives)も正常動作を確認できています。

4x4 ドット単位の点で線画します。
座標は 4 分の 1 となり、PC-G850 シリーズでは横 0~25、縦 0~11 です。

  • void c_plot(int x, int y)
    座標に 4x4 ドットの点を線画します。
  • void c_unplot(int x, int y)
    座標に 4x4 ドットの点で消去します。
  • void c_xorplot(int x, int y)
    座標に 4x4 ドットの点で反転します。
  • int c_point(int x, int y)
    座標の 4x4 点状態を返します。

他にもいくつかあるのですが、ポケコンでは動作しない可能性もあるので、記載していません。 

 

#include <games.h>

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

 

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

 

例えばこんな感じに作成します。

データは次になります。

 

X(横幅), Y(縦花), 続けて左上から右へ向かって右下への実データです。

横幅が 8 の倍数でない場合……

この場合のデータは左寄せ(上位バイト寄せ)です。

 

左上が座標になるので、データも左上に寄せるのが理想ですね。

 

関数はいくつか存在しますが、実際によく使うのはこの関数一つだけでしょう。

  • putsprite(int ortype, int x, int y, void *sprite)
    スプライトを表示します。sprite がデータです。
    ortype は SPR_OR・SPR_XOR・SPR_AND で
    すでに線画されている状態とスプライトデータの OR・XOR・AND になります。

 

「スプライト」と入れていますが、実態はデータの線画です。

なので、XOR で表示させ、再度同じデータの XOR で消す、

または真っ白のデータも用意し、OR で表示させ、真っ白の AND で消す、という手段になります。

簡単なサンプルを出しておきます。

 

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.

0 コメント

これより古い記事は 運営者より を参照して下さい。