Skip to content

meister68k/setpcg_X1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

X1のPCGをCP/MやLSX-Dodgers上で定義する

2022-09-19 programmed by Meister

概要

シャープX1のCP/M V2.2 (※1)とLSX-Dodgers(※2)向けにデータファイルから PCGを定義するプログラムを作成しました。 このプログラムを使用して事前にPCGを定義しておくことでユーザープログラムでは アトリビュートVRAMの設定だけでPCGを表示できます。 RogueのPCG化などにいかがでしょうか。

「試験に出るX1」[参考文献 1]で紹介された24倍速定義の手法を使用しているため 2~3秒で定義が完了する・・・と言いたいところですが,実際にはプログラム本体と データファイル読込みのためそれなりの時間がかかります。

※1 ランゲージマスター CZ-128SF

※2 Gaku氏作,CP/M互換システムコールとMS-DOS互換ファイルシステムを持つX1用OS
https://tablacus.github.io/LSX-Dodgers/
https://github.com/tablacus/LSX-Dodgers/

使用方法

setpcg.com [-v|-w] [データファイル名]
  -v    全キャラクタ(256文字)のプレビューを表示
  -w    全キャラクタ(256文字)のプレビューを横2倍角モードで表示

データファイルを読込み,全256文字のPCGを定義して終了します。
オプション -v または -w をつけると定義済みのPCGを 16×16 文字に並べて表示します。
オプション -w の場合は横2倍角モードで表示します。WIDTH 80のCP/M上でWIDTH 40用の PCGを確認する用途を想定しています。

データファイルの形式

下記の形式で,全6144byteの無圧縮・ヘッダなしバイナリファイルです。

文字コード 0x00・1ライン目の青(1byte)
文字コード 0x00・1ライン目の赤(1byte)
文字コード 0x00・1ライン目の緑(1byte)
文字コード 0x00・2ライン目の青(1byte)
     ・
     ・
     ・
文字コード 0x00・8ライン目の緑(1byte)
文字コード 0x01・1ライン目の青(1byte)
     ・
     ・
     ・
文字コード 0xff・8ライン目の緑(1byte)

データファイルの拡張子は任意です。
添付している *.PCG ファイル ( HOKUSAI.PCG,FLOWER.PCG ) がサンプルです。

サンプルデータ HOKUSAI.PCG

データファイルの作成方法

気の利いた作成プログラムは用意していません。 一応,添付の png2pcg.rb がRubyにより128×128ドットのPNG画像からデータファイルに 変換するサンプルプログラムです。

不具合

  • 終了時に25行目をVRAM上で直に消去しているため,CP/Mではファンクションキーの表示が 消去されます。STARTUP.COMを実行することで復元できます。
  • LSX-Dodgersは念のためにRelease 1.40以降を使用してください。(理由を後述)

プログラムについて

「試験に出るX1」にある24倍速PCG定義を参考にしています。 これはCRTCを操作して画面下部の非表示期間を下部8行(7行+半端1行)に増やしたうえで,

  • VSYNCを監視
  • タイミングが来たら1ライン分のPCGデータ(青・赤・緑)を順次OUTI
  • 次のスキャンラインにソフトウェアディレイでタイミングを合わせる

という処理を行い,一度に8文字を登録するものです。

Cコンパイラとしてz88dk (※3) を使用し,VSYNCとタイミングを取る部分のみ インラインアセンブラで記述しています。

ところでz88dkのCP/M向けスタートアップルーチンではスタックポインタ(SP)の 再設定を行ないません。 そのためOS内のSPがそのままユーザープログラム(トランジェントコマンド)に 引き継がれるLSX-DosgersのRelease 1.39以前でz88dkで作成されたのプログラムを 実行すると,場合によりスタックを食いつぶして暴走します。

Release 1.40からCP/Mなどと同様の位置をSPが指すように変更されましたので そちらを使用してください。

※3 Z80向けのクロスCコンパイラ
https://z88dk.org/site/

参考文献

  1. 試験に出るX1, 祝 一平, 日本ソフトバンク, 1987

ライセンス

本プログラム(ソース・バイナリ含む)およびドキュメント一式について,CC0ライセンス ( http://creativecommons.org/publicdomain/zero/1.0/deed.ja )を宣言します。

About

set PCG data in CP/M on sharp X1

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published