復活!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
前へ
次へ
ホームページトップへ戻る