{"id":14,"date":"2019-02-21T23:36:05","date_gmt":"2019-02-21T23:36:05","guid":{"rendered":"http:\/\/julien-nevo.com\/disark\/?page_id=14"},"modified":"2024-06-07T11:05:51","modified_gmt":"2024-06-07T11:05:51","slug":"about-disark","status":"publish","type":"page","link":"https:\/\/julien-nevo.com\/disark\/","title":{"rendered":"About Disark"},"content":{"rendered":"\n<p>Disark is a Z80 <strong>dis<\/strong>assembler by Julien N\u00e9vo a.k.a. Targhan\/<strong>Ark<\/strong>os. But it is more than that: it can be used to convert sources from an assembler to another. Read on&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Main features<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cross-platform (Windows, Linux and MacOsx).<\/li>\n\n\n\n<li>Can read symbol files, and use them to produce a comprehensible code.<\/li>\n\n\n\n<li>All-assembler friendly:\n<ul class=\"wp-block-list\">\n<li>Undocumented instructions can be replaced by DBs.<\/li>\n\n\n\n<li> The generated source is customizable (hex symbol, etc.).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Manages regions (code, byte, word, pointers) <strong>from labels<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Why another disassembler?<\/h3>\n\n\n\n<p>A few disassemblers exist. Disark is meant to replace most of them, but was mainly created to fill a need none of these disassemblers fulfilled:<\/p>\n\n\n\n<p><strong>Disark can create &#8220;universal&#8221; Z80 source from a binary, allowing you to convert any of your Z80 source into a source that can be understood by a target assembler.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Source converter??<\/h2>\n\n\n\n<p>Yes, that&#8217;s the selling point. If you provide a symbol file, you can recreate a simple source for any assembler. Example: this is the original source file, with a lot of macros and complicated stuff:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        org #1000\n        MyConstant = 1\n        REPEAT 5,counter         ;Ooh, many assemblers don't understand that!\nMyLabel{counter}                 ;Wow, generated labels on the fly!\n                ld hl,MyLabel{counter}           ;... and a reference to them!\n        REND\n        \n        IFDEF MyConstant\n                counter = 0             ;Ouch, variable declaration.\n                while counter &lt; 3        ;Arg, a lot of assemblers don't know this.\n                        add hl,bc\n                        \n                        counter = counter + 1\n                wend\n        ENDIF\n        \n        ret<\/code><\/pre>\n\n\n\n<p>And lo and behold, this is the source regenerated by Disark from the assembled source + symbol file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    org #1000\nMYLABEL1 ld hl,MYLABEL1   ;No more complicated macros!!\nMYLABEL2 ld hl,MYLABEL2\nMYLABEL3 ld hl,MYLABEL3\nMYLABEL4 ld hl,MYLABEL4\nMYLABEL5 ld hl,MYLABEL5\n     add hl,bc\n     add hl,bc\n     add hl,bc\n     ret <\/code><\/pre>\n\n\n\n<p>Isn&#8217;t that magic? And now, you can use this source in any assembler (an output profile can be set to fit any assembler!).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">An abstract example:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You use specific features of an &#8220;A&#8221; assembler.<\/li>\n\n\n\n<li>You publish your sources, but no one wants to switch to your &#8220;A&#8221; assembler! They may try to adapt your sources to their &#8220;B&#8221; assembler, but they may end up giving up! It may be a lot of work.<\/li>\n\n\n\n<li>The solution is here: Disark allows you to rebuild a simple source for any &#8220;B&#8221;\/&#8221;C&#8221; or whatever assembler to understand.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">An example from real life:<\/h4>\n\n\n\n<p>Disark is a side-project to the music software <a href=\"http:\/\/www.julien-nevo.com\/arkostracker\/\">Arkos Tracker<\/a>, used to compose music and sound effects for retro computers such as Amstrad CPC, Atari ST, ZX Spectrum, MSX, Vectrex and Sharp MZ-700. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The Z80 players I created are meant to be used by as many people as possible. I use <a href=\"http:\/\/www.cpcwiki.eu\/forum\/programming\/rasm-z80-assembler-in-beta\/\">Rasm <\/a>as an assembler. It has some very powerful features, such as macros and real math operations.<\/li>\n\n\n\n<li>On CPC, most people work with Winape or Orgams. On other machines, they use SDCC, VAsm, SJasmPlus&#8230; These assemblers don&#8217;t understand the Rasm macros.<\/li>\n\n\n\n<li>Using Disark, they can convert the player and music binary, &#8220;flat&#8221; code, into a source their assembler understand.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How does it work?<\/h3>\n\n\n\n<p>Disark&#8217;s power relies on <strong>label semantics<\/strong>: labels inside the Z80 source can indicate Disark various things:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The start\/end of a region of code, byte, word, pointers.<\/li>\n\n\n\n<li>Force the use of a reference, or non-reference in one or several of instructions.<\/li>\n<\/ul>\n\n\n\n<p>You only add labels in your code once, and people can convert your code at will into a flat source their assembler will understand.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is Disark open-source?<\/h3>\n\n\n\n<p>Yes it is! <a href=\"https:\/\/bitbucket.org\/JulienNevo\/disark\">Check out the repo<\/a>!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Suggestions? Remarks? Bug report?<\/h3>\n\n\n\n<p>Please don&#8217;t hesitate to contact me: disark at julien-nevo dot com. Feedback is greatly wanted!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Disark is a Z80 disassembler by Julien N\u00e9vo a.k.a. Targhan\/Arkos. But it is more than that: it can be used to convert sources from an assembler to another. Read on&#8230; Main features Why another disassembler? A few disassemblers exist. Disark is meant to replace most of them, but was mainly created to fill a need <span class=\"spf-read-more\"><a class=\"spf-link-more\" href=\"https:\/\/julien-nevo.com\/disark\/\" title=\"Read moreAbout Disark\">Read more<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>About Disark - Disark<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/julien-nevo.com\/disark\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"About Disark - Disark\" \/>\n<meta property=\"og:description\" content=\"Disark is a Z80 disassembler by Julien N\u00e9vo a.k.a. Targhan\/Arkos. But it is more than that: it can be used to convert sources from an assembler to another. Read on&#8230; Main features Why another disassembler? A few disassemblers exist. Disark is meant to replace most of them, but was mainly created to fill a need Read more\" \/>\n<meta property=\"og:url\" content=\"http:\/\/julien-nevo.com\/disark\/\" \/>\n<meta property=\"og:site_name\" content=\"Disark\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-07T11:05:51+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/julien-nevo.com\/disark\/\",\"url\":\"http:\/\/julien-nevo.com\/disark\/\",\"name\":\"About Disark - Disark\",\"isPartOf\":{\"@id\":\"http:\/\/julien-nevo.com\/disark\/#website\"},\"datePublished\":\"2019-02-21T23:36:05+00:00\",\"dateModified\":\"2024-06-07T11:05:51+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/julien-nevo.com\/disark\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/julien-nevo.com\/disark\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/julien-nevo.com\/disark\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/julien-nevo.com\/disark\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"About Disark\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/julien-nevo.com\/disark\/#website\",\"url\":\"http:\/\/julien-nevo.com\/disark\/\",\"name\":\"Disark\",\"description\":\"A powerful cross-platform Z80 disassembler \/ source converter\",\"publisher\":{\"@id\":\"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/1c076d62ea698382f18b9a2a7bfddb15\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/julien-nevo.com\/disark\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/1c076d62ea698382f18b9a2a7bfddb15\",\"name\":\"Targhan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c4ecfa4cef2c920a1d2544b3025074e4ab0d1685c53b73ecdf3c803225808696?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c4ecfa4cef2c920a1d2544b3025074e4ab0d1685c53b73ecdf3c803225808696?s=96&d=mm&r=g\",\"caption\":\"Targhan\"},\"logo\":{\"@id\":\"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"About Disark - Disark","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/julien-nevo.com\/disark\/","og_locale":"en_US","og_type":"article","og_title":"About Disark - Disark","og_description":"Disark is a Z80 disassembler by Julien N\u00e9vo a.k.a. Targhan\/Arkos. But it is more than that: it can be used to convert sources from an assembler to another. Read on&#8230; Main features Why another disassembler? A few disassemblers exist. Disark is meant to replace most of them, but was mainly created to fill a need Read more","og_url":"http:\/\/julien-nevo.com\/disark\/","og_site_name":"Disark","article_modified_time":"2024-06-07T11:05:51+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/julien-nevo.com\/disark\/","url":"http:\/\/julien-nevo.com\/disark\/","name":"About Disark - Disark","isPartOf":{"@id":"http:\/\/julien-nevo.com\/disark\/#website"},"datePublished":"2019-02-21T23:36:05+00:00","dateModified":"2024-06-07T11:05:51+00:00","breadcrumb":{"@id":"http:\/\/julien-nevo.com\/disark\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/julien-nevo.com\/disark\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/julien-nevo.com\/disark\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/julien-nevo.com\/disark\/"},{"@type":"ListItem","position":2,"name":"About Disark"}]},{"@type":"WebSite","@id":"http:\/\/julien-nevo.com\/disark\/#website","url":"http:\/\/julien-nevo.com\/disark\/","name":"Disark","description":"A powerful cross-platform Z80 disassembler \/ source converter","publisher":{"@id":"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/1c076d62ea698382f18b9a2a7bfddb15"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/julien-nevo.com\/disark\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/1c076d62ea698382f18b9a2a7bfddb15","name":"Targhan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c4ecfa4cef2c920a1d2544b3025074e4ab0d1685c53b73ecdf3c803225808696?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c4ecfa4cef2c920a1d2544b3025074e4ab0d1685c53b73ecdf3c803225808696?s=96&d=mm&r=g","caption":"Targhan"},"logo":{"@id":"http:\/\/julien-nevo.com\/disark\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":21,"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/pages\/14\/revisions"}],"predecessor-version":[{"id":124,"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/pages\/14\/revisions\/124"}],"wp:attachment":[{"href":"https:\/\/julien-nevo.com\/disark\/index.php\/wp-json\/wp\/v2\/media?parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}