読み込みは止めて、書き込みに使ってみた

今のところ、二次ローダー自体が小さいので、
セクタをまとめて処理する必要性が低い...
そこで、読み込みではなくて、書き込みに使ってみる事にした。

;
; 定数
;

	WRITE_SIZE	EQU	64 * 2	; 64 * 2 (* 512)
	;
	; ROM BIOS 領域をフロッピーディスクに書き出してみる
	;

	; INT 13h (AH=0):ディスクシステム初期化
	MOV	AX, 0x0000
	INT	13h

	; シリンダ2 セクタ1 から、書き出し開始
	MOV	AX, 0F000h	;
	MOV	ES, AX		; ES = F000h
	MOV	DX, 0000h	; DH=ヘッド,DL=ドライブ
	MOV	CX, 0201h	; CH=シリンダ,CL=セクタ
	MOV	BX, 0000h	; 書き込みアドレス[ES:BX]
	MOV	AX, 0312h	; AL=書き込みセクタ数(18セクタ9K)

	; 書き込みサイズ
	MOV	BX, WRITE_SIZE

fdwrite:
	; 開始セクタのチェック
	MOV	AL, 19
	SUB	AL, CL

fdwrite_check_read_size:
	; 読み込みサイズのチェック
	CMP	BH, 0
	JA	fdwrite_check_end
	CMP	BL, AL
	JAE	fdwrite_check_end
	MOV	AL, BL

fdwrite_check_end:
	PUSH	BX
	MOV	BX, 0x0000
	MOV	AH, 0x03

fdwrite_done:
	; INT 13h (AH=3):ディスクへ書き込み
	INT	13h

fdwrite_next:
	; 次の準備
	XOR	AH, AH

	MOV	BX, ES
	SHR	BX, 5
	ADD	BX, AX
	SHL	BX, 5
	MOV	ES, BX

	POP	BX
	SUB	BX, AX

	CALL	putregs
	CALL	putsegs

	CALL	getchar

	CMP	BX, 0
	JZ	fdwrite_end

	MOV	CL, 1

	INC	DH
	CMP	DH, 1
	JBE	fdwrite

	MOV	DH, 0
	INC	CH
	JMP	fdwrite
fdwrite_end:

とりあえず、こんな感じでやってみた。
qemu上でフロッピーイメージに書き出した内容と、qemuのROMイメージの内容を比較してみて、
どうやら、書き出しの方は、うまく出来ている模様。


でも、実際のROMを書き出すには、フロッピーが必要になるなぁ...
う〜ん。