MSX (パソコン)


2017.4.1更新

昔作ったソースとバイナリが一部ですが出てきました。
最近、MSXの研究を再開して少しずついろんなことができるようになってきています。
今の時代に合う言語によるMSXプログラミングができる新しい環境を整えようと努力しています。

BDS CでMSX、HTML5のソフトを作る

Z80逆アセンブラ hoja

BLOADヘッダ付加ツール asu bloadmake for Windows

インテルHEXファイルをバイナリファイルに変換するツール asu ihex2bin for Windows

MSXエミュレーター

MSXパソコンの終焉

行番号BASICの終焉

若者はBASICやめときましょう

Z80はほぼ終わり

MSX(Z80)のC言語コンパイラ

MSX(Z80)のセルフコンパイラ

ロシア製MSX2キットのGR8BIT

MSX (バイク)


MSXのホームページを作ったわけ
昔、MSXを使っていましたが、大手メーカーのMSXの生産終了後はもう諦めて引っ越しのタイミングで捨ててしまいました。
もう世に出ることはないと思っていたので一度は忘れることにました。
最近、WebMSXというホームページ上で動くMSXエミュレーターがあることを知ったので、MSXのソフトがウェブアプリになるというのに衝撃を受けて再度興味を持ちました。


MSXとは
MSXとは昔の8ビットCPUのZ80を使った廉価版のパソコンです。
日本が中心のパソコンでしたが海外でも売られていたため、未だに海外にもファンがいて昔の資料やソフトウェアが容易に入手しやすくなっています。
すでに高価な16ビットパソコンが出回っている時代に低価格パソコン且つゲーム機として売られていました。
パソコンでありながらファミコンのようにROMカセットを挿し込むとゲームができたのです。
そしてファミコンのようにビデオ端子(コンポジット入力端子)経由で普通のテレビにつないで使うことができパソコン用のディスプレイを買う金がない貧乏人でも使うことができました。
テレビでは解像度が低すぎてパソコンとしての実用度は低かったですが。
多くは本体がキーボード一体型でカバンに入るぐらいの大きさでおもちゃのように見えるパソコンでした。
かつてはMSX関連の月刊雑誌が二種類販売され(MSX-FANとMSX MAGAZINE もしくはMSXマガジン)、書店にはMSX関連書籍がたくさん並んでいました。
パソコンと言っても安いだけあって処理能力は後継機種も含めて最後の最後まで限りなく低かったです。
ファミコンなどのゲーム専用機になかったMSXの大きな魅力は、やはり一応はパソコンであり自分でプログラムを作れたことです。
ゲームをするだけではなくゲームを作ることもゲームを改造することもできました。
BASIC言語はROMに内蔵されおり無料でしたが、別途C言語コンパイラを購入すればC言語のプログラムを作ることもできました。
その他詳しいことはWikiにまとめました。


安価という需要
私もMSXを買いましたが理由は単純に安かったからです。
現在はパソコンは安くなっていますが、昔は値段が高く16ビットパソコンは30万円ぐらいしました。
高い物だと60万円近くしました。
16ビットパソコンや32ビットパソコンは趣味で買うにしては躊躇する値段だったのです。
今ではインターネットするために誰でもパソコンを買う時代ですが、当時はプログラマーになってやるぞと意気込んでいる人でも16ビットパソコンや32ビットパソコンはちょっとこの値段じゃなあという感じでした。
高い値段出して買っても次々ともっと高性能の新機種が出るわけですし後悔しないタイミングで買うことは難しかったです。
MSXは新品で多くの機種は三万円弱ぐらいから十万円弱ぐらいの値段でした。
(初代規格の最安は19800円。MSX2の高給タイプは158000円とか228000円(ナショナルFS-5500F2)のものもありました。)
中古の古い機種だとタダ同然で売っていることもありました。
古い規格の機種は本当にゴミみたいな性能しかなく買っても使い道がなかったですが。


