wok rev 540
Etherboot: by the way, add DOS/COM support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Thu Apr 10 22:34:56 2008 +0000 (2008-04-10) |
parents | 47e6882f05da |
children | 4a87a0aa0476 |
files | etherboot/stuff/etherboot-prefix.u |
line diff
1.1 --- a/etherboot/stuff/etherboot-prefix.u Fri Apr 11 02:05:05 2008 +0200 1.2 +++ b/etherboot/stuff/etherboot-prefix.u Thu Apr 10 22:34:56 2008 +0000 1.3 @@ -1,6 +1,6 @@ 1.4 --- etherboot-5.4.3/src/arch/i386/prefix/liloprefix.S 1.5 +++ etherboot-5.4.3/src/arch/i386/prefix/liloprefix.S 1.6 -@@ -1,92 +1,361 @@ 1.7 +@@ -1,92 +1,393 @@ 1.8 -/* 1.9 - Copyright (C) 2000, Entity Cyber, Inc. 1.10 - 1.11 @@ -85,15 +85,47 @@ 1.12 - a .lilo file is dd'ed to a floppy), print an error message. 1.13 -*/ 1.14 +.equ SYSSEG, 0x1000 /* system loaded at SYSSEG<<4 */ 1.15 - 1.16 --bootsector: 1.17 -- jmp $BOOTSEG, $go - _prefix /* reload cs:ip to match relocation addr */ 1.18 ++ 1.19 + .org 0 1.20 + .arch i386 1.21 + .text 1.22 + .section ".prefix", "ax", @progbits 1.23 + .code16 1.24 + 1.25 +-bootsector: 1.26 +- jmp $BOOTSEG, $go - _prefix /* reload cs:ip to match relocation addr */ 1.27 ++ call here 1.28 ++here: 1.29 ++ pop %ax 1.30 ++ cmpw $0x103, %ax /* COM entry point is cs:0x100 */ 1.31 ++ jne bootsector 1.32 ++/* We need a real mode stack that won't be stomped on by Etherboot 1.33 ++ which starts at 0x20000. Choose something that's sufficiently high, 1.34 ++ but not in DOC territory. Note that we couldn't do this in a real 1.35 ++ .com program since stack variables are in the same segment as the 1.36 ++ code and data, but this isn't really a .com program, it just looks 1.37 ++ like one to make DOS load it into memory. It still has the 64kB 1.38 ++ limitation of .com files though. */ 1.39 ++#define STACK_SEG 0x7000 1.40 ++#define STACK_SIZE 0x4000 1.41 ++ /* Set up temporary stack */ 1.42 ++ movw $STACK_SEG, %ax 1.43 ++ movw %ax, %ss 1.44 ++ movw $STACK_SIZE, %sp 1.45 + 1.46 ++ pushl $0 /* No parameters to preserve for exit path */ 1.47 ++ pushw $0 /* Dummy return address - use prefix_exit */ 1.48 ++ 1.49 ++ /* Calculate segment address of image start */ 1.50 ++ pushw %cs 1.51 ++ popw %ax 1.52 ++ addw $(0x100/16), %ax 1.53 ++ pushw %ax 1.54 ++ pushw $_start 1.55 ++ /* Calculated lcall to _start with %cs:0000 = image start */ 1.56 ++ lret 1.57 ++ 1.58 ++bootsector: 1.59 + jmp $BOOTSEG, $go /* reload cs:ip to match relocation addr */ 1.60 go: 1.61 - movw $0x2000, %di /* 0x2000 is arbitrary value >= length 1.62 @@ -388,8 +420,8 @@ 1.63 + movb $4, %cl 1.64 + movb $0x0e, %ah /* write char, tty mode */ 1.65 + movw $0x0007, %bx /* page 0, attribute 7 (normal) */ 1.66 -+ call print_digit 1.67 -+ call print_digit 1.68 ++ call print_digit2 1.69 ++print_digit2: 1.70 + call print_digit 1.71 +/* fall through */ 1.72 +print_digit: 1.73 @@ -419,7 +451,7 @@ 1.74 + .byte 36,18,15,9 1.75 1.76 +msg1: 1.77 -+ .ascii "Loading ROM image" 1.78 ++ .ascii "Loading ROM" 1.79 +msg1end: 1.80 1.81 .org 497