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

linld: do not confuse memtop and topload
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Feb 27 11:43:07 2022 +0000 (2022-02-27)
parents c11594098e34
children 77cae427d6b7
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@24578 25 "\t-m minCPU family*256+model" NL
pascal@24051 26 #endif
pascal@24019 27 #ifdef CPU64
pascal@24578 28 "\t-64 cpu64 only" NL
pascal@24019 29 #endif
pascal@24578 30 "Defaults:"
pascal@24578 31 "\timage=bzImage"
pascal@24578 32 "\tmem=256m"
pascal@24578 33 "\tcl=auto"
pascal@19580 34 "\t-b 1088k" NL
pascal@19515 35 "Use quotes: \"cl=...\" if you need spaces in cmdline" NL
pascal@19538 36 "Use cl=@filename to get it from a file"
pascal@19515 37 #if 1
pascal@19515 38 NL NL "Examples:" NL
pascal@23992 39 "\tLINLD "
pascal@23992 40 "-b 64m "
pascal@24564 41 #ifdef MINRAM
pascal@24564 42 "-r 96m "
pascal@24564 43 #endif
pascal@24067 44 #ifdef CPUTYPE
pascal@24067 45 "-m 0x600 "
pascal@24067 46 #endif
pascal@21569 47 "initrd=rootfs4.gz,rootfs3.gz,rootfs2.gz,rootfs1.gz "
pascal@23890 48 "\"cl=root=/dev/null video=-32\""
pascal@24015 49 NL "\tLINLD memtest"
pascal@24578 50 NL "\tLINLD @args"
pascal@19515 51 #endif
pascal@19515 52 );
pascal@19515 53 }
pascal@19515 54
pascal@19515 55 int main(int argc, char *argv[]) {
pascal@19571 56
pascal@19571 57 (void) argc;
pascal@19571 58
pascal@21569 59 ((u16*) &base_himem)[1] |= (_1m+_64k)>>16; // base_himem = _1m+_64k
pascal@19515 60 puts("LINLD v" VERSION_STR "+");
pascal@19515 61
pascal@19538 62 // Parse command line
pascal@23994 63 if (!*++argv) syntax();
pascal@23992 64 const char **clp = &cmdline;
pascal@23994 65 do {
pascal@24019 66 #ifdef CPU64
pascal@21984 67 if ((*(u16 *)*argv|2) == 0x362F) { // -64 /64
pascal@24051 68 if (cpuhaslm() == 0) exit();
pascal@21984 69 }
pascal@24019 70 #endif
pascal@24564 71 if (argstr(*argv,"cl|image|initrd" CMDSTR_EXTRA,clp) == (int) clp) continue;
pascal@24564 72 if (argnum(*argv,"root|vga|mem|-b|" CMDNUM_EXTRA "-f~"
pascal@24067 73 ,&root_dev) >= (int) &base_himem) continue;
pascal@23992 74 if (fileexist(*argv) != -1) {
pascal@21984 75 kernel_name=*argv;
pascal@23992 76 continue;
pascal@23992 77 }
pascal@24022 78 *clp = (const char *) heap_top +1;
pascal@24022 79 strcatb((const char *) heap_top,*argv);
pascal@23994 80 } while (*++argv);
pascal@24564 81 #ifdef MINRAM
pascal@24578 82 if ((minram>>16) > (memtop()>>16)) exit();
pascal@24564 83 #endif
pascal@24067 84 #ifdef CPUTYPE
pascal@24067 85 if (mincpu > cputype) exit();
pascal@24067 86 #endif
pascal@24564 87
pascal@23992 88 puts(*clp);
pascal@24022 89 asm{
pascal@24022 90 xchg ax,bx
pascal@24022 91 mov bx,offset _heap_top
pascal@24022 92 cmp ax,[bx]
pascal@24022 93 jc skip
pascal@24022 94 mov [bx],ax
pascal@24022 95 }
pascal@24022 96 skip:
pascal@24019 97 #ifdef ISO9660
pascal@23996 98 if (isofile) setiso(isofile);
pascal@24019 99 #endif
pascal@23992 100 set_cmdline(*clp);
pascal@23992 101 load_kernel();
pascal@23992 102 load_initrd();
pascal@24022 103 //boot_kernel();
pascal@19515 104
pascal@19515 105 // Let compiler be happy
pascal@23996 106 return _AX;
pascal@19515 107 }