wok annotate linld/stuff/src/LINLD.CPP @ rev 24051

Add veracrypt
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon May 24 11:24:29 2021 +0000 (2021-05-24)
parents 217c02cbbe8d
children 06547d8cf241
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 }