PC-8801シリーズ用N88-BASICの中間言語コンバータを開発開始!☆HSP3でプログラミング

N88-BASICの中間言語コンバータ作りに挑戦! HSP

最近は PC-88・PC-98 に関連する
プログラミングをすることが多いので
その絡みでふと思いついた事が。

「N88-BASIC でバイナリセーブされた
プログラムファイルを、そのままの形で
確認できたら便利かも~!」

SAVE 命令で普通に保存されたものは
バイナリ形式となっているので
テキストエディタでは開けません。

バイナリエディタで中を覗いても
所々に変数名などが見えたりするだけで
他の部分は意味不明な状態😅

これをアスキーセーブすることなく
そのまま解読できたら便利だっ!

てことで、昔の書籍を引っ張り出して
HSP3 を使ってプログラミング開始♪

その途中経過を簡単にご報告です。
ゲーム記事じゃなくてごめんなさい🙏

余談ですが、今日の記事で
本ブログの記事数が
1,800記事達成となりました♪

これからもゲームプレイ日記の他に
開発関連の事も書いていきますので
変わらずどうぞよろしくです🙇

ブログランキング参加中!ポチッ👆と応援よろしくです♪
  • にほんブログ村 ゲームブログ ドラクエシリーズへ
  • にほんブログ村 ゲームブログ レトロゲームへ
 
スポンサーリンク

PC-88から移植した自作RPG「アシュラの塔」のダウンロードはこちらから
N88-BASICのプログラムをWindows上で編集&保存!「N88-BASIC Source editor」のダウンロードはこちらから

まずは中間言語の情報を取得

本棚から取り出してきた書籍の中の1冊
『PC-Techknow8800 Vol.1』を見ると
入力された BASIC のプログラムは
中間言語という形に変換されて
メモリへ格納されていることが判明。

SAVE 命令で保存されたファイルは
その中間言語が格納されている
メモリをそのままの形で保存した
バイナリ形式になっているので
ぱっと見では中身が全然わかりません。

PC-Techknow8801掲載の中間言語テーブル取得プログラム

BASIC 命令と中間言語コードの
簡易対応表を出力するプログラムが
『PC-Techknow8800 Vol.1』に
掲載されていたので早速入力して実行!

各命令と対応するコードがわかる

おおー!次々と命令&中間言語コードが
表示されていきました♪

これがあればコード解析の半分近くは
一気に行えるではないか~😆

てことで次は実際の中間言語格納先
メモリを覗いてみることにしました。

テキストRAMの先頭を確認

MON 命令で機械語モニタに入り
まずは O70,0 を実行します。

こうすることで BASIC ROM と重なる
中間言語が格納されたテキストRAM を
&H8000~&H83FF 部分に映せます。

O70,0 で 0 を指定しているので
映し出すのは &H0~&H03FF の範囲。
必要であれば 0 の部分を変更して
ここに映し出す範囲を変えます。

メモリ上のプログラムを見てみると確認できた

実際に出力してみたテキストRAM 。
&H8001 からがプログラム本体です。

一部そのまま読み取れる文字列が
右側に表示されているのですが
それらはコメント部分、変数名、
ラベル名などとなっています。

命令などは先にプログラムで取得した
中間言語コードに変換されているので
元のソースを見比べなければ
どうなってるかわかりませんね😅

それでは先頭の4行だけ覗いてみます。
次の項でわかりやすく抜き出しました。

少しだけ解読してみた!

リンクポインタ

     +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
0000 00 09 00 64 00 3A 8F E9 00-3A 00 6E 00 3A 8F E9  ...d.:...:.n.:..
0010 2D 2D 2D 2D 2D 20 4E 38 38-2D 42 41 53 49 43 20  ----- N88-BASIC 
0020 4B 65 79 20 57 6F 72 64 20-4C 69 73 74 20 2D 2D  Key Word List --
0030 2D 2D 2D 20 5B 20 31 20 5D-00 42 00 78 00 3A 8F  --- [ 1 ].B.x.:.

実際の番地に合わせて取り出した
プログラムの先頭 64バイトです。

プログラムは &H0001 からなので
そこからの 2バイトを確認。
ここはリンクポインタというもので
次の行が格納されている先頭番地です。

今回の場合「09,00」となっているので
&H0009 からが次の行となります。

行番号

     +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
