復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第122回]
●ファンクションコール01
今回はDOSの構造などについて書くつもりだったのですが、ファンクションコールのテストを開始したところ、さっそくネタがみつかってしまいましたので、急遽変更です。
とりあえずビルトインコマンドが動くところまできましたので、次はいよいよファンクションコールの攻略です。
数あるファンクションコールの動作確認をどのように進めようかとしばらくあれこれ考えてみたのですが、過去2ヶ月近くの間CP/M2.2の動作確認のためファンクションコールのテストプログラムを作って試してきましたから、そのテストプログラムを試してきた順に、同じように試してみるのが一番無理がないだろうということになりました。
そこでまずは手始めに[第39回]で作りましたファンクションコール01および02のテストプログラムFTEST1.COMを、今回作りましたオリジナルDOSでも同じように動くかどうか、試してみることにいたしました。
ファンクションコール01(コンソール入力)など、試すまでもないこと、と思っていたのですけれど、やっぱり試してみるものですねえ。
あれま。
エコーがありません。
本当は ? の表示に a と入力したら、
まず入力文字がエコー表示されて、そのあと=61と表示される(?a=61)はずのところエコーが表示されませんから、?=61になってしまいました。
ファンクションコール01については、どういうプログラムを書いたのか、確認してみました。
; ;CONSOLE INPUT FCALL 01 ; CONIN:CALL B_CONIN RET |
; ;CONSOLE INPUT FCALL 01 ;if ctrl+D set cf ; CONIN:PUSH BC CALL B_CONIN LD B,A CP 0D JP Z,CONIN4 CP 0A JP Z,CONIN4 CP 09;TAB JP Z,CONIN4 CP 08;BS JP Z,CONIN4 CP 1B JP C,CONIN5;ctrl+ CP 20 JP C,CONIN4 LD C,A CONIN3:CALL B_CONOUT LD A,B CONIN4:POP BC OR A;rest carry flag RET ;ctrl+ CONIN5:LD C,5E;^ CALL B_CONOUT LD A,B ADD A,40 LD C,A CALL B_CONOUT LD A,B CP 04;ctrl+D JP NZ,CONIN4 POP BC SCF;ctrl+D RET |