260208 5550エミュ製作 [59]成果をPRしました

ついに今日、86Boxのmasterブランチに5550エミュレーションのコード統合を Pull Request して、最後の小さな修正を施し、約1か月におよぶ私の仕事は終わりました!フォント16やカラー対応できていない、文書プログラムを持っていないため動作検証できていないという不完全な状態ではあるけども、私個人的には思い残すことがないレベルに達したと思います。

この1か月、起きているうちの半分くらいの時間を英語のデータシートやマニュアルを読みながらコーディングしていたので、もういい加減、この呪縛から逃れたい気分です。この先しばらくはこの失った時間を取り戻すことに奔走するでしょう。ゲームもHSRやZZZはデイリー以外ほとんど進めていないので、ようやく腰を据えて遊べます。

260207 5550エミュ製作 [58]IBM 5550の起動画面

Image: 260207 5550エミュ製作 [58]IBM 5550の起動画面
見た目はほぼ完成しています。ただ、トライアンドエラーの過程で既存のコードを書き換えたりデバッグコードを追加したりしているので、実質IBM 5550専用エミュレーターとなっています。これを他機種と共存できるよう、IBM 5550独自部分を分けていかなければなりません。それはさておき、今回はIBM 5550のブート画面を追っていきましょう。
本文を読む…

260201 5550エミュ製作 [57]RTCの実装

Image: 260201 5550エミュ製作 [57]RTCの実装

IBM PC系ではRTC(時計IC)は1984年発売のPC/ATから実装され、1983年発売のPC/XT初期モデルの時点ではRTCが搭載されていなかった。そのため、毎回のDOS起動時に正しい日時を入力する必要があった。

色んな文献を読んだところでは、IBM 5550は初代モデルからRTCを搭載していたらしい。その実装はIPL ROMやDOSのBIOSを調べて分かった。PC/ATとはI/Oポートが違うだけでなく、RTCのレジスターアクセスも微妙に方法が違う。具体的には、PC/ATではI/Oポート70hにOUT命令でアドレスを書き込んでポート71hに対してOUTで書き込み、INで読み込むというシンプルなアクセスだが、IBM 5550では、

  1. ポート360hでCS (Chip Select) ビットを1 (0x40) にし、アドレス(下位4ビット)を書き込む。
  2. ポート361hにデータを書き込む。
  3. ポート360hの書き込みビットを1 (0x20) にするとデータが書き込まれる。
  4. ポート360hのCSビットを0に戻す。

という手続きを取る必要がある。RTCに何のICが使われていたか分かっていないが、レジスター構成は一般的な組み込みシステム向けRTCチップと大差なく、年月日時分秒が10進数で各桁4ビットずつ持っている。年データは加工せずそのままの値で、DOS側では80以上を1980年から1999年、80未満を2000年から2079年に変換している。TC8521など他のRTCチップでは、年データを1980年からの積算値で持っている場合があるので、ここも注意する必要がある。

Index (mask)
0(f) = second x 1 (BCD)
1(7) = second x 10 (BCD)
2(f) = minute x 1 (BCD)
3(7) = minute x 10 (BCD)
4(f) = hour x 1 (BCD)
5(3) = hour x 10 (BCD)
6(7) = weekday?
7(f) = day x 1 (BCD)
8(3) = day x 10 (BCD)
9(f) = month x 1 (BCD)
a(1) = month x 10 (BCD)
b(f) = year x 1 (BCD)
c(f) = year x 10 (BCD)

RTCの実装が終わったら、表示周りを直していくか。全角文字が豆腐になっているのはDOSのディスクにフォントファイルが入っていないためだが、私はフォントファイルが含まれているバージョンのDOSを持っていない。これはフォントカード(漢字ROM)を実装することで解決可能だが、そのROMデータを持っていないので、まずはフォントデータからROMデータを生成するツールから作る必要があるだろう。その構造はPS/55の初代ディスプレイ・アダプターと似ていることは既に分かっている。カラーパレットの解釈は私が期待していたものと違うので、どうしたら辻褄が合うのか、頭を悩ませている。ゴールはすぐそこに見えるようで、課題はまだ多い。

260201 5550エミュ製作 [56]日本語DOSの起動に成功!

Image: 260201 5550エミュ製作 [56]日本語DOSの起動に成功!

