diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-03 23:24:50 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-03 23:24:50 +0200 |
| commit | 49327432b456c3110064556ac4613b49be54b925 (patch) | |
| tree | ae1d75b210b6168010c6a21332795907fc7c2f4d /src | |
| parent | bef9b09493403187079f4b8ec6633f5258376f44 (diff) | |
Fix character code mapping
Diffstat (limited to 'src')
| -rw-r--r-- | src/charmem.py | 12 | ||||
| -rw-r--r-- | src/convert_ttf.py | 52 |
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') |
