#include <stdio.h>

int main (int argc, char *argv[])
{
  FILE *code;
  char opcode, input, last_input = 0;
  short int result = 0, data = 0, input_end = 0;
  if (argc > 1)
  {
    code = fopen (argv[1], "rb");
    if (code)
    {
      while (1)
      {
        fread (&opcode, 1, 1, code);
        if (feof (code))
          break;
        opcode = (opcode & 15) | ( (opcode & ~15) >> 4);
        switch (opcode)
        {
          case 1:
            result = data;
            break;
          case 2:
            result = !data;
            break;
          case 3:
            result = result && data;
            break;
          case 4:
            result = ! (result && data);
            break;
          case 5:
            result = result || data;
            break;
          case 6:
            result = ! (result || data);
            break;
          case 7:
            result = ! (! (result && data) && (result || data));
            break;
          case 8:
            data = result;
            break;
          case 9:
            data = !result;
            break;
          case 10:
            if (input_end)
              input = last_input;
            else
            {
              input = getchar ();
              if (input == EOF)
              {
                input = last_input;
                input_end = 1;
              }
              else
              {
                input = input & 1;
                last_input = input;
              }
            }
            result = input;
            break;
          case 11:
            putchar ('0' + result);
            break;
          case 12:
            fseek (code, 0, SEEK_SET);
            break;
          case 13:
            fread (&opcode, 1, 1, code);
            break;
          case 14:
            if (!result)
              fread (&opcode, 1, 1, code);
            break;
        }
      }
      return 0;
    }
    puts ("File system error!");
  }
  puts ("Emulator for MC145000B written by Jan 'Manna5' Mleczko.\n\tEMULATE <bin>");
  return 1;
}