借り初めのひみつきち

仮ブログです。

スクロールの巻。

昨日の TOWNS のテキストスクロールの続きです。

昨日の実装はソフトウェアスクロールでした。
正直ソフトウェアスクロールは遅いです。 DOS/V が出始めた頃に NECDOS/VPC-98 を並べて PC-98 なら文字が読めないほど速くスクロールできるって宣伝してたらしいですが、それほど差が出ます。
大抵の UEFI 実装でコンソールのスクロールが激遅なのもたぶんソフトウェアスクロールのせいです。 Mac や Photon 2 のスクロールはドライバが頑張ってるので割と速いです。

前回 TOWNS で FMR 互換ではなく TOWNS ネイティブのグラフィックスを使ったのはスクロールのためだと説明しましたが、その根拠は2つありました。
1つめは、 FMR 互換モードはプレーンアクセスのために変なハードウェアが挟まっていて直接ピクセルの読み書きができないのでスクロール処理に向いていません。うまくやればできるかもしれないけどぱっと見よくわかりませんでした。1プレーンごとに処理すれば一応は可能ですが、いろいろ考えた結果プレーンそのものを捨てた方が有利と判断しました。
2つめは、 TOWNS ネイティブモードだとハードウェアスクロールに対応しています。というわけでハードウェアスクロールを実装してみました。

f:id:neriring16:20171029194334p:plain
(CRTCのFA1に注目)

サラマンダーより、ずっとはやい!

25行目ってなんとなく空いてるふいんきあったのでテキスト表示を 24 行で実装してたところ、ハードウェアスクロールに巻き込まれて最下行にゴミ(スクロール前に実行した type con)が出ました。
この辺がハードウェアスクロールの弱点です。ソフトウェアなら任意の範囲を好きなようにスクロールできますが、ハードウェアスクロールはハードウェアがサポートしてる範囲しかスクロールできません。

この対応のために CRTC 変ないじり方するよりは、25行目の特別扱いをなくして全画面表示にするか、24行のソフトウェアスクロールにした方がいいと思ってます。

どちらのスクロールを本実装にするかは公開までの課題とします(-_-)