{"id":14136,"date":"2022-11-03T13:37:33","date_gmt":"2022-11-03T13:37:33","guid":{"rendered":"https:\/\/bryceautomation.com\/?p=14136"},"modified":"2022-11-03T13:37:36","modified_gmt":"2022-11-03T13:37:36","slug":"cosmac-processor-stack-operation","status":"publish","type":"post","link":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/","title":{"rendered":"COSMAC Processor Stack Operation"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction to the COSMAC Processor Stack Operation<\/h2>\n\n\n\n<p>The COSMAC Processor Stack Operation will allow us to store data on the fly that we need to retrieve later.  This will usually be an address contained in a register.  Examples would be a program counter, or a memory location that contains data for a subroutine to operate on.  Technically, we are really just emulating a stack in the COSMAC by the use of it&#8217;s existing instructions.<\/p><div id=\"bryce-2554428482\" 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>By default, the stack pointer is at register #2.  On my CDP1802 unit, register 2 points to $FFD4 by default.  We can change this.  In this post, I&#8217;ll change this address to $9120.  Be sure the stack pointer is high enough as to not interfere with your program.  As we perform stack operations we will decrease, or increase this pointer.  As we add data to the stack (push data), we&#8217;ll usually decrease this pointer.  Likewise as we pull data from the stack (pop), we will increase the stack pointer.  In other words, the stack operates from the top down.  <\/p>\n\n\n\n<p>In those post, we&#8217;ll perform several experiments to see the stack data, and the stack pointer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Initial values for the COSMAC Processor Stack Operation<\/h2>\n\n\n\n<p>At this point, we&#8217;ll take a look at some of the registers.  I&#8217;ve declared the following aliases at the beginning of each of these examples.  Assume that these aliases are at the top of every project in this post.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>STACKP:     EQU 9120H\nGPIO1:      EQU 7000H\nBREAK:      EQU 2756H\n\n\n\torg\t8000H\t\t;have to start somewhere ...\t\nR0\tEQU\t0\nR1\tEQU\t1\nR2\tEQU\t2\nR3\tEQU\t3\nR4\tEQU\t4\nR5\tEQU\t5\nR6\tEQU\t6\nR7\tEQU\t7\nR8\tEQU\t8\nR9\tEQU\t9\nRA\tEQU\t10\nRB\tEQU\t11\nRC\tEQU\t12\nRD\tEQU\t13\nRE\tEQU\t14\nRF\tEQU\t15<\/code><\/pre>\n\n\n\n<p>At this point, let&#8217;s enter some simple logic to see what the initial value of the stack pointer is.  It&#8217;s important to realize that I&#8217;m using the COSMAC CDP1802 Microprocessor kit.  The break routine will store the values of each register to a memory location where I can access their values.  I can only access scratchpad registers R3 to RF (R15), though.  So let&#8217;s just load the value of Register 2 into register 3.  Remeber, Register 2 is our Stack Pointer.  After that, we&#8217;ll break, and see what the value of register 3 contains.  Additionally, we&#8217;ll take a look at the memory locations in the vicinity of the cell the stack pointer points to.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        LOAD    R2, STACKP\nSTART:  GLO     R2\n        PLO     R3\n        GHI     R2\n        PHI     R3\n        LBR     BREAK\n        END\n<\/code><\/pre>\n\n\n\n<p>Remember each scratchpad register is 16 bits wide.  Since this is an 8 bit processor, we will move 8 bits at a time (1 byte).<\/p>\n\n\n\n<p>With this code, we&#8217;ll load STACKP into R2.  Remember, this is $9120.  Next, we&#8217;ll get the low byte of the stack pointer (R2) with the GLO (Get Low) instruction.  We place that into the low byte of R3 with the PLO (Put Low) instruction.  Likewise, we get the high byte of R2, and place this into the high byte of R3.<\/p>\n\n\n\n<p>I&#8217;m going to use the <a href=\"https:\/\/bryceautomation.com\/index.php\/2022\/10\/22\/a18-assembler-for-cosmac\/\">A18 assembler <\/a>to convert this code to an Intel Hex file.  After that, I&#8217;ll send the file to the unit.  Keep in mind that we need to connect to our processor through a terminal for this.  The character and line delays are at 10ms.<\/p>\n\n\n\n<p>Here is the output of the assembler in Intel hex file format:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>:0D800000F891B2F820A282A392B3C02756D7\n:00800D0172<\/code><\/pre>\n\n\n\n<p>At this point, I&#8217;ll run the code, and see what our initial values are:<\/p>\n\n\n\n<p>Register 3 contains the value of the stack pointer, which is currently at $9120 (Copied from R2).<\/p>\n\n\n\n<p>Now, let&#8217;s look at the values in the vicinity of this address:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$911C  FF\n$911D  FE\n$911E  EF\n$911F  0F\n$9120  00\n$9121  FB  <\/code><\/pre>\n\n\n\n<p>As you can see, this is basically random data.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pushing a Register onto the Stack<\/h2>\n\n\n\n<p>At this point, let&#8217;s modify our program.  We&#8217;ll start by loading register RE with GPIO1.  Recall from our aliases at the top of this post that GPIO1 resides at address $7000.  We&#8217;ll do this by using the STXD instruction.  This will store data to the stack, and decrement the stack pointer.  Remember, each register contains 16 bits of data.  Our memory locations, however, are only 8 bits.  Therefore, we&#8217;ll need to do this in 2 steps.<\/p>\n\n\n\n<p>Let&#8217;s look at our code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        LOAD    R2, STACKP\n        LOAD    RE, GPIO1\nSTART:  GHI     RE\n        STXD\n        GLO     RE\n        STXD\n        \n        GLO     R2\n        PLO     R3\n        GHI     R2\n        PHI     R3\n        LBR     BREAK\n        END\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>:17800000F891B2F820A2F870BEF800AE9E738E7382A392B3C02756EF\n:0080170168<\/code><\/pre>\n\n\n\n<p>As you can see, at first, we are loading register RE with GPIO1 ($7000).  After that, we get the high byte from register RE.  Then we store this to the stack, and decrement the stack pointer.  We do the same thing with the low byte.  At this point, we&#8217;ll load register R2 into register R3, so we can see what location the stack pointer is at.<\/p>\n\n\n\n<p>Once again, I&#8217;ll send this code to the processor, and we&#8217;ll see where our values are.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Register R2, our stack pointer is at $911E.  Decreased by 2\n\n$911C  FF (UNCHANGED)\n$911D  FE (UNCHANGED)\n$911E  EF (UNCHANGED)\n$911F  00 (LOW BYTE OF RE) \n$9120  70 (HIGH BYTE OF RE)\n$9121  FB (UNCHANGED)\n\n<\/code><\/pre>\n\n\n\n<p>As you can see, we load the high byte first (70H), and decrement the address in R2.  Then we load the low byte to the stack, and decrement the pointer again.  At this point, the stack holds the current value of RE.  I&#8217;ve heard of a bug in the 1802 processor where STXD does not decrement the pointer, but I&#8217;m not seeing this bug happen here.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Popping a Value from the Stack<\/h2>\n\n\n\n<p>At this point, we&#8217;ll pull (pop) the register address from the stack.  To demonstrate, we&#8217;ll place this value into register (RF).  Before we begin, we need to execute the IRX instruction.  This advances the stack pointer to where the data is.  Let&#8217;s see what happens to the stack pointer when we use this instruction:<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        LOAD    R2, STACKP\n        LOAD    RE, GPIO1\nSTART:  GHI     RE\n        STXD\n        GLO     RE\n        STXD\n        IRX\n        \n        GLO     R2\n        PLO     R3\n        GHI     R2\n        PHI     R3\n        LBR     BREAK\n        END<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>:18800000F891B2F820A2F870BEF800AE9E738E736082A392B3C027568E\n:0080180167<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"322\" height=\"236\" data-src=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.png\" alt=\"\" class=\"wp-image-14181 lazyload\" data-srcset=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.png 322w, https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image-300x220.png 300w\" data-sizes=\"(max-width: 322px) 100vw, 322px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 322px; --smush-placeholder-aspect-ratio: 322\/236;\" \/><\/figure>\n\n\n\n<p>As you can see, the stack pointer was copied into R3, and is currently at $911F, which is the beginning of our data.<\/p>\n\n\n\n<p>At this point, we&#8217;ll execute the LDXA command, and LDX.  LDXA will pull data from the stack, and advance the stack pointer.  When we pull the high byte from the stack at $9120, we are at the top of the stack.  We do not need to advance the pointer beyond this, so we just use the LDX command.<\/p>\n\n\n\n<p>Let&#8217;s add these commands, and re-run our logic.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        LOAD    R2, STACKP\n        LOAD    RE, GPIO1\nSTART:  GHI     RE\n        STXD\n        GLO     RE\n        STXD\n        IRX\n        LDXA\n        PLO     RF\n        LDX\n        PHI     RF\n        \n        GLO     R2\n        PLO     R3\n        GHI     R2\n        PHI     R3\n        LBR     BREAK\n        END\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>:1C800000F891B2F820A2F870BEF800AE9E738E736072AFF0BF82A392B3C02756BA\n:00801C0163<\/code><\/pre>\n\n\n\n<p>At this point, let&#8217;s take a look at our registers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>R3 contains $9120\nRF contains $7000<\/code><\/pre>\n\n\n\n<p>The &#8220;Stack&#8221; contains the same values as before, however, since we&#8217;ve already recovered this data, we are free to overwrite it.<\/p>\n\n\n\n<p>For more information, visit the <a href=\"https:\/\/bryceautomation.com\/index.php\/category\/vintage-computers\/cosmac\/\">COSMAC category page!<\/a><\/p>\n\n\n\n<p>&#8212; Ricky Bryce<\/p>\n<div id=\"bryce-71369546\" 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 the COSMAC Processor Stack Operation The COSMAC Processor Stack Operation will allow us to store data on the fly that we need to retrieve later. This will usually be an address contained in a register. Examples would be a program counter, or a memory location that contains data for a subroutine to operate <a class=\"moretag btn btn-primary\" href=\"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/\">Read More \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":14181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[821,727],"tags":[836,835],"class_list":{"0":"post-14136","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-cosmac","8":"category-vintage-computers","9":"tag-cpu-stack","10":"tag-processor-stack","11":"czr-hentry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>COSMAC Processor Stack Operation - Bryce Automation<\/title>\n<meta name=\"description\" content=\"How to set up and use the COSMAC Processor Stack Operation to store and retrieve scratchpad register data in your project.\" \/>\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\/11\/03\/cosmac-processor-stack-operation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"COSMAC Processor Stack Operation - Bryce Automation\" \/>\n<meta property=\"og:description\" content=\"How to set up and use the COSMAC Processor Stack Operation to store and retrieve scratchpad register data in your project.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/\" \/>\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-11-03T13:37:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-03T13:37:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"322\" \/>\n\t<meta property=\"og:image:height\" content=\"236\" \/>\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\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/\"},\"author\":{\"name\":\"Ricky\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"headline\":\"COSMAC Processor Stack Operation\",\"datePublished\":\"2022-11-03T13:37:33+00:00\",\"dateModified\":\"2022-11-03T13:37:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/\"},\"wordCount\":993,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/image.png\",\"keywords\":[\"CPU Stack\",\"Processor Stack\"],\"articleSection\":[\"COSMAC\",\"Vintage Computers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/\",\"name\":\"COSMAC Processor Stack Operation - Bryce Automation\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/image.png\",\"datePublished\":\"2022-11-03T13:37:33+00:00\",\"dateModified\":\"2022-11-03T13:37:36+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/#\\\/schema\\\/person\\\/5d5b0f6f6ad768f1ee52968338e63af7\"},\"description\":\"How to set up and use the COSMAC Processor Stack Operation to store and retrieve scratchpad register data in your project.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/image.png\",\"contentUrl\":\"https:\\\/\\\/bryceautomation.com\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/image.png\",\"width\":322,\"height\":236,\"caption\":\"COSMAC Processor Stack Operation\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bryceautomation.com\\\/index.php\\\/2022\\\/11\\\/03\\\/cosmac-processor-stack-operation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bryceautomation.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"COSMAC Processor Stack Operation\"}]},{\"@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":"COSMAC Processor Stack Operation - Bryce Automation","description":"How to set up and use the COSMAC Processor Stack Operation to store and retrieve scratchpad register data in your project.","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\/11\/03\/cosmac-processor-stack-operation\/","og_locale":"en_US","og_type":"article","og_title":"COSMAC Processor Stack Operation - Bryce Automation","og_description":"How to set up and use the COSMAC Processor Stack Operation to store and retrieve scratchpad register data in your project.","og_url":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/","og_site_name":"Bryce Automation","article_author":"https:\/\/www.facebook.com\/ricky.bryce.7","article_published_time":"2022-11-03T13:37:33+00:00","article_modified_time":"2022-11-03T13:37:36+00:00","og_image":[{"width":322,"height":236,"url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.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\/11\/03\/cosmac-processor-stack-operation\/#article","isPartOf":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/"},"author":{"name":"Ricky","@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"headline":"COSMAC Processor Stack Operation","datePublished":"2022-11-03T13:37:33+00:00","dateModified":"2022-11-03T13:37:36+00:00","mainEntityOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/"},"wordCount":993,"commentCount":0,"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.png","keywords":["CPU Stack","Processor Stack"],"articleSection":["COSMAC","Vintage Computers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/","url":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/","name":"COSMAC Processor Stack Operation - Bryce Automation","isPartOf":{"@id":"https:\/\/bryceautomation.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/#primaryimage"},"image":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/#primaryimage"},"thumbnailUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.png","datePublished":"2022-11-03T13:37:33+00:00","dateModified":"2022-11-03T13:37:36+00:00","author":{"@id":"https:\/\/bryceautomation.com\/#\/schema\/person\/5d5b0f6f6ad768f1ee52968338e63af7"},"description":"How to set up and use the COSMAC Processor Stack Operation to store and retrieve scratchpad register data in your project.","breadcrumb":{"@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/#primaryimage","url":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.png","contentUrl":"https:\/\/bryceautomation.com\/wp-content\/uploads\/2022\/11\/image.png","width":322,"height":236,"caption":"COSMAC Processor Stack Operation"},{"@type":"BreadcrumbList","@id":"https:\/\/bryceautomation.com\/index.php\/2022\/11\/03\/cosmac-processor-stack-operation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bryceautomation.com\/"},{"@type":"ListItem","position":2,"name":"COSMAC Processor Stack Operation"}]},{"@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\/14136","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=14136"}],"version-history":[{"count":0,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/posts\/14136\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media\/14181"}],"wp:attachment":[{"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/media?parent=14136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/categories?post=14136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bryceautomation.com\/index.php\/wp-json\/wp\/v2\/tags?post=14136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}