Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ、自作ソフトの配布など。

MSX共通・漢字ROMの「非漢字部分」のフリーフォント

 MSXの漢字ROMに含まれている「JISの規格外だがMSXの各機種で共通っぽい非漢字部分の文字群」について、旧JISレベルな実機側との互換性をいまさら取るために手描きをしたライセンスフリーフォントです。

 なんという後ろ向きなソリューション!

MSX共通・漢字ROMの「非漢字部分」とは

 MSXの漢字ROMは旧JIS(JIS C 6226、いわゆる78JIS)ベースですが、主に非漢字部分であるシフトJISコード 81ADh~859Eh には、旧JISでは未定義なのに独自に実装された文字および新JIS(いわゆる83JIS)とは違う独自に実装された文字が含まれています。

https://p.gigamix.jp/devmsx/cg/kanjirom_non-kanji_large.png

 この漢字部分は東芝ワープロRupoシリーズと互換性があるものの、MSXにおいては共通の字形で揃えられており、MSX以外のPCでは採用実績が見当たらないため、MSXにおける事実上の規格化された文字群である可能性が高いことが分かっています。

 漢字ROMの調査結果については、以下のブログ記事をご参照ください。 gigamix.hatenablog.com

 この「MSX共通の非漢字部分」はUnicodeで代用できない文字も含まれていることから、いま新規でMSX用漢字フォントデータを作成する際に他のライセンスフリーフォントから移植して再現することができません。そこで、この文字群のライセンスフリーフォントを整備することとしました。

16px角のライセンスフリーフォント

 A to Cさん作のライセンスフリーフォントデータ「漢字ROM image file for msx emulaters」に、MSX共通の非漢字部分データが含まれています。

 このデータで採用されたフリーフォント「jiskan16」の全角文字部分はパブリックドメインです。半角文字と全角非漢字部分のフォントはA to Cさんの手描きで、2021年5月26日、Apache License 2.0の適用となりました。

「漢字ROM image file for msx emulaters」は、A to CさんのWebページでダウンロード可能です。→ http://www.yo.rim.or.jp/~anaka/AtoC/labo/labo32.htm

あの頃は無料のものにライセンスを明示するなんて発想がなかった…。 > jiskan16はパブリックドメインですが手描きの追加部分はライセンスが明示されていません 今更ですが、Apache License 2.0ということにします。@nf_ban — LD A,'akayaman';RRCA (@akayaman) 2021年5月26日

12px角のライセンスフリーフォント

 12pxの全角非漢字部分のフォントは、けっきょく自分で描きました。なんという本末転倒!!

https://p.gigamix.jp/devmsx/cg/kanjirom_non-kanji_freefont_20210622.png

 一旦この内容でFIXとさせていただきます。私のデータもライセンスは Apache Licence 2.0 を適用します。どうぞご利用ください。

MSXの漢字ROM 非漢字領域の各社共通部分フリーフォント(12px, ver.4) ○○グラムと○○メートルの表記を現在の国際ルール(筆記体を用いない)に変更、グラムを「めがねg」へ変更&メートルの筆記体っぽさを少し残したのは、全角文字の「g」「m」と区別するため。 pic.twitter.com/iLdkrhPpYf — Takashi Kobayashi (@nf_ban) 2021年6月20日

フォント解説

 非漢字部分はの文字は番号0(G000)から93(G093)まで、全94文字あります。

https://p.gigamix.jp/devmsx/cg/kanjirom_non-kanji_freefont_20210622_2.png

 この絵の左上を起点(G000)として、右へ走査してゆきます。1文字ごとにカウントを増やしてゆきます。1行20文字で、右端まで走査した場合は1行下がってまた左端から右へ走査してゆきます。

 非漢字部分のシフトJISコードとデザイン割付の対比表は以下の通りです。

シフトJIS 非漢字コード 文字の意味
81AD G000
81AE G001
81AF G002
81B0 G003
81B1 G004
81B2 G005
81B3 G006
81B4 G007
81B5 G008
81B6 G009
81B7 G010
81B8 G011
81B9 G012 g(グラム)
81BA G013 m(メートル)
81BB G014
81BC G015
81BD G016
81BE G017
81BF G018
81C0 G019
81C1 G020
81C2 G021
81C3 G022
81C4 G023
81C5 G024
81C6 G025
81C7 G026
81C8 G027
81C9 G028 空白
81CA G029
81CB G030
81CC G031
81CD G032
81CE G033
81CF G034
81D0 G035
81D1 G036
81D2 G037
81D3 G038
81D4 G039
81D5 G040
81D6 G041
81D7 G042
81D8 G043
81D9 G044
81DA G045
81DB G046
81DC G047
81DD G048
81DE G049
81DF G050
81E0 G051
81E1 G052
81E2 G053
81E3 G054
81E4 G055
81E5 G056
81E6 G057
81E7 G058
81E8 G059
81E9 G060 🗀
81EA G061
81EB G062
81EC G063
81ED G064 縦展開の箱の上半分
81EE G065 縦展開の箱の中間部分
81EF G066 縦展開の箱の下半分
81F0 G067 円の上半分
81F1 G068 円の下半分
81F2 G069 横展開の箱の左半分
81F3 G070 横展開の箱の中間部分
81F4 G071 横展開の箱の右半分
81F5 G072 円の左半分
81F6 G073 円の右半分
81F7 G074 ○にCR1
81F8 G075 ○にCR2
81F9 G076 ○に禁
81FA G077 ○に均
81FB G078 ○に↑
81FC G079 ○に↓
8240 G080 三角付き縦線素片
8241 G081
8242 G082
8243 G083
8244 G084 中黒
8245 G085
8246 G086
82F2 G087 斜線1
82F3 G088 斜線2
82F4 G089 点線縦
82F5 G090 点線横
82F6 G091 点線水玉
83B7 G092
83DD G093 網目

