{"id":14599,"date":"2022-12-11T10:38:44","date_gmt":"2022-12-11T10:38:44","guid":{"rendered":"https:\/\/bryceautomation.com\/?p=14599"},"modified":"2022-12-18T22:49:05","modified_gmt":"2022-12-18T22:49:05","slug":"compiling-assembly-programs-under-cp-m","status":"publish","type":"post","link":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/","title":{"rendered":"Compiling Assembly Programs under CP\/M"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction to Compiling Assembly Programs under CP\/M for the Z80<\/h2>\n\n\n\n<p>In this post, we&#8217;ll discuss Compiling Assembly Programs under CP\/M using <a href=\"http:\/\/www.retroarchive.org\/cpm\/lang\/Z80ASM.ZIP\">Z80ASM<\/a>.  For this section, I&#8217;ll be using the <a href=\"http:\/\/cpuville.com\/Kits\/Single-board-kit.html\">CPUVille Single Board Computer.<\/a>  <\/p><div id=\"bryce-15755889\" class=\"bryce-afterfirst bryce-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-8316758073402323\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-8316758073402323\" \ndata-ad-slot=\"7728240895\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>\n\n\n\n<p>Once you understand how to assemble a program, you can start writing your own programs.  A good way to learn assembly is to start off with a very simple program.  At this point, you can start learning more instructions, and improving your project.  Before you know it, you will be familiar with the entire instruction set.<\/p>\n\n\n\n<p>It&#8217;s important to realize that although the Z80 is compatible (for the most part) with the 8080, the instructions have different mnemonics.  For example, a Move in the 8080 is now a Load in the Z80.  This is due to a copyright on the 8080 instruction set.<\/p>\n\n\n\n<p>In this example, we&#8217;ll write a simple &#8220;Hello World!&#8221; program.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Write the Code<\/h2>\n\n\n\n<p>We&#8217;ll start off by creating a label, CPM that points to 0005H.  This will be the location of CP\/M that we need to access to print our text to the screen.  Write this in kwrite, or notepad., or any other text editor.    You can even write this using Wordstar on the Z80 machine as a non-document file.<\/p>\n\n\n\n<p>At this point, we&#8217;ll set the ORG at 0100H.  This is the starting point for our program.  All of your programs within CP\/M will start at this address.  <\/p>\n\n\n\n<p>After that, we need to load a function code, 09H into the C register.  This will tell the BDOS code that we want to output a string.  You can find a list of the BDOS function codes for CP\/M at<a href=\"https:\/\/www.seasip.info\/Cpm\/bdosfunc.html\"> this link.<\/a><\/p>\n\n\n\n<p>Our next line, LD DE,TEXT loads the address of our TEXT label to the DE Register.<\/p>\n\n\n\n<p>Our registers are all set up now, and we will CALL CPM to print our text to the display.  This will end with the $, which is our termination character.<\/p>\n\n\n\n<p>At last, we will return to CP\/M.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CPM:\tEQU      0005H ; Address of BDOS\n        ORG\t 0100H ; This is where your CP\/M Programs Start\n        LD\t C,09H ; This is the function code to print a string in BDOS\n        LD\t DE,TEXT  ; This is the address of where our text begins\n        CALL     CPM  ; BDOS address (0005H)\n        RET\t ;RETURN TO CPM\n    \nTEXT:\tDEFB\t48H, 45H, 4CH, 4CH, 4FH, 20H ;Hello\n        DEFB\t57H, 4FH, 52H, 4CH, 44H, 21H ;World!\n        DEFB\t0DH, 0AH, 24H  ; Text terminates with 24H ($)\n        END<\/code><\/pre>\n\n\n\n<p>I&#8217;ll save this file as &#8220;helloworld.z80&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Transfer Your File to the Z80 Computer<\/h2>\n\n\n\n<p>If you wrote this in Wordstar, you can skip this step, because the file is already on your Z80 Computer.  If you wrote this in Linux or Windows, though, we will transfer the file to the computer using xmodem.  We&#8217;ll do this with the PCGET command.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"416\" height=\"62\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-7.png\" alt=\"\" class=\"wp-image-14602 lazyload\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-7.png 416w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-7-300x45.png 300w\" data-sizes=\"(max-width: 416px) 100vw, 416px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 416px; --smush-placeholder-aspect-ratio: 416\/62;\" \/><\/figure>\n\n\n\n<p>If you use minicom, you can use CTRL-A, then Z.  In the menu press &#8220;S&#8221; to send via XModem.  On the other hand, if you are using ExtraPutty, simply click &#8220;File Transfer&#8221; in the menu bar at the top of your screen.  Browse for your file.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"502\" height=\"161\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png\" alt=\"\" class=\"wp-image-14603 lazyload\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png 502w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8-300x96.png 300w\" data-sizes=\"(max-width: 502px) 100vw, 502px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 502px; --smush-placeholder-aspect-ratio: 502\/161;\" \/><\/figure>\n\n\n\n<p>After the file transfer finishes, type &#8220;DIR&#8221; in CP\/M to verify your file transfer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"705\" height=\"235\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-9.png\" alt=\"\" class=\"wp-image-14604 lazyload\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-9.png 705w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-9-300x100.png 300w\" data-sizes=\"(max-width: 705px) 100vw, 705px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 705px; --smush-placeholder-aspect-ratio: 705\/235;\" \/><\/figure>\n\n\n\n<p>You will notice the file name is truncated.  The actual file name on your machine is HELLOWOR.Z80.  This is due to the name length restrictions in CP\/M.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compiling Assembly Programs under CP\/M (HELLOWOR.Z80)<\/h2>\n\n\n\n<p>At this point, we are ready to run the z80asm compiler.  This will create the .COM file that we can run.  z80asm creates this automatically, but with some of the other compilers, you may have to run the &#8220;LOAD&#8221; command afterwards.  In this case, our command is very simple.  At the command prompt, on your Z80 machine, simply type &#8220;z80asm hellowor&#8221;.  Type this without quotes and without the .z80 file extension. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"515\" height=\"269\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-10.png\" alt=\"\" class=\"wp-image-14605 lazyload\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-10.png 515w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-10-300x157.png 300w\" data-sizes=\"(max-width: 515px) 100vw, 515px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 515px; --smush-placeholder-aspect-ratio: 515\/269;\" \/><\/figure>\n\n\n\n<p>Now, type DIR, and you will see that z80asm created your .com file!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"734\" height=\"270\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-11.png\" alt=\"\" class=\"wp-image-14606 lazyload\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-11.png 734w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-11-300x110.png 300w\" data-sizes=\"(max-width: 734px) 100vw, 734px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 734px; --smush-placeholder-aspect-ratio: 734\/270;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Run Your Program<\/h2>\n\n\n\n<p>To run your program, simply type, &#8220;hellowor&#8221; at your command prompt!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"185\" height=\"100\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-12.png\" alt=\"\" class=\"wp-image-14607 lazyload\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 185px; --smush-placeholder-aspect-ratio: 185\/100;\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Summary for Compiling Assembly Programs under CP\/M<\/h2>\n\n\n\n<p>In short, just be sure your program starts at 0100 with the ORG statement.  After that, be sure you know the location of z80asm, and run the assembler passing the file name after the command.  Pass the file name without the .Z80 extension.  If you don&#8217;t have any errors, then you are ready to run your program!   For a detailed description of each instruction, read the<a href=\"https:\/\/www.zilog.com\/docs\/z80\/um0080.pdf\"> Z80 Manual.<\/a><\/p>\n\n\n\n<p>For more information, visit the <a href=\"https:\/\/bryceautomation.com\/index.php\/category\/vintage-computers\/\">Vintage Computer Catagory Page!<\/a><\/p>\n\n\n\n<p>&#8212; Ricky Bryce<\/p>\n<div id=\"bryce-3311155033\" class=\"bryce-after-content bryce-entity-placement\"><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-8316758073402323\" crossorigin=\"anonymous\"><\/script><ins class=\"adsbygoogle\" style=\"display:block;\" data-ad-client=\"ca-pub-8316758073402323\" \ndata-ad-slot=\"4667596182\" \ndata-ad-format=\"auto\"><\/ins>\n<script> \n(adsbygoogle = window.adsbygoogle || []).push({}); \n<\/script>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Introduction to Compiling Assembly Programs under CP\/M for the Z80 In this post, we&#8217;ll discuss Compiling Assembly Programs under CP\/M using Z80ASM. For this section, I&#8217;ll be using the CPUVille Single Board Computer. Once you understand how to assemble a program, you can start writing your own programs. A good way to learn assembly is <a class=\"moretag btn btn-primary\" href=\"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/\">Read More \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":14603,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[727],"tags":[423,420,871],"class_list":{"0":"post-14599","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-vintage-computers","8":"tag-cp-m","9":"tag-z80","10":"tag-z80asm","11":"czr-hentry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Compiling Assembly Programs under CP\/M - Bryce Automation<\/title>\n<meta name=\"description\" content=\"Compiling Assembly Programs under CP\/M with z80asm. We&#039;ll use z80asm under CP\/M to create an executable COM file.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Compiling Assembly Programs under CP\/M - Bryce Automation\" \/>\n<meta property=\"og:description\" content=\"Compiling Assembly Programs under CP\/M with z80asm. We&#039;ll use z80asm under CP\/M to create an executable COM file.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/\" \/>\n<meta property=\"og:site_name\" content=\"Bryce Automation\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ricky.bryce.7\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-11T10:38:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-18T22:49:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png\" \/>\n\t<meta property=\"og:image:width\" content=\"502\" \/>\n\t<meta property=\"og:image:height\" content=\"161\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ricky\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/\"},\"author\":{\"name\":\"Ricky\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"headline\":\"Compiling Assembly Programs under CP\\\/M\",\"datePublished\":\"2022-12-11T10:38:44+00:00\",\"dateModified\":\"2022-12-18T22:49:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/\"},\"wordCount\":696,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/image-8.png\",\"keywords\":[\"cp\\\/m\",\"z80\",\"z80asm\"],\"articleSection\":[\"Vintage Computers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/\",\"name\":\"Compiling Assembly Programs under CP\\\/M - Bryce Automation\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/image-8.png\",\"datePublished\":\"2022-12-11T10:38:44+00:00\",\"dateModified\":\"2022-12-18T22:49:05+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"description\":\"Compiling Assembly Programs under CP\\\/M with z80asm. We'll use z80asm under CP\\\/M to create an executable COM file.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/image-8.png\",\"contentUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/image-8.png\",\"width\":502,\"height\":161,\"caption\":\"Compiling Assembly Programs under CP\\\/M\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/12\\\/11\\\/compiling-assembly-programs-under-cp-m\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bryceautomation.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Compiling Assembly Programs under CP\\\/M\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#website\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/\",\"name\":\"Bryce Automation\",\"description\":\"Automating Home and Industry...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bryceautomation.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\",\"name\":\"Ricky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"contentUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/a8f\\\/a8fe6bf79d292b388ffee281ccb12488x96.jpg\",\"caption\":\"Ricky\"},\"sameAs\":[\"http:\\\/\\\/bryceautomation.com\",\"https:\\\/\\\/www.facebook.com\\\/ricky.bryce.7\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ricky-bryce-4367a416\\\/\"],\"url\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/author\\\/ricky\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Compiling Assembly Programs under CP\/M - Bryce Automation","description":"Compiling Assembly Programs under CP\/M with z80asm. We'll use z80asm under CP\/M to create an executable COM file.","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":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/","og_locale":"en_US","og_type":"article","og_title":"Compiling Assembly Programs under CP\/M - Bryce Automation","og_description":"Compiling Assembly Programs under CP\/M with z80asm. We'll use z80asm under CP\/M to create an executable COM file.","og_url":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/","og_site_name":"Bryce Automation","article_author":"https:\/\/www.facebook.com\/ricky.bryce.7","article_published_time":"2022-12-11T10:38:44+00:00","article_modified_time":"2022-12-18T22:49:05+00:00","og_image":[{"width":502,"height":161,"url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png","type":"image\/png"}],"author":"Ricky","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#article","isPartOf":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/"},"author":{"name":"Ricky","@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"headline":"Compiling Assembly Programs under CP\/M","datePublished":"2022-12-11T10:38:44+00:00","dateModified":"2022-12-18T22:49:05+00:00","mainEntityOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/"},"wordCount":696,"commentCount":0,"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png","keywords":["cp\/m","z80","z80asm"],"articleSection":["Vintage Computers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/","url":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/","name":"Compiling Assembly Programs under CP\/M - Bryce Automation","isPartOf":{"@id":"https:\/\/bryceautomation.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#primaryimage"},"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png","datePublished":"2022-12-11T10:38:44+00:00","dateModified":"2022-12-18T22:49:05+00:00","author":{"@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"description":"Compiling Assembly Programs under CP\/M with z80asm. We'll use z80asm under CP\/M to create an executable COM file.","breadcrumb":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#primaryimage","url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png","contentUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/12\/image-8.png","width":502,"height":161,"caption":"Compiling Assembly Programs under CP\/M"},{"@type":"BreadcrumbList","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/12\/11\/compiling-assembly-programs-under-cp-m\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bryceautomation.com\/"},{"@type":"ListItem","position":2,"name":"Compiling Assembly Programs under CP\/M"}]},{"@type":"WebSite","@id":"https:\/\/bryceautomation.com\/#website","url":"https:\/\/bryceautomation.com\/","name":"Bryce Automation","description":"Automating Home and Industry...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bryceautomation.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7","name":"Ricky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","url":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","contentUrl":"https:\/\/bryceautomation.com\/wp-content\/wphb-cache\/gravatar\/a8f\/a8fe6bf79d292b388ffee281ccb12488x96.jpg","caption":"Ricky"},"sameAs":["http:\/\/bryceautomation.com","https:\/\/www.facebook.com\/ricky.bryce.7","https:\/\/www.linkedin.com\/in\/ricky-bryce-4367a416\/"],"url":"https:\/\/bryceautomation.com\/index.php\/author\/ricky\/"}]}},"_links":{"self":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts\/14599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/comments?post=14599"}],"version-history":[{"count":0,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts\/14599\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media\/14603"}],"wp:attachment":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media?parent=14599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/categories?post=14599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/tags?post=14599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}