にがMSX

〜 FS-A1の改造 〜




 Prologue


こいつをA1の記憶回路に取り付けろ。 SONYのMSXの回路を参考に開発した。
すごいぞ、A1の性能は数倍に跳ね上がる! 持っていけ。そしてすぐ取り付けて試すんだ!



FS-A1 (Red color version)

 2014年〜2015年にかけて、はにはにさんとMSXの補修に関わる情報や部品のやり取りをしていた際に研究用として赤いFS-A1をご提供頂いた。その時の記事がコチラ

blog記事に書いてある通り、キズやホコリのない超イケメンな赤モデルであったが、ACアダプタが無く売り物にならないとして当方へドナドナされてきた。

(はにはにさんのblogより画像を引用)

 右端に見えるACアダプタのコネクタは3端子で特殊な形状。嵌合するコネクタ単体での入手はほぼ不可能のようだ。

全く同じ仕様のACアダプタがFS-A1mk2、SONYのHB-F1でも使われており、互換性はある模様。

 この巨大な純正ACアダプタは、ジャンク品として出回っている本体には付属していないことが多く、このために活用できない機体が相当数存在すると思われる。

海外でもこれが障害になっている模様。MRC(MSX Resource Center)の関連スレがコチラコチラ

(画像は当方所有のもの)

 2電源仕様で、DC9Vはともかく、AC18Vを要求するのがクセモノである。

 AC18VはFS-A1内部でダイオードで整流され、レギュレータで±12Vに降圧される。±12Vはカートリッジスロットに供給されるほか、映像・音声信号を処理するHybrid ICでも使われるため、ここに電力を供給しないと絵が出せなくなる。

当方所有のFS-A1(黒モデル)と FS-A1mk2は通常の+9VスイッチングACアダプタのみで動作するように改造済みである。改造記事はコチラ

なお、今回の赤モデルでは電源の改造は行わない方針。

 右はHB-F1の付属ACアダプタのコネクタと内部の画像である。FS-A1のものと外観、形状、電圧、電流の仕様も同一であり、製造元も同じなのかも?

経年しているので大きなコンデンサの劣化が気になるところではある。SONYのものはガワがラインヘッドネジで閉じられており分解には特殊なドライバーが必要らしい(パナは普通のネジ)。

(画像はMikasen.さん提供)

 赤ワイヤー側のAC18Vはトランスからそのまま出力されているが、白ワイヤーのDC9Vはダイオードで整流されてコンデンサで平滑化されている。

DC9VはMSX本体内のレギュレータで5Vに降圧・安定化される。


改造の方針

