diff options
| -rw-r--r-- | asm/bootstrap.atk16 | 69 | ||||
| -rw-r--r-- | asm/text_mode.atk16 | 17 | ||||
| -rw-r--r-- | digital/atk16.dig | 371 | ||||
| -rw-r--r-- | digital/atk16_graphics_mode.dig | 311 | ||||
| -rw-r--r-- | digital/atk16_mem.dig | 6 | ||||
| -rw-r--r-- | digital/atk16_ppu.dig | 253 | ||||
| -rw-r--r-- | src/asm_ops.py | 4 | ||||
| -rw-r--r-- | src/asm_pass3.py | 19 |
8 files changed, 872 insertions, 178 deletions
diff --git a/asm/bootstrap.atk16 b/asm/bootstrap.atk16 index 813ebb5..2aa5d88 100644 --- a/asm/bootstrap.atk16 +++ b/asm/bootstrap.atk16 @@ -1,42 +1,65 @@ -@let stack_segment 0x8000 -@let vector_table 0x10 -@let mmio_segment 0xE000 -@let terminal_addr 0xE000 -@let keyboard_addr 0xE001 -@let sprite_mem 0xE800 +; vector table fields +@let vector_table 0x10 +@let vt_ISRO 0x10 ; ISR0 +@let vt_ISR1 0x11 ; ISR1 +@let vt_ISR2 0x12 ; ISR2 +@let vt_ISR3 0x13 ; ISR3 +@let vt_stack_addr 0x14 ; Stack address +@let vt_term_pp_addr 0x15 ; Terminal peripheral address +@let vt_kb_pp_addr 0x16 ; Keyboard peripheral address +@let vt_gr_mode_addr 0x17 ; Graphics mode setting address + +; memory segments +@let stack_segment 0x8000 +@let mmio_segment 0xE000 +@let terminal_addr 0xE000 +@let keyboard_addr 0xE001 +@let gr_mode_addr 0xE002 +@let sprite_mem 0xE800 + +; graphics mode settings +@let gr_disabled_mode 0b00 +@let gr_text_mode 0b01 +@let gr_sprite_mode 0b10 @address vector_table - keyboard_isr ; 0x10 ISR0 - hlt_isr ; 0x11 ISR1 - hlt_isr ; 0x12 ISR2 - hlt_isr ; 0x13 ISR3 - stack_segment ; 0x14 Stack address - 0x0 ; 0x15 <unused> - terminal_addr ; 0x16 Terminal peripheral address - keyboard_addr ; 0x17 Keyboard peripheral address + keyboard_isr ; 0x10 + hlt_isr ; 0x11 + hlt_isr ; 0x12 + hlt_isr ; 0x13 + stack_segment ; 0x14 + terminal_addr ; 0x15 + keyboard_addr ; 0x16 + gr_mode_addr ; 0x17 @label hlt_isr ldi 0x55 RE hlt @label keyboard_isr - spu RA ; use RA, RB + spu RA ; use RA, RB spu RB - ldi 0x17 RA ; RA := 0x17 Keyboard peripheral address pointer - ldr RA RA ; RA := 0xE001 Keyboard peripheral address deref - ldr RA RA ; RA := <16-bit keyboard character code> from MMIO register - ldi 0x16 RB ; RB := 0x16 Terminal peripheral address pointer - ldr RB RB ; RB := 0xE000 Terminal peripheral address deref - str RA RB ; terminal <- character code - spo RB ; restore RA, RB + ldi vt_kb_pp_addr RA ; RA := 0x17 Keyboard peripheral address pointer + ldr RA RA ; RA := 0xE001 Keyboard peripheral address deref + ldr RA RA ; RA := <16-bit keyboard character code> from MMIO register + ldi vt_term_pp_addr RB ; RB := 0x16 Terminal peripheral address pointer + ldr RB RB ; RB := 0xE000 Terminal peripheral address deref + str RA RB ; terminal <- character code + spo RB ; restore RA, RB spo RA rti @label program_segment @address 0x0 ; set up stack pointer to point to beginning of stack segment - ldi 0x14 RA + ldi vt_stack_addr RA ldr RA RF +; set graphics mode to disabled + ldi vt_gr_mode_addr RA + ldr RA RA + ldi gr_disabled_mode RB + str RB RA +; jump to main (user defined) jpi main @address program_segment diff --git a/asm/text_mode.atk16 b/asm/text_mode.atk16 new file mode 100644 index 0000000..05b4fd3 --- /dev/null +++ b/asm/text_mode.atk16 @@ -0,0 +1,17 @@ +@opt stack_pointer RF +@opt csr_scratch RH +@use ext_std:* + +; bootstrap code (must be called to setup mandatory data) +; will jump to label main +@include bootstrap + +@label main + ; set graphics mode to gr_text_mode + ldi vt_gr_mode_addr RA + ldr RA RA + ldi gr_text_mode RB + str RB RA + +@label loop + jpi loop diff --git a/digital/atk16.dig b/digital/atk16.dig index 1b9dcc5..323ef10 100644 --- a/digital/atk16.dig +++ b/digital/atk16.dig @@ -1224,11 +1224,6 @@ <pos x="760" y="200"/> </visualElement> <visualElement> - <elementName>Break</elementName> - <elementAttributes/> - <pos x="860" y="260"/> - </visualElement> - <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> @@ -1268,11 +1263,6 @@ <pos x="640" y="220"/> </visualElement> <visualElement> - <elementName>atk16_ppu.dig</elementName> - <elementAttributes/> - <pos x="700" y="320"/> - </visualElement> - <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> @@ -1404,10 +1394,120 @@ </entry> <entry> <string>NetName</string> + <string>MMIO_IE</string> + </entry> + </elementAttributes> + <pos x="920" y="-40"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation reference="../../../../visualElement[26]/elementAttributes/entry/rotation"/> + </entry> + <entry> + <string>NetName</string> <string>CLK</string> </entry> </elementAttributes> - <pos x="700" y="340"/> + <pos x="940" y="-20"/> + </visualElement> + <visualElement> + <elementName>atk16_graphics_mode.dig</elementName> + <elementAttributes/> + <pos x="960" y="-100"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>MMIO_S</string> + </entry> + </elementAttributes> + <pos x="940" y="-80"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>NetName</string> + <string>PCLK</string> + </entry> + </elementAttributes> + <pos x="700" y="280"/> + </visualElement> + <visualElement> + <elementName>Probe</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>GRAPHICS MODE</string> + </entry> + </elementAttributes> + <pos x="1080" y="-100"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>NetName</string> + <string>GRMODE</string> + </entry> + </elementAttributes> + <pos x="1120" y="-60"/> + </visualElement> + <visualElement> + <elementName>Multiplexer</elementName> + <elementAttributes> + <entry> + <string>Selector Bits</string> + <int>2</int> + </entry> + <entry> + <string>Bits</string> + <int>8</int> + </entry> + </elementAttributes> + <pos x="980" y="460"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>GRMODE</string> + </entry> + </elementAttributes> + <pos x="980" y="580"/> + </visualElement> + <visualElement> + <elementName>atk16_ppu.dig</elementName> + <elementAttributes/> + <pos x="680" y="500"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>CLK</string> + </entry> + </elementAttributes> + <pos x="680" y="520"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1421,7 +1521,7 @@ <string>MMIO_IE</string> </entry> </elementAttributes> - <pos x="680" y="360"/> + <pos x="660" y="540"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1435,7 +1535,7 @@ <string>MMIO_S</string> </entry> </elementAttributes> - <pos x="680" y="420"/> + <pos x="660" y="600"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1449,7 +1549,7 @@ <string>MMIO_OE</string> </entry> </elementAttributes> - <pos x="680" y="380"/> + <pos x="660" y="560"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -1463,7 +1563,78 @@ <string>DBUS</string> </entry> </elementAttributes> - <pos x="680" y="400"/> + <pos x="660" y="580"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>2,2,2,1,1</string> + </entry> + </elementAttributes> + <pos x="840" y="500"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>PCLK</string> + </entry> + </elementAttributes> + <pos x="660" y="500"/> + </visualElement> + <visualElement> + <elementName>VGA</elementName> + <elementAttributes/> + <pos x="1100" y="500"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>PCLK</string> + </entry> + </elementAttributes> + <pos x="1080" y="600"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>8</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>2,2,2,1,1</string> + </entry> + </elementAttributes> + <pos x="1060" y="500"/> + </visualElement> + <visualElement> + <elementName>Const</elementName> + <elementAttributes> + <entry> + <string>Value</string> + <long>0</long> + </entry> + <entry> + <string>Bits</string> + <int>8</int> + </entry> + </elementAttributes> + <pos x="940" y="460"/> </visualElement> </visualElements> <wires> @@ -1500,10 +1671,6 @@ <p2 x="-160" y="320"/> </wire> <wire> - <p1 x="680" y="320"/> - <p2 x="700" y="320"/> - </wire> - <wire> <p1 x="260" y="320"/> <p2 x="280" y="320"/> </wire> @@ -1528,14 +1695,26 @@ <p2 x="80" y="260"/> </wire> <wire> - <p1 x="840" y="260"/> - <p2 x="860" y="260"/> - </wire> - <wire> <p1 x="260" y="260"/> <p2 x="280" y="260"/> </wire> <wire> + <p1 x="980" y="580"/> + <p2 x="1000" y="580"/> + </wire> + <wire> + <p1 x="660" y="580"/> + <p2 x="680" y="580"/> + </wire> + <wire> + <p1 x="820" y="580"/> + <p2 x="840" y="580"/> + </wire> + <wire> + <p1 x="1080" y="580"/> + <p2 x="1100" y="580"/> + </wire> + <wire> <p1 x="380" y="-200"/> <p2 x="400" y="-200"/> </wire> @@ -1560,6 +1739,18 @@ <p2 x="440" y="520"/> </wire> <wire> + <p1 x="820" y="520"/> + <p2 x="840" y="520"/> + </wire> + <wire> + <p1 x="1080" y="520"/> + <p2 x="1100" y="520"/> + </wire> + <wire> + <p1 x="960" y="520"/> + <p2 x="980" y="520"/> + </wire> + <wire> <p1 x="-160" y="200"/> <p2 x="-140" y="200"/> </wire> @@ -1616,6 +1807,14 @@ <p2 x="440" y="460"/> </wire> <wire> + <p1 x="940" y="460"/> + <p2 x="960" y="460"/> + </wire> + <wire> + <p1 x="960" y="460"/> + <p2 x="980" y="460"/> + </wire> + <wire> <p1 x="-420" y="-80"/> <p2 x="-280" y="-80"/> </wire> @@ -1648,6 +1847,10 @@ <p2 x="-460" y="-80"/> </wire> <wire> + <p1 x="940" y="-80"/> + <p2 x="960" y="-80"/> + </wire> + <wire> <p1 x="-280" y="-80"/> <p2 x="-260" y="-80"/> </wire> @@ -1660,10 +1863,6 @@ <p2 x="-160" y="400"/> </wire> <wire> - <p1 x="680" y="400"/> - <p2 x="700" y="400"/> - </wire> - <wire> <p1 x="-140" y="80"/> <p2 x="200" y="80"/> </wire> @@ -1688,6 +1887,10 @@ <p2 x="700" y="-20"/> </wire> <wire> + <p1 x="940" y="-20"/> + <p2 x="960" y="-20"/> + </wire> + <wire> <p1 x="320" y="-20"/> <p2 x="360" y="-20"/> </wire> @@ -1732,6 +1935,18 @@ <p2 x="360" y="280"/> </wire> <wire> + <p1 x="680" y="280"/> + <p2 x="700" y="280"/> + </wire> + <wire> + <p1 x="660" y="600"/> + <p2 x="680" y="600"/> + </wire> + <wire> + <p1 x="1080" y="600"/> + <p2 x="1100" y="600"/> + </wire> + <wire> <p1 x="-240" y="-220"/> <p2 x="-220" y="-220"/> </wire> @@ -1764,6 +1979,18 @@ <p2 x="440" y="540"/> </wire> <wire> + <p1 x="660" y="540"/> + <p2 x="680" y="540"/> + </wire> + <wire> + <p1 x="820" y="540"/> + <p2 x="840" y="540"/> + </wire> + <wire> + <p1 x="1080" y="540"/> + <p2 x="1100" y="540"/> + </wire> + <wire> <p1 x="-160" y="220"/> <p2 x="-140" y="220"/> </wire> @@ -1785,10 +2012,6 @@ </wire> <wire> <p1 x="820" y="220"/> - <p2 x="840" y="220"/> - </wire> - <wire> - <p1 x="840" y="220"/> <p2 x="860" y="220"/> </wire> <wire> @@ -1808,6 +2031,10 @@ <p2 x="440" y="480"/> </wire> <wire> + <p1 x="960" y="480"/> + <p2 x="980" y="480"/> + </wire> + <wire> <p1 x="20" y="-100"/> <p2 x="60" y="-100"/> </wire> @@ -1844,6 +2071,10 @@ <p2 x="220" y="-100"/> </wire> <wire> + <p1 x="680" y="-100"/> + <p2 x="960" y="-100"/> + </wire> + <wire> <p1 x="420" y="420"/> <p2 x="440" y="420"/> </wire> @@ -1852,10 +2083,6 @@ <p2 x="-160" y="420"/> </wire> <wire> - <p1 x="680" y="420"/> - <p2 x="700" y="420"/> - </wire> - <wire> <p1 x="40" y="-40"/> <p2 x="60" y="-40"/> </wire> @@ -1880,6 +2107,10 @@ <p2 x="680" y="-40"/> </wire> <wire> + <p1 x="920" y="-40"/> + <p2 x="960" y="-40"/> + </wire> + <wire> <p1 x="420" y="360"/> <p2 x="440" y="360"/> </wire> @@ -1888,10 +2119,6 @@ <p2 x="-160" y="360"/> </wire> <wire> - <p1 x="680" y="360"/> - <p2 x="700" y="360"/> - </wire> - <wire> <p1 x="420" y="300"/> <p2 x="440" y="300"/> </wire> @@ -1936,6 +2163,18 @@ <p2 x="400" y="560"/> </wire> <wire> + <p1 x="660" y="560"/> + <p2 x="680" y="560"/> + </wire> + <wire> + <p1 x="820" y="560"/> + <p2 x="840" y="560"/> + </wire> + <wire> + <p1 x="1080" y="560"/> + <p2 x="1100" y="560"/> + </wire> + <wire> <p1 x="-60" y="240"/> <p2 x="-20" y="240"/> </wire> @@ -1996,6 +2235,26 @@ <p2 x="440" y="500"/> </wire> <wire> + <p1 x="660" y="500"/> + <p2 x="680" y="500"/> + </wire> + <wire> + <p1 x="820" y="500"/> + <p2 x="840" y="500"/> + </wire> + <wire> + <p1 x="1080" y="500"/> + <p2 x="1100" y="500"/> + </wire> + <wire> + <p1 x="1020" y="500"/> + <p2 x="1060" y="500"/> + </wire> + <wire> + <p1 x="860" y="500"/> + <p2 x="980" y="500"/> + </wire> + <wire> <p1 x="220" y="-440"/> <p2 x="240" y="-440"/> </wire> @@ -2016,6 +2275,14 @@ <p2 x="-420" y="-60"/> </wire> <wire> + <p1 x="1060" y="-60"/> + <p2 x="1080" y="-60"/> + </wire> + <wire> + <p1 x="1080" y="-60"/> + <p2 x="1120" y="-60"/> + </wire> + <wire> <p1 x="-100" y="-60"/> <p2 x="60" y="-60"/> </wire> @@ -2040,10 +2307,6 @@ <p2 x="-160" y="380"/> </wire> <wire> - <p1 x="680" y="380"/> - <p2 x="700" y="380"/> - </wire> - <wire> <p1 x="180" y="-320"/> <p2 x="240" y="-320"/> </wire> @@ -2060,6 +2323,14 @@ <p2 x="0" y="320"/> </wire> <wire> + <p1 x="960" y="460"/> + <p2 x="960" y="480"/> + </wire> + <wire> + <p1 x="960" y="480"/> + <p2 x="960" y="520"/> + </wire> + <wire> <p1 x="-580" y="-140"/> <p2 x="-580" y="-100"/> </wire> @@ -2076,10 +2347,6 @@ <p2 x="200" y="80"/> </wire> <wire> - <p1 x="840" y="220"/> - <p2 x="840" y="260"/> - </wire> - <wire> <p1 x="-140" y="-40"/> <p2 x="-140" y="80"/> </wire> @@ -2173,13 +2440,17 @@ </wire> <wire> <p1 x="680" y="220"/> - <p2 x="680" y="320"/> + <p2 x="680" y="280"/> </wire> <wire> <p1 x="360" y="280"/> <p2 x="360" y="560"/> </wire> <wire> + <p1 x="1000" y="540"/> + <p2 x="1000" y="580"/> + </wire> + <wire> <p1 x="300" y="-240"/> <p2 x="300" y="-140"/> </wire> @@ -2204,6 +2475,10 @@ <p2 x="180" y="-240"/> </wire> <wire> + <p1 x="1080" y="-100"/> + <p2 x="1080" y="-60"/> + </wire> + <wire> <p1 x="-60" y="180"/> <p2 x="-60" y="240"/> </wire> diff --git a/digital/atk16_graphics_mode.dig b/digital/atk16_graphics_mode.dig new file mode 100644 index 0000000..2d05dd6 --- /dev/null +++ b/digital/atk16_graphics_mode.dig @@ -0,0 +1,311 @@ +<?xml version="1.0" encoding="utf-8"?> +<circuit> + <version>2</version> + <attributes> + <entry> + <string>romContent</string> + <romList> + <roms/> + </romList> + </entry> + <entry> + <string>Width</string> + <int>5</int> + </entry> + </attributes> + <visualElements> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>DBUS</string> + </entry> + <entry> + <string>Bits</string> + <int>16</int> + </entry> + </elementAttributes> + <pos x="220" y="160"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Description</string> + <string>00 disabled +01 text mode +10 sprite mode +11 undefined</string> + </entry> + <entry> + <string>Label</string> + <string>MODE</string> + </entry> + <entry> + <string>Bits</string> + <int>2</int> + </entry> + </elementAttributes> + <pos x="700" y="160"/> + </visualElement> + <visualElement> + <elementName>Register</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>GRAPHICS MODE</string> + </entry> + <entry> + <string>Bits</string> + <int>2</int> + </entry> + </elementAttributes> + <pos x="480" y="160"/> + </visualElement> + <visualElement> + <elementName>And</elementName> + <elementAttributes> + <entry> + <string>Inputs</string> + <int>13</int> + </entry> + </elementAttributes> + <pos x="440" y="260"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>13</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>1*13</string> + </entry> + </elementAttributes> + <pos x="400" y="260"/> + </visualElement> + <visualElement> + <elementName>And</elementName> + <elementAttributes/> + <pos x="560" y="380"/> + </visualElement> + <visualElement> + <elementName>Splitter</elementName> + <elementAttributes> + <entry> + <string>Input Splitting</string> + <string>16</string> + </entry> + <entry> + <string>Output Splitting</string> + <string>2,14</string> + </entry> + </elementAttributes> + <pos x="360" y="160"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>MMIO_S</string> + </entry> + <entry> + <string>Bits</string> + <int>13</int> + </entry> + </elementAttributes> + <pos x="220" y="280"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>MMIO_IE</string> + </entry> + </elementAttributes> + <pos x="220" y="560"/> + </visualElement> + <visualElement> + <elementName>Const</elementName> + <elementAttributes> + <entry> + <string>Value</string> + <long>2</long> + </entry> + <entry> + <string>Bits</string> + <int>13</int> + </entry> + </elementAttributes> + <pos x="260" y="320"/> + </visualElement> + <visualElement> + <elementName>XNOr</elementName> + <elementAttributes> + <entry> + <string>Bits</string> + <int>13</int> + </entry> + </elementAttributes> + <pos x="280" y="280"/> + </visualElement> + <visualElement> + <elementName>In</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>CLK</string> + </entry> + </elementAttributes> + <pos x="220" y="220"/> + </visualElement> + </visualElements> + <wires> + <wire> + <p1 x="380" y="160"/> + <p2 x="480" y="160"/> + </wire> + <wire> + <p1 x="220" y="160"/> + <p2 x="360" y="160"/> + </wire> + <wire> + <p1 x="620" y="160"/> + <p2 x="700" y="160"/> + </wire> + <wire> + <p1 x="420" y="320"/> + <p2 x="440" y="320"/> + </wire> + <wire> + <p1 x="260" y="320"/> + <p2 x="280" y="320"/> + </wire> + <wire> + <p1 x="420" y="480"/> + <p2 x="440" y="480"/> + </wire> + <wire> + <p1 x="420" y="260"/> + <p2 x="440" y="260"/> + </wire> + <wire> + <p1 x="460" y="260"/> + <p2 x="640" y="260"/> + </wire> + <wire> + <p1 x="380" y="260"/> + <p2 x="400" y="260"/> + </wire> + <wire> + <p1 x="420" y="420"/> + <p2 x="440" y="420"/> + </wire> + <wire> + <p1 x="540" y="420"/> + <p2 x="560" y="420"/> + </wire> + <wire> + <p1 x="460" y="200"/> + <p2 x="480" y="200"/> + </wire> + <wire> + <p1 x="420" y="360"/> + <p2 x="440" y="360"/> + </wire> + <wire> + <p1 x="420" y="460"/> + <p2 x="440" y="460"/> + </wire> + <wire> + <p1 x="420" y="300"/> + <p2 x="440" y="300"/> + </wire> + <wire> + <p1 x="360" y="300"/> + <p2 x="380" y="300"/> + </wire> + <wire> + <p1 x="420" y="400"/> + <p2 x="440" y="400"/> + </wire> + <wire> + <p1 x="620" y="400"/> + <p2 x="640" y="400"/> + </wire> + <wire> + <p1 x="220" y="560"/> + <p2 x="540" y="560"/> + </wire> + <wire> + <p1 x="420" y="500"/> + <p2 x="440" y="500"/> + </wire> + <wire> + <p1 x="420" y="340"/> + <p2 x="440" y="340"/> + </wire> + <wire> + <p1 x="540" y="180"/> + <p2 x="620" y="180"/> + </wire> + <wire> + <p1 x="440" y="180"/> + <p2 x="480" y="180"/> + </wire> + <wire> + <p1 x="420" y="440"/> + <p2 x="440" y="440"/> + </wire> + <wire> + <p1 x="420" y="280"/> + <p2 x="440" y="280"/> + </wire> + <wire> + <p1 x="220" y="280"/> + <p2 x="280" y="280"/> + </wire> + <wire> + <p1 x="420" y="380"/> + <p2 x="440" y="380"/> + </wire> + <wire> + <p1 x="500" y="380"/> + <p2 x="560" y="380"/> + </wire> + <wire> + <p1 x="220" y="220"/> + <p2 x="440" y="220"/> + </wire> + <wire> + <p1 x="640" y="260"/> + <p2 x="640" y="400"/> + </wire> + <wire> + <p1 x="440" y="180"/> + <p2 x="440" y="220"/> + </wire> + <wire> + <p1 x="460" y="200"/> + <p2 x="460" y="260"/> + </wire> + <wire> + <p1 x="380" y="260"/> + <p2 x="380" y="300"/> + </wire> + <wire> + <p1 x="620" y="160"/> + <p2 x="620" y="180"/> + </wire> + <wire> + <p1 x="540" y="420"/> + <p2 x="540" y="560"/> + </wire> + </wires> + <measurementOrdering/> +</circuit>
\ No newline at end of file diff --git a/digital/atk16_mem.dig b/digital/atk16_mem.dig index a3d8b5e..4c1db35 100644 --- a/digital/atk16_mem.dig +++ b/digital/atk16_mem.dig @@ -35,9 +35,9 @@ </entry> <entry> <string>Data</string> - <data>4014,2a00,6026,13*8000,1a,18,18,18,8000,0,e000,e001,4855,f000 -,3140,1b48,3148,1b48,4017,2000,2000,4216,2240,3040,1b49,2340,1b49 -,2140,e000,61ff</data> + <data>4014,2a00,4017,2000,4200,3008,6022,9*8000,1a,18,18,18,8000,e000 +,e001,e002,4855,f000,3140,1b48,3148,1b48,4016,2000,2000,4215,2240 +,3040,1b49,2340,1b49,2140,e000,4017,2000,4201,3008,61ff</data> </entry> </elementAttributes> <pos x="740" y="100"/> diff --git a/digital/atk16_ppu.dig b/digital/atk16_ppu.dig index d9064dd..c2cbdba 100644 --- a/digital/atk16_ppu.dig +++ b/digital/atk16_ppu.dig @@ -554,95 +554,6 @@ sprite mem, starting from 0x0800</string> <pos x="640" y="340"/> </visualElement> <visualElement> - <elementName>VGA</elementName> - <elementAttributes/> - <pos x="-100" y="540"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>PCLK</string> - </entry> - </elementAttributes> - <pos x="-120" y="640"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>HSYNC</string> - </entry> - </elementAttributes> - <pos x="-100" y="600"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>VSYNC</string> - </entry> - </elementAttributes> - <pos x="-100" y="620"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>PR</string> - </entry> - </elementAttributes> - <pos x="-120" y="540"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>PG</string> - </entry> - </elementAttributes> - <pos x="-120" y="560"/> - </visualElement> - <visualElement> - <elementName>Tunnel</elementName> - <elementAttributes> - <entry> - <string>rotation</string> - <rotation rotation="2"/> - </entry> - <entry> - <string>NetName</string> - <string>PB</string> - </entry> - </elementAttributes> - <pos x="-120" y="580"/> - </visualElement> - <visualElement> <elementName>Const</elementName> <elementAttributes> <entry> @@ -991,6 +902,142 @@ sprite mem, starting from 0x0800</string> </elementAttributes> <pos x="160" y="-40"/> </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>PR</string> + </entry> + <entry> + <string>Bits</string> + <int>2</int> + </entry> + </elementAttributes> + <pos x="600" y="-260"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>PG</string> + </entry> + <entry> + <string>Bits</string> + <int>2</int> + </entry> + </elementAttributes> + <pos x="600" y="-220"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>PB</string> + </entry> + <entry> + <string>Bits</string> + <int>2</int> + </entry> + </elementAttributes> + <pos x="600" y="-180"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>HSYNC</string> + </entry> + </elementAttributes> + <pos x="600" y="-140"/> + </visualElement> + <visualElement> + <elementName>Out</elementName> + <elementAttributes> + <entry> + <string>Label</string> + <string>VSYNC</string> + </entry> + <entry> + <string>Bits</string> + <int>2</int> + </entry> + </elementAttributes> + <pos x="600" y="-100"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>PB</string> + </entry> + </elementAttributes> + <pos x="580" y="-180"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>PR</string> + </entry> + </elementAttributes> + <pos x="580" y="-260"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>PG</string> + </entry> + </elementAttributes> + <pos x="580" y="-220"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>HSYNC</string> + </entry> + </elementAttributes> + <pos x="580" y="-140"/> + </visualElement> + <visualElement> + <elementName>Tunnel</elementName> + <elementAttributes> + <entry> + <string>rotation</string> + <rotation rotation="2"/> + </entry> + <entry> + <string>NetName</string> + <string>VSYNC</string> + </entry> + </elementAttributes> + <pos x="580" y="-100"/> + </visualElement> </visualElements> <wires> <wire> @@ -1026,12 +1073,8 @@ sprite mem, starting from 0x0800</string> <p2 x="540" y="320"/> </wire> <wire> - <p1 x="-120" y="640"/> - <p2 x="-100" y="640"/> - </wire> - <wire> - <p1 x="-120" y="580"/> - <p2 x="-100" y="580"/> + <p1 x="580" y="-260"/> + <p2 x="600" y="-260"/> </wire> <wire> <p1 x="200" y="-200"/> @@ -1058,6 +1101,10 @@ sprite mem, starting from 0x0800</string> <p2 x="80" y="-140"/> </wire> <wire> + <p1 x="580" y="-140"/> + <p2 x="600" y="-140"/> + </wire> + <wire> <p1 x="160" y="-140"/> <p2 x="180" y="-140"/> </wire> @@ -1134,8 +1181,8 @@ sprite mem, starting from 0x0800</string> <p2 x="420" y="280"/> </wire> <wire> - <p1 x="-120" y="540"/> - <p2 x="-100" y="540"/> + <p1 x="580" y="-220"/> + <p2 x="600" y="-220"/> </wire> <wire> <p1 x="200" y="-160"/> @@ -1178,6 +1225,10 @@ sprite mem, starting from 0x0800</string> <p2 x="-60" y="-100"/> </wire> <wire> + <p1 x="580" y="-100"/> + <p2 x="600" y="-100"/> + </wire> + <wire> <p1 x="600" y="100"/> <p2 x="620" y="100"/> </wire> @@ -1242,10 +1293,6 @@ sprite mem, starting from 0x0800</string> <p2 x="340" y="300"/> </wire> <wire> - <p1 x="-120" y="560"/> - <p2 x="-100" y="560"/> - </wire> - <wire> <p1 x="60" y="-180"/> <p2 x="80" y="-180"/> </wire> @@ -1254,6 +1301,10 @@ sprite mem, starting from 0x0800</string> <p2 x="260" y="-180"/> </wire> <wire> + <p1 x="580" y="-180"/> + <p2 x="600" y="-180"/> + </wire> + <wire> <p1 x="520" y="180"/> <p2 x="540" y="180"/> </wire> diff --git a/src/asm_ops.py b/src/asm_ops.py index 78ec356..a2631e3 100644 --- a/src/asm_ops.py +++ b/src/asm_ops.py @@ -76,8 +76,8 @@ def make_jpi(meta: Meta, symbols: Symbols, imm: str) -> int: imm_e = eval_expr(symbols, imm, bits=9) imm_e = imm_e - meta.address - 1 imm_e = imm_e & (0b111111111) - print("symbols:", symbols) - print(meta, imm, f"0x{imm_e:>0x}") + #print("symbols:", symbols) + #print(meta, imm, f"0x{imm_e:>0x}") word = (0b0110 << 12) + \ imm_e return word diff --git a/src/asm_pass3.py b/src/asm_pass3.py index 5221f6d..edfd79f 100644 --- a/src/asm_pass3.py +++ b/src/asm_pass3.py @@ -50,7 +50,7 @@ def pass_3(result2: Result2) -> Result3: rows_with_same_addr = list(filter(lambda l: l.address == result_line.address, result_lines)) n = len(rows_with_same_addr) if n > 1: - formatted = "\n".join(map(lambda l: " ".join(l.parts), rows_with_same_addr)) + formatted = format_overlapping_rows(rows_with_same_addr) raise Exception(f"Overlapping segments: address 0x{result_line.address:>04x} has conflicting definitions:\n{formatted}") return Result3( operations=result2.operations, @@ -58,3 +58,20 @@ def pass_3(result2: Result2) -> Result3: lines=result_lines, symbols=symbols, ) + +def format_overlapping_rows(rows: list[Result3Line]) -> str: + longest_val = 0 + for row in rows: + joined = " ".join(row.parts) + if len(joined) > longest_val: + longest_val = len(joined) + + first_col_width = longest_val + 4 + + results: list[str] = [] + for row in rows: + joined = " ".join(row.parts) + result = joined + (first_col_width - len(joined)) * " " + f" ({row.src_file}:{row.line_num})" + results.append(result) + + return "\n".join(results) |
