MSX2/Display adjustレジスタを用いた8方向スムーズスクロール
『ぬけがら堂本舗』という個人レーベルでMSX2用のゲームを制作しているnukegaradotnetと申します。
MSXにおけるスクロール事情
令和にもなってMSX2用にゲームを作っていかにも「生まれも育ちもMSXです!」みたいなツラをしていますが、ぶっちゃけますと私自身は任天堂で育ったファミっ子大集合でしてキッズの頃はMSXの存在自体を把握していませんでした。正確には当時も友達の家で多少遊んではいたけれど、それをMSXだと認識したのは割と後年になってからだったという感じです。しかし同輩またはもう少し上の世代には当時から「MSX?スクロールがカックカクのダッセーヤツでしょ?それよりもうちでファミコンやろーぜー!」という認識を持っていた方も少なからずおられたと聞き及んでおります。
これは同時期にゲーム機として競合していたファミコンがハードウェアスクロール機能で1ドット単位でのスムーズスクロールを実現していたのに対し、MSX1にはハードウェアスクロール機能が無く主にPCGの8ドット単位でソフトウェア的にスクロールさせていた事に起因する様です。ちょいとyoutube辺りを検索して両者のスクロールっぷりを比較してみたところ、これは確かに同じゲームで比べてしまうとなかなか厳しいなあといった印象を受けます。(余談ですが現在ではMSX1でもソフトウェア的に1ドット単位でのスムーズスクロールを実現する方法が確立?されているらしく、謎技術でグリグリとスクロールする新作MSX1ゲームやデモなども散見されます)
当然MSX陣営でもスクロールの問題は認識しており、第二世代のMSX2でハードウェア縦スクロール機能、更にマイナーバージョンアップのMSX2+ではハードウェア横スクロール機能も実装されました。しかし日韓欧などで多数のメーカーから様々な機種が発売されたMSX2はともかく、本体製造メーカーが国内3社にまで減少したMSX2+が発売される頃には既に斜陽の兆しが出ており結局このハードウェア横スクロール機能を活用したMSX2+以降専用のゲームというのはそこまで多くない様です。ではハードウェア縦スクロール機能しか無いMSX2では結局8ドット単位でカクカクと横スクロールさせるしかないのか、というとこれがまたトリッキーな方法がありまして。
ブラウン管テレビってご存じですか……?
話は変わりますが先日「ドット絵のイベントにブラウン管テレビとMSXを持ち込んだら『ブラウン管テレビを初めて見た』という若者達に大好評だった」という出展レポートを読んで大変な衝撃を受けました。確かに一般市場からブラウン管テレビが駆逐されてもう20年位になるでしょうか。MSXは1980年代の家庭用ホビーコンピュータなので、当然お茶の間のブラウン管テレビに接続して使う前提の設計になっています。
ビデオ信号というのは規格化されていますから、あるメーカーのMSXを他社のテレビに繋いでも当然ちゃんと映ります。しかし現在の液晶ディスプレイなどとは違いブラウン管テレビはアナログ信号をアナログな電子ビームで表示しますので、例え同じメーカーであってもMSX本体とテレビの組み合わせによっては画面の表示位置がビミョーにズレるなんてことが割と当たり前に発生します。これが「よく見たら画面がちょっと左に寄ってるかも?」くらいなら可愛いもので、極端なケースになると豪快にズレ過ぎて画面の端が見えないなんてこともありました。ここで『そもそもブラウン管テレビの時代には安全範囲と言う概念があって云々~』とか周辺事情を更に掘り下げる様な講釈を垂れ始めてしまうと収拾がつかなくなるのでそれは省略します。
じゃあ表示位置がズレた場合はどうするのか、というと当時のブラウン管テレビには水平方向・垂直方向の表示位置調整ツマミが付いていたりMSX側にも表示位置調整機能がありました。MSX2に搭載されているビデオチップのV9938にはDisplay adjustレジスタという画面表示位置の補正用レジスタがありまして、画面全体の表示位置を水平方向・垂直方向にー8~+7ドット調整できる様になっているので表示位置がズレている場合はこの機能を使って調整してね、という感じです。
目から鱗のスクロール方法
MSX2での横スクロールに話を戻しますと、この『Display adjustレジスタで水平方向にー8~+7ドットの表示位置調整ができる』と『ソフトウェア的に8ドット単位のスクロールならば比較的容易』を組み合わせて『Display adjustレジスタで画面全体の表示位置を1ドットずつ7ドット水平移動させて、8ドット目になったら表示位置を元に戻してソフトウェア的に8ドット横スクロールさせる』を繰り返せば1ドット単位のスムーズな横スクロールができるのでは?と考えた方がおられた様です。天才か。
実際この方法は上手く動作し、今では1ドット単位のスムーズスクロールを実装する場合MSX2+以降はハードウェア縦横スクロールを使い、MSX2ではハードウェア縦スクロールにDisplay adjustを使用した疑似横スクロールを組み合わせる、というのが割と定番の手法になっています。しかもこの手法はPCGで簡単かつ高速に8ドット単位のスクロールができるSCREEN4との相性が抜群です。
そしてなんと驚くことにここまでの文章は全部前置きで、ここから先がこのエントリで書きたかった本題です。自分で書いていて前提条件を説明するのに必要な文章量にビックリしました。それだけ現在では既に使われなくなった過去の技術に関する話なのです。
やっと本題です
さて、私もMSX2向けにゲームを制作しているのでこのDisplay adjustレジスタを用いた疑似スムーズスクロールの手法を知った時はその発想に大変感動したのですが、V9938の仕様解説書を眺めながらふと『Display adjustレジスタで水平方向・垂直方向にー8~+7ドット調整できるなら横スクロールだけでなく縦スクロールの方もこれを使えばハードウェア縦スクロールを併用するよりもスマートなプログラムになるのでは?』という疑問が浮かびました。1ドット目~7ドット目のレジスタ設定値を8方向分テーブル化しておけば縦横だけでなく斜め方向にも簡単にスムーズスクロールできそうな気がしたのです。
そして拙作【MinQ:ExtrA】のデータを使って全画面8方向スムーズスクロールを試してみたのがこちら。
MSX2/SCREEN4
— ぬけがら堂本舗 | NukegaraDHP (@NukegaraDHP) June 26, 2025
全画面8方向スムーズスクロール
技術テスト#MSX pic.twitter.com/c4fUzntL0C
ちょっともっさり感があるのと、縦方向のスクロール時に時々表示の乱れが発生したものの思いの外ちゃんと動きました。これは使えそうだと思ったので構想中だった新作ゲームに着手し、もっさり対策に高速移動したい時だけDisplay adjust処理を省いた高速8ドットスクロール、いわゆるBダッシュを実装。そして時々発生する縦方向スクロールの乱れも修正しましたが、これが結構手間だったので結局のところこの手法が本当にスマートなのかどうかは正直微妙なところです。
[技術テスト] MSX2/SCREEN4
— ぬけがら堂本舗 | NukegaraDHP (@NukegaraDHP) July 19, 2025
スムーズスクロール⇔8ドットスクロール動的切替
(ゲームパッド操作でBボタン押下時のみ高速8ドットスクロール、いわゆるBダッシュ)#MSX pic.twitter.com/epZLS1wX0A
ともあれ技術的には使える目途が立ったので、現在この手法を使ってローグライク風の新作RPG【dhūta dhūta】を制作中です。相変わらずのソロ開発なので完成時期は未定、のんびりやっております。
ローグライク「風」RPG "dhūta dhūta" 開発中
— ぬけがら堂本舗 | NukegaraDHP (@NukegaraDHP) September 2, 2025
■メッセージの表示方法を行ごとに指定可能になった
・一括表示
・SE付き五月雨表示(AまたはBボタンを押している間は無音早送り)
■メニュー画面の準備として移動中にAボタン押下で現在フロアを表示#MSX pic.twitter.com/Stppn5duY1
いいなと思ったら応援しよう!
いただいたチップはゲームの開発費(または開発中の私のコーヒー代)に充てさせていただきます。