No hay ceros porque la expresión -entera en
ROM[1<<31|codExp<<23|frac] = (-entera + overflow) & 0x1FFFF;
aplica el complemento a 2 del número con lo cual rellena (en binario) a la izquierda todo con 1.
De hecho la sentencia igualmente está mal y deberia decir
ROM[1<<31|codExp<<23|frac] = (-entera & 0xFFFF ) | overflow;
Saludos,
Gustavo