aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-11-03 23:24:50 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2023-11-03 23:24:50 +0200
commit49327432b456c3110064556ac4613b49be54b925 (patch)
treeae1d75b210b6168010c6a21332795907fc7c2f4d /src
parentbef9b09493403187079f4b8ec6633f5258376f44 (diff)
Fix character code mapping
Diffstat (limited to 'src')
-rw-r--r--src/charmem.py12
-rw-r--r--src/convert_ttf.py52
2 files changed, 59 insertions, 5 deletions
diff --git a/src/charmem.py b/src/charmem.py
index 551ba85..aaac122 100644
--- a/src/charmem.py
+++ b/src/charmem.py
@@ -19,17 +19,19 @@ with open("charset.txt", "r") as f:
header_chars = lines[0]
charset: list[list[str]] = []
-CHAR_HEIGHT_BITS = 3
-CHAR_HEIGHT = 2 ** CHAR_HEIGHT_BITS
+
+CHAR_HEIGHT = 8
CHAR_WIDTH = 8
-i = CHAR_HEIGHT
+i = 0
while i < len(lines):
+ i += 1 # skip comment line
char = lines[i:i+CHAR_HEIGHT]
for row in char:
- assert len(row) == CHAR_WIDTH
+ if len(row) != CHAR_WIDTH:
+ raise Exception(f"char row number {i} has width != {CHAR_WIDTH}: {len(row)}\n" + row + "\n" + "\n".join(char))
charset.append(char)
- i += CHAR_HEIGHT
+ i += CHAR_HEIGHT + 1
CHAR_N = len(charset)
diff --git a/src/convert_ttf.py b/src/convert_ttf.py
new file mode 100644
index 0000000..c1135cb
--- /dev/null
+++ b/src/convert_ttf.py
@@ -0,0 +1,52 @@
+from PIL import Image, ImageFont, ImageDraw
+
+import sys
+
+if len(sys.argv) != 3:
+ print("usage: convert_ttf.py <infile.ttf> <outfile.txt>")
+ sys.exit(1)
+
+# Define the font file and size
+font_file = sys.argv[1]
+out_file = sys.argv[2]
+font_size = 8 # 8x8 pixels
+
+# Create a font object
+font = ImageFont.truetype(font_file, font_size)
+
+
+# backspace 0x8, tab 0x9, newline 0xA, space 0x20
+
+# Define the characters to render
+#characters = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
+
+def to_char_code(i: int) -> str:
+ if i == 10:
+ return " "
+ return chr(i)
+
+characters = [to_char_code(i) for i in range(0, 256)]
+
+
+# Open a file to write the bitmaps to
+with open(out_file, 'w') as bitmap_file:
+ for char_idx, char in enumerate(characters):
+ # Create a new image with a white background
+ image = Image.new('1', (8, 8), 1)
+
+ # Create a drawing context
+ draw = ImageDraw.Draw(image)
+
+ # Draw the character
+ draw.text((0, 0), char, font=font, fill=0)
+
+ # Convert the image to a list of 0's and 1's
+ pixels = image.getdata()
+ bitmap = [1 if pixel == 0 else 0 for pixel in pixels]
+
+ # Write the bitmap to the file
+ bitmap_file.write(f'Character {char_idx}: {char}\n')
+ for i in range(0, 64, 8):
+ row = bitmap[i:i+8]
+ bitmap_file.write(''.join(str(bit) for bit in row) + '\n')
+ bitmap_file.write('\n')