復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第90回]
●ファンクションコール18H、19H(ログインベクトルとログインディスクbフ取り出し)
ログインディスクという用語は今では一般的ではありません。
カレントディスク、カレントドライブと言うほうが適切だと思います。
a>
と表示されているときのAドライブがカレントドライブです。
ここで
a>b:[Enter]
と入力して
b>
と表示されたときから、カレントドライブはBドライブです。
それに対して、ログインベクトルはカレントベクトルと言い直してもしっくりきません。
CP/Mでは最大で16台のディスクドライブ装置を接続できます。
ドライブ名としてアルファベットのA〜Pが使われます。
そのA〜Pを16ビットの値のビット0からビット15に当てはめたものがログインベクトルです(下図)。
bit15 | |||||||||||||||
; BDOS TEST10 filename search function0e,11,12,18,19 ;2012/3/19 4/4 ; 4/7 4/9 dir disp ;4/10 func18,19 ; ORG $8100 FCALL=$8005 FCB=$805C DMA=$8080 ; LD HL,FCB INC HL LD A,(HL) CP 20;no fcb data JP NZ,LOOP LD B,0B;=11 LD A,3F;'?' FILL3F:LD (HL),A INC HL DEC B JP NZ,FILL3F LOOP:LD DE,INPMSG CALL MSGDP LD C,01 CALL FCALL CP 1A;^z RET Z CP 30 JP Z,DNOPASS AND 0F DEC A LD E,A LD C,0E CALL FCALL DNOPASS:CALL CRLF ; LD C,18 CALL FCALL CALL HEX4DP CALL CRLF LD C,19 CALL FCALL CALL B2HEXDP CALL CRLF ; LD C,11;first file search LD DE,FCB CALL FCALL CP FF JP Z,NOFILE ; LD HL,DMA LD DE,$0020 OR A;dirctory code 00-03 LOOP1: JP Z,NMDISP ADD HL,DE DEC A JP LOOP1 NMDISP:INC HL;pass drive no. LD B,08 NMDISP2:LD A,(HL) CP 20 JP Z,NMDISP3 CALL ADP NMDISP3:INC HL DEC B JP NZ,NMDISP2 LD A,2E;"." CALL ADP LD B,03 NMDISP4:LD A,(HL) CALL ADP INC HL DEC B JP NZ,NMDISP4 CALL CRLF ;next file search LD C,12;next file search LD DE,FCB CALL FCALL CP FF JP Z,END LD HL,DMA LD DE,$0020 OR A;dirctory code 00-03 NXTSRCH:JP Z,NMDISP ADD HL,DE DEC A JP NXTSRCH ; NOFILE:LD DE,NFMSG CALL MSGDP JP LOOP ; END:LD DE,ENDMSG CALL MSGDP JP LOOP ; MSGDP:LD C,09 CALL FCALL RET ; ;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 ; INPMSG:"drvn" "o." DB 3F;? DB 24;$ NFMSG:"not " "foun" "d" DB 0D DB 0A DB 24;$ ENDMSG:"end" DB 0D DB 0A DB 24;$ ; |
2012/4/10 10:48 ftst10-5.txt END=8252 ; BDOS TEST10 filename search function0e,11,12,18,19 ;2012/3/19 4/4 ; 4/7 4/9 dir disp ;4/10 func18,19 ; ORG $8100 FCALL=$8005 FCB=$805C DMA=$8080 ; 8100 215C80 LD HL,FCB 8103 23 INC HL 8104 7E LD A,(HL) 8105 FE20 CP 20;no fcb data 8107 C21481 JP NZ,LOOP 810A 060B LD B,0B;=11 810C 3E3F LD A,3F;'?' 810E 77 FILL3F:LD (HL),A 810F 23 INC HL 8110 05 DEC B 8111 C20E81 JP NZ,FILL3F 8114 113982 LOOP:LD DE,INPMSG 8117 CDB781 CALL MSGDP 811A 0E01 LD C,01 811C CD0580 CALL FCALL 811F FE1A CP 1A;^z 8121 C8 RET Z 8122 FE30 CP 30 8124 CA3081 JP Z,DNOPASS 8127 E60F AND 0F 8129 3D DEC A 812A 5F LD E,A 812B 0E0E LD C,0E 812D CD0580 CALL FCALL 8130 CDBD81 DNOPASS:CALL CRLF ; 8133 0E18 LD C,18 8135 CD0580 CALL FCALL 8138 CD0F82 CALL HEX4DP 813B CDBD81 CALL CRLF 813E 0E19 LD C,19 8140 CD0580 CALL FCALL 8143 CD2082 CALL B2HEXDP 8146 CDBD81 CALL CRLF ; 8149 0E11 LD C,11;first file search 814B 115C80 LD DE,FCB 814E CD0580 CALL FCALL 8151 FEFF CP FF 8153 CAA581 JP Z,NOFILE ; 8156 218080 LD HL,DMA 8159 112000 LD DE,$0020 815C B7 OR A;dirctory code 00-03 815D CA6581 LOOP1: JP Z,NMDISP 8160 19 ADD HL,DE 8161 3D DEC A 8162 C35D81 JP LOOP1 8165 23 NMDISP:INC HL;pass drive no. 8166 0608 LD B,08 8168 7E NMDISP2:LD A,(HL) 8169 FE20 CP 20 816B CA7181 JP Z,NMDISP3 816E CDC981 CALL ADP 8171 23 NMDISP3:INC HL 8172 05 DEC B 8173 C26881 JP NZ,NMDISP2 8176 3E2E LD A,2E;"." 8178 CDC981 CALL ADP 817B 0603 LD B,03 817D 7E NMDISP4:LD A,(HL) 817E CDC981 CALL ADP 8181 23 INC HL 8182 05 DEC B 8183 C27D81 JP NZ,NMDISP4 8186 CDBD81 CALL CRLF ;next file search 8189 0E12 LD C,12;next file search 818B 115C80 LD DE,FCB 818E CD0580 CALL FCALL 8191 FEFF CP FF 8193 CAAE81 JP Z,END 8196 218080 LD HL,DMA 8199 112000 LD DE,$0020 819C B7 OR A;dirctory code 00-03 819D CA6581 NXTSRCH:JP Z,NMDISP 81A0 19 ADD HL,DE 81A1 3D DEC A 81A2 C39D81 JP NXTSRCH ; 81A5 114182 NOFILE:LD DE,NFMSG 81A8 CDB781 CALL MSGDP 81AB C31481 JP LOOP ; 81AE 114D82 END:LD DE,ENDMSG 81B1 CDB781 CALL MSGDP 81B4 C31481 JP LOOP ; 81B7 0E09 MSGDP:LD C,09 81B9 CD0580 CALL FCALL 81BC C9 RET ; ;CL & LF 81BD 3E0D CRLF:LD A,0D 81BF CDC981 CALL ADP 81C2 3E0A LD A,0A 81C4 C3C981 JP ADP ;space disp 81C7 3E20 SPDP:LD A,20 ;A disp 81C9 C5 ADP:PUSH BC 81CA E5 PUSH HL 81CB 5F LD E,A 81CC 0E02 LD C,02 81CE CD0580 CALL FCALL 81D1 E1 POP HL 81D2 C1 POP BC 81D3 C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 81D4 7C B2HEX4:LD A,H 81D5 CDDA81 CALL B2HEX2 81D8 EB EX DE,HL 81D9 7B LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 81DA F5 B2HEX2:PUSH AF 81DB 0F RRCA 81DC 0F RRCA 81DD 0F RRCA 81DE 0F RRCA 81DF CDE981 CALL B2HEX1 81E2 57 LD D,A 81E3 F1 POP AF 81E4 CDE981 CALL B2HEX1 81E7 5F LD E,A 81E8 C9 RET ;binary to hex, low 4bit to ascii 1charactor 81E9 E60F B2HEX1:AND 0F 81EB C630 ADD A,30 81ED FE3A CP 3A 81EF D8 RET C;0-9 81F0 C607 ADD A,07;A-F 81F2 C9 RET ;hex to binary, ascii 1charactor to low 4bit 81F3 FE30 HTOB1:CP 30;>="0"? 81F5 D8 RET C;no 81F6 FE3A CP 3A;<="9"? 81F8 DA0C82 JP C,HTOB1_2;yes,"0" to "9" 81FB FE41 CP 41;>="A" ? 81FD D8 RET C;no 81FE FE47 CP 47;<="F"? 8200 DA0A82 JP C,HTOB1_1 8203 FE61 CP 61;>="a"? 8205 D8 RET C;no 8206 FE67 CP 67;<="f"? 8208 3F CCF 8209 D8 RET C;no 820A C609 HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F 820C E60F HTOB1_2:AND 0F 820E C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 820F C5 HEX4DP:PUSH BC 8210 E5 PUSH HL 8211 CDD481 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 8214 D5 PUSH DE 8215 EB EX DE,HL 8216 CD2B82 CALL DEDP 8219 D1 POP DE 821A CD2B82 CALL DEDP 821D E1 POP HL 821E C1 POP BC 821F C9 RET ;A(binary) to asckii 2bytes HEX & disp 8220 C5 B2HEXDP:PUSH BC 8221 E5 PUSH HL 8222 CDDA81 CALL B2HEX2 8225 CD2B82 CALL DEDP 8228 E1 POP HL 8229 C1 POP BC 822A C9 RET ; ;DE(asckii 2bytes) disp 822B D5 DEDP:PUSH DE 822C 5A LD E,D 822D 0E02 LD C,02 822F CD0580 CALL FCALL 8232 D1 POP DE 8233 0E02 LD C,02 8235 CD0580 CALL FCALL 8238 C9 RET ; 8239 6472766E INPMSG:"drvn" 823D 6F2E "o." 823F 3F DB 3F;? 8240 24 DB 24;$ 8241 6E6F7420 NFMSG:"not " 8245 666F756E "foun" 8249 64 "d" 824A 0D DB 0D 824B 0A DB 0A 824C 24 DB 24;$ 824D 656E64 ENDMSG:"end" 8250 0D DB 0D 8251 0A DB 0A 8252 24 DB 24;$ ; ADP =81C9 B2HEX1 =81E9 B2HEX2 =81DA B2HEX4 =81D4 B2HEXDP =8220 CRLF =81BD DEDP =822B DMA =8080 DNOPASS =8130 END =81AE ENDMSG =824D FCALL =8005 FCB =805C FILL3F =810E HEX4DP =820F HTOB1 =81F3 HTOB1_1 =820A HTOB1_2 =820C INPMSG =8239 LOOP =8114 LOOP1 =815D MSGDP =81B7 NFMSG =8241 NMDISP =8165 NMDISP2 =8168 NMDISP3 =8171 NMDISP4 =817D NOFILE =81A5 NXTSRCH =819D SPDP =81C7 |
logfile nd80zlog\04101051.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst10-5.bin,8100 loading FTST10-5.BIN ...0153(339)bytes loaded,from 8100 to 8252 >jp d233 a>save 2 ftst10-5.com a>dir A: FNC0E-1 COM : FTST10 COM : FTST10-2 COM : FTST10-4 COM A: FTST10-5 COM a> |
a>ftst10-5 drvno.?0 0001 00 FNC0E-1.COM FTST10.COM FTST10-2.COM FTST10-4.COM FTST10-5.COM end drvno.?b 0003 01 FNC0E-0.COM end drvno.?a 0003 00 FNC0E-1.COM FTST10.COM FTST10-2.COM FTST10-4.COM FTST10-5.COM end drvno.? a>^D end of CP/M >0000 00C3 - リモート接続を終了しました logfile closed at Tue Apr 10 10:54:02 2012 |