Skip to content
Gaku edited this page Nov 13, 2022 · 3 revisions

ファイルに書き込む

LSX-Dodgers MSX-DOSで動作します。

ファイルを作成して書き込む場合もMSX-DOSから用意された「26H ランダムブロック書き込み(_WRBLK)」を用いるのがお勧めです。

CP/M互換の書き込みのシステムコールは128バイト単位になってしまう

;	WRITE

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,016H		;ファイルの作成(_FMAKE) CP/M MSX-DOS
	CALL	SYSTEM
	OR	A
	JP	NZ,0		;失敗したら終了

	LD	HL,1
	LD	(FCB+14),HL	;レコードサイズを1にする
	LD	HL,0            ;書き込み開始位置を先頭にする
	LD	(FCB1+33), HL
	LD	(FCB1+35), HL

	LD	DE,MESSAGE	;書き込むデータの入っているアドレス
	LD	C,01AH		;DTAの設定(_SETDTA) CP/M MSX-DOS
	CALL	SYSTEM
LOOP1:
	LD	HL,MESEND-MESSAGE	;データを書き込むサイズ(バイト単位)
	LD	DE,FCB
	LD	C,026H		;ランダムブロック書き込み(_WRBLK) MSX-DOS
	CALL	SYSTEM
	CP	0FFH
	JR	Z,EXIT1		;失敗したら終了

	LD	DE,FCB
	LD	C,010H		;ファイルのクローズ(_FCLOSE) CP/M MSX-DOS
	CALL	SYSTEM
EXIT1:
	JP	0		;プログラム終了

FCB:				;FCBは37バイト
	DB	0,"HELLO   TXT"	;カレントドライブ=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
MESSAGE:
	DB	"hello, world", 0DH, 0AH
MESEND:

このプログラムを実行するとカレントにHELLO.TXTというファイルが作成され、内容は「hello, world」になる

Clone this wiki locally