240118 it has almost been two years since i was addicted to [Niji EN]

Image: 240118 it has almost been two years since i was addicted to [Niji EN]

LazuLight最後のコラボ配信、冒頭からScarleのT…リップの色の話になって笑った。何であんな話になったんだっけ。なんかその話題になって、リスナーは聞いてもいないのにScarleが自分の例を出していつも通り自爆していった気がする。

(1) 【LETHAL COMPANY w/ LAZULIGHT】LETS CAUSE CHAOS!!!【NIJISANJI EN | Pomu Rainpuff】 - YouTube

これが最後かと思ったら、LazuLight恒例のLunchLadyコラボもやる気なので、最後じゃないかも。

メンバーシップ24ヶ月のアイコンが飛び込みセーフで付いたのはラッキーなのかどうなのか。いま唯一入っているメンバーシップだったのに。まあでも、自分が心機一転するいい機会なのかな。

Image: Pomie Party Membership

240118 PS/55エミュ製作 [29]画面解像度1040x768

この開発はこれ以上進展しそうにないので、これで打ち止めとしますか。Win 3.0はほぼ正常に動作しているので、いい線まで行っていると思うんだけど、やっぱりWin 3.1のディスプレイドライバーはダメだ。

Image: Windows 3.02 on DOSVAX

CPUの書き込みデータのうち1のビットはテキストの前景色、0のビットは背景色になるようにGraphics ControllerのSet/ResetレジスターとEnable Set/Resetレジスターをセットしていることは分かるが、なぜ反転色でセットしてそれがどう働くのかが分からない。恐らくVRAMのデータとXOR演算して、反転色の上に書き込むとそのまま反転色、それ以外の所で書き込むと反転色が反転して通常色になるはずなのだが、この処理を実装すると今度はアイコンの色が反転してしまう。まだ何かが間違っている。

手がかりになりそうなのは$BITBLT.SYS。これの使い方が分かればな。DOS J4.0のBIOSインターフェイス技術解説書とかに載っているんだろうか。

この前、JDOSに1040×725のグラフィックモードが存在することを確認したが、Windows 3.xでの解像度は1040×768(またはそれに近い)であることが分かった。垂直方向の解像度を増やすとリフレッシュレートが下がり、CRTモニターではちらつきに影響が出るが、実際の所問題なかったのだろうか(→そもそもグラフィックモードの解像度が1024×768なので、それと大して変わらないか)。

DOSVAX 変更点 (4483PS13→ 4483PS14)

  • Build 4483PS14 (2024/01/18)
    • Windows 3.0 (IBMJ OEM) を PS/55 高解像度ディスプレイ ドライバーを使用してスタンダードモードで実行するための BitBlt 操作を追加しました。 (ただし、Windows 3.1 ではテキストの色が正しく表示されません)
    • いくつかのデバッグ コマンド、VRAMDUMP (ビデオ メモリ ダンプ)、PLTDUMP (パレット ダンプ)、および BLTDUMP (bitblt regs ログ ダンプ) が追加されました。
    • ビデオ BIOS での PS/55 テキスト モードの初期化が属性バッファーの外側のメモリをクリアする問題を修正します。
    • PS/55 ディスプレイ アダプターを再アクティブ化すると画面が乱れる問題を修正します。

ダウンロード

GitHub - akmed772/dosvax: A folk of DOSBox that emulates the Japanese AX and PS/55 computers.

240115 PS/55エミュ製作 [28]BitBltとグラフィック実装は9割完了

BitBltの開発を始めて11日目。JDOSの$BITBLT.SYSには矩形範囲をブロック転送するファンクションがある事が分かり、その処理を解析してビットシフトやアドレスの計算方法をどうにか見いだすことができた。

それをまたエミュレーターに実装して上手く動かすには時間が掛かったが、ついにWindows 3.0は高解像度ドライバーで表示できるようになった。下のスクリーンショットは意図的に画面外のビデオメモリーのデータも表示させている。

