KUMAJIRI のダンプが掲載されていますが、古いバージョンなので非推奨との事。 (I/O:1980.8p108)
ベーシックマスター L2(詳細未確認) 向けの実装。
ベーシックマスター 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 として $FF を使用しているとありますが、テキスト・エディタからは EOFを書き込んでいる気配がありません。 どうやらコンパイラがテキストエディタのワーク(TXTEND)を調べてその後ろに $FF を書き込んでいる様です。 テキストのセーブ範囲は MEMBEG+1~TXTEND+1(EOF)となっていますが、現状では +1 までセーブしても意味がないかもしれません。
記事とコードの矛盾等を差分で紹介すると混乱するので、前提条件として仕様を固めることにしました。
H68版の動作環境がないため、一部に推測に基づいた判断を含みます。
今後 deBUG記事等が確認できた場合は、それに合わせて変更します。
| 使用キー | 名称(CTABLE) | 機能:コマンド | 備考 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | APPEND | インサートを連続して行なう | [CR]空打ちで終了 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| B | BEGINNING | ポインタをテキスト先頭へ移動 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| C | CHANGE | テキストの変更 | 現在の行を入力し直す | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nn | D | DOWN | ポインタの移動 | nn:移動行数 / 下位2桁のみ有効 / 省略時 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| E | LINE EDIT | TTYベースのライン・エディット | 現在の行を編集する | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| F | FIND | 文字列のサーチ | 現在の行以降を検索 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| I | INSERT | テキストの挿入 | 現在の行の前に挿入 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| n | K | KILL | テキストの削除 | n:削除行数 / 確認時 [CR]以外でキャンセル | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| L | LIST | リストの出力 | 現在の行から24行 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| M | オプション・コマンド | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| R | オプション・コマンド | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| S | COMPILE | オプション・コマンド | KUMAJIRI のコンパイラを登録する | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nn | U | UP | ポインタの移動 | nn:移動行数 / 下位2桁のみ有効 / 省略時 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| W | オプション・コマンド | リスト欠け | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| X | EXIT | モニタへジャンプ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Z | 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 | エディット終了 |
| | ||
Wコマンドが登録されていない点も合わせ、最後の数行が欠落していると判断しました。
Wコマンド は他のリザーブコマンドと同じ EDITOR を登録しました。
| 0AA6:57 | FCB | "W" | ;; オプション・コマンド (表にはある) | |
| 0AA7:073F | FDB | EDITOR | ;; | |
| 0AA9: | TBLEND | END | ;; $0AA9 ← バイナリから推定 |
| 0A9E:073F | FDB | EDITOR | → | 0A9E:2000 | FDB | $2000 | 注2)実際のコンパイラのアドレスに変更します |
利点1:「テキスト・エディタ」と「インタープリタ」を一括アセンブルする際のラベルの調整が不要になる
利点2:KUMAJIRI/BM のパッチを組み込むのが簡単になる
tools80, j68 の利用を前提とした改造例を示します。 ここで紹介するのは KUMAJIRI/BMのパッチ部とのすり合わせの小細工のみです。
冒頭にラベル「E:」を設定しローカルラベルの親とします。
すべての既存ラベルの先頭に「.」を追加し、E: のローカルラベルとします。
グローバル・スコープのシンボル 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 | |||
| * | ─ 以下略 ─ |
利点1:「テキスト・エディタ」と「インタープリタ」を一括アセンブルする際のラベルの調整が不要になる
利点2:予約語と競合するラベルが多いが、細かな調整が不要になる
利点3:KUMAJIRI/BM のパッチを組み込むのが簡単になる
ここで紹介するのは KUMAJIRI/BMのパッチ部とのすり合わせの小細工のみです。
tools80, j68 の利用を前提としています。
冒頭にラベル「K:」を設定しローカルラベルの親とします。
すべての既存ラベルの先頭に「.」を追加し、K: のローカルラベルとします。
グローバル・スコープのシンボル 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で書かれたソースリストが掲載されています。
コンパイラを持っていない状態ではソースを入力しても使い物にならないので、ダンプを入力します。
未着手