2023年3月12日に秋葉原UDXにて行われた、MSX DEVCON3に参加した。
その時、会場にM5Stack Core2を持参すれば、今現在のMSX0を書き込んで送り返してくれるということだったので、私もお願いする事とした。
よくよく考えてみると、MSXでキチンとプログラムを作ったのは1990年が最後。
それ以降、3年くらい前にFS-A1ST(TurboR)が出土するまでの間、触ったことがなかった。
思えばMSXで初めてアセンブラというモノを使った(それまではハンドアセンブル)。
自分にはマシン語プログラムで256バイト以上のものは作れないだろうと思い込んでいたが、アセンブラを使用する事でこんな簡単になるんだ!と驚いた覚えがある(^^)
当時入っていた大阪のマイコンクラブで行われていたプログラムコンテストに参加するために奮闘したのをきっかけに、Z80アセンブラがスラスラ書けるようになった。
その後、なにかのきっかけがあり、マイコンBASICマガジン1982年11月号に掲載されていたPC-8001用のCOSMO MISSILEというゲームを、目コピーでMSXへ移植した。
オールマシン語のプログラムもこれが初めてだった!(^^)
↑今でもソースファイルは手元に残っている。
アセンブラソースファイルで57KBにもなった(コメントが多い)。
当時は中二病のようなペンネームを使っていたので、自己保身のために隠したww
MSXでCコンパイラ
今の時代にアセンブラでZ80をバリバリ書くのも楽しいけれど、もう良いお年頃でもあるので、速度を要さない部分などはできるだけ手軽に書きたいのがホンネだ(^^;;
まず有名なのはMSX-C。
今回のMSX 0 M5Stackにも入れると西和彦さんが表明してくださっている。
せっかくあるツールならば使わない手はないだろう(^-^)
ちなみに製品版の場合、MSX-Cを使うためにはMSX-DOS2 TOOLSが必要で、さらに日本語MSX-DOS2も必要になり、当時だいぶ泣いた(T-T)
MSX-Cを活用する場合には、実機(MSX0 M5Stack)上で動かす必要がある。現在の開発環境としてはどうだろうか…。
ちなみにMSX-CはZ80のコードを出力するんだろうか?それとも8080コード限定なんだろうか…。使っていた当時、あんまり気にした事が無かったけれども…汗
次に思い浮かんだのはSDCC。
SDCCは、2008年頃に某書籍を執筆しようとしている時に利用していた。
結局、書籍自体が頓挫してしまったため世には出なかったけれど…汗
そして2020年、HC-40のプログラムをするためにも活用した。
2008年頃に使用したSDCCとはオプションの表記が変わっていて、全部調べ直す事となった。コレは想像よりもだいーぶ苦労したよ…orz
今であればSDCCを利用するのがオススメだと思う。
WindowsでもMacでもLinuxでも使用できるメリットは計り知れない(^-^)
そして私が大好きなLSIC-80!
これは商用コンパイラなんだけど、長年(少なくとも20年以上!)使っている。
そのおかげで初期のセッティングに慣れている事や、コンパイラが出力するコードを理解しているため、人間最適化がしやすかったりして、個人的に気に入っている。
ただ、問題があるとすれば(私が所有しているパッケージでは)Windows環境でしか動かない事だ…。MS-DOS環境ではなくてWindows環境だ。これはMacユーザーには敷居が高い。
だけど!
今回はWineを利用する事で、M1 Mac上でWindowsアプリを動かす事が出来た!
思ったよりも快適に使えているので、備忘録を含めて残しておこうと思ったのだ!
この記事は誰得?!(^^;;
M1 MacでWineを使う
今回やりたい事は、M1 Mac上でIntelコードで書かれたWindowsアプリを動かしたいだ。
異なるアーキテクチャのものを動かすので、結構厄介かも知れない…(^^;;
M1 MacにWineをインストールする方法は、上の記事を参考にさせていただいた!
有益な情報を残してくださった筆者様には感謝しまくりだ!(^-^)
インストールしたWineでLSIC-80が動くか試してみる。
よしよし、なんとなく動きそうな予感だ!
実際にコンパイルしてみよう。
あら??cppがないと怒られた。
実はlcc80.exeはコンパイラドライバであり、内部でプリプロセッサやパーサーなどを順次呼び出すようになっている。
そのため、実行パスを通しておかないとコマンドを見つけられないようだ。
Wineプログラムへパスを渡すためにはWINEPATHという環境変数を設定するらしい。
ここでハタと困った…。
WINEPATHへ渡すのは、Macから見た絶対パス?それともWineから見たパス??
どちらも試してみたところ、どうやらWineから見たパスを渡すようだ。
Wineから見たCドライブは、~/.wine/dosdrives/c:/ となる(実態はdrive_c)。
そこにLSIC-80本体を入れつつパスを通す。
export WINEPATH=C:/lsic80/bin; wine lcc80.exe hello.c
これらの情報を暗記したままにするのは無理なので、急いでMakefileを書いていく!(^-^;
プログラムを作る
さて……MSXのプログラムを作るのは、以前turboRを発掘して以来だ!
出てきたturboRはFDDが空回りする現象が出ていた。修理してみようと頑張ったけれど、当時の私の修理技術ではまともに直す事が出来なかった…orz
仕方ないので、SDカードが刺さるカートリッジというのを手に入れた!(^o^)
そこにFlashAirというWiFi付きのSDカードを差し込んで、最新の開発環境を満喫した!
PC上で編集+アセンブルして、出来上がった実行ファイルをFlashAir経由でMSXのドライブへコピーし、即座に実行…という夢のような環境で遊べる幸せ。作業効率が良すぎて脳みそを使わなくなる(ーー;) pic.twitter.com/DJ21Dh0bWy
— PocketGriffon (@GriffonPocket) 2019年11月30日
「FiashAir MSX」で検索したら、当時のツイートが出てきた(^^;;
出来上がったCOMファイルを、単純にファイルコピーしてMSX側で実行する事が出来たので、本当に便利だった!
この本を参考にしながらFlashAirのセッティングをしていた。
FlashAir側にこんな設定が出来るなんて知らなかった!この本に出会わなかったら、便利な環境は作れなかっただろう!(^-^)
今、このカートリッジは親しい友人に貸してしまっているため手元にはない。
そんな状況でどうやってMSXの開発をするか…。
というわけで、今回はミュレータ(fMSX)を使うことにした!(^^)
作ったプログラムをディスクイメージに固めてMSX側でコマンド名を入力して実行して…という過程を想像していたら、ちょっとコレは面倒カモ??と思ってしまった。
ROMカートリッジのヘッダを付けるなりして、なんとか自動起動が出来ないだろうか…。
久しぶりにテクニカルハンドブックを引っ張り出す!
この本には本当にお世話になった!(^-^)
使いすぎてボロボロになってしまっているけれど、まだまだお世話になりそうだ!
これを見る限り、ROMヘッダを偽装(偽装?!)するのは簡単そうだ!