diff options
author | lonkaars <loek@pipeframe.xyz> | 2023-02-08 17:08:33 +0100 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2023-02-08 17:08:33 +0100 |
commit | 8892b12e7bc7bffbb51be1d8be2f6eaeb7292829 (patch) | |
tree | 5e4dc3d3c665bf4b51772aac55749f9d292db7f7 | |
parent | d74668c6ecd13d0eea7811d0b881eed2bfffa162 (diff) |
more PPU design
-rw-r--r-- | assets/ppu-level-1.svg | 2 | ||||
-rw-r--r-- | docs/ppu.drawio | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/assets/ppu-level-1.svg b/assets/ppu-level-1.svg index cba8ddb..b22cd70 100644 --- a/assets/ppu-level-1.svg +++ b/assets/ppu-level-1.svg @@ -1,3 +1,3 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1182px" height="563px" viewBox="-0.5 -0.5 1182 563" style="background-color: rgb(255, 255, 255);"><defs/><g><rect x="459" y="69" width="360" height="390" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="3" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 222px; height: 1px; padding-top: 158px; margin-left: 102px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Basys3 FPGA<br />PPU</div></div></div></foreignObject><text x="213" y="170" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Basys3 FPGA...</text></switch></g><rect x="939" y="69" width="240" height="390" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="3" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 182px; height: 1px; padding-top: 158px; margin-left: 262px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Display output<br />(VGA)</div></div></div></foreignObject><text x="353" y="170" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Display output...</text></switch></g><path d="M 339 114 L 369 114 L 448.9 114" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 455.65 114 L 446.65 118.5 L 448.9 114 L 446.65 109.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 339 174 L 399 174 L 448.9 174" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 455.65 174 L 446.65 178.5 L 448.9 174 L 446.65 169.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 339 294 L 369 294 L 439.9 294" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 455.65 294 L 434.65 304.5 L 439.9 294 L 434.65 283.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><rect x="98.91" y="69" width="240.09" height="390" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="3" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 182px; height: 1px; padding-top: 158px; margin-left: -18px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">STM32F091RC<br />CPU</div></div></div></foreignObject><text x="73" y="170" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">STM32F091RC...</text></switch></g><path d="M 340.5 420 L 340.5 408 L 399 408 L 436.5 408 L 436.5 397.5 L 457.5 414 L 436.5 430.5 L 436.5 420 L 399 420 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="1.42" pointer-events="all"/><path d="M 436.5 408 L 436.5 397.5 L 457.5 414 L 436.5 430.5 L 436.5 420" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="4" pointer-events="all"/><rect x="98.91" y="99" width="30" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 10px; height: 1px; padding-top: 38px; margin-left: 35px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VSYNC</div></div></div></foreignObject><text x="35" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VS...</text></switch></g><rect x="98.91" y="159" width="30" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 10px; height: 1px; padding-top: 58px; margin-left: 35px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">HSYNC</div></div></div></foreignObject><text x="35" y="62" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">HS...</text></switch></g><path d="M 819 114 L 909 114 L 928.9 114" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 935.65 114 L 926.65 118.5 L 928.9 114 L 926.65 109.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 819 114 L 849 114 L 849 39.09 L 39 39.09 L 39 114 L 88.81 114" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 95.56 114 L 86.56 118.5 L 88.81 114 L 86.56 109.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><rect x="789" y="99" width="30" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 38px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VSYNC</div></div></div></foreignObject><text x="271" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">VS...</text></switch></g><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 51px; height: 1px; padding-top: 38px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ENABLE</div></div></div></foreignObject><text x="155" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">ENABLE</text></switch></g><path d="M 819 174 L 879 174 L 928.9 174" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 935.65 174 L 926.65 178.5 L 928.9 174 L 926.65 169.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 819 174 L 879 174 L 879 9.09 L 9 9.09 L 9 174 L 88.81 174" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 95.56 174 L 86.56 178.5 L 88.81 174 L 86.56 169.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><rect x="789" y="159" width="30" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 58px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">HSYNC</div></div></div></foreignObject><text x="271" y="62" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">HS...</text></switch></g><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 51px; height: 1px; padding-top: 58px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">RESET</div></div></div></foreignObject><text x="155" y="62" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">RESET</text></switch></g><path d="M 819 384 L 879 384 L 928.9 384" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 935.65 384 L 926.65 388.5 L 928.9 384 L 926.65 379.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><rect x="789" y="369" width="30" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 128px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">G</div></div></div></foreignObject><text x="271" y="132" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">G</text></switch></g><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 101px; height: 1px; padding-top: 118px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VRAM-ADDR</div></div></div></foreignObject><text x="155" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VRAM-ADDR</text></switch></g><path d="M 819 414 L 879 414 L 928.9 414" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 935.65 414 L 926.65 418.5 L 928.9 414 L 926.65 409.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><rect x="789" y="399" width="30" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 138px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">B</div></div></div></foreignObject><text x="271" y="142" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">B</text></switch></g><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 101px; height: 1px; padding-top: 138px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VRAM-DATA</div></div></div></foreignObject><text x="155" y="142" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VRAM-DATA</text></switch></g><path d="M 819 354 L 879 354 L 928.9 354" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 935.65 354 L 926.65 358.5 L 928.9 354 L 926.65 349.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><rect x="789" y="339" width="30" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 118px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">R</div></div></div></foreignObject><text x="271" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">R</text></switch></g><path d="M 340.5 360 L 340.5 348 L 399 348 L 436.5 348 L 436.5 337.5 L 457.5 354 L 436.5 370.5 L 436.5 360 L 399 360 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="1.42" pointer-events="all"/><path d="M 436.5 348 L 436.5 337.5 L 457.5 354 L 436.5 370.5 L 436.5 360" fill="none" stroke="rgb(0, 0, 0)" stroke-width="3" stroke-miterlimit="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(3)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 101px; height: 1px; padding-top: 98px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VRAM-WEN</div></div></div></foreignObject><text x="155" y="102" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VRAM-WEN</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="394px" height="188px" viewBox="-0.5 -0.5 394 188" style="background-color: rgb(255, 255, 255);"><defs/><g><rect x="153" y="23" width="120" height="130" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 222px; height: 1px; padding-top: 158px; margin-left: 102px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Basys3 FPGA<br />PPU</div></div></div></foreignObject><text x="213" y="170" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Basys3 FPGA...</text></switch></g><rect x="313" y="23" width="80" height="130" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 182px; height: 1px; padding-top: 158px; margin-left: 262px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Display output<br />(VGA)</div></div></div></foreignObject><text x="353" y="170" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Display output...</text></switch></g><path d="M 113 38 L 123 38 L 149.63 38" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 151.88 38 L 148.88 39.5 L 149.63 38 L 148.88 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 113 58 L 133 58 L 149.63 58" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 151.88 58 L 148.88 59.5 L 149.63 58 L 148.88 56.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 113 98 L 123 98 L 146.63 98" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 151.88 98 L 144.88 101.5 L 146.63 98 L 144.88 94.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="32.97" y="23" width="80.03" height="130" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 182px; height: 1px; padding-top: 158px; margin-left: -18px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">STM32F091RC<br />CPU</div></div></div></foreignObject><text x="73" y="170" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">STM32F091RC...</text></switch></g><path d="M 113.5 140 L 113.5 136 L 133 136 L 145.5 136 L 145.5 132.5 L 152.5 138 L 145.5 143.5 L 145.5 140 L 133 140 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="1.42" pointer-events="all"/><path d="M 145.5 136 L 145.5 132.5 L 152.5 138 L 145.5 143.5 L 145.5 140" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="4" pointer-events="all"/><rect x="32.97" y="33" width="10" height="10" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 10px; height: 1px; padding-top: 38px; margin-left: 35px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VSYNC</div></div></div></foreignObject><text x="35" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VS...</text></switch></g><rect x="32.97" y="53" width="10" height="10" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 10px; height: 1px; padding-top: 58px; margin-left: 35px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">HSYNC</div></div></div></foreignObject><text x="35" y="62" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">HS...</text></switch></g><path d="M 273 38 L 303 38 L 309.63 38" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311.88 38 L 308.88 39.5 L 309.63 38 L 308.88 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 273 38 L 283 38 L 283 13 L 13 13 L 13 38 L 29.6 38" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 31.85 38 L 28.85 39.5 L 29.6 38 L 28.85 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="263" y="33" width="10" height="10" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 38px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VSYNC</div></div></div></foreignObject><text x="271" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">VS...</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 51px; height: 1px; padding-top: 38px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ENABLE</div></div></div></foreignObject><text x="155" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">ENABLE</text></switch></g><path d="M 273 58 L 293 58 L 309.63 58" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311.88 58 L 308.88 59.5 L 309.63 58 L 308.88 56.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 273 58 L 293 58 L 293 3 L 3 3 L 3 58 L 29.6 58" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 31.85 58 L 28.85 59.5 L 29.6 58 L 28.85 56.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="263" y="53" width="10" height="10" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 58px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">HSYNC</div></div></div></foreignObject><text x="271" y="62" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">HS...</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 51px; height: 1px; padding-top: 58px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">RESET</div></div></div></foreignObject><text x="155" y="62" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">RESET</text></switch></g><path d="M 273 128 L 293 128 L 309.63 128" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311.88 128 L 308.88 129.5 L 309.63 128 L 308.88 126.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="263" y="123" width="10" height="10" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 128px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">G</div></div></div></foreignObject><text x="271" y="132" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">G</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 101px; height: 1px; padding-top: 118px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VRAM-ADDR</div></div></div></foreignObject><text x="155" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VRAM-ADDR</text></switch></g><path d="M 273 138 L 293 138 L 309.63 138" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311.88 138 L 308.88 139.5 L 309.63 138 L 308.88 136.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="263" y="133" width="10" height="10" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 138px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">B</div></div></div></foreignObject><text x="271" y="142" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">B</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 101px; height: 1px; padding-top: 138px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VRAM-DATA</div></div></div></foreignObject><text x="155" y="142" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VRAM-DATA</text></switch></g><path d="M 273 118 L 293 118 L 309.63 118" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311.88 118 L 308.88 119.5 L 309.63 118 L 308.88 116.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="263" y="113" width="10" height="10" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 10px; height: 1px; padding-top: 118px; margin-left: 261px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">R</div></div></div></foreignObject><text x="271" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="end">R</text></switch></g><path d="M 113.5 120 L 113.5 116 L 133 116 L 145.5 116 L 145.5 112.5 L 152.5 118 L 145.5 123.5 L 145.5 120 L 133 120 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="1.42" pointer-events="all"/><path d="M 145.5 116 L 145.5 112.5 L 152.5 118 L 145.5 123.5 L 145.5 120" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 101px; height: 1px; padding-top: 98px; margin-left: 155px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">VRAM-WEN</div></div></div></foreignObject><text x="155" y="102" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">VRAM-WEN</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file diff --git a/docs/ppu.drawio b/docs/ppu.drawio index 2efedf8..8451dd9 100644 --- a/docs/ppu.drawio +++ b/docs/ppu.drawio @@ -1 +1 @@ -<mxfile host="Electron" modified="2023-02-07T18:38:14.606Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="JN-PGJMUQf8Og2T_o1es" version="20.8.16" type="device" pages="3"><diagram name="level-1" id="DBE48RpXtx8JnoEt3ekA">7Vtbd6I6FP41rjXnoV0EBOsjXtqe08txqaetjyhRmYnEBbHq/PoJmohJKJZjgWGNvkh2di7sb+fbOzHWjPZicxc4y/kTdiGq6Zq7qRmdmq6DOqjTr0iy3UturMZeMAs8lynFgoH3EzKhxqQrz4WhoEgwRsRbisIJ9n04IYLMCQK8FtWmGImjLp0ZVASDiYNU6avnkjl7C1OL5ffQm835yEBjNQuHKzNBOHdcvD4SGd2a0Q4wJvunxaYNUWQ8bpd9u9sPag8TC6BPPtPA3P5NyBsZrsBwPUL42epq91esl3cHrdgLt5xwGxpUdtu7s2u6hWjnrXFAn2bRU6/3H3sdsuU2CvDKd2E0jEY11nOPwMHSmUS1a+oVVDYnC0RLgD6GtMbzZ49wGs36ytRiWZ/ZURCyXpEzhqiHQ4942KeyCX1rGNCKdxgQj+L1KCmMMSF4QRUc5M0SW9isguBoiqo5uW2oOtwciZh57yBeQBJsqQqvtRjUzNcNVlzHjgO4N8yPnYYrOsxZZ4euYzzpA4M0A7y6Am/HC5fIiSaNV2S5IirC317u7L8uGH+AsaGfxPgmL4jfIVo+rf4F24dO/3YBn8c9958rYClYQZdSGCvigMzxDPsO6sbSlohmrPOIIzvtMPwOCdkyPnZWBIsIQ59ztZ5m1xCvgglMcVCDUboTzCBJeUsWNKI3S0UpgMgh3rtI3kk2Z0172KNTjlewKaJrSqjt58kaxcDZQbBbUlxtGSmEKcMY4jB1U2TuTOr0YT9+7EMHg5zhVjd/gls1c3GrzO5QF/G1TrhDqvrZ7vDwaL8sRqPR20O36W3sn2NsvXKDnuEN4Q9IJvP/7xqH9GnXGUWW2FF6RwU+9iGX3XrRe+10vtR7Eo2i/x7eI7ED0LKxiaR/tv+kmfQoERkMnwz9VmuCflvNQdqXLPPjDKR53WyczkGuNaPITJPHiyOEVcrwXb5mJ8gJQ28igiYifJpgIBrvOuOmPoIB7YCPSGMZtZ8iuGFDt7iV6pwz+L7O2gcgqXgUj3barGwUEp+A8UmK2QjjHzmCmZCMctm5yRKQUuGG5Fx7MyjZktKRLufUzZzSLilwglN5V7q+yJRxaz4dPJ2GkNTklfUFyVldWWsvg9FzW1lwlFGIxIskwD9gGyMcxJFzSoOmJJLWkUxmC891d0swiYaluC8QrMTBmkLVqXlfRpLU4o8hAFlP2Jgnbdry2rOZCn73F/wy4GeVjB9oqrHtt9wcJc7eUoNP2uFRyemtATLtldPV89kr6/Vy3IHO+o0nS1FhFBWuTV7sbI4rO9tDKTc3SgtWJbuR3szkRrK6fLYuq5+jXYSLWoVlDMGef3MLOV8UYPSGBELJIaWhANR9tluP3erlBMK++muzAvkHlnqRCB1+x6tk0L+pVtDXRKBPnIimq+cU9M0/MegnuFHaDqfabgTSwzg4R7sIF1WP5PLaZlY06Je9j2wqAPW7g+7wEvNTYr5VaMxPOMSuTsznZqlo0AdGRro2ivhdXFPW7N2FUGMIyj6ZUy+0vfTtpyu70+lXkFaj24QF8WryzbTciPX8CwVlEqtebWI9dYaarp8TserKym1diDWGoGxiVW9w7Ii1Yw/tC7GmEmuxp1RAQaNKxFqvNrHqGYlVL4JY1dsCeaRCVSVWvWxiVS8DqCv4cnEq68Up8EmCKOXilKFda8cfS3RJzUysznqtCjTOGiavS1cnOPKEfiGXrtJu+8oJ0Gv3+ZL/pOY/2tfQKS3Gf5bbgxr/5dDo/gI=</diagram><diagram id="MdQQJuunD4ehtDpxKxax" name="level-2">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</diagram><diagram id="lj51MlK96fuJFRP7cw84" name="level-3">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</diagram></mxfile>
\ No newline at end of file +<mxfile host="Electron" modified="2023-02-08T16:08:09.541Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.8.16 Chrome/106.0.5249.199 Electron/21.4.0 Safari/537.36" etag="d05vrlod5NdehcYUxLo3" version="20.8.16" type="device" pages="3"><diagram name="level-1" id="DBE48RpXtx8JnoEt3ekA">7Vtbd6I6FP41rnXOQ7u4CNZHvLQ909bjUk9bH1EiMhOJC2LV+fUTJBFDEMqh4LDGPnSRnQ0J+/v2JSE21O5q9+CZ6+ULsgBsKJK1a6i9hqLoLZX8DwT7UNCUqcD2HCsUyZFg7PwEVChR6caxgM8pYoQgdta8cI5cF8wxJzM9D215tQWC/Khr0waCYDw3oSh9cyy8DKV3mhTJH4FjL9nIskR7ViZTpgJ/aVpoeyJS+w216yGEw6vVrgtgYDtml/C++zO9x4l5wMWfuUHb/4PxO55s5Ml2CtFA70uPN/QpHybc0BfumP7eJxhJ98MHo6HokDy8M/PIlR1cDYf/0dfBe2YjD21cCwTDSERju3QwGK/NedC7JaQgsiVeQdKSyaVPehzXfgaLYNY3mhTJRtSOnJA+FZozAIfId7CDXCKbk7cGHun4AB52CF7PMYUZwhitiIIJHTvxDoN2YBRMUTQnsw1RB7sTETXvA0ArgL09UWG9OoWacl2lzW1EHJmxYXlKGqZoUrLax0dHeJILCmkOeBUB3p7jr6EZTBpt8HqDRYT/en0w/r5ifAZjVcnE+K4siD8AXL9s/pX3T73R/QoMZkPr242sC1gBi4Qw2kQeXiIbuSbsR9IOj2ak84wCOx0w/A4w3tN4bG4w4hEGLovVSppdfbTx5iCFoDQZYNOzAU55y1aoF7xZKkoegCZ2PvjgnWRzeusQOWTKkQdrPLpaDLVwnvSmCDjD8w4uxdTWgYKfMozKD9PU+MidS51chONHHDoapACt7v4EWrVLoVVuOjR5fPUMOqSqF6bD07PxuppOp+9P/bazM37OkP7GDFqADf4PgOfL/0+NY/l0eBhBFhtBeUcELnIBk907wXsddL6UPYlGUX4P9sSigyzliyYx/cL8STPpSSEynryoyr3UlkddsQbpXqvM8xVI+7bdyq5BbiW1ykqT5YsThMWQ4VrMZ+fQ9H1nzoPGI5wdYACcHR7GTH0CAzwAHwSNdXD/AoIdHbrDrNRkMYOt6/QwAcWaJ/nooE3baiX5iS2WM0PMjhv/hAhaQjHKZEWLJTlWCrdi5ArNIFRLwoOUeE3dLqnsiiVOOavuStfnI2V0N5sOWix8gBtxz/qC4qwp+NrreDroCg5HIgqOxUXsoR+giyDyosy5IEkzJor5UTyYrRzLOrhgUhiO5X0uwMZisCSE6tS6r0iQbIpB8kyMLGulpgmoPV5Ry0BNvzhqclvMY7/lQihx9rqYaNI2ii5cyqpyrnVxuno562KleRk6kFm/s8IoaEyDxq3Gmr3daWdvf2yVRqO0xHRhGintXDSKq8f30ePqRbSroKheWXXghfG3tETzRWnluCMbKwUqyR8tAY3+wOg89+uX9rkF89cm/viXk0oROn6gq2WGv6tXhpfS9i5zqpeU4bU/McMn0ChtEVNvGsnpOVsuol0FRcW9trJWkjXN8HqV+aMtoDHqj/uTa4JPSfCVAqQkbEXXJ8Ezs9Q0w8tqztisVvF1Wzz39DoyXm6MXm9UQ78NDp1V5LjJB5hK89zi350v6blKvT03a/stXb8kzxW/JB88t2dMjKvnpnputYtqWUCjTp7brLfnKjk9V6nCc8XvXyJFricE8p4QkD/JwIucEFClW+n0T+dpJ2mJ3XnPD8itQsOUdbogwwkz9Cs5XZB2rC2eYd/6g2uCTU2wUkkJFg5gz/7elPyNtbzrrL4tRiM74ZcbAjo2MdT6zFsdfzFjzpi6dMYmn951SVwblHfwXRIs8FACQS+zA5YKeTZD+Z3Lig5KiHGjc8WDw6PStbMsnhIrY2+jlngUBIA0o9/thWk3+vGj2v8F</diagram><diagram id="MdQQJuunD4ehtDpxKxax" name="level-2">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</diagram><diagram id="lj51MlK96fuJFRP7cw84" name="level-3">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</diagram></mxfile>
\ No newline at end of file |