9 months ago - Rocket - Direct link
Stationeers implementation of MIPS is relatively MIPS compliant and implements all the core MIPS functionality. Like many, if not all, chipsets it implements some of its own new instructions that are related to its special use case. In the case of Stationeers, this is mainly instructions provided for batch conducting instructions.

So I don't think it's fair, or useful, to say stationeers is "not the same as real-world MIPS". In fact, I would say such a statement is quite wrong. MIPS is not a specific set of instructions, for example if you look at a variety of MIPS implementations currently in use at major universities you will see some significant differences. It is a family of implementations based around a common approach of a very reduced instruction set to control a processor. Many of the core instructions used in MIPS in stationeers, are close to if not exactly the same in most MIPS family implementations.

While some good answers to the OPs questions, nobody has touched on an explanation of *why* there is no else. The simple answer is that there *is* else, but that there is no short hand for IF ... ELSE. This is because underneath any IF... ELSE in programming, there are a series of instructions. With MIPS, you are operating at a lower level from high level programming - so you will need to include the logic that, combined, will reach IF.. ELSE.

The following offers a good outline of how jumps (such as IF ... ELSE) can be decomplied and represented in MIPS instructions:

https://fog.ccsf.edu/~gboyd/cs270/online/mipsII/if.html
9 months ago - Rocket - Direct link
I think the key to remember is that low-level languages are about getting the processor to do something, not a combined bunch of somethings *unless* the processor has been predefined a way to do a bunch of things together.

Think about MIPS more as the processor is always going to execute the next line, so if you don't want that - you need to do something.

If you take AND in the traditional sense, it's a *boolean* or *binary* operation, in c notation | or || are actually slightly different, for example.

So if you want AND functionality, you need to prepare the binary yourself. Which is, actually, what the compiler will be doing in a higher level language when you use such syntax in programming. If you study the instructions involved in, say, a simulator when using c# or C++ you can see how programming *commands* turn into many *instructions* for the CPU.
9 months ago - Rocket - Direct link
This the change log for the update of the various binary instructions to be in line with the bitshifting update:

https://steamcommunity.com/games/544550/announcements/detail/3681176566145924827

  • Added NOT bitwise operation. Performs a bitwise logical NOT operation flipping each bit of the input value, resulting in a binary complement. If a bit is 1, it becomes 0, and if a bit is 0, it becomes 1.
  • Changed AND to be a bitwise and not a boolen operation. In most circumstances, this will not cause any issues with scripts. Performs a bitwise logical AND operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 1, the resulting bit is set to 1. Otherwise the resulting bit is set to 0.
  • Changed OR to be a bitwise and not a boolen operation. In most circumstances, this will not cause any issues with scripts. Performs a bitwise logical OR operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If either bit is 1, the resulting bit is set to 1. If both bits are 0, the resulting bit is set to 0.
  • Changed XOR to be a bitwise and not boolen operation. In most circumstances, this will not cause any issues with scripts. Performs a bitwise logical XOR (exclusive OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If the bits are different (one bit is 0 and the other is 1), the resulting bit is set to 1. If the bits are the same (both 0 or both 1), the resulting bit is set to 0.
  • Changed NOR to be a bitwise and not boolen operation. In most circumstances, this will not cause any issues with scripts. Performs a bitwise logical NOR (NOT OR) operation on the binary representation of two values. Each bit of the result is determined by evaluating the corresponding bits of the input values. If both bits are 0, the resulting bit is set to 1. Otherwise, if at least one bit is 1, the resulting bit is set to 0.