Răsfoiți Sursa

Add ParseParameterMode function

This function takes an opcode and the index of the parameter, and
returns either POSITION_MODE or IMMEDIATE_MODE.
ApisNecros 1 an în urmă
părinte
comite
a517eb145d
1 a modificat fișierele cu 21 adăugiri și 0 ștergeri
  1. 21 0
      IntComp/ComputerParameterMode.js

+ 21 - 0
IntComp/ComputerParameterMode.js

@@ -1,3 +1,5 @@
+const { DecimalPlaceIsNonZero } = require("./common");
+
 module.exports = {
     /**
      * Position Mode
@@ -13,4 +15,23 @@ module.exports = {
      * is interpretted as its literal value.
      */
     IMMEDIATE_MODE: 1,
+    /**
+     * Parse an opcode to get the Parameter Mode for an operation's parameter
+     *
+     * Note: `parameterIndex` is a 1-based index, not 0-based.
+     *
+     * @example
+     * // POSITION_MODE
+     * const firstParamMode = ComputerParameterMode.ParseParameterMode(1002, 1);
+     * // IMMEDIATE_MODE
+     * const secondParamMode = ComputerParameterMode.ParseParameterMode(1002, 2);
+     *
+     * @param {number} rawOpcode The opcode in memory
+     * @param {number} parameterIndex The index of the parameter in the function arguments
+     * @returns {number} Either POSITION_MODE or IMMEDITATE_MODE
+     */
+    ParseParameterMode: function (rawOpcode, parameterIndex) {
+        if (DecimalPlaceIsNonZero(rawOpcode, parameterIndex + 1)) { return this.IMMEDIATE_MODE; }
+        return this.POSITION_MODE;
+    },
 };