1.1 --- a/ula.py Mon Jun 20 16:57:12 2016 +0200
1.2 +++ b/ula.py Mon Jun 20 17:50:34 2016 +0200
1.3 @@ -37,9 +37,6 @@
1.4
1.5 MAX_PIXELPOS = MIN_PIXELPOS + MAX_WIDTH
1.6
1.7 -PIXEL_POSITIONS = 8 # the number of pixel positions per byte
1.8 - # (doubled or quadrupled in lower resolutions)
1.9 -
1.10 SCREEN_LIMIT = 0x8000 # the first address after the screen memory
1.11 MAX_MEMORY = 0x10000 # the number of addressable memory locations
1.12 MAX_RAM = 0x10000 # the number of addressable RAM locations (64Kb in each IC)
1.13 @@ -304,8 +301,9 @@
1.14 def in_frame(self): return MIN_PIXELLINE <= self.y < (MIN_PIXELLINE + self.display_height)
1.15 def inside_frame(self): return MIN_PIXELLINE < self.y < (MIN_PIXELLINE + self.display_height)
1.16 def read_pixels(self): return MIN_PIXELPOS <= self.x < MAX_PIXELPOS and self.in_frame()
1.17 + def write_pixels(self): return self.pcycle != 0
1.18 + def next_pixel(self): return self.xscale == 1 or (self.xscale == 2 and self.cycle & 0b10101010) or (self.xscale == 4 and self.cycle & 0b10001000)
1.19 def end_pixels(self): return self.pcycle == 1
1.20 - def next_pixel(self): return self.xscale == 1 or (self.xscale == 2 and self.cycle & 0b10101010) or (self.xscale == 4 and self.cycle & 0b10001000)
1.21
1.22 def update(self):
1.23
1.24 @@ -467,7 +465,7 @@
1.25
1.26 # Detect spacing between character rows.
1.27
1.28 - if not self.pcycle:
1.29 + if not self.write_pixels():
1.30 self.video.colour = BLANK
1.31
1.32 # For pixels within the frame, obtain and output the value.
1.33 @@ -480,7 +478,6 @@
1.34
1.35 if self.next_pixel():
1.36 self.next_pixel_value()
1.37 - self.pcycle = rotate(self.pcycle, self.depth)
1.38
1.39 # Finish writing pixels.
1.40
1.41 @@ -501,6 +498,7 @@
1.42
1.43 def next_pixel_value(self):
1.44 self.pdata = rotate(self.pdata, self.depth)
1.45 + self.pcycle = rotate(self.pcycle, self.depth)
1.46
1.47 def wrap_address(self):
1.48 if self.address >= SCREEN_LIMIT: