diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-03 14:59:15 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-03 14:59:15 +0200 |
| commit | d956f3841ad867d631fbe2324cb6e280bc9b2a66 (patch) | |
| tree | cf649483c1a5fabc23481f1c863aa5173067ba80 | |
| parent | 6b94054c71a0f371d83e97cee0200c29e685c5c2 (diff) | |
Get text rendering working
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | asm/text_mode.atk16 | 4 | ||||
| -rw-r--r-- | charset.txt (renamed from src/charset.txt) | 0 | ||||
| -rw-r--r-- | digital/atk16_mem.dig | 2 | ||||
| -rw-r--r-- | digital/atk16_tpu.dig | 591 | ||||
| -rw-r--r-- | src/charmem.py | 60 | ||||
| -rw-r--r-- | src/charset.py | 14 |
7 files changed, 497 insertions, 178 deletions
@@ -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() |