キーボードコントローラーとディスケットコントローラー (FDC) を実装して、とりあえずDOSが起動するようになった。漢字が豆腐になるなど表示が変だけど、これは意図したとおり。これが表示された瞬間は大喜びだった。

一番の山場はやはりブートローダーだった。IBM 5550のFDCのI/Oアドレス (3F4h, 3F5h) はIBM PCと同じだが、コントロールポート (3E0h) のアドレスとビットの意味が違う。DMAコントローラーのバンクアドレスを指定するI/Oポートの並びもIBM PCと違った。ディスクリードのデータが正しい位置に読み込まれないから、これに気付くまでIPLの解析に時間が掛かった。

IBM 5550用日本語DOSのディスケットのブートセクター(正確には、IBM PCと違ってブートローダーが含まれていないので「予約セクター」と呼ぶべき)がIBM PCと違うことに気付いた。しかも、全く構造の異なる2種類が存在する。3.5インチ2DD機用の新タイプと、5.25インチ2DD機用の旧タイプが存在する。私が持っているIPL ROMは初期モデルのようで、旧タイプにしか対応していないようだった。しかし、持っているDOSは後ろの方のバージョンで、新タイプのフォーマットしかない。これを旧タイプのフォーマットに手動で書き換える必要があった。このためにDOSのSYSコマンドを解析した。

旧タイプのフォーマットはBPB以外のデータがIBM PC用DOSのブートセクターと異なる(後にFORMATコマンドで確認したところ、BPBも記録されないことが判明)。しかし、FATの位置は同じだから、生のDOSではFATの先頭に書かれているメディアディスクリプタさえ読めればディスクフォーマットを判別できることから、他機種とのデータ交換では問題にならない。(Windowsでは無効なフォーマットとして扱われ、エラーになる。)

IPLからブートするために予約セクターに必要な情報は次の通り。

Addr:
0Ah: Sig (D7h)
18h-24h: Sig 12 bytes (C9 C2 D4 F5 F5 F5 F0 40 40 40 40 40) 'IBM5550     ' in EBCDIC
49h: ? (48h = 9 sectors / track, 40h = 8 sectors / track) (0100 1000 or 0100 0000)
108: (000Eh) -> bp+14 = bx+2: Absolute sector index for boot loading table
10A: SP - (0080h) Data size -> bp+18 = bx+6: DMA offset for data read

ここにはブートロードに必要な情報を含むテーブルの位置が記録されている。このテーブルはIBMBIO.COMファイルの先頭にあり、ロードするデータの先頭クラスター番号、サイズ、ロード先のセグメントアドレス、オフセットアドレスなどがある。IPLはこの情報を読んで、中間ローダーやDOSのBIOSをディスクからメモリーにロードする。

?     ClusR  SizeR  SegE   Fl?   OffsE       OffR
40 00 00 00  00 00  00 00  00 00 00 1C 05 00 00 00
0E 02 10 00  00 02  00 20  A0 00 00 00 00 00 00 00
0E 02 6F 00  00 34  00 11  00 00 00 00 00 00 00 00
0E 02 11 00  00 BC  40 05  13 00 00 00 00 00 00 00
0F E0 0E 00  F2 01  00 30  B2 00 F0 00 00 00 00 00
0F E2 0E 00  F2 01  00 10  52 00 08 01 00 00 00 00

あとはDOSを使いながら表示の修正を行っていくことになるだろう。エミュ製作は今スタートをきったばかりだ。

260122 5550エミュ製作 [55]ディスプレイライターとの類似点

Image: 260122 5550エミュ製作 [55]ディスプレイライターとの類似点

今の完成度は、IPLのエラーダンプのような画面を表示できる(色は正しくない)ところまでで、まだブートローダーにたどり着いていません。

前の記事で、IBM 5550に使われているデバイスがIBM PCと似ていることを挙げたけども、今回、IBM PCとの明確な違いを見つけた。ハードウェア割り込み (Intel 8259) の割り当てがIBM PCと全く一致しない。むしろ、ディスプレイライター (6580) と一致している。

割込番号 IBM 5550 Displaywriter PC/XT
0 ? Incoming data for printer sharing Timer
1 Async Comm Transfer data to commo data link Keyboard
2 Fixed Disk Printer and Mag Card data transfer Reserved
3 Keyboard Keyboard incoming data Async Comm (Sec)
4 Diskette Diskette interrupt Async Comm (Pri)
5 ? Not used Fixed Disk
6 Timer Software timer Diskette
7 ? Error on commo data link Printer

