<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://cpudev.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Immibis</id>
	<title>CPUdev wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://cpudev.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Immibis"/>
	<link rel="alternate" type="text/html" href="https://cpudev.org/wiki/Special:Contributions/Immibis"/>
	<updated>2026-04-25T16:36:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=41</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=41"/>
		<updated>2025-06-21T14:09:38Z</updated>

		<summary type="html">&lt;p&gt;Immibis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and send a private message to immibis on IRC - irc.oftc.net&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Left side: tutorials. Starting from the top (and skipping irrelevant ones) should get a new person going in a useful direction, kinda like a tutorial. More experienced people can go farther down the list. At some point it can split into branches --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Getting started|&lt;br /&gt;
Essential knowledge:&lt;br /&gt;
* [[Introduction to digital logic]]&lt;br /&gt;
* [[Binary arithmetic]]&lt;br /&gt;
* [[How a computer works]]&lt;br /&gt;
Designing and simulating a CPU:&lt;br /&gt;
* [[Getting started - Logisim]]&lt;br /&gt;
* [[Getting started - FPGAs]]&lt;br /&gt;
Building a CPU in real life:&lt;br /&gt;
* [[Electronics primer]]&lt;br /&gt;
* [[Getting started - logic chips]]&lt;br /&gt;
* [[Getting started - transistor circuits]]&lt;br /&gt;
* [[Getting started - relay circuits]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Basic CPU design|&lt;br /&gt;
Important design considerations:&lt;br /&gt;
* [[Programmer&amp;#039;s model]]&lt;br /&gt;
* [[Harvard vs Von Neumann]]&lt;br /&gt;
* [[RISC vs CISC]]&lt;br /&gt;
* [[Number of bits]]&lt;br /&gt;
Hardware design:&lt;br /&gt;
* [[Instruction encoding]]&lt;br /&gt;
* [[Data path]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Software|&lt;br /&gt;
* [[Emulator]]&lt;br /&gt;
* [[Assembly language]]&lt;br /&gt;
* [[C language]]&lt;br /&gt;
* [[Forth language]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Advanced topics|&lt;br /&gt;
Instruction set extensions:&lt;br /&gt;
* [[Exceptions and interrupts]]&lt;br /&gt;
* [[Floating-point unit]]&lt;br /&gt;
* [[Virtual memory]]&lt;br /&gt;
Performance tricks:&lt;br /&gt;
* [[Instruction prefetching]]&lt;br /&gt;
* [[Pipelining]]&lt;br /&gt;
* [[Branch prediction]]&lt;br /&gt;
* [[Data cache]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
* [[Register renaming]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Right side: various reference information, try to order by put most-widely-applicable stuff at the top --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Logic references|&lt;br /&gt;
* [[Relay logic]]&lt;br /&gt;
* [[Logic level reference]]&lt;br /&gt;
* [[Logic chip reference]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=External interfaces|&lt;br /&gt;
* [[UART]]&lt;br /&gt;
* [[I2C]] / [[SPI]]&lt;br /&gt;
* [[VGA]]&lt;br /&gt;
* [[PS/2]] (mouse and keyboard)&lt;br /&gt;
* [[Ethernet]]&lt;br /&gt;
* [[USB]]&lt;br /&gt;
}} &amp;lt;!-- looking pretty unbalanced! More stuff needed here --&amp;gt;&lt;br /&gt;
{{Box|title=CPU projects|&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=40</id>
		<title>Introduction to digital logic</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=40"/>
		<updated>2025-06-15T12:00:58Z</updated>

		<summary type="html">&lt;p&gt;Immibis: add a section on sequential circuits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://en.wikipedia.org/wiki/Boolean_algebra Boolean algebra] (after George Boole) is the mathematical study of statements that are true or false. Several decades later, Claude Shannon realized the same ideas could be used to build electronic circuits to compute things in binary.&lt;br /&gt;
&lt;br /&gt;
== Boolean mathematics ==&lt;br /&gt;
&lt;br /&gt;
Boolean algebra is similar to ordinary algebra: we can write down equations and solve them (or prove they are right or wrong). However, instead of numbers, Boolean equations work on the &amp;quot;numbers&amp;quot; ⊤ (true) and ⊥ or F (false). In binary these are also written as 1 and 0, and we&amp;#039;ll use that because this is a wiki about calculating things in binary. Instead of +, -, ×, ÷ and so on, the things you can do with the numbers are ∧, ∨ and ¬. Let&amp;#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
∧ is the &amp;quot;AND&amp;quot; operator (or, by its more fancy name, &amp;quot;conjunction&amp;quot;). 1∧1=1, but 0∧1=0, 1∧0=0 and 0∧0=0. A AND B is true only if A is true and B is true. Makes sense, right? Since the sides are only true or false, there are only 4 ways it can be, and the rule should be easy to remember - there&amp;#039;s no need to memorize AND tables like how you had to memorize times tables at school. You have to remember the symbol: ∧ looks a bit like A for AND.&lt;br /&gt;
&lt;br /&gt;
∨ is the &amp;quot;OR&amp;quot; operator (fancy name: &amp;quot;disjunction&amp;quot;). It&amp;#039;s true if either side is true, even if both sides are true. So 1∨1=1, 1∨0=1, 0∨1=1, and 0∨0=0. To remember the symbol: it&amp;#039;s the opposite of AND.&lt;br /&gt;
&lt;br /&gt;
¬ is the &amp;quot;NOT&amp;quot; operator (fancy name: &amp;quot;complement&amp;quot; or &amp;quot;inversion&amp;quot; or &amp;quot;negation&amp;quot;). It&amp;#039;s true if the thing that comes after it is false. ¬0=1 and ¬1=0.&lt;br /&gt;
&lt;br /&gt;
Also - more commonly used in digital logic than in pure mathematics - is the ⊕ &amp;quot;XOR&amp;quot; operator. It&amp;#039;s true if one side is true but not both.&lt;br /&gt;
&lt;br /&gt;
So if x and y have different values, here&amp;#039;s what each combination would give you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: it might be cool to embed a JavaScript simulation somewhere --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!y&lt;br /&gt;
!x ∧ y&amp;lt;br&amp;gt;(AND)&lt;br /&gt;
!x ∨ y&amp;lt;br&amp;gt;(OR)&lt;br /&gt;
!x ⊕ y&amp;lt;br&amp;gt;(XOR)&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 0&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 0&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 1&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 1&lt;br /&gt;
| 1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!¬x&amp;lt;br&amp;gt;(NOT)&lt;br /&gt;
|-&lt;br /&gt;
!0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Some Boolean algebraic laws ==&lt;br /&gt;
&lt;br /&gt;
Just like normal maths, we can write more complicated equations and solve them. For example, 1∧((0∧1)∨¬(1∧¬1)) is 1.&lt;br /&gt;
&lt;br /&gt;
Like in normal algebra, we use letters to stand for things we don&amp;#039;t know. So if we have a∧b we can&amp;#039;t tell if it&amp;#039;s 0 or 1 until we know whether a stands for 0 or 1, and whether b stands for 0 or 1. But we &amp;#039;&amp;#039;can&amp;#039;&amp;#039; tell that a∧0 is always 0, no matter what a stands for, and we can simplify equations like this. Even if a stands for another really complicated equation, we know that a∧0 is 0.&lt;br /&gt;
&lt;br /&gt;
If we see ((a∧b)∨(c∧¬d∧0)) we know it&amp;#039;s the same as just a∧b since the second part is always 0, since x∧0 is 0 no matter what x is, and then x∨0 is x no matter what x is.&lt;br /&gt;
&lt;br /&gt;
(TODO: include a list of simplifying rules without just copying Wikipedia?)&lt;br /&gt;
&lt;br /&gt;
== Digital logic circuits ==&lt;br /&gt;
&lt;br /&gt;
Digital logic lets us build machines that calculate Boolean equations. Each operator becomes a little circuit, which is called a *logic gate*, and we can wire them together to calculate complicated equations. We don&amp;#039;t draw how each gate is made, but just which ones are used and how they&amp;#039;re wired together. Each Boolean operator also has a logic gate symbol. We can make a logic circuit so that if we tell it what a, b, c and d stand for, it will tell us what ((a∧b)∨¬(¬a∧c∧¬d)) is.&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
== Doing something useful ==&lt;br /&gt;
&lt;br /&gt;
We can make circuits that compute useful things. We can make a simple calculator - if we have a number a and a number b, that are 0, 1 or 2, we can write a set of equations that calculates the answer, and make a machine that calculates them.&lt;br /&gt;
&lt;br /&gt;
out0 = a0 ∧ b0&amp;lt;br&amp;gt;&lt;br /&gt;
out1 = (a1 ∧ b0) ∨ (a0 ∧ b1)&amp;lt;br&amp;gt;&lt;br /&gt;
out2 = (a2 ∧ b0) ∨ (a1 ∧ b1) ∨ (a0 ∧ b2)&amp;lt;br&amp;gt;&lt;br /&gt;
etc...&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
Of course, as you&amp;#039;ll see later on, it&amp;#039;s better to calculate with binary numbers.&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
Digital logic can also use memory units. The most straightforward type is a &amp;quot;D-latch&amp;quot;. A single D-latch remembers a true or false value; when its enable signal is true, it remembers the new true or false value from its input. When it&amp;#039;s false, it continues remembering the same value. What does it start with, when the power is turned on, before it gets an enable signal? Depending on the design, it might be made to start with true, start with false, or start with an unpredictable true or false. Some designs also have a reset signal which sets the remembered value to false.&lt;br /&gt;
&lt;br /&gt;
Being able to store the output from a circuit and feed it back into the same circuit is one of the most powerful abilities of digital logic because it allows for multiple computation steps. For example, if you feed the output from an adding circuit back to the input, you can reset it to 0, then keep feeding different numbers into the other input, and calculate the sum total of all the numbers you put in.&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of this non-working circuit)&lt;br /&gt;
&lt;br /&gt;
But there&amp;#039;s a big problem with this idea: pacing. If you put 1 into the second input, and enable the latch, you meant to calculate 0+1=1, but the adding circuit will calculate 0+1=1, then the 1 will loop around through the latch and it will calculate 1+1=2, then the 2 will loop around and it will calculate 2+1=3, and so on. The numbers will race around the loop as fast as the adding circuit can calculate. Worse, if there are several bits involved (e.g. when adding numbers in binary) the different parts of the same number may get out of sync and cause the answer to be even more wrong.&lt;br /&gt;
&lt;br /&gt;
You could solve this by providing a very short enable signal - so short that the enable turns off before the next number loops around. But you have to make sure the signal is extremely short, and the exact length can vary depending on the temperature, the voltage, etc. It&amp;#039;s much more reliable to build a latch that only updates once when the enable signal goes from 0 to 1 (a &amp;quot;rising edge&amp;quot;) and then there&amp;#039;s no need to be careful with the signal speed. To make it update again, you&amp;#039;d have to turn the enable signal back to 0 and back again to 1. In this case the enable signal is known as a *clock* signal and the latch is called a *D flip-flop*. You know the adding circuit loop will process the number exactly once, each time the clock goes from 0 to 1 and back to 0.&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of this better circuit)&lt;br /&gt;
&lt;br /&gt;
Most D flip-flops have an enable signal as well as a clock signal. The flip-flop will only update when the clock goes from 0 to 1 *and* the enable is 1 at the same time. This makes it even easier to design reliable circuits. When you use logic gates to calculate some equation, they take a little time to update and in a half-updated state, could generate a &amp;quot;glitch&amp;quot; pulse from 0 to 1 and back to 0 even if they final output is still 0. If you used logic gates to calculate a clock signal, or an enable signal for a latch, you&amp;#039;d have to be very careful not to let this happen - possible, but difficult. But this isn&amp;#039;t a problem for a flip-flop&amp;#039;s enable signal, since it only cares at the exact moment of the clock&amp;#039;s rising edge.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- is it possible to do a glitch simulation? --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=39</id>
		<title>Introduction to digital logic</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=39"/>
		<updated>2025-06-15T11:28:47Z</updated>

		<summary type="html">&lt;p&gt;Immibis: # is for markdown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://en.wikipedia.org/wiki/Boolean_algebra Boolean algebra] (after George Boole) is the mathematical study of statements that are true or false. Several decades later, Claude Shannon realized the same ideas could be used to build electronic circuits to compute things in binary.&lt;br /&gt;
&lt;br /&gt;
== Boolean mathematics ==&lt;br /&gt;
&lt;br /&gt;
Boolean algebra is similar to ordinary algebra: we can write down equations and solve them (or prove they are right or wrong). However, instead of numbers, Boolean equations work on the &amp;quot;numbers&amp;quot; ⊤ (true) and ⊥ or F (false). In binary these are also written as 1 and 0, and we&amp;#039;ll use that because this is a wiki about calculating things in binary. Instead of +, -, ×, ÷ and so on, the things you can do with the numbers are ∧, ∨ and ¬. Let&amp;#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
∧ is the &amp;quot;AND&amp;quot; operator (or, by its more fancy name, &amp;quot;conjunction&amp;quot;). 1∧1=1, but 0∧1=0, 1∧0=0 and 0∧0=0. A AND B is true only if A is true and B is true. Makes sense, right? Since the sides are only true or false, there are only 4 ways it can be, and the rule should be easy to remember - there&amp;#039;s no need to memorize AND tables like how you had to memorize times tables at school. You have to remember the symbol: ∧ looks a bit like A for AND.&lt;br /&gt;
&lt;br /&gt;
∨ is the &amp;quot;OR&amp;quot; operator (fancy name: &amp;quot;disjunction&amp;quot;). It&amp;#039;s true if either side is true, even if both sides are true. So 1∨1=1, 1∨0=1, 0∨1=1, and 0∨0=0. To remember the symbol: it&amp;#039;s the opposite of AND.&lt;br /&gt;
&lt;br /&gt;
¬ is the &amp;quot;NOT&amp;quot; operator (fancy name: &amp;quot;complement&amp;quot; or &amp;quot;inversion&amp;quot; or &amp;quot;negation&amp;quot;). It&amp;#039;s true if the thing that comes after it is false. ¬0=1 and ¬1=0.&lt;br /&gt;
&lt;br /&gt;
Also - more commonly used in digital logic than in pure mathematics - is the ⊕ &amp;quot;XOR&amp;quot; operator. It&amp;#039;s true if one side is true but not both.&lt;br /&gt;
&lt;br /&gt;
So if x and y have different values, here&amp;#039;s what each combination would give you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: it might be cool to embed a JavaScript simulation somewhere --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!y&lt;br /&gt;
!x ∧ y&amp;lt;br&amp;gt;(AND)&lt;br /&gt;
!x ∨ y&amp;lt;br&amp;gt;(OR)&lt;br /&gt;
!x ⊕ y&amp;lt;br&amp;gt;(XOR)&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 0&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 0&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 1&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 1&lt;br /&gt;
| 1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!¬x&amp;lt;br&amp;gt;(NOT)&lt;br /&gt;
|-&lt;br /&gt;
!0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Some Boolean algebraic laws ==&lt;br /&gt;
&lt;br /&gt;
Just like normal maths, we can write more complicated equations and solve them. For example, 1∧((0∧1)∨¬(1∧¬1)) is 1.&lt;br /&gt;
&lt;br /&gt;
Like in normal algebra, we use letters to stand for things we don&amp;#039;t know. So if we have a∧b we can&amp;#039;t tell if it&amp;#039;s 0 or 1 until we know whether a stands for 0 or 1, and whether b stands for 0 or 1. But we &amp;#039;&amp;#039;can&amp;#039;&amp;#039; tell that a∧0 is always 0, no matter what a stands for, and we can simplify equations like this. Even if a stands for another really complicated equation, we know that a∧0 is 0.&lt;br /&gt;
&lt;br /&gt;
If we see ((a∧b)∨(c∧¬d∧0)) we know it&amp;#039;s the same as just a∧b since the second part is always 0, since x∧0 is 0 no matter what x is, and then x∨0 is x no matter what x is.&lt;br /&gt;
&lt;br /&gt;
(TODO: include a list of simplifying rules without just copying Wikipedia?)&lt;br /&gt;
&lt;br /&gt;
== Digital logic circuits ==&lt;br /&gt;
&lt;br /&gt;
Digital logic lets us build machines that calculate Boolean equations. Each operator becomes a little circuit, which is called a *logic gate*, and we can wire them together to calculate complicated equations. We don&amp;#039;t draw how each gate is made, but just which ones are used and how they&amp;#039;re wired together. Each Boolean operator also has a logic gate symbol. We can make a logic circuit so that if we tell it what a, b, c and d stand for, it will tell us what ((a∧b)∨¬(¬a∧c∧¬d)) is.&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
== Doing something useful ==&lt;br /&gt;
&lt;br /&gt;
We can make circuits that compute useful things. We can make a simple calculator - if we have a number a and a number b, that are 0, 1 or 2, we can write a set of equations that calculates the answer, and make a machine that calculates them.&lt;br /&gt;
&lt;br /&gt;
out0 = a0 ∧ b0&amp;lt;br&amp;gt;&lt;br /&gt;
out1 = (a1 ∧ b0) ∨ (a0 ∧ b1)&amp;lt;br&amp;gt;&lt;br /&gt;
out2 = (a2 ∧ b0) ∨ (a1 ∧ b1) ∨ (a0 ∧ b2)&amp;lt;br&amp;gt;&lt;br /&gt;
etc...&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
Of course, as you&amp;#039;ll see later on, it&amp;#039;s better to calculate with binary numbers.&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=38</id>
		<title>Introduction to digital logic</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=38"/>
		<updated>2025-06-15T11:27:36Z</updated>

		<summary type="html">&lt;p&gt;Immibis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://en.wikipedia.org/wiki/Boolean_algebra Boolean algebra] (after George Boole) is the mathematical study of statements that are true or false. Several decades later, Claude Shannon realized the same ideas could be used to build electronic circuits to compute things in binary.&lt;br /&gt;
&lt;br /&gt;
# Boolean logic&lt;br /&gt;
&lt;br /&gt;
Boolean algebra is similar to ordinary algebra: we can write down equations and solve them (or prove they are right or wrong). However, instead of numbers, Boolean equations work on the &amp;quot;numbers&amp;quot; ⊤ (true) and ⊥ or F (false). In binary these are also written as 1 and 0, and we&amp;#039;ll use that because this is a wiki about calculating things in binary. Instead of +, -, ×, ÷ and so on, the things you can do with the numbers are ∧, ∨ and ¬. Let&amp;#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
∧ is the &amp;quot;AND&amp;quot; operator (or, by its more fancy name, &amp;quot;conjunction&amp;quot;). 1∧1=1, but 0∧1=0, 1∧0=0 and 0∧0=0. A AND B is true only if A is true and B is true. Makes sense, right? Since the sides are only true or false, there are only 4 ways it can be, and the rule should be easy to remember - there&amp;#039;s no need to memorize AND tables like how you had to memorize times tables at school. You have to remember the symbol: ∧ looks a bit like A for AND.&lt;br /&gt;
&lt;br /&gt;
∨ is the &amp;quot;OR&amp;quot; operator (fancy name: &amp;quot;disjunction&amp;quot;). It&amp;#039;s true if either side is true, even if both sides are true. So 1∨1=1, 1∨0=1, 0∨1=1, and 0∨0=0. To remember the symbol: it&amp;#039;s the opposite of AND.&lt;br /&gt;
&lt;br /&gt;
¬ is the &amp;quot;NOT&amp;quot; operator (fancy name: &amp;quot;complement&amp;quot; or &amp;quot;inversion&amp;quot; or &amp;quot;negation&amp;quot;). It&amp;#039;s true if the thing that comes after it is false. ¬0=1 and ¬1=0.&lt;br /&gt;
&lt;br /&gt;
Also - more commonly used in digital logic than in pure mathematics - is the ⊕ &amp;quot;XOR&amp;quot; operator. It&amp;#039;s true if one side is true but not both.&lt;br /&gt;
&lt;br /&gt;
So if x and y have different values, here&amp;#039;s what each combination would give you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: it might be cool to embed a JavaScript simulation somewhere --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!y&lt;br /&gt;
!x ∧ y&amp;lt;br&amp;gt;(AND)&lt;br /&gt;
!x ∨ y&amp;lt;br&amp;gt;(OR)&lt;br /&gt;
!x ⊕ y&amp;lt;br&amp;gt;(XOR)&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 0&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 0&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 1&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 1&lt;br /&gt;
| 1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!¬x&amp;lt;br&amp;gt;(NOT)&lt;br /&gt;
|-&lt;br /&gt;
!0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
# Some laws of Boolean algebra&lt;br /&gt;
&lt;br /&gt;
Just like normal maths, we can write more complicated equations and solve them. For example, 1∧((0∧1)∨¬(1∧¬1)) is 1.&lt;br /&gt;
&lt;br /&gt;
Like in normal algebra, we use letters to stand for things we don&amp;#039;t know. So if we have a∧b we can&amp;#039;t tell if it&amp;#039;s 0 or 1 until we know whether a stands for 0 or 1, and whether b stands for 0 or 1. But we &amp;#039;&amp;#039;can&amp;#039;&amp;#039; tell that a∧0 is always 0, no matter what a stands for, and we can simplify equations like this. Even if a stands for another really complicated equation, we know that a∧0 is 0.&lt;br /&gt;
&lt;br /&gt;
If we see ((a∧b)∨(c∧¬d∧0)) we know it&amp;#039;s the same as just a∧b since the second part is always 0, since x∧0 is 0 no matter what x is, and then x∨0 is x no matter what x is.&lt;br /&gt;
&lt;br /&gt;
(TODO: include a list of simplifying rules without just copying Wikipedia?)&lt;br /&gt;
&lt;br /&gt;
# Digital logic circuits&lt;br /&gt;
&lt;br /&gt;
Digital logic lets us build machines that calculate Boolean equations. Each operator becomes a little circuit, which is called a *logic gate*, and we can wire them together to calculate complicated equations. We don&amp;#039;t draw how each gate is made, but just which ones are used and how they&amp;#039;re wired together. Each Boolean operator also has a logic gate symbol. We can make a logic circuit so that if we tell it what a, b, c and d stand for, it will tell us what ((a∧b)∨¬(¬a∧c∧¬d)) is.&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
# Doing something useful&lt;br /&gt;
&lt;br /&gt;
We can make circuits that compute useful things. We can make a simple calculator - if we have a number a and a number b, that are 0, 1 or 2, we can write a set of equations that calculates the answer, and make a machine that calculates them.&lt;br /&gt;
&lt;br /&gt;
out0 = a0 ∧ b0&amp;lt;br&amp;gt;&lt;br /&gt;
out1 = (a1 ∧ b0) ∨ (a0 ∧ b1)&amp;lt;br&amp;gt;&lt;br /&gt;
out2 = (a2 ∧ b0) ∨ (a1 ∧ b1) ∨ (a0 ∧ b2)&amp;lt;br&amp;gt;&lt;br /&gt;
etc...&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
Of course, as you&amp;#039;ll see later on, it&amp;#039;s better to calculate with binary numbers.&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=37</id>
		<title>Introduction to digital logic</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Introduction_to_digital_logic&amp;diff=37"/>
		<updated>2025-06-15T11:26:11Z</updated>

		<summary type="html">&lt;p&gt;Immibis: first draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://en.wikipedia.org/wiki/Boolean_algebra Boolean algebra] (after George Boole) is the mathematical study of statements that are true or false. Several decades later, Claude Shannon realized the same ideas could be used to build electronic circuits to compute things in binary.&lt;br /&gt;
&lt;br /&gt;
Boolean algebra is similar to ordinary algebra: we can write down equations and solve them (or prove they are right or wrong). However, instead of numbers, Boolean equations work on the &amp;quot;numbers&amp;quot; ⊤ (true) and ⊥ or F (false). In binary these are also written as 1 and 0, and we&amp;#039;ll use that because this is a wiki about calculating things in binary. Instead of +, -, ×, ÷ and so on, the things you can do with the numbers are ∧, ∨ and ¬. Let&amp;#039;s take a look at them.&lt;br /&gt;
&lt;br /&gt;
∧ is the &amp;quot;AND&amp;quot; operator (or, by its more fancy name, &amp;quot;conjunction&amp;quot;). 1∧1=1, but 0∧1=0, 1∧0=0 and 0∧0=0. A AND B is true only if A is true and B is true. Makes sense, right? Since the sides are only true or false, there are only 4 ways it can be, and the rule should be easy to remember - there&amp;#039;s no need to memorize AND tables like how you had to memorize times tables at school. You have to remember the symbol: ∧ looks a bit like A for AND.&lt;br /&gt;
&lt;br /&gt;
∨ is the &amp;quot;OR&amp;quot; operator (fancy name: &amp;quot;disjunction&amp;quot;). It&amp;#039;s true if either side is true, even if both sides are true. So 1∨1=1, 1∨0=1, 0∨1=1, and 0∨0=0. To remember the symbol: it&amp;#039;s the opposite of AND.&lt;br /&gt;
&lt;br /&gt;
¬ is the &amp;quot;NOT&amp;quot; operator (fancy name: &amp;quot;complement&amp;quot; or &amp;quot;inversion&amp;quot; or &amp;quot;negation&amp;quot;). It&amp;#039;s true if the thing that comes after it is false. ¬0=1 and ¬1=0.&lt;br /&gt;
&lt;br /&gt;
Also common in digital logic, more than mathematical logic, is the ⊕ &amp;quot;XOR&amp;quot; operator. It&amp;#039;s true if one side is true but not both.&lt;br /&gt;
&lt;br /&gt;
So if x and y have different values, here&amp;#039;s what each combination would give you:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: it might be cool to embed a JavaScript simulation somewhere --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!y&lt;br /&gt;
!x ∧ y&amp;lt;br&amp;gt;(AND)&lt;br /&gt;
!x ∨ y&amp;lt;br&amp;gt;(OR)&lt;br /&gt;
!x ⊕ y&amp;lt;br&amp;gt;(XOR)&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 0&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 0&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!0 !! 1&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
!1 !! 1&lt;br /&gt;
| 1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!x&lt;br /&gt;
!¬x&amp;lt;br&amp;gt;(NOT)&lt;br /&gt;
|-&lt;br /&gt;
!0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!1&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Just like normal maths, we can write more complicated equations and solve them. For example, 1∧((0∧1)∨¬(1∧¬1)) is 1.&lt;br /&gt;
&lt;br /&gt;
Like in normal algebra, we use letters to stand for things we don&amp;#039;t know. So if we have a∧b we can&amp;#039;t tell if it&amp;#039;s 0 or 1 until we know whether a stands for 0 or 1, and whether b stands for 0 or 1. But we &amp;#039;&amp;#039;can&amp;#039;&amp;#039; tell that a∧0 is always 0, no matter what a stands for, and we can simplify equations like this. Even if a stands for another really complicated equation, we know that a∧0 is 0.&lt;br /&gt;
&lt;br /&gt;
If we see ((a∧b)∨(c∧¬d∧0)) we know it&amp;#039;s the same as just a∧b since the second part is always 0, since x∧0 is 0 no matter what x is, and then x∨0 is x no matter what x is.&lt;br /&gt;
&lt;br /&gt;
(TODO: include a list of simplifying rules without just copying Wikipedia?)&lt;br /&gt;
&lt;br /&gt;
Digital logic lets us build machines that calculate Boolean equations. Each operator becomes a little circuit, which is called a *logic gate*, and we can wire them together to calculate complicated equations. We don&amp;#039;t draw how each gate is made, but just which ones are used and how they&amp;#039;re wired together. Each Boolean operator also has a logic gate symbol. We can make a logic circuit so that if we tell it what a, b, c and d stand for, it will tell us what ((a∧b)∨¬(¬a∧c∧¬d)) is.&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
We can make circuits that compute useful things. We can make a simple calculator - if we have a number a and a number b, that are 0, 1 or 2, we can write a set of equations that calculates the answer, and make a machine that calculates them.&lt;br /&gt;
&lt;br /&gt;
out0 = a0 ∧ b0&amp;lt;br&amp;gt;&lt;br /&gt;
out1 = (a1 ∧ b0) ∨ (a0 ∧ b1)&amp;lt;br&amp;gt;&lt;br /&gt;
out2 = (a2 ∧ b0) ∨ (a1 ∧ b1) ∨ (a0 ∧ b2)&amp;lt;br&amp;gt;&lt;br /&gt;
etc...&lt;br /&gt;
&lt;br /&gt;
(insert a diagram, or even better, an interactive simulation, of a circuit that does this)&lt;br /&gt;
&lt;br /&gt;
Of course, as you&amp;#039;ll see later on, it&amp;#039;s better to calculate with binary numbers.&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Ethernet&amp;diff=27</id>
		<title>Ethernet</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Ethernet&amp;diff=27"/>
		<updated>2025-03-21T19:15:05Z</updated>

		<summary type="html">&lt;p&gt;Immibis: /* Ethernet packet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ethernet is a &amp;#039;&amp;#039;wired&amp;#039;&amp;#039; protocol for connecting many devices in a network such that they can transfer data between each other.&lt;br /&gt;
It defines both the physical layers (10BASE-T, 100BASE-TX ...) as well the data format of an Ethernet packet &amp;amp; frame.&lt;br /&gt;
&lt;br /&gt;
= Ethernet packet &amp;amp; frame =&lt;br /&gt;
&lt;br /&gt;
There are two major formats of ethernet &amp;#039;&amp;#039;packets&amp;#039;&amp;#039;:&lt;br /&gt;
the regular variant which supports MTUs (Maximum Transmission Unit) of up to 1500 bytes&lt;br /&gt;
and &amp;quot;jumbo frames&amp;quot;, which support MTUs of up to 9000 bytes.&lt;br /&gt;
The latter are only supported for gigabit links and higher.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; each byte is transmitted starting from its LSb to its MSb.&lt;br /&gt;
&lt;br /&gt;
== Ethernet packet ==&lt;br /&gt;
&lt;br /&gt;
Every Ethernet packet starts with a preamble.&lt;br /&gt;
This preamble is a repeated pattern of &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt; bits (hex: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt;).&lt;br /&gt;
This pattern is used to synchronize the clock as well as signal to the receiver a frame is about to be transmitted.&lt;br /&gt;
The preamble consists of 7 bytes.&lt;br /&gt;
&lt;br /&gt;
Immediately followed after the preamble is the SFD (Start Frame Delimiter).&lt;br /&gt;
This byte has the value &amp;lt;code&amp;gt;11010101&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0xd5&amp;lt;/code&amp;gt;) and indicates the start of the Ethernet Frame.&lt;br /&gt;
&lt;br /&gt;
After the Ethernet Frame there is an IPG (InterPacket Gap) of 12 bytes during which no data is sent whatsoever.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Ethernet packet&lt;br /&gt;
|-&lt;br /&gt;
! Preamble !! SFD !! Ethernet frame !! IPG&lt;br /&gt;
|-&lt;br /&gt;
| 0x55, 7 times || 0xd5 || ... || 12 bytes of nothing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ethernet frame ==&lt;br /&gt;
&lt;br /&gt;
An Ethernet frame is at least 64 bytes long.&lt;br /&gt;
&lt;br /&gt;
Each frame ends with a FCS (Frame Check Sequence) which is a CRC32 of all preceding frame data.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Ethernet frame&lt;br /&gt;
|-&lt;br /&gt;
! Destination MAC address !! Source MAC address !! EtherType !! Payload !! FCS&lt;br /&gt;
|-&lt;br /&gt;
| 6 bytes || 6 bytes || 2 bytes || At least 46 bytes || 4 bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;EtherType&amp;quot; &amp;lt;code&amp;gt;0x8100&amp;lt;/code&amp;gt; indicate a 802.1Q tag is present, in which case the format is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Ethernet frame with 802.1Q tag&lt;br /&gt;
|-&lt;br /&gt;
! Destination MAC address !! Source MAC address !! 802.1Q tag !! EtherType !! Payload !! FCS&lt;br /&gt;
|-&lt;br /&gt;
| 6 bytes || 6 bytes || 4 bytes || 2 bytes || At least 42 bytes || 4 bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;real&amp;quot; EtherType is located right after the tag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 802.1Q tag&lt;br /&gt;
|-&lt;br /&gt;
! TPID !! TCI&lt;br /&gt;
|-&lt;br /&gt;
| 0x8100 || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Interfaces =&lt;br /&gt;
&lt;br /&gt;
There are various types of interfaces to interact with Ethernet controllers.&lt;br /&gt;
&lt;br /&gt;
== Media Independent Interface (MII) ==&lt;br /&gt;
&lt;br /&gt;
The MII is the most common type of interface. Several variants exists for higher speeds or lower pin count.&lt;br /&gt;
&lt;br /&gt;
=== Standard ===&lt;br /&gt;
&lt;br /&gt;
The standard MII interfaces supports 10BASE-T and 100BASE-TX.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ MII pins&lt;br /&gt;
|-&lt;br /&gt;
! Pin(s) !! Description&lt;br /&gt;
|-&lt;br /&gt;
| TX_CLK || Transmission clock. Must be used when sending data.&lt;br /&gt;
|-&lt;br /&gt;
| TXD[0:3] || 4 bits of data to transmit if TX_EN is high.&lt;br /&gt;
|-&lt;br /&gt;
| TX_EN || When high, transmit data.&lt;br /&gt;
|-&lt;br /&gt;
| TX_ER || When high, force a transmission error.&lt;br /&gt;
|-&lt;br /&gt;
| RX_CLK || Receive clock. Must be used when receiving data.&lt;br /&gt;
|-&lt;br /&gt;
| RXD[0:3] || 4 bits of received data when RX_DV is high.&lt;br /&gt;
|-&lt;br /&gt;
| RX_DV || Whether data is currently being received.&lt;br /&gt;
|-&lt;br /&gt;
| RX_ER || Whether an error occured during reception.&lt;br /&gt;
|-&lt;br /&gt;
| CRS || Carrier sense. TODO&lt;br /&gt;
|-&lt;br /&gt;
| COL || Collision detect. TODO&lt;br /&gt;
|-&lt;br /&gt;
| MDIO&lt;br /&gt;
|-&lt;br /&gt;
| MDC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When receiving or sending data, the &amp;#039;&amp;#039;&amp;#039;high&amp;#039;&amp;#039;&amp;#039; nibble (4 bits) is sent first, then the low nibble.&lt;br /&gt;
&lt;br /&gt;
It is possible some bytes of the preamble may be missing on reception. This may happen if the controller detects the signal late.&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=RISC_vs_CISC&amp;diff=25</id>
		<title>RISC vs CISC</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=RISC_vs_CISC&amp;diff=25"/>
		<updated>2025-03-19T20:08:43Z</updated>

		<summary type="html">&lt;p&gt;Immibis: write more about the implementation differences&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contemporary usage of the terms RISC and CISC is muddy, but originally referred to the amount of operations a single instruction could (or should) do.&lt;br /&gt;
&lt;br /&gt;
For example, swapping values between a register and a memory location on a RISC machine may be done as:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
ld.w  x3,[x2]    ; 1 cycle&lt;br /&gt;
st.w  [x2],x1    ; 1 cycle&lt;br /&gt;
mv    x1,x3      ; 1 cycle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Whereas on a CISC machine it might be done as:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
xchg  x1,[x2]    ; 3 cycles&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
RISC cores tend to be smaller and simpler, allowing higher clock speeds to be achieved. CISC cores tend to be more complex but usually have better code density.&lt;br /&gt;
&lt;br /&gt;
CISC processors were often characterized by their extensive, [[microcode]]-based [[control unit]]s to coordinate the different steps that needed to be performed during an instruction, while RISC processors could get by with much simpler control units using only [[random logic]]. The space saved by the simpler control unit  could be used to expand the [[register file]], as in the [[ARM1]].&lt;br /&gt;
&lt;br /&gt;
A well-designed CISC instruction set encodes instructions compactly, using less memory. RISC architectures typically use the same size for each instruction, while CISC architectures typically vary the instruction length as needed, as well as performing several steps in a single instruction &amp;amp;mdash; both of which can be viewed as forms of compression. On the other hand, the &amp;quot;wasted&amp;quot; bits that are not necessary for a particular RISC instruction can be put to novel uses, such as the condition codes and integrated shifting in [[ARM]].&lt;br /&gt;
&lt;br /&gt;
In practice, modern ISAs are a hybrid between the two approaches, with both simple and complex instructions.&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=12</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=12"/>
		<updated>2021-07-06T17:43:32Z</updated>

		<summary type="html">&lt;p&gt;Immibis: added external interfaces to try and balance it more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Left side: tutorials. Starting from the top (and skipping irrelevant ones) should get a new person going in a useful direction, kinda like a tutorial. More experienced people can go farther down the list. At some point it can split into branches --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Getting started|&lt;br /&gt;
Essential knowledge:&lt;br /&gt;
* [[Introduction to digital logic]]&lt;br /&gt;
* [[Binary arithmetic]]&lt;br /&gt;
* [[How a computer works]]&lt;br /&gt;
Designing and simulating a CPU:&lt;br /&gt;
* [[Getting started - Logisim]]&lt;br /&gt;
* [[Getting started - FPGAs]]&lt;br /&gt;
Building a CPU in real life:&lt;br /&gt;
* [[Electronics primer]]&lt;br /&gt;
* [[Getting started - logic chips]]&lt;br /&gt;
* [[Getting started - transistor circuits]]&lt;br /&gt;
* [[Getting started - relay circuits]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Basic CPU design|&lt;br /&gt;
Important design considerations:&lt;br /&gt;
* [[Programmer&amp;#039;s model]]&lt;br /&gt;
* [[Harvard vs Von Neumann]]&lt;br /&gt;
* [[RISC vs CISC]]&lt;br /&gt;
* [[Number of bits]]&lt;br /&gt;
Hardware design:&lt;br /&gt;
* [[Instruction encoding]]&lt;br /&gt;
* [[Data path]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Software|&lt;br /&gt;
* [[Emulator]]&lt;br /&gt;
* [[Assembly language]]&lt;br /&gt;
* [[C language]]&lt;br /&gt;
* [[Forth language]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Advanced topics|&lt;br /&gt;
Instruction set extensions:&lt;br /&gt;
* [[Exceptions and interrupts]]&lt;br /&gt;
* [[Floating-point unit]]&lt;br /&gt;
* [[Virtual memory]]&lt;br /&gt;
Performance tricks:&lt;br /&gt;
* [[Instruction prefetching]]&lt;br /&gt;
* [[Pipelining]]&lt;br /&gt;
* [[Branch prediction]]&lt;br /&gt;
* [[Data cache]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
* [[Register renaming]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Right side: various reference information, try to order by put most-widely-applicable stuff at the top --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Logic references|&lt;br /&gt;
* [[Relay logic]]&lt;br /&gt;
* [[Logic level reference]]&lt;br /&gt;
* [[Logic chip reference]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=External interfaces|&lt;br /&gt;
* [[UART]]&lt;br /&gt;
* [[I2C]] / [[SPI]]&lt;br /&gt;
* [[VGA]]&lt;br /&gt;
* [[PS/2]] (mouse and keyboard)&lt;br /&gt;
* [[Ethernet]]&lt;br /&gt;
* [[USB]]&lt;br /&gt;
}} &amp;lt;!-- looking pretty unbalanced! More stuff needed here --&amp;gt;&lt;br /&gt;
{{Box|title=CPU projects|&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=11</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=11"/>
		<updated>2021-07-05T21:18:51Z</updated>

		<summary type="html">&lt;p&gt;Immibis: another revision&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Left side: tutorials. Starting from the top (and skipping irrelevant ones) should get a new person going in a useful direction, kinda like a tutorial. More experienced people can go farther down the list. At some point it can split into branches --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Getting started|&lt;br /&gt;
Essential knowledge:&lt;br /&gt;
* [[Introduction to digital logic]]&lt;br /&gt;
* [[Binary arithmetic]]&lt;br /&gt;
* [[How a computer works]]&lt;br /&gt;
Designing and simulating a CPU:&lt;br /&gt;
* [[Getting started - Logisim]]&lt;br /&gt;
* [[Getting started - FPGAs]]&lt;br /&gt;
Building a CPU in real life:&lt;br /&gt;
* [[Electronics primer]]&lt;br /&gt;
* [[Getting started - logic chips]]&lt;br /&gt;
* [[Getting started - transistor circuits]]&lt;br /&gt;
* [[Getting started - relay circuits]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Basic CPU design|&lt;br /&gt;
Important design considerations:&lt;br /&gt;
* [[Programmer&amp;#039;s model]]&lt;br /&gt;
* [[Harvard vs Von Neumann]]&lt;br /&gt;
* [[RISC vs CISC]]&lt;br /&gt;
* [[Number of bits]]&lt;br /&gt;
Hardware design:&lt;br /&gt;
* [[Instruction encoding]]&lt;br /&gt;
* [[Data path]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Software|&lt;br /&gt;
* [[Emulator]]&lt;br /&gt;
* [[Assembly language]]&lt;br /&gt;
* [[C language]]&lt;br /&gt;
* [[Forth language]]&lt;br /&gt;
}}&lt;br /&gt;
{{Box|title=Advanced topics|&lt;br /&gt;
Instruction set extensions:&lt;br /&gt;
* [[Exceptions and interrupts]]&lt;br /&gt;
* [[Floating-point unit]]&lt;br /&gt;
* [[Virtual memory]]&lt;br /&gt;
Performance tricks:&lt;br /&gt;
* [[Instruction prefetching]]&lt;br /&gt;
* [[Pipelining]]&lt;br /&gt;
* [[Branch prediction]]&lt;br /&gt;
* [[Data cache]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
* [[Register renaming]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Right side: various reference information, try to order by put most-widely-applicable stuff at the top --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Logic reference|&lt;br /&gt;
* [[Relay logic]]&lt;br /&gt;
* [[Logic level reference]]&lt;br /&gt;
* [[Logic chip reference]]&lt;br /&gt;
}} &amp;lt;!-- Looking pretty unbalanced! More stuff needed here --&amp;gt;&lt;br /&gt;
{{Box|title=CPU projects|&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=10</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=10"/>
		<updated>2021-07-05T18:56:18Z</updated>

		<summary type="html">&lt;p&gt;Immibis: Use the new Box template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Major components and concepts|&lt;br /&gt;
* [[Instruction Set Architecture]]&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
** [[Instruction decoding]]&lt;br /&gt;
** [[Microcode]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Memory bus]]&lt;br /&gt;
** [[RAM]]&lt;br /&gt;
** [[Memory-mapped IO]]&lt;br /&gt;
* [[External interfaces]]&lt;br /&gt;
** [[UART console]]&lt;br /&gt;
** [[GPIO]]&lt;br /&gt;
** [[SD card storage]]&lt;br /&gt;
** [[Character LCD]]&lt;br /&gt;
** [[PS/2 keyboard]]&lt;br /&gt;
** [[Audio output]]&lt;br /&gt;
** [[VGA video]]&lt;br /&gt;
** [[USB]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Software|&lt;br /&gt;
* [[Writing an assembler]]&lt;br /&gt;
* [[Writing an emulator]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Advanced instruction set|&lt;br /&gt;
* [[Interrupts and exceptions]]&lt;br /&gt;
* [[Virtual memory]]&lt;br /&gt;
* [[Memory protection]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box|title=Performance optimizations|&lt;br /&gt;
* [[Prefetching]]&lt;br /&gt;
* [[Branch prediction]]&lt;br /&gt;
* [[Data cache]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
* [[Register renaming]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
{{Box|title=Implementation technology|&lt;br /&gt;
* [[Intro to binary logic]]&lt;br /&gt;
** [[Logic simulators]]&lt;br /&gt;
* [[FPGA development]]&lt;br /&gt;
* [[Intro to electronics]]&lt;br /&gt;
** [[Logic chips]]&lt;br /&gt;
** [[Transistor logic]]&lt;br /&gt;
** [[Relay logic]]&lt;br /&gt;
* [[Exotic logic families]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box|title=CPU projects|&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Template:Box&amp;diff=9</id>
		<title>Template:Box</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Template:Box&amp;diff=9"/>
		<updated>2021-07-05T18:55:00Z</updated>

		<summary type="html">&lt;p&gt;Immibis: Params start at 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;{{{title}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{1}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Body&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Contents of the box&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of the box&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;makes a box like on the homepage&amp;quot;,&lt;br /&gt;
	&amp;quot;maps&amp;quot;: {&lt;br /&gt;
		&amp;quot;asd&amp;quot;: {}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;title&amp;quot;,&lt;br /&gt;
		&amp;quot;1&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;block&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Template:Box&amp;diff=8</id>
		<title>Template:Box</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Template:Box&amp;diff=8"/>
		<updated>2021-07-05T18:54:19Z</updated>

		<summary type="html">&lt;p&gt;Immibis: Created page with &amp;quot;&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;{{{title}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{0}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;0&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Body&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Contents of the box&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of the box&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;makes a box like on the homepage&amp;quot;,&lt;br /&gt;
	&amp;quot;maps&amp;quot;: {&lt;br /&gt;
		&amp;quot;asd&amp;quot;: {}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;title&amp;quot;,&lt;br /&gt;
		&amp;quot;0&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;block&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=7</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=7"/>
		<updated>2021-07-05T00:17:58Z</updated>

		<summary type="html">&lt;p&gt;Immibis: add a bunch more placeholder links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Major components and concepts&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Instruction Set Architecture]]&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
** [[Instruction decoding]]&lt;br /&gt;
** [[Microcode]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Memory bus]]&lt;br /&gt;
** [[RAM]]&lt;br /&gt;
** [[Memory-mapped IO]]&lt;br /&gt;
* [[External interfaces]]&lt;br /&gt;
** [[UART console]]&lt;br /&gt;
** [[GPIO]]&lt;br /&gt;
** [[SD card storage]]&lt;br /&gt;
** [[Character LCD]]&lt;br /&gt;
** [[PS/2 keyboard]]&lt;br /&gt;
** [[Audio output]]&lt;br /&gt;
** [[VGA video]]&lt;br /&gt;
** [[USB]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Software&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Writing an assembler]]&lt;br /&gt;
* [[Writing an emulator]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Advanced instruction set&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Interrupts and exceptions]]&lt;br /&gt;
* [[Virtual memory]]&lt;br /&gt;
* [[Memory protection]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Performance optimizations&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Prefetching]]&lt;br /&gt;
* [[Branch prediction]]&lt;br /&gt;
* [[Data cache]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
* [[Register renaming]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Implementation technology&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Intro to binary logic]]&lt;br /&gt;
** [[Logic simulators]]&lt;br /&gt;
* [[FPGA development]]&lt;br /&gt;
* [[Intro to electronics]]&lt;br /&gt;
** [[Logic chips]]&lt;br /&gt;
** [[Transistor logic]]&lt;br /&gt;
** [[Relay logic]]&lt;br /&gt;
* [[Exotic logic families]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;CPU projects&amp;lt;/div&amp;gt;&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=6</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=6"/>
		<updated>2021-07-05T00:10:09Z</updated>

		<summary type="html">&lt;p&gt;Immibis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Major components and concepts&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Memory bus]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Performance optimizations&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Prefetching]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Implementation technology&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Writing an emulator]]&lt;br /&gt;
* [[Intro to binary logic]]&lt;br /&gt;
** [[Logic simulators]]&lt;br /&gt;
* [[FPGA development]]&lt;br /&gt;
* [[Intro to electronics]]&lt;br /&gt;
** [[Logic chips]]&lt;br /&gt;
** [[Transistor logic]]&lt;br /&gt;
** [[Relay logic]]&lt;br /&gt;
* [[Exotic logic families]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;CPU projects&amp;lt;/div&amp;gt;&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=5</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=5"/>
		<updated>2021-07-05T00:09:09Z</updated>

		<summary type="html">&lt;p&gt;Immibis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Major components and concepts&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Memory bus]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Performance optimizations&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Prefetching]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Implementation technology&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[FPGA]]&lt;br /&gt;
* [[Intro to electronics]]&lt;br /&gt;
** [[Logic chips]]&lt;br /&gt;
** [[Transistor logic]]&lt;br /&gt;
** [[Relay logic]]&lt;br /&gt;
* [[Exotic logic families]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;CPU projects&amp;lt;/div&amp;gt;&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=4</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=4"/>
		<updated>2021-07-05T00:06:28Z</updated>

		<summary type="html">&lt;p&gt;Immibis: add some external links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Major components and concepts&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Memory bus]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Performance optimizations&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Prefetching]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Implementation technology&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[FPGA]]&lt;br /&gt;
* [[7400 series logic]]&lt;br /&gt;
* [[Discrete transistor logic]]&lt;br /&gt;
** [[CMOS]]&lt;br /&gt;
** [[TTL]]&lt;br /&gt;
* [[Relay logic]]&lt;br /&gt;
* [[Exotic logic families]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;CPU projects&amp;lt;/div&amp;gt;&lt;br /&gt;
* [https://www.bigmessowires.com/bmow1/ Big Mess of Wires]&lt;br /&gt;
* [http://www.homebrewcpu.com/ Magic-1]&lt;br /&gt;
* [http://megaprocessor.com/ Megaprocessor]&lt;br /&gt;
* [https://monster6502.com/ Monster 6502] &lt;br /&gt;
* [https://relaycomputer.co.uk/pages/overview.html Paul Law&amp;#039;s relay computer]&lt;br /&gt;
* [http://zipcpu.com/about/zipcpu.html ZipCPU]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=3</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=3"/>
		<updated>2021-07-05T00:02:18Z</updated>

		<summary type="html">&lt;p&gt;Immibis: add contact info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&amp;lt;br&amp;gt;&lt;br /&gt;
To get editing permission, create an account and ping immibis on IRC. irc.libera.chat #cpudev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Major components and concepts&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Memory bus]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Performance optimizations&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Prefetching]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Implementation technology&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[FPGA]]&lt;br /&gt;
* [[7400 series logic]]&lt;br /&gt;
* [[Discrete transistor logic]]&lt;br /&gt;
** [[CMOS]]&lt;br /&gt;
** [[TTL]]&lt;br /&gt;
* [[Relay logic]]&lt;br /&gt;
* [[Exotic logic families]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
	<entry>
		<id>https://cpudev.org/w/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://cpudev.org/w/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2021-07-05T00:01:38Z</updated>

		<summary type="html">&lt;p&gt;Immibis: Initial main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Box concept copied from osdev wiki, which probably copied it from Wikipedia --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width: 100%; text-align: center; background-color: #fff7f2; border: solid 1px #ffddc6; margin-bottom: 14px;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;p style=&amp;quot;font-size: xx-large; margin: 0;&amp;quot;&amp;gt;Homebrew CPU Wiki&amp;lt;/p&amp;gt;&lt;br /&gt;
This main page is mostly a placeholder for now.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Major components and concepts&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Control unit]]&lt;br /&gt;
* [[ALU]]&lt;br /&gt;
* [[Memory bus]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Performance optimizations&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[Prefetching]]&lt;br /&gt;
* [[Out-of-order execution]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;vertical-align: top; padding-left: 10px;&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #fff7f2; border: solid 1px #ffddc6; padding: 0.5em; margin-bottom: 13px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight: bold; background-color: #ffe7d6; margin: 0; border: solid 1px #ffddc6; padding: 0 0.5em 0 0.5em;&amp;quot;&amp;gt;Implementation technology&amp;lt;/div&amp;gt;&lt;br /&gt;
* [[FPGA]]&lt;br /&gt;
* [[7400 series logic]]&lt;br /&gt;
* [[Discrete transistor logic]]&lt;br /&gt;
** [[CMOS]]&lt;br /&gt;
** [[TTL]]&lt;br /&gt;
* [[Relay logic]]&lt;br /&gt;
* [[Exotic logic families]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Immibis</name></author>
	</entry>
</feed>