復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第91回]
●ファンクションコール1CH、1DH(ライトプロテクトセットとR/Oベクトルの取り出し)
ファンクションコール1CHはカレントドライブにライトプロテクトをかけてリードオンリーにします。
R/Oベクトルは前回のログインベクトルと同じ形式で、16ビットの値のうち、リードオンリーになっているドライブに相当するビットを1にしたものです。
ファンクションコール1DHはR/OベクトルをHLレジスタに入れて戻ります。
ファンクションコール1CHをテストするFTST11と、ファンクションコール1DHをテストするFTST12を作成します。
まずはFTST11.TXTのソースリストです。
; BDOS TEST11 set 'read only ' function1C ;2012/4/10 ; ORG $8100 FCALL=$8005 ; LD C,1C CALL FCALL RET ; |
2012/4/10 11:19 ftst11.txt END=8105 ; BDOS TEST11 set 'read only ' function1C ;2012/4/10 ; ORG $8100 FCALL=$8005 ; 8100 0E1C LD C,1C 8102 CD0580 CALL FCALL 8105 C9 RET ; FCALL =8005 |
; BDOS TEST12 get r/o vector function1D ;2012/4/10 ; ORG $8100 FCALL=$8005 FCB=$805C ; LD C,1D CALL FCALL CALL HEX4DP ; ;CL & LF CRLF:LD A,0D CALL ADP LD A,0A JP ADP ;space disp SPDP:LD A,20 ;A disp ADP:PUSH BC PUSH HL LD E,A LD C,02 CALL FCALL POP HL POP BC RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE B2HEX4:LD A,H CALL B2HEX2 EX DE,HL LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE B2HEX2:PUSH AF RRCA RRCA RRCA RRCA CALL B2HEX1 LD D,A POP AF CALL B2HEX1 LD E,A RET ;binary to hex, low 4bit to ascii 1charactor B2HEX1:AND 0F ADD A,30 CP 3A RET C;0-9 ADD A,07;A-F RET ;hex to binary, ascii 1charactor to low 4bit HTOB1:CP 30;>="0"? RET C;no CP 3A;<="9"? JP C,HTOB1_2;yes,"0" to "9" CP 41;>="A" ? RET C;no CP 47;<="F"? JP C,HTOB1_1 CP 61;>="a"? RET C;no CP 67;<="f"? CCF RET C;no HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F HTOB1_2:AND 0F RET ;HL(bynary 2bytes) to asckii 4bytes & disp HEX4DP:PUSH BC PUSH HL CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes PUSH DE EX DE,HL CALL DEDP POP DE CALL DEDP POP HL POP BC RET ;A(binary) to asckii 2bytes HEX & disp B2HEXDP:PUSH BC PUSH HL CALL B2HEX2 CALL DEDP POP HL POP BC RET ; ;DE(asckii 2bytes) disp DEDP:PUSH DE LD E,D LD C,02 CALL FCALL POP DE LD C,02 CALL FCALL RET ; |
2012/4/10 11:19 ftst12.txt END=8183 ; BDOS TEST12 get r/o vector function1D ;2012/4/10 ; ORG $8100 FCALL=$8005 FCB=$805C ; 8100 0E1D LD C,1D 8102 CD0580 CALL FCALL 8105 CD5A81 CALL HEX4DP ; ;CL & LF 8108 3E0D CRLF:LD A,0D 810A CD1481 CALL ADP 810D 3E0A LD A,0A 810F C31481 JP ADP ;space disp 8112 3E20 SPDP:LD A,20 ;A disp 8114 C5 ADP:PUSH BC 8115 E5 PUSH HL 8116 5F LD E,A 8117 0E02 LD C,02 8119 CD0580 CALL FCALL 811C E1 POP HL 811D C1 POP BC 811E C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 811F 7C B2HEX4:LD A,H 8120 CD2581 CALL B2HEX2 8123 EB EX DE,HL 8124 7B LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 8125 F5 B2HEX2:PUSH AF 8126 0F RRCA 8127 0F RRCA 8128 0F RRCA 8129 0F RRCA 812A CD3481 CALL B2HEX1 812D 57 LD D,A 812E F1 POP AF 812F CD3481 CALL B2HEX1 8132 5F LD E,A 8133 C9 RET ;binary to hex, low 4bit to ascii 1charactor 8134 E60F B2HEX1:AND 0F 8136 C630 ADD A,30 8138 FE3A CP 3A 813A D8 RET C;0-9 813B C607 ADD A,07;A-F 813D C9 RET ;hex to binary, ascii 1charactor to low 4bit 813E FE30 HTOB1:CP 30;>="0"? 8140 D8 RET C;no 8141 FE3A CP 3A;<="9"? 8143 DA5781 JP C,HTOB1_2;yes,"0" to "9" 8146 FE41 CP 41;>="A" ? 8148 D8 RET C;no 8149 FE47 CP 47;<="F"? 814B DA5581 JP C,HTOB1_1 814E FE61 CP 61;>="a"? 8150 D8 RET C;no 8151 FE67 CP 67;<="f"? 8153 3F CCF 8154 D8 RET C;no 8155 C609 HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F 8157 E60F HTOB1_2:AND 0F 8159 C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 815A C5 HEX4DP:PUSH BC 815B E5 PUSH HL 815C CD1F81 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 815F D5 PUSH DE 8160 EB EX DE,HL 8161 CD7681 CALL DEDP 8164 D1 POP DE 8165 CD7681 CALL DEDP 8168 E1 POP HL 8169 C1 POP BC 816A C9 RET ;A(binary) to asckii 2bytes HEX & disp 816B C5 B2HEXDP:PUSH BC 816C E5 PUSH HL 816D CD2581 CALL B2HEX2 8170 CD7681 CALL DEDP 8173 E1 POP HL 8174 C1 POP BC 8175 C9 RET ; ;DE(asckii 2bytes) disp 8176 D5 DEDP:PUSH DE 8177 5A LD E,D 8178 0E02 LD C,02 817A CD0580 CALL FCALL 817D D1 POP DE 817E 0E02 LD C,02 8180 CD0580 CALL FCALL 8183 C9 RET ; ADP =8114 B2HEX1 =8134 B2HEX2 =8125 B2HEX4 =811F B2HEXDP =816B CRLF =8108 DEDP =8176 FCALL =8005 FCB =805C HEX4DP =815A HTOB1 =813E HTOB1_1 =8155 HTOB1_2 =8157 SPDP =8112 |
logfile nd80zlog\04101124.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst11.bin,8100 loading FTST11.BIN ...0006(6)bytes loaded,from 8100 to 8105 >jp d233 a>save 1 ftst11.com a>^D end of CP/M >/ld ftst12.bin,8100 loading FTST12.BIN ...0084(132)bytes loaded,from 8100 to 8183 >jp d233 a>save 1 ftst12.com a>dir A: FNC0E-1 COM : FTST10 COM : FTST10-2 COM : FTST10-4 COM A: FTST10-5 COM : FTST11 COM : FTST12 COM a> |
a>ftst12 0000 a>ftst11 a>ftst12 0001 a>save 1 test.txt Bdos Err On A: R/O a>b: b>a:ftst11 b>a:ftst12 0002 b> |
a>ftst12 0000 a>ftst11 a>ftst12 0001 a>b: b>a:ftst11 b>a:ftst12 0003 b>^D end of CP/M >0000 00C3 - リモート接続を終了しました logfile closed at Tue Apr 10 12:32:55 2012 |