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

DOS文書プログラムの3通りのコピープロテクション

DOS文書プログラムのコピープロテクションを解析してみた。なお、私は当時の事情は知りませんが、調べたことを知ったかぶりで書いています。DOS文書プログラムのコピープロテクションは環境に応じて3通りの方法がとられている。どのバージョンでコピープロテクションが追加されたかは分からないが、私の手元にあるファイルを調べた限り、DOS文書プログラムIIIバージョン1.0(1988年)の時点では既にあったようだ。
本文を読む…

231226 PS/55エミュ製作 [23]今後の課題

PS/55エミュレーターを作り始めてから2年が経ったけど、実機がない中で現状やれることはやり尽くした気がする。テキストモードが実装できればいいと思っていた当初の想定を上回って、BASICのグラフィックアプリケーションが動くレベルになったので、JDOSを動かす環境としては十分。

ソフトウェアや資料さえ集まれば、まだまだ改善の余地はある。

OS/2 J1.x

せっかくのPS/55なので日本IBM版のOS/2 J1.xを動かしたいという気持ちはあるんだけど、私がそもそもディスクを所持していないのと、あったとしても現状は動かないでしょう。

OS/2 1.xを動かすにはハードウェアのエミュレーションやPS/2特有のABIOS (Advanced BIOS)、80286プロテクトモードの実装などが必要になってくるので、DOSBoxベースでは無理がある。86BoxではOS/2英語版が動くので、そこにPS/55の拡張部分を実装すればワンチャンあるか。ただ、現状でWindows 3.1のディスプレイドライバーが動かないことから、ディスプレイ・アダプターのエミュレーションが不完全と考えられ、OS/2でも同じ問題にぶち当たりそう。

韓国版、台湾版、中国版への対応

PS/55は韓国、台湾、中国にも各国向けにローカライズされた上で輸出されている。JDOSに相当する各国向けのDOSが存在するはずだが、それがないことには実装しようにもテストができない。文字コードが分かればDOSアプリケーションレベルでは何とかなりそうだが、それ用のフォントローダーを組み込むのが手間。

APIレベルでの対応

JDOSのシステムディスクなしにJDOS用アプリケーションを動かすとなるとJDOS固有のAPIを追加する必要があるが、資料(技術解説書)がないので追加のしようがない。JDOS自体は手元にあるので動作解析である程度何とかなるかもしれないが、骨の折れる作業だ。

マルチステーション5550用のDOS

KDOSを調べた感じ、5550のハードウェアはキーボードとグラフィック周りがPS/55互換で、他はPC/XTに近い。ただ、ディスクBIOSのブートローダーやハードディスクのパーティションテーブルは5550固有の仕組みがあると予想する。調べてもDOSブートローダーのエントリーポイントすら分からず、途中にBIOS ROMへFAR JMPする部分もあり、せめて実機のBIOS ROMがないことには、これ以上の解析は難しい。

もし上記のような課題を解決できる見込みがあれば、また改良を進めるかもしれない…

231224 ログイン時に求められる思考能力認証

年末も近いので今月の出費と預金残高とかチャージ残高の確認をしていたんだけど、ログイン認証が年々パターンが変わって厳重になっているのを感じる。

My docomoにIDとパスワードでログインすると、登録メールアドレスの全部に通知が行った上で指定のスマホ端末でPIN認証。色んなメールアカウントから新着通知が来るから、なんか認証一つに大げさだな。

PlayStation Storeにも久々にログインしたけど、見本の写真と比べて物の種類と数が同じ写真を選ぶという、IQテストかなんかかと戸惑った。