WebMSXの改造

WebMSXは私が借りているレンタルサーバーで動かすと、Could not found xxxというエラーがよく出て問題を感じています。
自作プログラムのファイルを読み込んでくれない時があるのです。
こうなるのなら外部ファイルではなくソースに埋め込みたいです。
それでWebMSXを解析中ですが、見事によく分からないです。
CR3は一部マウスに対応しました。
ソースはまだ公開していません。

ROMカートリッジのプログラム終了後は

MSXのROMカートリッジのプログラムは(ゲームなどは)MSX-DOSもBASICも起動しないままプログラムが立ち上がります。
OSが起動する前にプログラムが起動しているのでMSX-DOSまたはBASICに戻るという概念はありません。
CR3はROMカートリッジの場合はプログラム終了後はCPUを停止するようにしました。
プログラム終了後にMSX-DOSまたはBASICを呼び出すプログラムを作ることはできるのかも知れませんが普通はそういう処理を入れずにROMカートリッジを抜いて電源再投入なんじゃないかと思います。
プログラムの終了処理時代を入れずに無限ループにするのが普通かな。

BDS C版のCR3のMSX ROMカートリッジ移植できました。

C言語部分のソースは全く同じなのですが、ライブラリとスタートアップルーチンを、MSX-DOS、MSX-BASIC、MSX ROMカートリッジの三対応しました。
それに伴いツールもいくつか更新しました。
ソース公開はドキュメント書いたりしないといけないので今すぐはできません。
とりあえずはバイナリをMSX-BASICのOS版からROMカートリッジ版に差し替えます。
HI-TECH Cも方法は分かっているので同様に三タイプ対応はできると思います。
HI-TECH CではMSX-DOS版CR3の他、MSX-BASICのBLOADファイルのテストプログラムは動かせています。

AAPP ソース出てきました。

誤って削除していたAAPPのソースですが
なんかWindowsが勝手にバックアップを取っていてほぼ最新のソースが手に入りました。
恥ずかしながら、何の指定も設定もしていないのにフォルダをエクスプローラーで右クリック出てくる設定ウィンドウの中に過去のバックアップの復活メニューがあるとは知りませんでした。
bloadmakeも第一号のソースが手に入りましたが、すでに最初から作り直していて機能も追加しているので用なしです。

BDS CでMSX-BASIC(BLOAD)に対応したが

正直、作成したプログラムをMSX-BASICで実行させる機能は要らないと今になって思った。
もしROMカートリッジのプログラムに対応していたらの場合だけど。
BLOADファイルは実行にMSX-DOSが必要なくなるけど、BASICインタプリタを内蔵したROMが必要になって結局ライセンス問題は解決しない。
そして、プログラムの最大サイズが使用メモリも含めて20000バイトぐらいと小さくプログラムサイズが大きくなりがちなC言語を使うのは実用性に乏しい。
使えるメモリとプログラムサイズが最も大きいのはMSX-DOSだがROMカートリッジは最大32752バイトのプログラムが作れ(メガROM除く)実用の範囲内にあると思う。

ROMカートリッジのイメージファイルのサイズ

間違ったことを書いていたので後日訂正しました。
blueMSXも、WebMSXは32768バイトちょうどでないとエラーが出る。(正確には16KB単位のサイズで規格内のサイズ)
100バイトぐらいのプログラムでも32768バイトにしないといけないのは無駄すぎる。

BDS CでMSXのROMカートリッジのプログラム作成に成功

やりたかったBDS CでのMSXのROMカートリッジのプログラムの作成に成功しました。
実物のROMカートリッジは作成しておらず、エミュレーターで動作させました。
まだテストプログラム段階です。
条件アセンブルは手動でやってツールのAAPPで自動化には対応していないのと、
標準ライブラリの移植はこれからなので公開できるのは時間がかかります。
HI-TECH Cでも同様のことはできると思いますが、それは後回しもしくはやるかどうかまだ決めていません。
ROMカートリッジ版のCR3を公開したあとは、WebMSXをC-BIOS専用に改造したいです。
ソースの解析は難しいため作者もしくは誰かの協力がないとできないかも知れません。
C-BIOSは著作権問題を回避したMSXのBIOSです。
C-BIOSはROMカートリッジだけに対応してBASICインタプリタと、BASICのOSとMSX-DOSを使うことはできません。
C言語なので元々BASICは必要どころか邪魔ですし、開発はWindowsで行っているのでMSX-DOSも必要ありません。
ROMカートリッジのソフトが動きさえすればですが。
もし、WebMSXのC-BIOS専用版が完成すれば、MSXはクリーンになります。

zmac はバイナリファイルも出力していた

今気づいたんだけどZ80アセンブラのzmacは、拡張子.cim のファイルにバイナリファイルも出力していた。
知らなかったから、ihex2binというHEXファイルからバイナリへのコンバーターを作って使っていたが、要らんかった。
なんかの役には立つとは思うけど。

MSX ROMカートリッジのプログラムをアセンブラで作ることに成功。

前やろうとしてできなかったんですが、できました。
BDS C用のROMカートリッジの初期化ルーチンとランタイムライブラリとMSXライブラリと標準ライブラリを作らなければならなくなりました。
標準ライブラリは諦めるかも。
今、アセンブラの条件アセンブルをするためのプリプロセッサーのAAPPが、BASICとMSX-DOSの切り替えしかできません。
それを改造して、BASICとMSX-DOSとROMカートリッジの三つを切り替えられるようにしなければなりません。
でも、AAPPのソースは削除してしまってないんです。

最初から作り直しかあ。嫌だなあ。
実は今月、bloadmakeというプログラムも消してしまって短期間に二回も作りました。
せっかく作ったものをまた最初から作るとか、嫌な気分です。
しかもAAPPは作ったばかりで、公開する前にソースなくしてしまった。
バイナリだけ残っています。

MSX ROM cartridge example program(Z80 assembler)

ORG 04000H
;MSX ROM header 16 bytes
DB ‘AB’ ;MSX ROM header mark
DW 4010H ;start address(or initial routine address)
DB 0,0,0,0,0,0,0,0,0,0,0,0

;initial MSX
DI ;4010H
LD SP,(0FC4AH)
EI
LD HL,0C002H
LD (HL),013H
LD HL,0C006H
LD (HL),015H
LD HL,0C00AH
LD (HL),015H
IN A,(0A8H)
AND 0CFH
LD D,A
IN A,(0A8H)
AND 0CH
ADD A,A
ADD A,A
OR D
OUT (0A8H),A
LD HL,08080H
LD (0C032H),HL
LD HL,01H
LD (0C02DH),HL
LD HL,00H
LD (0C049H),HL
LD (0C04BH),HL

;main program
;put ‘v’
LD A,’v’
CALL 0A2H

;program end
ELOOP:
DI
HALT
JR ELOOP

ORG 0BFFFH ;program size 32768 bytes(32KB)
NOP

END