Adding upstream version 4.00~pre53+dfsg.
[syslinux-debian/hramrach.git] / core / cmdline.inc
blob7fa5381683babf494ac1d894a91effada13697e9
1 ;; -----------------------------------------------------------------------
2 ;;
3 ;;   Copyright 2003-2009 H. Peter Anvin - All Rights Reserved
4 ;;   Copyright 2009 Intel Corporation; author: H. Peter Anvin
5 ;;
6 ;;   This program is free software; you can redistribute it and/or modify
7 ;;   it under the terms of the GNU General Public License as published by
8 ;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
9 ;;   Boston MA 02111-1307, USA; either version 2 of the License, or
10 ;;   (at your option) any later version; incorporated herein by reference.
12 ;; -----------------------------------------------------------------------
15 ;; cmdline.inc
17 ;; Common routine to assemble [null-terminated] command line into
18 ;; real_mode_seg:cmd_line_here.
19 ;; Not used by plain kernel due to BOOT_IMAGE= etc.
22                 section .text16
25 ; Assumes DS == CS
27 make_plain_cmdline:
28                 push es
29                 ; ui.inc has already copied any APPEND options
30                 mov ax,real_mode_seg
31                 mov es,ax
33                 mov di,[CmdLinePtr]
34                 call do_ip_append
36                 mov si,[CmdOptPtr]
38                 call strcpy
40                 dec di
41                 mov [CmdLinePtr],di
42                 mov byte [es:di],0              ; Null-terminate
44                 pop es
45                 ret
48 ; Actual IPAppend strings...
50 %if IS_PXELINUX
51                 extern IPOption, BOOTIFStr
53                 section .data16
54                 alignz 2
55 IPAppends       dw IPOption
56                 dw BOOTIFStr
57 numIPAppends    equ ($-IPAppends)/2
58 %else
59 IPAppends       equ 0
60 numIPAppends    equ 0
61 %endif
64 ; Handle "ipappend" strings, if applicable
66 ; Assumes DS == CS; pushes output to ES:DI
68                 section .text16
70 do_ip_append:
71 %ifndef DEPEND
72  %if numIPAppends > 0
73                 push cx
74                 push bx
75                 push si
77                 mov bx,IPAppends
78                 mov cx,[IPAppend]
79                 and cx,(1 << numIPAppends)-1
80 .loop:
81                 jcxz .done
82                 mov si,[bx]
83                 inc bx
84                 inc bx
85                 test cl,1
86                 jz .not_this
88                 call strcpy
89                 mov byte [es:di-1],' '  ; Replace final null with space
90 .not_this:
91                 shr cx,1
92                 jmp .loop
93 .done:
94                 pop si
95                 pop bx
96                 pop cx
97  %endif
98 %endif
99                 ret