mirror of
https://github.com/jtauber/applepy.git
synced 2024-11-22 19:30:54 +00:00
Merge pull request #5 from ghewgill/pygame
Use bitmaps for characters in text mode
This commit is contained in:
commit
b28d03439b
44
applepy.py
44
applepy.py
@ -104,6 +104,25 @@ class Display:
|
|||||||
self.screen = pygame.display.set_mode((560, 384))
|
self.screen = pygame.display.set_mode((560, 384))
|
||||||
pygame.display.set_caption("ApplePy")
|
pygame.display.set_caption("ApplePy")
|
||||||
self.mix = False
|
self.mix = False
|
||||||
|
|
||||||
|
self.chargen = []
|
||||||
|
for c in self.characters:
|
||||||
|
chars = [[pygame.Surface((14, 16)), pygame.Surface((14, 16))],
|
||||||
|
[pygame.Surface((14, 16)), pygame.Surface((14, 16))]]
|
||||||
|
for colour in (0, 1):
|
||||||
|
hue = (255, 255, 255) if colour else (0, 200, 0)
|
||||||
|
for inv in (0, 1):
|
||||||
|
pixels = pygame.PixelArray(chars[colour][inv])
|
||||||
|
off = hue if inv else (0, 0, 0)
|
||||||
|
on = (0, 0, 0) if inv else hue
|
||||||
|
for row in range(8):
|
||||||
|
b = c[row] << 1
|
||||||
|
for col in range(7):
|
||||||
|
bit = (b >> (6 - col)) & 1
|
||||||
|
pixels[2 * col][2 * row] = on if bit else off
|
||||||
|
pixels[2 * col + 1][2 * row] = on if bit else off
|
||||||
|
del pixels
|
||||||
|
self.chargen.append(chars)
|
||||||
|
|
||||||
def txtclr(self):
|
def txtclr(self):
|
||||||
self.text = False
|
self.text = False
|
||||||
@ -150,31 +169,14 @@ class Display:
|
|||||||
if row_group == 3:
|
if row_group == 3:
|
||||||
return
|
return
|
||||||
|
|
||||||
pixels = pygame.PixelArray(self.screen)
|
|
||||||
|
|
||||||
if self.text or not self.mix or not row < 20:
|
if self.text or not self.mix or not row < 20:
|
||||||
mode, ch = divmod(value, 0x40)
|
mode, ch = divmod(value, 0x40)
|
||||||
|
|
||||||
if self.colour:
|
inv = mode in (0, 1)
|
||||||
on = (255, 255, 255)
|
|
||||||
else:
|
|
||||||
on = (0, 200, 0)
|
|
||||||
off = (0, 0, 0)
|
|
||||||
|
|
||||||
if mode == 0 or mode == 1:
|
self.screen.blit(self.chargen[ch][self.colour][inv], (2 * (column * 7), 2 * (row * 8)))
|
||||||
on, off = off, on
|
|
||||||
|
|
||||||
for line in range(8):
|
|
||||||
b = self.characters[ch][line] << 1
|
|
||||||
for i in range(7):
|
|
||||||
x = 2 * (column * 7 + (5 - i))
|
|
||||||
y = 2 * (row * 8 + line)
|
|
||||||
bit = (b >> i) % 2
|
|
||||||
pixels[x][y] = on if bit else off
|
|
||||||
pixels[x + 1][y] = on if bit else off
|
|
||||||
pixels[x][y + 1] = (0, 0, 0)
|
|
||||||
pixels[x + 1][y + 1] = (0, 0, 0)
|
|
||||||
else:
|
else:
|
||||||
|
pixels = pygame.PixelArray(self.screen)
|
||||||
if not self.high_res:
|
if not self.high_res:
|
||||||
lower, upper = divmod(value, 0x10)
|
lower, upper = divmod(value, 0x10)
|
||||||
|
|
||||||
@ -187,7 +189,7 @@ class Display:
|
|||||||
x = column * 14 + dx
|
x = column * 14 + dx
|
||||||
y = row * 16 + dy
|
y = row * 16 + dy
|
||||||
pixels[x][y] = self.lores_colours[lower]
|
pixels[x][y] = self.lores_colours[lower]
|
||||||
del pixels
|
del pixels
|
||||||
|
|
||||||
elif start_hires <= address <= start_hires + 0x1FFF:
|
elif start_hires <= address <= start_hires + 0x1FFF:
|
||||||
if self.high_res:
|
if self.high_res:
|
||||||
|
Loading…
Reference in New Issue
Block a user