2012.2.20
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第39回]

●ファンクションコールを試す(1)

まだ仮システムですけれど、せっかくCP/Mが動き出したからには、さっそく何か試してみたくなります。
CP/Mにはファンクションコール(システムコールとも言います)という機能があります。
Cレジスタにコールbセットして、システムをコールする(アドレス0005Hをコールする)ことで、さまざまな処理を行なうことができます。
すでに何回か説明をしていますが、本来は0005Hをコールするのですが、まだメモリ増設基板を接続していない状態でのテストですから、0005Hの代わりに8005Hをコールします。

どのような種類のものがあるかについては、少しずつ整理しながら説明をしていくつもりですが、とりあえず、まずは手始めにファンクションコール 1 とファンクションコール 2 を使ってみることにします。

ファンクションコール 1 は、コンソール入力です。

コンソールというのはキーボードとディスプレイを備えた端末装置ですが、ND80ZVにインストールするCP/Mシステムでは、コンソールはND80ZVとUSB接続したWindowsパソコンのキーボードとDOSプロンプト画面になります。

Cレジスタに01をセットしてシステムをコールすると、キー入力した文字コードがAレジスタに入ってリターンします。
同時に画面にエコー表示が行なわれます。
実際にキー入力されるまでリターンせずに待っています。

ファンクションコール 2 は、コンソール出力です。
Eレジスタに出力したい文字コードをセットして、Cレジスタに02をセットしてシステムをコールすると、画面にその文字が表示されます。

テストプログラムです。

; BDOS function 1 & 2 test
;
     ORG $8100
     FCALL=$8005
;
LOOP:LD E,3F;?
        LD C,02
        CALL FCALL          
        LD C,01
        CALL FCALL
        CP 1A;^z?
        RET Z
        PUSH AF
        LD E,3D;=
        LD C,02
        CALL FCALL
        POP AF
        LD D,A
        CALL HEX1
        LD E,A
        LD A,D
        RRCA
        RRCA
        RRCA
        RRCA
        CALL HEX1
        PUSH DE
        LD E,A
        LD C,02
        CALL FCALL
        POP DE
        LD C,02
        CALL FCALL
        LD E,0D
        LD C,02
        CALL FCALL
        LD E,0A
        LD C,02
        CALL FCALL
        JP LOOP
HEX1:AND 0F
        ADD A,30
        CP 3A
        RET C;0-9
        ADD A,07;A-F
        RET     
;

説明に入ったばかりですが、本日は時間がなくなってしまいました。
いきなりちょっと長いプログラムですが、何をやっているのか、次回までに考えてみてください。

ワンボードマイコンでCP/Mを![第39回]
2012.2.20upload

前へ
次へ
ホームページトップへ戻る