#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  asm("TEMP D0-D1/A0-A1");
  static int Failures = 0;
  void Pass(void) {
    Printstring(_imp_str_literal(" -- Pass"));
    Newline();
  }
  void Fail(void) {
    Printstring(_imp_str_literal(" -- FAIL"));
    Newline();
    Failures++;
  }
  void Reg0(void) {
    int R1;
    int R2;
    Printstring(_imp_str_literal("Basic"));
    R2 = 0;
    for (R1 = 1; R1 <= 10; R1++) R2 += R1;
    if (R2 == 55)
      Pass();
    else
      Fail();
  }
  static unsigned char A[10 /*1:10*/] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  static short Aa[2 /*1:2*/] = {100, 200};
  void Reg1(void) {
    int R1;
    int R2;
    Printstring(_imp_str_literal("Data registers"));
    R1 = 0;
    if (!R1)
      Pass();
    else
      Fail();
    R1++;
    if (R1 == 1)
      Pass();
    else
      Fail();
    R1 -= 3;
    if (R1 == -2)
      Pass();
    else
      Fail();
    R1 = -R1;
    if (R1 == 2)
      Pass();
    else
      Fail();
    R1 = ~R1;
    if (R1 == -3)
      Pass();
    else
      Fail();
    R1 += R1;
    if (R1 == -6)
      Pass();
    else
      Fail();
    R1 = R1 * R1;
    if (R1 == 36)
      Pass();
    else
      Fail();
    R1 = R1 / 2;
    if (R1 == 18)
      Pass();
    else
      Fail();
    R1 = R1 | 3;
    if (R1 == 19)
      Pass();
    else
      Fail();
    R1 = R1 ^ 6;
    if (R1 == 21)
      Pass();
    else
      Fail();
    R1 = R1 & 15;
    if (R1 == 5)
      Pass();
    else
      Fail();
    R1--;
    if (R1 == -4)
      Pass();
    else
      Fail();
    R2 = 2;
    R1 += R2;
    if (R1 == -2)
      Pass();
    else
      Fail();
    R1 -= R2;
    if (R1 == -4)
      Pass();
    else
      Fail();
    R1 -= R2;
    if (R1 == 6)
      Pass();
    else
      Fail();
    R1 = R1 * R2;
    if (R1 == 12)
      Pass();
    else
      Fail();
    R1 = R2 * R1;
    if (R1 == 24)
      Pass();
    else
      Fail();
    R1 = R2 * R2;
    if (R1 == 4)
      Pass();
    else
      Fail();
    R1 = R1 & (1 - R1);
    if (R1 == 4)
      Pass();
    else
      Fail();
    R1 = (R1 | 32) + '0';
    if (R1 == 84)
      Pass();
    else
      Fail();
    R1 += R1 | 32;
    if (R1 == 200)
      Pass();
    else
      Fail();
    R1 = (unsigned)R1 >> 6;
    if (R1 == 3)
      Pass();
    else
      Fail();
    R1 = A[R1];
    if (R1 == 3)
      Pass();
    else
      Fail();
    R1 = Aa[R1 - 1];
    if (R1 == 200)
      Pass();
    else
      Fail();
  }
  void Reg2(void) {
    int R1;
    int R2;
    Printstring(_imp_str_literal("Address registers for data"));
    R1 = 0;
    if (!R1)
      Pass();
    else
      Fail();
    R1++;
    if (R1 == 1)
      Pass();
    else
      Fail();
    R1 -= 3;
    if (R1 == -2)
      Pass();
    else
      Fail();
    R1 = -R1;
    if (R1 == 2)
      Pass();
    else
      Fail();
    R1 = ~R1;
    if (R1 == -3)
      Pass();
    else
      Fail();
    R1 += R1;
    if (R1 == -6)
      Pass();
    else
      Fail();
    R1 = R1 * R1;
    if (R1 == 36)
      Pass();
    else
      Fail();
    R1 = R1 / 2;
    if (R1 == 18)
      Pass();
    else
      Fail();
    R1 = R1 | 3;
    if (R1 == 19)
      Pass();
    else
      Fail();
    R1 = R1 ^ 6;
    if (R1 == 21)
      Pass();
    else
      Fail();
    R1 = R1 & 15;
    if (R1 == 5)
      Pass();
    else
      Fail();
    R1--;
    if (R1 == -4)
      Pass();
    else
      Fail();
    R2 = 2;
    R1 += R2;
    if (R1 == -2)
      Pass();
    else
      Fail();
    R1 -= R2;
    if (R1 == -4)
      Pass();
    else
      Fail();
    R1 -= R2;
    if (R1 == 6)
      Pass();
    else
      Fail();
    R1 = R1 * R2;
    if (R1 == 12)
      Pass();
    else
      Fail();
    R1 = R2 * R1;
    if (R1 == 24)
      Pass();
    else
      Fail();
    R1 = R2 * R2;
    if (R1 == 4)
      Pass();
    else
      Fail();
    R1 = R1 & (1 - R1);
    if (R1 == 4)
      Pass();
    else
      Fail();
    R1 = (R1 | 32) + '0';
    if (R1 == 84)
      Pass();
    else
      Fail();
    R1 += R1 | 32;
    if (R1 == 200)
      Pass();
    else
      Fail();
    R1 = (unsigned)R1 >> 6;
    if (R1 == 3)
      Pass();
    else
      Fail();
    R1 = A[R1];
    if (R1 == 3)
      Pass();
    else
      Fail();
    R1 = Aa[R1 - 1];
    if (R1 == 200)
      Pass();
    else
      Fail();
  }
  void Reg3(void) {
    unsigned char *Bn;
    short *Sn;
    Printstring(_imp_str_literal("Name assignment & modification"));
    Bn = &A[4];
    if (*Bn == 4)
      Pass();
    else
      Fail();
    Bn = Bn;
    if (*Bn == 5)
      Pass();
    else
      Fail();
    Bn = Bn;
    if (*Bn == 10)
      Pass();
    else
      Fail();
    Sn = &Aa[2];
    if (*Sn == 200)
      Pass();
    else
      Fail();
    Sn = Sn;
    if (*Sn == 100)
      Pass();
    else
      Fail();
  }
  Openoutput(1, _imp_str_literal("JOURNAL"));
  Reg0();
  Reg1();
  Reg2();
  Reg3();
  Selectoutput(0);
  Write(Failures, 1);
  Printstring(_imp_str_literal(" failure(s)"));
  Newline();
  exit(0);
  return (1);
}
