ファイル形式

今探索してみると、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 となります。
  • () に記載しているのは主な拡張子ですが、
    必ずしもこの拡張子というわけではないため、
    他の拡張子でも読み込めるよう考慮を行なっていただくのが無難です。
  • SCREEN ● ファイルの 0000h と 0000h の間にある値(終了番地)と
    ファイルサイズは制作したグラフィックツールにより
    一致していない場合があります。
  • パレットの扱いはグラフィックツールにより異なっています。

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

0100h Z80(R800) コード(バイナリ)
0101h Z80(R800) コード(バイナリ)
  :

MSX-DOS/2 では、0100h 番地を先頭に実行ファイルを読み込み、
0100h 番地から実行される仕組みです。ヘッダは含みません。


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バイト 769Fh
2バイト 0000h
0000h 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
0001h 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
69FFh 上4ビット (254,211)の色
下4ビット (255,211)の色
6A00h ~
767Fh
無視
7680h 上 bit7 無視
  bit6~4 COLOR 0 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 0 の B 輝度(0~7)
7681h 上 bit7~3 無視
下 bit2~0 COLOR 0 の G 輝度(0~7)
7682h 上 bit7 無視
  bit6~4 COLOR 1 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 1 の B 輝度(0~7)
7683h 上 bit7~3 無視
下 bit2~0 COLOR 1 の G 輝度(0~7)
 
769Eh 上 bit7 無視
  bit6~4 COLOR 15 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 15 の B 輝度(0~7)
769Fh

上 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
0000h 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
0001h 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
69FFh 上4ビット (254,211)の色
下4ビット (255,211)の色

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

1バイト FEh
2バイト 0000h
2バイト DA9Fh
2バイト 0000h
0000h 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
0001h 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
D3FFh 上4ビット (510,211)の色
下4ビット (511,211)の色
D400h~
FA7Fh
無視
FA80h 上 bit7 無視
  bit6~4 COLOR 0 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 0 の B 輝度(0~7)
FA81h 上 bit7~3 無視
下 bit2~0 COLOR 0 の G 輝度(0~7)
FA82h 上 bit7 無視
  bit6~4 COLOR 1 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 1 の B 輝度(0~7)
FA83h 上 bit7~3 無視
下 bit2~0 COLOR 1 の G 輝度(0~7)
 
FA9Eh 上 bit7 無視
  bit6~4 COLOR 15 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 15 の B 輝度(0~7)
FA9Fh 上 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
0000h 上4ビット (0,0)の色(0~15)
下4ビット (0,1)の色(0~15)
0001h 上4ビット (0,2)の色(0~15)
下4ビット (0,3)の色(0~15)
 
D3FFh 上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 は 8 つパレットを持っているため、

パレット無ファイル(.SR5/.SR7) と共にパレットファイルが生成されます。

ヘッダがないので、BLOAD,S では読み込めません。
OPEN・FIELD で読み込む事ができます。


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

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

SCREEN 8 は 512×212 ドット。左上が (0,0)、右下が (255,211) です。

SCREEN 5・7 のようにパレットを使用せず、

直接座標の色データになっています。
赤・緑は 0~7 ですが、青だけが 0~3 ですのでご注意下さい。
SCREEN 7 のようにパレットを含んでいる場合もあります。


SCREEN 10・11 ファイル(.SRA/.SRB/.SCA/.SCB)

1バイト FEh
2バイト 0000h
2バイト D3FFh(パレットなし)・Fa9Fh(パレットあり)
2バイト 0000h
0000h 上 bit7~4 (0,0) の Y 値 または 色(0~15)
  bit3 0=YJK・1=色
下 bit2~0 (0~3,0) の K 値 下3バイト(0~7)
0001h 上 bit7~4 (1,0) の Y 値 または 色(0~15)
  bit3 0=YJK・1=色
下 bit2~0 (0~3,0) の K 値 上3バイト(0~7)
0002h

上 bit7~4 (2,0) の Y 値 または 色(0~15)

  bit3 0=YJK・1=色
下 bit2~0 (0~3,0) の J 値 下3バイト(0~7)

0003h 上 bit7~4 (3,0) の Y 値 または 色(0~15)
  bit3 0=YJK・1=色
下 bit2~0 (0~3,0) の J 値 上3バイト(0~7)
0004h 上 bit7~4 (4,0) の Y 値 または 色(0~15)
  bit3 0=YJK・1=色
下 bit2~0 (4~7,0) の K 値 下3バイト(0~7)
 
D3FFh

上 bit7~4 (255,211) の Y 値 または 糸(0~15)

  bit3 0=YJK・1=色
下 bit2~0 (252~255,211) の J 値 上3バイト(0~7)

D400h~

FA7Fh

無視
FA80h 上 bit7 無視
  bit6~4 COLOR 0 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 0 の B 輝度(0~7)
FA81h 上 bit7~3 無視
下 bit2~0 COLOR 0 の G 輝度(0~7)
FA82h 上 bit7 無視
  bit6~4 COLOR 1 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 1 の B 輝度(0~7)
FA83h 上 bit7~3 無視
下 bit2~0 COLOR 1 の G 輝度(0~7)
  :
FA9Eh 上 bit7 無視
  bit6~4 COLOR 15 の R 輝度(0~7)
  bit3 無視
下 bit2~0 COLOR 15 の B 輝度(0~7)
FA9Fh 上 bit7~3 無視
下 bit2~0 COLOR 15 の G 輝度(0~7)

SCREEN 10 と SCREEN 11 はファイルとしてのデータは全く一緒です。
BASIC コマンドでの扱いが異なります。
(SCREEN 10 は COLOR 0~15 で RGB パレット使用、
 SCREEN 11 は COLOR 0~255 で VPOKE 共通)

 

FA9Fh の代わりに D3FFh を受け取った場合、パレットデータは存在しません。
(255,211) までの参照で止めて下さい。
この場合の色はデフォルトパレットを期待します。

 


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

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

SCREEN 12 は SCREEN 8 から YJK 形式での出力へ変化させたものです。

従って、FA9Fh 以降にパレット情報を含めている場合がありますが、
これは画像表示の場合無視できます。


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 となります。