diff --git a/PC2Player/PC2Player/MainForm.cs b/PC2Player/PC2Player/MainForm.cs index cf887b6..0cd1f77 100644 --- a/PC2Player/PC2Player/MainForm.cs +++ b/PC2Player/PC2Player/MainForm.cs @@ -238,27 +238,15 @@ namespace PC2Player List tmpOut = new List(); foreach (string frame in stringyBits) { - int b = int.Parse(frame, NumberStyles.HexNumber); - char[] bytesOut = { (char)64 }; - if (ShowtapeBits == "8") + uint b = uint.Parse(frame, NumberStyles.HexNumber); + char[] bytesOut = new char[8]; + int bytes = int.Parse(ShowtapeBits)/4; + for (int i = 0; i < bytes; i++) { - bytesOut = new char[]{ - (char)(64 | ((b & 8) | (b & 4) | (b & 2) | (b & 1))), - (char)(64 | (((b & 128) | (b & 64) | (b & 32) | (b & 16)) >> 4)) - }; - } - else if (ShowtapeBits == "32") - { - bytesOut = new char[]{ - (char)(64 | ((b & 8) | (b & 4) | (b & 2) | (b & 1))), - (char)(64 | (((b & 128) | (b & 64) | (b & 32) | (b & 16)) >> 4)), - (char)(64 | (((b & 2048) | (b & 1024) | (b & 512) | (b & 256)) >> 8)), - (char)(64 | (((b & 32768) | (b & 16384) | (b & 8192) | (b & 4096)) >> 12)), - (char)(64 | (((b & 524288) | (b & 262144) | (b & 131072) | (b & 65536)) >> 16)), - (char)(64 | (((b & 8388608) | (b & 4194304) | (b & 2097152) | (b & 1048576)) >> 20)), - (char)(64 | (((b & 134217728) | (b & 67108864) | (b & 33554432) | (b & 16777216)) >> 24)), - (char)(64 | (((b & 2147483648) | (b & 1073741824) | (b & 536870912) | (b & 268435456)) >> 28)) - }; + uint offset = 4 * i; + uint mask = 0b1111 << offset; + uint masked_value = (b & mask) >> offset; + bytesOut[i] = (char)(64 | masked_value); } tmpOut.Add(new string(bytesOut)); }