{"id":280,"date":"2012-12-27T01:03:08","date_gmt":"2012-12-27T01:03:08","guid":{"rendered":"http:\/\/retroramblings.net\/?p=280"},"modified":"2013-02-17T19:25:26","modified_gmt":"2013-02-17T19:25:26","slug":"acceleration","status":"publish","type":"post","link":"https:\/\/retroramblings.net\/?p=280","title":{"rendered":">>>>>>Acceleration!"},"content":{"rendered":"<p>Following on from the addition of the Two Way Cache in my last post, I&#8217;ve made some more speed improvements to the Chameleon 64&#8217;s Minimig core.<\/p>\n<p>Firstly, I&#8217;ve added a single-word write buffer, which means when the CPU writes to Fast RAM it doesn&#8217;t have to wait for the write to complete.\u00a0 Provided completing the write takes priority over any potential reads from the same address, and the Cache is updated to reflect the new data, then the CPU can continue merrily processing.<\/p>\n<p>Secondly, I&#8217;ve added a second access slot to the SDRAM controller, which means in many cases the wait for RAM service is reduced from a worst-case 24 cycles to 17 cycles.\u00a0 The downside is that because RAM operations between the two access slots overlap, they can&#8217;t be to the same RAM bank.\u00a0 For this reason I&#8217;ve remapped the RAM so that bank 0 contains Chip RAM, Slow RAM, Kickstart ROM and OSD RAM, leaving banks 1-3 free for Fast RAM.\u00a0 Chip RAM and Kickstart ROM accesses can thus now overlap with Fast RAM accesses.<\/p>\n<p>Finally, I&#8217;ve simplified the TG68 wrapper so that it no longer uses the enaWRreg signal to synchronize the CPU to the Amiga&#8217;s 28MHz clock.<\/p>\n<p>Between them these changes give an average speed increase of about 65%.<!--more--><\/p>\n<p><a href=\"http:\/\/retroramblings.net\/wp-content\/uploads\/2012\/12\/Acceleration.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-282\" title=\"Acceleration\" src=\"http:\/\/retroramblings.net\/wp-content\/uploads\/2012\/12\/Acceleration.jpg\" alt=\"\" width=\"651\" height=\"500\" srcset=\"https:\/\/retroramblings.net\/wp-content\/uploads\/2012\/12\/Acceleration.jpg 651w, https:\/\/retroramblings.net\/wp-content\/uploads\/2012\/12\/Acceleration-300x230.jpg 300w, https:\/\/retroramblings.net\/wp-content\/uploads\/2012\/12\/Acceleration-390x300.jpg 390w\" sizes=\"auto, (max-width: 651px) 100vw, 651px\" \/><\/a><\/p>\n<p>Again, no binaries as yet, but source is in my <a href=\"https:\/\/github.com\/robinsonb5\/minimig_tc64\/tree\/writebuffer\">github repo<\/a>.<\/p>\n<table border=\"0\" cellspacing=\"0\">\n<colgroup span=\"2\" width=\"85\"><\/colgroup>\n<colgroup width=\"129\"><\/colgroup>\n<tbody>\n<tr>\n<td align=\"LEFT\" height=\"16\"><strong>Test<\/strong><\/td>\n<td align=\"RIGHT\"><strong>Docking13<\/strong><\/td>\n<td align=\"RIGHT\"><strong>Dual Slot reduced wait<\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">EmuTest<\/td>\n<td align=\"RIGHT\">1.13<\/td>\n<td align=\"RIGHT\">1.97<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">WritePixel<\/td>\n<td align=\"RIGHT\">0.5<\/td>\n<td align=\"RIGHT\">0.57<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">Sieve<\/td>\n<td align=\"RIGHT\">0.72<\/td>\n<td align=\"RIGHT\">1.33<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">Dhrystone<\/td>\n<td align=\"RIGHT\">0.88<\/td>\n<td align=\"RIGHT\">1.86<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">Sort<\/td>\n<td align=\"RIGHT\">0.78<\/td>\n<td align=\"RIGHT\">1.61<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">Matrix<\/td>\n<td align=\"RIGHT\">0.66<\/td>\n<td align=\"RIGHT\">1.28<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">IMath<\/td>\n<td align=\"RIGHT\">1.26<\/td>\n<td align=\"RIGHT\">1.72<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">MemTest<\/td>\n<td align=\"RIGHT\">0.63<\/td>\n<td align=\"RIGHT\">1.2<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">TGTest<\/td>\n<td align=\"RIGHT\">0.7<\/td>\n<td align=\"RIGHT\">0.76<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">Savage<\/td>\n<td align=\"RIGHT\">1.37<\/td>\n<td align=\"RIGHT\">2<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">Beachball<\/td>\n<td align=\"RIGHT\">1.22<\/td>\n<td align=\"RIGHT\">1.89<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">CplxTest<\/td>\n<td align=\"RIGHT\">0.95<\/td>\n<td align=\"RIGHT\">1.74<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">TranTest<\/td>\n<td align=\"RIGHT\">1.32<\/td>\n<td align=\"RIGHT\">1.97<\/td>\n<\/tr>\n<tr>\n<td align=\"LEFT\" height=\"16\">SysInfo<\/td>\n<td align=\"RIGHT\">0.91<\/td>\n<td align=\"RIGHT\">1.86<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Following on from the addition of the Two Way Cache in my last post, I&#8217;ve made some more speed improvements to the Chameleon 64&#8217;s Minimig core. Firstly, I&#8217;ve added a single-word write buffer, which means when the CPU writes to &hellip; <a href=\"https:\/\/retroramblings.net\/?p=280\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[],"class_list":["post-280","post","type-post","status-publish","format-standard","hentry","category-amiga","category-fpga"],"_links":{"self":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/posts\/280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/retroramblings.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=280"}],"version-history":[{"count":8,"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/posts\/280\/revisions"}],"predecessor-version":[{"id":304,"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/posts\/280\/revisions\/304"}],"wp:attachment":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/retroramblings.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/retroramblings.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}