新たなデバイスを使ってコンソールを接続するためには以下の手順でドライバを作成します。
dev/dev_YYYY.asm
を作成これがドライバ本体です。使用しているアセンブラASには分割アセンブル・リンクの機能が無いのでモニタ本体に
INCLUDE
されてアセンブルされます。以下のルーチンが必要です。
INIT
デバイスを初期化します。引数・戻値はありません。
UniMon 備考 6800 6809 8080 Z80 Z8 6502 TLCS90 SCMP ※1 MN1610 TMS9900 8086 8051 F8 CONIN
1文字入力を待ち、ASCIIコードを返します。引数はありません。
UniMon 戻値 壊せるREG 備考 6800 A 6809 A 8080 A Z80 A Z8 R0 6502 A TLCS90 A SCMP AC ※1 MN1610 R0 R1 TMS9900 R0 8086 AL 8051 A F8 00 DC1 00はスクラッチパッドのアドレス CONST
(オプション)入力がある(次の
CONIN
で待ちが発生しない)ならば0でない値を、入力が無ければ0を返します。引数はありません。実装が難しい場合は常に0を返しても構いません。その場合はD(ump)コマンドの中断ができなくなります。
UniMon 戻値 壊せるREG 備考 6800 A 6809 A 8080 A Z80 A Z8 R0 6502 A TLCS90 A SCMP AC ※1 MN1610 R0 R1 TMS9900 R0 8086 AL 8051 A F8 00 DC1 00はスクラッチパッドのアドレス CONOUT
渡されたASCIIコードの1文字を出力します。戻値はありません。
UniMon 引数 壊せるREG 備考 6800 A 6809 A 8080 A Z80 A Z8 R0 R1 6502 A TLCS90 A SCMP AC ※1 MN1610 R0 R1 TMS9900 R0 R1 8086 AL 8051 A F8 00 DC1 00はスクラッチパッドのアドレス
※1 SC/MPでは標準的なサブルーチン呼び出し方法がありません。Universal Monitorでは独自の方法で行っているので要注意です。詳細は
dev/dev_emily.asm
,scmp.inc
を参考にしてください。現状、ドライバの中でRAM領域を確保する簡単な方法はありません。割り込みを使ってFIFOを作るようなことをしなければ必要ないと考えていますが、そのうち何らかの方法は用意したいなとは思います。
unimon_XXXX.asm
に追加ドライバができたらそれを読み込むためのコードを
unimon_XXXX.asm
に追加する必要があります。IF USE_DEV_8251 INCLUDE "dev/unimon_dev_8251.asm" ENDIF IF USE_DEV_Z80SIO INCLUDE "dev/unimon_dev_z80sio.asm" ENDIF IF USE_DEV_Z280 INCLUDE "dev/unimon_dev_z280.asm" ENDIF
これはZ80用の
unimon_z80.asm
の一部ですが、同じように追加したドライバの読み込みを書いておきます。後述の
config.inc
にファイル名を記述して済ませたいところですが、使用しているアセンブラASの制約事項でINCLUDE
の引数が定数である必要があるのでやむを得ません。config.inc
に追加上の読み込みが有効になるように
config.inc
にも追加しておきます。;;; ;;; Zilog Z80 SIO ;;; USE_DEV_Z80SIO = 1 IF USE_DEV_Z80SIO SIOAD: equ 00H ; SIOAC: equ 01H ; SIOBD: equ 02H ; (Ch.B not supported) SIOBC: equ 03H ; (Ch.B not supported) ENDIF ;;; ;;; Intel 8251 ;;; USE_DEV_8251 = 0 IF USE_DEV_8251 USARTD: equ 00H ; Data Register USARTC: equ 01H ; Control / Status Register ENDIF ;;; ;;; Zilog Z280 (Internal) ;;; USE_DEV_Z280 = 0 IF USE_DEV_Z280 TCR1: EQU (19-1) ; bps = CLK(Xtal) / 8 / (TCR1+1) / 16 ENDIF
やはりZ80用のconfig.inc
の一部です。同様に新たなドライバを追加します。
USE_DEV_YYYY = 0/1
は一つのみ"1"にして、残りは"0"にしておきます。すべて"0"にしたり、複数を"1"にするとビルドは失敗します。