;   libparted - a library for manipulating disk partitions
;   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
;
;   This program is free software; you can redistribute it and/or modify
;   it under the terms of the GNU General Public License as published by
;   the Free Software Foundation; either version 2 of the License, or
;   (at your option) any later version.
;
;   This program is distributed in the hope that it will be useful,
;   but WITHOUT ANY WARRANTY; without even the implied warranty of
;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;   GNU General Public License for more details.
;
;   You should have received a copy of the GNU General Public License
;   along with this program; if not, write to the Free Software
;   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA

; NOTE: I build this with:
;	$ as86 -b /dev/stdout mbr.s | hexdump -e '8/1 "0x%02x, " "\n"'
;
; The build isn't done automagically by make, because as86 may not be on many
; machines (particularly non-x86).  Also, it seems rather difficult to get
; as86 to build object files that can be linked, especially as it's 16 bit
; code...

USE16

; This code, plus the partition table is loaded into 0000:7C00 by the BIOS

.text

; set top of stack to 1000:B000

	cli

	mov	ax, #0x1000
	mov	ss, ax
	mov	sp, #0xB000

	mov	ax, #0x0000
	mov	ds, ax
	mov	es, ax

	sti

; Copy what the BIOS loaded (i.e. the MBR + head of partition table) from
; 0000:7c00 to 0000:0600

	mov	si, #0x7c00
	mov	di, #0x0600
	mov	cx, #0x200
	rep
	movsb

; Jump to the copy of the MBR

	jmp	0x0000:find_boot_partition + 0x0600

find_boot_partition:
	mov	si, #0x07BE

check_next_bootable:
	cmp	[si], al
	jnz	found_bootable
	add	si, #0x0010
	cmp	si, #0x07FE
	jnz	check_next_bootable
	jmp	error

found_bootable:

; Load in the boot sector at 0000:7c00

	mov	ah, #2			; BIOS command (read)
	mov	al, #1			; count
	mov	bx, #0x7c00		; destination pointer
	mov	dl, #0x80		; drive
	mov	dh, byte ptr [si + 1]	; head
	mov	cx, word ptr [si + 2]	; sector / cylinder
	int	#0x13			; BIOS read interrupt

	jmp	0x0000:0x7c00		; hand control to boot sector

error:
	jmp	error

