ファイル形式


今探索してみると、Windows の GUI で Z80 のアゼンブラも
いくつか存在しているのですが、多くは HEX ファイルでの出力で、
ダイレクトに MSX-DOS や MSX-BASIC へ持っていくものがありません。
その理由は MSX を知らないために
MSX に対応したファイル形式を生成できないからだろうと思っています。


そんなわけで、MSX に関連するファイル形式の解説です。
ついでにこれも、これも、……と記載してみました。


  • CP/M では 128 バイト毎にファイルが生成され、空き部分を 1Ah(EOF) で埋めるのですが、
    CP/M 互換でディスクアクセスをしている場合は必要な場合がありますが、
    MSX-DOS でのアクセス(BDOS・ファンクションコール)そのものは 1 バイト毎なので、
    それを行なう必要はありません。
  • ディスク・ファイルは MS-DOS 2.2 互換です。
    ASCII 以外にカタカナの半角コードは当時の主流な他機種パソコンと同じ並びです。
    漢字 BASIC・漢字 MSX-DOS2 ではシフト JIS 形式が使えます。
  • Z80 では 16バイトの場合 若い番号 に 下8バイト が入ります。
    例えば 1234h だと読み込む順番に 34h・12h となります。
  • () に記載しているのは主な拡張子ですが、必ずしもこの拡張子というわけではないため、
    他の拡張子でも読み込めるよう考慮を行なっていただくのが無難です。

MSX-DOS 実行ファイル (.COM)

1バイト 100番地の Z80(R800) コード(バイナリ)
1バイト 101番地の Z80(R800) コード(バイナリ)

:

MSX-DOS/2 では、100h 番地を先頭に実行ファイルを読み込み、100h 番地から実行される仕組みです。

MSX-BASIC BSAVE/BLOADファイル

1バイト FEh
2バイト 開始番地
2バイト 終了番地
2バイト 実行番地
1バイト (開始番地)番地のデータ(バイナリ)
1バイト (開始番地)+1番地のデータ(バイナリ)
   :
1バイト (終了番地)のデータ(バイナリ)

MSX の RAM(メモリ)・VRAM(VDP関連メモリ)はそのままバイナリーファイル化されます。

実行番地は BLOAD で ,R をつけた際に実行される番地です。
以下の SCREEN ● ファイルも BSAVE・BLOAD 互換のため、上記の形式で記載されてます。

SCREEN 5 ファイル パレット付(.SC5)

1バイト FEh
2バイト 0000h
2バイト 76AFh
2バイト 0000h
1バイト 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
1バイト 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
1バイト 上4ビット (254,211)の色
下4ビット (255,211)の色
280hバイト 無視
1バイト 上 bit7 無視
  bit6~4 COLOR 0 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 0 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 COLOR 0 の G 輝度(0~7)
1バイト 上 bit7 無視
  bit6~4 COLOR 1 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 1 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 COLOR 1 の G 輝度(0~7)
 
1バイト 上 bit7 無視
  bit6~4 COLOR 15 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 15 の B 輝度(0~7)
1バイト

上 bit7~3 無視
下 bit2~0 COLOR 15 の G 輝度(0~7)

SCREEN 5 は 横256x212 ドット。左上が (0,0)、右下が (511,211) です。
輝度は 0 であれば暗く、7 であれば明るくなります。

SCREEN 5 ファイル パレット無(.SR5)

1バイト FEh
2バイト 0000h
2バイト 69FFh
2バイト 0000h
1バイト 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
1バイト 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
1バイト 上4ビット (254,211)の色
下4ビット (255,211)の色

SCREEN 7 ファイル パレット付(.SC7)

1バイト FEh
2バイト 0000h
2バイト DA9Fh
2バイト 0000h
1バイト 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
1バイト 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
1バイト 上4ビット (510,211)の色
下4ビット (511,211)の色
2880hバイト 無視
1バイト 上 bit7 無視
  bit6~4 COLOR 0 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 0 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 COLOR 0 の G 輝度(0~7)
1バイト 上 bit7 無視
  bit6~4 COLOR 1 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 1 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 COLOR 1 の G 輝度(0~7)
 
1バイト 上 bit7 無視
  bit6~4 COLOR 15 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 15 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 COLOR 15 の G 輝度(0~7)

※ SCREEN 7 は 横512x212 ドット。左上が (0,0)、右下が (511,212) です。
  SCREEN 5 に比べ横が 1/2 になります。
※ 輝度は 0 であれば暗く、7 であれば明るくなります。

SCREEN 7 ファイル パレット無(.SR7)

