-
Notifications
You must be signed in to change notification settings - Fork 6
Gaku edited this page Sep 28, 2022
·
5 revisions
LSX-Dodgers、MSX-DOS、CP/Mで動作します。
ファイルの一覧は「011H ファイル検索(_SFIRST)」と「12H 次のファイル検索(_SNEXT)」を使います。
これらのシステムコールでマッチした場合はDTAにFCBではなくドライブ番号(1バイト)とディレクトリエントリ(32バイト)の計33バイトがコピーされる。
最初がドライブ番号でファイル名(8バイト)と拡張子(3バイト)が続くので、そのままオープンされていないFCBとして使用可能です。
; LS
SYSTEM EQU 0005H ;システムコール
FCB1 EQU 005CH ;1番目の引数のFCB
FCB2 EQU 006CH ;2番目の引数のFCB
DTA1 EQU 0080H
ORG 0100H
JP START ;0C3HはZ80ではJPだが、i8086ではRETなので
START: ;間違えてMS-DOS環境で実行しても即終了できる
LD DE,FCB ;一覧取得先
LD C,01AH ;DTAの設定(_SETDTA) CP/M MSX-DOS
CALL SYSTEM
LD A,(FCB1) ;ドライブ
LD (FCB_FILTER),A
LD DE,FCB_FILTER
LD C,011H ;ファイル検索(_SFIRST) CP/M MSX-DOS
CALL SYSTEM
LOOP1:
OR A
JR NZ,EXIT1
LD HL,FCB+1
LD B,11 ;ファイル名(8)+拡張子(3)
LOOP2:
LD E,(HL)
INC HL
PUSH BC ;CP/MやMSX-DOSではシステムコールでレジスタが破壊される
PUSH HL
LD C,2 ;コンソール出力(_CONOUT) CP/M MSX-DOS
CALL SYSTEM
POP HL
POP BC
DJNZ LOOP2
LD E,0DH
LD C,2 ;コンソール出力(_CONOUT) CP/M MSX-DOS
CALL SYSTEM
LD E,0AH
LD C,2 ;コンソール出力(_CONOUT) CP/M MSX-DOS
CALL SYSTEM
LD C,12H ;次のファイル検索(_SNEXT) CP/M MSX-DOS
CALL SYSTEM
JR LOOP1
EXIT1:
JP 0 ;プログラム終了
FCB_FILTER: ;FCBは37バイト
DB 0,"???????????" ;カレントドライブ=0,ファイル名8文字,拡張子3文字
DB 0,0,0,0, 0,0,0,0, 0,0,0,0 ;残りは0で埋める
DB 0,0,0,0, 0,0,0,0, 0,0,0,0, 0
FCB: ;FCBは37バイト
DB 0,0,0,0, 0,0,0,0, 0,0,0,0
DB 0,0,0,0, 0,0,0,0, 0,0,0,0
DB 0,0,0,0, 0,0,0,0, 0,0,0,0, 0