public static BitField BinToBcd(BitField bin, out bool overflow)
{
BitField bcd = BitField.Concat(BitField.Create(30, 0, 0), bin);
overflow = false;
for(int i=0; i<30; ++i)
{
BitField a0 = BinToBcdAddIn(bcd[61, 58]);
BitField a1 = BinToBcdAddIn(bcd[57, 54]);
BitField a2 = BinToBcdAddIn(bcd[53, 50]);
BitField a3 = BinToBcdAddIn(bcd[49, 46]);
BitField a4 = BinToBcdAddIn(bcd[45, 42]);
BitField a5 = BinToBcdAddIn(bcd[41, 38]);
BitField a6 = BinToBcdAddIn(bcd[37, 34]);
BitField a7 = BinToBcdAddIn(bcd[33, 30]);
BitField add_in = BitField.Concat(a0, a1, a2, a3, a4, a5, a6, a7);
BitField add_out = bcd[61, 30] + add_in;
bcd.Assign(BitField.Concat(add_out, bcd[29, 0], BitField.Create(0, 0, 0)));
overflow |= add_out[add_out.Msb];
}
return bcd[61, 30];
}