1 メモリ 512kB増設
2 漢字ROM増設
3 FM音源増設
4 システムROM書き換え
 当サイトでは拡張スロットを使わないことを基本方針として本体の改造を行っている。拡張スロットは価格が高価別途電源が必要電気的接点が増える物理的に肥大化、とデメリットが多く(個人的な感想、 導入を避けてきた。とはいえ、M.A.D.社やかつてのフロントラインの拡張スロットは安定動作のための様々な工夫がされているし、カートリッジを差し替えるだけで自由に機能を増やせるメリットは大きいだろう。本体改造は変態的嗜好でもあるので、普通の人には改造を行わずに拡張スロットを導入することをお勧めする。


 初代FS-A1はシンプルな構成のMSX2で、ROMゲームをプレイする分にはあまり困らないのだが、ちょっと突っ込んだ使い方をしようと思うと足りないものが目立つマシンである。ディスク媒体のソフトはスロットにFDDやSDカードデバイスを挿せば読めるが、DOS2系のOSは128kB以上のプライマリRAMを要求するため、ノーマルの64kBでは不足する。 マッパメモリ内蔵のMegaFlashROM SCC+SDなどを使えば問題ないが、当方自作のSDカードデバイスは増設メモリを搭載していないので、スロットの節約のために本体の内蔵メモリを拡張しておくべきだろう。手法については、A1mk2の改造記事の後半に書いたように、628512相当のSRAMをS1985のマッパアドレス線に接続することにした。



 漢字ROMは市販ゲームではあまり使われなかったようだが、フリーソフトを使う際に意外と必要。なくてもエラーにはならないものの、画面に豆腐(■)が現れてとても悲しい目に合う。漢字フォントデータはAtoCさんがエミュレータ用にリリースしている「漢字ROM image file for MSX emulators」を有り難く使わせて頂いた。フリーのフォントをコンバートして機種依存文字を手入力されて作られたのだとか(お疲れ様です)。MSXエミュレータ用とされているが実機でも使うことができた。

ちなみに外付けの漢字ROMとしては、ワープロカートリッジやMSX-JEカートリッジに内蔵されたものがいくつか存在するが、単体の漢字ROMはレアだとか(参考リンク:れふてぃServe)。ウチにもビデオテロッパFS-UV1やワープロプリンタFS-PW1のカートリッジがあるが、スロットのリソースを消費するし、そもそもこんな邪魔なモノを挿しっぱなしで運用するのは避けたいところ。

なお、漢字ROMのないMSXでも日本語テキストファイルを表示させることはできる模様。門真なむ氏が作成した8ドット漢字フォント「美咲フォント」を内包するテキストビューワ「FQV」がおちっん氏のサイトにてリリースされている。



 FM音源はゲームで遊ぶにもあったほうが良いし、各種音源プレーヤーを動作させるには必須の装備といえる。外付けのFMPACで増設するのがお手軽であるが、スロットを消費してしまうとディスクドライブとSCC音源の併用が困難になる。

内部増設では音源チップ YM2413をIOポートにぶら下げることになるが、ソフトウエアから認識させるために、FS-A1FXの改造と同様の手法で本体のシステムROMを書き換え、音源ドライバを潜り込ませることにした。



メモリ増設 (512kB)

 A1mk2 のメモリ512kB増設と同様にS1985(MSX SYSTEM II)のメモリマッパレジスタを利用した512kB化を行うが、このためにはS1985の機能設定が必要である。S1985は最大512kBまでのマッパーメモリを管理するためのマッパーアドレスMA14〜MA18を出力できるが、最上位のMA18を出力するピン(3p)はMA18かキーボードDIR信号のいずれかを選択する仕様になっている。どちらにするかはシステムリセット時のキーボードリターン信号X5の状態で設定される。具体的にはX5をリセット時にLレベルに落とすことで3pからはMA18が出力される。

上図はBABAXさんが公開されているFS-A1の回路図 FS-A1_PWB-REV02_circuit schematic Rev.01a から抜粋したもの。キーボードリ ターン信号X5はCN10 の5pやIR4の6pに出ている。デフォルトでX5はIR4によりプルアップされているのみで、S1985の3pはキーボードDIR信号が出力される設定になっている。リセット信号はIC19で生成されており、こことX5をダイオードを介して接続すれば良いだろう。



(画像はBABAXさんの回路図より抜粋)

 BIOS ROMには1MbのマスクROMが使われている。データ線(D0-D7)とA0からA13までのアドレス線はCPU直結だが、ROM A14〜ROM A16はゲートアレイに接続されている。ROMの内容を適切なスロットのメモリ空間にレイアウトするためである(詳細は後述)。

SRAMとROMはピンの配列に共通点が多いので、亀の子実装することで配線を省力化することができるが、今回は同時にBIOS ROMの書き換えも行うため別途基板に実装することにした。






 以上を踏まえた回路図を書き出した。増設メモリをスロット#3-0に置くため、元々このスロットにレイアウトされていたDRAM(IC10,IC11の81464 x2個)は撤去しておく。RAM同士とはいえ、同一のメモリ空間に複数のデバイスが同時に現れるのはトラブルの元になる。S1985の/SLT30 (53p)にSRAMの/CE (22p)を接続することでスロット#3-0に割り当てられる。

なお、DRAMをスロット#3-0に温存したまま他のスロットに増設メモリを置くこともできると思うが推奨はしない。複数のスロットにメモリが存在すると一部のソフトウエアが動作しなくなるためである。システムROMを書き換えることで問題を回避することは可能。コチラに関連記事あり。


  実際の作業は、S1985のピンピッチが狭いためそれなりの配線難易度ではある。ポリウレタン線の方が細くて配線しやすいが、自分はあの被膜をあまり信用していないのでなるべくジュンフロン線を使うようにしている。ワイヤーの引き回しにはいつものようにテストパターンや非実装部品の穴を利用。A1は片面基板なのでジャンパー線が多用されているが、これを一部パターン面に移植してワイヤーの固定に利用した。なお、パターン面のジャンパー線は強く引っ張るとパターンごとベリっと剥がれる恐れがあるので取扱い注意。

画像で接着剤のようにみえるのは「ハックルー」。半田ごてで溶かせるホットボンドのようなもので、糸を引きにくくコテにもこびりつかないため使いやすい。秋月電子で取り扱いがある。





漢字ROM増設

 MSXの漢字ROMはIOデバイスなのでスロットのリソースを消費しない(漢字BASICや辞書ROMは別)。容量は第 一水準、第二水準ともに1Mbであり、両方実装する場合は2MbのEPROMを用意する。アクセス方法については以下にASCATさんのMSXテクニカルガイドブック第四版 p.20より引用する。

●第一水準漢字を読みだす場合
 I/OポートのD8H番地に漢字コードの下位6ビットを、D9H番地に上位6ビットを出力します。そして、D9H番地から32回連続して値を読み込むと、それがその漢字フォントになります。

●第二水準の場合は、I/OポートのDAH番地に漢字コードの下位6ビットを、DBH番地に上位6ビットを 出力します。そして、DBH番地から連続して32回読み込みます。これが漢字フォントになります。


  ハードウエアの設計としては、まずIOデコーダとしてD8h〜DBhへのIOアクセスでイネーブルとなる信号を生成することになる。D8hは2進数で 11011000b 、DBhは 11011011b であるから、A7〜A0のアドレスバスの上位6ビットが110110XXbとなっている時に/IORQがアサートされていることが絶対条件になる。そして、第一水準と第二水準のIOアドレスはA1の論理が反転しているだけなので、ROMに 第一水準、第二水準のフォントを連続して焼いておき、ROM最上位アドレス線(A17)をCPUのアドレスバスA1に接続すればよい。

 漢字コードはIOポートへの書き込みにより、6ビットずつ2回に分けて指定されるので、6ビットのD-FF(フリップフロップ)の74174を2つ用意した。74138を使ってIOアドレスのA0の論理により、どちらの74174に書き込むかを切り替えるようイネーブル信号を生成し、/WRとNOR演算して74174のクロック端子(ポジティブエッジトリガ)に入力した。これでROMの上位アドレス1+6+6=13ビットが確定する。

 次にフォントデータの読み込みのフェイズに移るが、ハードウエア的には32回カウントできる5ビットのカウンタICが必要で、今回4040を 採用した。カウンタの値はそのままROMアドレスの下位5ビットとなるが、漢字コードを指定するフェイズで値がリセットされるようにした。D9hまたはDBhへのIO READ時にROMの/CEをアクティブにしてデータを吐き出し、READ終了のエッジでカウンタの値がインクリメントされるようにしている。これで仕様通りにROMから1文字分のフォントデータが32回に分けて8ビットずつ吐き出されることになる。




 なお、MSX2のIOポートF5hは各種デバイスのイネーブラとなっている。bit0が内蔵漢字ROM用のイネーブラで、ここに1を書き込むとenable、0を書き込むとdisableとなる。S1985にこの1bitレジスタが内蔵されており、値は反転されて29pの/KANJI信号に出力される。今回の回路ではS1985の/KANJI信号を漢字ROMの/OEに接続した。

このデバイスイネーブラは外付けの漢字ROM使用時に内蔵デバイスと競合が起こらないように用意されている。漢字ROMは外付けが優先され、システム起動時は内蔵漢字ROMはdisableとなっているが、外付け漢字ROMが見つからない時にenableとなる仕組み。MSX2+以降では、F5hのbit1が第二水準漢字ROMのイネーブラと定義されたが、S1985にこの機能は含まれていないし、第一、第二水準で内蔵+外付けで運用するケースは考えにくいので、今回は見ないことにした。

漢字ROMを第一水準のみ実装する場合は1MbのフォントROMを用意すればよいが、IOデコーダのイネーブル条件に A1=0を追加することになり回路的には一手間増えることになる。せっかく作るのならば両方入れてしまった方がオトクである。



MSXのシステムには漢字ROMとは別にMSX-JE漢字BASICといった漢字ドライバがあり、これらを必要とする場合は別途スロット上にROMを置くことになる。既存のソフトから漢字表示させるだけならばIOポートに漢字ROMを置くだけで問題ない。

参考までに、漢字ROMの有無を調べる手順をASCATさんのMSXテクニカルガイドブック第四版 p.21から引用する。

●第一水準漢字ROMが存在するかどうかを確かめる方法
 漢字ROMのJISコード2140H(1区32点)のフォントの最初の8バイトは、必ず、順に00H,40H,20H,10H,08H,04H, 02H,01Hになっています。そこでこのコードのフォントを読みだして、最初の8バイトがこれに一致すれば、第一水準の漢字ROMが存在することになります。

●第二水準漢字ROMの存在の有無
 漢字ROMのJISコード737EH(83区94点)のフォントを読みだして、最初の8バイトの値の合計を256で割った余りが149(95H)ならば第二水準漢字ROMが存在します。

フリーソフトでは上記の確認をしていないものがほとんどで、フォントデータが存在しない全角文字は豆腐(■)で表示される。





FM音源の増設

 YM2413はMSXのIOポート 7Ch,7Dhへの書き込みデータにより制御される。まずIOデコーダをそのように設計するが、部品省略のためにA2〜A4はダイオードでまとめてプルアップした。とりあえずこれでも問題なく動作する模様。今見直すと漢字ROM増設回路で7408のゲートが2つ余っていたので、これを使えばよかった気がするし、IOアドレスのビット共通点を利用すればもう少し簡単にできたかも。

YM2413はリズム出力RO、メロディ出力MOを持っているが、ここから出てくるのは各チャンネルの出力電圧が時分割されたパルス信号であり、これをアナログ音声信号に変換するために積分回路を通すことになる。詳しくは裕之さんのサイトのアプリケーションマニュアル(日本語版)参照のこと。

上回路図ではYM2413のRO,MOから出力された信号が4.7kΩを通って0.015uFで接地されているところまでが積分回路で、実機で調べてみたところ松下WX系FMPAC、SONYのHB-F1XVでCR の値はアプリケーションマニュアル通りになっていた。その先は抵抗を介してリズム、メロディ音声がミキシングされ、コンデンサにより直流成分がカットされた上でオペアンプで反転増幅される。ここでは入力抵抗と帰還抵抗の比により増幅率が決定されるが、A1WX系では7倍ゲイン固定FMPACではスイッチにより約3倍、10倍、15倍の3段階に設定できるようになっていた。SONY HB-F1XVでは半固定抵抗により 0〜20 倍の範囲で調整可能となっており、今回の改造ではSONY方式を採用した。

そこから先はアプリケーションマニュアルに「低域フィルター(遮断周波数: 20kHz程度)を挿入することにより、ステップノイズを削除することができ、高音質化が計れます」と記載されており、FS-A1WX系では単帰還形ローパスフィルターFMPACHB-F1XVでは正帰還形ローパスフィルターが構成されている。FMPACとHB-F1XVについてコチラのサイト(OKAWA Electric Design)のツールで周波数解析を行ってみた。


FMPAC 正帰還型LPF 周波数解析
FMPACは概ねフラットな印象だが、人間のおっさんの可聴域を越えた15kHzのあたりからストンと落ちるような感じ。

上回路図の後段のオペアンプの7pに接続されている100pFを220pFに変更するとこのような特性になる。


HB-F1XV 正帰還型LPF 周波数解析
SONY内蔵音源の場合は比較的なだらかなカーブを描いており、10kHzくらいから抑え気味になっている。多少高音域が犠牲になるがノイズ除去効果は高め。

今回の増設回路ではSONY方式を採用した。

オペアンプは単電源と両電源でドライブする方式があり、松下WX系は+5Vの単電源だが、FMPACHB-F1XVでは±12Vの両電源である。そのためスロットに±12Vを出力していないカシオPV-7ではFMPACが使えないといったことが起こる。単電源はダイナミックレンジの点で不利であり、今回の改造でも両電源とした。

ローパスフィルターを通した音声信号はカップリングコンデンサと抵抗を介してMSX本体の音声ミキシング回路に入力する。両電源ドライブのオペアンプから出力される音声信号は0Vを基準電位とした交流信号であるため、カップリングコンデンサには無極性コンデンサを使う必要があるFS-A1では Hybrid ICの14pが音声ミキシング部となっているが、入力抵抗はミキシング回路のオペアンプの帰還抵抗に合わせるため、スロットの音声入力に接続されている抵抗値と同じ4.7kΩとした。






コラム:SONY機のFM音源 音割れ問題を検証する
HB-F1XDJ 
 HB-F1XV (画像:れふてぃさん提供)
 FM音源の話ついでに有名なSONYのMSX2+ HB-F1XDJ/XVの内蔵FM音源の音割れ問題について検証してみたい。この問題は古くから知られ ていて、バックアップ活用テクニックれふてぃさん調べ)では、Part24(1991年9月号)p.169の柱「F1XDJのFM音源の音が壊れた。何故?」と掲載されたのがおそらく初出。続くPart25 p.111に「XDJのFM音源はSONYへ持って行けば無料で修理してくれます。私も壊れた。」と掲載され、この時点でメーカーの無償修理が行われていたことが伺える。Part26 p.59に「僕もXDJを半年でFM音源を壊し、1年ちょっとすぎに出したとき無料だった。交換表にはコンデンサ1個と書かれていた」と掲載され、故障の原因がコンデンサの1つであることが示唆された。Part29(1992年12月号)p.156の床に「誰かHB-F1XDJの音割れの直し方教えてください。ソニーのSSなんて近くにないんです。」という投稿があり、その答えとして Part30 p.93の柱に「XDJの音割れはYM2413の側にあるC99というコンデンサを新しいのにすれば直るらしいです。」と掲載され、具体的に交換すべき部品がC99であることが明らかとなった。HB-F1XDJは1988年10月発売なので音割れ病は概ね3年で発症していたことになる。MSXにおけるソニータイマーはここに仕込まれていたのだ!(な、なんだって〜)

 MSX-FAN 1993年6-7月号のGTフォーラムにもこの話題があり、「確かにXDJのFM音源の故障の話はよく聞く。でも欠陥商品といううわさがあるがそれはいいすぎ。ソニーの社内規定のなかには、きちんとした規定が整備されていて、欠陥ならきちんと公表する。」と書かれており、壊れた機体をサービスステーションへ持ち込むことを勧めている。当時は欠陥というほどの不具合ではないという判断だったのだろうが、保障期間を過ぎても無償修理を行っていたのはメーカーとしての良心か。(関連記事:VAIO LX専用液晶にまつわる黒い話) SONYのMSXは製造終了後約30年経過しており、いくらなんでもサービス期間は終了しているだろう。対処方法は後述するが、自分でできないと思ったら、はにはにさんのような個人で有償で請け負ってくれる方に依頼したほうがよい。

 前出のASCATさんのMSXテクニカルガイドブック第四版第五刷 p.72のはみ出しコラムでもこの問題について触れられている。ここでは「HB-F1XVでは回路が変更されているためこの現象は起きません。」と記載されているが、そんなことはなくHB-F1XVでも同様に音割れ問題は発生する。上画像はXDJXVの基板を並べたものだが、搭載部品やパターンの走行は完全に一致している。XDJではR17,R14のパターンにはジャンパー線が実装されていて、XVでも同様にジャンパー線だがシルク印刷はJW79,JW80と異なっている。違いはこのシルク印刷のみである。
