mieki256's diary



2019/05/20(月) [n年前の日記]

#1 [mz] Hu-BASICの記録フォーマットについてメモ

MZ-700用 Hu-BASICの記録フォーマットについて、 mzt をバイナリエディタで開いて眺めたり、bas2txt.c を眺めさせてもらったりして、ある程度分かってきた感じがするので、そのあたりをメモ。

数値について。 :

プログラム中に含まれている数値に関しては、色々な種類がある模様。

最初の1バイトを見ると、数値の種類が分かる。
  • 0x01 - 0x0A : 0 - 9 の数値を表す。
  • 0x0B, 0xXX, 0xXX : 行番号。2byte で示す。(GOTO xxxx, GOSUB xxxx)
  • 0x0D, 0xXX, 0xXX : 8進数。2byte で示す。(&Oxxxx)
  • 0x0E, 0xXX, 0xXX : 2進数。2byte で示す。(&Bxxxxxxxx)
  • 0x0F, 0xXX, 0xXX : 16進数。2byte で示す。(&Hxxxx)
  • 0x12, 0xXX, 0xXX : 整数。2byte で示す。 (xxxx)
  • 0x15, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX : 単精度小数点数。5byte で示す。(xxxx.xxx)
  • 0x18, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX : 倍精度小数点数。8byte で示す。

ちなみに、文字列は、ASCIIコードがそのまま並んでいるっぽい。

中間コードについて。 :

中間コードは、0x80 - 0xFD で示される群と、0xFE81 - 0xFEFF, 0xFF80 - 0xFFFF で示される群がある。一応、書籍「ADVANCED MZ-700」に書かれていた情報を、若干 _メモ してみたので、書かれている一覧表を眺めれば、ある程度は分かる…はず…。 *1

REM文について。 :

REM文は、ちょっと扱いが面倒な感じ。通常の「REM」は、「PRINT」等の中間コードと同様の扱いで読んでいけばいいけれど、REM の省略形として「'」という文字があって。この「'」が使われると、プログラム内では、自動で、マルチステートメントの区切り文字である「:」が直前に挿入される模様。

ただ、この場合の「:」は、LIST を打った際には表示されないので…。読み取っていく際に「:」が出てきたら、その直後が「'」であるかどうかを調べてみて、「'」があったら、その場合の「:」は表示しない、といった処理が必要になる模様。

ちなみに「ELSE」も「'」と同様で、直前に「:」が入るらしい。これも、読み取り中に「:」が出現、かつ、直後に「ELSE」の中間コードがあるなら、その場合の「:」も表示しない、といった処理が必要になる。

バイナリエディタで確認してみた結果。 :

各 .mzt を、バイナリエディタで開いて確認してみたソレも、一応アップロード。
  • .mzt は、最初の 0x80 byte がヘッダー情報。データ本体は、0x0080 以降に入っている。

以下のプログラムは…。
hu-basic_temp1_ss01.png

このように記録されている。
hu-basic_temp1_ss02.png
  • 水色 : 行の長さ
  • 緑色 : 行番号
  • 黄色 : 数値が入っている部分。上記の例では、整数(2byte)、及び、単精度小数点数(5byte)が記録されていることが分かる。
  • 紫 : 行の終端コード
  • 橙 : プログラム全体の終端コード

以下のプログラムは…。
hu-basic_temp2_ss01.png

このように記録されている。
hu-basic_temp2_ss02.png
  • 赤 : 行の終端コード
各数値は、最初に以下が書かれていることが分かる。
  • 行番号を示す数値は 0x0B
  • 16進数を示す数値は 0x0F
  • 2進数を示す数値は 0x0E
  • 8進数を示す数値は 0x0D

以下のプログラムは…。
hu-basic_temp3_ss01.png

このように記録されている。
hu-basic_temp3_ss02.png
  • 整数の 0 が 0x01、9 が 0x0A で記録されている。
  • 整数の 10 は、0x12, 0x000A になっている。
  • 最後のあたり、REMの省略形「'」(0x27)の前に、「:」(0x3A)が挿入されていることが分かる。LIST上では「:」なんて表示されてないけど、内部では「:」が挿入されているということ。

*1: ついでに、コマンドを増やすテクニック云々も _メモ してみましたが…問題があれば削除しますので、その時は指摘してください。

以上です。

過去ログ表示

Prev - 2019/05 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project