復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第214回]
●ファンクションコール1EH(ファイルアトリビュートのセット)
ファンクションコール1EHについては[第99回]で説明をしました。
ファンクションコール1EHはファイルアトリビュートのセットを行ないます。
[第99回]で作成したテストプログラムはFTST17です。
ファイルアトリビュートはファイルの属性のことで、CP/MではそのファイルがR/O(Read Only、更新削除禁止)かR/W(読み書き可能)か、またSYS(システムファイル)か、DIR(それ以外のファイル)かというファイル属性を付与できます。
通常の操作でファイルを作成したときは、そのファイルのアトリビュートはR/WかつDIRになります。
その後ファンクションコール1EHによって、それをR/OやSYSに変更したり、またはR/OやSYSをR/WやDIRに戻したりすることができます。
[第144回]ではRAMディスク版での動作テストをしています。
今回はFTST17を64KBフルRAM用に一部を書き換えてファイル名をVFTST17にしました。
下はそのソースプログラムリストです。
●ソースプログラムVFTST17.TXT
; BDOS TEST17 file attribute set ; ;2012/4/15 9/12 ; ORG $0100 FCALL=$0005 FCB=$005C FCB9=$0065 FCBA=$0066 DMA=$0080 ; LD C,11;first file search LD DE,FCB CALL FCALL CP FF JP Z,NOFILE ; LOOP:LD DE,RWMSG CALL MSGDP LD C,01 CALL FCALL CP 1A;^z RET Z AND 5F;bit 5=0,'a' to 'A' CP 52;'R' Read only JP Z,ROSET CP 57;'W' read Write JP Z,RWSET CALL CRLF LD A,3F;'?' CALL ADP CALL CRLF ROSET:LD HL,FCB9 LD A,(HL) OR 80 LD (HL),A JP SYSDIRSET RWSET:LD HL,FCB9 LD A,(HL) AND 7F LD (HL),A SYSDIRSET:CALL CRLF LD DE,SDMSG CALL MSGDP LD C,01 CALL FCALL CP 1A;^z RET Z AND 5F;bit 5=0,'a' to 'A' CP 53;'S' SYS JP Z,SYSSET CP 44;'D' DIR JP Z,DIRSET CALL CRLF LD A,3F;'?' CALL ADP JP SYSDIRSET SYSSET:LD HL,FCBA LD A,(HL) OR 80 LD (HL),A JP ATTRSET DIRSET:LD HL,FCBA LD A,(HL) AND 7F LD (HL),A ATTRSET:LD DE,FCB LD C,1E CALL FCALL CP FF JP Z,ERRDP CALL CRLF LD DE,OKMSG JP MSGDP ; ERRDP:CALL CRLF LD DE,ERRMSG JP MSGDP ; NOFILE:LD DE,NFMSG JP MSGDP ; 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 ; RWMSG:"RorW" DB 3F;? DB 24;$ SDMSG:"SorD" DB 3F;? DB 24;$ NFMSG:"not " "foun" "d" DB 0D DB 0A DB 24;$ ERRMSG:"err" DB 0D DB 0A DB 24;$ OKMSG:"ok" DB 0D DB 0A DB 24;$ ; |
; BDOS TEST10 filename search function0e,11,12 ;2012/3/19 4/4 ; 4/7 4/9 dir disp ; 4/14 display file attribute ; 9/12 ; 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,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) CALL ADP NMDISP3:INC HL DEC B JP NZ,NMDISP2 CALL SPDP LD B,03 PUSH HL NMDISP4:LD A,(HL) AND 7F CALL ADP INC HL DEC B JP NZ,NMDISP4 CALL SPDP POP HL PUSH HL LD A,(HL) RLCA JP C,ROSET LD DE,RWT JP RODSP ROSET:LD DE,ROT RODSP:CALL MSGDP CALL SPDP POP HL INC HL LD A,(HL) RLCA JP C,SYSSET LD DE,DIRT JP SYSDSP SYSSET:LD DE,SYST SYSDSP:CALL MSGDP 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 ; 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;$ RWT:"RW" DB 24;$ ROT:"RO" DB 24;$ DIRT:"DIR" DB 24;$ SYST:"SYS" DB 24;$ ; |
logfile nd80zlog\09122056.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** can't open D.vfd >jp d233 A>copy z:vftst17.bin A>copy z:vftst107.bin A>b: B>dir B: TEST2 COM : MBASIC COM : F80 COM : HELLO FOR B: HELLO REL : L80 COM : FORLIB REL : HELLO COM B>a:vftst17 test2.com RorW?r SorD?s ok B>a:vftst17 hello.for RorW?r SorD?d ok B>a:vftst17 hello.com RorW?w SorD?s ok B>dir B: MBASIC COM : F80 COM : HELLO FOR : HELLO REL B: L80 COM : FORLIB REL B>a:vftst107 drvno.?b TEST2 COM RO SYS MBASIC COM RW DIR MBASIC COM RW DIR F80 COM RW DIR F80 COM RW DIR HELLO FOR RO DIR HELLO REL RW DIR L80 COM RW DIR FORLIB REL RW DIR FORLIB REL RW DIR HELLO COM RW SYS end drvno.? B> |