最終更新:ID:JeMc9UHrxQ 2015年02月01日(日) 16:42:58履歴
メモリ空間 | 1 |
---|---|
ルーチン番号 | $E |
AccBに格納されている入/出力モードとAccBに格納されているファイル番号でシステム・スタック内、または、システム・ワーク内に格納されているファイル・ディスクリプタのファイルをオープンします。
$22(") | ファイル・ディスクリプタ | $22(") | $00 |
AccA:入/出力モード
- $49(I)…シーケンシャル・ファイルの入力モード
- $4F(O)…シーケンシャル・ファイルの出力モード
- $52(R)…ランダム・アクセス・ファイル・モード
注)システム・ワーク内で使用できるエリア
- 入力バッファPBUF($F016)から256バイト
- 中間コード・バッファKBUF($F024)から256バイト
- 数値文字列変換バッファPFBUF($F014)から40バイト
ファイル番号1、"0:TEST"のランダム・ファイルをオープンします。
設定はプログラム例のように"MMWIND"ルーチンを使います。
シーケンシャル・ファイルの場合はその必要はありません。
0 0000 ROPEN EQU * SAMPLE OF "ZOPEN" ROUTINE 1 * 2 C000 ORG $C000 3 C000 20 11 BRA EXEC 4 C002 0080 LENG FDB $0080 5 C004 907D RLEN FDB $907D 6 C006 07 TRFMAP FCB 7 MAP No.7 7 C007 00 PAGEW FCB $00 8 C008 52 MODE FCC /R/ MODE O,I or R 9 C009 01 FILENO FCB $01 10 C00A 22 FDESC FCC /"0:TEST"/ FILE DESCRIPTOR DATA 11 C012 00 FDEND FCB $00 DATA END CODE 12 * 13 C013 AE 8CEE EXEC LDX RLEN,PCR X:ADDR. OF LOCATE AREA 14 C016 B6 C006 LDA TRFMAP A:MEMORY MAP No.(LOCATE AREA) 15 C019 E6 8CEB LDB PAGEW,PCR B:WINDOW POSITION 16 C01C 103F SWI2 CALL "MMWIND" ROUTINE 17 C01E 40 FCB $40 MAP No.=0 18 C01F 03 FCB $03 ROUTINE No.=3 19 C020 EC 8CED LDD LENG,PCR 20 C023 ED 84 STD ,X 21 *--- FILE DESCRIPTOR SET ---- 13 C025 30 8CEB LEAX FDEND+1,PCR X:ADDR. OF FILE DESC. DATA 20 C028 1F 42 TFR S,Y Y:SYSTEM STACK POINTER ADDR. 21 C02A C6 02 LDB #$02 B:COUNTER OF #$22(") CODE TEST 22 C02C A6 82 LOOP LDA ,-X A:OUTPUT DATA 23 C02E 34 02 PSHS A A TO SYSTEM STACK AREA 24 C030 34 02 CMPA #$22 TEST $22(") CODE 25 C032 26 F8 BNE LOOP 26 C034 5A DECB 27 C035 26 F5 BNE LOOP 28 *--- FILE OPEN(ZOPEN) ---- 29 C037 1F 41 TFR S,X Y:SYSTEM STACK POINTER ADDR. 30 C039 A6 8CCC LDA MODE,PCR A:MODE SET 31 C03C E6 8CCA LDB FILENO,PCR B:FILE No. SET 32 C03F 34 68 PSHS U,Y,DP 33 C041 103F SWI2 CALL "ZOPEN" ROUTINE 34 C043 41 FCB $41 MAP No.=1 35 C044 0E FCB $0E ROUTINE No.=$0E 36 C045 35 68 PUL DP,Y,U 37 C047 1F 24 TFR Y,S Y:SYSTEM STACK POINTER ADDR. 38 C049 39 RTS注)入/出力モードで"R"($52)を指定した場合は、メモリ空間番号7の$907D番地からの2バイトにレコード長を設定してください。
設定はプログラム例のように"MMWIND"ルーチンを使います。
シーケンシャル・ファイルの場合はその必要はありません。
サンプル・プログラム実行後、モニタ・コマンドでXに$B100が格納されていることと、メモリ空間06のページ$A、および$Bの実メモリ・ページ番号がメモリ空間$Fページ$B、および$Cの実メモリ・ページ番号と等しいことを確認します。
Ready EXEC &HC000 S=E1BE(F16B)CC=80(****)A=0F B=0B DP=00 X=B100 Y=4045 U=EB97 PC=C013(3FFFFFFFFF) *MAPP CURRENT MAP = 0F *XP 0=BF 1=BF 2=BF 3=BF 4=BF 5=BF 6=BF 7=BF 8=BF 9=BF A=BF B=40 C=45 D=85 E=84 F=EF *MAP CURRENT MAP = 0F 06 CURRENT MAP = 06 *XP 0=BF 1=BF 2=BF 3=BF 4=BF 5=BF 6=BF 7=BF 8=BF 9=BF A=40 B=45 C=BF D=85 E=84 F=EF *
コメントをかく