// ALL functions here are call()-only // A Byte can go up to 255. There are 4 bytes. The fourth can go up to 127. // get_byte(VAR, BYTEID) function|script|get_byte { set .@v, getarg(0); set .@id, getarg(1); if (.@id == 0) goto L_Byte0; if (.@id == 1) goto L_Byte1; if (.@id == 2) goto L_Byte2; if (.@id == 3) goto L_Byte3; debugmes "get_byte invalid call"; return -1; L_Byte0: return (.@v & BYTE_0_MASK) >> BYTE_0_SHIFT; L_Byte1: return (.@v & BYTE_1_MASK) >> BYTE_1_SHIFT; L_Byte2: return (.@v & BYTE_2_MASK) >> BYTE_2_SHIFT; L_Byte3: return (.@v & BYTE_3_MASK) >> BYTE_3_SHIFT; } // A Nibble can go up to 15. There are 7 nibbles.. // get_nibble(VAR, BYTEID) function|script|get_nibble { set .@v, getarg(0); set .@id, getarg(1); if (.@id == 0) goto L_Nibble0; if (.@id == 1) goto L_Nibble1; if (.@id == 2) goto L_Nibble2; if (.@id == 3) goto L_Nibble3; if (.@id == 4) goto L_Nibble4; if (.@id == 5) goto L_Nibble5; if (.@id == 6) goto L_Nibble6; debugmes "get_byte invalid call"; return -1; L_Nibble0: return (.@v & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT; L_Nibble1: return (.@v & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT; L_Nibble2: return (.@v & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT; L_Nibble3: return (.@v & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT; L_Nibble4: return (.@v & NIBBLE_4_MASK) >> NIBBLE_4_SHIFT; L_Nibble5: return (.@v & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT; L_Nibble6: return (.@v & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT; // In theory, there's a "nibble 7" but it is broken so it is not available } ///////////////////////////////////////////////////////////////////////////////// // A Byte can go up to 255. There are 4 bytes. The fourth can go up to 127. // set_byte(VAR, BYTEID, VALUE) function|script|set_byte { set .@v, getarg(0); set .@id, getarg(1); if (.@id == 0) goto L_Byte0; if (.@id == 1) goto L_Byte1; if (.@id == 2) goto L_Byte2; if (.@id == 3) goto L_Byte3; debugmes "get_byte invalid call"; return -1; L_Byte0: set getarg(0), ((.@v & ~(BYTE_0_MASK)) | (getarg(2) << BYTE_0_SHIFT)); return; L_Byte1: set getarg(0), ((.@v & ~(BYTE_1_MASK)) | (getarg(2) << BYTE_1_SHIFT)); return; L_Byte2: set getarg(0), ((.@v & ~(BYTE_2_MASK)) | (getarg(2) << BYTE_2_SHIFT)); return; L_Byte3: set getarg(0), ((.@v & ~(BYTE_3_MASK)) | (getarg(2) << BYTE_3_SHIFT)); return; } // A Nibble can go up to 15. There are 7 nibbles.. // get_nibble(VAR, NIBBLEID, VALUE) function|script|set_nibble { set .@v, getarg(0); set .@id, getarg(1); if (.@id == 0) goto L_Nibble0; if (.@id == 1) goto L_Nibble1; if (.@id == 2) goto L_Nibble2; if (.@id == 3) goto L_Nibble3; if (.@id == 4) goto L_Nibble4; if (.@id == 5) goto L_Nibble5; if (.@id == 6) goto L_Nibble6; debugmes "get_byte invalid call"; return -1; L_Nibble0: set getarg(0), ((.@v & ~(NIBBLE_0_MASK)) | (getarg(2) << NIBBLE_0_SHIFT)); return; L_Nibble1: set getarg(0), ((.@v & ~(NIBBLE_1_MASK)) | (getarg(2) << NIBBLE_1_SHIFT)); return; L_Nibble2: set getarg(0), ((.@v & ~(NIBBLE_2_MASK)) | (getarg(2) << NIBBLE_2_SHIFT)); return; L_Nibble3: set getarg(0), ((.@v & ~(NIBBLE_3_MASK)) | (getarg(2) << NIBBLE_3_SHIFT)); return; L_Nibble4: set getarg(0), ((.@v & ~(NIBBLE_4_MASK)) | (getarg(2) << NIBBLE_4_SHIFT)); return; L_Nibble5: set getarg(0), ((.@v & ~(NIBBLE_5_MASK)) | (getarg(2) << NIBBLE_5_SHIFT)); return; L_Nibble6: set getarg(0), ((.@v & ~(NIBBLE_6_MASK)) | (getarg(2) << NIBBLE_6_SHIFT)); return; }