Image: Windows 3.02 on DOSVAX

これで安堵するも束の間、Windows 3.1では同等仕様の高解像度ドライバーを使用しているにもかかわらず、表示がぶっ壊れる。

Image: Windows 3.1 on DOSVAX

これはI/Oポートに特定のレジスターへ値を代入する処理をセットアップしたら、8割方正常に動くようになった。テキスト表示がなんか変。

Image: Windows 3.1 on DOSVAX

これも「ワケ分からん!」と言いたくなる話だが、VGAもディスプレイ・アダプターも内部レジスターへのアクセス方法が色々あって面倒くさい。

例えば、ある内部レジスターのインデックス番号01にデータFFh(16進数)を書き込む方法は、

  1. I/OポートAに01を出力し、I/OポートBにFFを出力。
  2. I/OポートAにワード単位でFF01を出力。
  3. I/OポートAに01を出力し、同じくI/OポートAにFFを出力。(ラッチ切り替え処理)
  4. I/OポートCにFFを出力。(このポート自体がインデックス01のデータポート?)

この4通りがあることが分かっている。JDOSやWindowsのバージョンが変わると、知らないI/Oポートやレジスターへのアクセスが出てきて、コード実装も私の頭の中もスパゲッティ化していく。

今回問題のテキスト表示にはBitBltは使われていない。従来のJDOS上でのグラフィックの書き込み方法と同じで、EGAのプレーン同時書き込みと同じような方法が使われている。ディスプレイ・アダプターにはEGAのGraphics Controller Registerと同等の機能があるが、今回はそれにはない追加のインデックスのレジスターへの書き込みが影響していると疑っている。ROPがAND演算の時だけ何かのビットフラグが設定されているが、その意味を解かないと解決できないだろう。

240113 PS/55エミュ製作 [27]1040×725グラフィックモード

Image: 240113 PS/55エミュ製作 [27]1040×725グラフィックモード

ここ1週間、寝ても起きても、仕事の時以外ずっとこのことを考えていた。WindowsのディスプレイドライバーがBitBLTのレジスターに代入する値をテーブルにしてみると、ある程度法則は分かったが、ビットシフトやソース、デスティネーションのアドレスが期待する表示結果とうまく合わない。結果的にアイコンがずれて表示されたり、一部が黒塗りになってしまう。最初にJDOSの$BITBLT.SYSを解析したときは全く意味が分からなかったが、このテーブルと照らし合わせるとアドレスの計算方法が分かってきた。しかし、上手くいくかどうか先行きは見えない。

そんなことより、今回の調査で最大の発見はJDOSが持つディスプレイ・アダプターの画面モードに1040×725グラフィックモードが存在したことだろうか。

モード 種類 表示文字数 ボックスサイズ アドレス 面数 画面解像度
08h 単色文字 80×25 13×29 E0000h 1 1040×725
0Eh カラー文字 80×25 13×29 E0000h 1 1040×725
03h VGAモード3互換? 80×25 13×29 B8000h 1 1040×725
0Ah 単色グラフィック 78×25 13×29 A0000h 1 1024×768
0Dh 16色グラフィック 78×25 13×29 A0000h 4 1024×768
0Fh 256色グラフィック 78×25 13×29 A0000h 8 1024×768
45h 16色グラフィック 80×25 13×29 A0000h 4 1040×725 (NEW!)

この画面モード45hはJDOS上でInt 10h, AH=00hファンクションによって切り替えることは可能だが、ビデオ信号タイミングなどのCRTCのパラメーターが設定されるのみで、他のモードと違ってDOS画面は何も表示されなくなる。

Windowsのディスプレイドライバーもこの画面解像度を使うので、最初はエミュレーターの不具合かレジスターに値を補正する特殊な仕様でもあるのかと色々調べたが、原因が分からなかった。$BITBLT.SYSの画面モード判別ルーチンに画面モード45hがあり、テキスト画面と同じ1040×725のグラフィックモードが存在することが分かった。

