mieki256's diary



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

#1 [mz][python] MZシリーズのBASICをテキスト変換するPythonスクリプトを書いてたり

MZ-80K/1200の標準BASIC、SP-5030用のBASICプログラムを、テキスト出力する Pythonスクリプトを書いているところ。mztファイルを読み込んでテキストに変換、みたいな。

ちなみに、SP-5030用BASICプログラムの記録フォーマットは、 _2019/05/09の日記 にメモしてある。

S-BASICにも対応させたい。 :

SP-5030用の処理はそれらしい結果が出てくるところまで書けたけど。ついでに、MZ-700版 S-BASIC (1Z-007B) にも対応させようとしたところで悩んだり。

MZ-700版 S-BASIC の記録フォーマットは、以下のページが参考になりそう。英語版の S-BASIC が対象ではあるけれど、中間コードの一覧も、記録内容も、細かく解説してある。英語だからよくわからんところもあるけど…。

_S-BASIC 1Z-013B internals
_Overview of S-BASIC commands
_MZ-700 / MZ-800 Basic Instructions Overview

例えば、以下のソースは…。

mz700_sbasic_ss01.png

以下のような形で記録されてる。

mz700_sbasic_ss02.png

フォーマットは、SP-5030 とかなり似ているけれど、若干違う部分もあるようで。

同じ点は以下。
  • 1行分は、「行の長さ(2byte), 行番号(2byte), 内容、終了コード(1byte)」の順で並ぶ。
  • ソースコードの最終2byteが、終了コード = 0x0000 になっている。要は、行の長さが 0x0000 なら、そこでプログラムは終了、という扱いにできる。

異なる点は以下。

SP-5030 は…。
  • 行の終了コードが 0x0d。
  • コマンドの中間コードは、1byteのみ。0x80 - 0xff の範囲を取る。
  • ソース中の数値は、ASCIIコードでそのまま記述される。

S-BASIC は…。
  • 行の終了コードが 0x00。
  • コマンドの中間コードは、1byte、または 2byte。1byte分は 0x80 - 0xfd、2byte分は 0xfexx - 0xffxx の範囲を取る。
  • ソース中の数値は、数値種類コード 1byte + 数 byte のバイナリで記述される。最初からバイナリになった状態で記録されるから、実行時に ASCII から数値に変換しないで済む ―― 実行速度が稼げるらしい。

ちなみに、mztファイルを読み込んで、S-BASIC、Hu-BASIC のソースをテキスト出力してくれる、bas2txt というツールが既にあって…。

_We Love MZ-700

C言語で書かれたソースも同梱されているので、とても参考になる。ありがたや。

というか、変換結果だけ欲しければ、bas2txt を使わせてもらったほうが早いのだけど。今回は、記録フォーマットについて把握しておきたいので、自分も処理を書きつつ仕様を確認、みたいな。

S-BASICの数値に記録フォーマット。 :

MZ-700 S-BASIC は、ソース内の数値をバイナリとして記録してあるらしいのだけど。それぞれ、以下のような状態で記録されてるらしい。
  • 0x15 + 5byte : 浮動小数点数 (単精度実数)。5byte のうち、最初の 1byte が 指数部、残り4byteが仮数部。らしい。
  • 0x11 + 2byte : 16進数。ソース内で $xxxx と記述した際に使われる。0x0000 - 0xffff まで記述できる。
  • 0x0b + 2byte : 行番号。0 - 65535 まで記述できる。

mz700_sbasic_ss03.png

16進数と行番号は、種類を示す数値の後ろから 2byte 読み込むだけで済むけれど。浮動小数点数が…よく分からない…。以下で説明はされているけれど…。

_S-BASIC 1Z-013B internals

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