復活!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> |