BASIC:phpのexplode関数をMSX-BASICでそれっぽく実現する

 忘備録

 phpでいうexplode関数(旧split関数。区切り文字で文字列を分割して配列変数に代入するやつ)に相当する処理をMSX-BASICで実現するのってけっこう面倒臭いですね…。

BASICプログラムコード

100 'text split sub.
110 '[in] A$:separator, B$:string
120 '[out] SP$():array, TA:array count
130 '[use] TA, TI, TA$
140 TA=0:TI=0:TA$=""
150 FOR TI=1 TO LEN(B$)
160  IF MID$(B$,TI,1)=A$ THEN TA=TA+1
170 NEXT
180 IF 9<TA THEN TA=9:'max array No.
190 ERASE SP$:DIM SP$(TA)
200 TA=0
210 FOR TI=1 TO LEN(B$)
220  TA$=MID$(B$,TI,1)
230  IF A$<>TA$ THEN SP$(TA)=SP$(TA)+TA$ ELSE TA=TA+1:IF 9<TA THEN TI=LEN(B$)
240 NEXT
250 RETURN

使い方

A$=":":B$="a:bb:ccc:dddd"
GOSUB <サブルーチンの行番号>

入力

  • A$:区切る文字(1文字)
  • B$:区切られる文字列

出力

  • 配列変数 SP$:分割された文字列が順次格納されます(最大要素数:9)
  • TA:要素数が格納されます(最大:9)

MSXの漢字ROMの互換性を調査する

 MSXは各社から発売されていましたが、漢字ROMにはどのくらい互換性があったのか調査します。また、MSX以外の他機種とテキストを交換する際の互換性についても検討しています。

https://p.gigamix.jp/devmsx/cg/kanjirom_title.png

分かっていること

 当方で確認できる環境で全ての文字を調査したところ、以下のような結果でした。

  1. MSXの漢字ROMは旧JIS(JIS C 6226、いわゆる78JIS)ベースだが、漢字部分は新JIS(83JIS)による字形の変更が実装されている
  2. シフトJISコード 81ADh~859Eh のうち旧JISでは定義されていなかった部分(主に非漢字部分)に、新JISとは違う独自に実装された文字が含まれる
  3. 独自に実装された非漢字部分は東芝ワープロRupoシリーズと互換性があるものの、MSXにおいては共通の字形で揃えられており、MSX以外のPCでは採用実績が見当たらないため、MSXにおける事実上の規格化された文字群である可能性が高い。
  4. 独自実装と思われる拡張文字には「(CR1)」「(禁)」「(均)」や多種な網点等の文字が含まれており、一部の文字はUnicodeでも代用できない。
  5. なお、MSXの規格において、漢字ROMのどのコードがどの文字を表すかといったJIS規格のような仕様は明確に存在しない。

MSXと他機種とで互換性が失われる、独自実装の拡張文字群

 非漢字の赤と緑の文字について解説。この2色に含まれる文字は、MSX以外の他機種と互換性が失われます。

  • ■ 赤字:旧JIS(78JIS)では定義が無かった空きエリアだが、新JIS(83JIS)では定義されたために他機種との互換性が無い文字
  • ■ 緑字:旧JIS・新JISともに定義が無かった空きエリアだが、後の90JISで第3水準に定義されたものが含まれるために他機種との互換性が無い文字

https://p.gigamix.jp/devmsx/cg/kanjirom_non-kanji_large.png

 ここで気になるのが、独自実装された文字群が当方で確認できる環境(FS-4600F・FS-A1ST・MSXPLAYer・HALNOTE・MSXView)すべてで(デザインの誤差はあるものの)字形は同じでした。松下・ソニー東芝・三洋・アスキーHAL研究所各社ともども敢えて独自実装部分を揃えているのかもしれません。

 非漢字部分で独自実装されている文字群は大まかに「上部(81ADh~824Eh)」と「下部(8492h~859Fh)」に分かれます(表中の「モヤモヤポイント」を参照のこと)。上部の実装は共通化されている傾向が強い一方、下部の実装は各社で違いが見受けられます。

MSXとそれ以外との互換性を保つには

 以上のことから、表中の緑字と赤字の文字を避ければ他のレトロPCや2021年現在のPCとの互換性をほぼ保てます(エンコードシフトJISが適切です)。

 逆にMSXの実機との完全な互換性を確保するには、ROM側に緑字と赤字の実装(特にモヤモヤポイントの上部文字群の実装)が必須、ということのようです。

そしてパイオニアの漢字ROMにはMSX規格外のフォントが入ってる旨がマニュアルに書かれているなど無法っぷりがすごい。 — MSX研究所長 (@yoshimatsuTUQ) 2021年5月26日

 えっ!?

漢字ROM全文字ビュアー(閲覧プログラム)

 今回の調査で私が使用しました「漢字ROM全文字ビュアー」です。もしこれ以外の字形である機種をお持ちの方がいらっしゃいましたらぜひご確認&ご連絡ください。→ twitter@nf_ban

ブラウザで動きを確認する

webmsx.org

ダウンロード

BASICプログラム解説

  • 16PXVIEW.BAS…MSX標準漢字ROM(16pxフォント)のビュアー
  • 12PXVIEW.BAS…MSXView互換ROM(12pxフォント)のビュアー(参考出品) ※対象フォントROMが必要です
  • AUTOEXEC.DS2…READMEを表示します

 次々と漢字を表示します。BEEP音のあとに何かキーを押すと改ページ、Sキーを押すと画面をBSAVE形式で保存します。JIS第1水準で計13枚の画像、第2水準まで保存すると計16枚の画像となります。