240109 PS/55エミュ製作 [26]塗りつぶしとブロック転送を実装

Image: 240109 PS/55エミュ製作 [26]塗りつぶしとブロック転送を実装

BitBLTとして単色塗りつぶし、パターン塗りつぶし(タイリング)、ブロック転送の機能を実装したら、まだ見た目は崩れているが、いい線まで来た。あとはビットシフトとビット演算を上手く実装できれば行けそうな気がするが、まだレジスターの内容に不明な点があり、ぴったりな解を見つけるには時間が掛かりそう。

240107 taiken repo [Niji EN]

I Will Never Recover From Bungee Jumping - YouTube

Rosemiのバンジージャンプ体験レポは笑った。どっからどう見ても日本の光景だな。Rosemi in REAL!

Pomuが動画制作のためにアルゼンチンを渡って南極まで行っていたのにはビックリした。色々危ういトラブルもあって、良く無事に帰って来れたな。部屋の天井から漏水してコンセントにかかってボヤになるとか。そんな中でEliraは死んだかのように寝ている光景はシュールだけど、気付くのが一歩遅かったら…考えると恐ろしい😥

南極旅行とか、なんかネタで話していた記憶はあるけど、本当に実現させてしまう行動力が素晴らしいというか。前人未踏のことをやってのけたな。すごいとしか言いようがない😲

240107 PS/55エミュ製作 [25]BitBLTのレジスター操作を調べる

ディスプレイ・アダプターのBitBLT機能は下のようなコマンドをメモリーに書き込んで実行していることが分かってきた。レジスターにWORDまたはDWORD単位でパラメーターを入れているようだ。

これをコマンド実行毎にレコードとしてデータの記録を取れば、ある程度の法則は見えてくると思う。しかし、サイズやアドレスはすぐに分かりそうだが、ビットマスクやROP演算があるとすれば、その解釈を見いだすのは難しそうだ。

filling?
[89] 3e: 0055 (85) ?c
[89] 36: 0080 (128) ?c
[89] 2f: 0080 (128) ?c 
[95] 0a: ffff (65535) ?c 
[95] 0c: 0000 (0) ?c
[89] 33: 0020 (32) 2 3 4 5 6 7 17 18 1c 1e 20 41 x size?
[89] 35: 0001 (1) 1-768 y size?
[89] 21: 0040 (64) 40 44 48 50 52 72 74 76 78 7a 7c
[91] 29: 0000c284 (49796) address 1
[95] 08: ff7f (65407) mask?
[95] 09: ffff (65535) mask?
[95] 00: 0000 (0) mask?
[95] 01: ffff (65535) mask?
[95] 03: 0000 (0) 0 10 40 50 80 90 a0 b0 e0 f0 ?
[88] 0d: 0000 (0) 0 1
[89] 3d: 0000 (0) 00 40
[95] 05: 0048 (72) 48 1048
[95] 0b: 0008 (8) 8 208 209 20b
[89] 30: 12bb (4795) ?c
[89] 20: 0001 (1) execute

240106 OH MY GOD!? WHAT THE F...airy... [Niji EN]

Image: 240106 OH MY GOD!? WHAT THE F...airy... [Niji EN]

私にとってこの1年間で3人目となる推しの卒業を見送らないといけないようです。まあ、3Dお披露目以来リアルイベント出演があったことを除けば大きな動きがなく、本人の企画が思い通りに実現できていなかったようなので、そろそろ何か新しい動きがあるとは思った。それが卒業とは予期していなかったけど。11月の新衣装発表で束の間の安心感を得たかのように感じられたのは、間違いじゃなかったな。