MSX未経験者が今からMSXをはじめる必要性あるか?
正直言ってないような気がします。
もしあるとしたら、C言語でHTML5のソフト(ウェブアプリ)を作るのにHTML5対応のMSXエミュレーターを利用することだと思っています。
パソコンだけではなくスマートフォンでも動かせるようです。
Javascriptで動くMSXエミュレーター(WebMSX)があるのです。
直接Javascriptで書けばいい気もしますがC言語で書けるというメリット、ソースファイルを隠せるというメリットがあります。
今から実機を入手する必要はないでしょう。
新品は存在せず中古を実機を手に入れたとしても必要な周辺機器が今普通に売っている物に対応していないですから多分使えないと思います。
過去に発売されたMSX関連の書籍は雑誌も含めて絶版ですが、情報はインターネットでいろいろ入ります。
非常にマイナーで知識を共有したり共感できる仲間も見つかりにくいと思いますが、逆にそれがいいのかも知れません。
人ができないことができるのは快感かも。
日本以外の世界まで広げると未だに一定の人気がありファンもいます。
多くの人のMSXエミュレーターの利用目的はMSX全盛の時代のゲームを楽しむことだと思いますがライセンス的に許可されていないのなら個人的にはすすめません。
MSXの標準言語であったROMに内蔵されたBASICもライセンスの問題もあるのですがそれ以前に言語仕様が古すぎてプログラミング的にもすすめられません。
C言語による開発であればライセンス問題は全てクリアできると思っていて、ライセンス問題をプログラミング的に回避する方法を研究しているところです。
具体的にはROMカートリッジ向けのソフトをC言語で作り、C-BIOSというフリーのBIOSの利用でそれが可能になります。
C-BIOSはROMカートリッジにしか対応しておらずBASICインタプリタは内蔵しておらずMSX-DOSにも対応していません。
その開発環境の構築を進めています。


雑誌、MSX-FANのBASICの一行プログラム、一画面プログラム
昔、雑誌にBASICの極小のソースが載っていて、それを見て打ち込んで遊んでいたものです。
最短は一行です。
今はこういう文化は無くなったと思います。
最初から気合い入れてC言語などの本格的な言語でプログラムを作る人にはこんなことする必要もないかも知れませんが、世の中プログラムに気合いを入れる人ばかりではないし、気合いを入れている人も息抜きが必要でしょう。
やる気のない人も一行なら入力してみようと思うかもしれません。
たとえ一行であってもMSX-BASICはグラフィックも使えますし面白い実行結果が出ます。
なかなか面白いです。


過去のMSX関連の雑誌や書籍はネットから拾えるか?
公式の物は絶版ですから中古を買うとか図書館で見るかしかないでしょう。
非公式の物は全てが入手できるわけではありませんが大半もしくは一部はネット上にPDFファイルなどの形式で残っているようです。
海外でも売られたことがあり島国パソコンではなかったことが資料の入手に有利に働いていると思います。


MSXゲームのROMデータ
検索すればいっぱい出てくるようです。
MSXは海外でも売られていたため、MSX関連の海外サイトも多く未だにROMデータを入手しやすいです。
私はゲーマーではなくプログラマーなのであまり興味はなく詳しくありません。
MSXは愛用してましたがゲームはほとんど買わず、ほとんどしたことがないです。


MSXのゲームが有料でWindowsで遊べるプロジェクトEGG
プロジェクトEGGというMSXに限らずPC-9800やX1やX68000やPCエンジンやスーパーファミコンなど古いパソコンやゲーム機のゲームを買ってWindows上のエミュレーターで遊べるサービスがあります。
ゲームにはあまり興味ないので詳細は調べていないです。
毎月税別500円の有料会員になる必要もありますのである程度興味がないと気軽に試せないかも知れません。


