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

#2 [mz] S-BASICとHu-BASICのコントロールコードについて

MZ-700 の Hu-BASIC上で使われるコントロールコードについて調べていたら、どうやら SP-5030 や S-BASIC とは異なるコントロールコードが割り振られていることに気が付いたり。SP-5030 や S-BASIC のつもりでテキスト変換していたら、カーソル移動のコントロールコードがさっぱり表示されなくて、改めて調べてみて、今頃気づいた次第。一応、マニュアルのソレを _メモ してみたり。

ちなみに、MZシリーズのBASICは、PRINT で表示する文字列の中に、カーソル移動のコントールコードを埋め込むことができるので、BASICのソースリストを眺めると、背景が白黒反転した矢印だらけだったりして「何ですかコレ」感が満載のような気がします。

ctrlcode_ss01.png

どうやって入力するのかすっかり忘れてたけど、どうやら GRAPHキー(MZ700WIN なら Page Upキー)を押してからカーソルキーを押すと入力できるようで。通常の入力に戻すなら英数キー (MZ700WIN なら TABキー)。

小文字やひらがなの表示。 :

MZ-700のBASIC上で、小文字やひらがなを入力すると、BASICソース内では、ニコちゃんマークが前後に入る模様。当時は使っていたはずだけど、完全に仕様を忘れていました。

ctrlcode_ss02.png

ベタ塗りニコちゃんが、「ここから小文字・ひらがなが始まるよ」の印で、線のみニコちゃんが「ここから大文字・カタカナに切り替わるよ」という印なのかな。たぶん。

そもそも、この文字、ニコちゃんマークという呼び方でいいのだろうか…。ひょっとして、 _スマイリーフェイス と呼んだほうがいいのかな。

以上、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