MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第116回]
●ファンクション10、13、15、16
ファンクション10はファイルクローズです。
ファンクション13はファイル削除です。
ファンクション15はシーケンシャルライトです。
ファンクション16は新規ファイル作成です。
上記のファンクションは「ワンボードマイコンでCP/Mを!」[第201回]でテストをしています。
テストプログラムはVFTST5です。
VFTST5はCOPYと同じ動作をします。
もとになったプログラムの説明は「ワンボードマイコンでCP/Mを!」[第51回]でしています。
いつものようにVFTST5のソースプログラムをインテルニーモニックに書き直してMFTST5を作りました。
●テストプログラムMFTST5
MFTST5のソースプログラムです。
; BDOS TEST5 COPY for RAM64KB
;2012/3/4 3/7 5/27
;6/13
;
ORG $0100
FCALL=$0005
FCBWK=$003B
RECNO2=$005B
FCB=$005C
FCB2=$006C
RECNO=$007C
DMA=$0080
;
LXI H,FCB2
LXI D,FCBWK
MVI B,11;=17
LOOP1:MOV A,M
STAX D
INX H
INX D
DCR B
JNZ LOOP1
;
MVI C,0F;open
LXI D,FCB
CALL FCALL
INR A;if FFH?
JZ NOFILERR
;
MVI C,13;delete
LXI D,FCBWK
CALL FCALL
;
MVI C,16;make file
LXI D,FCBWK
CALL FCALL
INR A;if FFH?
JZ DFULERR
;
XRA A
STA RECNO
STA RECNO2
;
LOOP2:MVI C,14;read
LXI D,FCB
CALL FCALL
ORA A
JNZ CLOSE;read end
MVI C,15;write
LXI D,FCBWK
CALL FCALL
ORA A; 5/27
JNZ DFULERR;5/27
JMP LOOP2
;
CLOSE:MVI C,10;close
LXI D,FCBWK
CALL FCALL
INR A;if FFH?
JZ CLOSERR
LXI D,OK
JMP MSGOUT
;
NOFILERR:LXI D,CANTOPN
JMP MSGOUT
DFULERR:LXI D,DFULL
JMP MSGOUT
CLOSERR:LXI D,CANTCLS
MSGOUT:MVI 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;$
;
|
2015/1/29 10:31 mftst5.txt
END=01AE
; BDOS TEST5 COPY for RAM64KB
;2012/3/4 3/7 5/27
;6/13
;
ORG $0100
FCALL=$0005
FCBWK=$003B
RECNO2=$005B
FCB=$005C
FCB2=$006C
RECNO=$007C
DMA=$0080
;
0100 216C00 LXI H,FCB2
0103 113B00 LXI D,FCBWK
0106 0611 MVI B,11;=17
0108 7E LOOP1:MOV A,M
0109 12 STAX D
010A 23 INX H
010B 13 INX D
010C 05 DCR B
010D C20801 JNZ LOOP1
;
0110 0E0F MVI C,0F;open
0112 115C00 LXI D,FCB
0115 CD0500 CALL FCALL
0118 3C INR A;if FFH?
0119 CA6401 JZ NOFILERR
;
011C 0E13 MVI C,13;delete
011E 113B00 LXI D,FCBWK
0121 CD0500 CALL FCALL
;
0124 0E16 MVI C,16;make file
0126 113B00 LXI D,FCBWK
0129 CD0500 CALL FCALL
012C 3C INR A;if FFH?
012D CA6A01 JZ DFULERR
;
0130 AF XRA A
0131 327C00 STA RECNO
0134 325B00 STA RECNO2
;
0137 0E14 LOOP2:MVI C,14;read
0139 115C00 LXI D,FCB
013C CD0500 CALL FCALL
013F B7 ORA A
0140 C25201 JNZ CLOSE;read end
0143 0E15 MVI C,15;write
0145 113B00 LXI D,FCBWK
0148 CD0500 CALL FCALL
014B B7 ORA A; 5/27
014C C26A01 JNZ DFULERR;5/27
014F C33701 JMP LOOP2
;
0152 0E10 CLOSE:MVI C,10;close
0154 113B00 LXI D,FCBWK
0157 CD0500 CALL FCALL
015A 3C INR A;if FFH?
015B CA7001 JZ CLOSERR
015E 11A301 LXI D,OK
0161 C37301 JMP MSGOUT
;
0164 117901 NOFILERR:LXI D,CANTOPN
0167 C37301 JMP MSGOUT
016A 118701 DFULERR:LXI D,DFULL
016D C37301 JMP MSGOUT
0170 119401 CLOSERR:LXI D,CANTCLS
0173 0E09 MSGOUT:MVI C,09
0175 CD0500 CALL FCALL
0178 C9 RET
;
0179 63616E27 CANTOPN:"can'"
017D 74206F70 "t op"
0181 656E21 "en!"
0184 0D DB 0D
0185 0A DB 0A
0186 24 DB 24;$
0187 6469736B DFULL:"disk"
018B 2066756C " ful"
018F 6C21 "l!"
0191 0D DB 0D
0192 0A DB 0A
0193 24 DB 24;$
0194 63616E27 CANTCLS:"can'"
0198 7420636C "t cl"
019C 6F736521 "ose!"
01A0 0D DB 0D
01A1 0A DB 0A
01A2 24 DB 24;$
01A3 636F7079 OK:"copy"
01A7 20646F6E " don"
01AB 65 "e"
01AC 0D DB 0D
01AD 0A DB 0A
01AE 24 DB 24;$
;
CANTCLS =0194 CANTOPN =0179 CLOSE =0152
CLOSERR =0170 DFULERR =016A DFULL =0187
DMA =0080 FCALL =0005 FCB =005C
FCB2 =006C FCBWK =003B LOOP1 =0108
LOOP2 =0137 MSGOUT =0173 NOFILERR =0164
OK =01A3 RECNO =007C RECNO2 =005B
|