WindowsのDOS窓で動くCP/Mエミュレーター
DOS窓で動くCP/Mエミュレーターを使うと、Windows上で当時のMSX用のC言語セルフコンパイラやZ80セルフアセンブラを使ってプログラムが作れます。
例えばCP/M program EXEcutor for Win32があります。
MSX-DOSはCP/Mの上位互換ですから機種固有の機能を使っていなければCP/M対応のソフトはMSX対応ということになります。
MSX用のC言語コンパイラやアセンブラはCP/M用でもあります。
CP/M program EXEcutor for Win32 は、仮想ディスク(ディスクイメージファイル)を使わず、Windowsのファイルシステム上で動くため、WindowsとCP/Mエミュレーター間のファイルコピーのやりとりの煩わしさは一切ありません。
そして階層ディレクトリも使えますし、DOS窓のコマンド、Windows版のテキストエディタなども使えます。
CP/MのコマンドラインのソフトをWindowsソフトとしてWindows上で実行するインタプリタのような感じです。
Windowsでテキストエディタで作ったソースファイルをどこにもコピーしないでWindows上でコンパイルやアセンブルできるのは魅了です。
MSX固有の機能を使っていない場合はMSXエミュレーターにコピーしなくてもWindows上で実行できます。
CP/Mエミュレーター上ではMSXの3.5MHzに合わせて速度を落とす処理もないですし、文字表示もMSXのVDPに合わせて速度を落とす処理もないですから、超高速にコンパイルできます。
試してないですが激遅と言われたMSX-Cでも高速にコンパイルできるはずです。
同じCP/Mエミュレーターでもディスクイメージを使った仮想ディスクを使うものでは、ファイルのコピーさえままならない状態で使えたものではありません。


MSXパソコンの実機はあっても使えないかも
ディスクドライブとディスプレイの問題で1chipMSX以外のMSXの実機はあっても使い物にならないのではないかと思います。
現在MSXを使うとなると実機ではなくMSXエミュレーターを使うのが現実的だと思います。

テレビに接続して手持ちのROMカセットのゲームを低解像度で満足するのなら使えると思います。
プログラムを作る用途にはファイルを保存する必要があるので実機は難しいかも知れません。
フロッピーディスクドライブは壊れやすいですし、中古なら最初から壊れているかも知れません。
フロッピーディスクドライブが完全に動作したとしても2DDのフロッピーディスクをどこから買ってくるのでしょう。
改造してハードディスクを付けることができる機種もありましたが対応のハードディスクはもう売ってないんじゃないかと思います。
1chipMSXならSDカードに読み書きできるのかな?
後はプログラムをするとなるとコンポジットでのテレビ出力では解像度が低くて横に半角40文字表示が限度で使い物にならないと思います。
またMSXが対応しているRGB出力に対応したディスプレイはもう簡単には入手できないと思います。
1chipMSXでは普通のRGB端子のディスプレイと接続できるようです。
フロッピーディスクと低周波数のRGBディスプレイが死んでしまった今、MSX本体だけあっても現在ある記録装置とディスプレイに対応しないことにはどうにもならないです。
と、一度書いたんですが、
HxC Floppy Emulatorというのを見つけました。
何をするものかいまいちよく理解していませんが、SDカードまたはUSBの何かをフロッピーディスクのふりをさせて機器につなぐものでしょうか?
もしかしたらHxC Floppy EmulatorでSDカードをフロッピーディスクの替わりに使えるようになるのかも知れません。
ディスプレイのほうの問題はこれを使っても解決しませんが。


今のパソコンにはないMSXプログラミングの魅力
パソコンの性能が限りなく低いわけです。
限られた条件の中でプログラムを作るわけですからパズル性がありました。
今のパソコンでは無限にメモリやディスクを消費でき、何も考えずに作っても高速に動いてくれるのでパズル性は少ないです。
つまり今のパソコンでは誰が作っても同じようなプログラムが簡単に作れてしまうこということです。
「これは俺が作ったんだぜ。」とか得意げに言っても「そんなの誰でも作れるよ。」と返されやすいです。
MSXのプログラムではどうやってメモリやディスクをを節約するか、どうやって高速化するかというのを考える必要がありました。
そういうことを考えるのは楽しかったです。
そうやって考えた結果、他人のプログラムに差をつけた芸術的なプログラムを作ることができました。
これは利点でもありましたが、作るのが面倒、難しい、不便、大きなプログラムを作れないという欠点でもありました。
後で高速CPUのR800搭載のMSXが出ましたし、MSXエミュレーターで超高速に動作させることができるようになったので現在ではMSXプログラムにおいても高速化させる技術は意味はなくなったと思います。
MSXは、超簡易プログラミング言語であるBASICがROMに内蔵され、電源を入れて起動すると即使える状態になっていました。
電源入れて、PRINT "ABC" と入力してリターンキー(Enter)を押すとABCが表示されるブログラムが実行されるという感じで誰しもがプログラミングに簡単に触れることができました。
電源入れるとBASICの画面がデフォルトで出て来るわけですから、他にすることもないからBASICやってみようかなとなってしまいやすかったです。
今のパソコンではあれこれ準備しないとプログラムを作り始められないのでなかなかプログラムを作ってみようという気にならないと思います。
プログラミング言語でもありますが一種のゲームでもあったと思います。
BASIC言語のコマンド打ったら反応があるのは面白いです。
私はBASICにはまることなくC言語にはまりましたが。


