From 27d7a717dcbe4db29af95bb268fd0cc79e7a4e8d Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Mon, 15 Aug 2011 21:58:10 +1200 Subject: [PATCH 1/2] add flash attribute to text mode --- applepy.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/applepy.py b/applepy.py index 802324d..6ca1a7c 100644 --- a/applepy.py +++ b/applepy.py @@ -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 From a543112ee953985dd0b5d815bf1925b45bf8cd56 Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Mon, 15 Aug 2011 22:19:03 +1200 Subject: [PATCH 2/2] map left/right arrow keys to ^H/^U --- applepy.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/applepy.py b/applepy.py index 802324d..a83da1d 100644 --- a/applepy.py +++ b/applepy.py @@ -803,8 +803,12 @@ class CPU: quit = True if event.type == pygame.KEYDOWN: - if event.unicode: - key = ord(event.unicode) + key = ord(event.unicode) if event.unicode else 0 + if event.key == pygame.K_LEFT: + key = 0x08 + if event.key == pygame.K_RIGHT: + key = 0x15 + if key: if key == 0x7F: key = 0x08 self.memory.softswitches.kbd = 0x80 + key