{"id":524,"date":"2008-07-14T16:00:42","date_gmt":"2008-07-14T23:00:42","guid":{"rendered":"https:\/\/www.reenigne.org\/blog\/?p=524"},"modified":"2008-05-23T16:47:56","modified_gmt":"2008-05-23T23:47:56","slug":"modular-emulator","status":"publish","type":"post","link":"https:\/\/www.reenigne.org\/blog\/modular-emulator\/","title":{"rendered":"Modular emulator"},"content":{"rendered":"<p>Among the many programs I'd like to write is a replacement for <a href=\"http:\/\/www.mess.org\">MESS<\/a> (and possibly also <a href=\"http:\/\/www.mame.org\">MAME<\/a> while I'm at it). Don't get me wrong, I think these are fantastic pieces of software but I do have some problems with them that can really only be solved by starting my own emulation project rather than by contributing to them. In no particular order:<\/p>\n<ul>\n<li>I like writing software from scratch.<\/li>\n<li>They are written in C with all kinds of macro trickery to make it more object orientated. I'd rather write it in C++ or some language of my own devising.<\/li>\n<li>I don't like the unskippable startup screens that MAME and MESS use. I'd like to set up a PC emulator using a free clone BIOS and DOS and distribute it as a turnkey method for running old games like Digger.<\/li>\n<li>I'd like to make it possible to \"build\" emulated machines at run time (without having to create a driver etc.). You'd be able to say \"connect up this CPU, this sound hardware, this video hardware and load this ROM at this address\" and it would all work. The emulator would come with a set of pre-written modules, it would have a language for designing modules and plugging them together and possibly even a graphical designer for wiring things up.<\/li>\n<li>MAME and MESS timeslice much more coarsely than I'd like to. They emulate the CPU for a while (until a new frame or an interrupt starts usually) then see what the screen has done in that time, what sound was output in that time and so on. I'd like to timeslice on a cycle by cycle basis for more accurate emulation (so raster effects can be done with horizontal pixel accuracy) and to enable emulation of things like the prefetch cache on the 8088 (the lack of which makes MESS about 30% too fast).This sounds like it would make emulation very slow, but in fact if we organized it well and all the code fits into the CPU cache, we'd be doing no more work than MESS is now.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Among the many programs I'd like to write is a replacement for MESS (and possibly also MAME while I'm at it). Don't get me wrong, I think these are fantastic pieces of software but I do have some problems with them that can really only be solved by starting my own emulation project rather than [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-524","post","type-post","status-publish","format-standard","hentry","category-emulation"],"_links":{"self":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/posts\/524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/comments?post=524"}],"version-history":[{"count":0,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/posts\/524\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/media?parent=524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/categories?post=524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/tags?post=524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}