【おことわり】画面上の文字はROMをダンプした結果ではなく、文字出力エンジンであるDMシステム2による結果ですので、ROMの実際の内容と違って表示される可能性がありますので予めご了承ください。

www.gigamix.jp

12pxフォントの調査

 MSXの標準漢字ROMは16pxフォントですが、MSXの低解像度に適したスモールフォントも存在します。

HALNOTE・MSXView

 HALNOTE及びMSXViewに付属されているスモールフォントです。12pxフォントと12×8pxフォントの2種類を利用できます。FS-A1GTに内蔵されています。12pxはJIS第1水準・第2水準を搭載、12×8pxはJIS第1水準のみ搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_halnote12_large.png

 12px・12×8pxの双方において、赤字・緑字のどちらも、非漢字部分にMSX共通の字形が実装されていますので、実機で作成したテキストに関しては互換性がほぼ保たれています(モヤモヤポイントの下部は互換性がありません)。

 このフォントは各種対応アプリで日本語表示が可能です。詳しくはブログ記事にて

gigamix.hatenablog.com

松下仕様12ドット漢字

 FS-4600F、FS-A1FM、通信モデムFS-CM1、プリンタカートリッジFS-PW1に内蔵されているスモールフォントです。MSX日本語BASICのCALL KANJI1・CALL KANJI3で対応しています。JIS第1水準のみ搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_matsushita12_large.png

 緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。

【細かすぎて伝わらない】松下仕様12ドット漢字ROMとは、パナソニックの一部環境(FS-4600F、FS-A1FM、FS-CM1)に搭載されたROM。画面解像度が低いMSXでは16px角の標準漢字ROMより12px角が重宝する場面あり。また、漢字BASICの_kanji1と_kanji3でこのROMが利用される。文字の見え方が全然違うでしょ? pic.twitter.com/8fSJPVDd6U — Takashi Kobayashi (@nf_ban) 2020年7月20日

 つまり、MSX以外の他機種との互換性は高いものの、標準漢字ROMのフォントが用いられる CALL KANJI0・CALL KANJI2 と、松下仕様の12ドット漢字が用いられる CALL KANJI1・CALL KANJI3 とでは同一機種でも字形が変わって表示されるということです。

かんたん手帳リフィルくん

 アスキーのシステム手帳リフィル用印刷アプリに付属されているスモールフォントです。JIS第1水準のみ搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_refill12_large.png

 緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。全角文字は松下仕様12ドット漢字と全く同じデザインですが、83JISで定義されている849Fh以降の各種罫線文字が含まれていません(注:確認プログラムのバグで表示できていないだけかもしれません)。

要町 as MSX-View(MSXView漢字カートリッジ互換ROM)

 MSXViewの付属漢字ROMカートリッジと互換性のある、フリーフォント「要町フォント」のROMイメージです。JIS第1水準・第2水準の漢字を搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_kanamecho12_large.png

 非漢字部分に90JISの文字が含まれており、漢字部分も90JISの改定が含まれますので、字形としては90JIS相当品と考えられます。他機種との互換性は非常に高くなる一方、赤字・緑字のどちらもMSX実機とは互換性がありません。

 「要町 as MSX-View」は、A to CさんのWebページでダウンロード可能です。→ http://www.yo.rim.or.jp/~anaka/AtoC/labo/labo32.htm

k12x8shn(MSXView漢字カートリッジ互換ROM)

 MSXViewの付属漢字ROMカートリッジと互換性のある、フリーフォント「東雲フォント(12px)」「k12x8(12×8px)」が組み合わせられているROMイメージです。JIS第1水準・第2水準の漢字を搭載。

https://p.gigamix.jp/devmsx/cg/kanjirom_k12x8shn12_large.png

 ここでは「東雲フォント(12px)」を取り上げますが、緑字は全く実装がなく、赤字はMSX共通の字形ではなく83JIS相当の字形となっています。なお「k12x8」も83JIS相当の字形となっています。

 「k12x8shn」は、門真なむさんのWebページでダウンロード可能です。→ https://littlelimit.net/viewfont.htm

こぼれ話

漢字ROMの源流はどこなのか

テクハンやデータパックのI/Oマップにもその名残が…。 pic.twitter.com/BGxE2hvNV1 — ごりぽん (@goripon_tw) 2021年5月26日

 MSXの漢字ROMは東芝の意向が強く働いた、という見解があります。松下製品に搭載された漢字ROMのICは東芝製、とのこと。東芝仕様の漢字ROMがそのまま規格化されたようです。

 私が分からないのは、東芝仕様をMSXの規格として取り込む際、JIS規格(JIS X 9051-1984「表示装置用16ドット字形」)のような「コードと文字の意味付け」を含んでいたのか?ということです。例えば旧JISの空きエリアの一つ「81F9hはマル禁マークにしよう」というような。非漢字部分の共通化されているかもしれない独自実装の文字が実は或るメーカーによっては字形が異なるかもしれない、という可能性を未だ捨て切れません。

