現在地

コンソールドライバ

新たなデバイスを使ってコンソールを接続するためには以下の手順でドライバを作成します。

  1. dev/dev_YYYY.asmを作成

    これがドライバ本体です。使用しているアセンブラASには分割アセンブル・リンクの機能が無いのでモニタ本体にINCLUDEされてアセンブルされます。

    以下のルーチンが必要です。

    1. INIT

      デバイスを初期化します。引数・戻値はありません。

      UniMon 備考
      6800
      6809
      8080
      Z80
      Z8
      6502
      TLCS90
      SCMP ※1
      MN1610
      TMS9900
      8086
      8051
      F8
    2. 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はスクラッチパッドのアドレス
    3. 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はスクラッチパッドのアドレス
    4. 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を作るようなことをしなければ必要ないと考えていますが、そのうち何らかの方法は用意したいなとは思います。

  2. 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の引数が定数である必要があるのでやむを得ません。

  3. 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"にするとビルドは失敗します。