home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * *
- * LoadKickC0 V1.1 -- Copyright 1992 by Matthias Scheler *
- * *
- * This program may be freely copied, as long as all copyright *
- * notices are left intact and unchanged. *
- * *
- ****************************************************************************/
-
- #include <exec/memory.h>
- #include <exec/execbase.h>
-
- #include <proto/dos.h>
- #include <proto/exec.h>
-
- #include <stdlib.h>
-
- char *VersionString = "$VER: LoadKickC0 V1.1";
-
- extern struct ExecBase *SysBase;
-
- #define EXTMEMSTART 0xC00000L
- #define EXTMEMMINSIZE (EXTMEMSTART+0x80000L)
-
- #define KICK20SIZE 0x080000L
- #define KICKVERSID 0x2500AFL
-
- #define DELAY 3L
-
- extern void __stdargs StartKick(ULONG *,ULONG *);
- extern void __stdargs printf(char *,...);
-
- BPTR stdout;
-
- void main(long argc,char **argv)
-
- {
- BPTR Handle;
- ULONG KickFileHeader[2];
- ULONG *KickImage;
-
- stdout=Output();
-
- if (argc==0L) exit (20L);
- printf ("LoadKickC0 V1.1 -- (c) 1992 by Matthias Scheler\n\n");
-
- if (SysBase->LibNode.lib_Version>34)
- {
- printf ("LoadKickC0 will only run under Kickstart 1.2/1.3\n");
- exit (5L);
- }
-
- if ((((ULONG)SysBase&0xFFFF0000L)!=EXTMEMSTART)||
- ((ULONG)SysBase->MaxExtMem<EXTMEMMINSIZE))
- {
- printf ("You must have a 1 MB or greater memory board at $%lx\n",EXTMEMSTART);
- exit (10);
- }
-
- if (argc<2L)
- {
- printf ("Usage: LoadKickC0 KICKFILE\n");
- exit (10);
- }
-
- if ((Handle=Open(argv[1],MODE_OLDFILE))==NULL)
- {
- printf ("Can't open %s\n",argv[1]);
- exit (10);
- }
- if (Read(Handle,(char *)KickFileHeader,8L)!=8L)
- {
- Close (Handle);
- printf ("Error while reading %s\n",argv[1]);
- exit (10);
- }
- if ((KickFileHeader[0]!=0L)||(KickFileHeader[1]!=KICK20SIZE))
- {
- Close (Handle);
- printf ("%s contains a bad header\n",argv[1]);
- exit (10);
- }
- if ((KickImage=AllocMem(KICK20SIZE,MEMF_PUBLIC))==NULL)
- {
- Close (Handle);
- printf ("Out of memory\n");
- exit (10);
- }
- if (Read(Handle,(char *)KickImage,KICK20SIZE)!=KICK20SIZE)
- {
- FreeMem (KickImage,KICK20SIZE);
- Close (Handle);
- printf ("Error while reading %s\n",argv[1]);
- exit (10);
- }
- Close (Handle);
- if (KickImage[3]!=KICKVERSID)
- {
- FreeMem (KickImage,KICK20SIZE);
- printf ("Kickstart must be V%d.%d\n",KICKVERSID);
- exit (10);
- }
-
- printf ("Rebooting in %ld seconds press <CTRL>-C to abort\n",DELAY);
- Delay (DELAY*TICKS_PER_SECOND);
- if (SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C)
- {
- FreeMem (KickImage,KICK20SIZE);
- printf ("\naborted\n");
- exit (0L);
- }
-
- StartKick(KickImage,(ULONG *)EXTMEMSTART);
- }
-