HB-F1XDJ 
 HB-F1XV (画像:れふてぃさん提供)
 パターン面でもR14,R17のシルク印刷は異なるが、回路的には同一であり、少なくともこのXVの出荷時にはなんら改修は行われてないことが分かる。なお、XVは出荷時期によりXDJと同じ基板が使われたものもあるようだ。
 原因究明のため、当方でHB-F1XVの回路を調査したところ上図のようになっていた。積分回路を通過した音声信号はC16で直流成分がカットされ、オペアンプで反転増幅されるが、このオペアンプは両電源ドライブであるので、7pから出力されるのは0Vを基準電位とする交流信号である。 従ってカップリングコンデンサC99で直流成分をカットする必要がないばかりか、C99プラス極にマイナスの電位を負荷することで早期の劣化を誘発している。まさに時限劣化装置であり、意図的なものでないにしろソニータイマーと揶揄されても致し方ないだろう。

C99劣化の根本原因が逆電圧の負荷であることから、C99を無極性コンデンサに交換すれば解決しそうに見えるが実はそうはならない。理由は分からないが後段のLPFからは+数VのBIAS電圧が発生しており、C99の出力側にも+BIASが負荷されている(回路シミュレーション、 およびオシロでの実機測定にて確認)。有極性C99は入力側の不正な逆電圧により電流がリークするため、+BIASによる充電がなされないまま音声信号は出力側にスルーされる。ところがC99に無極性コンデンサを使うと電流のリークが起こらなくなる代わりに+BIAS電圧により徐々にコンデンサが充電され、やがて飽和して音が出なくなってしまう。よってC99無極性化は問題の解決にはならない

