/** F0 — Arithmetic monomers: MC_00–MC_07 */ /** MC_00 — ADD8: 8-bit wrapping addition. Result = (a + b) & 0xFF. */ export const add8 = (a: number, b: number): number => (Math.trunc(a) + Math.trunc(b)) & 0xFF; /** MC_01 — SUB8: 8-bit wrapping subtraction. Result = (a - b) & 0xFF. */ export const sub8 = (a: number, b: number): number => (Math.trunc(a) - Math.trunc(b)) & 0xFF; /** MC_02 — MUL8: 8-bit wrapping multiplication. Result = (a * b) & 0xFF. */ export const mul8 = (a: number, b: number): number => (Math.trunc(a) * Math.trunc(b)) & 0xFF; /** MC_03 — DIV8: returns [quotient, remainder]. Division by zero → [0,0]. */ export const div8 = (a: number, b: number): [number, number] => { const bi = Math.trunc(b); if (bi === 0) return [0, 0]; const ai = Math.trunc(a); return [Math.floor(ai / bi), ai % bi]; }; /** MC_04 — MOD8: modulo. Modulo by zero → 0. */ export const mod8 = (a: number, b: number): number => { const bi = Math.trunc(b); return bi === 0 ? 0 : Math.trunc(a) % bi; }; /** MC_05 — ABS64: absolute value. */ export const abs64 = (a: number): number => Math.abs(Math.trunc(a)); /** MC_06 — NEG64: negate. */ export const neg64 = (a: number): number => -Math.trunc(a); /** MC_07 — CLAMP: clamp value to [lo, hi]. */ export const clamp = (val: number, lo: number, hi: number): number => Math.min(Math.max(val, lo), hi); /** INC: increment by 1, wrapping at 255→0. */ export const inc = (a: number): number => (Math.trunc(a) + 1) & 0xFF; /** DEC: decrement by 1, wrapping at 0→255. */ export const dec = (a: number): number => (Math.trunc(a) - 1) & 0xFF;