復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第99回]
●ファンクションコール1EH(ファイルアトリビュートのセット)
前々回([第97回])と 前回([第98回])、続けてファイルアトリビュートについて書いてきましたのは、今回説明しますファンクションコール1EH(ファイルアトリビュートのセット)の動作確認の準備を先にしておきたいと思ったからです。
ファンクションコール1EHはファイルアトリビュートのセットを行ないます。
ファイルアトリビュートはファイルの属性のことで、CP/MではそのファイルがR/O(Read Only、更新削除禁止)かR/W(読み書き可能)か、またSYS(システムファイル)か、DIR(それ以外のファイル)かというファイル属性を付与できます。
通常の操作でファイルを作成したときは、そのファイルのアトリビュートはR/WかつDIRになります。
その後ファンクションコール1EHによって、それをR/OやSYSに変更したり、またはR/OやSYSをR/WやDIRに戻したりすることができます。
ファイルアトリビュートについては 前回([第98回])、前々回([第97回])で説明していますので、そちらも参照してください。
●テストプログラムFTST17.TXT
ファンクションコール1EHのテストプログラムFTST17.TXTのソースリストです。
; BDOS TEST17 file attribute set ; ;2012/4/15 ; ORG $8100 FCALL=$8005 FCB=$805C FCB9=$8065 FCBA=$8066 DMA=$8080 ; 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;$ ; |
2012/4/15 11:20 ftst17.txt END=81E0 ; BDOS TEST17 file attribute set ; ;2012/4/15 ; ORG $8100 FCALL=$8005 FCB=$805C FCB9=$8065 FCBA=$8066 DMA=$8080 ; 8100 0E11 LD C,11;first file search 8102 115C80 LD DE,FCB 8105 CD0580 CALL FCALL 8108 FEFF CP FF 810A CA9B81 JP Z,NOFILE ; 810D 11BE81 LOOP:LD DE,RWMSG 8110 CDA181 CALL MSGDP 8113 0E01 LD C,01 8115 CD0580 CALL FCALL 8118 FE1A CP 1A;^z 811A C8 RET Z 811B E65F AND 5F;bit 5=0,'a' to 'A' 811D FE52 CP 52;'R' Read only 811F CA3281 JP Z,ROSET 8122 FE57 CP 57;'W' read Write 8124 CA3C81 JP Z,RWSET 8127 CDA781 CALL CRLF 812A 3E3F LD A,3F;'?' 812C CDB381 CALL ADP 812F CDA781 CALL CRLF 8132 216580 ROSET:LD HL,FCB9 8135 7E LD A,(HL) 8136 F680 OR 80 8138 77 LD (HL),A 8139 C34381 JP SYSDIRSET 813C 216580 RWSET:LD HL,FCB9 813F 7E LD A,(HL) 8140 E67F AND 7F 8142 77 LD (HL),A 8143 CDA781 SYSDIRSET:CALL CRLF 8146 11C481 LD DE,SDMSG 8149 CDA181 CALL MSGDP 814C 0E01 LD C,01 814E CD0580 CALL FCALL 8151 FE1A CP 1A;^z 8153 C8 RET Z 8154 E65F AND 5F;bit 5=0,'a' to 'A' 8156 FE53 CP 53;'S' SYS 8158 CA6B81 JP Z,SYSSET 815B FE44 CP 44;'D' DIR 815D CA7581 JP Z,DIRSET 8160 CDA781 CALL CRLF 8163 3E3F LD A,3F;'?' 8165 CDB381 CALL ADP 8168 C34381 JP SYSDIRSET 816B 216680 SYSSET:LD HL,FCBA 816E 7E LD A,(HL) 816F F680 OR 80 8171 77 LD (HL),A 8172 C37C81 JP ATTRSET 8175 216680 DIRSET:LD HL,FCBA 8178 7E LD A,(HL) 8179 E67F AND 7F 817B 77 LD (HL),A 817C 115C80 ATTRSET:LD DE,FCB 817F 0E1E LD C,1E 8181 CD0580 CALL FCALL 8184 FEFF CP FF 8186 CA9281 JP Z,ERRDP 8189 CDA781 CALL CRLF 818C 11DC81 LD DE,OKMSG 818F C3A181 JP MSGDP ; 8192 CDA781 ERRDP:CALL CRLF 8195 11D681 LD DE,ERRMSG 8198 C3A181 JP MSGDP ; 819B 11CA81 NOFILE:LD DE,NFMSG 819E C3A181 JP MSGDP ; 81A1 0E09 MSGDP:LD C,09 81A3 CD0580 CALL FCALL 81A6 C9 RET ; ;CL & LF 81A7 3E0D CRLF:LD A,0D 81A9 CDB381 CALL ADP 81AC 3E0A LD A,0A 81AE C3B381 JP ADP ;space disp 81B1 3E20 SPDP:LD A,20 ;A disp 81B3 C5 ADP:PUSH BC 81B4 E5 PUSH HL 81B5 5F LD E,A 81B6 0E02 LD C,02 81B8 CD0580 CALL FCALL 81BB E1 POP HL 81BC C1 POP BC 81BD C9 RET ; 81BE 526F7257 RWMSG:"RorW" 81C2 3F DB 3F;? 81C3 24 DB 24;$ 81C4 536F7244 SDMSG:"SorD" 81C8 3F DB 3F;? 81C9 24 DB 24;$ 81CA 6E6F7420 NFMSG:"not " 81CE 666F756E "foun" 81D2 64 "d" 81D3 0D DB 0D 81D4 0A DB 0A 81D5 24 DB 24;$ 81D6 657272 ERRMSG:"err" 81D9 0D DB 0D 81DA 0A DB 0A 81DB 24 DB 24;$ 81DC 6F6B OKMSG:"ok" 81DE 0D DB 0D 81DF 0A DB 0A 81E0 24 DB 24;$ ; ADP =81B3 ATTRSET =817C CRLF =81A7 DIRSET =8175 DMA =8080 ERRDP =8192 ERRMSG =81D6 FCALL =8005 FCB =805C FCB9 =8065 FCBA =8066 LOOP =810D MSGDP =81A1 NFMSG =81CA NOFILE =819B OKMSG =81DC ROSET =8132 RWMSG =81BE RWSET =813C SDMSG =81C4 SPDP =81B1 SYSDIRSET =8143 SYSSET =816B |
logfile nd80zlog\04150943.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst17.bin,8100 loading FTST17.BIN ...00e1(225)bytes loaded,from 8100 to 81E0 >jp d233 a>b: b>save 1 ftst17.com b>dir a: A: FNC0E-1 COM : FTST10 COM : FTST10-5 COM : FTST11 COM A: FTST12 COM : FTST13 COM : FTST14 COM : FTST15 COM A: FTST16 COM : FTST10-6 COM b> |
b>a: a>b:ftst17 ftst10-2.com RorW?w SorD?d ok a>dir A: FNC0E-1 COM : FTST10 COM : FTST10-2 COM : FTST10-5 COM A: FTST11 COM : FTST12 COM : FTST13 COM : FTST14 COM A: FTST15 COM : FTST16 COM : FTST10-6 COM a>b:ftst10-7 drvno.?a FNC0E-1 COM RW DIR FTST10 COM RO DIR FTST10-2 COM RW DIR FTST10-4 COM RO SYS FTST10-5 COM RW DIR FTST11 COM RW DIR FTST12 COM RW DIR FTST13 COM RW DIR FTST14 COM RW DIR FTST15 COM RW DIR FTST16 COM RW DIR FTST10-6 COM RW DIR end drvno.? a> |
b>ftst17 a:ftst10-4.com RorW?w SorD?d ok b> b>ftst17 a:ftst10.com RorW?w SorD?d ok b>ftst10-7 drvno.?a FNC0E-1 COM RW DIR FTST10 COM RW DIR FTST10-2 COM RW DIR FTST10-4 COM RW DIR FTST10-5 COM RW DIR FTST11 COM RW DIR FTST12 COM RW DIR FTST13 COM RW DIR FTST14 COM RW DIR FTST15 COM RW DIR FTST16 COM RW DIR FTST10-6 COM RW DIR end drvno.? |
b>ftst17 a:ftst11.com RorW?r SorD?d ok b>ftst17 a:ftst12.com RorW?w SorD?s ok b>ftst17 a:ftst13.com RorW?r SorD?s ok b>ftst10-7 drvno.?a FNC0E-1 COM RW DIR FTST10 COM RW DIR FTST10-2 COM RW DIR FTST10-4 COM RW DIR FTST10-5 COM RW DIR FTST11 COM RO DIR FTST12 COM RW SYS FTST13 COM RO SYS FTST14 COM RW DIR FTST15 COM RW DIR FTST16 COM RW DIR FTST10-6 COM RW DIR end drvno.? b> |