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 |