書籍「MSX-BASICでゲームを作ろう」を電子書籍で購入しました。
書籍は後でじっくり読むとして、MSX公式エミュレーターMSXPlayerのダウンロード用のリンクとパスワードがあるので試してみました。
起動時MSXのタイトル、RAMは豪華に512KB
MSX-DOS Ver2.30が起動してきます。
ディスクの内容。
スクリーンショットを取得する機能があり、BMP形式で保存されるのですが、ファイルサイズが749KBでした。
MSXで使われる2DDのフロッピーディスクは720KBですので、スクリーンショット画像1枚も保存しきれないサイズだということになります。
画像ファイルのサイズが大きいのか、フロッピーディスクの容量が少ないのか、両方でしょうね。
DSK形式のイメージファイルを読み込むことが出来るようです。
MSX-DOS用に作成した.COM形式のファイルをDSK形式にして、MSXPlayerで起動したところ動作することは確認できました。

古いMSXの書籍は国立国会図書館で借りることが出来ます。

ユーザー登録をすればブラウザで結構の数の書籍が閲覧可能。
DSKイメージファイルの編集ソフト
DISKMGR.zipからインストーラを展開しインストール
拡張子.dskがアイコンが変更されました。ファイルの関連付けが変更されたようで、クリックするとDisk-Managerで開かれます。
ファイルをドラックアンドロップするとDSKイメージファイルに保存することが出来ます。⇢WindowsのファイルをMSXPlayerで読み込めます。
MSX-DOS1起動ディスクの作成
MSX-DOS2で起動
COPY A:\MSXDOS.SYS B:
Bドライブにディスクを挿入してください。
Insert disk for drive B:
and strike a key when ready
MSPlayerのメニュー⇢Fdd⇢DISK IMAGE FILEを選択
blank.dsk(事前に別名でコピーを推奨)を選択
MSXでエンターキーを押す。
COPY A:\COMMAND.COM B:
Aドライブにディスクを挿入してください。
Insert disk for drive A:
and strike a key when ready
MSPlayerのメニュー⇢Fdd⇢MSX-DOS(2)を選択
MSXでエンターキーを押す。
Bドライブにディスクを挿入してください。
Insert disk for drive B:
and strike a key when ready
MSPlayerのメニュー⇢Fdd⇢DISK IMAGE FILEを選択
blank.dsk(事前に別名でコピーを推奨)を選択
MSXでエンターキーを押す。
DIRでコピーされたことを確認
DIR B:\
MSPlayerのメニュー⇢Fdd⇢DISK IMAGE FILEを選択
blank.dsk(事前に別名でコピーを推奨)を選択
MSPlayerのメニュー⇢Restart(再起動)
MSX-DOS version 1.03(MSX-DOS1)で起動すると成功
ドライブとディスク(イメージファイル)の入れ替えの関係がイマイチ理解出来ていませんが、一応AとBの2ドライブとして扱えるようです。
C言語でMSXのプログラム開発

前景色、背景色、周辺職の設定
MSX-BASICのCOLOR命令を目指しました。
ファイル名:setcolor.c
#include<stdio.h>
// 前景色、背景色、周辺職の設定
// MSX-ROM
// zcc +msx -subtype=msxdos setcolor.c -o setcolor.com
// zcc +msx -a setcolor.c
void set_color(uint16_t fore, uint16_t back, uint16_t border) {
#asm
LD IX, 2
ADD IX, SP
LD A, (IX) ; 下位バイト:周辺色(第3引数)
INC IX
; LD B, (IX) ; 上位バイト:無視
LD HL, 0xF3EA ;BDRCLR
LD (HL), A
INC IX
LD A, (IX) ; 下位バイト:背景色(第2引数)
INC IX
; LD B, (IX) ; 上位バイト:無視
LD HL, 0xF3EA ;BAKCLR 背景色
LD (HL), A
INC IX
LD A, (IX) ; 下位バイト:前景色(第1引数)
INC IX
; LD B, (IX) ; 上位バイト:無視
LD HL, 0xF3E9 ;FORCLR 前景色
LD (HL), A
DI
LD IY, (0xFCC1-1)
LD IX, 0x0062 ;CHGCLR
CALL 0x001C; CALSLT
EI
RET
#endasm
}
int main() {
set_color(4, 15, 7);
printf("COLOR");
return 0;
}
実行すると色が変わることが確認できました。
BASICのCOLOR命令を試す。
コメント