package tmcm.xComputer;



final class Converter {
   short data;
   void set(short d) {
      data = d;
   }
   short getSigned() {
      return data;
   }
   int getUnsigned() {
      if (data >= 0)
         return data;
      else
         return data + 0x10000;
   }
   String getAscii() {
      int ch1 = (data >> 8) & 0xFF;
      int ch2 = (data & 0xFF);
      String s1,s2;
      if (ch1 <= 32 || ch1 > 127)
         s1 = "<#" + ch1 + ">";
      else
         s1 = String.valueOf(((char)ch1));
      if (ch2 <= 32 || ch2 > 127)
         s2 = "<#" + ch2 + ">";
      else
         s2 = String.valueOf(((char)ch2));
      return s1 + s2;
   }
   int getMode() {
      return (data & 0xC000) >> 14;
   }
   int getData() {
      return data & 0x3FF;
   }
   int getInstruction() {
      return (data >> 10) & 15;
   }
   String getAssembly() {
      int i = getInstruction();
      int d;
      switch (getMode()) {
         case Globals.direct:
            d = getData();
            if (d != 0 || Globals.hasData.get(i))
               return Globals.InstructionName[i] + " " + d;
            else
               return Globals.InstructionName[i];
         case Globals.indirect:
            return Globals.InstructionName[i] + "-I " + getData();
         case Globals.constant:
            return Globals.InstructionName[i] + "-C " + getData();
         case Globals.illegal:
            return Globals.InstructionName[i] + "-? " + getData();
         default:
            return null;
      }
   }
}


