diff options
| -rw-r--r-- | bcopy32.inc | 21 | ||||
| -rw-r--r-- | comboot.doc | 9 | ||||
| -rw-r--r-- | layout.inc | 2 |
3 files changed, 30 insertions, 2 deletions
diff --git a/bcopy32.inc b/bcopy32.inc index b8e1a5bd..a7b6d6bd 100644 --- a/bcopy32.inc +++ b/bcopy32.inc @@ -442,18 +442,26 @@ try_wbinvd: ; SS register. That is the responsibility of the caller. ; ; Inputs: -; DS:BX -> Pointer to list of (dst, src, len) pairs +; DS:BX -> Pointer to list of (dst, src, len) pairs(*) ; AX -> Number of list entries ; [CS:EntryPoint] -> CS:IP to jump to ; On stack - initial state (fd, ad, ds, es, fs, gs) ; +; (*) If dst == -1, then (src, len) entry refers to a set of new +; descriptors to load. +; If src == -1, then the memory pointed to by (dst, len) is bzeroed; +; this is handled inside the bcopy routine. +; shuffle_and_boot: +.restart: and ax,ax jz .done .loop: mov edi,[bx] mov esi,[bx+4] mov ecx,[bx+8] + cmp edi, -1 + je .reload call bcopy add bx,12 dec ax @@ -468,6 +476,17 @@ shuffle_and_boot: popfd jmp far [cs:EntryPoint] +.reload: + mov bx, trackbuf ; Next descriptor + movzx edi,bx + push ecx ; Save byte count + call bcopy + pop eax ; Byte count + xor edx,edx + mov ecx,12 + div ecx ; Convert to descriptor count + jmp .restart + ; ; trampoline_to_pm: ; diff --git a/comboot.doc b/comboot.doc index 66b8bf2b..f5133e15 100644 --- a/comboot.doc +++ b/comboot.doc @@ -580,6 +580,15 @@ AX=0012h [3.50] Cleanup, shuffle and boot (FFFFFFFFh) then the block specified by the destination address and the length is set to all zero. + Starting in version 3.50, if the destination address is -1 + (FFFFFFFFh) then the data block is loaded as a new set of + descriptors, and processing is continued (and unprocessed + descriptors are lost, this is thus typically only used as the + last descriptor in a block.) The block must still fit in the + internal descriptor buffer (see function 0011h), but can, of + course, itself chain another block. + + Normal boot sectors expect DL to contain the drive number, and, for hard drives (DL >= 80h) DS:SI to contain a pointer to the 16-byte partition table entry. The memory between @@ -26,7 +26,7 @@ TEXT_START equ 7C00h ; The secondary BSS section, above the text; we really wish we could ; just make it follow .bcopy32 or hang off the end, ; but it doesn't seem to work that way. -LATEBSS_START equ 0B200h +LATEBSS_START equ 0B300h ; Reserve memory for the stack. This causes checkov to abort the ; compile if we violate this space. |
