読み込みは止めて、書き込みに使ってみた
今のところ、二次ローダー自体が小さいので、
セクタをまとめて処理する必要性が低い...
そこで、読み込みではなくて、書き込みに使ってみる事にした。
; ; 定数 ; 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を書き出すには、フロッピーが必要になるなぁ...
う〜ん。