aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2023-02-17 17:20:17 +0100
committerlonkaars <loek@pipeframe.xyz>2023-02-17 17:20:17 +0100
commit321f73a53b49913d6e1bd5f84a49302e4fbc2968 (patch)
treeb15764d013a2aeafbf9ba6dfc27aa1de5490f511 /docs
parent4d6d5672e53c095eaf18d073004658b92402a471 (diff)
WIP ppu.vhdl
Diffstat (limited to 'docs')
-rw-r--r--docs/architecture.md25
-rw-r--r--docs/ppu.drawio2
2 files changed, 18 insertions, 9 deletions
diff --git a/docs/architecture.md b/docs/architecture.md
index 7ec0494..6b37604 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -185,7 +185,7 @@ Important notes:
for the foreground and background layer, these components will be combined
into one for each layer respectively. They are separated in the above diagram
for pipeline stage illustration.
-- The BAX, FAM, and PAL registers are implemented in the component that
+- The AUX, FAM, and PAL registers are implemented in the component that
directly accesses them, but are exposed to the PPU RAM bus for writing.
- Each foreground sprite render component holds its own sprite data copy from
the RAM in it's own cache memory. The cache updates are fetched during the
@@ -222,8 +222,6 @@ Important notes:
- All DATA and ADDR lines are shared between all RAM ports. WEN inputs are
controlled by the address decoder.
-<!--
-
## Registers
|Address|Size (bytes)|Alias|Description|
@@ -232,7 +230,7 @@ Important notes:
|`0x00000`|`0x00000`|BAM |[background attribute memory][BAM]|
|`0x00000`|`0x00000`|FAM |[foreground attribute memory][FAM]|
|`0x00000`|`0x00000`|PAL |[palettes][PAL]|
-|`0x00000`|`0x00000`|BAX |[background auxiliary memory][BAX]|
+|`0x00000`|`0x00000`|AUX |[auxiliary memory][AUX]|
[TMM]: #tilemap-memory
### Tilemap memory
@@ -242,24 +240,35 @@ Important notes:
[BAM]: #background-attribute-memory
### Background attribute memory
+- 15-bit words (padded with 1 bit)
+- 11-bit address width (1200 15-bit words with padding 1)
+
- TODO: list format
[FAM]: #foreground-attribute-memory
### Foreground attribute memory
+- 2 * 16-bit words
+- 8-bit address width (256 16-bit words for 128 * 32-bit)
+
- TODO: list format
[PAL]: #palettes
### Palettes
+- 12-bit words
+- 6-bit address width (2^6 = 64 colors total)
+
- TODO: list format
-[BAX]: #background-auxiliary-memory
-### Background auxiliary memory
+[AUX]: #auxiliary-memory
+### Auxiliary memory
-- background scrolling
+- background scrolling (8 + 9 bits)
+- fetch foreground sprites bit (1 bit)
--->
+- 16-bit words
+- 1-bit address width
[custompputimings]: https://docs.google.com/spreadsheets/d/1MU6K4c4PtMR_JXIpc3I0ZJdLZNnoFO7G2P3olCz6LSc
diff --git a/docs/ppu.drawio b/docs/ppu.drawio
index 18970be..c0ce0be 100644
--- a/docs/ppu.drawio
+++ b/docs/ppu.drawio
@@ -1 +1 @@
-<mxfile host="Electron" modified="2023-02-14T13:06:31.768Z" 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="X-qfzIqKq46fJAfw7kxz" version="20.8.16" type="device" pages="3"><diagram name="level-1" id="DBE48RpXtx8JnoEt3ekA">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</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-17T15:42:42.163Z" 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="F4f9xIP4TBzWa1ggQMnZ" version="20.8.16" type="device" pages="3"><diagram name="level-1" id="DBE48RpXtx8JnoEt3ekA">7Vzbcto6FP0aZs55SMayjYFHc0lymoRmCElKX84YEOBWIGqLBPL1lUHCFxmZm21o6Uut7W3Z2mtpbd1IQauN57eONR094j5EBVXpzwtavaCqQAc6/c+zLFaWslFaGYaO3WdOvuHZ/oTMqDDrzO5DN+RIMEbEnoaNPTyZwB4J2SzHwR9htwFG4bdOrSEUDM89C4nWN7tPRqwVRcW330F7OOJvBgq7M7a4MzO4I6uPPwImrVHQag7GZHU1ntcg8oLH47J67mbD3fWHOXBCtnmguPiPkG+kPQPtjw7CTaOh3F2xWt4tNGMNrlruwtWo7ebp1iyoBqKVV7sOvRp6V09PL6w5ZMFj5ODZpA+91yjU42NkE/g8tXre3Q/KCmobkTGiJUAvXXrHngwf4MD76qui4ttaLI4hI6sVWV2InrBrExtPqK1HWw0deuMdOsSmeD1EHLqYEDymDhayh7FPmOwGwd4niuHksaHucB4wsfDeQjyGxFlQF3ZX5dgzrpdY8cMnDjCYbRQkjcaMFiPrcF21jye9YJDuAK8qwFu33SmyvI/GMzKdERHhf15vzX8vGG/AWNcTMS6nBfE7RNPH2VewuK+3bsaw2X3qf7kCZQEr2KcSxorYISM8xBMLNXxrNYym7/OAvTgtMfwBCVkwPbZmBIcRhhOu1YYHI3Hwz7U+AlmkXTxzelBCWY2JvOUMIZG0u7Ly89oqxc2ByCL2e1jO41BYPmo6zrJzcIcptifEDdT85Bl8OoBKmA7lYliDd3KnF6v3+2xYN2Qrgtw/mK/jTqfz7b5RsefmZxcbbzygB/DD/QlJb7Q/WdaZb1kZRZaYXmamhgmeQG67sb12LX2Oyp7YoKinwZ5SmA5AT6CP3P9g/shCGsghz+1HTb1RKqBVE9NH7TJA2Jg8SpXrSik5fVwrWpaDBJ5BAgiLkjHp8z7bQ5br2r0waGGEkwUGou6yMh7qAAxoCbwnGlPv+QGCc/bqKo+SzjWDpxxjlZIiRSZIKvdmZS2T/AS0LSVmHnp/gAjFmHEEt+2mS6KQFMNCooMIuVZhYE9JFEk1IhVFWbqKk1DRzkpZjihfUqKV+4eV0n+afw4eDFxICtGetZuaxtOiku9wTd2W/LFfb4jkl807MkuvG3mgCRlzO6IfC25Vzwdu+tXfuBh7hY5XuC7yYn0evFlfrEvBUT2c22RdCb3uBK79CrwCf37PeUAJ3D0i5cfLrwdTfftu/Hopff9/a53VT2Ikp5V3mgdE3Q1F6m4c4n3kOUY8zfka11mqWvlEVS0eXl3dbdKQ4J8SIYoX3dtP9/Qtda94EmTUIgsalQTdi7gX5UpWPMS7kgHN2WAuMHNqNZ4bbYH7dH5IIrPcJWVqGGE64+TrIAMboYgpMiuKTk3Hdr+/7Dtxk+rIKk5ouiybUbOpt1RU918Vj10eTWt1NG4qez6JiYflTDJTdFQDSruNgiL+6XRZIG55vbbMxyuzXm+dYb/19hsz6rjxe1ep9dzD163z7LnqeffcHecv0uWVo/VccSV62XPrZtu89Fxpz8025wIBjXPquTED8HPqucaOPdfIoucWhZ4rUuSyw7DrDgPYkoG57DCUlGsl+M8I004vxt7eef8BHPSatHYnEjphgn8muxOybfFohn1rNC8JVppg9ZQSLGqi+vCHrriz/qhcHX8ZtFrDmEN7AjpDGqjp9g1dn5+0urwGRRoAzdhibpDemSdFiMBtCgR1Vk1JjaHxZJRCnszQRZh8mYz4gKgb1QseITzUTPHQBTzSWNs4SzyODUDsIv4pKrQWw0A1LQYaQgCar8+dZu2PYaEU9uxZKNvXDIJwdwEhs1QZ+3VipsxdGeIWh44hDLJjHYH2t/8CYVA3YJdTehKHB+2/QBi2ByFlYVh0urMW6XbNX59fUbNyVat2X05yyKCkpAyxARCVsf1afTCb938MK6W4Zy8NsZ8To893FxRy1gZRr1PDJOVFudRW5MSfVgCuVIEF7w0/rUgLN3HbIzVF+4NwA7njJs5eM8/FYlzK8WEJ7m4AoJXSydiyo9dBeqc0ijwRdkvJkkz5TAgtOywaTCAXpLZP8vkpUU6/FtrvGPVGOQxuecvG/sEtb1lCzfsEfnT3T0k4gR/x1+XnmPVDvAE47nmO+NFyTj/32I+W4un88Hn//Wkbc1JDNn7Pm7ZASpVEf01ORO0Qb6AeRFta9P+Qzsrd/3NEWuM3</diagram><diagram id="MdQQJuunD4ehtDpxKxax" name="level-2">7Vxdd9o4EP01eaTH38AjpE26J2mbNkm7rwILUGMsrywH6K9fCWSwJGNswOA09KV4NLasmTu6I3mUK/t6Or8lIJp8wT4MrizDn1/ZH68sy3RMh/3HJYuVpOO1V4IxQb5Q2gge0R8ohIaQJsiHsaRIMQ4oimThEIchHFJJBgjBM1lthAO51wiMoSZ4HIJAl/5CPp2IUbjGRv4ZovEk7dk0RMsUpMpCEE+Aj2cZkf3pyr4mGNPVr+n8GgbceKldVvfdbGldvxiBIS1zg3s96r5+dl7/fLt7XbhJQD7/vm917NVjXkGQiBFHKIIBCiF/ZcqtYxlmyxJjoIvUMDD0e9y+7CrETNvuT+g0YFcm+0lwEvqQd2ywq/XI+YUP4smyhevFL5AOJ6IlAAMYPOAYUYRDJiMrs/ZfIaGIeeReaZ8i3+dv0wcBGufd0BPyAaYUT1kDjsAQUY5El3eoW1AYFfoSKIQ9byGeQkoWTGEuqc82wEhxMclgIpURGACKXmVgAYHP8frh6/4eMGLvZRkickzbkG+JcUKGUGhlHZ/eKN7SS2/c9iAKyBjSggeling0iqGkw35kDLMRLbFXBYftMjh0Lyg8Nwrt9pFQqD3otCj8Shb/WGE4bQ8T5p+5m8A7v+WWAaHdci4wPDcM16x6KAy1BzVgMvT0yTCOCKIcfSgcYR1+zEWP4hITOsFjHILg00aqYjCLtM0N9xhHAou/IaULkY2BhGIZ0RKGWVwQqqB/KbtBfNhLna0gjDkIw3FfXH/sFCFx5eMCwzlphrj0YYGia++F7X1BWz9k2vrU9fTlyx5AYa6NeOsogHPh1JOBZxDg4UsOevTZlUky7fsDJsXBTsA4RknAVIMIGxZYZBQiDpg4B0ECh7arpHIdJeevps9+rN7g5HhNIzWD1z4YvoyXUOOeK5zvZEDOJkz1kU0kvHXGlqEy3raig09KcF7oTdFqObIZ08sM13VyuK5jbHe/ZNDKBKFH+4UgShFE2Xh3238bQegL/f0I4sxAyeMnKYsuBY7c7P/o2KiXC0yzGhfs0N/GBSmTtOW7WyUT8KMRho7fG0xgQwnDdPciDKcuwkidl7HeOMADECwHGrAQXZnOZ8N7c1PCAXTglE3/OscO+YPcmb53xp3XeBrx3QBMzg5+NVs6JfrJf23Xj7vA9L/Z3+ffImd2d98yNZP8zZh2y2K67Bq4XhqzPGWq3EFj1kHq6jcSlSO7ReoyRe7BbLnotC7oLFggXtCZ0e6cHp36SvPnbY97mq3TePrwvqHbvft+mzx//dUbGff9Z7/1/DP81aoHuXpGbshocA2FP7fsZFfec9rSz9Y9p2L9M+456VimKOSmkCFtjGEICWhiKuUY5VIpr7aFxPvKpTpl2co9dswf5iVLQzoZD9aCiwcb78GOvj/+0Lvfw3NN/J5zCnc25HuNkj7azg7uLNY/OMUrNGoWa+s9oQDjlyRqHBHaVjkirG1Hzeu+p2m0/HdSp1HTaLurQbvfe2ufxY9PikZZbzZjEW4rwe/tmEQL1euZQ9O5JwO03vO/bwxoNfB12YKchvK1uWutW6xfD9Zc/VPYY/r1i7nIh81bt5reuelaz3EiNF+dVQAUvCsubx+by4XTW8YHse6seU9W3TU1K26bmgVBetKaDP0z3s2by05qII2cZLOoYOPMnNGtlJwUaletwTBLbvkejXn0wuSmMY9aeXF25ml7ms0ulbm7JwHvjWWOjhLYu6qxdujXkzl6+q7iEwrglMWhZUzhFAu8nzOAXbVMLSeATeukEaznjpdNhPKbCF4zaNrxKvF0sXpN4akv7KSieEApQYNkSbcNjdacUq/agjW3XkE3YTwkEIZ8oOlpOdVobKxUiSNK8Au8xgEmm9gZsbBRROlhuyGzIEt+9Dr29bG8PFfIzlqe+Nv4O+3JhyOQBPRI2ZFaztLO8ZeR4y+12vd4pYz6xtnDwzMT/OBTrDFI4sMwrjqE4qUCJugPDilI50EfETgURylnMKZX+kFKcRLhaTkVGxvBD2GlwpMJ5V3kGDsjys5xkH0MDxWtsi4OmssOqeYf8xglGUXlRhn/hCsafUN1LWsa2bFKc+syoqUZ8R2UuZ2zek3dlPNqql5T+3G71TYLFf3qm4U59XHdD93sP7k/dZ7Y+1wNu9z8cZmV+uZP9Nif/gc=</diagram><diagram id="lj51MlK96fuJFRP7cw84" name="level-3">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</diagram></mxfile> \ No newline at end of file