https://t.co/KyKVHQhcPz このサイトによると、FS-A1Fの漢字ROMはTC531000AP(マスク番号6616)でMSX-Writeと同一らしいです。HX-33/MSX-WriteIIの漢字ROMであるTC531000P/CP/AP(マスク番号0071)からの拡張からなのかがわかれば、MSX独自拡張文字(?)の由来の手がかりにはなるかと思います。 — たけがみりう@Nice boat. (@RyuTakegami) 2021年5月1日
TC531000CP-0071は手元に吸出し済みの状態であるから画像化すれば良いのね?ちょっと気になったことがあるのでちょっと作業してみるけど… — SASANO Takayoshi (@uaa) 2021年5月4日
レイアウトが全然違うので比較が難しくなっていますけど、こっちがJW-R50FIIの16×16部分(こちらも意図的に縮小しています)。/\の部分はMSX仕様になっていないと記憶してるんだけど、実際どうだったっけか…? pic.twitter.com/wDZx4ZYHnx — SASANO Takayoshi (@uaa) 2021年5月4日

 東芝製の漢字ROMはワープロ「Rupo」シリーズで採用されたものと同等のようです。ワープロが先にあり、MSXへ転用された可能性が高い。

今後作成するフリーフォントの互換ROMは、どこに合わせるべきなのか

個人的にはJIS2004/2012字形とかJIS第三水準の非漢字部分とか…イマドキの仕様を含んだMSX向け漢字ROMを作る方が良いんじゃないのって気がする。 — SASANO Takayoshi (@uaa) 2021年5月4日

 私も、今から漢字ROMイメージを作るのであればJIS2004/2012字形とかイマドキの規格でいいんじゃないかと思います。もちろん後述の「実機と互換性のある漢字フォント」も組み込めば完璧とは思うのですが。

 で、問題なのは、MSXView互換の漢字フォントのほうでして。

MSX-View用漢字ROMって第二水準のグリフの並びがバグってたりするんですが、あれを直すべきかどうかって問題ありますよね。ソフト側で漢字ROMのバグを意識しているならバグを残した並びにしないといけないし、そうでなければ正しい並びに直さないといけないし…どうするのかな? — SASANO Takayoshi (@uaa) 2021年5月4日

となると対処としては… ・純正相当でバグ無しROMの仕様(ヘッダ文字列)を定めてそれにプログラム側で対応する ・(さっき書いたように)ROMの側で対処コード有無に関係なく使えるようフォントデータを配置する …のどちらかだけど、すでにメンテされてない対応アプリを考慮すると後者が無難かも? — ごりぽん (@goripon_tw) 2021年4月26日

うーんダメか。結構派手にズレてたorz。両用は無理ですね。 pic.twitter.com/VwLvyhwlU8 — ごりぽん (@goripon_tw) 2021年4月27日

 MSXViewの純正ROMには、一部文字のデータ位置が間違って格納されているバグがあります。FS-A1GT内蔵のROMも該当します。対して「要町 as MSX-View」「k8x12shn」のように新しく開発された互換フォントROMでは第2水準の漢字データが追加されることに加え、このバグが修正されています。

 純正ROMを「旧仕様」、互換ROMを「新仕様」と呼ぶことにすると、ROMが旧仕様の場合は一部文字の表示処理をソフトウェア側で補正する必要があり、Viewフォント対応の各種アプリは既にそのように実装されています。

MSXViewのバグについてはモノは既に出回っているので結局ソフト側の対応が必要で、ソフト側の対応フローも既にあって各アプリが実装済(そして作者はフェードアウト気味でソフト改修が見込めない)なので、ROMの実装でバグ解消するなら要町の字形に準拠した新仕様のROMでリリースするのが得策かと。 — Takashi Kobayashi (@nf_ban) 2021年5月4日

なるほど……。となると、やはり12×8の第二水準を機械的な変換で埋めて、

 新仕様向けの互換ROMについてはイマドキの規格(90JIS以降)で作成して良いと思っています。逆に、実機との互換性を重視する旧仕様向けの互換ROMを新規作成する場合は以下の要件を満たすべきと考えます。

  1. 文字体系は旧JIS(漢字部分は新JIS)に準拠し、上記の表のようにMSX特有の独自文字群を実装する
  2. 一部文字のバグを逆算して実装する

独自実装された文字をUnicodeへ代用する

 Unicodeでは何のコードが適切なのか…未来情報産業さんのブログにオピニオンがあります。

miraicorp.blog.fc2.com

miraicorp.blog.fc2.com

 ただし、Unicodeでは代用できない文字も含まれています。

MSXの実機と互換性のある漢字フォント作り