なお、C20についても同様の問題があるが、C20入力側は+BIASの影響により逆電圧がかからない状態となっており、劣化を免れていた模様(実測にて確認)。
 
推奨する対処方法

C99、C20 改修後
根本的な対策として当サイトではC99を取り外し、ジャンパー線で短絡することを推奨する。ここを直結することでLPF側の+BIAS電圧はオペアンプの低い出力インピーダンスにより無効化される。BIAS電圧の消滅によりC20入力側にかかる電圧は正しく0Vを基準電位とする交流信号となるため、C20は無極性コンデンサに置換する。

コンデンサのパターンをショートしてしまうことに抵抗感はあると思うが、実はFMPACがこのような回路構成となっている。FMPACでは過去30年以上目立ったトラブルが報告されていないことからも、この対処法に問題がないことはお分かり頂けると思う。以上の改修によりSONY機の内蔵FM音源は本来のサウンドを取り戻し、音割れ病を再発することもなくなるだろう。

メーカー改修の検証
 バッ活の柱に書かれていたようにHB-F1XDJ/XVC99がやたらダメになることはメーカーも認めていたと思われ、故障機をサービスステーションに持ち込むと無償でC99を耐圧の大きなコンデンサに置換していたらしいが、他にも抵抗が追加されていたという情報があり、ネットを彷徨って調べてみると以上のように回路変更されたものがあることが判明した。どのような改修が行われたのか検証してみたい。

 まずC20の前後に増設されたR14とR17についてだが、R17は基板にそのまま実装され、R14は長いジャンパー線を経由してHICの近傍に取り付けられていたようだ。この抵抗はHICのオペアンプに対する入力抵抗として増幅率に影響するもので、C99問題とは無関係に行われた改修だろう。