1バイト FEh
2バイト 0000h
2バイト D3FFh
2バイト 0000h
1バイト 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
1バイト 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
1バイト 上4ビット (510,211)の色
下4ビット (511,211)の色

グラフザウルス パレットファイル(.PL5/.PL7)

1バイト 上 bit7 無視
  bit6~4 PALETTE 0・COLOR 0 の R 輝度(0~7)
  bit3 無視
下 bit2~0 PALETTE 0・COLOR 0 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 PALETTE 0・COLOR 0 の G 輝度(0~7)
1バイト 上 bit7 無視
  bit6~4 PALETTE 0・COLOR 1 の R 輝度(0~7)
  bit3 無視
下 bit2~0 PALETTE 0・COLOR 1 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 PALETTE 0・COLOR 1 の G 輝度(0~7)
 
1バイト 上 bit7 無視
  bit6~4 PALETTE 7・COLOR 15 の R 輝度(0~7)
  bit3 無視
下 bit2~0 PALETTE 7・COLOR 15 の B 輝度(0~7)
1バイト 上 bit7~3 無視
下 bit2~0 PALETTE 7・COLOR 15 の G 輝度(0~7)

グラフザウルスの SCREEN5・7 では、
パレット無ファイル(.SR5/.SR7) と共にパレットファイルが生成されます。
ヘッダがないので、BLOAD,S では読み込めません。OPEN・FIELD で読み込む事ができます。

SCREEN 8 ファイル(.SR8/.SC8/.PIC)

1バイト FEh
2バイト 0000h
2バイト D3FFh
2バイト 0000h
1バイト 上 bit7~5 (0,0) の G 輝度(0~7)
  bit4~2 (0,0) の R 輝度(0~7)
下 bit1・0 (0,0) の B 輝度(0~3)
1バイト 上 bit7~5 (1,0) の G 輝度(0~7)
  bit4~2 (1,0) の R 輝度(0~7)
下 bit1・0 (1,0) の B 輝度(0~3)
 
1バイト 上 bit7~5 (255,211) の G 輝度(0~7)
  bit4~2 (255,211) の R 輝度(0~7)
下 bit1・0 (255,211) の B 輝度(0~3)

SCREEN 8 は 横512x212 ドット。左上が (0,0)、右下が (255,211) です。
SCREEN 5・7 のようにパレットがなく、ダイレクトに座標の RGB が保存されています。
赤・緑は 0~7 ですが、青だけが 0~3 ですのでご注意下さい。

SCREEN 12 ファイル(.SRS/.SRC/.SCS/.SCC)

1バイト FEh
2バイト 0000h
2バイト D3FFh
2バイト 0000h
1バイト 上 bit7~3 (0,0) の Y 値(0~31)
下 bit2~0 (0~3,0) の K 値 下3バイト(0~7)
1バイト 上 bit7~3 (1,0) の Y 値(0~31)
下 bit2~0 (0~3,0) の K 値 上3バイト(0~7)
1バイト 上 bit7~3 (2,0) の Y 値(0~31)
下 bit2~0 (0~3,0) の J 値 下3バイト(0~7)
1バイト 上 bit7~3 (3,0) の Y 値(0~31)
下 bit2~0 (0~3,0) の J 値 上3バイト(0~7)
1バイト 上 bit7~3 (4,0) の Y 値(0~31)
下 bit2~0 (4~7,0) の K 値 下3バイト(0~7)
 
1バイト 上 bit7~3 (255,211) の Y 値(0~31)
下 bit2~0 (252~255,211) の J 値 上3バイト(0~7)

Y(輝度)=0~31/1ドット・JおよびK(色相)=-32~31/4ドット
変換式……R=Y+J・G=Y+K・B=(5/4)Y-(1/2)J-(1/4)K

MSX-DOS テキストファイル・バッチファイル(.TXT/.DOC/.BAT)

MS-DOS・Windows のメモ帳等で生成されるテキストファイルと同等です。
漢字を用いる場合の文字コードはシフトJIS、改行コードは CR+LF となります。

終了コード EOF(1Ah) は付いている場合があります。その場合、後ろを無視する必要があります。
(CP/M のテキストファイルは必須)

ただし、必須ではありません。物理的なファイルの終了の場合もあります。

MSX-BASIC アスキーファイル(.BAS)

MSX-DOS テキストファイル同様、改行コードは CR+LF となります。
つまり、MSX-BASIC を Windows 等で記載して一度 2DD フロッピーディスクに保存すれば
MSX パソコンや MSXPLAYer 等から LOAD 命令や RUN 命令で読む事が可能です。
ひらがなと一部記号を除き、半角文字コードも一緒です。
漢字 BASIC の場合、漢字はシフト JIS となります。