公式発表の文言にあった配信のアーカイブ非公開化は間違いで、配信では残すと言っていた。未発売のグッズはどうなるんだろう。未出荷のサンリオコラボとか、ブシロードから出る予定のLazuLightミニフィギュアとか。Pomudachiクッションは残念ながら出なかったですね。

配信を見た感じ、次のステップに進もうと心に決めている様子だったので、後はPomuとしての活動を最後まで見送るだけで心配することはないんだけど、LazuLight推しとしては3人揃うことはもうないと思うとただ悲しい😢でも、もしこの後Henyaと同じ所へ行ってNijiENコラボで揃って登場(リターン)したらさすがに笑う😆

ENの黎明期から成長期を通して見てきたせいか、どうにも最近はEN界隈全体の盛り上がりが欠けているように感じられるのは気のせいだろうか。しかし、最近の推しであるScarleが独自路線を歩んで怪しいことをやっているうちは、少なくとも私個人にとっては安泰かな。

240105 PS/55エミュ製作 [24]Win3ディスプレイドライバー

Image: 240105 PS/55エミュ製作 [24]Win3ディスプレイドライバー

結局、あれから懲りずに今度はWin 3.0に対応させようとしています。ドライバーのハードウェアチェックが通らない問題は、MCA機特有のNVRAMにアクセスするI/Oポートを実装してディスプレイ・アダプターのPOS IDを返すようにしたら、起動できるようにはなりました。このI/Oポートは技術解説書などのドキュメントには説明がなく、下のページが唯一の手がかりでした。

Home > Tech > MCA > Checking for Micro Channel Bus - Ardent Tool of Capitalism

しかし、画面解像度の設定が何か変なのと、グラフィックは文字しか映っていない。

これもハードウェア技術解説書には一切触れられてないディスプレイ・アダプターのBitBLT機能が使われているようです。手がかりは下のようなログとDOS J4.0, J5.0に付属する$BITBLT.SYSというファイルのみ。メモリーに書き込まれている89や95は何かのコマンドだとは思うんだけど、この謎をどうやって解けばいいものやら。

PS55_GC: Write to port 3e0, val 1f08h (7944), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 00h (0) -> 1fh (31)
PS55_MemHnd: Setup page handlers
PS55_GC: Write to port 3e0, val 0008h (8), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 1fh (31) -> 00h (0)
PS55_MemHnd: Page handler is restoring.
BitBlt memory:
89 3e 55 00 89 36 80 00 
89 2f 80 00 95 0a ff ff 
95 0c 00 00 89 33 03 00 
89 35 20 00 89 21 7a 00 
89 22 7a 00 91 29 3f c3 
00 00 91 2a fe 85 01 00 
95 08 00 ff 95 09 ff 00 
95 01 00 00 95 03 80 00 
88 0d 01 00 89 3d 00 00 
95 05 48 10 95 0b 09 02 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
 
PS55_GC: Write to port 3e0, val 1f08h (7944), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 00h (0) -> 1fh (31)
PS55_MemHnd: Setup page handlers
PS55_GC: Write to port 3e0, val 0008h (8), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 1fh (31) -> 00h (0)
PS55_MemHnd: Page handler is restoring.
BitBlt memory:
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
99 30 3a 22 02 13 bb 13 
89 20 01 00 00 00 00 00 
 
PS55_GC: Write to port 3e0, val 03h (3), len 1
PS55: Read from port 3e1, idx 3, len 1, ret 80

240101 アニソン歌合戦

Image: 240101 アニソン歌合戦

年末は前日にレコ大と大晦日に紅白を見て音楽のトレンドを吸収してました。アーティストが現地に勢ぞろいの中で一人電話出演のAdoがもしレコード大賞を取ったら面白そうだと思ったけど、まあ残念ながらなかったですね。紅白放送中のニコ実では「アニソン多いな」と言われていたけど(毎度いわれている気がしないでもない)、今日ZIP-FMでコメンタリーとして出演した音楽業界マーケティングの人も、今年はアニメタイアップのランク入りが多かった印象みたいなこと言ってたな。YoasobiのIdolはBillboardの年間米国外ランキングでJ-POP史上最高ランクを取っているし、もしK-POPと同じグローバルの土俵で勝負するならアニメタイアップは避けて通れないな。

