KUMAJIRIコンパイラ [H68/TR+TV]

概要

KUMAJIRIコンパイラ (I/O:1980.8) 津田伸秀
  • 6800用構造化言語
  • H68TR + H68TV 用
deBUG記事
  • I/O:1980.9-1981.12 には確認できず

関連情報

  • 告知 (ASCII:1980.1 TBN) 津田伸秀

  • 6809シミュレータ (I/O:1980.5) 津田伸秀

    KUMAJIRI のダンプが掲載されていますが、古いバージョンなので非推奨との事。 (I/O:1980.8p108)

  • KUMAJIRI/BM (I/O:1981.4) C.CATO

    ベーシックマスター L2(詳細未確認) 向けの実装。

  • ベーシックマスター版 KUMAJIRIコンパイラ (工学社 システム・プログラム ライブラリ:2) 瑞慶覧辰

    ベーシックマスター L2(詳細未確認) 向けの実装。

構成

  • テキスト・エディタ

    アセンブルリストが掲載されています。

    クセのあるライン・エディタなので、動作が読めないうちはタイヘンかも。

  • インタープリタ

    アセンブルリストが掲載されています。

    「インタープリタ」とありますが、実態は仮想マシンです。(「Kプロセッサ」との表記もあり)

    KUMAJIRI ではテキストを直接実行することはできません。

  • コンパイラ

    チェックサム付きのダンプリストが掲載されています。($2000~)

    KUMAJIRIのソース(TEST)から、仮想マシン用のバイトコード(記事中では「中間言語」と表現) を出力します。

    KUMAJIRIで書かれたソースも掲載されていますが、コンパイラが無いとセルフコンパイルできません。

メモリマップ

$0000
$00E0
ワーク・エリア
$0100
$0700
テキスト・エディタ
$0B00
インタープリタ
$0F80
(リザーブ)
$1000
スタック領域, テーブル領域
$1800
H68/TVモニタ
$2000
コンパイラ
$3300
コンパイラの変数エリア
$3400 (MEMBEG) アセンブルリストでは $5000
ソース
$5FFF (MEMEND) ← membtm ※EDITOR.198008.mac

環境構築:テキスト・エディタ

アセンブル結果を打ち込んでも良いですが、何かと有利なのでソースを打ち込むことをお勧めします。

ソースを打ち込む際は、文字定数のアセンブル結果が一致しているか確認してください。

注意

  • テキストデータにゴミが混ざる可能性がある

    行単位の入力(APPEND, CHANGE, INSERT)中は、文字,数字,記号,[CR],1文字削除,キャンセルに設定したキー以外は使用してはいけない様です。 行単位の入力では、編集結果ではなくカーソル移動等を含めた入力履歴が「テキスト」として記録されてしまいます。 モニタの出力ルーチンがコントロール・コードとして正常(あるいは同等)と解釈できた場合、入力者の編集意図どおりの表示をしてしまうのが曲者です。

    KUMAJIRI/BM のバグとして「プログラムが壊れるのでFコマンド使用禁止」という情報(I/O:1981.6p173)があります。 混入したコントロールコードの影響がないか確認する必要があります。

  • EOFマークについて

    ドキュメントでは EOF として $FF を使用しているとありますが、テキスト・エディタからは EOFを書き込んでいる気配がありません。 どうやらコンパイラがテキストエディタのワーク(TXTEND)を調べてその後ろに $FF を書き込んでいる様です。 テキストのセーブ範囲は MEMBEG+1~TXTEND+1(EOF)となっていますが、現状では +1 までセーブしても意味がないかもしれません。

    • ホットスタート時に EOFマークを探して TXTEND を自力で設定する
    • Xコマンドでモニタに戻る際に EOFマークを書き込む
      ⇒ TXTEND(セーブ範囲)を画面に表示したい (画面がクリアされる環境では遷移前にユーザーの確認が必要になる)
    • Sコマンドをコンパイル専用コマンドとし、コンパイラを呼ぶ前に EOFマークを書き込む
      ⇒ TXTEND(セーブ範囲)を画面に表示したい
    • コンパイラが TXTEND を参照して EOFマークを付けている部分が不要になる

仕様の整理

記事とコードの矛盾等を差分で紹介すると混乱するので、前提条件として仕様を固めることにしました。

H68版の動作環境がないため、一部に推測に基づいた判断を含みます。

