Last Updated on 2021年4月4日 by kabekin
モトローラのASSIST09モニタのコマンドと機能を整理しておきたいと思います。
ASSIST09をレベル3で使うための拡張ROMとして実装する場合はROMのプログラムを$8000~$9FFFの8KBに収めてDISKBASICの場合はDISKBASICで使用する$6500~$66FF, $8800~を避けて使うと良さそうです。
$8000~$9FFFに増設できると思われるIC2ソケット
マスクROMソケットなのでEPROMの増設には変換アダプタを作らないとダメそうです・・・^^;;;
基本コマンド
ASSIST09本体が持っている基本コマンドの使い方
なかなか多機能なモニタですね
あと逆アセンブラや1行アセンブラがあればツクモ電機のFM7用拡張モニタに近づきます^^
コマンド | コマンド名 | 機能 |
B | Break Point | ブレークポイントの設定、表示、解除 B ブレークポイントの表示 B - ブレークポイントの削除 B <アドレス> ブレークポイントの追加 B – <アドレス> ブレークポイントの削除 |
C | Call | プログラムをサブルーチンコール C 現在のPCからユーザルーチンのサブルーチンコール C <アドレス> PCアドレスを指定してユーザルーチンのサブルーチンコール |
D | Display | メモリ内容を16進数とASCIIで表示 D <開始アドレス> 16アドレス分表示 D <開始アドレス> <終了アドレス> 開始アドレス~終了アドレスを表示 |
E | Encode | インデックスアドレッシングのポストバイト計算 E ,Y Yレジスタのゼロオフセット E [HHHH,PCR] 間接の2バイトPCRオフセット E H,U Uレジスタからの5バイトオフセット |
G | Go | プログラムの実行、再実行 G 現在のPC値から再実行 G <アドレス> アドレスからユーザルーチンを実行 |
L | Load | Sフォーマットファイルのメモリロード L Sフォーマットのアドレスにロード L <オフセット> Sフォーマットのアドレスにオフセットされたアドレスにロード |
M | Memory | メモリ内容の表示変更 M <アドレス> |
/ | Memory | 最後に参照したメモリ内容の表示、変更 / で最後にMコマンドで入力したアドレスの次からCRを入力するまで連続して入力 左辺は変更前の値 次のデータ入力はスペースキー |
N | Null | パディング(長さ整形)数の設定 ニューライン送出時のパディング数設定 |
O | Offset | 分岐のオフセット計算 O <アドレス1> <アドレス2> アドレス1からアドレス2に分岐するときのオフセット値計算 |
P | Punch | Sフォーマットでメモリ内容を出力 P <開始アドレス> <終了アドレス> |
R | Register | MPUレジスタの表示、変更 Rで入力モードに移行 対象レジスタ表示で値入力するとデータ反映 スペースで次のレジスタに移る。値を入力せずリターンでRコマンド終了 |
S | Stlevel | スタックトレースレベルの設定 S のみ 現在のプログラムのスタック値を設定 S <アドレス> トレース結果の表示を禁止するトレースレベル設定 |
T | Trace | 命令のトレース T <トレースステップ> 指定したトレースステップ分トレースして停止する。 PCは次に実行する命令のアドレスを指している |
. | Trace | 一つの命令のトレース トレース中にピリオド入力で1ステップだけ実行される |
V | Verify | テープとメモリ内容の比較 V のみはメモリオフセットゼロ V <オフセット> メモリオフセット分ずらしてメモリデータ照合 値が異なる部分は?を表示 |
W | Window | ウィンドウ値の設定 W <値> 式の中でWが出てきたときに引用される値 (デフォルトは$0000) |
ファンクションコール
ASSIST09実行中に使用できるファンクションコール
S1のファンクションコールと同じような感じ
必要なレジスタをセットして
SWI
FCB コード
などで必要な機能を利用できる
コード | 機能名 | 機能 | 処理名 |
0 | INCHNP | 入力ハンドラから1文字入力しAccAに代入 Bit7は無視される。$00(ヌル)も無視される | ZINCH |
1 | OUTCH | AccAの1文字を出力ハンドラに出力 | ZOTCH1 |
2 | PDATA1 | 文字列を出力ハンドラに出力 (デリミタは$04) | ZPDTA1 |
3 | PDATA | CR,LFと文字列を出力ハンドラに出力 | ZPDATA |
4 | OUT2HS | Xレジスタに示された1バイトを16進数で表示 | ZOT2HS |
5 | OUT4HS | Xレジスタに示された2バイトを16進数で表示 | ZOT4HS |
6 | PCRLF | CR,LFを出力ハンドラに出力 | ZPCRLF |
7 | SPACE | スペース$20)を出力ハンドラに出力 | ZSPACE |
8 | MONITOR | ASSIST09に入る | ZMONTR |
9 | VCTRSW | ベクタテーブルの値出力と交換 | ZVSWTH |
10 | BRKPT | レジスタの内容を表示しASSIST09のコマンドハンドラに制御が移る | ZBKPNT |
11 | PAUSE | 処理を中断し一時停止状態にする。CANCEL状態のチェック | ZPAUSE |
ベクタスワップコード
コード | エントリ名 | 対応するルーチンやパラメータのラベル名 | 内容 |
0 | .AVTBL | VECTAB | ベクターテーブル |
2 | .CMDL1 | CMDTBL | コマンドリスト No.1 |
4 | .RSVD | RSRVDR | 割込み 予備 |
6 | .SWI3 | SWI3R | 割込み SWI3 |
8 | .SWI2 | SWI2R | 割込み SWI2 |
10 | .FIRQ | FIRQR | 割込み FIRQ |
12 | .IRQ | IRQR | 割込み IRQ |
14 | .SWI | SWIR | 割込み SWI |
16 | .NMI | NMIR | 割込み NMI |
18 | .RESET | RESET | リセット |
20 | .CION | CION | 入力機器イニシャライズ |
22 | .CIDTA | CIDTA | 1文字入力 |
24 | .CIOFF | CIOFF | 入力機器終了処理 |
26 | .COON | COON | 出力機器イニシャライズ |
28 | .CODTA | CODTA | 1文字出力 |
30 | .COOFF | COOFF | 出力機器終了処理 |
32 | .HSDTA | HSDTA | 文字列出力 |
34 | .BSON | BSON | パンチ/ロード機器イニシャライズ |
36 | .BSDTA | BSDTA | パンチ/ロードベリファイ実行 |
38 | .BSOFF | BSOFF | パンチ/ロード機器の終了処理 |
40 | .PAUSE | PAUSER | 一時停止 |
42 | .EXPAN | EXP1 | 式の入力、処理 |
44 | .CMDL2 | CMDTB2 | コマンドリスト No.2 |
46 | .ACIA | ACIA | ACIAのI/Oアドレス |
48 | .PAD | DFTCHP | パディング数 |
50 | .ECHO | ECHO | エコーバックのオン/オフ |
52 | .PTM | PTM | PTMのI/Oアドレス |
メモリマップ
ASSIST09デフォルトのメモリマップとレベル3拡張ROM(IC2用)、DISKBASIC用のメモリマップです
正しいかどうかは不明ですが実機でもL3エミュレータでも動作OKです^^
デフォルト | L3-ROM | L3-DISKBASIC (40K版) | 用途 | イニシャライズで設定 されるエリア※ |
↑ $DF50 | ↑ $7F50 | ↑ $6750 | ↑ スタック | RAM |
$DF51 | $7F51~ | $6751~ | TSTACK テンポラリ・スタック (21Byte) | RAM |
$DF66 | $7F66~ | $6766~ | ROM2WK ユーザROM用ワーク領域 (40Byte) | RAM |
$DF8E | $7F8E | $678E | DELIM | RAM |
$DF8F | $7F8F | $678F | MISFLG | RAM |
$DF90 | $7F90 | $6790 | SWICNT | RAM |
$DF91 | $7F91~ | $6791~ | TRACEC | RAM |
$DF93 | $7F93~ | $6793~ | PCNTER | RAM |
$DF95 | $7F95~ | $6795~ | PSTACK | RAM |
$DF97 | $7F97~ | $6797~ | RSTACK | RAM |
$DF99 | $7F99~ | $6799~ | LASTOP | RAM |
$DF9B | $7F9B~ | $679B~ | NUMBER | RAM |
$DF9D | $7F9D | $679D | BASEPG | RAM |
$DF9E | $7F9E | $679E | ADDRESS POINTER | RAM |
$DFA0 | $7FA0~ | $67A0~ | WINDOW | RAM |
$DFA2 | $7FA2~ | $67A2~ | BKPTOP | RAM |
$DFB2 | $7FB2~ | $67B2~ | BKPTBL | RAM |
$DFF2 | $7FF2~ | $67C2~ | VECTAB | RAM |
$DFF8 | $7FF8~ | $67F8~ | SLEVEL | RAM ※ |
$DFFA | $7FFA | $67FA | BKPTCT | RAM ※ |
$DFFB | $7FFB | $67FB | SWIBFL | RAM ※ |
$DFFC~ $DFFF | $7FFC~ $7FFF | $67FC~ $67FF | PAUSEルーチン ←RAM開始 | RAM ※ |
なし | $8000 $97FF | $7000 $7FFF | ユーザROM | ROM |
$F800 $FFFF | $9800 $9FFF | $8000 $87FF | ASSIST09本体 | ROM |
ご無沙汰しています。
私も最近は自作6809/6802ボードをいじる機会が増え、プログラムのデバッグのためにASSIST09を使うことが多くなりました。何といっても複数ブレークポイントとトレースコマンドが最強ですね。
ただ、Windows上でプログラムを修正しては読み込ませてデバッグという繰り返しではLコマンドは遅くて実用にはなりません。(以前LOAD, SAVEという拡張コマンドを追加し、自分のブログで紹介してあったのにそれを全く忘れていて、最初のうちはLコマンドを使いながらイラついていました。年ですね…)
ご無沙汰しております^^
当初、L3用ASSISIST09にもyu-yamaさんのslwin用のLOAD,SAVEコマンドを拡張しようと思っていたのですがACIAが1系統しかなくASSIST09のI/OハンドラとACIAを切り替える方法が分からずに挫折していました。
最近は、色々教えて頂いてI/Oハンドラが切替できるようになったのでslwin用のLOAD,SAVEコマンドの拡張も予定しています。
yu-yamaさんの6809ボード用のLOAD,SAVEコマンドは6850用なので、そのまま実装させて頂く予定です^^
そのほかFD用のセクタ読書きコマンドも拡張予定です
でも、いつになることやらわかりません・・・^^;;;