次にR??で あるが、この抵抗が取り付けられ た機体はあまり多くないことから、比較的後期に改修されたものと推定される。ネット画像では抵抗値220kΩと260kΩのものを確認できた。この抵抗は後段のLPFで発生したBIAS電圧を無効化するためのものかも知れないが、むしろこれによりC20に逆電圧が負荷され劣化を誘発しそうである。おそらく繰り返されるC99問題に対処するために追加されたものと思われるが、この抵抗に有極性C99の劣化の原因を取り除く要素は見いだせず、C99交換後も音割れ病は再発すると思われる。






FMBIOSの追加

 FM音源(YM2413:OPLL)は漢字ROMと違って値を読み出す仕組みがなく、システムから認識させるためには、ドライバのROM(FMBIOS) が必要となる。音源そのものはIOデバイスなのでスロットに依存せず、FMBIOSは適当な空いたスロットに置くことができる。ROMカートリッジを作成して認識させることもできるが、スロットを節約するためFMBIOSをシステムに組み込む手法について検討・解析を行った。

FMBIOS ROMはMSX-MUSIC FM BIOSMSX-MUSIC拡張BASICを使う時に必要となるが、処理速度の問題からほとんどのゲームソフトではBIOSとして使われておらず、FM音源の存在を確認するためだけに利用されている。FS-A1WXの内蔵FMBIOSの最初の部分は以下のようになっていて、先頭のAB文字列はROMヘッダである。0004hからの2バイト(00h,50h)はCALL拡張命令のルーチンが5000hから存在することを示している。

