1.1 --- a/ula.py Sun Jun 19 17:09:31 2016 +0200
1.2 +++ b/ula.py Sun Jun 19 21:21:28 2016 +0200
1.3 @@ -526,12 +526,17 @@
1.4 mode.
1.5 """
1.6
1.7 - byte_value = self.data # which should have been read automatically
1.8 + # Rearrange the byte value.
1.9 +
1.10 + byte_value = decode(self.data, self.depth)
1.11
1.12 i = 0
1.13 - for colour in decode(byte_value, self.depth):
1.14 - self.buffer[i] = get_physical_colour(self.palette[colour])
1.15 - i += 1
1.16 + o = 0
1.17 + while i < 8:
1.18 + colour = value_of_bits(byte_value[i:i+self.depth])
1.19 + self.buffer[o] = get_physical_colour(self.palette[colour])
1.20 + i += self.depth
1.21 + o += 1
1.22
1.23 def wrap_address(self):
1.24 if self.address >= SCREEN_LIMIT:
1.25 @@ -551,6 +556,16 @@
1.26 if self.cpu_read:
1.27 self.cpu_data = self.data | self.ram.data
1.28
1.29 +def value_of_bits(bits):
1.30 +
1.31 + "Convert the sequence of 'bits' into a value."
1.32 +
1.33 + value = 0
1.34 + for bit in bits:
1.35 + value *= 2
1.36 + value += bit and 1 or 0
1.37 + return value
1.38 +
1.39 def get_physical_colour(value):
1.40
1.41 """
1.42 @@ -570,11 +585,11 @@
1.43 return (value >> 7, value >> 6 & 1, value >> 5 & 1, value >> 4 & 1,
1.44 value >> 3 & 1, value >> 2 & 1, value >> 1 & 1, value & 1)
1.45 elif depth == 2:
1.46 - return (value >> 6 & 2 | value >> 3 & 1, value >> 5 & 2 | value >> 2 & 1,
1.47 - value >> 4 & 2 | value >> 1 & 1, value >> 3 & 2 | value & 1)
1.48 + return (value >> 7, value >> 3 & 1, value >> 6 & 1, value >> 2 & 1,
1.49 + value >> 5 & 1, value >> 1 & 1, value >> 4 & 1, value & 1)
1.50 elif depth == 4:
1.51 - return (value >> 4 & 8 | value >> 3 & 4 | value >> 2 & 2 | value >> 1 & 1,
1.52 - value >> 3 & 8 | value >> 2 & 4 | value >> 1 & 2 | value & 1)
1.53 + return (value >> 7, value >> 5 & 1, value >> 3 & 1, value >> 1 & 1,
1.54 + value >> 6 & 1, value >> 4 & 1, value >> 2 & 1, value & 1)
1.55 else:
1.56 raise ValueError, "Only depths of 1, 2 and 4 are supported, not %d." % depth
1.57