{"id":771,"date":"2020-09-01T17:53:30","date_gmt":"2020-09-01T17:53:30","guid":{"rendered":"https:\/\/justanotherelectronicsblog.com\/?p=771"},"modified":"2020-09-01T17:54:07","modified_gmt":"2020-09-01T17:54:07","slug":"weird-cpu-architectures-the-mov-only-cpu","status":"publish","type":"post","link":"https:\/\/justanotherelectronicsblog.com\/?p=771","title":{"rendered":"Weird CPU architectures, the MOV only CPU"},"content":{"rendered":"\n<p>I like CPU architectures, especially weird, interesting and unusual ones. For example, the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Intel_iAPX_432\">Intel iAPX 432<\/a> is still something I would love to play around with. Recently, I realized that a working CPU can be made with just a simple Move instruction. For this to work, everything needs to be memory mapped. The ALU, program counter, everything. <\/p>\n\n\n\n<p>Of  course, this idea is nothing new and this idea is called the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Transport_triggered_architecture\">Transport Triggered Architecture<\/a>. I decided to have a look into this, how it works and make a simple TTA CPU.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How does a TTA CPU work<\/h2>\n\n\n\n<p>Before I can make a CPU, let&#8217;s look into what is so different in a TTA CPU. In most CPU&#8217;s, calculations are done using registers and some arithmetic logic unit. For example, to add 2 numbers, the assembly code could be:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">LOAD VARIABLE1, REGISTER0\nLOAD VARIABLE2, REGISTER1\nADD REGISTER0, REGISTER1, REGISTER2\nSTORE REGISTER2, VARIABLE3<\/pre>\n\n\n\n<p>In a TTA CPU, there is no ALU or registers in the CPU itself. Instead, they exist somewhere in memory. In order to add 2 numbers, they are moved from memory or registers, to the ALU. The ALU result is then moved back to memory\/registers. Or in code:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">MOVE VARIABLE1,  ALU_A\nMOVE VARIABLE2,  ALU_B\nMOVE ALU_ADD_RESULT, VARIABLE3<\/pre>\n\n\n\n<p>In the simplest form, the CPU in a TTA CPU only needs to move data from one memory address to another. All calculations are done as a result of data being moved around. If you think, how would you jump to a different section of code, it&#8217;s easy. If the program counter is also in memory, a jump is as simple as moving a new address to the program counter.<\/p>\n\n\n\n<p>A few TTA computers have been made, and even commercially sold. But in general, it&#8217;s a niche architecture that never has gotten popular. So let&#8217;s build one :D <\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Building a simple TTA computer<\/h2>\n\n\n\n<p>I decided to build the computer in <a href=\"https:\/\/github.com\/hneemann\/Digital\">Digital<\/a>, a simulator for digital logic that is based on Logisim but much improved. Just the name is a bit too common when googling :) <\/p>\n\n\n\n<p>In order to make a simple TTA computer, a few things are needed.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>A CPU capable of moving data<\/li><li>A program counter <\/li><li>An ALU<\/li><li>A branch block<\/li><\/ol>\n\n\n\n<p>I want the CPU to be a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Von_Neumann_architecture\">von Neumann<\/a> type of CPU, meaning that there is one memory bus with code to execute and RAM. To have a useable amount of memory, a 16 bit address, in order to address 64KB of RAM, is probably nice. Let&#8217;s just make it a 16 bit CPU when we are busy.<\/p>\n\n\n\n<p>As there is just a single instruction, MOVE data from A to B, every instruction is 32 bits. First 16 bits with the address A, then 16 bits with the address B.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The CPU<\/h3>\n\n\n\n<p>The CPU can be surprisingly easy, after some consideration I came to the realization it just has to 4 things:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Fetch the first 16 bits of the instruction for the source address<\/li><li>Fetch the second 16 bits of the instruction for the destination address<\/li><li>Read the data from the source address<\/li><li>Write that data to the destination address<\/li><\/ol>\n\n\n\n<p>To build the entire CPU, a block to turn one clock signal into 4 is needed for the 4 steps. This means 1 instruction takes 4 clocks, but that is not too uncommon for a simple CPU. <\/p>\n\n\n\n<p>The program counter is needed to select the right instruction, and a few latches or registers to store the addresses and data.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"607\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png\" alt=\"\" class=\"wp-image-782\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-300x178.png 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-768x455.png 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1536x910.png 1536w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image.png 1762w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>One simple CPU<\/figcaption><\/figure>\n\n\n\n<p>To simplify things, I created a 16 bit bus driver, 16 bit latch and 16 bit register building block. The 1 to 4 CLK modules is made using a 74_161 counter and a 74_139 2 to 4 decoder.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"463\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1-1024x463.png\" alt=\"\" class=\"wp-image-783\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1-1024x463.png 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1-300x136.png 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1-768x347.png 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1.png 1405w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The program counter only sees a clock when fetching the instruction, when the CPU reads and writes to the fetched addresses, the program counter is not incremented.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The program counter<\/h3>\n\n\n\n<p>Without the program counter, the CPU won&#8217;t do much. To make a 16 bit program counter, a total of 4 of the 74_161 counters are needed. The program counter is, of course, memory mapped. In order to change it, a write to a specific address is used. This means a comparator is required to check if the address is correct. The output of the comparator AND the read\/write signal are connected to the Load pins of the 74_161 in order to load a new value.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"867\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-2-1024x867.png\" alt=\"\" class=\"wp-image-784\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-2-1024x867.png 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-2-300x254.png 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-2-768x650.png 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-2.png 1229w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>All in all, a fairly simple program counter.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The ALU<\/h3>\n\n\n\n<p>With the CPU done, let&#8217;s hook up some things to it, like the ALU<\/p>\n\n\n\n<p>To keep part count down, a common option is to use the 74_181 4 bit ALU. With 4 of those, a 16 bit ALU can be made. Additionally, 2 registers are needed for the 2 inputs, and a bus driver in order to only output a value when needed. <\/p>\n\n\n\n<p>Some logic is also required for address decoding. The lowest 5 bits select the instruction, as the 74_181 has 32 possible instructions. The 6th bit selects in which register to store the data for the input. <\/p>\n\n\n\n<p>The full schematic is as follows<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"588\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-3-1024x588.png\" alt=\"\" class=\"wp-image-786\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-3-1024x588.png 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-3-300x172.png 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-3-768x441.png 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-3-1536x882.png 1536w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-3.png 1795w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Each alu_slice just contains a 74_181, but connected in a way that I can work with busses. And even then it&#8217;s a bit of a messy schematic.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The flow control block<\/h3>\n\n\n\n<p>By lack of better name, the flow control block. Some form of program flow control is needed in order to implement something like an if() statement. In this case, a block with 4 registers and one output. 2 registers contain addresses, 2 contain variables. When read, if the variables are equal, address 1 will be returned, else address 2. And just like that, a simple flow control is implemented<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"656\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-4-1024x656.png\" alt=\"\" class=\"wp-image-787\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-4-1024x656.png 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-4-300x192.png 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-4-768x492.png 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-4-1536x984.png 1536w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-4.png 1609w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A comparator,  2 to 4 decoder, some registers and addressing logic and that&#8217;s all. By now one downside of this type of CPU slowly pops up, having registers in all memory mapped peripherals like the ALU and flow control slowly make a small CPU fairly big.<\/p>\n\n\n\n<p>With that all in order, the complete CPU looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"620\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-5-1024x620.png\" alt=\"\" class=\"wp-image-788\" srcset=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-5-1024x620.png 1024w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-5-300x182.png 300w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-5-768x465.png 768w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-5-1536x930.png 1536w, https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-5.png 1686w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>I added a GPIO block that just stores the value written to it to make debugging easier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Let&#8217;s calculate some Fibonacci numbers<\/h2>\n\n\n\n<p>What to do with a simple CPU that does show it functions as a CPU? Calculate some <a href=\"https:\/\/en.wikipedia.org\/wiki\/Fibonacci_number\">Fibonacci numbers <\/a>seems like a good idea. It&#8217;s simple, but does show some flow control and calculation abilities.<\/p>\n\n\n\n<p>Let&#8217;s start with the code needed in C, or at least, pseudo-C, to calculate the first 10 Fibonacci numbers<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int T1 = 0;\nint T2 = 1;\nint nextTerm = 0;\n\nfor(int i = 0; i &lt; 10; ++i)\n{\n  nextTerm = T1 + T2;\n  T1 = T2;\n  T2 = nextterm;\n}<\/pre>\n\n\n\n<p>Now, let&#8217;s translate that to a bunch of MOV instuctions. A big bunch of them. First, a memory map. <\/p>\n\n\n\n<p>0x0000 to 0x7FFF is the instruction memory<br>0x8000 to 0xBFFF is the RAM<br>0xC000 to 0xC03F is the ALU<br>0xC100 to 0xC103 is the flow control block<br>0xFE00 is the GPIO block<br>0xFFFF is the program counter<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/one time setup\nMOV 0x64 0xC102    MOV 10, compareB  \nMOV 0x65 0xC101    MOV addrdone, Compare_addr2 \nMOV 0x66 0xC100    MOV 6, Compare_addr1\nMOV 0x67 0x8001    MOV 1, T2\n\n\/\/Fibonacci calculation\nMOV 0x8000 0xc000  MOV T1, ALU1 \nMOV 0x8001 0xc020  MOV T2, ALU2 \nMOV 0x8001 0x8000  MOV T2, T1 \nMOV 0xC012 0x8001  MOV ALU_O, T2 \nMOV 0x8001 0xfe00  MOV T2, GPIO \n\n\/\/handling the for loop\nMOV 0x8002 0xC000  MOV CNT, ALU1  \nMOV 0x0067 0xC020  MOV 1, ALU2 \nMOV 0xC012 0x8002  MOV ALU_O, CNT \nMOV 0x8002 0xC103  MOV CNT, CompareA \nMOV 0xC100 0xFFFF  MOV Compare_O, PC \nMOV 0x0065 0xFFFF  MOV addrdone, PC \/\/just a loop <\/pre>\n\n\n\n<p>Wow, that&#8217;s a lot of code. Let&#8217;s try and unwrap that a bit. As the CPU can only move data, numbers have to be stored in memory. This means that the &#8220;int T2 = 1&#8221; C instruction is done by moving the value 1 stored in flash (in address 0x67) to variable T2 in RAM (address 0x8002)<\/p>\n\n\n\n<p>The Fibonacci calculation itself is fairly easy, move T1 and T2 to the ALU, replace T1&#8217;s value with T2, move the result from the ALU back to T2. T2 is moved to the GPIO for a nice indication.<\/p>\n\n\n\n<p>The for loop is handled by increasing a variable by 1 and comparing it to a set value, 10 (stored in address 0x64) for 10 loops. If they are not equal, the PC is set to the start of the Fibonacci calculation, else it&#8217;s set to an address containing an infinite loop.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>And with all of that, it calculates.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1117\" height=\"742\" src=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/Peek-2020-08-31-20-43-1.gif\" alt=\"\" class=\"wp-image-791\"\/><figcaption>Fibonacci result in the top right under GPIO<\/figcaption><\/figure>\n\n\n\n<p>There is a small bug caused by the RAM being infinite fast and asynchronous, sometimes a value is written to address 0x8012, caused by the 0xC012 address of the ALU. Apart from that, the CPU happily runs along.<\/p>\n\n\n\n<p>This was an interesting way of making a CPU, but it&#8217;s not the most efficient or fast CPU. It can be made pretty small however. All in all, a fun exercise in a quirky and niche CPU architecture.<\/p>\n\n\n\n<p>All the source files can be found <a href=\"https:\/\/github.com\/riktw\/MOVputer\">here<\/a>, and if you enjoyed this post, you can buy me a <a href=\"https:\/\/ko-fi.com\/riktw\">coffee<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I like CPU architectures, especially weird, interesting and unusual ones. For example, the Intel iAPX 432 is still something I would love to play around with. Recently, I realized that a working CPU can be made with just a simple Move instruction. For this to work, everything needs to be memory mapped. The ALU, program [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-771","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Weird CPU architectures, the MOV only CPU - jaeblog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/justanotherelectronicsblog.com\/?p=771\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Weird CPU architectures, the MOV only CPU - jaeblog\" \/>\n<meta property=\"og:description\" content=\"I like CPU architectures, especially weird, interesting and unusual ones. For example, the Intel iAPX 432 is still something I would love to play around with. Recently, I realized that a working CPU can be made with just a simple Move instruction. For this to work, everything needs to be memory mapped. The ALU, program [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/justanotherelectronicsblog.com\/?p=771\" \/>\n<meta property=\"og:site_name\" content=\"jaeblog\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-01T17:53:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-01T17:54:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png\" \/>\n<meta name=\"author\" content=\"riktw\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"riktw\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771\"},\"author\":{\"name\":\"riktw\",\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/#\\\/schema\\\/person\\\/d77e39721321c4a472b49909a8f1982b\"},\"headline\":\"Weird CPU architectures, the MOV only CPU\",\"datePublished\":\"2020-09-01T17:53:30+00:00\",\"dateModified\":\"2020-09-01T17:54:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771\"},\"wordCount\":1353,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/image-1024x607.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771\",\"url\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771\",\"name\":\"Weird CPU architectures, the MOV only CPU - jaeblog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/image-1024x607.png\",\"datePublished\":\"2020-09-01T17:53:30+00:00\",\"dateModified\":\"2020-09-01T17:54:07+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/#\\\/schema\\\/person\\\/d77e39721321c4a472b49909a8f1982b\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#primaryimage\",\"url\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/image-1024x607.png\",\"contentUrl\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/wp-content\\\/uploads\\\/2020\\\/08\\\/image-1024x607.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?p=771#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Weird CPU architectures, the MOV only CPU\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/#website\",\"url\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/\",\"name\":\"jaeblog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/#\\\/schema\\\/person\\\/d77e39721321c4a472b49909a8f1982b\",\"name\":\"riktw\",\"url\":\"https:\\\/\\\/justanotherelectronicsblog.com\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Weird CPU architectures, the MOV only CPU - jaeblog","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:\/\/justanotherelectronicsblog.com\/?p=771","og_locale":"en_US","og_type":"article","og_title":"Weird CPU architectures, the MOV only CPU - jaeblog","og_description":"I like CPU architectures, especially weird, interesting and unusual ones. For example, the Intel iAPX 432 is still something I would love to play around with. Recently, I realized that a working CPU can be made with just a simple Move instruction. For this to work, everything needs to be memory mapped. The ALU, program [&hellip;]","og_url":"https:\/\/justanotherelectronicsblog.com\/?p=771","og_site_name":"jaeblog","article_published_time":"2020-09-01T17:53:30+00:00","article_modified_time":"2020-09-01T17:54:07+00:00","og_image":[{"url":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png","type":"","width":"","height":""}],"author":"riktw","twitter_card":"summary_large_image","twitter_misc":{"Written by":"riktw","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/justanotherelectronicsblog.com\/?p=771#article","isPartOf":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=771"},"author":{"name":"riktw","@id":"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b"},"headline":"Weird CPU architectures, the MOV only CPU","datePublished":"2020-09-01T17:53:30+00:00","dateModified":"2020-09-01T17:54:07+00:00","mainEntityOfPage":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=771"},"wordCount":1353,"commentCount":1,"image":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=771#primaryimage"},"thumbnailUrl":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/justanotherelectronicsblog.com\/?p=771#respond"]}]},{"@type":"WebPage","@id":"https:\/\/justanotherelectronicsblog.com\/?p=771","url":"https:\/\/justanotherelectronicsblog.com\/?p=771","name":"Weird CPU architectures, the MOV only CPU - jaeblog","isPartOf":{"@id":"https:\/\/justanotherelectronicsblog.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=771#primaryimage"},"image":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=771#primaryimage"},"thumbnailUrl":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png","datePublished":"2020-09-01T17:53:30+00:00","dateModified":"2020-09-01T17:54:07+00:00","author":{"@id":"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b"},"breadcrumb":{"@id":"https:\/\/justanotherelectronicsblog.com\/?p=771#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/justanotherelectronicsblog.com\/?p=771"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/justanotherelectronicsblog.com\/?p=771#primaryimage","url":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png","contentUrl":"https:\/\/justanotherelectronicsblog.com\/wp-content\/uploads\/2020\/08\/image-1024x607.png"},{"@type":"BreadcrumbList","@id":"https:\/\/justanotherelectronicsblog.com\/?p=771#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/justanotherelectronicsblog.com\/"},{"@type":"ListItem","position":2,"name":"Weird CPU architectures, the MOV only CPU"}]},{"@type":"WebSite","@id":"https:\/\/justanotherelectronicsblog.com\/#website","url":"https:\/\/justanotherelectronicsblog.com\/","name":"jaeblog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/justanotherelectronicsblog.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/justanotherelectronicsblog.com\/#\/schema\/person\/d77e39721321c4a472b49909a8f1982b","name":"riktw","url":"https:\/\/justanotherelectronicsblog.com\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts\/771","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=771"}],"version-history":[{"count":16,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts\/771\/revisions"}],"predecessor-version":[{"id":795,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=\/wp\/v2\/posts\/771\/revisions\/795"}],"wp:attachment":[{"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=771"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=771"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/justanotherelectronicsblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}