Categories: R10コンピュータ

【FM/S1】F-BASICとS1BASIC機械語ファイル形式は同じでした

FM-7でF-BASICの機械語ファイルのロードアドレスを調べる必要があった為、
ちと調べていたところていたところ、S1BASICと全く同じ感じでした。
(もしかするとFMユーザやS1ユーザにとっては、何を今更・・・的な話題かもしれませんが
調べている方には多少は有益だと思われるので記事で残しておきます^^;;)

試しにS1BASICで$1000番地から16バイト分を保存し、エントリ番地を$1007にして保存するとこんな感じです

1~2バイト目にデータ長さ。
3~4バイト目にロード開始番地。
データが続き、最後に5バイトのフッタがあり、最後の2バイトがエントリ番地。
と、FM系の解説書で読んだ物と同じ結果になりました。
同じことをFMでやってみたところ、やはり同じ結果でした。

そうなると話は早く、S1で作っていた番地抽出プログラムをFM-7で実行させれば目的達成ということで、実行してみると。

正常に番地情報が表示されました^^

F-BASICとS1BASICでは#0のシステムランダムバッファを使ったプログラムは互換性が無いようですが、普通に入出力モードでオープンした場合、1文字の変更も無くS1用に作ったプログラムがFM-7で動作しました。

S1用に昔作ったプログラムで、FMのロード開始番地、終了番地、エントリ番地が抽出できました。

100 '+*** マシン ゴ ファイル ノ バンチ ヒョウジ for ヒタチ MB-S1 V.1 / MFADR.BAS
110 CLEAR5000: DR$="0:"
120 DEF FNH$(X,F)=RIGHT$("00000"+HEX$(X),F) 'FormatFloat
130 INPUT"FileName>";FL$
140 OPEN"I",#1,DR$+FL$
150 D$=INPUT$(5,#1)
160 LN=CVI(MID$(D$,2,2)): ST=CVI(MID$(D$,4,2)): ED=LN+ST-1: LN1=LN
170 IF LN>254 THEN D$=INPUT$(255,#1): LN=LN-255: GOTO170
180 D$=INPUT$(LN,#1) :D$=INPUT$(5,#1)
190 ET=CVI(MID$(D$,4,2))
200 PRINT "Start=$";FNH$(ST,4);" Entry=$";FNH$(ET,4);" Last=$";FNH$(ED,4); " (";LN1"Byte )"
210 CLOSE#1
220 END

という訳で、F-BASICでもS1BASICでも機械語ファイルの番地情報は同じように抽出できるということのようです。

普通のF-BASIC環境ではこのプログラムで機械語の番地情報が表示できるのですが、今回の目的だったFAMOS77&EXURAMによる裏RAMディスクを使うと上手く表示できません・・・

何か方法はあると思うので、調査を続けます^^;;;;

kabekin

View Comments

  • 話の発端が「FAMOS77&EXURAM」にあるなら多少でもコメントすべきなのですが
    個人的な状況で見過ごしていました。もっとも見た後にも有用情報もないですが。
    周知の通り、BASICはMSのOEMですのでFM-7とS1の互換性に不思議はないです、
    と後出ししておきます。ただロード開始番地、終了番地(長さ)、エントリ番地
    の付加情報として6バイトで済むのに何故10バイト分増えるのかと当時は疑問に
    感じましたので、秀和の「FM-7 F-BASIC解析マニュアルフェーズI」で
    フォーマットを調べたようです。↑の書籍のP139に折り目がついています。
    最初に識別情報的な「$00」があり、以下、開始番地、長さ、データとあって
    最後に「$FF」、「$0000」、入り口番地があって4バイトが増えるようだ、
    と納得して調査を終了したようです。
    肝心の「FAMOS77&EXURAM」については全然思い出せません、申し訳ないです。

    • >ガンマ関数さま
      コメントありがとうございます^^
      そうなんです、話の発端はQDに記録されていたファイルをEXURAMのRAMディスクに展開して、そのファイルのロード開始番地や長さ、エントリ番地を調べることでした。
      なんとか番地を調べる方法が無いか考えていたところ、S1でこの手のプログラムを作った覚えがあったのでFMに移植するために調べていました。
      同じMS系のBASICなので近いだろうとは思っていましたが、全く同じとは予想外でした^^
      保存フォーマットも同じ、BASICのプログラムも同じでしたがEXURAM上でロード開始番地等を見ることはできませんでした。
      もう少し精進が必要なようです^^

  • EXURAMで扱うファイル形式についての補足
    亀レスになりましたけどEXURAMで扱うデータがファイルではなく
    バッファと言う仕様なのでファイル形式には準拠していません。

    • 情報ありがとうございます^^
      なるほど!私の作っていたプログラムではおもいっきりファイル形式のシーケンシャルデータを決め打ちでリードしていたので、これだとアウトですね^^
      あれから何か他に方法は無いかと調べていたのですがそのまま保留になっています^^;;;
      ワークエリアを当てにしようと調べたのですがFM7もレベル3同様に実行番地やファイル名情報しか見つかりませんでした・・・
      P.S
      C-DOS7のコピーが取れて作業できる環境が整いましたので拡張モニタのアセンブラをファイルから使うことができました^^
      やはり、取説が無いと難しかったと思います。いろいろ情報ありがとうございます(^^)