PC-G850Vでプログラム その2

f:id:PocketGriffon:20210818170012j:plain

引き続き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を分解した際にこんな写真を撮っていた。

f:id:PocketGriffon:20210819002708j:plain

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つ書き換えて表示する座標をずらすという機能があるのだ。

 

このレジスタの初期化を忘れると、画面の変な場所に表示されて大いに悩む事になる(^^;

f:id:PocketGriffon:20210819082321j:plain

↑とりあえず動くように作りました…って感じのコード丸出しだ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行目が表示される

果たしてどれだろう??

 

 実際に実験をしてみたところ、どうやら3が正解っぽい。いわゆる円筒スクロールが出来るみたい。ということは、それを前提にした画面書き換えをする事ができそうだ!(^-^)

 ・表示座標をずらしていった時、表示はどうなるのか

  →上の行から表示が繰り返される

 

動画にも出ているけど、スクロールさせるとインジケータの大暴れする。これについては調査していくが、何か触ってはいけないレジスタを触ってるんだろうなぁ…としか思えない(T-T)

 

とりあえず今回はここまで!(^^)

ではまた次回!(^-^)ノ