引き続きSHARP PC-G850Vの事を調べている。
前回のブログでは、PC-G850のプログラムを思い出す意味合いもあり、過去の開発環境を利用して、そのままプログラムをしてみた。
BASIC+マシン語の構成だったので、プログラムはBASICとして送り込むのが都合良い。いつもの感じでDATA文でマシン語コードを含めて送り込んだ。
今回は開発環境を「いま」の状態にしつつ、画面に何かを表示する仕組みを作ってみる。
全体的にC言語で書けるよう環境を整えるが、速度を有する部分だけはアセンブラで書く。テスト処理を書くにも高級言語を使えるメリットは計り知れない(^-^)
PC-G850Vはマシン語データをインテルHEX形式で読み込む事が出来る。昔、CP/Mを使っていた時代にさんざん使ってきたインテルHEX形式ファイル…この時代でも使うなんて!(^^;
当時はHEX2COM / HEX2BINなどのツールの存在を知らず、どうやってバイナリに変換するんだよ…と思いつつ、コンバータをBASICで書いたりしてたw
LSIC-80は都合よくインテルHEX形式を出力する事が出来る。それをモニタ(MON)のRコマンドでロード出来る。他のマシンのように特殊な形式に変換しなくても済む分、取り扱いも楽ちんだ(^-^)
なぜロードなのに「R」なんだろ?と思ったが、説明書を見ると「リード」らしい(^^;
PC-G850の動作クロック
そういえば…先日、PC-G850を分解した際にこんな写真を撮っていた。
LZ8514というのがCPUを含むチップなんだと思うけど(データシートが見つからない…汗)、この横に「8.00」と書かれた部品がついてる。これって水晶発振器なんだろうか??
8MHzがそのまま使われてるのか、2分周して使われてるのか分からないけれども、ポケコンに8MHzが使われているとしたら胸アツだ!(^-^) PC-8801FHなどが発売されてから10年あとに発売されてるので十分にありうる!
いつかクロックについても調べてみたい。
ちなみにネットにあった資料を見ていたら、I/Oポート67hにCPUクロックの設定というのがあった。たまたまブート周りのプログラムを見ていたら、そこで「高速動作」の初期化をしていた。試しにBASICから「OUT &H67,1」としてプログラムを実行すると、実行速度がきっちり半分になる。動的に変えられるのも便利だ(^-^)
LCDに直接書き込み
2年半前にPC-G850でのテストをしていた時、LCDに直接データを書き込むプログラムを作っていた。これがそのまま動くのかわからないけれど、理解が追いついていない現状でそのまま使うのは危険だ(ブラックボックスになっちゃう!)。
一度、当時のプログラムを分解して理解を深めてみる。
基本的な考え方は、
・仮想的なビットマップバッファを確保
・そのメモリへ画像データを(なんらかの方法で)書き込む
・ビットマップバッファをLCDへ書き込み
という流れ。
当面は画面全体を書き換える方向でプログラムを組み立ててみる。
画面全体を書き換えるとなると、大体以下な感じでよさげ。
・データを書き込むアドレスの初期化
・データ書きまくり
これを行数分(PC-G850では6行)繰り返せば画面に表示される事になる。
ひとつハマりやすいのは、PC-G850には「表示座標」というのが存在する。BASICでスクロールする際に、実際のデータを書き換えるのではなく、レジスタを1つ書き換えて表示する座標をずらすという機能があるのだ。
このレジスタの初期化を忘れると、画面の変な場所に表示されて大いに悩む事になる(^^;
↑とりあえず動くように作りました…って感じのコード丸出しだw
この先、機能を追加していき、一段落した後に高速化してみたい(^^)
ところで…このブログを書きながら気がついたけれども、どこにもLCDCのBusy信号を参照している箇所がない。他のレトロマシン(PC-8201など)ではLCDCがBusyの場合が多く、常に意識しないとちゃんと動かす事ができなかったが、PC-G850のLCDは優秀(高速)なのか、今のままでも動いてしまってる(^^; これ…いーんだろーか??
今回実験するにあたり、いくつかの疑問があった。
・LCDC内部のVRAMは何行分あるのか
・表示座標をずらしていった時、表示はどうなるのか
この先、ライブラリを充実させていくためには、どうしてもこの2つを解決…というか理解しておく必要がある。
LCDC内部のVRAMについては、書き込みする際に指定する座標が0〜15まで指定出来る。しかしテストした結果、0〜7までが有効っぽい。8以降を指定しても表示には特に影響がないようだ。
・LCDC内部のVRAMは何行分あるのか
→8行分あるらしい
行数が8ある事は理解した。ではスクロールさせていった時、8行を超えた部分については「どう見える」のか?
1、何も表示されない
2、ゴミが表示される
3、1行目が表示される
果たしてどれだろう??
PC-G850Vでハードウェア縦スクロールの実験。VRAM的には縦8キャラクタ分の容量があるらしい。
— PocketGriffon (@GriffonPocket) 2021年8月18日
スクロールさせるとインジケータも大暴れする不思議(・・;) 何かバグってるね…(-。-; pic.twitter.com/VxuoM55VOu
実際に実験をしてみたところ、どうやら3が正解っぽい。いわゆる円筒スクロールが出来るみたい。ということは、それを前提にした画面書き換えをする事ができそうだ!(^-^)
・表示座標をずらしていった時、表示はどうなるのか
→上の行から表示が繰り返される
動画にも出ているけど、スクロールさせるとインジケータの大暴れする。これについては調査していくが、何か触ってはいけないレジスタを触ってるんだろうなぁ…としか思えない(T-T)
とりあえず今回はここまで!(^^)
ではまた次回!(^-^)ノ