2015.1.30

前へ
次へ
ホームページトップへ戻る

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;$
;

下はMFTST5のアセンブルリストです。

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  

●MFTST5の実行

「ワンボードマイコンでCP/Mを!」[第201回]と同じテストをしました。
前回のテストのすぐあとで今回のテストに入りました。
DIRでZドライブの内容を表示させましたがMFTST5.COMがありません。

実は前回のテスト後にMFTST5.COMを作成してZドライブにコピーしたのですが、CP/M互換DOSモードの実行中にWindowsで行なったZドライブへのファイルのコピー作業は一旦CP/M互換DOSを終了して再度エントリしなければDIRに反映されません。
そこでZB3を入力して一旦CP/M互換DOSからZB3BASICに戻りました。

あらためて/CPMコマンドでCP/M互換DOSにエントリしました。

今度はZドライブにMFTST5.COMが認められました。

MFTST5の実行に先立って、まずAドライブの現在の内容をDIRで確認しました。

そのあと
Z:MFTST5 MFTST4−1.TXT TESTDAT2.TXT
を実行しました。
AドライブにあるMFTST4−1.TXTがTESTDAT2.TXTという名前で同じAドライブにコピーされたはずです。
もう一度DIRコマンドでAドライブの中身を表示させたところ、TESTDAT2.TXTが確認できました。
念のため、TYPEコマンドでTESTDAT2.TXTの中身を表示させてみることにしました。

TESTDAT2.TXTの中身がMFTST4−1.TXTと同じであることが確認できました(MFTST4−1.TXTは前回作成したMFTST4.TXTと同じです)。


MYCPU80でCP/Mを![第116回]
2015.1.30upload

前へ
次へ
ホームページトップへ戻る