復活!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;$
;
|