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 |