MSXの一般的なブログミング開発環境
個人のプログラマーはBASICが一般的でした。
他には難易度が高いZ80アセンブリ言語(マシン語)というのがありました。
BASICだけ、BASIC+Z80アセンブリ言語(マシン語)、Z80アセンブリ言語だけ の三択が普通でした。
プロはZ80アセンブリ言語が一般的だったと思います。
他にはC言語という選択肢もあったのですが、MSXでは最後の最後まで非常に珍しい選択肢でした。


MSX実機でのC言語をするためのハードウェア条件
(現在するとすればWindowsで開発すべきで実機は要りません。)
残念ながら全てのMSXでC言語ができるハードウェア条件が揃っていたわけではありません。
RAMが64K以上でフロッピーディスクドライブが必要です。
MSXの規格ではRAMは8K以上。
例えばCASIOのMSXのMX-10はRAMが16Kしかなく、フロッピーディスクドライブも搭載していませんでした。
MSX2規格になるとRAMは64K以上になりメモリ問題はクリアしましたがフロッピーディスクドライブの搭載は義務付けられておらず非搭載の機種もありました。
外付けのフロッピーディスクドライブを使う方法もありましたが高価でした。
お金をかけられない人は言語をBASICに限定しラジカセなどをつないでカセットテープにプログラムを保存するしかなかったのです。
またテレビ接続では改造度が低く横幅40文字表示で我慢する必要がありました。
横幅40文字でもプログラムは作れますが不利な状況と言えます。
特に字下げをして書くのが普通のC言語では横幅40文字では非常にやりにくかったです。
横幅80文字表示で文字が読めるようにするには高価なディスプレイを買う必要がありました。
当時のテレビではHDMIのような高解像度のデジタル接続はできませんでした。


当時のMSX実機でのC言語プログラミング
元々C言語というのは16ビットCPUのコンピューター用の言語でした。
8ビットCPUのZ80を搭載したMSXでC言語を使うには無理がありました。
メモリが足りなすぎるしコンパイル速度も遅かったです。
そしてC言語コンパイラはBASICのように無料ではなく高価でした。
私はMSXでC言語をするためにMSX本体の他に、MSX-C(19800円)、MSX-DOS2(RAM無し24800円とRAM付き34800円がある。どっち買ったかは忘れた。)、MSX-DOS2 TOOLS(14800円)をまず買った。
少なくとも59400円はしたはずだ。
その後、BDS Cを38000円で買った。
ここまでで、C言語のために97400円は使ったことになる。
他にもSmall Cと、Small Macというのも買ったが値段は覚えていない。
MSXのC言語の開発環境のために十万円以上確実にかけている。
これがBASICとZ80の手作業のアセンブル(ハンドアセンブル)では無料になるわけで、多分無料のアセンブラもあっただろうし、金かけてまでMSXでC言語をしたい人は少なくて当然だったかもしれない。
安価なMSXに高価なC言語コンパイラは合わなかったかも知れません。
当時はBASICやアセンブリ言語で飯を食べている職業プログラマーも大勢いました。
C言語を全く知らないプログラマーも大勢いたんです。
プロ、アマ含めてMSX関連のプログラマーはそんな感じでした。
C言語のことをよく思わない人が多く否定的な意見が多かったです。
MSXの雑誌にC言語を使うべきではないといった記事が書かれたこともありました。
実際、もっとも理想的なC言語を使う方法はMSX自身でコンパイル(セルフコンパイル)するのではなく16ビットや32ビット(あるいはそれ以上の)コンピューターでMSX(Z80)向けのコンパイルをしてそのバイナリをMSXに移して実行させることかも知れません。
ただ、特殊な機械がない場合でMSXエミュレーターが無かった時代にはコンパイル後に毎回フロッピーディスクで実機に実行ファイルを持って行くとなるとセルフコンパイルのほうが楽かも知れませんが。
C言語のセルフコンパイルで私が実用的だと思ったのは、BDS Cというコンパイラだけでした。
アスキーがすすめるMSX-Cはコンパイル時間が遅すぎて 最小のソースでも三分半ぐらいかかった記憶があります。
ソースが大きくなるととてもコンパイルを待っていられませんでした。
そして関数がほんのちょっと大きくなるとメモリが足りなくてソース自体は正しくてもコンパイルエラーが出ました。
C言語コンパイラは普通はC言語で作られていました。
唯一、BDS Cだけはアセンブリ言語で作られたC言語で、Z80でも高速にコンパイルでき、関数をMSX-Cほど小さく分けなくてもコンパイルできました。
BDS Cは最適化はあまりよくなく作ったプログラムの動作速度はあまり速くなかったですがそれでもBASICインタプリタよりはずっと速く実用的でした。
C言語に否定的だった人の多くはBDS Cのことをよく知らなかったのだと思います。
その後、高速CPUのR800が出たり高速に動作するMSXエミュレーターが出たのでBASICでも十分速く動作するようになり、C言語で作ったプログラムの速さはあまり意味がなくなっていると思います。