以下はフリーのCBIOS。こちらは拡張BASICを持たないのでCALL MUSIC命令は使えないが、ソースを見たところFMBIOSには対応しているように見える(当方では動作未確認)。

これらに共通しているAPRLOPLL内蔵FM音源を識別する文字列である。FMBIOSはページ1(4000h〜)に置くことになっているので、適当なスロットの4018hからAPRLOPLLが読めるようにROMを配置するだけでほとんどのゲームソフトでFM音源が鳴らせるようになる。

以上はFMPACのROM先頭部分。4018hからの文字列はPAC2OPLLと なっている。外付けデバイスのFMPACは競合を避けるため内蔵音源とは区別されており、システム起動時はdisableとなっている。ソフトウエアでFM音源を使いたいときにはスロットをスキャンして4018hからのAPRLOPLL文字列を調べ、見付かれば内蔵FM音源ありとみなされる。見つからなければ401Ch〜のOPLL文字列を調べ、存在すればそのスロットに外付け音源が存在するものとしてメモリマップドIO(7FF6h)のレジスタに値を書き込んでenableとする。詳しいことは、MSX Datapack 7部 3章やASCATさんのMSXテクニカルガイドブック第2部 第9章に記載されている。

今回の改造はOPLLの内部増設であるので、FS-A1WX等の実機から吸い出したBIOS ROMデータを適当なスロットのページ1に置くか、4018hからAPRLOPLL文字列が読めるようにすれば良いということになる。




(MSX Datapack 7部 3章より引用)

余談だがMSX Datapackによると、内蔵音源もFMPACもIOアドレスは7Ch,7Dhで共通だが、FMPACは当該のスロットのメモリマップドIOでも制御できるらしい。外付けのFM音源カートリッジを製作するのであれば、こちらのアドレスデコーダと7FF6hのイネーブラも用意しておいたほうが良さそう。

FMPACを7FF6hでdisableにした場合はIOアクセスのみ禁止されるのか、音源そのものがdisableになるのか判らないが、競合を避けることが目的なのでIOアクセスのみ禁止する仕様だろうか?

 さらに余談だが、メモリマップドIOであればスロット毎の制御ができるので複数のFMPAC用意して別々の音を鳴らすような使い方も可能と思われる。 FMPACのIOアクセスをdisableにすれば内蔵音源の個別制御もできそう、と思って調べてみたら既にTINY野郎さんが実現していた。MMLコンバータまで用意されているとか、マジかよ!



スロットマップ ROMマップ
ROMの実アドレス
内容
容量
SLOT
PAGE
00000h-07FFFh BASIC MAIN
32kB #0
P0,P1
08000h-0BFFFh BASIC SUB
16kB #3-1 P0
0C000h-0FFFFh 未使用
16kB #3-1 P1
10000h-17FFFh 内蔵ソフト
32kB #3-2 P1,P2
18000h-1FFFFh 内蔵ソフトDATA
32kB #3-3 P1,P2

 FS-A1の スロットマップと、引っこ抜いて読んだ内蔵マスクROMの内容を照合すると以上のようになっていた。ROMの 0C000h-0FFFFhは内容がFFhで埋められており、SLOT CHECKERでは存在を確認できなかったが、実はスロット#3-1のページ1に割り当てられており、ここにFMBIOSを潜り込ませることも可能。なお、スロットマップ表示にはTINY野郎さんのTINY SLOT CHECKERを活用させて頂いた。

スロット#3-2はROMヘッダ付きの内蔵ソフト(デスクパック)の領域で、続く#3-3にはヘッダのないデータが格納されている。デスクパックに64kBも使われているとは考えにくいが、#3-3の内容を削除するとデスクパックが起動しなくなることから、何らかの用途で使われている模様。

 内蔵ソフトはROMゲームで遊ぶ時には表に出てこないが、FDソフトより先に起動してしまう非常に鬱陶しい存在である。あまりに鬱陶しかったせいか、A1WXシリーズ以降ではスライドスイッチでOFFにできるようになった。

一応DELキー起動でスキップ出来るようになっているものの、つい忘れてこの画面が現れてイラっとするユーザーも多いことだろう。



改造するならサクっとROMから削除してしまって構わないが、オリジナルを尊重して残したい場合は、ROMの内容を1バイト書き換えると良い。

内蔵ソフト402Bh (ROMの実アドレス1002Bh) の C8hを C0hに書き換える

これで通常起動でデスクパックは現れず、逆にDEL起動でデスクパックが起動するようになる。



ゲートアレイ M60002A-0108FP によるROMマッピングの仕組み