今後 deBUG記事等が確認できた場合は、それに合わせて変更します。

  • LINE EDIT サブコマンド「エディット無効」で使用するキーの説明が実装と異なる
    ⇒ 総合的に考え [↑] は [^] の誤植と判断しました (参考:[↑] はおそらく $7B)
  • カーソル左移動,1文字削除(DEL) が混乱している
    ⇒ /BM版で差分を説明する際に混乱するので、アセンブル結果を優先しました
  • 1文字削除で使うキーが 1行入力 と LINE EDIT で異なる
    ⇒ 何か意味があるのかも (BS と DEL の違いはあるけれど...)
    編集に使用するキー
    使用キー 名称(CTABLE) 機能:コマンド 備考
    APPEND インサートを連続して行なう [CR]空打ちで終了
    BEGINNING ポインタをテキスト先頭へ移動
    CHANGE テキストの変更 現在の行を入力し直す
    nn DOWN ポインタの移動 nn:移動行数 / 下位2桁のみ有効 / 省略時 1
    LINE EDIT TTYベースのライン・エディット 現在の行を編集する
    FIND 文字列のサーチ 現在の行以降を検索
    INSERT テキストの挿入 現在の行の前に挿入
    n KILL テキストの削除 n:削除行数 / 確認時 [CR]以外でキャンセル
    LIST リストの出力 現在の行から24行
    オプション・コマンド
    オプション・コマンド
    COMPILE オプション・コマンド KUMAJIRI のコンパイラを登録する
    nn UP ポインタの移動 nn:移動行数 / 下位2桁のみ有効 / 省略時 1
    オプション・コマンド リスト欠け
    EXIT モニタへジャンプ
    END OF FILE ポインタをテキスト最後へ移動
    使用キー アドレス 機能:コマンド 備考
    LF $0768 $0A 次の行を表示する コマンドの echo back が無い NEXT LINE
    使用キー アドレス 機能:1行入力中の訂正 備考
    $07EC $7E 1文字削除(BS) ソースのコメントでは CLR
    $07E8 $5E 入力キャンセル ソースのコメントでは CLR LINE
    使用キー アドレス 機能:LINE EDIT 中の操作 備考
    $09A0 $7D カーソル右移動
    $09E2 $7E カーソル左移動 ソースのコメント, 記事中では CLR
    DEL$09D3 $7F カーソル以降を削除
    CLR$09C5 $5F 1文字削除(DEL) ソースのコメント, 記事中では
    $09FB $7C 1文字インサート
    $0A01 $7E  └→ キャンセル 表2 では CLR
    $09DB $5E エディット無効 記事中の表記は
    CR $0A11 $0D エディット終了

  • ラベル「TBLEND」が無い
    ⇒ テーブル末に TBLEND を補ってもアドレスが一致しませんでした

    Wコマンドが登録されていない点も合わせ、最後の数行が欠落していると判断しました。

    Wコマンド は他のリザーブコマンドと同じ EDITOR を登録しました。

    0AA6:57 FCB "W" ;; オプション・コマンド (表にはある)
    0AA7:073F FDB EDITOR ;;
    0AA9: TBLEND END ;; $0AA9 ← バイナリから推定

  • コンパイラの登録
    ⇒ [S]コマンドの呼び出し先を 仮のアドレスから $2000 に変更しておきます (ドキュメントに指示あり)
    0A9E:073F FDB EDITOR 0A9E:2000 FDB $2000 注2)実際のコンパイラのアドレスに変更します

アセンブル結果を打ち込む場合

  • 印字品質が良くない為、0, 8, B の打ち間違いに注意
  • TBLEND の矛盾を解決するため 0AA6:57073F を補う事 (参照:「仕様について」)
  • 0A9E:073F を $2000 に変更する事 (コンパイラのアドレス)

ソースリストを打ち込む場合

  • 印字品質が良くない為、0, 8, B / 5, S の打ち間違いに注意
  • ラベルに(ファイル)スコープを設定し、すべてをローカルラベル化しておくと利用しやすくなる

    利点1:「テキスト・エディタ」と「インタープリタ」を一括アセンブルする際のラベルの調整が不要になる

    利点2:KUMAJIRI/BM のパッチを組み込むのが簡単になる

KUMAJIRI/BM と共用する為のソースリスト改造例

tools80, j68 の利用を前提とした改造例を示します。 ここで紹介するのは KUMAJIRI/BMのパッチ部とのすり合わせの小細工のみです。

  1. 既存ラベルをローカル化する

    冒頭にラベル「E:」を設定しローカルラベルの親とします。

    すべての既存ラベルの先頭に「.」を追加し、E: のローカルラベルとします。

  2. KUMAJIRI/BM のパッチ部と整合をとる

    グローバル・スコープのシンボル OUTP, INPUTP, SF141, S1A32, SFAFA, SFFEC を定義します。 KUMAJIRI/BM では、これらのシンボルはパッチ部から引き継ぐので定義不要になります。

    OUTP, INPUTP, S1A32, SFAFA は冒頭で既存のシンボルにマッピングします。

    SF141, SFFEC はそれぞれコード本体内の一か所を $**** から変更します。

