aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-11-03 14:59:15 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2023-11-03 14:59:15 +0200
commitd956f3841ad867d631fbe2324cb6e280bc9b2a66 (patch)
treecf649483c1a5fabc23481f1c863aa5173067ba80
parent6b94054c71a0f371d83e97cee0200c29e685c5c2 (diff)
Get text rendering working
-rw-r--r--Makefile4
-rw-r--r--asm/text_mode.atk164
-rw-r--r--charset.txt (renamed from src/charset.txt)0
-rw-r--r--digital/atk16_mem.dig2
-rw-r--r--digital/atk16_tpu.dig591
-rw-r--r--src/charmem.py60
-rw-r--r--src/charset.py14
7 files changed, 497 insertions, 178 deletions
diff --git a/Makefile b/Makefile
index f3366b0..9fdc5e2 100644
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,10 @@ assemble:
gen-ucode:
$(py) src/ucode.py $(out)
+# make gen-charmem out=out/charmem.bin
+gen-charmem:
+ $(py) src/charmem.py $(out)
+
# make test
test:
$(py) src/test_alu.py digital/atk16_alu.dig
diff --git a/asm/text_mode.atk16 b/asm/text_mode.atk16
index b48305a..8fbdb83 100644
--- a/asm/text_mode.atk16
+++ b/asm/text_mode.atk16
@@ -8,8 +8,8 @@
@label main
; set graphics mode to sprite mode
- set_graphics_mode gr_sprite_mode
- ;set_graphics_mode gr_text_mode
+ ; set_graphics_mode gr_sprite_mode
+ set_graphics_mode gr_text_mode
@label loop
jpi loop
diff --git a/src/charset.txt b/charset.txt
index 0b68a45..0b68a45 100644
--- a/src/charset.txt
+++ b/charset.txt
diff --git a/digital/atk16_mem.dig b/digital/atk16_mem.dig
index 1fa106b..c3f000a 100644
--- a/digital/atk16_mem.dig
+++ b/digital/atk16_mem.dig
@@ -37,7 +37,7 @@
<string>Data</string>
<data>4014,2a00,6027,13*8000,1a,18,18,18,8000,e000,e001,e002,4855,f000
,3140,1b48,3148,1b48,4016,2000,2000,4215,2240,3040,1800,3148,1b48
-,3140,1b48,e000,4017,2000,4200,3008,6000,4017,2000,4202,3008,61ff</data>
+,3140,1b48,e000,4017,2000,4200,3008,6000,4017,2000,4201,3008,61ff</data>
</entry>
</elementAttributes>
<pos x="740" y="100"/>
diff --git a/digital/atk16_tpu.dig b/digital/atk16_tpu.dig
index 684996b..6b6030c 100644
--- a/digital/atk16_tpu.dig
+++ b/digital/atk16_tpu.dig
@@ -247,7 +247,7 @@
<pos x="320" y="720"/>
</visualElement>
<visualElement>
- <elementName>ROM</elementName>
+ <elementName>RAMDualPort</elementName>
<elementAttributes>
<entry>
<string>AddrBits</string>
@@ -255,56 +255,84 @@
</entry>
<entry>
<string>Label</string>
- <string>CHARMEM</string>
+ <string>TEXTMEM</string>
</entry>
<entry>
<string>Bits</string>
<int>8</int>
</entry>
</elementAttributes>
- <pos x="740" y="560"/>
+ <pos x="480" y="320"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
+ <entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>Y</string>
+ </entry>
+ </elementAttributes>
+ <pos x="480" y="720"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
- <string>8,3</string>
+ <string>8</string>
</entry>
<entry>
<string>Output Splitting</string>
- <string>11</string>
+ <string>3,5</string>
</entry>
</elementAttributes>
- <pos x="680" y="560"/>
+ <pos x="520" y="720"/>
</visualElement>
<visualElement>
- <elementName>VDD</elementName>
+ <elementName>Splitter</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="1"/>
+ <string>Input Splitting</string>
+ <string>5,6</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>11</string>
</entry>
</elementAttributes>
- <pos x="720" y="600"/>
+ <pos x="360" y="320"/>
</visualElement>
<visualElement>
- <elementName>RAMDualPort</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>AddrBits</string>
- <int>11</int>
+ <string>rotation</string>
+ <rotation rotation="2"/>
</entry>
<entry>
- <string>Label</string>
- <string>TEXTMEM</string>
+ <string>NetName</string>
+ <string>TY</string>
</entry>
+ </elementAttributes>
+ <pos x="320" y="320"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
- <string>Bits</string>
- <int>8</int>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
+ <string>NetName</string>
+ <string>TX</string>
</entry>
</elementAttributes>
- <pos x="480" y="320"/>
+ <pos x="320" y="360"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -315,106 +343,139 @@
</entry>
<entry>
<string>NetName</string>
- <string>Y</string>
+ <string>CCOLOR</string>
</entry>
</elementAttributes>
- <pos x="480" y="720"/>
+ <pos x="840" y="320"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
- <string>8</string>
+ <string>1,1</string>
</entry>
<entry>
<string>Output Splitting</string>
- <string>5,3</string>
+ <string>2</string>
</entry>
</elementAttributes>
- <pos x="520" y="720"/>
+ <pos x="860" y="320"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Ground</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>CY</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
+ </entry>
+ <entry>
+ <string>Bits</string>
+ <int>8</int>
</entry>
</elementAttributes>
- <pos x="580" y="740"/>
+ <pos x="460" y="340"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>Ground</elementName>
<elementAttributes>
<entry>
- <string>NetName</string>
- <string>TY</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="580" y="700"/>
+ <pos x="460" y="360"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>VDD</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
+ </elementAttributes>
+ <pos x="460" y="400"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
<string>NetName</string>
- <string>X</string>
+ <string>CHAR_S</string>
</entry>
</elementAttributes>
- <pos x="480" y="820"/>
+ <pos x="580" y="360"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>9</string>
- </entry>
- <entry>
- <string>Output Splitting</string>
- <string>6,3</string>
+ <string>NetName</string>
+ <string>Y</string>
</entry>
</elementAttributes>
- <pos x="520" y="820"/>
+ <pos x="340" y="720"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>TX</string>
+ <string>TY</string>
</entry>
</elementAttributes>
- <pos x="580" y="820"/>
+ <pos x="580" y="740"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>CX</string>
+ <string>CY</string>
</entry>
</elementAttributes>
- <pos x="580" y="860"/>
+ <pos x="580" y="700"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Counter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Bits</string>
+ <int>3</int>
+ </entry>
+ </elementAttributes>
+ <pos x="480" y="900"/>
+ </visualElement>
+ <visualElement>
+ <elementName>And</elementName>
+ <elementAttributes>
+ <entry>
+ <string>inverterConfig</string>
+ <inverterConfig>
+ <string>In_1</string>
+ <string>In_2</string>
+ </inverterConfig>
+ </entry>
+ <entry>
+ <string>Inputs</string>
+ <int>3</int>
+ </entry>
+ </elementAttributes>
+ <pos x="660" y="900"/>
</visualElement>
<visualElement>
<elementName>Splitter</elementName>
<elementAttributes>
<entry>
<string>Input Splitting</string>
- <string>5,6</string>
+ <string>3</string>
</entry>
<entry>
<string>Output Splitting</string>
- <string>11</string>
+ <string>1,1,1</string>
</entry>
</elementAttributes>
- <pos x="360" y="320"/>
+ <pos x="580" y="900"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -425,96 +486,140 @@
</entry>
<entry>
<string>NetName</string>
- <string>TY</string>
+ <string>PCLK</string>
</entry>
</elementAttributes>
- <pos x="320" y="320"/>
+ <pos x="460" y="920"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>VDD</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
+ <rotation rotation="1"/>
</entry>
+ </elementAttributes>
+ <pos x="460" y="900"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Counter</elementName>
+ <elementAttributes>
<entry>
- <string>NetName</string>
- <string>TX</string>
+ <string>Bits</string>
+ <int>6</int>
</entry>
</elementAttributes>
- <pos x="320" y="360"/>
+ <pos x="480" y="1040"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
<string>NetName</string>
- <string>CCOLOR</string>
+ <string>CX</string>
</entry>
</elementAttributes>
- <pos x="840" y="320"/>
+ <pos x="580" y="860"/>
</visualElement>
<visualElement>
- <elementName>Splitter</elementName>
+ <elementName>VDD</elementName>
<elementAttributes>
<entry>
- <string>Input Splitting</string>
- <string>1,1</string>
+ <string>rotation</string>
+ <rotation reference="../../../../visualElement[38]/elementAttributes/entry/rotation"/>
</entry>
+ </elementAttributes>
+ <pos x="440" y="1040"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Ground</elementName>
+ <elementAttributes>
<entry>
- <string>Output Splitting</string>
- <string>2</string>
+ <string>rotation</string>
+ <rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="860" y="320"/>
+ <pos x="460" y="1080"/>
</visualElement>
<visualElement>
- <elementName>BitSelector</elementName>
+ <elementName>Tunnel</elementName>
<elementAttributes>
<entry>
- <string>Selector Bits</string>
- <int>3</int>
+ <string>NetName</string>
+ <string>TX</string>
</entry>
</elementAttributes>
- <pos x="820" y="580"/>
+ <pos x="560" y="1040"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>CX</string>
+ <string>COVF</string>
</entry>
</elementAttributes>
- <pos x="860" y="640"/>
+ <pos x="760" y="920"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Not</elementName>
+ <elementAttributes/>
+ <pos x="380" y="400"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
- <string>CCOLOR</string>
+ <string>COVF</string>
</entry>
</elementAttributes>
- <pos x="900" y="580"/>
+ <pos x="360" y="400"/>
</visualElement>
<visualElement>
- <elementName>Ground</elementName>
+ <elementName>Probe</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="1"/>
+ <string>intFormat</string>
+ <intFormat>dec</intFormat>
+ </entry>
+ </elementAttributes>
+ <pos x="600" y="320"/>
+ </visualElement>
+ <visualElement>
+ <elementName>EEPROM</elementName>
+ <elementAttributes>
+ <entry>
+ <string>AddrBits</string>
+ <int>11</int>
+ </entry>
+ <entry>
+ <string>Label</string>
+ <string>CHARMEM</string>
</entry>
<entry>
<string>Bits</string>
<int>8</int>
</entry>
+ <entry>
+ <string>Data</string>
+ <data>6,9,9,f,9,9,9,0,3,5,5,7,9,9,f,0,6,9,1,1,1,9,6,0,f,1,1,3,1,1,f
+,0,f,1,1,3,1,1,1,0,6,9,1,1,d,9,6,0,9,9,f,4*9,0,7,5*2,7,0,e,4*8
+,9,6,0,9,5,3,5,5,9,9,0,6*1,f,0,9,f,f,4*9,0,9,b,b,d,d,9,9,0,6,5*9
+,6,0,7,9,9,7,1,1,1,0,6,9,9,9,d,e,8,0,7,9,9,7,3,5,9,0,6,9,1,6,8
+,9,6,0,7,6*2,0,6*9,e,0,6*9,6,0,4*9,f,f,9,0,9,9,6,4*9,0,9,9,9,e
+,8,9,e,0,f,8,8,4,2,1,f</data>
+ </entry>
+ <entry>
+ <string>intFormat</string>
+ <intFormat>bin</intFormat>
+ </entry>
</elementAttributes>
- <pos x="460" y="340"/>
+ <pos x="720" y="620"/>
</visualElement>
<visualElement>
<elementName>Ground</elementName>
@@ -524,41 +629,55 @@
<rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="460" y="360"/>
+ <pos x="700" y="680"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>VDD</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="2"/>
- </entry>
- <entry>
- <string>NetName</string>
- <string>CLK</string>
+ <rotation rotation="1"/>
</entry>
</elementAttributes>
- <pos x="460" y="380"/>
+ <pos x="700" y="640"/>
</visualElement>
<visualElement>
<elementName>VDD</elementName>
<elementAttributes>
<entry>
<string>rotation</string>
- <rotation rotation="1"/>
+ <rotation reference="../../../../visualElement[50]/elementAttributes/entry/rotation"/>
</entry>
</elementAttributes>
- <pos x="460" y="400"/>
+ <pos x="700" y="700"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Splitter</elementName>
+ <elementAttributes>
+ <entry>
+ <string>Input Splitting</string>
+ <string>3,8</string>
+ </entry>
+ <entry>
+ <string>Output Splitting</string>
+ <string>11</string>
+ </entry>
+ </elementAttributes>
+ <pos x="640" y="620"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
+ <string>rotation</string>
+ <rotation rotation="2"/>
+ </entry>
+ <entry>
<string>NetName</string>
<string>CHAR_S</string>
</entry>
</elementAttributes>
- <pos x="580" y="360"/>
+ <pos x="600" y="640"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
@@ -572,31 +691,57 @@
<string>CY</string>
</entry>
</elementAttributes>
- <pos x="640" y="580"/>
+ <pos x="600" y="620"/>
</visualElement>
<visualElement>
- <elementName>Tunnel</elementName>
+ <elementName>BitSelector</elementName>
<elementAttributes>
<entry>
- <string>rotation</string>
- <rotation rotation="2"/>
+ <string>Selector Bits</string>
+ <int>3</int>
</entry>
+ </elementAttributes>
+ <pos x="820" y="660"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Tunnel</elementName>
+ <elementAttributes>
<entry>
<string>NetName</string>
- <string>CHAR_S</string>
+ <string>CX</string>
</entry>
</elementAttributes>
- <pos x="640" y="560"/>
+ <pos x="860" y="720"/>
</visualElement>
<visualElement>
<elementName>Tunnel</elementName>
<elementAttributes>
<entry>
<string>NetName</string>
- <string>Y</string>
+ <string>CCOLOR</string>
</entry>
</elementAttributes>
- <pos x="340" y="720"/>
+ <pos x="900" y="660"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Probe</elementName>
+ <elementAttributes>
+ <entry>
+ <string>intFormat</string>
+ <intFormat>bin</intFormat>
+ </entry>
+ </elementAttributes>
+ <pos x="860" y="620"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Probe</elementName>
+ <elementAttributes/>
+ <pos x="880" y="760"/>
+ </visualElement>
+ <visualElement>
+ <elementName>Probe</elementName>
+ <elementAttributes/>
+ <pos x="1040" y="660"/>
</visualElement>
</visualElements>
<wires>
@@ -617,58 +762,42 @@
<p2 x="900" y="320"/>
</wire>
<wire>
- <p1 x="320" y="160"/>
- <p2 x="340" y="160"/>
- </wire>
- <wire>
- <p1 x="320" y="480"/>
- <p2 x="340" y="480"/>
- </wire>
- <wire>
- <p1 x="840" y="640"/>
- <p2 x="860" y="640"/>
- </wire>
- <wire>
- <p1 x="800" y="580"/>
- <p2 x="820" y="580"/>
+ <p1 x="580" y="320"/>
+ <p2 x="600" y="320"/>
</wire>
<wire>
- <p1 x="860" y="580"/>
- <p2 x="900" y="580"/>
+ <p1 x="700" y="640"/>
+ <p2 x="720" y="640"/>
</wire>
<wire>
- <p1 x="640" y="580"/>
- <p2 x="680" y="580"/>
+ <p1 x="600" y="640"/>
+ <p2 x="640" y="640"/>
</wire>
<wire>
- <p1 x="540" y="740"/>
- <p2 x="580" y="740"/>
+ <p1 x="900" y="640"/>
+ <p2 x="1040" y="640"/>
</wire>
<wire>
- <p1 x="320" y="360"/>
- <p2 x="340" y="360"/>
+ <p1 x="540" y="900"/>
+ <p2 x="560" y="900"/>
</wire>
<wire>
- <p1 x="880" y="360"/>
- <p2 x="900" y="360"/>
+ <p1 x="460" y="900"/>
+ <p2 x="480" y="900"/>
</wire>
<wire>
- <p1 x="460" y="360"/>
- <p2 x="480" y="360"/>
+ <p1 x="600" y="900"/>
+ <p2 x="640" y="900"/>
</wire>
<wire>
- <p1 x="540" y="360"/>
- <p2 x="580" y="360"/>
+ <p1 x="560" y="900"/>
+ <p2 x="580" y="900"/>
</wire>
<wire>
<p1 x="320" y="520"/>
<p2 x="340" y="520"/>
</wire>
<wire>
- <p1 x="320" y="680"/>
- <p2 x="340" y="680"/>
- </wire>
- <wire>
<p1 x="880" y="400"/>
<p2 x="900" y="400"/>
</wire>
@@ -677,36 +806,36 @@
<p2 x="480" y="400"/>
</wire>
<wire>
- <p1 x="320" y="560"/>
- <p2 x="340" y="560"/>
+ <p1 x="360" y="400"/>
+ <p2 x="380" y="400"/>
</wire>
<wire>
- <p1 x="700" y="560"/>
- <p2 x="740" y="560"/>
- </wire>
- <wire>
- <p1 x="640" y="560"/>
- <p2 x="680" y="560"/>
+ <p1 x="420" y="400"/>
+ <p2 x="440" y="400"/>
</wire>
<wire>
<p1 x="480" y="720"/>
<p2 x="520" y="720"/>
</wire>
<wire>
+ <p1 x="320" y="720"/>
+ <p2 x="340" y="720"/>
+ </wire>
+ <wire>
<p1 x="540" y="720"/>
<p2 x="560" y="720"/>
</wire>
<wire>
- <p1 x="320" y="720"/>
- <p2 x="340" y="720"/>
+ <p1 x="840" y="720"/>
+ <p2 x="860" y="720"/>
</wire>
<wire>
- <p1 x="480" y="820"/>
- <p2 x="520" y="820"/>
+ <p1 x="440" y="1040"/>
+ <p2 x="480" y="1040"/>
</wire>
<wire>
- <p1 x="540" y="820"/>
- <p2 x="580" y="820"/>
+ <p1 x="540" y="1040"/>
+ <p2 x="560" y="1040"/>
</wire>
<wire>
<p1 x="340" y="340"/>
@@ -721,32 +850,132 @@
<p2 x="480" y="340"/>
</wire>
<wire>
- <p1 x="320" y="120"/>
- <p2 x="340" y="120"/>
+ <p1 x="460" y="980"/>
+ <p2 x="740" y="980"/>
+ </wire>
+ <wire>
+ <p1 x="860" y="660"/>
+ <p2 x="900" y="660"/>
</wire>
<wire>
- <p1 x="720" y="600"/>
- <p2 x="740" y="600"/>
+ <p1 x="780" y="660"/>
+ <p2 x="800" y="660"/>
+ </wire>
+ <wire>
+ <p1 x="800" y="660"/>
+ <p2 x="820" y="660"/>
+ </wire>
+ <wire>
+ <p1 x="720" y="920"/>
+ <p2 x="740" y="920"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="920"/>
+ <p2 x="480" y="920"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="920"/>
+ <p2 x="640" y="920"/>
+ </wire>
+ <wire>
+ <p1 x="740" y="920"/>
+ <p2 x="760" y="920"/>
</wire>
<wire>
<p1 x="320" y="220"/>
<p2 x="340" y="220"/>
</wire>
<wire>
- <p1 x="560" y="700"/>
- <p2 x="580" y="700"/>
+ <p1 x="560" y="860"/>
+ <p2 x="580" y="860"/>
</wire>
<wire>
- <p1 x="540" y="860"/>
- <p2 x="580" y="860"/>
+ <p1 x="320" y="160"/>
+ <p2 x="340" y="160"/>
</wire>
<wire>
- <p1 x="460" y="380"/>
- <p2 x="480" y="380"/>
+ <p1 x="320" y="480"/>
+ <p2 x="340" y="480"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="740"/>
+ <p2 x="580" y="740"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="1060"/>
+ <p2 x="480" y="1060"/>
+ </wire>
+ <wire>
+ <p1 x="320" y="360"/>
+ <p2 x="340" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="880" y="360"/>
+ <p2 x="900" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="360"/>
+ <p2 x="480" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="540" y="360"/>
+ <p2 x="580" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="320" y="680"/>
+ <p2 x="340" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="700" y="680"/>
+ <p2 x="720" y="680"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="940"/>
+ <p2 x="480" y="940"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="940"/>
+ <p2 x="660" y="940"/>
+ </wire>
+ <wire>
+ <p1 x="600" y="620"/>
+ <p2 x="640" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="660" y="620"/>
+ <p2 x="720" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="800" y="620"/>
+ <p2 x="860" y="620"/>
+ </wire>
+ <wire>
+ <p1 x="320" y="560"/>
+ <p2 x="340" y="560"/>
+ </wire>
+ <wire>
+ <p1 x="320" y="120"/>
+ <p2 x="340" y="120"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="1080"/>
+ <p2 x="480" y="1080"/>
+ </wire>
+ <wire>
+ <p1 x="840" y="760"/>
+ <p2 x="880" y="760"/>
</wire>
<wire>
<p1 x="560" y="700"/>
- <p2 x="560" y="720"/>
+ <p2 x="580" y="700"/>
+ </wire>
+ <wire>
+ <p1 x="700" y="700"/>
+ <p2 x="720" y="700"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="380"/>
+ <p2 x="480" y="380"/>
</wire>
<wire>
<p1 x="880" y="320"/>
@@ -757,20 +986,60 @@
<p2 x="880" y="400"/>
</wire>
<wire>
+ <p1 x="560" y="700"/>
+ <p2 x="560" y="720"/>
+ </wire>
+ <wire>
+ <p1 x="560" y="860"/>
+ <p2 x="560" y="900"/>
+ </wire>
+ <wire>
+ <p1 x="800" y="620"/>
+ <p2 x="800" y="660"/>
+ </wire>
+ <wire>
+ <p1 x="1040" y="640"/>
+ <p2 x="1040" y="660"/>
+ </wire>
+ <wire>
<p1 x="340" y="340"/>
<p2 x="340" y="360"/>
</wire>
<wire>
+ <p1 x="740" y="920"/>
+ <p2 x="740" y="980"/>
+ </wire>
+ <wire>
+ <p1 x="580" y="320"/>
+ <p2 x="580" y="360"/>
+ </wire>
+ <wire>
+ <p1 x="900" y="640"/>
+ <p2 x="900" y="660"/>
+ </wire>
+ <wire>
<p1 x="840" y="320"/>
<p2 x="840" y="340"/>
</wire>
<wire>
- <p1 x="840" y="600"/>
- <p2 x="840" y="640"/>
+ <p1 x="840" y="680"/>
+ <p2 x="840" y="720"/>
+ </wire>
+ <wire>
+ <p1 x="840" y="720"/>
+ <p2 x="840" y="760"/>
+ </wire>
+ <wire>
+ <p1 x="440" y="380"/>
+ <p2 x="440" y="400"/>
+ </wire>
+ <wire>
+ <p1 x="460" y="940"/>
+ <p2 x="460" y="980"/>
</wire>
<wire>
- <p1 x="540" y="840"/>
- <p2 x="540" y="860"/>
+ <p1 x="460" y="980"/>
+ <p2 x="460" y="1060"/>
</wire>
</wires>
<measurementOrdering/>
diff --git a/src/charmem.py b/src/charmem.py
new file mode 100644
index 0000000..25eeec9
--- /dev/null
+++ b/src/charmem.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+# Generate .bin file with ATK16 CPU TPU charmem data
+
+# Addressed by _CCC CCCC CYYY
+# Data width 8bit: ___X XXXX
+# where _ = unused, C = 8bit character code, Y = character y coordinate, X = pixel value
+
+import sys
+
+if len(sys.argv) != 2:
+ print("usage: charmem.py <outfile.bin>")
+ sys.exit(1)
+
+outfile_path = sys.argv[1]
+
+with open("charset.txt", "r") as f:
+ lines = [s.strip("\n") for s in f.readlines()]
+
+header_chars = lines[0]
+
+charset: list[list[str]] = []
+CHAR_HEIGHT_BITS = 3
+CHAR_HEIGHT = 2 ** CHAR_HEIGHT_BITS
+CHAR_WIDTH = 5
+
+i = CHAR_HEIGHT
+while i < len(lines):
+ char = lines[i:i+CHAR_HEIGHT]
+ for row in char:
+ assert len(row) == CHAR_WIDTH
+ charset.append(char)
+ i += CHAR_HEIGHT
+
+CHAR_N = len(charset)
+
+TOTAL_BYTEARRAY_SIZE = CHAR_N * CHAR_HEIGHT
+print("TOTAL_BYTEARRAY_SIZE:", TOTAL_BYTEARRAY_SIZE)
+
+def string_to_byte(input_string: str):
+ # Replace spaces with '0' and '#' with '1'
+ binary_string = input_string.replace(' ', '0').replace('#', '1') + "000"
+
+ # Check if the string contains only '0' or '1'
+ if not all(c in '01' for c in binary_string):
+ raise ValueError("Input string must contain only spaces and '#' characters.")
+
+ # Convert the binary string to an unsigned integer byte
+ return int(binary_string[::-1], 2)
+
+
+res_b = bytearray(TOTAL_BYTEARRAY_SIZE)
+for cn, char in enumerate(charset):
+ for cy in range(0, CHAR_HEIGHT):
+ addr = (cn << 3) + cy
+ byte = string_to_byte(char[cy])
+ print(f"{byte:>08b}")
+ res_b[addr] = byte
+
+with open(outfile_path, "wb") as f:
+ f.write(res_b)
diff --git a/src/charset.py b/src/charset.py
deleted file mode 100644
index 628a983..0000000
--- a/src/charset.py
+++ /dev/null
@@ -1,14 +0,0 @@
-def gen_charset(file = "charset.txt"):
- with open(file, "r") as f:
- lines = [s.strip("\n") for s in f.readlines()]
-
- result: list[list[str]] = []
- i = 0
- while i < len(lines):
- char = lines[i:i+8]
- result.append(char)
- i += 8
-
- print(result)
-
-gen_charset()