(画像はBABAXさんの回路図より抜粋)

 やや余談であるが、FS-A1のBIOS ROMはゲートアレイによって16kB、または32kBで区切られてシステム上の特定のアドレス空間にマッピングされている。各領域に対するROMの/OEに相当するイネーブラは29p〜34pにアサインされ、各々S1985が出力するスロットセレクト信号が接続されている。

ROMの実アドレス
内容
容量 マッピング先のアドレス
イネーブラのピン番号と接続先
00000h-07FFFh BASIC MAIN
32kB 0000h-7FFFh
29p - S1985 /SLT0/00
08000h-0BFFFh BASIC SUB
16kB 0000h-3FFFh
30p - S1985 /SLT31
0C000h-0FFFFh 未使用
16kB 4000h-7FFFh
31p - S1985 /SLT31
10000h-17FFFh 内蔵ソフト
32kB 4000h-BFFFh
33p - S1985 /SLT32
18000h-1FFFFh 内蔵ソフト 32kB 4000h-BFFFh
34p - S1985 /SLT33

ROMの区切りとマッピング先のアドレスはゲートアレイ内部で固定されているが、イネーブラの接続先はハードウエア的に変更可能になっているので、ある程度スロット構成を変更することは可能だろう。



ROMを置換
ROMの実アドレス
内容
容量
SLOT
PAGE
00000h-07FFFh BASIC MAIN
32kB #0
P0,P1
08000h-0BFFFh BASIC SUB
16kB #3-1 P0
0C000h-0FFFFh べーしっ君ぷらす
16kB #3-1 P1
10000h-17FFFh 漢字BASIC
32kB #3-2 P1,P2
18000h-1BFFFh FMBIOS
16kB #3-3 P1
1C000h-1FFFFh
未使用(FFhで埋め)
16kB
#3-3
P2
 FM音源を鳴らすだけならFMBIOSを追加するだけでも十分だが、せっかく漢字ROMを実装するならばと内蔵ソフトを潰して漢字BASICを搭載し、未使用領域にはべーしっ君を入れてみた。スロット構成はFMBIOSを#3-1にするとか、漢字BASICを#3-3にするとか、ある程度自由に弄っても問題ない。漢字BASICはFS-A1FXから吸い出したデータを利用した。

ハードウエア的にはこの内容の通りにデータを書き込んだEPROMを用意し、元のマスクROMと同じように接続するのみであるが、EPROMとマスクROMは足の数やピンアサインが微妙に異なっているのでデータシートを見ながら配線の組み換えが必要である。


テム・レイ回路もどき1号


 以上の回路をすべて一枚の基板に組み込んだところ、酸素欠乏症のオヤジが手作りした謎回路みたいなものが出来上がった(笑)。大昔BABAXさんに頂いた2階建てのSRAMモジュールを採用したおかげで見た目も怪しげである。このモジュールには32kBのSRAMが16枚実装されていて合計512kBの容量となっている。昔は大容量のSRAMが高価だったためこのようなものが作られていた。

 こいつをA1の記憶回路(ROMソケット)に取り付けると、メモリ容量が8倍に跳ね上がる。FM音源、漢字BASIC、べーしっ君ぷらすが使用可能になり、確かにパワーアップはするのだが、所詮は古い技術の寄せ集めでしかなく、実際こんなものを息子に渡したら「こ、こんな古いものを…父さん、酸素欠乏症にかかって…」と真顔で言われてもおかしくないだろう。オリジナルに敬意を払ってテム・レイ回路もどき1号と命名。


実装


 実際はROMソケットにポン付けで使えるわけではなく、S1985へのマッパーアドレス線と漢字ROMイネーブラの配線、オペアンプ用の±12V電源、FM音源の音声出力、クロック、リセット信号、その他CPU信号数本の引き出しが必要である。

FS-A1のメインボード部品面には多数のジャンパー線が実装されているが、一部SRAMモジュールと干渉するためパターン面に移動させた。CPU近傍の電解コンデンサも邪魔になったので足を長めにして横倒しとした。この広い空間は増設基板を搭載するのに都合が良い。
  ビデオエンコーダや音声アンプ回路が搭載されているHybrid ICは電解コンデンサがてんこもりなので劣化が心配ではある(要交換)。ここの14pとGNDにFM音源の音声信号を接続している。なお、このHICのビデオエンコーダ(ROHM BA7230LS)はコンポジットビデオと色差信号の出力をしているが、Chroma信号を出していないためS端子の増設はできない。元の64kBのDRAMは競合を避けるため除去している。

今回は2MbのEPROMの手持ちがなく、たまたまEEPROMがあったのでそれを使った。ジャンクなAT互換機のマザーボードから引っこ抜いて入手した気がする。紫外線消去しなくても使えるので書き換え実験する時は便利だが、今は入手が難しくなってしまった。上がシステムROM用の1MbのPH29EE010。下が漢字ROM用の2MbのW49F002U

