Image: 211208 PS/55エミュ製作 [8]DOS Jx.xが起動できるようになった

利用者定義文字については、BIOSは仕様が分からず未実装ですが、ハードウェア的にはフォントROMからもフォントパターンを読み出せるようになりました。PS/55では外字RAMと同様にフォントROMもA0000h-BFFFFhにバンク切り替えで出現させているようです。ちなみに、上で表示している漢字はJISコードで最も画数が多い字。昔、漢字辞典で画数から区点コードを調べたときに目に焼き付いたのでよく覚えてる。

DOS K3.3では半角文字のフォントはディスク収録のFNTファイルからロードされますが、DOS J4.0以降では同様のフォントファイルがなく、フォントROMからロードしているようだったので、これも解析に苦労しました。フォントROMに64バイトや72バイト毎に何かしらのパターンを書き込んで、正しく表示されたときに1文字当たりのバイト数が判明します。そこで、半角文字のROMアドレスを割り出すために各文字にアドレスを書き込んでDOSを起動し、実際に表示されるドットパターンを2進数に変換すると、表示されている文字のROMアドレスが分かります。

DOS起動時にCPUが暴走する不具合はfar jumpでBIOS ROMのエントリーポイントにジャンプしているとわかり、5550のBIOS ROMを解析した所プリンターBIOS (INT 17h) へのエントリーポイントであることが判明したので、DOSBoxでは該当INTのcallbackへのポインターをセットしてやるだけで済みました。DOS K3.3で日時が取得できない問題も同じ方法で済んだので、アセンブラでRTCを取得するコードを作った苦労は無駄になりました😏

/*
BIOS Entry Points for PS/55 Model 5550-T
FE6F2h, int 15h ax=c501h (INT 19h) Bootstrap Loader   ->callback[10]
FE739h, int 15h ax=c502h (INT 14h) Serial port        ->callback[3]
FE82Eh, int 15h ax=c503h (INT 16h) Keyboard
FEC59h, int 15h ax=c504h (INT 40h) Diskette            
FEFD2h, int 15h ax=c505h (INT 17h) Printer            ->callback[5] (*DOS J4.0)
FF065h, int 15h ax=c506h (INT 10h) Video                            (*DOS J4.0)
FF841h, int 15h ax=c507h (INT 12h) Get memory size    ->callback[2]
FF84Dh, int 15h ax=c508h (INT 11h) Get equipment list ->callback[1]
FFE6Eh, int 15h ax=c509h (INT 1Ah) Time               ->callback[6] (*DOS K3.3)
*/
rptr = callback[5].Get_RealPointer();      // INT 17H Printer (used by DOS J4.0)
phys_writeb(0xFEFD2 + 0, 0xEA);            // FARJMP
phys_writew(0xFEFD2 + 1, RealOff(rptr));   // offset
phys_writew(0xFEFD2 + 3, RealSeg(rptr));   // segment
rptr = callback[6].Get_RealPointer();       // INT 1AH Time (used by DOS K3.3)
phys_writeb(0xFFE6E + 0, 0xEA);             // FARJMP
phys_writew(0xFFE6E + 1, RealOff(rptr));    // offset
phys_writew(0xFFE6E + 3, RealSeg(rptr));    // segment

今まではDOS K3.3専用エミュレーターでしたが、これでDOS J4.0, J5.0が起動するようになりました。起動はね。セットアップが起動するとエラーが出たり画面がバグったりするので、まだ何か足りないようです🙁

Image: PS/55 Emulator

もうやだこのドスqあwせdrftgyふじこlp


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!