home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 570.lha / LoadKickC0_v1.0 / src / LoadKickC0.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-09-12  |  2.8 KB  |  113 lines

  1. /****************************************************************************
  2. *                                                                           *
  3. * LoadKickC0 V1.0 -- Copyright 1991 by Matthias Scheler                     *
  4. *                                                                           *
  5. *      This program may be freely copied, as long as all copyright          *
  6. *      notices are left intact and unchanged.                               *
  7. *                                                                           *
  8. ****************************************************************************/
  9.  
  10. #include <exec/memory.h>
  11. #include <exec/execbase.h>
  12.  
  13. #include <proto/dos.h>
  14. #include <proto/exec.h>
  15.  
  16. #include <stdlib.h>
  17.  
  18. extern struct ExecBase *SysBase;
  19.  
  20. #define EXTMEMSTART   0xC00000L
  21. #define EXTMEMMINSIZE (EXTMEMSTART+0x80000L)
  22.  
  23. #define KICK20SIZE    0x080000L
  24. #define KICKVERSID    0x2500AFL
  25.  
  26. #define DELAY 3L
  27.  
  28. extern void __stdargs StartKick(ULONG *,ULONG *);
  29. extern void __stdargs printf(char *,...);
  30.  
  31. BPTR stdout;
  32.  
  33. void main(long argc,char **argv)
  34.  
  35. {
  36.  BPTR Handle;
  37.  ULONG KickFileHeader[2];
  38.  ULONG *KickImage;
  39.  
  40.  stdout=Output();
  41.  
  42.  if (argc==0L) exit (20L);
  43.  printf ("LoadKickC0 V1.0 -- (c) 1991 by Matthias Scheler\n\n");
  44.  
  45.  if (SysBase->LibNode.lib_Version>34)
  46.   {
  47.    printf ("LoadKickC0 will only run under Kickstart 1.2/1.3\n");
  48.    exit (5L);
  49.   }
  50.  
  51.  if ((((ULONG)SysBase&0xFFFF0000L)!=EXTMEMSTART)||
  52.      ((ULONG)SysBase->MaxExtMem<EXTMEMMINSIZE))
  53.   {
  54.    printf ("You must have a 1 MB or greater memory board at $%lx\n",EXTMEMSTART);
  55.    exit (10L);
  56.   }
  57.  
  58.  if (argc<2L)
  59.   {
  60.    printf ("Usage: LoadKickC0 KICKFILE\n");
  61.    exit (10L);
  62.   }
  63.  
  64.  if ((Handle=Open(argv[1],MODE_OLDFILE))==NULL)
  65.   {
  66.    printf ("Can't open %s\n",argv[1]);
  67.    exit (10L);
  68.   }
  69.  if (Read(Handle,(char *)KickFileHeader,8L)!=8L)
  70.   {
  71.    Close (Handle);
  72.    printf ("Error while reading %s\n",argv[1]);
  73.    exit (10L);
  74.   }
  75.  if ((KickFileHeader[0]!=0L)||(KickFileHeader[1]!=KICK20SIZE))
  76.   {
  77.    Close (Handle);
  78.    printf ("%s contains a bad header\n",argv[1]);
  79.    exit (10L);
  80.   }
  81.  if ((KickImage=AllocMem(KICK20SIZE,MEMF_PUBLIC))==NULL)
  82.   {
  83.    Close (Handle);
  84.    printf ("Out of memory\n");
  85.    exit (10L);
  86.   }
  87.  if (Read(Handle,(char *)KickImage,KICK20SIZE)!=KICK20SIZE)
  88.   {
  89.    FreeMem (KickImage,KICK20SIZE);
  90.    Close (Handle);
  91.    printf ("Error while reading %s\n",argv[1]);
  92.    exit (10L);
  93.   }
  94.  Close (Handle);
  95.  if (KickImage[3]!=KICKVERSID)
  96.   {
  97.    FreeMem (KickImage,KICK20SIZE);
  98.    printf ("Kickstart must be V%d.%d\n",KICKVERSID);
  99.    exit (10L);
  100.   }
  101.  
  102.  printf ("Rebooting in %ld seconds press <CTRL>-C to abort\n",DELAY);
  103.  Delay (DELAY*TICKS_PER_SECOND);
  104.  if (SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C)
  105.   {
  106.    FreeMem (KickImage,KICK20SIZE);
  107.    printf ("\naborted\n");
  108.    exit (0L);
  109.   }
  110.  
  111.  StartKick(KickImage,(ULONG *)EXTMEMSTART);
  112. }
  113.