復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第61回]
●ファンクションコール一覧表について
前回のファンクションコール一覧表を昨日UPした段階では、ファンクションコールのうちのいくつかは「ピンク」で着色していました。
CP/Mが一般に使われていた当時とは周辺装置が全く異なっていますから、今更テープパンチャーでもあるまい、ということでそのようなものを対象としたファンクションコールなどについては扱わないことにするつもりでした。
しかし本日になって、ちょいと考え直しました。
それは確かにそうだけれども、たとえばI/Oデバイスとして232Cは今でも使えるわけですから、とにかくまずはやれるだけのことはやってみてから、最終的に判断することにしてもよいのでは、と考えたからです。
そこで本日になってから、昨日UPした表に手を加えて、「ピンク」に着色したもののうち、ほとんどを無地に戻しました。
テストをするファンクションコールが増えてしまいますが、これからオリジナルのCP/Mを作成する作業をしていくことになりますから、その前準備として、できるだけCP/Mの振舞いについて知っておくことは決して無駄ではないと思います。
ということで、ファンクションコール一覧表の中から、手っ取り早く試すことのできそうなものを選んで、つぶしていくことにいたします。
●IOバイトとバージョンaiファンクションコール07H、0CH)
手始めにファンクションコール07H(IOバイトの取り出し)とファンクションコール0CH(バージョンbフ取り出し)のテストプログラムを作りました。
ソースプログラムリストです。
; BDOS TEST7 get IOBYTE & version No. ;2012/3/15 ; ORG $8100 FCALL=$8005 ; ;IOBYTE LD C,07;get iobyte CALL FCALL PUSH AF LD DE,IOBYTE LD C,09;string out CALL FCALL POP AF CALL B2HEXDP CALL CRLF ;version no. LD C,0C;version no. get CALL FCALL PUSH HL LD DE,VERNO LD C,09;string out CALL FCALL POP HL CALL HEX4DP RET ; ;CL & LF CRLF:LD A,0D CALL ADP LD A,0A JP ADP ;space disp SPDP:LD A,20 ;A disp ADP:PUSH BC PUSH HL LD E,A LD C,02 CALL FCALL POP HL POP BC RET ;HL(bynary 2bytes) to asckii 4bytes & disp HEX4DP:PUSH BC PUSH HL CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes PUSH DE EX DE,HL CALL DEDP POP DE CALL DEDP POP HL POP BC RET ;A(binary) to asckii 2bytes HEX & disp B2HEXDP:PUSH BC PUSH HL CALL B2HEX2 CALL DEDP POP HL POP BC RET ; ;DE(asckii 2bytes) disp DEDP:PUSH DE LD E,D LD C,02 CALL FCALL POP DE LD C,02 CALL FCALL RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE B2HEX4:LD A,H CALL B2HEX2 EX DE,HL LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE B2HEX2:PUSH AF RRCA RRCA RRCA RRCA CALL B2HEX1 LD D,A POP AF CALL B2HEX1 LD E,A RET ;binary to hex, low 4bit to ascii 1charactor B2HEX1:AND 0F ADD A,30 CP 3A RET C;0-9 ADD A,07;A-F RET ; IOBYTE:"ioby" "te" DB 3D;= DB 24;$ VERNO:"vers" "ion " "HL" DB 3D DB 24;$ ; |