2020年12月24日木曜日

TinyMSX

MSXであってMSXではない謎エミュレータ(TinyMSX)を作ってみました。

https://github.com/suzukiplan/tiny-msx

TinyMSXは、以下のゲームを動かすことができます。

  • SG-1000
  • Othello MultiVision
  • MSX1 (16KB/32KBカートリッジ) ※メガロムは現時点では未対応

オセロマルチビジョンはオマケ。

SG-1000実機を持っている人はレアというか、相当な物好きに限られると思います。1983年7月15日に発売されました。

発売日が任天堂のファミコンと同じ日なので、どうしても比べたくなるのが人の性...

(SG-1000 vs ファミコン)

  • 値段: ほぼ同額だがファミコンの方が200円安い
  • CPU: Z80A vs 6502 ... どちらかといえばZ80の方が高性能
  • 画像処理: TMS9918A vs 独自PPU ... ファミコンの方が表現力が高い
  • 音声処理: SN76489(PSG) vs 独自APU ... ファミコンの方が表現力が高い
SG-1000がファミコンに勝っていた点はCPUのクロックレートだけで、値段、グラフィック、サウンドの面ではファミコンが圧倒的に高性能でした。

    CPUのクロックレートについても、ファミコンのRP2A03(約1.79MHz)の命令の方が全般的に低いサイクル数で命令が実行できたので、SG-1000のZ80A互換(約3.58MHz)が勝っていたとは言い難いです。Z80はパソコン向きに設計されているCPUなので、レジスタが沢山あったり、16bit演算ができたり、ループ命令があったりと機能的に複雑だったこともあり、1命令あたりの消費クロック数が高い欠点がありました。加えて、ファミコンはただでさえシンプルな6502から更にBCDモードの機能を取っ払っています。

    画像処理については、

    • 表示スプライト数: SG-1000は32個 vs ファミコンは64個
    • スプライト色: SG-1000は単色+透明 vs ファミコンは3色+透明
    • 水平スプライト数の上限: SG-1000は4個 vs ファミコンは8個
    • BGの色: SG-1000は横8pxにつき2色 vs ファミコンは1キャラクタに4色
    • BGのスクロール: SG-1000はナシ vs ファミコンはアリ
    • BGのプライオリティ: SG-1000はナシ(スプライトが常に前面)vs ファミコンはアリ

    という具合。

    SG-1000(TMS9918A)が唯一勝っていた点はスプライトのサイズが豊富だったことぐらい(ファミコンは8x8 or 8x16だったのに対してSG-1000は8x8, 16x16, 8x8の2倍, 16x16の2倍)だと思います。

    あと細い所ではファミコンだと0番スプライトの描画検出によりスキャンライン描画タイミングを捕捉できたので、標準機能のみでIRQライクなことができたので、ラスタースクロールが可能です。(IRQについては拡張マッパーで使うこともできました)

    音声については、SG-1000はPSG(AY-3-8910)を若干簡素化したSN76489(矩形波3+ノイズ1)なのに対して、ファミコンは矩形波2+三角波1+ノイズ1+ADPCMで更に矩形波はデューティー比を変更することでノコギリ波に似た音色を出すことができました。

    つまり、用途を「ゲーム」に特化して考えれば、SG-1000がファミコンに勝てる要素はほぼ皆無で、尚且ファミコンよりも微妙にお値段が高いので、この事実だけ見れば「SG-1000はファミコンに負けて当然だね」と思えるかもしれません。

    ただ、SG-1000がファミコンに勝てる芽が一切無かった訳ではないと思われます。

    SG-1000が搭載している装置(Z80, TMS9918A, SN76489)は、独自アーキテクチャで固められたファミコンと比べてゲームを作れるプログラマの人口が(当時は)多かったので、コンテンツ供給力では1983年時点ではSG-1000の方が優位に立っていたと思われます。また、SG-1000とファミコンが発売された1983年には、ASCIIとマイクロソフトが共同で開発したMSXが発売されましたが、MSXもSG-1000とほぼ同じハードウェア構成(Z80, TMS9918A, AY-3-8910)だったことも追い風になったかもしれません。

      ただ、結果的にSG-1000で発売されたタイトルはほぼ全部自社タイトル(一部、オセロマルチビジョンのツクダオリジナル製品もある)で占められていました。当時は現在のようにサードパーティーが参画するという発想自体が無かったのですが、サードパーティーを積極的に取り込む戦略だったら、未来は少し違っていたかもしれません。

      それでも私がSG-1000にめちゃくちゃ思い入れがあるから自らエミュレーターを作った・・・ということであれば美談になるのですが、実はそうでもなく、自作のZ80エミュレータを使ったゲーム機のエミュレータをOSSで作っておきたかったので、ハード構成が単純で作りやすいMSX1 & SG-1000をターゲットにしてみただけだったりします。

      合理的ではないものを作りたい

      ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...