; haribote-ipl
; TAB=4

LOADADDR EQU 0x7c00
BASEADDR EQU 0x0600
DISKREADSTRUCT EQU 0x0800

PAT0_STARTSEC EQU 0x3f
PAT0_SECNUM EQU 0x200

	ORG 0x600			; このプログラムがどこに読み込まれるのか

	;mbrを0x0600にコピーしてそっちで実行する
	xor ax, ax
	mov ds, ax
	mov si, LOADADDR
	mov es, ax
	mov di, BASEADDR
	mov cx, 0x200 / 2
	rep movsw
	jmp 0:entry ; 0x0600にコピーした方のコードへ移る
entry:
	;mov cs, ax
	mov ss, ax
	mov ds, ax
	mov es, ax
	

	
	;読み込みのための構造体を設定
	mov si, DISKREADSTRUCT
	mov ax, 0x0010
	mov [si], ax
	mov ax, 0x0001
	mov [si+2], ax
	mov ax, LOADADDR
	mov [si+4], ax
	mov ax, 0
	mov [si+6], ax
	mov ax, [pat0 + 8]
	mov [si+8], ax
	mov ax, [pat0 + 8 + 2]
	mov [si+0x0a], ax
	mov ax, 0
	mov [si+0x0c], ax
	mov [si+0x0e], ax
	
	; 拡張int 0x13を用いてHDDからブートセクションを読みこむ
	mov ah, 0x42
	;mov dl, todo ; ドライブ番号はdlに入っている・・・？
	mov al, 0

	int 0x13

	jmp 0:LOADADDR


;	RESB	BASEADDR+0x168000-$		; 0x7dfeまでを0x00で埋める命令

	RESB 0x1BE - ($ - $$)
	
; struc pattable
	; boot_flag : resb 1
	; starting_h : resb 1
	; starting_s : resb 1
	; starting_c : resb 1
	; pattype : resb 1
	; ending_h : resb 1
	; ending_s : resb 1
	; ending_c : resb 1
	; begin_lba : resd 1
	; sector_num : resd 1
; endstruc
	
pat0:
	db 0x80 ; boot flag
	db 1,1,0 ;partition begin CHS
	db 0x0B ; partition type:FAT32
	db 0xfe,0xff,0xff; partition end CHS
	dd 0x0000003f ;partition begin LBA
	dd 0x00000302 ;partition size LBA(sector num)
	
	
pat1:
	db 0x00
	db 0,0,0 ;partition begin CHS
	db 0x00 ; partition type:FAT32
	db 0x00,0x00,0x00; partition end CHS
	dd 0x00000000 ;partition begin LBA
	dd 0x00000000 ;partition size LBA(sector num)
	
	resb 0x200-2-($ - $$)
	
	; db 0x00
	; db 1,1,0 ;partition begin CHS
	; db 0x0C ; partition type:FAT32
	; db 0xfe,0xff,0xff; partition end CHS
	; dd 0x0000003f ;partition begin LBA
	; dd 0x00000000 ;partition size LBA(sector num)
	
	; db 0x00
	; db 1,1,0 ;partition begin CHS
	; db 0x0C ; partition type:FAT32
	; db 0xfe,0xff,0xff; partition end CHS
	; dd 0x0000003f ;partition begin LBA
	; dd 0x00000000 ;partition size LBA(sector num)
	

	db 0x55
	db 0xAA
	