aboutsummaryrefslogtreecommitdiff
path: root/stage2/nbloader.S
diff options
context:
space:
mode:
Diffstat (limited to 'stage2/nbloader.S')
-rw-r--r--stage2/nbloader.S121
1 files changed, 0 insertions, 121 deletions
diff --git a/stage2/nbloader.S b/stage2/nbloader.S
deleted file mode 100644
index 57ad936..0000000
--- a/stage2/nbloader.S
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * GRUB -- GRand Unified Bootloader
- * Copyright (C) 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., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <nbi.h>
-#include <diskless_size.h>
-
- .file "nbloader.S"
- .text
- .code16
-
- /* Just a dummy entry */
-.globl _start; _start:
-
- /*
- * netboot image header
- */
-
- .long NBI_MAGIC
- .long 0x00000004
- /* load address of the first block */
- .word NBI_DEST_OFF
- .word NBI_DEST_SEG
- /* start addr of the relocation code */
- .word NBI_DEST_OFF + (relocate - _start)
- .word NBI_DEST_SEG
-
- .long 0x04000004
- .long NBI_DEST_ADDR + 0x0200
- .long DISKLESS_SIZE
- .long DISKLESS_SIZE
-
-relocate:
- /*
- * This code is for now located at 0x10000.
- * Relocate the code in two steps:
- * 1. Copy the first 32k to 0x8000 and jump to the relocated area.
- * 2. Copy the rest to 0x10000 (0x8000 + 32k).
- */
-
- /* Copy the first 32k */
- movw $NBI_DEST_SEG, %ax
- movw %ax, %ds
- movw $RELOCATED_SEG, %ax
- movw %ax, %es
- xorw %si, %si
- xorw %di, %di
- /* Always copy 32k bytes */
- movw $0x4000, %cx
-
- cld
- rep
- movsw
-
- /* Jump to the relocated address */
- ljmp $0, $(RELOCATED_ADDR + copy_rest - _start)
-
- /* Copy the rest */
-copy_rest:
- /* Set %edx to the number of bytes */
- movl $(DISKLESS_SIZE + 0x200 - 0x8000), %edx
-
-copy_loop:
- /* Check the rest */
- orl %edx, %edx
- jz boot_stage2
-
- /* Copy by 32k, as that is easy to implement */
- movl $0x8000, %ecx
- cmpl %ecx, %edx
- jg copy
- movl %edx, %ecx
-
-copy:
- /* Update the number of rest bytes */
- subl %ecx, %edx
-
- /* Add 0x0800 (32k >> 4) into %es and %ds */
- movw %es, %ax
- addw $0x0800, %ax
- movw %ax, %es
- movw %ds, %ax
- addw $0x800, %ax
- movw %ax, %ds
-
- /* Zero the offsets */
- xorw %si, %si
- xorw %di, %di
-
- /* Use word-size copy */
- addw $1, %cx
- shrw $1, %cx
-
- /* The direction is already correct */
- rep
- movsw
-
- jmp copy_loop
-
- /* Jump to the stage2 */
-boot_stage2:
- ljmp $0, $STAGE2_START_ADDR
-
- /* This ensures that the length of this image will be 1 sector */
- . = _start + 0x200 - 1
- .byte 0