オペアンプに特に拘りはなく、手持ちの中から適当に選んだNJM13404Dを ソケットに実装した。音声出力にはオーディオ用の無極性コンデンサ(MUSE)を採用したが、秋月で無極性を探したらたまたまコレだったという理由。拘るなら前段の1uFもオーディオ用を使ったほうが良いだろう。FM音源とPSGの音量バランスは半固定抵抗で調整可能である。



漢字BASIC起動
 漢字ROMとFS-A1FX譲りの漢字BASICを装備したため、MSX2でありながら漢字の入力が可能になった。とはいえ、MSX-JEではないので単漢字変換しかできない。

使い方はCALL KANJI命令でスクリーンが漢字モードになる。CTRL+SPACEで単漢字変換モード。さらにSHIFT+かなでローマ字かな入力となる。CALL ANK命令で元のスクリーンモードに戻る。

いまさら漢字BASICの使い道も思いつかないが、日本語ワープロが貧弱だった頃はこのような入力方法が実際に使われていて、自分がA1Fと一緒に買ったビデオテロッパがコレだった。後に買ったワープロプリンタPS-PW1はカート リッジにMSX-JE準拠の連文節一括変換ソフトを持っていて幾分マシにはなったが、ほとんど学習してくれないので今のワープロと比べると効率はとても悪かった。



漢字ROMフォントの比較
COMPILEのディスクステーション0号は漢字ROM対応ソフトであるが、漢字ROMがなくても表示が豆腐(■)にならないように作られている。

かな表記だとこのような表示になるが、画面内に文章を詰め込むために横に圧縮したような書体になっている。
A1WX等Panasonicのマシンで使われているMSX標準漢字ROMのフォントがコチラ。縦横に圧縮されて表示されている。明朝体に近い書体に見える。
AtoCさんのサイトで配布されている「漢字ROM image file for MSX emulaters」での表示。元ネタは明らかにされていないが、ゴシック体に近い書体で縮小しても読みやすい印象を受ける。


FM音源+SCC+PSGの再生

総合評価として、スロット1に自作SDカードデバイス、スロット2にSCCカートリッジを挿してNEXTORからMGSELを起動した。曲名は漢字で表示され、各音源もすべて認識されて鳴っている。本体改造なしでこれを実現するには、拡張スロットにマッパーメモリ、漢字ROM、FMPAC、SCCを挿すような運用になるが、内部増設によりシンプルな構成にすることができた。

上記テストでは、当方開発の赤外線制御の3入力デジタルアンプ電子工作マガジン2016年冬号に掲載)を使用。このアンプは適当なリモコンの信号を登録して操作可能。猫の手1号受信機をジョイスティックポートに装備することで、同じリモコンで曲選択や音量調節が可能である。それぞれ同人ハードとして家電のケンちゃんさんで頒布中(2019年12月現在)。(関連記事:猫の手リモコンの製作

ちなみにスペインのMegaFlashROM SCC+SDはSDカードデバイス、SCC音源、マッパーメモリを兼ねる強力なカートリッジであるが、漢字ROMやFM音源を内蔵していないので同様の構成にするためには拡張スロットが必要になる。



Epilogue

 実はテム・レイ回路もどき1号 を製作したのは2015年頃だった。今これをイチから手作りする気にはとてもならないが、おそらくあの頃は脳に酸素が足りていなかったのだろう。冷静になった今、ガラクタ置き場を整理していてコイツが出てきたのだが、このまま埋もれさせてしまうのも忍びなく、せっかくなので記事にした次第。

オリジナルのテム・レイ回路は一度も使われることなく息子に捨てられてしまったが、実はそこそこ高性能なデバイスだった、という説はないのだろうか。子供の頃は、「何かしら性能が上がるかもしれないのだから一度くらい試せばいいのに。」と、思っていた。まぁ、実際ポンコツだったのだろうが、あれではせっかく作ってくれた親父殿が気の毒である。

はにはにさん機材の提供ありがとうございました。Mikasen.さん画像提供ありがとうございました。BABAXさん回路図や部品の提供ありがとうございました。れふてぃさん多くの情報・実機画像の提供ありがとうございました。裕之さん回路シミュレータを使った検証やアナログ回路について諸々教えていただきありがとうございました。AtoCさん漢字ROMデータの作成お疲れ様でした。TINY野郎さんSLOT CHEKER有り難く使わせてもらっています。にゃごすさんいつもテクハンWiki参照させてもらっています。ASCATさんのテクガイも役立てさせてもらっています。以上多くのMSXユーザーの皆様ありがとうございました。

 お約束ですが、この記事を見て修理・改造などを行い故障やその他問題が発生しても当方は責任を負いません。各自の責任において情報を広く集めて行うことをおすすめします。

この記事の内容は個人の憶測や見解の誤りを含んでいる可能性があります。内容についてメーカー各社に問い合わせるのは止めましょう。


音割れ病を発症したMSXをメーカーサービスに持ち込むのは止めましょう。30年前の製品のアフターサービスを求めるのは迷惑行為となりえます。



ご意見、ご感想、ご質問はにが BBSまで!
Top pageへ 戻る

copyright (C) 2019 Niga.