復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第51回]
●ND80ZVをご紹介していただきました
ND80ZV組立キットをご購入いただいたお客様が、ホームページでND80ZV組立キットをご紹介してくださいました。
製作の過程を写真でご紹介していただき、「価格、内容共に最高峰といえるキット」とのお褒めの言葉をいただきました。
ご紹介いただきましたのは、こちらのホームページです。
[2012.7.30注記]
ご紹介させていただいたホームページは、その後URLが変更になったようです。
現在はこちらのページでご紹介いただいています。[注記 ここまで]
SINTA様。有難うございました。
今後ともよろしくお願いいたします。
●COPYプログラム
前回はファンクションコール0FH(ファイルオープン)と同14H(シーケンシャルファイルリード)を使ったプログラムをご紹介しました。
ファイルリードのあとは、当然ファイルライトということになります。
今回は、ファイルオープン、ファイルリードに加えて、新規ファイル作成とファイルライト、クローズについてのテストプログラムを作成します。
MSDOSにはファイルコピーコマンドとして、その名の通りのCOPYコマンドがありますが、CP/MにはCOPYコマンドはありません。
CP/MではI/O装置間のファイル転送コマンドとしてPIPというコマンドを使います。
そのPIPコマンドを使ってディスク間のファイルコピーも行ないます。
しかしいまどきPIPなどという馴染みの無いコマンドを持ってくるのもいかがなものかと思いますので、MSDOSにならってCOPYコマンドの機能をトランジェントプログラムとして作ってみました。
COPYプログラムのソースリストです。
; BDOS TEST5 COPY
;2012/3/4
;
ORG $8100
FCALL=$8005
FCBWK=$803B
RECNO2=$805B
FCB=$805C
FCB2=$806C
RECNO=$807C
DMA=$8080
;
LD HL,FCB2
LD DE,FCBWK
LD B,0C;=12
LOOP1:LD A,(HL)
LD (DE),A
INC HL
INC DE
DEC B
JP NZ,LOOP1
;
LD C,0F;open
LD DE,FCB
CALL FCALL
INC A;if FFH?
JP Z,NOFILERR
;
LD C,13;delete
LD DE,FCBWK
CALL FCALL
;
LD C,16;make file
LD DE,FCBWK
CALL FCALL
INC A;if FFH?
JP Z,DFULERR
;
XOR A
LD (RECNO),A
LD (RECNO2),A
;
LOOP2: LD C,14;read
LD DE,FCB
CALL FCALL
OR A
JP NZ,CLOSE;read end
LD C,15;write
LD DE,FCBWK
CALL FCALL
INC A;if FFH?
JP Z,DFULERR
JP LOOP2
;
CLOSE:LD C,10;close
LD DE,FCBWK
CALL FCALL
INC A;if FFH?
JP Z,CLOSERR
LD DE,OK
JP MSGOUT
;
NOFILERR:LD DE,CANTOPN
JP MSGOUT
DFULERR:LD DE,DFULL
JP MSGOUT
CLOSERR:LD DE,CANTCLS
MSGOUT:LD C,09
CALL FCALL
RET
;
CANTOPN:"can'"
"t op"
"en!"
DB 0D
DB 0A
DB 24;$
DFULL:"disk"
" ful"
"l!"
DB 0D
DB 0A
DB 24;$
CANTCLS:"can'"
"t cl"
"ose!"
DB 0D
DB 0A
DB 24;$
OK:"copy"
" don"
"e"
DB 0D
DB 0A
DB 24;$
;
|
2012/3/5 8:25 ftst5cpy.txt
END=81AE
; BDOS TEST5 COPY
;2012/3/4
;
ORG $8100
FCALL=$8005
FCBWK=$803B
RECNO2=$805B
FCB=$805C
FCB2=$806C
RECNO=$807C
DMA=$8080
;
8100 216C80 LD HL,FCB2
8103 113B80 LD DE,FCBWK
8106 060C LD B,0C;=12
8108 7E LOOP1:LD A,(HL)
8109 12 LD (DE),A
810A 23 INC HL
810B 13 INC DE
810C 05 DEC B
810D C20881 JP NZ,LOOP1
;
8110 0E0F LD C,0F;open
8112 115C80 LD DE,FCB
8115 CD0580 CALL FCALL
8118 3C INC A;if FFH?
8119 CA6481 JP Z,NOFILERR
;
811C 0E13 LD C,13;delete
811E 113B80 LD DE,FCBWK
8121 CD0580 CALL FCALL
;
8124 0E16 LD C,16;make file
8126 113B80 LD DE,FCBWK
8129 CD0580 CALL FCALL
812C 3C INC A;if FFH?
812D CA6A81 JP Z,DFULERR
;
8130 AF XOR A
8131 327C80 LD (RECNO),A
8134 325B80 LD (RECNO2),A
;
8137 0E14 LOOP2: LD C,14;read
8139 115C80 LD DE,FCB
813C CD0580 CALL FCALL
813F B7 OR A
8140 C25281 JP NZ,CLOSE;read end
8143 0E15 LD C,15;write
8145 113B80 LD DE,FCBWK
8148 CD0580 CALL FCALL
814B 3C INC A;if FFH?
814C CA6A81 JP Z,DFULERR
814F C33781 JP LOOP2
;
8152 0E10 CLOSE:LD C,10;close
8154 113B80 LD DE,FCBWK
8157 CD0580 CALL FCALL
815A 3C INC A;if FFH?
815B CA7081 JP Z,CLOSERR
815E 11A381 LD DE,OK
8161 C37381 JP MSGOUT
;
8164 117981 NOFILERR:LD DE,CANTOPN
8167 C37381 JP MSGOUT
816A 118781 DFULERR:LD DE,DFULL
816D C37381 JP MSGOUT
8170 119481 CLOSERR:LD DE,CANTCLS
8173 0E09 MSGOUT:LD C,09
8175 CD0580 CALL FCALL
8178 C9 RET
;
8179 63616E27 CANTOPN:"can'"
817D 74206F70 "t op"
8181 656E21 "en!"
8184 0D DB 0D
8185 0A DB 0A
8186 24 DB 24;$
8187 6469736B DFULL:"disk"
818B 2066756C " ful"
818F 6C21 "l!"
8191 0D DB 0D
8192 0A DB 0A
8193 24 DB 24;$
8194 63616E27 CANTCLS:"can'"
8198 7420636C "t cl"
819C 6F736521 "ose!"
81A0 0D DB 0D
81A1 0A DB 0A
81A2 24 DB 24;$
81A3 636F7079 OK:"copy"
81A7 20646F6E " don"
81AB 65 "e"
81AC 0D DB 0D
81AD 0A DB 0A
81AE 24 DB 24;$
;
CANTCLS =8194 CANTOPN =8179 CLOSE =8152
CLOSERR =8170 DFULERR =816A DFULL =8187
DMA =8080 FCALL =8005 FCB =805C
FCB2 =806C FCBWK =803B LOOP1 =8108
LOOP2 =8137 MSGOUT =8173 NOFILERR =8164
OK =81A3 RECNO =807C RECNO2 =805B
|