PIC P16F690;

pragma variable bits = 8;
pragma variable export;

Main {
    $var1 = 12345;
    sim_assert $var1 == 57, "12345 was placed as 57 due to 8-bit mode";
    $var2 = 113;
    $var3 = $var2 + $var1;
    sim_assert $var3 == 170, "57 + 113 = 170";
    $var3 = $var2 - $var1;
    sim_assert $var3 == 56, "113 - 57 = 56";
    $var3 = $var2 * $var1;
    sim_assert $var3 == 41, "113 * 57 = 41";
    $var2 = $var2 * 5;
    sim_assert $var2 == 53, "113 * 5 = 565 => 53 in 8-bit mode";
    $var3 = $var2 / $var1;
    sim_assert $var3 == 0, "53 / 57 = 0 in integer mathematics";
    $var3 = $var2 % $var1;
    sim_assert $var3 == 53, "53 % 57 = 53";
    --$var3;
    sim_assert $var3 == 52, "--53 = 52";
    ++$var3;
    sim_assert $var3 == 53, "++52 = 53";
    $var4 = 64;
    $var4 -= $var1;
    sim_assert $var4 == 7, "64 - 57 = 7";
    $var3 *= 3;
    sim_assert $var3 == 159, "53 * 3 = 159";
    $var2 /= 5;
    sim_assert $var2 == 10, "53 / 5 = 10";
    $var4 %= $var2;
    sim_assert $var4 == 7, "7 % 10 = 7";
    $var4 = 64;
    $var4 ^= 0xFF;
    sim_assert $var4 == 0xBF, "64 ^ 0xFF = 0xBF";
    $var4 |= 0x80;
    sim_assert $var4 == 0xBF, "0xBF | 0x80 = 0xBF";
    $var4 &= 0xAA;
    sim_assert $var4 == 0xAA, "0xBF & 0xAA = 0xAA";
    $var4 = $var4 << 1;
    sim_assert $var4 == 84, "0xAA << 1 = 340 which is 84 in 8-bit mode";
    $var4 = $var4 >> 1;
    sim_assert $var4 == 42, "84 >> 1 = 42";
    $var4 <<= 1;
    sim_assert $var4 == 84, "42 << 1 = 84";
    $var4 >>= 1;
    sim_assert $var4 == 42, "84 >> 1 = 42";
    $var5 = $var1 - $var2 + $var3 * ($var4 + 8) / $var1;
    sim_assert $var5 == 47, "57 - 10 + ((159 * (42 + 8)) & 0xFF) / 57";
    $var7 = 13;
    $var5 = ($var1 + (($var3 * ($var4 + $var7) + 5) + $var2));
    sim_assert $var5 == 113,
        "57 + (((159 * (42 + 13)) & 0xFF + 5) + 10) = 113";
    $var6 = 19;
    $var8 = ($var1 + $var2) - ($var3 * $var4) / ($var5 % $var6);
    sim_assert $var8 == 66, "(57 + 10) - ((159 * 42) & 0xFF) / (113 % 19)";
    # sqrt is a modifier
    $var3 = sqrt $var4;
    sim_assert $var3 == 6,
        "sqrt(42) = 6.4807 which is 6 in integer mathematics";
    sim_assert "*** Completed the simulation ***";
}