GBEのu16+i8、キャリーしてない場合はフラグを立てるっぽいな

前記事においてよくわからんなとかいってたやつ。単純にキャリーしないときにオンにするかんじやな。

.carry = (a ^ i ^ result) & 0x100 != 0を逆にして.carry = (a ^ i ^ result) & 0x100 == 0でよいかんじでした。

fn addU16ToSingedU8WithCarryHalf(a: u16, b: u8) u16OpResultWithCarryHalf {
    const n = @intCast(u16, bitClear(u8, b, 7));
    if (bitCheck(u8, b, 7)) {
        const i = 128 - n;
        const result = a -% i;
        return .{
            .result = result,
            .carry = (a ^ i ^ result) & 0x100 == 0,
            .half = (a ^ i ^ result) & 0x10 == 0,
            //.carry = (a & 0xff) -% (i & 0xff) < (a & 0xff),
            //.half = (a & 0xf) -% (i & 0xf) < (a & 0xf),
        };
    } else {
        const result = a +% n;
        return .{
            .result = result,
            .carry = (a ^ n ^ result) & 0x100 != 0,
            .half = (a ^ n ^ result) & 0x10 != 0,
        };
    
    }
}