[今更誰得] FDD非接続のMSXでMSX-DOSを起動する #MSX

 もう、タイトルが一見すると意味不明ですが、

[今更誰得] MSX(CX5F/YIS503)のジョイスティックポート経由でPC上のディスクイメージファイルを操作する #MSX #CX5F #YIS503
https://mobileff.blogspot.com/2022/01/msxcx5fyis503pc-msx-cx5f-yis503.html

の続きです。

前のエントリでDISK BASICの起動と、ジョイスティックポート経由でPC上のディスクイメージの操作までは確認できましたが、MSX-DOSの起動までは確認できていませんでしたので、MSXDISKのPC側ソフトウェア上で、MSX-DOSのディスクイメージをセットして、MSXDISKを起動してみました。


・・・やっぱり、起動できませんでしたww
いくらやっても、DISK BASICが起動してしまいます。


ディスク有のMSXのブートシーケンスは、

  1. 0000H番地から通常のブートシーケンスが走る
  2. (中略)
  3. 通常のブートシーケンス内で、ROMの検索(ROMカートリッジのような専用ソフト)を行い、見つかったらそのROMから起動する
というものです。

イメージしやすいのは外付けFDDを使っている場合ですが、あれはカートリッジスロットにFDDインターフェースを挿しますよね。カートリッジスロットにはDISK ROM(DISK用のブートプログラム、BIOS、DISK BASICなどが入っている)が搭載されていて、上記のブートシーケンスで、このDISK ROMが検知され、DISK ROMの指定番地からDISK ROMのブートシーケンスがスタートします。

MSX-DOSの場合、RAMを64KB必要としますので、ノーマルBASICで利用するページ2と3以外の、ページ0と1もRAMを割り当てなくてはいけません。

通常のDISK ROMでは、ページ0とページ1にRAMを実装しているスロットがどれなのか、探しに行くようなので問題ないのですが、MSXDISK用にカスタムされたDISK ROMは、前のエントリにあったように、

MSXDISKのROMLDRという実行ファイルでは、すごくざっくりいうと「ページ3に割当たっているスロット番号(メインRAMが置いてあるスロット)をページ1(カスタムROMの書き込み先)のスロット番号にする」というようなロジックでスロットの切り替えをしているんですね。


というロジックを採用しているわけでして、やっぱりというかなんというか、DISK ROMのブートシーケンスでも同じロジックでページ0とページ1のRAMがあるスロットを決め打ちしています。

そうなると、やっぱりCX5F(YIS503)のようなイレギュラー?なスロット構成のMSXだと、RAMの検索に失敗させられてしまうため、MSX-DOSの起動は不可と判定されて、DISK BASICが起動してしまいます。

なので、しょうがないのでやっぱりDISK ROMのブートシーケンスを決め打ちで書き換えて対応します。


;
; CHANGED, TO CREATE ROOM FOR OTHER ROUTINES
; ONLY 64 KB RAM'S ARE ALLOWED AS RAM!!
;
A5E52:  ld  h,c
A5E5E:  ld  l,010H
A5E60:  call    ARDSL
        cpl
        ld  e,a
        push    de
        call    AWRSL
        call    ARDSL
        pop bc
        ld  b,a
        ld  a,c
        cpl
        ld  e,a
        push    bc
        call    AWRSL
        pop bc
        ld  a,c
        cp  b
        jr  nz,A5E9A
        dec l
        jr  nz,A5E60
        inc h
        inc h
        inc h
        inc h
        ld  a,h
        cp  040H
        jr  z,A5E96
        cp  080H
        jr  nz,A5E5E
;A5E96:  ld  a,(RAMAD3) ;ここをコメントアウト
A5E96:  ld  a,001H      ;この行を追加
        ret
        nop
;
A5E9A:  scf
        ret

;ARDSL:  ld  a,(RAMAD3) ;ここをコメントアウト
ARDSL:  ld  a,001H      ;この行を追加
        jp  RDSLT
        nop

;AWRSL:  ld  a,(RAMAD3) ;ここをコメントアウト
AWRSL:  ld  a,001H      ;この行を追加
        jp  WRSLT
        nop
;
; END OF CHANGE, BUT KEEP FOLLOWING ROUTINES AT SAME ADDRESSES!
;
        defs    05EADH-05E52H-($-A5E52),0


【ダウンロード】
"スロット1に64KB増設RAMを搭載した"ヤマハCX5F/YIS503用のDISK.ROM


これで、どうにかMSX-DOSを起動させることができました。



繰り返しになりますが、このようなパッチが必要なのは、スロット0にMAIN ROMと32KB RAMを搭載しているCX5FやYIS503、VictorのHC-6などの一部の機種のみです。

  • 標準RAM容量が64KB以上と仕様で決められているMSX2以降の全機種
  • もとからRAM64KB搭載のMSX1
  • スロット3に標準RAMが搭載されていて、RAM32KBのマシンに64KBの拡張RAMカートリッジを挿したMSX1
  • RAM16KB以下で64KBの拡張RAMカートリッジを挿したMSX1

など大部分の機種ではパッチを当てなくてもそのまま動作するはずです。

ご興味がおありの方はぜひ試してみてください!当時では考えられなかった、物理FDDのない機種でMSX-DOSを起動するというのは、なかなか面白い体験ですよw

ゲームソフトなどをディスクイメージ化したものをお持ちの方は、この環境でゲームも起動できるのか?など是非試してみてほしいです。中の人はMSX1しか持っていない+MSX1対応のディスク版ゲームソフトも持っていないのでw

そのためだけにMSX2を入手したい衝動にかられますが・・・我慢我慢ww


コメント