add flash attribute to text mode

This commit is contained in:
Greg Hewgill 2011-08-15 21:58:10 +12:00
parent b9033a459a
commit 27d7a717dc
1 changed files with 20 additions and 1 deletions

View File

@ -6,6 +6,7 @@
import numpy
import pygame
import colorsys
import time
def signed(x):
if x > 0x7F:
@ -105,6 +106,9 @@ class Display:
self.screen = pygame.display.set_mode((560, 384))
pygame.display.set_caption("ApplePy")
self.mix = False
self.flash_time = time.time()
self.flash_on = False
self.flash_chars = [[0] * 0x400] * 2
self.chargen = []
for c in self.characters:
@ -163,6 +167,7 @@ class Display:
if start_text <= address <= start_text + 0x3FF:
base = address - start_text
self.flash_chars[self.page - 1][base] = value
hi, lo = divmod(base, 0x80)
row_group, column = divmod(lo, 0x28)
row = hi + 8 * row_group
@ -173,7 +178,12 @@ class Display:
if self.text or not self.mix or not row < 20:
mode, ch = divmod(value, 0x40)
inv = mode in (0, 1)
if mode == 0:
inv = True
elif mode == 1:
inv = self.flash_on
else:
inv = False
self.screen.blit(self.chargen[ch][self.colour][inv], (2 * (column * 7), 2 * (row * 8)))
else:
@ -238,6 +248,14 @@ class Display:
del pixels
def flash(self):
if time.time() - self.flash_time >= 0.5:
self.flash_on = not self.flash_on
for offset, char in enumerate(self.flash_chars[self.page - 1]):
if (char & 0xC0) == 0x40:
self.update(0x400 + offset, char)
self.flash_time = time.time()
class Speaker:
@ -811,6 +829,7 @@ class CPU:
update_cycle += 1
if update_cycle >= 1024:
self.memory.display.flash()
pygame.display.flip()
self.memory.update(self.cycles)
update_cycle = 0