
main()
{
 unsigned int start=0xf80000, ende=0xfbffff;
 unsigned char  *dummy, *loop, testbyte=126, IC, *ICtxt, fehler=0;
 unsigned char U1J=0, U2J=0, U1K=0, U2K=0, U1L=0, U2L=0, U1M=0, U2M=0; 

printf("\f \n\nDieses Programm testet die zusätzlichen Speicher-IC's,\n");
printf("die bei einer \033[1m512kB-KICK-WOM\033[0m-Erweiterung auf die Original-RAM's gelötet \nwerden!\n");

printf("\n( Problem:   Welche der 144 Lötstellen sind mieß gelötet und führen nach z.B.\n");
printf("\t     2 Stunden zum enttäuschenden Absturz? )\n\n");

printf("Um den Speicher testen zu können, muß ein altes \033[1m256kB-OS\033[0m geladen sein!\n");
printf("Also OS 1.2 oder OS 1.3.\n");

printf("\n\t! Dieses Prg. liefert nur dann sinnvolle Ergebnisse,      !\n");
printf("\t! wenn der Schreibschutz des KICK-WOM-RAM \033[1mdeaktiviert\033[0m ist !\n\n");
printf("Und das geht so: \n\n\t\t\t{ <RETURN> for more }\r");

scanf("%c", dummy);

printf("\nOberes Beinchen des Widerstands R129 \n\t\t( rechts neben dem rechten, unteren KICK-RAM-IC )\n");
printf("\t\t\t\t\taus der Platine auslöten.\nDer Widerstand ist jetzt also nur noch mit seinem unteren Beinchen auf der \nPlatine befestigt und das obere Beinchen hängt freischwebend in der Luft.\n");




printf("Nun wird das lose Beinchen über einen Draht mit Pin 4 des IC's U6N \n(\"DAUGCAS\") verbunden.\nDas war's schon. Nun ist der WOM-Schreibschutz lahmgelegt!\n");
printf("Jetzt kann zwar mit diesem Prg. getestet werden,\nladen von OS2 oder OS3 geht aber nicht mehr.\nUm dies zu tun, muß vorher der alte Zustand wieder hergestellt werden.\n");
printf("Wer glaubt, daß er oft wechseln muß oder will, der kann ja einen Umschalter \nverwenden.\n\n\n");

printf("\t\t\t{ Press <RETURN> }\n\n");
scanf("%c", dummy);

printf("\f \n\n\t\tSpeicherTest von $F80000 -> $FBFFFF!\n\n");

/* testbyte=(unsigned char) rand(); */   /* testbyte festlegen */
printf("\t\t\tTestWert: %hu\n", testbyte);

/*
  printf("Soll Speicherbereich mit TestWert initialisiert werden? [j]");
  scanf("%2c", dummy);

  if ( (*dummy == 'j') || (*dummy == 'J') )
*/
{
 printf("\nBeschreibe nun Speicherbereich mit TestWert!\n");
 for(loop=start; loop<=ende; loop++)
  *loop=testbyte;    /* speicher mit testbyte auffüllen */
  printf("O.K.!\n\n");


printf("Der FehlerMinister empfiehlt:\n\t\tPrg. ca. 1 Stunde im Speicher lassen.\n");
printf("\t\tDann SpeicherTest starten.\n"); 
printf("\t\t(Kann auch vorher beliebig oft gestartet werden)\n");

}

for (;;)
{
 printf("\nSpeicherTest mit <RETURN> starten!");
 scanf("%c", dummy);
 printf("Anfang\n\n");

 for (loop=start; loop<=ende; loop++)
   if (*loop!=testbyte) 
   {
    IC=0; fehler=1;
    if ( loop < 0xfa0000 ) 
      IC=2; /* test ob Byte in unterer Hälfte des 256kB-Zusatz-Speicher */

    if ( (long)loop % 2 == 0)
      IC+=4; /* test ob Byte-Adresse gerade */

      if ( ( testbyte &  15 ) != ( *loop &  15 ) )
      {
              /* test ob untere 4 Bit defekt */

       if ( IC==0 ) U2J=1;    /* , ICtxt="U2J"; */
       if ( IC==2 ) U2K=1;    /* , ICtxt="U2K"; */
       if ( IC==4 ) U2L=1;    /* , ICtxt="U2L"; */
       if ( IC==6 ) U2M=1;    /* , ICtxt="U2M"; */

     /*
       if ( (IC >=0) & (IC <= 7) )
         printf("Adresse: $%lx Wert: %3hu -> Fehler in IC '%s' (aufgelötet)\n", loop, *loop, ICtxt ); 
       else printf("IC = %hu\n", IC);
     */
      }

      if ( ( testbyte &  240 ) != ( *loop &  240 ) )
      {
       IC+=1; /* test ob obere 4 Bit defekt */

       if ( IC==1 ) U1J=1;    /* , ICtxt="U1J"; */
       if ( IC==3 ) U1K=1;    /* , ICtxt="U1K"; */
       if ( IC==5 ) U1L=1;    /* , ICtxt="U1L"; */
       if ( IC==7 ) U1M=1;    /* , ICtxt="U1M"; */
     /*
       if ( (IC >=0) & (IC <= 7) )
         printf("Adresse: $%lx Wert: %3hu -> Fehler in IC '%s' (aufgelötet)\n", loop, *loop, ICtxt ); 
       else printf("IC = %hu\n", IC);
     */
      }
   }
   
   if (fehler)
   {
    printf ("\n\n\tAn folgenden IC's sind Fehler aufgetreten!!\n");
    printf ("\t(natürlich sind die aufgelöteten gemeint)\n\n");
    if (U2J) printf("\t                                   U2J\r"); 
    if (U1J) printf("\t                              U1J\r"); 
    if (U2K) printf("\t                         U2K\r"); 
    if (U1K) printf("\t                    U1K\r"); 
    if (U2L) printf("\t               U2L\r"); 
    if (U1L) printf("\t          U1L\r"); 
    if (U2M) printf("\t     U2M\r"); 
    if (U1M) printf("\tU1M\r"); 
    putchar('\n');
    if ( U2J && U1J && U2K && U1K && U2L && U1L && U2M && U1M )
     { printf("\n\n\tAlle defekt????\n");
       printf("\n\tIst der WOM-Schreibschutz noch aktiv?\n");
       printf("\n\tIst der Rest der Schaltung vielleicht defekt?\n");
     }
   }  
   else printf("O.K.\n");

 printf("\n\nEnde\n");

}


} /* main() */

