diff options
| -rw-r--r-- | atk16.egg-info/PKG-INFO | 4 | ||||
| -rw-r--r-- | atk16.egg-info/SOURCES.txt | 30 | ||||
| -rw-r--r-- | atk16.egg-info/dependency_links.txt | 1 | ||||
| -rw-r--r-- | atk16.egg-info/entry_points.txt | 3 | ||||
| -rw-r--r-- | atk16.egg-info/requires.txt | 1 | ||||
| -rw-r--r-- | atk16.egg-info/top_level.txt | 3 | ||||
| -rw-r--r-- | atk16_emu/emu.py | 60 | ||||
| -rw-r--r-- | atk16_emu/memory.py | 56 | ||||
| -rw-r--r-- | atk16_emu/peripherals.py | 56 | ||||
| -rw-r--r-- | digital_diagrams/atk16_mem.dig | 422 |
10 files changed, 324 insertions, 312 deletions
diff --git a/atk16.egg-info/PKG-INFO b/atk16.egg-info/PKG-INFO deleted file mode 100644 index 193ecdf..0000000 --- a/atk16.egg-info/PKG-INFO +++ /dev/null @@ -1,4 +0,0 @@ -Metadata-Version: 2.1 -Name: atk16 -Version: 0.1 -Requires-Dist: getch>=1.0 diff --git a/atk16.egg-info/SOURCES.txt b/atk16.egg-info/SOURCES.txt deleted file mode 100644 index 069ea3e..0000000 --- a/atk16.egg-info/SOURCES.txt +++ /dev/null @@ -1,30 +0,0 @@ -setup.py -atk16.egg-info/PKG-INFO -atk16.egg-info/SOURCES.txt -atk16.egg-info/dependency_links.txt -atk16.egg-info/entry_points.txt -atk16.egg-info/requires.txt -atk16.egg-info/top_level.txt -atk16_asm/__init__.py -atk16_asm/asm_eval.py -atk16_asm/asm_ops.py -atk16_asm/asm_pass0.py -atk16_asm/asm_pass1.py -atk16_asm/asm_pass2.py -atk16_asm/asm_pass3.py -atk16_asm/asm_pass4.py -atk16_asm/assembler.py -atk16_asm/optimizer.py -atk16_asm/pad_bin.py -atk16_asm/parser.py -atk16_asm/tokenizer.py -atk16_emu/__init__.py -atk16_emu/cli.py -atk16_emu/debugger.py -atk16_emu/emu.py -atk16_emu/opcodes.py -atk16_emu/test/__init__.py -atk16_emu/test/test_opcode_alr.py -atk16_emu/test/test_opcode_hlt.py -test/__init__.py -test/utils.py
\ No newline at end of file diff --git a/atk16.egg-info/dependency_links.txt b/atk16.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/atk16.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/atk16.egg-info/entry_points.txt b/atk16.egg-info/entry_points.txt deleted file mode 100644 index 543f53b..0000000 --- a/atk16.egg-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -atk16c = atk16_asm.assembler:main -atk16emu = atk16_emu.cli:main diff --git a/atk16.egg-info/requires.txt b/atk16.egg-info/requires.txt deleted file mode 100644 index 36f298c..0000000 --- a/atk16.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -getch>=1.0 diff --git a/atk16.egg-info/top_level.txt b/atk16.egg-info/top_level.txt deleted file mode 100644 index b7ba0e4..0000000 --- a/atk16.egg-info/top_level.txt +++ /dev/null @@ -1,3 +0,0 @@ -atk16_asm -atk16_emu -test diff --git a/atk16_emu/emu.py b/atk16_emu/emu.py index 1a08103..90b588d 100644 --- a/atk16_emu/emu.py +++ b/atk16_emu/emu.py @@ -1,68 +1,14 @@ import os os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide" -import random + import sys from dataclasses import dataclass from .opcodes import * +from .memory import * from .colors import C from .peripherals import Graphics, DummyGraphics -class Register: - def __init__(self, bits: int): - self.bits = bits - self.value = random.randint(0, 2 ** bits) - - def set_value(self, value: int): - if value < 0 or value >= 2 ** self.bits: - raise ValueError(f"Value {value} is out of range for {self.bits}-bit register") - - self.value = value - -class Counter: - def __init__(self, bits: int): - self.bits = bits - self.value = random.randint(0, 2 ** bits) - - def step(self): - self.value = (self.value + 1) % (2 ** self.bits) - - def reset(self): - self.value = 0 - -class ROM: - def __init__(self, addr_bits: int, data_bits: int): - self.addr_bits = addr_bits - self.data_bits = data_bits - self.memory = [random.randint(0, 2 ** data_bits) for _ in range(2 ** addr_bits)] - - def read(self, addr: int) -> int: - if addr < 0 or addr >= 2 ** self.addr_bits: - raise ValueError(f"Address {addr} is out of range for {self.addr_bits}-bit ROM") - - return self.memory[addr] - -class RAM: - def __init__(self, addr_bits: int, data_bits: int): - self.addr_bits = addr_bits - self.data_bits = data_bits - self.memory = [random.randint(0, 2 ** data_bits) for _ in range(2 ** addr_bits)] - - def read(self, addr: int) -> int: - if addr < 0 or addr >= 2 ** self.addr_bits: - raise ValueError(f"Address {addr} is out of range for {self.addr_bits}-bit RAM") - - return self.memory[addr] - - def write(self, addr: int, value: int): - if addr < 0 or addr >= 2 ** self.addr_bits: - raise ValueError(f"Address {addr} is out of range for {self.addr_bits}-bit RAM") - - if value < 0 or value >= 2 ** self.data_bits: - raise ValueError(f"Value {value} is out of range for {self.data_bits}-bit RAM") - - self.memory[addr] = value - @dataclass class ALUFlags: carry: bool @@ -259,6 +205,8 @@ class Machine: self.graphics.activate_tpu() elif addr == 0xE002 and value == 0b10: self.graphics.activate_ppu() + elif 0xF800 < addr <= 0xFFFF: + self.graphics.write(addr, value) else: self.ram.write(addr & 0x7FFF, value) diff --git a/atk16_emu/memory.py b/atk16_emu/memory.py new file mode 100644 index 0000000..2ce9c85 --- /dev/null +++ b/atk16_emu/memory.py @@ -0,0 +1,56 @@ +import random + +class Register: + def __init__(self, bits: int): + self.bits = bits + self.value = random.randrange(0, 2 ** bits) + + def set_value(self, value: int): + if value < 0 or value >= 2 ** self.bits: + raise ValueError(f"Value {value} is out of range for {self.bits}-bit register") + + self.value = value + +class Counter: + def __init__(self, bits: int): + self.bits = bits + self.value = random.randrange(0, 2 ** bits) + + def step(self): + self.value = (self.value + 1) % (2 ** self.bits) + + def reset(self): + self.value = 0 + +class ROM: + def __init__(self, addr_bits: int, data_bits: int): + self.addr_bits = addr_bits + self.data_bits = data_bits + self.memory = [random.randrange(0, 2 ** data_bits) for _ in range(2 ** addr_bits)] + + def read(self, addr: int) -> int: + if addr < 0 or addr >= 2 ** self.addr_bits: + raise ValueError(f"Address {addr} is out of range for {self.addr_bits}-bit ROM") + + return self.memory[addr] + +class RAM: + def __init__(self, addr_bits: int, data_bits: int): + self.addr_bits = addr_bits + self.data_bits = data_bits + self.memory = [random.randrange(0, 2 ** data_bits) for _ in range(2 ** addr_bits)] + + def read(self, addr: int) -> int: + if addr < 0 or addr >= 2 ** self.addr_bits: + raise ValueError(f"Address {addr} is out of range for {self.addr_bits}-bit RAM") + + return self.memory[addr] + + def write(self, addr: int, value: int): + if addr < 0 or addr >= 2 ** self.addr_bits: + raise ValueError(f"Address {addr} is out of range for {self.addr_bits}-bit RAM") + + if value < 0 or value >= 2 ** self.data_bits: + raise ValueError(f"Value {value} is out of range for {self.data_bits}-bit RAM") + + self.memory[addr] = value
\ No newline at end of file diff --git a/atk16_emu/peripherals.py b/atk16_emu/peripherals.py index dc35e3e..c11bb55 100644 --- a/atk16_emu/peripherals.py +++ b/atk16_emu/peripherals.py @@ -1,47 +1,79 @@ import pygame +import sys +from .memory import RAM, ROM class TPU: def __init__(self): - self.surface: pygame.Surface | None = None - self.text_mem = [] + self.surface = pygame.Surface((320, 240)) + self.surface.fill((255, 0, 0)) + self.text_mem = RAM(11, 8) + self.char_mem = ROM(11, 8) + + with open("out/charmem.bin", "rb") as f: + charmem = f.read() + for i in range(len(charmem)): + self.char_mem.memory[i] = int(charmem[i]) & 0xFF def frame(self): - # TODO - pass + if not self.surface: + return + + for cy in range(2 ** 3): + for ty in range(2 ** 5): + for tx in range(2 ** 6): + text_addr = (ty << 6) + tx + char_s = self.text_mem.read(text_addr) + char_addr = (char_s << 3) + cy + char_d = self.char_mem.read(char_addr) + + for cx in range(2 ** 3): + sx = (tx << 3) + cx + sy = (ty << 3) + cy + #print("cy", cy, "ty", ty, "cx", cx, "tx", tx, "text_addr", text_addr, "char_s", char_s, "char_addr", char_addr) + pixel_value_bit = (char_d >> cx) & 1 + + self.surface.set_at((sx, sy), (255 * pixel_value_bit, 255 * pixel_value_bit, 255)) + + def write_char(self, addr: int, char: int): + # address: 5 bits y, 6 bits x + self.text_mem.write(addr, char) class Graphics: def __init__(self): pygame.init() pygame.display.init() - self.surface = None + surface_scale = 4 + self.screen = pygame.display.set_mode((320 * surface_scale, 240 * surface_scale)) self.clock = pygame.time.Clock() self.tpu = TPU() self.active_picture_unit: TPU | None = None def activate_tpu(self): - if self.active_picture_unit: - pygame.display.quit() - - pygame.display.init() - self.surface = pygame.display.set_mode((320, 240)) self.active_picture_unit = self.tpu - self.active_picture_unit.surface = self.surface def activate_ppu(self): raise NotImplementedError() def deactivate(self): self.active_picture_unit = None - pygame.display.quit() def step(self): if self.active_picture_unit: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit(0) + self.active_picture_unit.frame() + self.screen.blit(pygame.transform.scale(self.tpu.surface, self.screen.get_size()), (0, 0)) pygame.display.flip() self.clock.tick(60) + def write(self, addr: int, char: int): + # take only the lower 11 bits + self.tpu.write_char(addr & 0x7FF, char) + class DummyGraphics: def __init__(self): pass diff --git a/digital_diagrams/atk16_mem.dig b/digital_diagrams/atk16_mem.dig index 6ff9810..30579a7 100644 --- a/digital_diagrams/atk16_mem.dig +++ b/digital_diagrams/atk16_mem.dig @@ -1,10 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> <circuit> <version>2</version> <attributes> <entry> <string>romContent</string> <romList> - <roms /> + <roms/> </romList> </entry> <entry> @@ -34,40 +35,57 @@ </entry> <entry> <string>Data</string> - <data>4014,2e00,1dc0,6026,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,001b,001a,001a,001a,8000,e000,e001,e002,e800,f800,f000,31c0,1fc8,31c8,1fc8,4016,2000,2000,4215,2240,3040,1fc9,23c0,1fc9,21c0,e000,4017,2000,4200,3008,600d,0008,0000,0001,0002,0017,0019,9000,0100,0031,0061,0062,0063,0032,402f,2000,0fc0,4433,2480,31d0,1fc8,1fc9,25c0,2480,31d0,1fc8,1fc9,21c0,4200,0270,3040,4434,2480,31d0,1fc8,1fc9,25c0,2480,31d0,1fc8,1fc9,21c0,4201,0270,3040,4000,0180,2000,31c0,1fc8,4031,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4035,2000,31c0,1fc8,4000,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,4037,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4035,2000,31c0,1fc8,4001,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,4038,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4035,2000,31c0,1fc8,4002,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,4039,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4035,2000,31c0,1fc8,4003,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,403a,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4035,2000,31c0,1fc8,4004,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,403b,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4035,2000,31c0,1fc8,4005,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,4000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4435,2480,31d0,1fc8,1fc9,21c0,4202,0270,3040,4400,31d0,1fc8,1fc9,21c0,4203,0270,3040,4402,0590,2480,31d0,1fc8,1fc9,25c0,2480,31d0,1fc8,1fc9,21c0,4204,0270,3040,4400,31d0,1fc8,1fc9,21c0,4205,0270,3040,4201,31c8,1fc8,1fc9,21c0,1000,8451,4435,2480,31d0,1fc8,4403,0590,2480,31d0,1fc8,1fc9,27c0,1fc9,25c0,0498,31d0,1fc8,1fc9,21c0,4206,0270,3040,4406,0590,2480,31d0,1fc8,1fc9,25c0,2480,31d0,1fc8,1fc9,21c0,4207,0270,3040,4007,0180,2000,31c0,1fc8,4000,31c0,1fc8,1fc9,21c0,1000,8402,6020,6000,4407,0590,2480,31d0,1fc8,1fc9,21c0,4205,0270,3040,4403,0590,2480,31d0,1fc8,4401,31d0,1fc8,1fc9,27c0,1fc9,25c0,0498,31d0,1fc8,1fc9,21c0,4203,0270,3040,61a8,4001,0180,2000,31c0,1fc8,4000,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,4004,0180,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,4001,0180,2000,31c0,1fc8,4001,31c0,1fc8,1fc9,23c0,1fc9,21c0,0008,31c0,1fc8,4005,0180,2000,31c0,1fc8,1fc9,23c0,1fc9,21c0,3008,4000,31c0,1fc8,1fc9,21c0,1f80,f000</data> + <data>4014,2c00,6019,13*8000,c0,1a,1a,1a,8000,e000,e001,e002,e800,f800 +,4855,f000,4017,2000,4200,3008,6000,6001,f840,4422,2480,4220,3088 +,1488,4248,3088,1488,4245,3088,1488,424c,3088,1488,424c,3088,1488 +,424f,3088,1488,4220,3088,1488,4223,3088,1488,4276,3088,1488,4261 +,3088,1488,4269,3088,1488,426e,3088,1488,4263,3088,1488,426f,3088 +,1488,426f,3088,1488,4264,3088,1488,4269,3088,1488,426a,3088,1488 +,4275,3088,1488,4274,3088,1488,4275,3088,1488,4274,3088,1488,14b5 +,1488,14b7,4220,3088,1488,42bb,3088,1488,42bb,3088,1488,42bb,3088 +,1488,42bb,3088,1488,4220,3088,1488,4242,3088,1488,4259,3088,1488 +,4220,3088,1488,4240,3088,1488,426b,3088,1488,4261,3088,1488,426c +,3088,1488,425f,3088,1488,426a,3088,1488,4261,3088,1488,426e,3088 +,1488,4220,3088,1488,42bb,3088,1488,42bb,3088,1488,42bb,3088,1488 +,42bb,3088,1488,14b5,1488,14b7,14b5,1488,14b7,4220,3088,1488,423e +,3088,1488,4220,3088,1488,4017,2000,4201,3008,61ff,3140,1b48,3148 +,1b48,3158,1b48,4016,2000,2000,4215,2240,1600,16e9,16e9,8407,1600 +,16e9,16d9,8410,3080,1488,6012,14b5,1488,14b7,4220,3088,1488,423e +,3088,1488,4220,3088,1488,6005,1489,4220,3088,1488,1489,3158,1b48 +,3148,1b48,3140,1b48,e000</data> </entry> </elementAttributes> - <pos x="740" y="100" /> + <pos x="740" y="100"/> </visualElement> <visualElement> <elementName>Ground</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="1" /> + <rotation rotation="1"/> </entry> </elementAttributes> - <pos x="720" y="160" /> + <pos x="720" y="160"/> </visualElement> <visualElement> <elementName>VDD</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="1" /> + <rotation rotation="1"/> </entry> </elementAttributes> - <pos x="720" y="120" /> + <pos x="720" y="120"/> </visualElement> <visualElement> <elementName>VDD</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation" /> + <rotation reference="../../../../visualElement[3]/elementAttributes/entry/rotation"/> </entry> </elementAttributes> - <pos x="720" y="180" /> + <pos x="720" y="180"/> </visualElement> <visualElement> <elementName>In</elementName> @@ -85,7 +103,7 @@ <int>16</int> </entry> </elementAttributes> - <pos x="160" y="140" /> + <pos x="160" y="140"/> </visualElement> <visualElement> <elementName>Splitter</elementName> @@ -99,12 +117,12 @@ <string>13,1,1,1</string> </entry> </elementAttributes> - <pos x="220" y="140" /> + <pos x="220" y="140"/> </visualElement> <visualElement> <elementName>atk16_mem_mux.dig</elementName> - <elementAttributes /> - <pos x="320" y="160" /> + <elementAttributes/> + <pos x="320" y="160"/> </visualElement> <visualElement> <elementName>Splitter</elementName> @@ -118,7 +136,7 @@ <string>15</string> </entry> </elementAttributes> - <pos x="320" y="80" /> + <pos x="320" y="80"/> </visualElement> <visualElement> <elementName>Splitter</elementName> @@ -132,7 +150,7 @@ <string>2</string> </entry> </elementAttributes> - <pos x="400" y="160" /> + <pos x="400" y="160"/> </visualElement> <visualElement> <elementName>Demultiplexer</elementName> @@ -146,7 +164,7 @@ <int>15</int> </entry> </elementAttributes> - <pos x="420" y="60" /> + <pos x="420" y="60"/> </visualElement> <visualElement> <elementName>Probe</elementName> @@ -156,7 +174,7 @@ <string>ROM_OUT</string> </entry> </elementAttributes> - <pos x="840" y="100" /> + <pos x="840" y="100"/> </visualElement> <visualElement> <elementName>Driver</elementName> @@ -170,7 +188,7 @@ <boolean>true</boolean> </entry> </elementAttributes> - <pos x="880" y="140" /> + <pos x="880" y="140"/> </visualElement> <visualElement> <elementName>Demultiplexer</elementName> @@ -184,7 +202,7 @@ <boolean>true</boolean> </entry> </elementAttributes> - <pos x="420" y="300" /> + <pos x="420" y="300"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -194,7 +212,7 @@ <string>RAM_IE</string> </entry> </elementAttributes> - <pos x="480" y="320" /> + <pos x="480" y="320"/> </visualElement> <visualElement> <elementName>In</elementName> @@ -216,7 +234,7 @@ <boolean>true</boolean> </entry> </elementAttributes> - <pos x="260" y="500" /> + <pos x="260" y="500"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -226,7 +244,7 @@ <string>CLK</string> </entry> </elementAttributes> - <pos x="180" y="280" /> + <pos x="180" y="280"/> </visualElement> <visualElement> <elementName>RAMDualPort</elementName> @@ -244,59 +262,59 @@ <int>16</int> </entry> </elementAttributes> - <pos x="660" y="280" /> + <pos x="660" y="280"/> </visualElement> <visualElement> <elementName>VDD</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="1" /> + <rotation rotation="1"/> </entry> </elementAttributes> - <pos x="640" y="360" /> + <pos x="640" y="360"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>CLK</string> </entry> </elementAttributes> - <pos x="640" y="340" /> + <pos x="640" y="340"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>RAM_IE</string> </entry> </elementAttributes> - <pos x="640" y="320" /> + <pos x="640" y="320"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>DBUS</string> </entry> </elementAttributes> - <pos x="640" y="300" /> + <pos x="640" y="300"/> </visualElement> <visualElement> <elementName>Probe</elementName> @@ -306,7 +324,7 @@ <string>RAM_OUT</string> </entry> </elementAttributes> - <pos x="760" y="280" /> + <pos x="760" y="280"/> </visualElement> <visualElement> <elementName>Driver</elementName> @@ -316,7 +334,7 @@ <int>16</int> </entry> </elementAttributes> - <pos x="860" y="320" /> + <pos x="860" y="320"/> </visualElement> <visualElement> <elementName>In</elementName> @@ -330,7 +348,7 @@ <string>CLK</string> </entry> </elementAttributes> - <pos x="160" y="280" /> + <pos x="160" y="280"/> </visualElement> <visualElement> <elementName>Out</elementName> @@ -344,7 +362,7 @@ <string>MMIO_IE</string> </entry> </elementAttributes> - <pos x="880" y="540" /> + <pos x="880" y="540"/> </visualElement> <visualElement> <elementName>Out</elementName> @@ -358,7 +376,7 @@ <string>MMIO_OE</string> </entry> </elementAttributes> - <pos x="880" y="600" /> + <pos x="880" y="600"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -368,7 +386,7 @@ <string>MMIO_S</string> </entry> </elementAttributes> - <pos x="260" y="40" /> + <pos x="260" y="40"/> </visualElement> <visualElement> <elementName>Testcase</elementName> @@ -394,7 +412,7 @@ C 0x8000 0 1 Z 0xAA </testData> </entry> </elementAttributes> - <pos x="540" y="480" /> + <pos x="540" y="480"/> </visualElement> <visualElement> <elementName>In</elementName> @@ -408,7 +426,7 @@ C 0x8000 0 1 Z 0xAA <string>MEM_IE</string> </entry> </elementAttributes> - <pos x="160" y="340" /> + <pos x="160" y="340"/> </visualElement> <visualElement> <elementName>In</elementName> @@ -422,17 +440,17 @@ C 0x8000 0 1 Z 0xAA <string>MEM_OE</string> </entry> </elementAttributes> - <pos x="260" y="560" /> + <pos x="260" y="560"/> </visualElement> <visualElement> <elementName>And</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> </elementAttributes> - <pos x="960" y="280" /> + <pos x="960" y="280"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -442,7 +460,7 @@ C 0x8000 0 1 Z 0xAA <string>RAM_OE</string> </entry> </elementAttributes> - <pos x="960" y="280" /> + <pos x="960" y="280"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -452,7 +470,7 @@ C 0x8000 0 1 Z 0xAA <string>MEM_OE</string> </entry> </elementAttributes> - <pos x="280" y="560" /> + <pos x="280" y="560"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -462,7 +480,7 @@ C 0x8000 0 1 Z 0xAA <string>MEM_OE</string> </entry> </elementAttributes> - <pos x="960" y="240" /> + <pos x="960" y="240"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -472,17 +490,17 @@ C 0x8000 0 1 Z 0xAA <string>DBUS</string> </entry> </elementAttributes> - <pos x="900" y="320" /> + <pos x="900" y="320"/> </visualElement> <visualElement> <elementName>And</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> </elementAttributes> - <pos x="960" y="200" /> + <pos x="960" y="200"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -492,7 +510,7 @@ C 0x8000 0 1 Z 0xAA <string>ROM_OE</string> </entry> </elementAttributes> - <pos x="960" y="200" /> + <pos x="960" y="200"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -502,7 +520,7 @@ C 0x8000 0 1 Z 0xAA <string>MEM_OE</string> </entry> </elementAttributes> - <pos x="960" y="160" /> + <pos x="960" y="160"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -512,7 +530,7 @@ C 0x8000 0 1 Z 0xAA <string>DBUS</string> </entry> </elementAttributes> - <pos x="920" y="120" /> + <pos x="920" y="120"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -522,7 +540,7 @@ C 0x8000 0 1 Z 0xAA <string>DBUS</string> </entry> </elementAttributes> - <pos x="280" y="500" /> + <pos x="280" y="500"/> </visualElement> <visualElement> <elementName>Decoder</elementName> @@ -536,7 +554,7 @@ C 0x8000 0 1 Z 0xAA <boolean>true</boolean> </entry> </elementAttributes> - <pos x="460" y="180" /> + <pos x="460" y="180"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -546,7 +564,7 @@ C 0x8000 0 1 Z 0xAA <string>ROM_OE</string> </entry> </elementAttributes> - <pos x="500" y="180" /> + <pos x="500" y="180"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -556,7 +574,7 @@ C 0x8000 0 1 Z 0xAA <string>RAM_OE</string> </entry> </elementAttributes> - <pos x="500" y="200" /> + <pos x="500" y="200"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -566,7 +584,7 @@ C 0x8000 0 1 Z 0xAA <string>MMIO_OE</string> </entry> </elementAttributes> - <pos x="500" y="220" /> + <pos x="500" y="220"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -576,73 +594,73 @@ C 0x8000 0 1 Z 0xAA <string>MMIO_IE</string> </entry> </elementAttributes> - <pos x="480" y="340" /> + <pos x="480" y="340"/> </visualElement> <visualElement> <elementName>And</elementName> - <elementAttributes /> - <pos x="780" y="580" /> + <elementAttributes/> + <pos x="780" y="580"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>MEM_OE</string> </entry> </elementAttributes> - <pos x="780" y="620" /> + <pos x="780" y="620"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>MMIO_OE</string> </entry> </elementAttributes> - <pos x="780" y="580" /> + <pos x="780" y="580"/> </visualElement> <visualElement> <elementName>And</elementName> - <elementAttributes /> - <pos x="780" y="500" /> + <elementAttributes/> + <pos x="780" y="500"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>MEM_IE</string> </entry> </elementAttributes> - <pos x="780" y="540" /> + <pos x="780" y="540"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>MMIO_IE</string> </entry> </elementAttributes> - <pos x="780" y="500" /> + <pos x="780" y="500"/> </visualElement> <visualElement> <elementName>Out</elementName> @@ -660,21 +678,21 @@ C 0x8000 0 1 Z 0xAA <int>13</int> </entry> </elementAttributes> - <pos x="880" y="460" /> + <pos x="880" y="460"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> <elementAttributes> <entry> <string>rotation</string> - <rotation rotation="2" /> + <rotation rotation="2"/> </entry> <entry> <string>NetName</string> <string>MMIO_S</string> </entry> </elementAttributes> - <pos x="860" y="460" /> + <pos x="860" y="460"/> </visualElement> <visualElement> <elementName>Tunnel</elementName> @@ -684,266 +702,266 @@ C 0x8000 0 1 Z 0xAA <string>MEM_IE</string> </entry> </elementAttributes> - <pos x="300" y="360" /> + <pos x="300" y="360"/> </visualElement> </visualElements> <wires> <wire> - <p1 x="720" y="160" /> - <p2 x="740" y="160" /> + <p1 x="720" y="160"/> + <p2 x="740" y="160"/> </wire> <wire> - <p1 x="240" y="160" /> - <p2 x="260" y="160" /> + <p1 x="240" y="160"/> + <p2 x="260" y="160"/> </wire> <wire> - <p1 x="380" y="160" /> - <p2 x="400" y="160" /> + <p1 x="380" y="160"/> + <p2 x="400" y="160"/> </wire> <wire> - <p1 x="420" y="160" /> - <p2 x="440" y="160" /> + <p1 x="420" y="160"/> + <p2 x="440" y="160"/> </wire> <wire> - <p1 x="260" y="160" /> - <p2 x="320" y="160" /> + <p1 x="260" y="160"/> + <p2 x="320" y="160"/> </wire> <wire> - <p1 x="440" y="160" /> - <p2 x="480" y="160" /> + <p1 x="440" y="160"/> + <p2 x="480" y="160"/> </wire> <wire> - <p1 x="460" y="320" /> - <p2 x="480" y="320" /> + <p1 x="460" y="320"/> + <p2 x="480" y="320"/> </wire> <wire> - <p1 x="640" y="320" /> - <p2 x="660" y="320" /> + <p1 x="640" y="320"/> + <p2 x="660" y="320"/> </wire> <wire> - <p1 x="720" y="320" /> - <p2 x="760" y="320" /> + <p1 x="720" y="320"/> + <p2 x="760" y="320"/> </wire> <wire> - <p1 x="880" y="320" /> - <p2 x="900" y="320" /> + <p1 x="880" y="320"/> + <p2 x="900" y="320"/> </wire> <wire> - <p1 x="760" y="320" /> - <p2 x="840" y="320" /> + <p1 x="760" y="320"/> + <p2 x="840" y="320"/> </wire> <wire> - <p1 x="620" y="100" /> - <p2 x="740" y="100" /> + <p1 x="620" y="100"/> + <p2 x="740" y="100"/> </wire> <wire> - <p1 x="260" y="100" /> - <p2 x="320" y="100" /> + <p1 x="260" y="100"/> + <p2 x="320" y="100"/> </wire> <wire> - <p1 x="380" y="100" /> - <p2 x="420" y="100" /> + <p1 x="380" y="100"/> + <p2 x="420" y="100"/> </wire> <wire> - <p1 x="860" y="260" /> - <p2 x="900" y="260" /> + <p1 x="860" y="260"/> + <p2 x="900" y="260"/> </wire> <wire> - <p1 x="240" y="200" /> - <p2 x="320" y="200" /> + <p1 x="240" y="200"/> + <p2 x="320" y="200"/> </wire> <wire> - <p1 x="640" y="360" /> - <p2 x="660" y="360" /> + <p1 x="640" y="360"/> + <p2 x="660" y="360"/> </wire> <wire> - <p1 x="280" y="360" /> - <p2 x="300" y="360" /> + <p1 x="280" y="360"/> + <p2 x="300" y="360"/> </wire> <wire> - <p1 x="240" y="40" /> - <p2 x="260" y="40" /> + <p1 x="240" y="40"/> + <p2 x="260" y="40"/> </wire> <wire> - <p1 x="840" y="520" /> - <p2 x="860" y="520" /> + <p1 x="840" y="520"/> + <p2 x="860" y="520"/> </wire> <wire> - <p1 x="640" y="300" /> - <p2 x="660" y="300" /> + <p1 x="640" y="300"/> + <p2 x="660" y="300"/> </wire> <wire> - <p1 x="800" y="140" /> - <p2 x="840" y="140" /> + <p1 x="800" y="140"/> + <p2 x="840" y="140"/> </wire> <wire> - <p1 x="160" y="140" /> - <p2 x="220" y="140" /> + <p1 x="160" y="140"/> + <p2 x="220" y="140"/> </wire> <wire> - <p1 x="840" y="140" /> - <p2 x="860" y="140" /> + <p1 x="840" y="140"/> + <p2 x="860" y="140"/> </wire> <wire> - <p1 x="860" y="460" /> - <p2 x="880" y="460" /> + <p1 x="860" y="460"/> + <p2 x="880" y="460"/> </wire> <wire> - <p1 x="240" y="80" /> - <p2 x="320" y="80" /> + <p1 x="240" y="80"/> + <p2 x="320" y="80"/> </wire> <wire> - <p1 x="340" y="80" /> - <p2 x="380" y="80" /> + <p1 x="340" y="80"/> + <p2 x="380" y="80"/> </wire> <wire> - <p1 x="460" y="80" /> - <p2 x="600" y="80" /> + <p1 x="460" y="80"/> + <p2 x="600" y="80"/> </wire> <wire> - <p1 x="260" y="560" /> - <p2 x="280" y="560" /> + <p1 x="260" y="560"/> + <p2 x="280" y="560"/> </wire> <wire> - <p1 x="720" y="180" /> - <p2 x="740" y="180" /> + <p1 x="720" y="180"/> + <p2 x="740" y="180"/> </wire> <wire> - <p1 x="240" y="180" /> - <p2 x="280" y="180" /> + <p1 x="240" y="180"/> + <p2 x="280" y="180"/> </wire> <wire> - <p1 x="380" y="180" /> - <p2 x="400" y="180" /> + <p1 x="380" y="180"/> + <p2 x="400" y="180"/> </wire> <wire> - <p1 x="880" y="180" /> - <p2 x="900" y="180" /> + <p1 x="880" y="180"/> + <p2 x="900" y="180"/> </wire> <wire> - <p1 x="280" y="180" /> - <p2 x="320" y="180" /> + <p1 x="280" y="180"/> + <p2 x="320" y="180"/> </wire> <wire> - <p1 x="640" y="340" /> - <p2 x="660" y="340" /> + <p1 x="640" y="340"/> + <p2 x="660" y="340"/> </wire> <wire> - <p1 x="160" y="340" /> - <p2 x="280" y="340" /> + <p1 x="160" y="340"/> + <p2 x="280" y="340"/> </wire> <wire> - <p1 x="460" y="340" /> - <p2 x="480" y="340" /> + <p1 x="460" y="340"/> + <p2 x="480" y="340"/> </wire> <wire> - <p1 x="280" y="340" /> - <p2 x="420" y="340" /> + <p1 x="280" y="340"/> + <p2 x="420" y="340"/> </wire> <wire> - <p1 x="260" y="500" /> - <p2 x="280" y="500" /> + <p1 x="260" y="500"/> + <p2 x="280" y="500"/> </wire> <wire> - <p1 x="160" y="280" /> - <p2 x="180" y="280" /> + <p1 x="160" y="280"/> + <p2 x="180" y="280"/> </wire> <wire> - <p1 x="600" y="280" /> - <p2 x="660" y="280" /> + <p1 x="600" y="280"/> + <p2 x="660" y="280"/> </wire> <wire> - <p1 x="720" y="120" /> - <p2 x="740" y="120" /> + <p1 x="720" y="120"/> + <p2 x="740" y="120"/> </wire> <wire> - <p1 x="280" y="120" /> - <p2 x="320" y="120" /> + <p1 x="280" y="120"/> + <p2 x="320" y="120"/> </wire> <wire> - <p1 x="900" y="120" /> - <p2 x="920" y="120" /> + <p1 x="900" y="120"/> + <p2 x="920" y="120"/> </wire> <wire> - <p1 x="840" y="600" /> - <p2 x="880" y="600" /> + <p1 x="840" y="600"/> + <p2 x="880" y="600"/> </wire> <wire> - <p1 x="460" y="60" /> - <p2 x="620" y="60" /> + <p1 x="460" y="60"/> + <p2 x="620" y="60"/> </wire> <wire> - <p1 x="860" y="540" /> - <p2 x="880" y="540" /> + <p1 x="860" y="540"/> + <p2 x="880" y="540"/> </wire> <wire> - <p1 x="480" y="160" /> - <p2 x="480" y="180" /> + <p1 x="480" y="160"/> + <p2 x="480" y="180"/> </wire> <wire> - <p1 x="260" y="100" /> - <p2 x="260" y="160" /> + <p1 x="260" y="100"/> + <p2 x="260" y="160"/> </wire> <wire> - <p1 x="900" y="120" /> - <p2 x="900" y="140" /> + <p1 x="900" y="120"/> + <p2 x="900" y="140"/> </wire> <wire> - <p1 x="840" y="100" /> - <p2 x="840" y="140" /> + <p1 x="840" y="100"/> + <p2 x="840" y="140"/> </wire> <wire> - <p1 x="620" y="60" /> - <p2 x="620" y="100" /> + <p1 x="620" y="60"/> + <p2 x="620" y="100"/> </wire> <wire> - <p1 x="240" y="40" /> - <p2 x="240" y="80" /> + <p1 x="240" y="40"/> + <p2 x="240" y="80"/> </wire> <wire> - <p1 x="240" y="80" /> - <p2 x="240" y="140" /> + <p1 x="240" y="80"/> + <p2 x="240" y="140"/> </wire> <wire> - <p1 x="880" y="160" /> - <p2 x="880" y="180" /> + <p1 x="880" y="160"/> + <p2 x="880" y="180"/> </wire> <wire> - <p1 x="280" y="120" /> - <p2 x="280" y="180" /> + <p1 x="280" y="120"/> + <p2 x="280" y="180"/> </wire> <wire> - <p1 x="280" y="340" /> - <p2 x="280" y="360" /> + <p1 x="280" y="340"/> + <p2 x="280" y="360"/> </wire> <wire> - <p1 x="440" y="140" /> - <p2 x="440" y="160" /> + <p1 x="440" y="140"/> + <p2 x="440" y="160"/> </wire> <wire> - <p1 x="440" y="160" /> - <p2 x="440" y="300" /> + <p1 x="440" y="160"/> + <p2 x="440" y="300"/> </wire> <wire> - <p1 x="600" y="80" /> - <p2 x="600" y="280" /> + <p1 x="600" y="80"/> + <p2 x="600" y="280"/> </wire> <wire> - <p1 x="760" y="280" /> - <p2 x="760" y="320" /> + <p1 x="760" y="280"/> + <p2 x="760" y="320"/> </wire> <wire> - <p1 x="380" y="80" /> - <p2 x="380" y="100" /> + <p1 x="380" y="80"/> + <p2 x="380" y="100"/> </wire> <wire> - <p1 x="860" y="520" /> - <p2 x="860" y="540" /> + <p1 x="860" y="520"/> + <p2 x="860" y="540"/> </wire> <wire> - <p1 x="860" y="260" /> - <p2 x="860" y="300" /> + <p1 x="860" y="260"/> + <p2 x="860" y="300"/> </wire> </wires> - <measurementOrdering /> + <measurementOrdering/> </circuit>
\ No newline at end of file |