年越しはNHKで除夜の鐘をつく瞬間を見ながら、日本滞在中のPomuのライブ配信を見てた。いつもなら年越し配信は日本時間で元日の昼頃にするから不思議な感じというか、この2つを同時に見る光景がシュール。時差の関係でまだ現地で年越していないReimuやScarleの配信にあけおめのコメントがあって、グローバルなチャット欄だと実感させられた。

Scarleの年越し配信を見ながら3DSのステラグロウをプレイしていたら、EEWのアラームが。年明け早々にこんなことが起きようとは誰が予想できた?スマホからEEWの警報が鳴って部屋が揺れ始めたときは安全な場所に逃げたけど、立て付けが不安定な小物が倒れた程度で済んだ。職場は一部のエレベーターが止まって保守業者が復旧しに来るまで利用者の誘導が必要になったようだけど、それ以外で大きな被害はなし。今日は現場の人に任せておいて大丈夫だろう。

231229 Niji Mascots [Niji EN]

NIJISANJI EN「NIJI Mascots」、2023年12月28日(木)11時(JST)からにじストア・ENストアにて同時販売開始!

ついにファンマスコットのグッズが出ましたね。第1弾はEwiwaのweewasとUkiukiのstargazers。抱きかかえるのに手頃なサイズのぬいぐるみも発売されるみたい。まあ、特に「第1弾」という記載もないので、これが今後も他のライバーに続くかどうか分かりませんけど、私としてはLazuLight組とScarlingは揃えておきたい(もし出るならという希望観測)。

231229 2023年振り返り

年末・年越しはテレビとネット配信を見ながら過ごすのがいつものパターンになっているけど、今年に関してはテレビもネットも年末・年越しで何の特番があるのか定まっていないどころか未だに知らない。テレビで紅白と逃走中は今年もやってるんだろうなって事くらいは察しつくけど、探しているうちに年越しそうだな。

大晦日は夕方まで仕事なので、今のうちに今年1年を振り返っておく。

10月から12月まで忙しいこと以外は空白の時期だったので、今の私としては今年がそんなに充実していた実感はないけど、じっくり振り返ってみると、海外旅行したり引っ越したりと意外に激動の年だったな。少なくとも、今後の人生を左右する年になったんだと思う。全然実感ないけど。何年後かに今年が分岐点だったという実感がわくんだろうか。よくわからん😑

レトロPC(今は主にPS/55)との付き合いは、エミュレーターの完成をもってある程度の終着点に至ったかなと。界隈的にはXT-IDEやら新しいハードがまだまだ出てきて、ここ5年くらいは世界も日本もレトロPCを復刻する活動が盛んなように見える。私は古い技術には依然興味はあるけど、レトロPCにここまで熱中することはもうないかもしれない。その代わりに新しい興味の対象が見つかるかもしれないし、それはそれであり。

今年書いた記事の本数を数えてみたら、今の時点で157本だった。3日に1本以上は書いている計算になるけど、そんな頻繁に書いたイメージはないけどな。累計の総数は2013本。多いのか少ないのかよくわからんな。その日作った料理だけ書いた記事もあれば、1週間以上かけて練り上げた記事もあるので、数にあんまり意味はない。

ブログを始めて15年経ったと思うと感慨深いものがあるけど、今後も長く続けようとかいう意気込みは特にない。ただ、ブログはその日の興味や経験を書いた生々しい日記であり、一部の側面ではあるが私の人生でもあり、将来また振り返ったときの足跡として残しておきたいというのが、一つのやりがいになっているかもしれない。生きている限り経験は増え続けるので、ブログも続くのだろう。