MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第127回]
●ファンクション24
ファンクション24については「ワンボードマイコンでCP/Mを!」[第233回]で説明をしています。
ちょっとどう使うのかよくわからないファンクションだと書いています。
実はそれ以前に、「ワンボードマイコンでCP/Mを!」[第111回]〜「ワンボードマイコンでCP/Mを!」[第113回]で最初のテストを行なっています。
「ワンボードマイコンでCP/Mを!」[第233回]では結局「ワンボードマイコンでCP/Mを!」[第111回]と同じことをやって確かめているようです。
そのあと都合3回にわたってテストをしていますが、最初はまずテストプログラムVFTST23を作って、シーケンシャルファイルTEST.SAFを作成しています。
で、いつものようにテストプログラムVFTST23のソースプログラムをインテルニーモニックに書き直してMFTST23を作りました。
●テストプログラムMFTST23
MFTST23のソースプログラムです。
; BDOS VFTST23 sequential file make
;ftom ftst5cpy.txt
;2012/3/4 3/7
;2012/4/30
;10/17
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
DMA=$0080
;
MVI C,16;make file
LXI D,FCB
CALL FCALL
INR A;if FFH?
JZ DFULERR
;
XRA A
STA RECNO
LXI B,$0000
;
LOOP:MVI E,40
LXI H,DMA
LOOP1:MOV M,C
INX H
MOV M,B
INX H
DCR E
JNZ LOOP1
PUSH B
PUSH D
MVI C,15;write
LXI D,FCB
CALL FCALL
INR A;if FFH?
POP D
POP B
JZ DFULERR
INX B
MOV A,B
CPI 02
JNZ LOOP
;
CLOSE:MVI C,10;close
LXI D,FCB
CALL FCALL
INR A;if FFH?
JZ CLOSERR
LXI D,OK
JMP MSGOUT
;
DFULERR:LXI D,DFULL
JMP MSGOUT
CLOSERR:LXI D,CANTCLS
MSGOUT:MVI C,09
CALL FCALL
RET
;
DFULL:"disk"
" ful"
"l!"
DB 0D
DB 0A
DB 24;$
CANTCLS:"can'"
"t cl"
"ose!"
DB 0D
DB 0A
DB 24;$
OK:"done"
DB 0D
DB 0A
DB 24;$
;
|
2015/2/3 15:12 mftst23.txt
END=017A
; BDOS VFTST23 sequential file make
;ftom ftst5cpy.txt
;2012/3/4 3/7
;2012/4/30
;10/17
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
DMA=$0080
;
0100 0E16 MVI C,16;make file
0102 115C00 LXI D,FCB
0105 CD0500 CALL FCALL
0108 3C INR A;if FFH?
0109 CA4901 JZ DFULERR
;
010C AF XRA A
010D 327C00 STA RECNO
0110 010000 LXI B,$0000
;
0113 1E40 LOOP:MVI E,40
0115 218000 LXI H,DMA
0118 71 LOOP1:MOV M,C
0119 23 INX H
011A 70 MOV M,B
011B 23 INX H
011C 1D DCR E
011D C21801 JNZ LOOP1
0120 C5 PUSH B
0121 D5 PUSH D
0122 0E15 MVI C,15;write
0124 115C00 LXI D,FCB
0127 CD0500 CALL FCALL
012A 3C INR A;if FFH?
012B D1 POP D
012C C1 POP B
012D CA4901 JZ DFULERR
0130 03 INX B
0131 78 MOV A,B
0132 FE02 CPI 02
0134 C21301 JNZ LOOP
;
0137 0E10 CLOSE:MVI C,10;close
0139 115C00 LXI D,FCB
013C CD0500 CALL FCALL
013F 3C INR A;if FFH?
0140 CA4F01 JZ CLOSERR
0143 117401 LXI D,OK
0146 C35201 JMP MSGOUT
;
0149 115801 DFULERR:LXI D,DFULL
014C C35201 JMP MSGOUT
014F 116501 CLOSERR:LXI D,CANTCLS
0152 0E09 MSGOUT:MVI C,09
0154 CD0500 CALL FCALL
0157 C9 RET
;
0158 6469736B DFULL:"disk"
015C 2066756C " ful"
0160 6C21 "l!"
0162 0D DB 0D
0163 0A DB 0A
0164 24 DB 24;$
0165 63616E27 CANTCLS:"can'"
0169 7420636C "t cl"
016D 6F736521 "ose!"
0171 0D DB 0D
0172 0A DB 0A
0173 24 DB 24;$
0174 646F6E65 OK:"done"
0178 0D DB 0D
0179 0A DB 0A
017A 24 DB 24;$
;
CANTCLS =0165 CLOSE =0137 CLOSERR =014F
DFULERR =0149 DFULL =0158 DMA =0080
FCALL =0005 FCB =005C LOOP =0113
LOOP1 =0118 MSGOUT =0152 OK =0174
RECNO =007C
|




