{"id":154,"date":"2011-01-05T15:30:48","date_gmt":"2011-01-05T15:30:48","guid":{"rendered":"http:\/\/www.basoft.co.uk\/wordpress\/?p=154"},"modified":"2011-01-05T15:30:48","modified_gmt":"2011-01-05T15:30:48","slug":"osca-emulator-with-added-experimental-goodness","status":"publish","type":"post","link":"http:\/\/www.basoft.co.uk\/wordpress\/2011\/01\/osca-emulator-with-added-experimental-goodness\/","title":{"rendered":"OSCA Emulator with added experimental goodness"},"content":{"rendered":"<p>So I did finally manage to spend some time looking at the video generation system in the OSCA emulator, and at the same time took the opportunity to split the CPU and video generation into separate threads to try to alleviate some of the performance problems for dual-core CPUs and better. <\/p>\n<p>Yippee &#8212; Well, almost \ud83d\ude09<\/p>\n<p>That upside is offset rather heavily by the extra strain on the emulation core incurred by adding emulation of the following:<\/p>\n<p>1. LineCop video co-processor (should be 100% emulated, or thereabouts)<br \/>\n2. Dual-Playfield Legacy tilemap mode (no hardware scroll implemented yet)<br \/>\n3. Extended dual-playfield tilemap modes (16&#215;16 and 8&#215;8) with no hardware scroll yet<br \/>\n4. Improvements to the bitmap rendering to correctly support the modulo register (well, mostly heh)<br \/>\n5. Revision of the display window sizing &#8211; this doesn&#8217;t always work correctly yet, but is a step in the right direction longer-term<br \/>\n6. Sprites. All 127 (or 126) of them! (sans-xflipping, matte mode or priority interleaving for the moment)<br \/>\n7. Second palette bank added to allow palette tomfoolery<\/p>\n<p>What this means is that it is (probably) an improvement on the previous version &#8211; certainly more runs now, provided your PC has the minerals for it!<\/p>\n<p>First screenshot shows Phil&#8217;s Vectorballs demo running (which shows sprites and legacy dual-playfield):<\/p>\n<div id=\"attachment_158\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim3.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-158\" src=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim3-300x233.png\" alt=\"Screengrab of VectorBalls 2 demo\" title=\"VectorBalls II\" width=\"300\" height=\"233\" class=\"size-medium wp-image-158\" srcset=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim3-300x233.png 300w, http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim3.png 604w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-158\" class=\"wp-caption-text\">Vectorballs II Demo<\/p><\/div>\n<p>Next screenshot shows the title screen of Phil&#8217;s Bounder remake (due to lack of joystick emulation, thats as far as it&#8217;s going for now!). There&#8217;s a weird graphical glitch during loading, but that&#8217;s a fairly minor annoyance:<\/p>\n<div id=\"attachment_157\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim2.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-157\" src=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim2-300x234.png\" alt=\"Bounder V6Z80P Screengrab\" title=\"Bounder Z80\" width=\"300\" height=\"234\" class=\"size-medium wp-image-157\" srcset=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim2-300x234.png 300w, http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim2.png 602w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-157\" class=\"wp-caption-text\">Bounder title screen on V6Z80P<\/p><\/div>\n<p>Next screenshot shows the linecop doing the aforementioned palette tomfoolery autonomously from the main CPU (as well as the bitmap modulo in its special &#8220;re-use&#8221; mode and the odd sprite or plenty) in Phil&#8217;s &#8220;Pipes&#8221; demo:<\/p>\n<div id=\"attachment_156\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-156\" src=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim1-300x232.png\" alt=\"V6Z80P Pipes demo screengrab\" title=\"Pipes Demo\" width=\"300\" height=\"232\" class=\"size-medium wp-image-156\" srcset=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim1-300x232.png 300w, http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim1.png 603w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-156\" class=\"wp-caption-text\">Pipes demo for the V6Z80P<\/p><\/div>\n<p>Finally, a couple of screenshots showing some of Altair&#8217;s excellent Loopback demo which now plays through to completion on the emulator (albeit noticably dragging the emulation kicking and screaming over hot coals in the process!). Also worth mentioning is the graphical glitch during the twisting ribbons which I have no clue about other than it might be a missing reverse-blit operation on the blitter (only forwards blits implemented currently):<br \/>\n<div id=\"attachment_159\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim4.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-159\" src=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim4-300x233.png\" alt=\"Loopback screen grab #1\" title=\"Loopback Part I\" width=\"300\" height=\"233\" class=\"size-medium wp-image-159\" srcset=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim4-300x233.png 300w, http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim4.png 602w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-159\" class=\"wp-caption-text\">First part of Altair's Loopback V6Z80P demo<\/p><\/div><br \/>\n<div id=\"attachment_155\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim5.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-155\" src=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim5-300x234.png\" alt=\"Loopback screen grab #2\" title=\"Loopback Part II\" width=\"300\" height=\"234\" class=\"size-medium wp-image-155\" srcset=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim5-300x234.png 300w, http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/uploads\/2011\/01\/experim5.png 602w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-155\" class=\"wp-caption-text\">Second part of Altair's Loopback V6Z80P demo<\/p><\/div><\/p>\n<p>So now that&#8217;s all out of the way, you can grab an executable below. You&#8217;ll need the previous binary distribution already unpacked, and this can be unpacked to the same folder (it has a different filename for your convenience!) Due to the changes made to the threading, it is <b>extremely strongly recommended not to try to resize the emulator main window, or to use the CPU controls\/breakpoint in the debug window as this will almost certainly result in emulation carnage!<\/b><\/p>\n<p>Good luck!<br \/>\nDT<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.basoft.co.uk\/wordpress\/wp-content\/plugins\/wp-downloadmanager\/images\/ext\/rar.gif\" alt=\"\" title=\"\" style=\"vertical-align: middle;\" \/>&nbsp;&nbsp;<strong><a href=\"http:\/\/www.basoft.co.uk\/wordpress\/download\/OSCA_v0.7.rar\">OSCA Experimental Binary<\/a><\/strong> (519.1 KiB, 1,522 hits)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So I did finally manage to spend some time looking at the video generation system in the OSCA emulator, and at the same time took the opportunity to split the CPU and video generation into separate threads to try to alleviate some of the performance problems for dual-core CPUs and better. Yippee &#8212; Well, almost [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,1],"tags":[],"_links":{"self":[{"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/posts\/154"}],"collection":[{"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/comments?post=154"}],"version-history":[{"count":3,"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/posts\/154\/revisions"}],"predecessor-version":[{"id":164,"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/posts\/154\/revisions\/164"}],"wp:attachment":[{"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/media?parent=154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/categories?post=154"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.basoft.co.uk\/wordpress\/wp-json\/wp\/v2\/tags?post=154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}