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