6580 ディスプレイライター・システムはIBMが1980年6月(日本では1980年9月10日)に発表した欧文ワープロ。CPUに8086を使用し、専用OSで動くワープロソフトや通信機構が供給された。後にUCSD pascalやMS-DOSなどの汎用OSがサードパーティーから供給されたほか、通信端末として使うこともできた。

Image: Displaywriter
(OA情報別冊 OA繁盛記、電波新聞社、1983年より)

IBM PCとの明確な違いは割り込みだけではない。プログラマブルタイマー (Intel 8253) の入力クロックがIBM PCでは1.19318 MHz、IBM 5550では2.0 MHzと違う。

現行の86Boxにはこれらの仕様が異なるシステムを実装した前例はない。86BoxでIBM 5550のIPLが動くように改造するところから取りかかっているけども、IPLにあるBAT(Basic Assurance Test) 診断プログラムの一つ一つがことごとく引っかかる(パスしない)ので、山を越えて超えても、まだ山が先に連なっているという状況。PS/55のディスプレイ・アダプターと類似性があって、そっちのエミュ開発が先行して完了していたからまだモチベーションはあるけども、これが最初からだったらとうに諦めていた。まだ諦めてはいないが、DOSのブートすらできていない段階であり、成功する確証もない。どこまでトライしてどこで諦めるかというせめぎ合いと常に戦っている。

260119 PS/55エミュ製作 [54]DOSVAXに5550エミュを実装するのは断念

DOSVAXに5550の日本語DOSをロードするブートローダーを実装して実験的に動かしてみたけど、5550の日本語DOSは8259割り込みコントローラーをレベルトリガーモードにセットするらしく、これはDOSBoxではサポートされていない。ここでつまずくようでは、この先も多くの困難があるだろうと予想して、その苦労をDOSBoxに注ぐくらいなら86Boxに注いだ方が良いと思って断念した。

86Boxの場合はメモリー容量といったシステム構成を認識する部分からエミュレーションを実装しなければならず、技術資料なしに作ることは非常に困難を伴う。まず、IPLのハードウェア診断部分をスキップするよう改造しながら、グラフィック部分のエミュレーションを実装して、それで実際に動かせるか判断する必要があるけど、今の時点ではそこまでできていないので、成功するかどうかは分からないといったところ。

260115 Wikipedia 25周年

Image: 260115 Wikipedia 25周年

25 years of Wikipedia

Wikipediaが開設25周年らしいです。おめでとう!そして、ありがとう!ほぼ毎日使っていて、本当にいつも助かっています。

私はWikipediaを初めて見たときのことを今でも覚えています。具体的な時期は忘れましたが、学校のWindows 2000のPCで調べ物か単なるネットサーフィンでたどり着きました。その頃は印刷された本の事典以下の情報量しかなく、本当に役に立たないサイトでした。

Image: Wikipedia

Web Archiveで調べるとこんな感じだったらしい。記事の中身は、概要の下にちょっとしたリストがあるくらいで、その概要すら赤リンクだらけ。確かにこんな感じだった。でも、思った以上に記事の本数が少ないな。

何にせよ、本当に使い物にならないサイトで、マイクロソフトのオフライン百科事典ソフトである『エンカルタ』の方がまだ中身が充実していました。この5年後くらいには、出典の少なさに目をつむれば、情報量ではまともな記事が揃い始めた記憶があります。

ITインフラの整備など公式スタッフの貢献も欠かせないけども、大部分はボランティアによって成り立っています。ルールを発案し、意見をまとめて策定する人、それを運用する人、ルールに基づいてページやユーザーを管理する人、問題のある記事を修正したり、削除依頼を出す人、それをレビューする人、テンプレートを作る人、サイトやエディターを改良する人、システムメッセージを翻訳する人、色んなボランティアの貢献でここまで成長したことを思うと、感謝の思いは尽きません。

260115 同意ゲーム [Vtuber]

Image: 260115 同意ゲーム [Vtuber]

【Agreeee | 利用規約に同意したい】 I think I might get a little mad 【NIJISANJI EN | Elira Pendora】 - YouTube