0000 00 09 00 64 00 3A 8F E9 00-3A 00 6E 00 3A 8F E9  ...d.:...:.n.:..
0010 2D 2D 2D 2D 2D 20 4E 38 38-2D 42 41 53 49 43 20  ----- N88-BASIC 
0020 4B 65 79 20 57 6F 72 64 20-4C 69 73 74 20 2D 2D  Key Word List --
0030 2D 2D 2D 20 5B 20 31 20 5D-00 42 00 78 00 3A 8F  --- [ 1 ].B.x.:.

次の 2バイトは行番号の数値。
「64,00」となっているので
16進表記で &H0064 。
10進数にすると 100 となります。

実際の BASIC プログラムでは
「100 ‘」と記述されているので
100で合っていますね。

REMと省略形

     +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F  0123456789ABCDEF
0000 00 09 00 64 00 3A 8F E9 00-3A 00 6E 00 3A 8F E9  ...d.:...:.n.:..
0010 2D 2D 2D 2D 2D 20 4E 38 38-2D 42 41 53 49 43 20  ----- N88-BASIC 
0020 4B 65 79 20 57 6F 72 64 20-4C 69 73 74 20 2D 2D  Key Word List --
0030 2D 2D 2D 20 5B 20 31 20 5D-00 42 00 78 00 3A 8F  --- [ 1 ].B.x.:.

次の 1バイトは &H3A 。
これは文字コードとして扱うので
「:」コロンとなります。

色々試した結果、REM の省略形である
「’」アポストロフィを書くと
自動でコロンと REM の中間言語コードが
入るようになっているみたいです。
でもこのコロンは LIST では非表示。

続く &H8F が REM の中間言語コード、
&HE9 が「’」の中間言語コードです。

最後の &H00 で行の末尾となり
次が最初に取得したリンクポインタの
番地 &H0009 となりますね。

次の行も同じようにして解読していくと
リンクポインタが &H003A、
行番号は &H006E = 110 。

110行もコメント行なので 3A,8F,E9 。
その先に「—– N88-BASIC …」と
コメント文が続いています。

このような感じで中間言語を解析する
プログラムを HSP3 で開発開始♪

HSP3でプログラミング開始!

HSP3を利用してコンバータ作りを開始!

先ほど抜き出した部分には
コメント行しかありませんでしたが
その先にはプログラムが続いています。

バイナリセーブされた
N88-BASIC のソースファイルを
HSP3 で開いて解析処理開始!

リンクポインタ、行番号、中間言語
の順番で 1行ずつ解析を繰り返し
プログラムをテキストに復元して
表示するものを作ります。

まだ不完全ですが、現段階でかなり解析できています

ある程度仕上がってきた
開発途中のバージョンがこちら。

左側が元となるバイナリファイルで
右側が解析結果のテキストです。

まだ一部の中間言語コードには
完全に対応しきれていないため
表示できないプログラムもありますが
かなりいい感じではないでしょうか♪

N88-BASIC のコンバータが完成したら
次は N88-BASIC(86) 版も開発予定!

PC-88&98 の BASIC で作ったものは
自分もたくさん所有しているので
仕上がればかなり便利そうです。

今はわざわざアスキーセーブしないと
中を見ることができませんからねぇ。

といったところで今日はおしまい!
ゲームとは全く関係ない記事でした。

これを早く仕上げないと
落ち着いて遊ぶこともできないなぁ😅

それではまた明日の記事で♪

ポチッと応援してもらえたら嬉しいな♪

広告
ブロサーの方はこちらからコメントできます

TSAPPS開発室の息抜きゲーム部屋 - にほんブログ村

人気ブログランキングでフォロー


HSPPC-88・PC-98開発
スポンサーリンク
ゴルディクスをフォローする
当サイトをご利用の方へ
当サイトでは、各ゲーム会社様を代表とする共同著作者が権利を所有する画像を利用しています。ゲームの画像の著作権はゲーム会社様にあります。当該画像の転載・配布は禁止致します。  
(C)ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved.
カカニャン(H.N.患者)もよろしく
カカニャン

一言メッセージ

二次創作を中心に絵や小説を作っています(未だ投稿はしていませんが、オリジナル作品も出すつもりです)。 互いに発信し合えるSNSの良さを活かして沢山の方と交流出来たらいいなぁ、と思っています。

コメント

タイトルとURLをコピーしました