Fix casting an r-value to char.

Please merge my fix to cc65 for casting to char.

Example:

    int f(int i, int j) { return (char) (i + 1) == j; }

Without my fix `f(0x1234, 0x35)` returns 0.

I am aware of one problem this bug causes in the cc65 library:
it is my 2001 code zlib/uncompress. This bug wasn't there in 2001.

The changes in g_regint and g_reglong are just refactoring.

Thank you.