-
Notifications
You must be signed in to change notification settings - Fork 6
write
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」になる