diff options
Diffstat (limited to 'contrib/syslinux-4.02/core/bcopy32.inc')
-rw-r--r-- | contrib/syslinux-4.02/core/bcopy32.inc | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/core/bcopy32.inc b/contrib/syslinux-4.02/core/bcopy32.inc new file mode 100644 index 0000000..6537546 --- /dev/null +++ b/contrib/syslinux-4.02/core/bcopy32.inc @@ -0,0 +1,75 @@ +;; ----------------------------------------------------------------------- +;; +;; Copyright 1994-2009 H. Peter Anvin - All Rights Reserved +;; Copyright 2009 Intel Corporation; author: H. Peter Anvin +;; +;; 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, Inc., 53 Temple Place Ste 330, +;; Boston MA 02111-1307, USA; either version 2 of the License, or +;; (at your option) any later version; incorporated herein by reference. +;; +;; ----------------------------------------------------------------------- + +;; +;; bcopy32.inc +;; +;; 32-bit bcopy routine for real mode +;; + +; +; 32-bit bcopy routine for real mode +; +; We enter protected mode, set up a flat 32-bit environment, run rep movsd +; and then exit. IMPORTANT: This code assumes cs == 0. +; +; This code is probably excessively anal-retentive in its handling of +; segments, but this stuff is painful enough as it is without having to rely +; on everything happening "as it ought to." +; + + bits 16 + section .text16 + +; +; bcopy: +; 32-bit copy, overlap safe +; +; Inputs: +; ESI - source pointer (-1 means do bzero rather than bcopy) +; EDI - target pointer +; ECX - byte count +; +; Outputs: +; ESI - first byte after source (garbage if ESI == -1 on entry) +; EDI - first byte after target +; +bcopy: jecxz .ret + pm_call pm_bcopy + add edi,ecx + add esi,ecx +.ret: ret + +; +; shuffle_and_boot_raw: +; The new version of shuffle and boot. +; Inputs: +; ESI -> Pointer to list of (dst, src, len) pairs(*) +; EDI -> Pointer to safe area for list + shuffler +; (must not overlap this code nor the RM stack) +; ECX -> Byte count of list area (for initial copy) +; +; If src == -1: then the memory pointed to by (dst, len) is bzeroed; +; this is handled inside the bcopy routine. +; +; If len == 0: this marks the end of the list; dst indicates +; the entry point and src the mode (0 = pm, 1 = rm) +; +shuffle_and_boot_raw: + mov bx,pm_shuffle + jmp enter_pm + +; +; The 32-bit copy and shuffle code is "special", so it is in its own file +; +%include "bcopyxx.inc" |