復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第207回]
●ファンクションコール18H(ログインベクトルの取り出し)、19H(ログインディスクbフ取り出し)
CP/M2.2では最大16台のディスクを接続することができました。
ディスクドライブはA〜Pの名前をつけて識別します。
そしてそのAドライブ〜Pドライブをビット0〜ビット15までの各ビットに順に割り当てた16ビットの値がログインベクトルです。
あるドライブに1回でもアクセスすると、ログインベクトルの、そのドライブに対応するビットが1になります。
ファンクションコール19H(ログインディスクbフ取り出し)は現在のカレントドライブb取得します。
ファンクションコール18Hと19Hについては[第90回]でテストをしました。
そこで作ったテストプログラムはFTST10−5です。
[第141回]ではRAMディスク版での動作テストをしています。
今回はFTST10−5を64KBフルRAM用に一部を書き換えてファイル名をVFTST105にしました。
下はそのソースプログラムリストです。
ディレクトリ表示プログラムにログインベクトルとカレントドライブbフ表示を追加しています。
●ソースプログラムVFTST105.TXT
; BDOS TEST10 filename search function0e,11,12,18,19 ;2012/3/19 4/4 ; 4/7 4/9 dir disp ;4/10 func18,19 ;8/29 ; ORG $0100 FCALL=$0005 FCB=$005C DMA=$0080 ; 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;$ ; |
logfile nd80zlog\08292120.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** can't open D.vfd >jp d233 A>copy z:vftst105.bin A>vftst105 drvno.?0 0001 00 F80.COM F80.COM HELL1.FOR HELL1.REL . . FNC0BT-2.COM FNC06T-2.COM FNC03T-2.COM VFTST102.COM end drvno.?b 0003 01 TEST2.COM MBASIC.COM . . FORLIB.REL HELLO.COM end drvno.?a 0003 00 F80.COM F80.COM HELL1.FOR HELL1.REL . . FNC0BT-2.COM FNC06T-2.COM FNC03T-2.COM VFTST102.COM end drvno.? A> |
; BDOS TEST11 set 'read only ' function1C ;2012/4/10 8/29 ; ORG $0100 FCALL=$0005 ; LD C,1C CALL FCALL RET ; |
; BDOS TEST12 get r/o vector function1D ;2012/4/10 8/29 ; ORG $0100 FCALL=$0005 FCB=$005C ; 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 ; |
ワンボードマイコンでCP/Mを![第207回]
2012.8.29upload
前へ
次へ
ホームページトップへ戻る