rev |
line source |
pascal@19515
|
1 // This file is distributed under GPL
|
pascal@19515
|
2 //
|
pascal@19515
|
3 // LINLD main() lives here
|
pascal@19515
|
4
|
pascal@19515
|
5 #include "crtl.h"
|
pascal@19515
|
6 #include "common.h"
|
pascal@23996
|
7 #include "iso9660.h"
|
pascal@19515
|
8
|
pascal@23996
|
9 extern char bzimagestr[];
|
pascal@23996
|
10 const char* cmdstr[4] = {"auto",bzimagestr,NULL,NULL};
|
pascal@19515
|
11
|
pascal@19515
|
12 inline void syntax() {
|
pascal@19515
|
13 die("Syntax:" NL
|
pascal@24578
|
14 "LINLD [image=file] [initrd=files] [vga=mode] [root=num] [mem=topLoad] [cl=cmdline] "
|
pascal@24019
|
15 #ifdef ISO9660
|
pascal@24019
|
16 "[iso=file] "
|
pascal@24019
|
17 #endif
|
pascal@24019
|
18 "..." NL
|
pascal@24578
|
19 "\tvga mode: ask,extended,normal or dec/oct/hex number" NL
|
pascal@24578
|
20 "\t-b baseLoad" NL
|
pascal@24578
|
21 #ifdef MINRAM
|
pascal@24578
|
22 "\t-r minRAM" NL
|
pascal@24578
|
23 #endif
|
pascal@24067
|
24 #ifdef CPUTYPE
|
pascal@24584
|
25 "\t-c minCPU\tfamily*256+model" NL
|
pascal@24051
|
26 #endif
|
pascal@24019
|
27 #ifdef CPU64
|
pascal@24584
|
28 "\t-64\t\t64 bits cpu" NL
|
pascal@24019
|
29 #endif
|
pascal@24584
|
30 #ifdef WITH_XMM_ALLOC
|
pascal@24584
|
31 "\t-f\t\tskip XMMS alloc" NL
|
pascal@24584
|
32 #endif
|
pascal@24584
|
33 #ifdef QUICK_BOOT
|
pascal@24584
|
34 # ifdef VCPI
|
pascal@24584
|
35 "\t-v\t\tV86 mode" NL
|
pascal@24584
|
36 # endif
|
pascal@24584
|
37 "\t-q\t\tskip shutdown" NL
|
pascal@24584
|
38 #endif
|
pascal@24584
|
39 "Defaults:\t"
|
pascal@24584
|
40 "image=bzImage "
|
pascal@24584
|
41 "mem=256m "
|
pascal@24584
|
42 "cl=auto "
|
pascal@24584
|
43 "-b 1088k" NL
|
pascal@24584
|
44 "Use quotes \"cl=...\" for spaces in cmdline"
|
pascal@24584
|
45 ", cl=@filename to get it from a file"
|
pascal@19515
|
46 #if 1
|
pascal@19515
|
47 NL NL "Examples:" NL
|
pascal@24603
|
48 "LINLD "
|
pascal@24564
|
49 #ifdef MINRAM
|
pascal@24564
|
50 "-r 96m "
|
pascal@24564
|
51 #endif
|
pascal@24067
|
52 #ifdef CPUTYPE
|
pascal@24584
|
53 "-c 0x600 "
|
pascal@24067
|
54 #endif
|
pascal@24584
|
55 "initrd=rootfs.gz,mycfg.gz "
|
pascal@23890
|
56 "\"cl=root=/dev/null video=-32\""
|
pascal@24603
|
57 NL "LINLD memtest"
|
pascal@24603
|
58 NL "LINLD @linld.cmd"
|
pascal@19515
|
59 #endif
|
pascal@19515
|
60 );
|
pascal@19515
|
61 }
|
pascal@19515
|
62
|
pascal@19515
|
63 int main(int argc, char *argv[]) {
|
pascal@19571
|
64
|
pascal@19571
|
65 (void) argc;
|
pascal@19571
|
66
|
pascal@21569
|
67 ((u16*) &base_himem)[1] |= (_1m+_64k)>>16; // base_himem = _1m+_64k
|
pascal@19515
|
68 puts("LINLD v" VERSION_STR "+");
|
pascal@19515
|
69
|
pascal@19538
|
70 // Parse command line
|
pascal@23994
|
71 if (!*++argv) syntax();
|
pascal@23992
|
72 const char **clp = &cmdline;
|
pascal@23994
|
73 do {
|
pascal@24019
|
74 #ifdef CPU64
|
pascal@21984
|
75 if ((*(u16 *)*argv|2) == 0x362F) { // -64 /64
|
pascal@24051
|
76 if (cpuhaslm() == 0) exit();
|
pascal@21984
|
77 }
|
pascal@24019
|
78 #endif
|
pascal@24564
|
79 if (argstr(*argv,"cl|image|initrd" CMDSTR_EXTRA,clp) == (int) clp) continue;
|
pascal@24584
|
80 if (argnum(*argv,"root|vga|mem|-b|" CMDNUM_EXTRA
|
pascal@24584
|
81 #ifdef WITH_XMM_ALLOC
|
pascal@24584
|
82 "-f~"
|
pascal@24584
|
83 #endif
|
pascal@24067
|
84 ,&root_dev) >= (int) &base_himem) continue;
|
pascal@23992
|
85 if (fileexist(*argv) != -1) {
|
pascal@21984
|
86 kernel_name=*argv;
|
pascal@23992
|
87 continue;
|
pascal@23992
|
88 }
|
pascal@24022
|
89 *clp = (const char *) heap_top +1;
|
pascal@24022
|
90 strcatb((const char *) heap_top,*argv);
|
pascal@23994
|
91 } while (*++argv);
|
pascal@24564
|
92 #ifdef MINRAM
|
pascal@24578
|
93 if ((minram>>16) > (memtop()>>16)) exit();
|
pascal@24564
|
94 #endif
|
pascal@24067
|
95 #ifdef CPUTYPE
|
pascal@24067
|
96 if (mincpu > cputype) exit();
|
pascal@24067
|
97 #endif
|
pascal@24564
|
98
|
pascal@23992
|
99 puts(*clp);
|
pascal@24022
|
100 asm{
|
pascal@24022
|
101 xchg ax,bx
|
pascal@24022
|
102 mov bx,offset _heap_top
|
pascal@24022
|
103 cmp ax,[bx]
|
pascal@24022
|
104 jc skip
|
pascal@24022
|
105 mov [bx],ax
|
pascal@24022
|
106 }
|
pascal@24022
|
107 skip:
|
pascal@24019
|
108 #ifdef ISO9660
|
pascal@23996
|
109 if (isofile) setiso(isofile);
|
pascal@24019
|
110 #endif
|
pascal@23992
|
111 set_cmdline(*clp);
|
pascal@23992
|
112 load_kernel();
|
pascal@23992
|
113 load_initrd();
|
pascal@24022
|
114 //boot_kernel();
|
pascal@19515
|
115
|
pascal@19515
|
116 // Let compiler be happy
|
pascal@23996
|
117 return _AX;
|
pascal@19515
|
118 }
|