最初のBASICとC言語の第一印象
C言語の標準機能ではグラフィックを扱えないし、カーソルの位置を移動させることすらできませんでした。
(MSXではMSX-DOSのエスケープシーケンスの利用で指定位置へのカーソル移動はできました。)
C言語の標準機能ではBASICのINKEY$のようなリアルタイルのキーボード入力の関数もありません。
C言語の標準機能でできたことといえば現在のカーソル位置に表示したり、現在のカーソル位置から文字列を入力することぐらいでした。
MSX-BASICではC言語の標準機能ではできない線や点を描いたり任意の位置にカーソルを移動させたり色を変えたりリアルタイムのキーボード入力をすることができました。
BASICすごい、C言語は何もできないじゃないかというのが第一印象です。
そしてBASICを触ってみて、自分はものすごくブログラムに向いているんじゃないだろうかと根拠もなく思いました。
どう表現したらいいのかよく分かりませんが松田聖子風に言うならビビっとくるものがあったのです。
その根拠のない自信が今でも変わってないのか、長い年月を経た今でもプログラムを作っています。
もしBASICを触っていなかったらプログラムにはあまり興味持たなかったかもしれません。
しかしすぐにBASICの欠点に気づきC言語にのめり込みました。

MSX-BASICではだめだった理由
最初はBASICすごい、BASICマンセーと思いましたが段々とBASICの欠点に気がついていき、C言語のすごさが分かるようになりました。
  1. プログラムの遅さ
  2. MSXturboRが出るまではMSXはものすごく遅かったです。
    ほんのちょっと処理を追加しただけでストップウォッチで測らなくても体感できるほど遅くなることがありました。
    作ったプログラムが速度的に実用レベルに達しないのならもう最初から作る気も失せてしまいます。
    もし、最初に買ったパソコンがPC-9800シリーズでN-88 BASICが最初に使ったBASICだったら速度的にBASICをやめようとは思わなかったでしょう。
    速度的にもMSX-BASICで複雑なプログラムを作ることに無理がありました。
    MSXべーしっ君という回避策がなくもなかったですがいろいろと使いにくく、MSXべーしっ君のROMカセットを常に挿している人ばかりではなかったので配布には向いていませんでした。
    ROMスロットの空きがないと挿しようがなかったですし。
  3. 言語仕様
  4. 内部変数は使えない。
    関数というものがなく引数や戻り値という概念がない。
    ソースにエラーがあってもその行を実行するまでエラーがあるかどうか分からない。
    サブルーチンに名前が付けられず行番号で指定。
    と言った具合でC言語のような本格的な言語ではありませんでした。
    インタプリタなので実行速度向上やメモリ節約のために字下げ(インデント)をして読みやすくすることも推奨されず、読みにくくても詰めて短いソースを書いて実行速度を上げてメモリを節約する必要がありました。
    MSX-BASICでは理解しにくい汚いソースしか書けませんでした。
    行番号を使うため、プログラムのルーチンを別ファイルから挿入することも難しいです。
    ソースを合体するには行番号が衝突せず且つ動作順序が期待通りになるように注意し必要なら行番号を振り直す必要があります。
    行番号の振り直しはGOTOやGOSUBで使っている行番号と整合性を保った状態で振り直す必要があるため、MSX-DOS上で動く普通のスクリーンエディタで手動で振り直すと整合性を保てずバグを作ってしまうおそれがありました。
    サブルーチンの再利用は行番号があるために困難になり大きなプログラムの開発には向きませんでした。
    言語仕様的にもMSX-BASICで複雑なプログラムを作ることに無理がありました。
  5. テキストエディタ
  6. MSX-BASICではスクリーンエディタではなく行番号を使って書く変なテキストエディタを使うのが普通でした。
    上方向にスクロールさせることすらできませんでした。
    行の挿入もカーソルを上下移動してその位置に書くといったことはできませんでした。
    文字列の検索機能すらなくとてもじゃないですが開発に不向きなテキストエディタでした。
    MSX-DOS上のスクリーンエディタで書くといった方法もできたと思いますが、行番号を使う言語なので行番号を自動付加したり行番号を自動的に振り直す機能がないスクリーンエディタはそれはそれで機能的に問題がありました。
    テキストエディタ的にもMSX-BASICで複雑なプログラムを作ることに無理がありました。

