/* This will convert the contents of the Kickstart ROM
   into Motorola S record files. The files can then be
   downloaded and burned into four 512 kilobit EPROMS.
   This can only be of any use, if you have an EPROMmer
   at your disposal, which understands Motorola S format.

   usage: eprom 1 will create 1mot even EPROM FC0000 - FDFFFE
          eprom 2 will create 2mot odd  EPROM FC0001 - FDFFFF
          eprom 3 will create 3mot even EPROM FE0000 - FFFFFE
          eprom 4 will create 4mot odd  EPROM FE0001 - FFFFFF

   All four files should be exactly 155118 bytes.
   This was compiled with Manx Aztec 3.6a

   written by:
                E. Lenz
                Johann-Fichte-Strasse 11
                8 Munich 40
                Germany                                          */

#include <stdio.h>

int i;
char line[80];
int *adr1;

void usage()
{ puts("USAGE: eprom <1-4>\n");
  exit(0);
}

void file1(s)
char *s;
{ printf("Can't open %s\n",s);
  exit(0);
}

void convert(b)
unsigned char b;
{ line[i++]=(b>>4)+'0'+7*((b>>4)>9);
  line[i++]=(b&0xf)+'0'+7*((b&0xf)>9);
}

char *makename(s)
char *s;
{  char *c;

   c=s;
   while ((*c++!='.') && (*c));
   *c=0;
   strcat(s,"mot");
}

main(argc,argv)
int argc;
char *argv[];
{ FILE *g;
  unsigned char b1;
  unsigned char sum,n;
  unsigned int adr=0;
  long int num = 0x10000;

  if (argc != 2) usage();
  adr1 = 0;
  if (strcmp(argv[1],"1")==0) adr1 = 0xfbffff;
  if (strcmp(argv[1],"2")==0) adr1 = 0xfc0000;
  if (strcmp(argv[1],"3")==0) adr1 = 0xfdffff;
  if (strcmp(argv[1],"4")==0) adr1 = 0xfe0000;
  if (!adr1) usage();
  if (!(g=fopen(makename(argv[1]),"w"))) file1(argv[1]);
  while (num)
     { line[0]='S';
       line[1]='1';
       i=4;
       convert(adr>>8);
       convert(adr&0xff);
       sum = (adr>>8) + adr&0xff;
       for (n=3;n<33;n++)
           { b1 = *adr1;
#asm
             add.l #2,_adr1
#endasm
             sum += b1;
             convert(b1);
             if (!--num) break;
           }
       if (n!=33) n++;
       sum += n;
       convert(0xff-sum);
       line[i]=0;
       i=2;
       convert(n);
       if (fprintf(g,"%s\n",line)<0) break;
       printf("%s\n",line);
       adr += n-3;
     }
  fprintf(g,"S9030000FC\n");
  fclose(g);
}