AtoCさんの漢字ROMイメージがOCMやMSXPLAYerへ実装されたもので間違いないと思います。jiskan16にはMSX固有の非漢字が含まれていないから足りない部分を手描きする必要があった、と。他のFPGAプロダクツの事情はちょっと分かりません。 — Takashi Kobayashi (@nf_ban) 2021年5月5日

 公式のMSXエミュレータであったMSXPLAYerに実装された漢字ROMは、A to Cさん製作の「漢字ROM image file for msx emulaters」であることは間違いないようです。この漢字ROMイメージはJISで規格化されたパプリックドメインのフォント「jiskan16(JIS X 9051-1984」をベースに、規格外の半角文字やMSX独自実装の文字を手描きで実装したようです。

 「漢字ROM image file for msx emulaters」は、A to CさんのWebページでダウンロード可能です。→ http://www.yo.rim.or.jp/~anaka/AtoC/labo/labo32.htm

あと、このROMイメージのライセンスについて、jiskan16は半角部分がソニー製で、無償で使えますがソニーのコピーライト表記が必要だったはずなので、手描きで置き換えることでライセンス表記を回避したんだと思います。が、これ自身(手描きを含んだjiskan16)に対するライセンス明示が無いんですね。 — Takashi Kobayashi (@nf_ban) 2021年5月5日

ライセンス表記さえちゃんとしていればSONYのフォントでも問題ないってことですか…(8x16.bdfの表記 https://t.co/OS3nCmCScg みたいに)。おそらく自由に使っても問題ないのでしょうが、なんとなくですがAtoCさんの追加部分に関してもライセンスをきちんと設定した方が良い気がします。 — SASANO Takayoshi (@uaa) 2021年5月5日

 MSX共通非漢字部分のライセンスフリーフォントについては、以下のブログ記事をご参照ください。

gigamix.hatenablog.com

参考文献:漢字ROMに関する情報サイト

MegaSCSI:MSX用SCSI I/Fの使い方備忘録

 MSXSCSI I/F「MegaSCSI」のノウハウ備忘録。私のSCSI活用方針は、MSXWindowsとのデータ交換を手軽にするために、MSXに接続するSCSIストレージをWindowsにも持ってゆける環境の構築を目指すものです。

https://p.gigamix.jp/devmsx/cg/megascsi_cartridge_1280x960_2.png

 ちなみにMegaSCSIを初期化(カーネルインストール・SRAMフォーマット)する方法はこちら。

gigamix.hatenablog.com

SCSIストレージを実機でフォーマットしてパーティーションを切る(SFORM)

  1. SFORM-1ではなく「SFORM-2」を利用する
  2. 似非ASPIは「オン」にしてフォーマットする。

 SFORM-1.COMで初期化するとWindowsでは容量0バイトのパーティーションがマウントされますので、Windowsと併用する場合は SFORM-2.COM を用います。

SFORM-2で似非ASPIオンで初期化し直したら全パーティーションがマウントされるけど、MSXで作ったファイルが見えるようになった。気になるのは、エクスプローラーでは.batファイルが見えない+Amazon DriveをインストールしているとSDカードへ勝手に何かファイルを作ってしまう。 pic.twitter.com/AngNwJKsMn — Takashi Kobayashi (@nf_ban) 2018年3月24日

 2018年当時のこのツイートでは System Volume Information フォルダが勝手に作られるWindowsの仕様に気付いておらず、Amazon Driveの挙動を疑っていました。実際はマウントしたドライブ全てに等しく勝手に作られており、Googleドライブも同様でした。

MSXのSFORM-2でフォーマットしたSDカードをWindowsに差してみたら全てのパーティーションがマウントされたようで割と大惨事。そのうえパーティーション0に書き込んだファイルは、パーティーションまるごと見えない様子。なんだろうこれは…似非ASPIをオフにしたから? pic.twitter.com/HsgXjyeZeU — Takashi Kobayashi (@nf_ban) 2018年3月24日

 MSX-DOS2が認識できるストレージ容量は1ドライブ32MB(ファイルシステム FAT12の最大値)のため、32MB以上のストレージをMegaSCSIのフォーマットツールで初期化すると、32MB毎にパーティーションが分割されます。

 注意点は、分割されたパーティーションはWindowsでは全て別々のドライブにマウントされます。容量230MBのMOドライブの場合、7ドライブ分がマウントされます。パーティーションが沢山ある場合、Windowsのドライブレターの最後(Z:)を使い切る場合もあります。2GBのストレージを32MB単位で区切ると60分割されます。そういうストレージもWindowsではマウントできるのですが、大量のドライブがマウントされる状況はハードウェア側の負担を増やす原因にもなりますし、実用的ではありません。

 2021年現在、私はMSXの実機ではなくWindows PC+クラウドサーバでコンテンツの管理をしているため、本音を言えばMSXの実機側はWindowsとのデータ交換が便利なだけで十分です。私が希望することは、SFORM-2 で32MBのパーティーションを1個や2個だけにして初期化したい(分割数を指定したい)ということなのですが、現状は実現していません。Windowsの管理ツールで複数のパーティーションをつなげて無効化すればドライブ数は減りますが自動化する方法が分からず、手動ではとても面倒な作業です。

 私がSFORMで試行錯誤した顛末はこちら。

https://twitter.com/search?q=SFORM-2%20from%3Anf_ban&src=typd&f=live

仮想ディスクの使い方(EP.COM)

忘備録。MegaSCSIでディスクイメージをドライブにマウントする設定例。マウント先のドライブレターは予め空けて実行。設定後のドライブレターはSCSIデバイスに置き換わるのでマウント解除はESETで空にする。WebMSXでダウンロードしたイメージはMSX実機では形式違い?でマウントできないので注意。 pic.twitter.com/WvX7aLP2SF — Takashi Kobayashi (@nf_ban) 2018年9月28日

 ディスクイメージファイルを仮想的にドライブへマウントできる機能です。「MegaFlashROM」や「Carnivore2」など昨今発売中の多機能カートリッジにおいても「SofaRun」アプリを使うと仮想ディスクの機能が利用できますよね。MegaSCSIではEP.COMを利用します。

 MegaSCSIのEP.COMは、保存したイメージファイルの書き込みセクタが連続している必要があります。よって、ファイルの書き換え(作ったり消したり)が頻繁に起きているドライブではセクタを連続して書き込めないままファイル保存される場合が多いためEP.COMの利用に失敗する場合があります。

 ドライブをフォーマットしたうえでディスクイメージファイルをコピーすれば連続したセクタで書き込めるので、EP.COMの利用が捗るはずです。

ストレージをWindowsでマウントすると以後MSXではボリューム名が勝手に付いたように見える問題

 ストレージドライブにボリューム名を付けておかない状態でWIndowsへもってゆくと、勝手にボリューム名「B」が付けられている問題。

 MSX上で予めボリューム名をつけてからWindowsへ持ってゆく。

ストレージをWindowsでマウントすると「System Volume Information」フォルダが勝手に作られる問題

 Windowsでマウントするたび、Windowsコマンドプロンプトで以下のコマンドを実行する。

d: ←マウントしたドライブ名
rmdir "system volume information" /s /q

 何度も入力するには面倒くさい文字量なので、私は日本語入力の辞書へコマンド1行分を単語登録して、都度実行しています。

将来的にはSCSI経由でクラウドストレージへ繋ぎたい

BOOTHでRaSCSI基板購入して、MSXからMOドライブとして使うことできた。結構嬉しい。はじめ勘違いしてRasPiB+を使っててうまくく動かず。3Bに交換して動いた #RaSCSI #MSX pic.twitter.com/MaXln2yPIw — ハルマッキン (@Harumakkin) 2020年10月28日

MSXでEtherは無理にせよRaSCSI経由でクラウドストレージを直接マウントできれば最高ですね(できるのか調べてませんが)。MegaSCSIなので基本的にFAT12運用なんですよね…(FAT16化に失敗したままウン年経過して未だ実現せず)。Nextor動けばなぁ。 — Takashi Kobayashi (@nf_ban) 2020年10月29日

いちおう、 linuxのクラウドマウントで任意のドライブにマウントできるので あとは rascsi版のドライバがあればナチュラルにアクセスできるはず。(ソースはあるよ) — applesorce (@applesorce) 2020年10月29日

 MegaSCSIとRaSCSIを接続し、RaSCSIと各種クラウドストレージを接続することでMSXのドライブをクラウド化することは可能なようなんですけど、まだ実践したことがありませんが、夢がありますね!

 フロッピーディスクの生産中止によってSDカードへの移行が求められ(ワンチップMSXがまさにそれ)、今度はSDカードも低容量の製品が不足になりつつあるので、直接ネットへ繋がるソリューションが今後求められてゆくのでしょうね。

MegaSCSI:MSX用SCSI I/Fをカーネルインストールからやり直す

 MegaSCSIの似非RAM部分をウン十年ぶりに初期化しようと思いました。が、ノウハウをすっかり忘れたので忘備録。今回の作業で2回失敗して、3回目のカーネルインストールで成功しました。

https://p.gigamix.jp/devmsx/cg/megascsi_cartridge_1280x960.png

 ちなみにMegaSCSIの使い方備忘録はこちら。

gigamix.hatenablog.com

公式の手順

 マニュアルを読めばいたって簡単なんです。

  1. 「インストレーションディスク(インストール用ディスク)」を作成する
  2. MSX-DOSカーネルをファイルに保存する(KSAVER)
  3. MegaSCSIへカーネルをインストールする(MGINST)

 マニュアル(PDF)→ http://www.hat.hi-ho.ne.jp/tujikawa/ese/megaman.pdf

MSX-DOSカーネルをファイルに保存する(KSAVER)

 マニュアルどおりに「インストレーションディスク(インストール用ディスク)」を作成し、MegaSCSIは抜いた状態MSX-DOS2を起動し、以下のコマンドを実行します。

A>KSAVER <ファイル名>

 保存に成功すると、65536バイトのファイルが生成されます。

MegaSCSIへカーネルをインストールする(MGINST)

 カートリッジ裏側のSRAM無効化ボタンを押しながらDOS(例えばインストレーションディスクのDOS2)を起動し、以下のコマンドを実行します。

A>MGINST <ファイル名> /Sxx /D

 /Sxx オプションは、MegaSCSIを差しているスロット番号。スロット1なら「/S01」です。

 /D オプションは、各種設定を初期化し、「似非RAMディスク(ESE-RAM Disk)」と呼ばれるSRAMストレージのフォーマットを行います。せっかくだからやっておきましょう。

 「Install Complete. Thank you.」と表示されたらインストールは成功したので、本体を再起動しましょう。

 インストレーションディスクの作成時に MSXDOS2.SYS と COMMAND2.COM を含める指示がありましたが、カーネルインストール時にこの2ファイルをSRAMストレージへコピーしているようです。おそらくFDD環境でなくても(例えばCarnivore2のNextorのような環境でも)MegaSCSIのカーネルインストールは可能だと思うのですが、上記2ファイルがカレントディレクトリに配置されている必要がありそうです。

エラーが出た場合の対処

「Illigal DOS kernel」というエラー

 1回目のカーネルインストールに失敗した際のエラーメッセージは「Illigal DOS kernel」という、マニュアルには載っていないエラーでした。保存したカーネルのファイル構造に異常があるようです。

MegaSCSIのカーネル復旧に失敗する図。たいして難しくない正規の手順でやってるはずなんだけどな…🤔 pic.twitter.com/1Ntq8j9BoP — Takashi Kobayashi (@nf_ban) 2021年5月15日

 今思えば1回目はMegaSCSIを差したままカーネルを保存していたので、本来取得できたであろう「本体に含まれるMSX-DOSカーネル」ではないもの(例えばMegaSCSIに含まれるカーネル)が生成されたかもしれません。

 確実なのは、MegaSCSIや各種カートリッジを外し、且つ素のFDD環境MSX-DOS2を起動したうえでKSAVERコマンドを実行することですね。

「Bad ERAMDISK」というエラー

 2回目のカーネルインストールに失敗した際のエラーメッセージは「Bad ERAMDISK」でした。MegaSCSI内蔵の似非RAMディスク(ERAMDISK)が認識していないようです。

2回目。状況が悪化してる!? pic.twitter.com/OfMtaePZY4 — Takashi Kobayashi (@nf_ban) 2021年5月15日

 マニュアルにエラーの解説が載ってはいましたが、原因は「スロット番号の指定が誤っている」・対策は「正しいスロット番号を指定する」とあり、参考になりませんでした。

Badはスロット端子が汚れてると出がちです。電池はなくても認識には関係ないです(電源切ると消えるけど) — MSX研究所長 (@yoshimatsuTUQ) 2021年5月15日

 端子の汚れでそんなエラーが出ることがあるの!?と半信半疑でしたが、念のためキムワイプでカートリッジ端子を拭き上げたら、3回目に正常に認識してカーネルインストールが成功しました。

おお、復旧がうまく行ったようで何よりです。カートリッジ側の端子もですが、そろそろ製造から30年モノとなると本体スロット側も汚れて接触不良を起こしがちなので、ペンチで平たく潰した綿棒で掃除したりしてました。もしもの時という感じですが。 — MSX研究所長 (@yoshimatsuTUQ) 2021年5月16日

 本体側の接触不良でエラーが出る可能性もありそう。本体スロットのクリーニングも試せる選択肢の一つ、と。

前回使ったのが何年前なのか何十年前なのかもう分からないけど、MSXのSCSI I/F「MegaSCSI」を発掘した。恐ろしいことにCR2032の電池が入れっぱなしだった…見たところ汚れや液漏れは無いようだが、電池交換したら使えるのかな…? pic.twitter.com/NGWKcoADqN — Takashi Kobayashi (@nf_ban) 2018年3月8日

 SRAMバックアップ用のボタン型電池(CR2032)の劣化でSRAMストレージが認識できない可能性も無きにしもあらずですが、今回のエラーについては関係がありませんでした。

その他のエラー

 れふてぃさんのWebページ「似非RAMディスクの作り方(How to make ESE-RAM Disk)」にも詳しい技術情報がありますので参考になります。主に自作向け。

http://www7b.biglobe.ne.jp/~leftyserve/ese-org/page-00.htm

カーネルインストールに成功すると

 カーネルインストールに成功すると、MegaSCSIに含まれるSRAMストレージからMSX-DOS2が起動するようになります。めちゃくちゃ高速です!

MegaSCSIのカーネルインストールに成功。素の状態ではMSX-DOS2のシステムファイル2つが入った容量1MBytesの似非RAMディスクで起動する。ストレージの残量が932KBytesだからFDD起動(MAX 713KBytes)ではないことが分かる。さあ、アプリをどんどん入れるぞ〜 pic.twitter.com/XNxp9BhL6k — Takashi Kobayashi (@nf_ban) 2021年5月15日

 SRAMストレージに各種アプリをぶっこむのも良し、SRAMは起動ファイルのみの最低限にしてSCSI接続のドライブに各種アプリを配置するという運用も良し…。

こぼれ話

MegaSCSIとは

 MSXパソコン用のSCSI I/Fカートリッジです。元々は「MEGA-SCSI」という名称で同人サークル・似非職人工房(Ese Artists' Factory)からリリースされていました。私は個人的な好みで「MegaSCSI」と呼ぶことにしています。

 似非職人工房のWebサイトはこちら→ http://www.hat.hi-ho.ne.jp/tujikawa/ese/

 MegaSCSIは、最大7台までのSCSIバイスを認識できます。とは言え、2021年の今SCSI規格の周辺機器はほぼ姿を消しました。1990年代はSCSI規格の全盛期で、ハードディスクを筆頭にMOドライブ(光磁気ディスク)、Zipドライブ(Zip圧縮アーカイブではない)、CD-ROMドライブ、PCカードリーダ(PCMCIA)、スキャナ(TWAIN)などなど幅広い周辺機器が発売されており、MSXでもこれらが利用可能な状態でした。

高校野球のシーズンだから野球ツイート多めですけど、MSXのフロッピーディスクのバックアップは変わらずちびちび進めていますので〜。SCSI環境が動いてる間はどんどん使っていきたい… pic.twitter.com/My3s9KLLpX — Takashi Kobayashi (@nf_ban) 2019年7月24日

MegaSCSIに繋ぐテスト。昔MSXとかMacで使ったMOが未だに大量に残ってて、そろそろ処分したいけど中身を確認してから…。まぁ今日はMOドライブが使えるかどうかの目処くらいは付けたい。 pic.twitter.com/BYPNqv3Re7 — Takashi Kobayashi (@nf_ban) 2018年3月24日

 私が2021年現在に所有するSCSIバイスは「PCカードリーダ」「MOドライブ」です。90年代当時はHDD、CD-ROMドライブ、EPSON製スキャナも接続していました。

MegaSCSIは「似非RAM」の流れを汲む自作ハードウェア

 MegaSCSIの源流は「似非RAMディスク(ESE-RAM Disk)」というMSXのメガROMゲームカートリッジを改造して作成するSRAMストレージで、SRAMストレージの仕組みにSCSI I/Fを増設した形で自作向けの回路図やドキュメントが公開されていました。

MEGA-SCSIも一度似非RAM作ってからそこにSCSI増設するような仕組みでしたね。ジャンパー線の山で作るのに苦労しました。ボタン電池でなくキャパシタなので定期的に火入れしてやらないとカーネルもデータも消え去りますがw SDカード使える機器が欲しい・・・#MSX https://t.co/DKrURYOMKB pic.twitter.com/2ZCyjG8PIf — あさひたか (@asahitaka_honjo) 2020年1月16日

When I built mine in 2000 I used Sanyo ML2430 Manganese Litium rechargeable cell with diode/3300r resitor for charging. Kernel stays over 1 year without erase. pic.twitter.com/9ZYEtXUGth — Leo Oliveira (@leo__oliveira) 2020年1月17日

こんなの発掘してしまった。つじかわさんが開発された似非SCSIに、SCC音源を強引に乗っけた基盤ですw 確か似非SCSI初期のプロトタイプの頃で、紙に印刷された回路図を見ながら作った記憶があります。それにしても配線が汚い。。 pic.twitter.com/7w3LQVqHRn — たかを⁧⁨🎯_(:3」∠)_ (@takawo_n) 2020年12月22日

最近仕事が忙しすぎて物作りの時間が取れていないので、懐かしの制作物のご紹介 1995年、大学一年生の時に師匠のつじかわ先輩の手解きで作ったMEGA-SCSI(MSX用SCSIアダプタ)です こんなのを個人で設計できる人が居るのかと衝撃を受けてハード工作に目覚めたキッカケの一品です😀#msx pic.twitter.com/bmgpy18qIQ — くにちこ(Kunihiko Ohnaka) (@kunichiko) 2021年5月30日

 SRAMストレージの容量は本人の頑張り次第で増設できます。MegaSCSIを自作した猛者の方々は256K~2MBytes等の容量でおのおの製作されていたようです。私が2021年現在に所有するMegaSCSIカートリッジは後に発売された製品版(完成品)で、SRAMストレージの容量は1MBytesでした。

SCSIPCカードリーダでmicroSDカードを利用する

 PCカードリーダの話を出す前にPCカード(PCMCIA)の規格の話を書くとして。

 PCカードとは、1990年代のノートパソコンで普及していた拡張端子の一つです。PCカードは名刺サイズ型・5mm厚の寸法になっていて、「FM音源カード」や「フラッシュメモリカード」等の周辺機器をノートパソコンのPCカードスロットへ挿入して利用していました。

久々にMSXの火入れをしたらSCSIのPCカードリーダーへアクセスできなくなって焦る。①うちの子が勝手にPCカードのスロットを入れ替えていたずらしていた、②SDカードのアダプタを交換したらmicroSDが見えるようになった、など綱渡りな運用になっちゃってる…まぁとりあえず復活して良かった。 pic.twitter.com/XCHnAngv8t — Takashi Kobayashi (@nf_ban) 2019年9月21日

 SCSI接続のPCカードリーダは「PCカードの形状になっているストレージデバイスSCSI規格でマウントする装置」として重宝しました。

はい、次はPCカードリーダーをMegaSCSIに繋ぐテストです。これはMSXでの利用経験が無いので、どうなるかは全く分からないな…本体死んでるかもしれんし… pic.twitter.com/JO4hcOKvFY — Takashi Kobayashi (@nf_ban) 2018年3月24日

 世の中には便利なことを考える人が居るもので、デジカメで普及したCompactFlashをPCカードの形状へ変換するアダプタが製造されていました。また、SDカードをCompactFlashの形状へ変換するアダプタも製造されていました。さらに、microSDカードを購入するとSDカードの通常サイズへ変換するアダプタが付属する場合もあります。

32GBでなく32MBのSDカードを2018年のいま用意しようと思うと結構大変で、とりあえずガラケーで使ってたminiSDの32MBが1枚だけ見つかったので、これでやることにする。次に容量の少ないカードは128MBか…ムーアの法則よろしく容量が短期間で倍々に増えていった時代の産物… pic.twitter.com/IABfwdDqmH — Takashi Kobayashi (@nf_ban) 2018年9月29日

 以上の便利なアイテムをマトリョーシカのように組み合わせるととどのつまり「ガラケーで使用した32MBまでのSDカード・miniSDmicroSDMSXでストレージドライブとして認識できる」わけです。MSXで利用する場合はファイルシステム FAT12の制限により、1ドライブの最大容量は32MBとなります(32MB以上のストレージは32MB単位でパーティーションを区切って使います)。

 MSXWindows PCとでSDカード経由でファイル交換ができることはたいへん便利です。

課題:MSXに使える低容量ストレージが入手困難に

 2021年現在のMSX界隈は、microSDカードやCompactFlash等のFlashメモリカードMSXのカートリッジへ直接利用できる「多機能カートリッジ」と、FAT16に対応する新OS「Nextor DOS」の組み合わせがトレンドになっています。2021年にSCSI機器を揃えるのはもはや酔狂で、今はMegaSCSIではなくそれらを利用したほうが圧倒的に快適です。

Carnivore2のFlashROM退避先としてMegaSCSIの各種ストレージを、MegaSCSIのSRAM(メガROM)退避先としてCarnivore2のCFカードを用意しておけば、それぞれの復旧が簡単になることが今回分かった。んーでも、MSXで大容量ストレージ(最低8MB)を複数用意するのって実際は大変ではなかろうか? pic.twitter.com/s1xm39Ts1K — Takashi Kobayashi (@nf_ban) 2020年9月29日

 とは言え喫緊の課題としては、MSXで利用できる各種ストレージは現在では低容量すぎて入手が困難になりつつあります

 フロッピーディスクは既に生産中止してますから言わずもがな、MegaSCSI(ファイルシステム FAT12)の最大容量32MBは今となってはもうゴミ同然です。NextorはFAT16対応ですが最大容量は2GBで、2GBのSDカードもそろそろ新品の購入が厳しい世の中になってしまいました

 2021年現在のSDカード界隈は、規格がSDXC(ファイルシステム exFAT、最大容量2TB)です。そんな中、低容量のメディアが再生産される可能性は殆ど無い状況かと思います。見つけたら買い貯めしておこうかな…

MSXのユーザとして今一番の困り事はストレージ。2DDは生産中止、カセットテープは虫の息、SASIは死亡、SCSIは下火、1チップMSXでSDカード対応したが2GB以下は既に低容量の部類となり危険信号…。クラウド方面に逃げるしかないんじゃないかと思ったり。 — Takashi Kobayashi (@nf_ban) 2011年2月23日

 ちなみにMegaSCSIでNextorを動作させる手段は今のところ存在しないと思います。MegaSCSIをFAT16環境へアップグレードする方法もあるらしいですが方法が分かりません。情報がありましたらぜひお寄せください。よろしくお願いします。→ https://twitter.com/nf_ban/