MSXをC言語メインでやっていて個人的に残念だったこと
多くの人と違って私はC言語をやるためにMSXを買いました。
BASICもZ80アセンブリ言語もやりましたけどメインはC言語でした。
MSXでC言語を使う人は最後の最後まで圧倒的少数でその存在を認知してもらえませんでした。
MSXの雑誌では最後の最後までBASICのことばかり取り上げ、たまにマシン語がでるぐらい。
MSXの雑誌で奇跡的にC言語の話題が書かれたと思えばC言語の悪口が書かれる。
自分一人だけ違うことをやっていて誰とも話が合わないといった感じでした。

C言語をメインでやった結果
今でも今主流のOSのプログラムを作れています。
C言語ができたので職業プログラマーも長いことできました。(今は職業としては引退しています。)
もし最初の選択でBASICまたはアセンブリ言語にはまりすぎてC言語を軽視していたらとっくの昔にプログラムを作るのをやめた(作れなくなった)と思いますし就職もできなかっと思う。
Z80アセンブリ言語もそれなりにやっていたんですがMSXパソコン生産終了後に使い道がなくなってショックでした。
MSXパソコン生産終了もZ80の仕事をすることがあったのですがC言語でやっていたのでZ80の知識は必要なかったです。
まだMSXが現役として売られているころはZ80アセンブリ言語で仕事したこともありますが。
ブランクが長くて今ではもうすっかり忘れてしまってやろうにもZ80アセンブリ言語のプログラミングはできないと思っていましたが、最近またやりはじめたら以外と覚えていて自分でもびっくりしています。

MSXのプログラムの再現と移植
BDS C Ver 1.5/1.5a製品版付属のコマンドラインのオセロゲームはC言語ソース(OTHELLO.C)があるので、わずかな改造で現在のC/C++コンパイラでコンパイルできます。
ANSI C及び、PHPに移植しました。
PHP版はコマンドライン版とCGI版があります。
詳しくは、BDS Cのページを見てください。
BDS Cオセロを元にしたPHP/CGIのオセロゲームサイトでダウンロードしなくてもブラウザ上でオセロゲームができます。
(移植のせいか?)弱すぎて楽しめませんが、BDS Cのオセロをしたことある人は昔を懐かしむことができます。
オリジナルのBDS CのOTHELLO.CのオセロをMSXエミュレーターごとウェブブラウザで楽しむこともできます。
速度を上げる指定(CPU_TURBO_MODE=1)をしているのでMSX実機のZ80よりもかなり速いです。
R800と比べてどうかは知りません。


リンク
Geistburg
現在もアセンブラを使った本格的なMSXプログラムをしている方のブログです。

アスキャット
MSXの技術資料のMSXテクニカルガイドブックやタイマーボールなどのゲームがあります。


あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