OUTP equ $1EFE
INPUTP equ $190A
SF141 equ $F141 コード本体内の "$F141" を "SF141" に変更する (一か所)
*
S1A32 equ $1A32 ; OUTSTR
SFAFA equ $FAFA ; INCHR
SFFEC equ $FFEC コード本体内の "$FFEC" を "SFFEC" に変更する (一か所)
*
E: ; local 以下全ての既存ラベルの先頭に "." を打つ
* ─ 追加コードはココまで ─────────────
.INCHR EQU SFAFA ┬ 変更後の例(冒頭のみ) ─────────────
.BUFFER EQU $1600
.POINTR EQU $F2
.XSAVE EQU $F4
.SSAVE EQU $F6
.WARK EQU $F8
.FLAG EQU $F9
*
.OUTP EQU OUTP 混乱しないように!
.INPUTP EQU INPUTP 混乱しないように!
.OUTSTR EQU S1A32
*
ORG $700
* ─ 以下略 ─

環境構築:インタープリタ (Kプロセッサ = 仮想マシン)

アセンブル結果を打ち込む場合

  • 印字品質が良くない為、0, 8, B の打ち間違いに注意

ソースリストを打ち込む場合

  • 印字品質が良くない為、0, 8, B / 5, S の打ち間違いに注意

  • ラベルに(ファイル)スコープを設定し、すべてをローカルラベル化しておくと利用しやすくなる

    利点1:「テキスト・エディタ」と「インタープリタ」を一括アセンブルする際のラベルの調整が不要になる

    利点2:予約語と競合するラベルが多いが、細かな調整が不要になる

    利点3:KUMAJIRI/BM のパッチを組み込むのが簡単になる

KUMAJIRI/BM と共用する為のソースリスト改造例

ここで紹介するのは KUMAJIRI/BMのパッチ部とのすり合わせの小細工のみです。

tools80, j68 の利用を前提としています。

  1. 既存ラベルをローカル化する

    冒頭にラベル「K:」を設定しローカルラベルの親とします。

    すべての既存ラベルの先頭に「.」を追加し、K: のローカルラベルとします。

  2. KUMAJIRI/BM のパッチ部と整合をとる

    グローバル・スコープのシンボル OUTP, INPUTP, SF141, SF49C, SF508, SFBC7, SFBB2, SFBCB を定義します。 KUMAJIRI/BM では、これらのシンボルはパッチ部から引き継ぐので定義不要になります。

    OUTP, INPUTP は冒頭で既存のシンボルにマッピングします。

    SF141, SF49C, SF508, SFBC7, SFBB2, SFBCB はそれぞれコード本体内の一か所を $**** から変更します。

OUTP equ $1EFE
INPUTP equ $190A
SF141 equ $F141 コード本体内の "$F141" を "SF141" に変更する (一か所)
*
SF49C equ $F49C コード本体内の "$F49C" を "SF49C" に変更する (一か所)
SF508 equ $F508 コード本体内の "$F508" を "SF508" に変更する (一か所)
SFBC7 equ $FBC7 コード本体内の "$FBC7" を "SFBC7" に変更する (一か所)
SFBB2 equ $FBB2 コード本体内の "$FBB2" を "SFBB2" に変更する (一か所)
SFBCB equ $FBCB コード本体内の "$FBCB" を "SFBCB" に変更する (一か所)
*
K: ; local 以下全ての既存ラベルの先頭に "." を打つ
* ─ 追加コードはココまで ─────────────
ORG $E0 ┬ 変更後の例(冒頭のみ) ─────────────
*
.PC RMB 2
.STACK RMB 2
*
.XSAVE RMB 2
.COUNT RMB 1
.SFLAG RMB 1
.WARK RMB 2
.A RMB 2
.ASCII RMB 6
.RAND RMB 2
*
.OUT EQU OUTP
.IN EQU INPUTP
*
.IS EQU $17FE
.BUFFER EQU $1600
*
ORG $B00
* ─ 以下略 ─

環境構築:コンパイラ

ダンプリストとKUMAJIRIで書かれたソースリストが掲載されています。

コンパイラを持っていない状態ではソースを入力しても使い物にならないので、ダンプを入力します。

ダンプリストの注意点

  • 印字品質が良くない為、0, 8, B の打ち間違いに注意
  • チェックサムの桁数が多いので 80/00 の間違いにも強いが過信しない事

ソースを打ち込んでオブジェクトを比較してみた

未着手
どうする?
違ってたらメンドクサイな...
一応ソースは準備したけど、リロケートが必要なので下準備がめんどくさい

プログラムリストの入力について

操作方法

テキスト・エディタを起動する

テキスト・エディタの基本操作

プログラムのセーブ方法

プログラムのロード方法

コンパイルとオブジェクトの利用について

コンパイルから実行まで

コンパイル

オブジェクトの保存

オブジェクトの実行

オブジェクトの利用について


KUMAJIRI [H68/TR+TV]