20人以上の配信者の同意ゲームを見ていました。それぞれの人の初見の反応が面白いのと、ゲームセンスがある人が有利なことは確かだけど、それぞれの得意ジャンルによって得意不得意が分かれるので、その人の傾向が見られるところがいい。このゲームは良くも悪くも一定レベルの中でランダムに選ばれるので、組み合わせ次第ではすぐ本編に到達できる可能性がある。最近追っていなかった人の配信も何人か見て、たかだか数か月から1~2年で変わらないかという人もいれば、ちょっと印象が変わった人もいて、よきかな。

全員を見つくしたわけではないけど、元ネタの認知度をまとめると、意外な結果が見えた。

スイカゲーム
さすがに配信者で話題になったゲームなので、全員が気付く。
広告ゲー
年代関係なく見たことある人は知っている感じ。私が思っていたよりも知らない人が多い。
輪投げゲーム
半々くらい。上の世代の方が認知されているけど、子供向けトイとしてまだ現役なので、若い世代でもやったことがある人は気付く。
地雷避けゲーム(Windows 8以前)
PCに標準で入っていた時期からずいぶん経つので、根っからのPCゲーマーでなければ知るはずなく、知らない人の方が多い。
ダーツルーレット
配信者は知っててもあえて言及しないことがほとんどのため、認知度は不明。(日本限定)
イルカ
初出はかなり古いが、日本のネットミームに詳しい人の間では知識として結構知られる。歴の長い配信者は割と知っている。(日本限定)
スクリーンセーバ(Windows Me以前)
ほとんどの配信者が知らない。コメント欄は意外に反応があるが、正解を知っている人は少ない。

スクリーンセーバのネタを知っている人は1人だけ、にじさんじの2018年組にいました。しかも、知識だけじゃなく、ちゃんとリアル経験者。皆無だろうと思っていたけど、いるもんだね。まあでも、結局はゲームのうまい下手ではなく、クリアできるできないでもなく、エンターテインメントなので、楽しければそれでいい。

260112 IBM 5550のIPLを解析 [PS/55]

最近、幸か不幸の巡り合わせか、IBM 5550のシステムROMが見つかってしまったので、まだ諦め切れていない私はこれを解析していました。私が一番気になっているブートストラップの謎(ディスクI/O周り)については未だ分からない点が多いが、それ以外ではそこそこの収穫があったと思う。
本文を読む…

260105 2000年代PCとゲーム文化を詰め込んだ『同意ゲーム』

Image: 260105 2000年代PCとゲーム文化を詰め込んだ『同意ゲーム』

最初に見たのはサロメの配信からだったけど、色んな人のゲームプレイを見ていると、ゲームスキルがある人は1時間以内に突破できているから差が出るな。しかし、計算問題とかタイピング能力はまた別問題か。パズルに反射神経に、色んな要素が要求されるな。

あんなちゃちな見た目だけど中身は良くできてる。見た目がWindows XPのUIだけどWindows 9xのスクリーンセーバー「3D迷路」を模したゲーム、GBA/DSのロックマンエグゼ、携帯ゲームの糸通しと、あのゲームを作った人はニコ動クリエイター世代(今の30代から40代)だな。ネタがうわべだけ知ってて出てくる組み合わせじゃない。

Image: Win9x 3D maze screensaver

一応、英語、中国語にも対応しているけど、ネタは日本ローカルのものが多い。Officeアシスタントのイルカネタもアジア圏にしか通用せず、欧米版のMS Officeではクリップのキャラクターが標準だったので、イルカとしては意外に認知されていない。しかし、評判が悪かったのは同じだった模様。このクリップ、Windows 11になって絵文字(📎)で実装された。一応、Twitter(当時)でLikeを2000以上獲得したら実装するという企画だったらしい。

Image: Win11 Emoji clip

Roland UM-1EX (USB MIDI I/F) のラグ問題

Windows XPでUM-1EXのMIDI再生にラグが生じる問題、マザーボードを交換してから初めて使う機会があったんだけど、標準ドライバーでもAdvanced Driver モードでも、ラグ無しで使えるようになっていた。同じMIDIファイルを再生しているからデータが違うことはないだろうし、USBホストコントローラーとの相性問題か、チップそのものが不良だったか。マザボはASUS P8P67がP8Z68と0.5世代変わっただけなので、チップセットとしてはあまり違いは無く、不良だった可能性が濃厚。

Image:

現状、Win98ではSound Blaster AWE 64のゲームポートMIDI出力とUM-1EX(Win98ではAdvanced Driverモードのみサポート)で体感的な違いはない。