instruction.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #ifndef CINSTRUCTION_H
  2. #define CINSTRUCTION_H
  3. #include <stdint.h>
  4. enum Command : uint16_t {
  5. CREATE,
  6. MOVE,
  7. DIE,
  8. TRANS,
  9. RTRANS,
  10. TURN,
  11. JUMP,
  12. AJUMP,
  13. BJUMP,
  14. SCAN,
  15. FARSCAN,
  16. SET,
  17. ADD,
  18. SUB,
  19. MUL,
  20. DIV,
  21. MOD,
  22. MIN,
  23. MAX,
  24. RANDOM,
  25. IF,
  26. IFN,
  27. IFG,
  28. IFL,
  29. IFGE,
  30. IFLE,
  31. INIT,
  32. BREAK,
  33. RESUME,
  34. SEIZE,
  35. SLEEP,
  36. QUIT,
  37. };
  38. enum Params : uint16_t {
  39. LLL,
  40. LLV,
  41. LVL,
  42. LVV,
  43. VLL,
  44. VLV,
  45. VVL,
  46. VVV,
  47. N = LLL,
  48. L = LLL,
  49. V = VLL,
  50. LL = LLL,
  51. LV = LVL,
  52. VL = VLL,
  53. VV = VVV,
  54. };
  55. enum Variables {
  56. Local_0,
  57. Local_1,
  58. Local_2,
  59. Local_3,
  60. Local_4,
  61. Local_5,
  62. Local_6,
  63. Local_7,
  64. Local_8,
  65. Local_9,
  66. Local_10,
  67. Local_11,
  68. Local_12,
  69. Local_13,
  70. Local_14,
  71. Local_15,
  72. Local_16,
  73. Local_17,
  74. Local_18,
  75. Local_19,
  76. LocalActive,
  77. LocalBanks,
  78. LocalInstrSet,
  79. LocalMobile,
  80. LocalAge,
  81. LocalTasks,
  82. LocalGeneration,
  83. LocalId,
  84. RemoteActive,
  85. RemoteBanks,
  86. RemoteInstrSet,
  87. RemoteMobile,
  88. RemoteAge,
  89. RemoteTasks,
  90. RemoteGeneration,
  91. GlobalPub,
  92. GlobalTeam,
  93. GlobalOwn,
  94. GlobalOthers,
  95. GlobalFields,
  96. GlobalTime,
  97. GlobalTimeout,
  98. };
  99. enum Error {
  100. NoError, // No error
  101. EliminationTrigger, // Elimination Trigger released
  102. DataHunger, // Data Hunger (Bank 1 empty and executed)
  103. DivisionByZero, // Division by zero
  104. InvalidBankNumber, // Invalid bank number (e.g. in TRANS or BJUMP)
  105. HigherInstructionSetRequired, // Higher Instruction Set required
  106. MobilityRequired, // Mobility required
  107. DieExecuted, // DIE executed
  108. InvalidParameter , // Invalid parameter (e.g. CREATE x, -1, x)
  109. Unemployment, // No more tasks left in a robot (Unemployment)
  110. InstructionDurationTooHigh, // Instruction duration too high (i.e. > MaxInstrDur)
  111. };
  112. using Parameter = int32_t;
  113. struct Instruction {
  114. Command command = DIE;
  115. Params params = N;
  116. Parameter a = 0;
  117. Parameter b = 0;
  118. Parameter c = 0;
  119. Instruction(Command _command, Params _params = N, Parameter _a = 0, Parameter _b = 0, Parameter _c = 0);
  120. };
  121. #endif // CINSTRUCTION_H