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@24013
|
11 #ifdef QUICK_BOOT
|
pascal@24022
|
12 extern u32 cmdnum[7];
|
pascal@24013
|
13 #else
|
pascal@24022
|
14 extern u32 cmdnum[5];
|
pascal@24013
|
15 #endif
|
pascal@19515
|
16
|
pascal@19515
|
17 inline void syntax() {
|
pascal@19515
|
18 die("Syntax:" NL
|
pascal@24019
|
19 "LINLD [image=file] [initrd=files] [vga=mode] [root=num] [mem=max] [cl=cmdline] "
|
pascal@24019
|
20 #ifdef ISO9660
|
pascal@24019
|
21 "[iso=file] "
|
pascal@24019
|
22 #endif
|
pascal@24019
|
23 "..." NL
|
pascal@19515
|
24 "vga mode: ask,extended,normal or dec/oct/hex number" NL
|
pascal@24051
|
25 #ifdef CPU32
|
pascal@24051
|
26 "-32 for 386+" NL
|
pascal@24051
|
27 #endif
|
pascal@24019
|
28 #ifdef CPU64
|
pascal@21984
|
29 "-64 for cpu64 only" NL
|
pascal@24019
|
30 #endif
|
pascal@19515
|
31 "Defaults:" NL
|
pascal@19515
|
32 "\timage=bzImage" NL
|
pascal@19515
|
33 "\tinitrd,vga,root=(void)" NL
|
pascal@19515
|
34 "\tmem=256m" NL
|
pascal@19515
|
35 "\tcl=auto" NL
|
pascal@19580
|
36 "\t-b 1088k" NL
|
pascal@19515
|
37 "Use quotes: \"cl=...\" if you need spaces in cmdline" NL
|
pascal@19538
|
38 "Use cl=@filename to get it from a file"
|
pascal@19515
|
39 #if 1
|
pascal@19515
|
40 NL NL "Examples:" NL
|
pascal@23992
|
41 "\tLINLD "
|
pascal@23992
|
42 "-b 64m "
|
pascal@21569
|
43 "initrd=rootfs4.gz,rootfs3.gz,rootfs2.gz,rootfs1.gz "
|
pascal@23890
|
44 "\"cl=root=/dev/null video=-32\""
|
pascal@24015
|
45 NL "\tLINLD memtest"
|
pascal@19515
|
46 #endif
|
pascal@19515
|
47 );
|
pascal@19515
|
48 }
|
pascal@19515
|
49
|
pascal@19515
|
50 int main(int argc, char *argv[]) {
|
pascal@19571
|
51
|
pascal@19571
|
52 (void) argc;
|
pascal@19571
|
53
|
pascal@21569
|
54 ((u16*) &base_himem)[1] |= (_1m+_64k)>>16; // base_himem = _1m+_64k
|
pascal@19515
|
55 puts("LINLD v" VERSION_STR "+");
|
pascal@19515
|
56
|
pascal@19538
|
57 // Parse command line
|
pascal@23994
|
58 if (!*++argv) syntax();
|
pascal@23992
|
59 const char **clp = &cmdline;
|
pascal@23994
|
60 do {
|
pascal@24051
|
61 #ifdef CPU32
|
pascal@24051
|
62 if ((*(u16 *)*argv|2) == 0x332F) { // -32 /32
|
pascal@24051
|
63 extrn char cpu386;
|
pascal@24051
|
64 if (cpu386 == 0) exit();
|
pascal@24051
|
65 }
|
pascal@24051
|
66 #endif
|
pascal@24019
|
67 #ifdef CPU64
|
pascal@21984
|
68 if ((*(u16 *)*argv|2) == 0x362F) { // -64 /64
|
pascal@24051
|
69 if (cpuhaslm() == 0) exit();
|
pascal@21984
|
70 }
|
pascal@24019
|
71 #endif
|
pascal@24019
|
72 #ifdef ISO9660
|
pascal@23996
|
73 if (argstr(*argv,"cl|image|initrd|iso",clp) == (int) clp) continue;
|
pascal@24019
|
74 #else
|
pascal@24019
|
75 if (argstr(*argv,"cl|image|initrd",clp) == (int) clp) continue;
|
pascal@24019
|
76 #endif
|
pascal@24013
|
77 #ifdef QUICK_BOOT
|
pascal@24014
|
78 if (argnum(*argv,"root|vga|mem|-b|-f~-q~-v~",&root_dev) >= (int) &base_himem) continue;
|
pascal@24013
|
79 #else
|
pascal@24014
|
80 if (argnum(*argv,"root|vga|mem|-b|-f~",&root_dev) >= (int) &base_himem) continue;
|
pascal@24013
|
81 #endif
|
pascal@23992
|
82 if (fileexist(*argv) != -1) {
|
pascal@21984
|
83 kernel_name=*argv;
|
pascal@23992
|
84 continue;
|
pascal@23992
|
85 }
|
pascal@24022
|
86 *clp = (const char *) heap_top +1;
|
pascal@24022
|
87 strcatb((const char *) heap_top,*argv);
|
pascal@23994
|
88 } while (*++argv);
|
pascal@23992
|
89 puts(*clp);
|
pascal@24022
|
90 asm{
|
pascal@24022
|
91 xchg ax,bx
|
pascal@24022
|
92 mov bx,offset _heap_top
|
pascal@24022
|
93 cmp ax,[bx]
|
pascal@24022
|
94 jc skip
|
pascal@24022
|
95 mov [bx],ax
|
pascal@24022
|
96 }
|
pascal@24022
|
97 skip:
|
pascal@24019
|
98 #ifdef ISO9660
|
pascal@23996
|
99 if (isofile) setiso(isofile);
|
pascal@24019
|
100 #endif
|
pascal@23992
|
101 set_cmdline(*clp);
|
pascal@23992
|
102 load_kernel();
|
pascal@23992
|
103 load_initrd();
|
pascal@24022
|
104 //boot_kernel();
|
pascal@19515
|
105
|
pascal@19515
|
106 // Let compiler be happy
|
pascal@23996
|
107 return _AX;
|
pascal@19515
|
108 }
|