diff --git a/content/.obsidian/appearance.json b/content/.obsidian/appearance.json index 992ecb1..e6db56c 100644 --- a/content/.obsidian/appearance.json +++ b/content/.obsidian/appearance.json @@ -5,5 +5,6 @@ "textFontFamily": "Adwaita Sans", "monospaceFontFamily": "Adwaita Mono", "nativeMenus": false, - "baseFontSize": 16 + "baseFontSize": 16, + "theme": "obsidian" } \ No newline at end of file diff --git a/content/.obsidian/community-plugins.json b/content/.obsidian/community-plugins.json index c6f6adc..1fa1f1f 100644 --- a/content/.obsidian/community-plugins.json +++ b/content/.obsidian/community-plugins.json @@ -3,5 +3,6 @@ "obsidian-linter", "table-editor-obsidian", "obsidian-languagetool-plugin", - "obsidian-link-converter" + "obsidian-link-converter", + "oz-clear-unused-images" ] \ No newline at end of file diff --git a/content/.obsidian/plugins/oz-clear-unused-images/main.js b/content/.obsidian/plugins/oz-clear-unused-images/main.js new file mode 100644 index 0000000..1bacc16 --- /dev/null +++ b/content/.obsidian/plugins/oz-clear-unused-images/main.js @@ -0,0 +1,4 @@ +"use strict";var e=require("obsidian");function t(e,t,i,s){return new(i||(i=Promise))((function(n,a){function o(e){try{d(s.next(e))}catch(e){a(e)}}function l(e){try{d(s.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,l)}d((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const i={deleteOption:".trash",logsModal:!0,excludedFolders:"",ribbonIcon:!1,excludeSubfolders:!1};class s extends e.PluginSettingTab{constructor(e,t){super(e,t),this.plugin=t}display(){let{containerEl:t}=this;t.empty(),t.createEl("h2",{text:"Clear Images Settings"}),new e.Setting(t).setName("Ribbon Icon").setDesc("Turn on if you want Ribbon Icon for clearing the images.").addToggle((e=>e.setValue(this.plugin.settings.ribbonIcon).onChange((e=>{this.plugin.settings.ribbonIcon=e,this.plugin.saveSettings(),this.plugin.refreshIconRibbon()})))),new e.Setting(t).setName("Delete Logs").setDesc("Turn off if you dont want to view the delete logs Modal to pop up after deletion is completed. It wont appear if no image is deleted").addToggle((e=>e.setValue(this.plugin.settings.logsModal).onChange((e=>{this.plugin.settings.logsModal=e,this.plugin.saveSettings()})))),new e.Setting(t).setName("Deleted Image Destination").setDesc("Select where you want images to be moved once they are deleted").addDropdown((e=>{e.addOption("permanent","Delete Permanently"),e.addOption(".trash","Move to Obsidian Trash"),e.addOption("system-trash","Move to System Trash"),e.setValue(this.plugin.settings.deleteOption),e.onChange((e=>{this.plugin.settings.deleteOption=e,this.plugin.saveSettings()}))})),new e.Setting(t).setName("Excluded Folder Full Paths").setDesc("Provide the FULL path of the folder names (Case Sensitive) divided by comma (,) to be excluded from clearing. \n\t\t\t\t\ti.e. For images under Personal/Files/Zodiac -> Personal/Files/Zodiac should be used for exclusion").addTextArea((e=>e.setValue(this.plugin.settings.excludedFolders).onChange((e=>{this.plugin.settings.excludedFolders=e,this.plugin.saveSettings()})))),new e.Setting(t).setName("Exclude Subfolders").setDesc("Turn on this option if you want to also exclude all subfolders of the folder paths provided above.").addToggle((e=>e.setValue(this.plugin.settings.excludeSubfolders).onChange((e=>{this.plugin.settings.excludeSubfolders=e,this.plugin.saveSettings()}))));const i=t.createDiv("coffee");i.addClass("oz-coffee-div");i.createEl("a",{href:"https://ko-fi.com/L3L356V6Q"}).createEl("img",{attr:{src:"https://cdn.ko-fi.com/cdn/kofi2.png?v=3"}}).height=45}}class n extends e.Modal{constructor(e,t){super(t),this.textToView=e}onOpen(){let{contentEl:e}=this,t=this;const i=e.createEl("div");i.addClass("unused-images-center-wrapper");i.createEl("h1",{text:"Clear Unused Images - Logs"}).addClass("modal-title");const s=e.createEl("div");s.addClass("unused-images-logs"),s.innerHTML=this.textToView;const n=e.createEl("div");n.addClass("unused-images-center-wrapper");const a=n.createEl("button",{text:"Close"});a.addClass("unused-images-button"),a.addEventListener("click",(()=>{t.close()}))}}const a=(e,i,s)=>t(void 0,void 0,void 0,(function*(){const t=[];void 0===s&&(s=yield i.vault.read(e));let n=s.match(/\[\[.*?\]\]/g);if(n){let s=/(?<=\[\[).*?(?=(\]|\|))/;for(let a of n){if(h(a)){let s=u(a),n=i.metadataCache.getFirstLinkpathDest(s,e.path);if(""!==s){let i={type:"wikiTransclusion",match:a,linkText:n?n.path:s,sourceFilePath:e.path};t.push(i);continue}}let n=a.match(s);if(n){if(n[0].startsWith("http"))continue;let s=i.metadataCache.getFirstLinkpathDest(n[0],e.path),o={type:"wiki",match:a,linkText:s?s.path:n[0],sourceFilePath:e.path};t.push(o)}}}let a=s.match(/\[(^$|.*?)\]\((.*?)\)/g);if(a){let s=/(?<=\().*(?=\))/;for(let n of a){if(c(n)){let s=u(n),a=i.metadataCache.getFirstLinkpathDest(s,e.path);if(""!==s){let i={type:"mdTransclusion",match:n,linkText:a?a.path:s,sourceFilePath:e.path};t.push(i);continue}}let a=n.match(s);if(a){if(a[0].startsWith("http"))continue;let s=i.metadataCache.getFirstLinkpathDest(a[0],e.path),o={type:"markdown",match:n,linkText:s?s.path:a[0],sourceFilePath:e.path};t.push(o)}}}return t})),o=/\[\[(.*?)#.*?\]\]/,l=/(?<=\[\[)(.*)(?=#)/,d=/\[.*?]\((.*?)#.*?\)/,r=/(?<=\]\()(.*)(?=#)/,h=e=>o.test(e),c=e=>d.test(e),u=e=>{let t=o.test(e),i=d.test(e);if(t||i){let i=e.match(t?l:r);if(i)return i[0]}return""},g=/.*(jpe?g|png|gif|svg|bmp)/i,p=/!\[\[(.*?)\]\]/i,f=new Set(["jpeg","jpg","png","gif","svg","bmp","webp"]),m=(e,t)=>{let i=e.vault.getFiles(),s=[];for(let e=0;et(void 0,void 0,void 0,(function*(){var t=new Set,i=e.metadataCache.resolvedLinks;if(i)for(const[e,s]of Object.entries(i))for(const[s,n]of Object.entries(i[e]))s.endsWith(".md")||t.add(s);let s=e.vault.getFiles();for(let i=0;i0)for(const i of s.nodes)if("file"===i.type)w(t,i.file);else if("text"==i.type){let s=yield a(n,e,i.text);for(let e of s)w(t,e.linkText)}}}return t})),b=e=>e.match(g),x=(e,t)=>{var i=t.settings.excludedFolders,s=t.settings.excludeSubfolders;if(""===i)return!1;var n=new Set(i.split(",").map((e=>e.trim())));if(s)for(let t of n){var a=new RegExp(t+".*");if(e.parent.path.match(a))return!0}else if(n.has(e.parent.path))return!0;return!1},y=()=>(new Date).toLocaleDateString("en-GB",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),w=(e,t)=>{e.has(t)||e.add(t)};class C extends e.Plugin{constructor(){super(...arguments),this.ribbonIconEl=void 0,this.refreshIconRibbon=()=>{var e;null===(e=this.ribbonIconEl)||void 0===e||e.remove(),this.settings.ribbonIcon&&(this.ribbonIconEl=this.addRibbonIcon("image-file","Clear Unused Images",(e=>{this.clearUnusedAttachments("image")})))},this.clearUnusedAttachments=i=>t(this,void 0,void 0,(function*(){var s,a,o,l=yield((e,i)=>t(void 0,void 0,void 0,(function*(){var t,s=m(e,i),n=[];return t=yield v(e),s.forEach((e=>{t.has(e.path)||n.push(e)})),n})))(this.app,i);if(l.length>0){let e="";e+=`[+] ${y()}: Clearing started.
`,(s=l,a=this,o=this.app,t(void 0,void 0,void 0,(function*(){var e=a.settings.deleteOption,t=0;let i="";for(let n of s)x(n,a)?console.log("File not referenced but excluded: "+n.path):(".trash"===e?(yield o.vault.trash(n,!1),i+="[+] Moved to Obsidian Trash: "+n.path+"
"):"system-trash"===e?(yield o.vault.trash(n,!0),i+="[+] Moved to System Trash: "+n.path+"
"):"permanent"===e&&(yield o.vault.delete(n),i+="[+] Deleted Permanently: "+n.path+"
"),t++);return{deletedImages:t,textToView:i}}))).then((({deletedImages:t,textToView:i})=>{if(e+=i,e+="[+] "+t.toString()+" image(s) in total deleted.
",e+=`[+] ${y()}: Clearing completed.`,this.settings.logsModal){new n(e,this.app).open()}}))}else new e.Notice(`All ${"image"===i?"images":"attachments"} are used. Nothing was deleted.`)}))}onload(){return t(this,void 0,void 0,(function*(){console.log("Clear Unused Images plugin loaded..."),this.addSettingTab(new s(this.app,this)),yield this.loadSettings(),this.addCommand({id:"clear-images-obsidian",name:"Clear Unused Images",callback:()=>this.clearUnusedAttachments("image")}),this.addCommand({id:"clear-unused-attachments",name:"Clear Unused Attachments",callback:()=>this.clearUnusedAttachments("all")}),this.refreshIconRibbon()}))}onunload(){console.log("Clear Unused Images plugin unloaded...")}loadSettings(){return t(this,void 0,void 0,(function*(){this.settings=Object.assign({},i,yield this.loadData())}))}saveSettings(){return t(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}}module.exports=C; + + +/* nosourcemap */ \ No newline at end of file diff --git a/content/.obsidian/plugins/oz-clear-unused-images/manifest.json b/content/.obsidian/plugins/oz-clear-unused-images/manifest.json new file mode 100644 index 0000000..2652ce4 --- /dev/null +++ b/content/.obsidian/plugins/oz-clear-unused-images/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "oz-clear-unused-images", + "name": "Clear Unused Images", + "version": "1.1.1", + "minAppVersion": "0.11.13", + "description": "Clear the images that you are not using anymore in your markdown notes to save space.", + "author": "Ozan", + "authorUrl": "https://www.ozan.pl", + "fundingUrl": "https://ko-fi.com/ozante", + "isDesktopOnly": false +} diff --git a/content/.obsidian/plugins/oz-clear-unused-images/styles.css b/content/.obsidian/plugins/oz-clear-unused-images/styles.css new file mode 100644 index 0000000..79bc174 --- /dev/null +++ b/content/.obsidian/plugins/oz-clear-unused-images/styles.css @@ -0,0 +1,10 @@ +.unused-images-logs { + margin-bottom: 13px; + margin-top: 5px; +} + +.unused-images-center-wrapper { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/content/.obsidian/workspace.json b/content/.obsidian/workspace.json index 952c14e..e676dd4 100644 --- a/content/.obsidian/workspace.json +++ b/content/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "notes/ready/pass.md", + "file": "notes/ready/how_to_computer/index.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "pass" + "title": "index" } } ] @@ -78,7 +78,7 @@ } ], "direction": "horizontal", - "width": 200 + "width": 331.5 }, "right": { "id": "f049c1d8215eafd9", @@ -141,13 +141,23 @@ "state": { "type": "outline", "state": { - "file": "notes/ready/pass.md", + "file": "notes/ready/how_to_computer/index.md", "followCursor": false, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "Outline of pass" + "title": "Outline of index" + } + }, + { + "id": "7f8f8508a01e0795", + "type": "leaf", + "state": { + "type": "advanced-tables-toolbar", + "state": {}, + "icon": "spreadsheet", + "title": "Advanced Tables" } } ], @@ -171,6 +181,32 @@ }, "active": "ab03f7100c1ce0fb", "lastOpenFiles": [ + "notes/ready/c-snippets.md", + "notes/ready/encryption.md", + "notes/ready/firewall.md", + "notes/ready/gdb.md", + "notes/ready/git.md", + "notes/ready/http.md", + "notes/ready/https-ssl-certs.md", + "notes/ready/irc.md", + "notes/ready/how_to_computer/d1.png", + "notes/ready/how_to_computer/index.md", + "notes/ready/how_to_computer/Pasted image 20250306105245.png", + "notes/ready/how_to_computer/Pasted image 20250311102143.png", + "Pasted image 20250311101850.png", + "Pasted image 20250311100411.png", + "notes/ready/how_to_computer/Pasted image 20250311091929.png", + "notes/ready/how_to_computer/Pasted image 20250311091659.png", + "notes/ready/how_to_computer/Pasted image 20250311091203.png", + "notes/ready/how_to_computer/Pasted image 20250311083348.png", + "notes/ready/how_to_computer/Pasted image 20250311083221.png", + "notes/ready/c-language.md", + "notes/ready/binary_operations/index.md", + "notes/ready/cpu_architecture/index.md", + "Clippings/Latches in Digital Logic - GeeksforGeeks.md", + "Clippings", + "notes/ready/how_to_computer", + "notes/ready/pass.md", "posts/notes-update.md", "_Templates/post.md", "_Templates/note.md", @@ -182,27 +218,6 @@ "notes/drafts/linux/index.md", "TODO.md", "notes/ready/flask.md", - "notes/ready/gdb.md", - "notes/ready/git.md", - "notes/ready/http.md", - "notes/ready/html.md", - "notes/ready/binary_operations/d1.png", - "notes/ready/binary_operations/index.md", - "notes/ready/binary_operations/d6.png", - "notes/ready/binary_operations/d5.png", - "notes/ready/binary_operations/d4.png", - "notes/ready/binary_operations/d3.png", - "notes/ready/binary_operations/d2.png", - "notes/ready/binary_operations/multiplication.png", - "notes/ready/firewall.md", - "drafts/nvim.md", - "drafts/rust.md", - "drafts/swift.md", - "drafts/TODO.md", - "drafts/Untitled.md", - "drafts/hardware-tools.md", - "drafts/macOS.md", - "ready/algorithms_and_data/index.md", - "ready/binary_operations/index.md" + "notes/ready/html.md" ] } \ No newline at end of file diff --git a/content/.trash/Pasted image 20250224154916.png b/content/.trash/Pasted image 20250224154916.png new file mode 100644 index 0000000..a2bd19b Binary files /dev/null and b/content/.trash/Pasted image 20250224154916.png differ diff --git a/content/.trash/Pasted image 20250224154920.png b/content/.trash/Pasted image 20250224154920.png new file mode 100644 index 0000000..a2bd19b Binary files /dev/null and b/content/.trash/Pasted image 20250224154920.png differ diff --git a/content/.trash/Pasted image 20250306121159.png b/content/.trash/Pasted image 20250306121159.png new file mode 100644 index 0000000..b2693cf Binary files /dev/null and b/content/.trash/Pasted image 20250306121159.png differ diff --git a/content/.trash/Pasted image 20250310164507.png b/content/.trash/Pasted image 20250310164507.png new file mode 100644 index 0000000..776c3ce Binary files /dev/null and b/content/.trash/Pasted image 20250310164507.png differ diff --git a/content/.trash/Pasted image 20250310165135.png b/content/.trash/Pasted image 20250310165135.png new file mode 100644 index 0000000..e1e2716 Binary files /dev/null and b/content/.trash/Pasted image 20250310165135.png differ diff --git a/content/.trash/Pasted image 20250311100411.png b/content/.trash/Pasted image 20250311100411.png new file mode 100644 index 0000000..b24abe7 Binary files /dev/null and b/content/.trash/Pasted image 20250311100411.png differ diff --git a/content/.trash/Pasted image 20250311101850.png b/content/.trash/Pasted image 20250311101850.png new file mode 100644 index 0000000..aef39b6 Binary files /dev/null and b/content/.trash/Pasted image 20250311101850.png differ diff --git a/content/notes/ready/binary_operations/hand_addition1.png b/content/.trash/hand_addition1.png similarity index 100% rename from content/notes/ready/binary_operations/hand_addition1.png rename to content/.trash/hand_addition1.png diff --git a/content/notes/ready/binary_operations/hand_addition2.png b/content/.trash/hand_addition2.png similarity index 100% rename from content/notes/ready/binary_operations/hand_addition2.png rename to content/.trash/hand_addition2.png diff --git a/content/notes/ready/transistors/image.png b/content/.trash/image.png similarity index 100% rename from content/notes/ready/transistors/image.png rename to content/.trash/image.png diff --git a/content/notes/ready/cpu_architecture/image10.png b/content/.trash/image10.png similarity index 100% rename from content/notes/ready/cpu_architecture/image10.png rename to content/.trash/image10.png diff --git a/content/notes/ready/cpu_architecture/image11.png b/content/.trash/image11.png similarity index 100% rename from content/notes/ready/cpu_architecture/image11.png rename to content/.trash/image11.png diff --git a/content/notes/ready/cpu_architecture/image12.png b/content/.trash/image12.png similarity index 100% rename from content/notes/ready/cpu_architecture/image12.png rename to content/.trash/image12.png diff --git a/content/notes/ready/cpu_architecture/image13.png b/content/.trash/image13.png similarity index 100% rename from content/notes/ready/cpu_architecture/image13.png rename to content/.trash/image13.png diff --git a/content/notes/ready/cpu_architecture/image14.png b/content/.trash/image14.png similarity index 100% rename from content/notes/ready/cpu_architecture/image14.png rename to content/.trash/image14.png diff --git a/content/notes/ready/cpu_architecture/image15.png b/content/.trash/image15.png similarity index 100% rename from content/notes/ready/cpu_architecture/image15.png rename to content/.trash/image15.png diff --git a/content/notes/ready/cpu_architecture/image16.png b/content/.trash/image16.png similarity index 100% rename from content/notes/ready/cpu_architecture/image16.png rename to content/.trash/image16.png diff --git a/content/notes/ready/cpu_architecture/image17.png b/content/.trash/image17.png similarity index 100% rename from content/notes/ready/cpu_architecture/image17.png rename to content/.trash/image17.png diff --git a/content/notes/ready/cpu_architecture/image18.png b/content/.trash/image18.png similarity index 100% rename from content/notes/ready/cpu_architecture/image18.png rename to content/.trash/image18.png diff --git a/content/notes/ready/cpu_architecture/image19.png b/content/.trash/image19.png similarity index 100% rename from content/notes/ready/cpu_architecture/image19.png rename to content/.trash/image19.png diff --git a/content/notes/ready/cpu_architecture/image20.png b/content/.trash/image20.png similarity index 100% rename from content/notes/ready/cpu_architecture/image20.png rename to content/.trash/image20.png diff --git a/content/notes/ready/cpu_architecture/image21.png b/content/.trash/image21.png similarity index 100% rename from content/notes/ready/cpu_architecture/image21.png rename to content/.trash/image21.png diff --git a/content/notes/ready/cpu_architecture/image22.png b/content/.trash/image22.png similarity index 100% rename from content/notes/ready/cpu_architecture/image22.png rename to content/.trash/image22.png diff --git a/content/notes/ready/cpu_architecture/image23.png b/content/.trash/image23.png similarity index 100% rename from content/notes/ready/cpu_architecture/image23.png rename to content/.trash/image23.png diff --git a/content/notes/ready/cpu_architecture/image24.png b/content/.trash/image24.png similarity index 100% rename from content/notes/ready/cpu_architecture/image24.png rename to content/.trash/image24.png diff --git a/content/notes/ready/cpu_architecture/image25.png b/content/.trash/image25.png similarity index 100% rename from content/notes/ready/cpu_architecture/image25.png rename to content/.trash/image25.png diff --git a/content/notes/ready/cpu_architecture/image26.png b/content/.trash/image26.png similarity index 100% rename from content/notes/ready/cpu_architecture/image26.png rename to content/.trash/image26.png diff --git a/content/notes/ready/cpu_architecture/image27.png b/content/.trash/image27.png similarity index 100% rename from content/notes/ready/cpu_architecture/image27.png rename to content/.trash/image27.png diff --git a/content/notes/ready/cpu_architecture/image28.png b/content/.trash/image28.png similarity index 100% rename from content/notes/ready/cpu_architecture/image28.png rename to content/.trash/image28.png diff --git a/content/notes/ready/cpu_architecture/image29.png b/content/.trash/image29.png similarity index 100% rename from content/notes/ready/cpu_architecture/image29.png rename to content/.trash/image29.png diff --git a/content/notes/ready/cpu_architecture/image30.png b/content/.trash/image30.png similarity index 100% rename from content/notes/ready/cpu_architecture/image30.png rename to content/.trash/image30.png diff --git a/content/notes/ready/cpu_architecture/image31.png b/content/.trash/image31.png similarity index 100% rename from content/notes/ready/cpu_architecture/image31.png rename to content/.trash/image31.png diff --git a/content/notes/ready/cpu_architecture/image32.png b/content/.trash/image32.png similarity index 100% rename from content/notes/ready/cpu_architecture/image32.png rename to content/.trash/image32.png diff --git a/content/notes/ready/cpu_architecture/image33.png b/content/.trash/image33.png similarity index 100% rename from content/notes/ready/cpu_architecture/image33.png rename to content/.trash/image33.png diff --git a/content/notes/ready/cpu_architecture/image34.png b/content/.trash/image34.png similarity index 100% rename from content/notes/ready/cpu_architecture/image34.png rename to content/.trash/image34.png diff --git a/content/notes/ready/cpu_architecture/image35.png b/content/.trash/image35.png similarity index 100% rename from content/notes/ready/cpu_architecture/image35.png rename to content/.trash/image35.png diff --git a/content/notes/ready/cpu_architecture/image36.png b/content/.trash/image36.png similarity index 100% rename from content/notes/ready/cpu_architecture/image36.png rename to content/.trash/image36.png diff --git a/content/notes/ready/cpu_architecture/image37.png b/content/.trash/image37.png similarity index 100% rename from content/notes/ready/cpu_architecture/image37.png rename to content/.trash/image37.png diff --git a/content/notes/ready/cpu_architecture/image38.png b/content/.trash/image38.png similarity index 100% rename from content/notes/ready/cpu_architecture/image38.png rename to content/.trash/image38.png diff --git a/content/notes/ready/cpu_architecture/image39.png b/content/.trash/image39.png similarity index 100% rename from content/notes/ready/cpu_architecture/image39.png rename to content/.trash/image39.png diff --git a/content/notes/ready/binary_operations/image70.png b/content/.trash/image70.png similarity index 100% rename from content/notes/ready/binary_operations/image70.png rename to content/.trash/image70.png diff --git a/content/notes/ready/binary_operations/image71.png b/content/.trash/image71.png similarity index 100% rename from content/notes/ready/binary_operations/image71.png rename to content/.trash/image71.png diff --git a/content/notes/ready/binary_operations/image72.png b/content/.trash/image72.png similarity index 100% rename from content/notes/ready/binary_operations/image72.png rename to content/.trash/image72.png diff --git a/content/notes/ready/binary_operations/image73.png b/content/.trash/image73.png similarity index 100% rename from content/notes/ready/binary_operations/image73.png rename to content/.trash/image73.png diff --git a/content/notes/ready/binary_operations/image74.png b/content/.trash/image74.png similarity index 100% rename from content/notes/ready/binary_operations/image74.png rename to content/.trash/image74.png diff --git a/content/notes/ready/memory/image76.png b/content/.trash/image76.png similarity index 100% rename from content/notes/ready/memory/image76.png rename to content/.trash/image76.png diff --git a/content/notes/ready/memory/image77.png b/content/.trash/image77.png similarity index 100% rename from content/notes/ready/memory/image77.png rename to content/.trash/image77.png diff --git a/content/notes/ready/memory/image78.png b/content/.trash/image78.png similarity index 100% rename from content/notes/ready/memory/image78.png rename to content/.trash/image78.png diff --git a/content/notes/ready/memory/image79.png b/content/.trash/image79.png similarity index 100% rename from content/notes/ready/memory/image79.png rename to content/.trash/image79.png diff --git a/content/notes/ready/cpu_architecture/image8.png b/content/.trash/image8.png similarity index 100% rename from content/notes/ready/cpu_architecture/image8.png rename to content/.trash/image8.png diff --git a/content/notes/ready/memory/image80.png b/content/.trash/image80.png similarity index 100% rename from content/notes/ready/memory/image80.png rename to content/.trash/image80.png diff --git a/content/notes/ready/memory/image81.png b/content/.trash/image81.png similarity index 100% rename from content/notes/ready/memory/image81.png rename to content/.trash/image81.png diff --git a/content/notes/ready/memory/image82.png b/content/.trash/image82.png similarity index 100% rename from content/notes/ready/memory/image82.png rename to content/.trash/image82.png diff --git a/content/notes/ready/memory/image83.png b/content/.trash/image83.png similarity index 100% rename from content/notes/ready/memory/image83.png rename to content/.trash/image83.png diff --git a/content/notes/ready/cpu_architecture/image9.png b/content/.trash/image9.png similarity index 100% rename from content/notes/ready/cpu_architecture/image9.png rename to content/.trash/image9.png diff --git a/content/notes/ready/memory/image91.png b/content/.trash/image91.png similarity index 100% rename from content/notes/ready/memory/image91.png rename to content/.trash/image91.png diff --git a/content/notes/ready/binary_operations/sb1.png b/content/.trash/sb1.png similarity index 100% rename from content/notes/ready/binary_operations/sb1.png rename to content/.trash/sb1.png diff --git a/content/notes/ready/binary_operations/sb10.png b/content/.trash/sb10.png similarity index 100% rename from content/notes/ready/binary_operations/sb10.png rename to content/.trash/sb10.png diff --git a/content/notes/ready/binary_operations/sb2.png b/content/.trash/sb2.png similarity index 100% rename from content/notes/ready/binary_operations/sb2.png rename to content/.trash/sb2.png diff --git a/content/notes/ready/binary_operations/sb3.png b/content/.trash/sb3.png similarity index 100% rename from content/notes/ready/binary_operations/sb3.png rename to content/.trash/sb3.png diff --git a/content/notes/ready/binary_operations/sb4.png b/content/.trash/sb4.png similarity index 100% rename from content/notes/ready/binary_operations/sb4.png rename to content/.trash/sb4.png diff --git a/content/notes/ready/binary_operations/sb5.png b/content/.trash/sb5.png similarity index 100% rename from content/notes/ready/binary_operations/sb5.png rename to content/.trash/sb5.png diff --git a/content/notes/ready/binary_operations/sb6.png b/content/.trash/sb6.png similarity index 100% rename from content/notes/ready/binary_operations/sb6.png rename to content/.trash/sb6.png diff --git a/content/notes/ready/binary_operations/sb7.png b/content/.trash/sb7.png similarity index 100% rename from content/notes/ready/binary_operations/sb7.png rename to content/.trash/sb7.png diff --git a/content/notes/ready/binary_operations/sb8.png b/content/.trash/sb8.png similarity index 100% rename from content/notes/ready/binary_operations/sb8.png rename to content/.trash/sb8.png diff --git a/content/notes/ready/binary_operations/sb9.png b/content/.trash/sb9.png similarity index 100% rename from content/notes/ready/binary_operations/sb9.png rename to content/.trash/sb9.png diff --git a/content/TODO.md b/content/TODO.md index 13f152a..8901b8f 100644 --- a/content/TODO.md +++ b/content/TODO.md @@ -19,5 +19,6 @@ In draft folder? (checkbox) - [x] Neovim, vim bindings, text editor - [x] Hardware Debug/Repair Tools (maybe integrate JCionx page?) - [ ] Android and custom ROMs +- [ ] netcat ### Enhancements diff --git a/content/notes/drafts/nvim.md b/content/notes/drafts/nvim.md index 8a966dc..bbf649a 100644 --- a/content/notes/drafts/nvim.md +++ b/content/notes/drafts/nvim.md @@ -1,14 +1,18 @@ --- -title: "nvim" +title: nvim description: draft: true -tags: +tags: + - tools + - nvim + - vim author: TrudeEH showToc: true --- ## VIM Bindings + ## Using Neovim ## Configuring Neovim diff --git a/content/notes/ready/binary_operations/image68.png b/content/notes/ready/binary_operations/image68.png deleted file mode 100644 index 48c541a..0000000 Binary files a/content/notes/ready/binary_operations/image68.png and /dev/null differ diff --git a/content/notes/ready/binary_operations/index.md b/content/notes/ready/binary_operations/index.md deleted file mode 100644 index 368d881..0000000 --- a/content/notes/ready/binary_operations/index.md +++ /dev/null @@ -1,345 +0,0 @@ ---- -title: Binary Operations -description: -draft: false -tags: - - computer-science -author: TrudeEH -showToc: true ---- - -## Binary - -Binary is a base-2 numeral system: A simple way to represent numbers using only two states. - -|Binary|Decimal|Hexadecimal| -|---|---|---| -|0000|00|00| -|0001|01|01| -|0010|02|02| -|0011|03|03| -|0100|04|04| -|0101|05|05| -|0110|06|06| -|0111|07|07| -|1000|08|08| -|1001|09|09| -|1010|10|0A| -|1011|11|0B| -|1100|12|0C| -|1101|13|0D| -|1110|14|0E| -|1111|15|0F| - -![Binary Calculations](binarycalc.png) - -### Speaking Binary - -> The information in this section is non-standard, and mostly a curiosity. - -You may struggle to pronounce large binary numbers, as saying a long list of 0s and 1s is very inefficient. Instead, we can do something like this: - -![speaking binary](sb1.png) - -To be able to say any binary number, list the number, starting by the last digit: - -![speaking binary](sb2.png) - -And pronounce the ones that correspond to a `1` bit. - -![speaking binary](sb3.png) - -#### Pronounce a Binary Number at a Glance - -1. Break the number at its largest pair of bits. - - ![speaking binary](sb4.png) - -2. Represent the left and right sides. - - ![speaking binary](sb5.png) - - In this example, there is a `two` in the order of magnitude `hex`. - -3. Continue to represent the left and right sides recursively. - - ![speaking binary](sb6.png) - - The last number is `four`. - -#### Decode a Spoken Binary Number - -Starting with `two hex four`: - -1. Find the largest power of two. - - ![speaking binary](sb7.png) - -2. The number is equal to the left side, times the order of magnitude, plus the right side. - - ![speaking binary](sb8.png) - -#### Avoiding Repetition - -Repetition can be avoided by combining some very common, small numbers: - -![speaking binary](sb9.png) - -![speaking binary](sb10.png) - -These shortcuts essentially create a quaternary system to pronounce binary, but in this case, the result improves spoken efficiency by a lot. - -## Arithmetic Operations - -### Addition - -Adding two numbers can be done using a simple, manual algorithm: By adding the last bit of both numbers first, carry if necessary, then move on to the next number, and so on. - -| **+** | 0 | 1 | -| ------- | --- | ---- | -| 0 | 0 | 1 | -| 1 | 1 | 10 | - -![addition](addition.png) - -> To add numbers more efficiently by hand, you can group bits together and memorize the patters, effectively doubling your speed. -> -> ![hand addition](hand_addition1.png) -> -> To improve calculation speed even further, you can group more bits, and learn those patterns as well. -> -> ![hand addition](hand_addition2.png) - -#### Half Adder - -Add 2, single-digit binary numbers. - -| **A** | **B** | **Carry** | **Sum** | -| ----- | ----- | --------- | ------- | -| 0 | 0 | 0 | 0 | -| 0 | 1 | 0 | 1 | -| 1 | 0 | 0 | 1 | -| 1 | 1 | 1 | 0 | - -![image68](image68.png) - -#### Full Adder - -When adding 2 binary numbers, one operation might return a carry value, which the `half adder` can't accept, as it only has 2 inputs. - -![image69](image69.png) - -To solve this issue, a `full adder` accepts 3 inputs. - -![image70](image70.png) - -#### 8-Bit Adder - -![image71](image71.png) - -### Subtraction - -Subtraction can result in negative numbers. Like how additions need a carry, subtraction needs a borrow. - -#### Half Subtractor - -Subtract 2, single-digit binary numbers. - -| **A** | **B** | Diff | **Borrow** | -| ----- | ----- | ---- | ---------- | -| 0 | 0 | 0 | 0 | -| 0 | 1 | 1 | 1 | -| 1 | 0 | 1 | 0 | -| 1 | 1 | 0 | 0 | - -![image72](image72.png) - -#### Full Subtractor - -A `full subtractor` accepts the borrow value, allowing us to chain results. - -| **A** | **B** | **B**in | **Diff** | **B**out | -| ----- | ----- | ------- | -------- | -------- | -| 0 | 0 | 0 | 0 | 0 | -| 0 | 0 | 1 | 1 | 1 | -| 0 | 1 | 0 | 1 | 1 | -| 0 | 1 | 1 | 0 | 1 | -| 1 | 0 | 0 | 1 | 0 | -| 1 | 0 | 1 | 0 | 0 | -| 1 | 1 | 0 | 0 | 0 | -| 1 | 1 | 1 | 1 | 1 | - -![image73](image73.png) - -#### 8-Bit Subtractor - -![image74](image74.png) - -### Multiplication - -Multiplication is also similar to its decimal counterpart, but because binary is so small compared to decimal, the steps are also much simpler. - -First, multiply the top number to every digit of the bottom one, and then add the results together. - -| X | 0 | 1 | -| --- | --- | --- | -| 0 | 0 | 0 | -| 1 | 0 | 1 | - -![multiplication](multiplication.png) - -#### 2-Bit By 2-Bit Multiplier - -![image75](image75.png) - -### Division - -1. Find the smallest part of the dividend greater than or equal to the **divisor**.![d1](d1.png) - - -2. Write the first digit of **the answer**, and **copy the original divisor down**.![d2](d2.png) - - -3. Subtract the **aligned dividend digits** by **the digits under the dividend**.![d3](d3.png) - -4. Lower **the next dividend digit**.![d4](d4.png) - -5. Is **the total** greater or equal to the **divisor**? If so, add a `1` to the answer. If not, **add a `0` to the answer and return to step 4**.![d5](d5.png) - - -6. Return to step 2, until you reach the end of the number. If you reached the end, you found **the answer**.![d6](d6.png) - -### ASCII - -Binary can also be used to represent characters. - -| Dec | Hex | Binary | HTML | Char | Description | -| --- | --- | -------- | -------- | ----------- | ------------------------- | -| 0 | 00 | 00000000 | `�` | NUL | Null | -| 1 | 01 | 00000001 | `` | SOH | Start of Heading | -| 2 | 02 | 00000010 | `` | STX | Start of Text | -| 3 | 03 | 00000011 | `` | ETX | End of Text | -| 4 | 04 | 00000100 | `` | EOT | End of Transmission | -| 5 | 05 | 00000101 | `` | ENQ | Enquiry | -| 6 | 06 | 00000110 | `` | ACK | Acknowledge | -| 7 | 07 | 00000111 | `` | BEL | Bell | -| 8 | 08 | 00001000 | `` | BS | Backspace | -| 9 | 09 | 00001001 | ` ` | HT | Horizontal Tab | -| 10 | 0A | 00001010 | ` ` | LF | Line Feed | -| 11 | 0B | 00001011 | ` ` | VT | Vertical Tab | -| 12 | 0C | 00001100 | ` ` | FF | Form Feed | -| 13 | 0D | 00001101 | ` ` | CR | Carriage Return | -| 14 | 0E | 00001110 | `` | SO | Shift Out | -| 15 | 0F | 00001111 | `` | SI | Shift In | -| 16 | 10 | 00010000 | `` | DLE | Data Link Escape | -| 17 | 11 | 00010001 | `` | DC1 | Device Control 1 | -| 18 | 12 | 00010010 | `` | DC2 | Device Control 2 | -| 19 | 13 | 00010011 | `` | DC3 | Device Control 3 | -| 20 | 14 | 00010100 | `` | DC4 | Device Control 4 | -| 21 | 15 | 00010101 | `` | NAK | Negative Acknowledge | -| 22 | 16 | 00010110 | `` | SYN | Synchronize | -| 23 | 17 | 00010111 | `` | ETB | End of Transmission Block | -| 24 | 18 | 00011000 | `` | CAN | Cancel | -| 25 | 19 | 00011001 | `` | EM | End of Medium | -| 26 | 1A | 00011010 | `` | SUB | Substitute | -| 27 | 1B | 00011011 | `` | ESC | Escape | -| 28 | 1C | 00011100 | `` | FS | File Separator | -| 29 | 1D | 00011101 | `` | GS | Group Separator | -| 30 | 1E | 00011110 | `` | RS | Record Separator | -| 31 | 1F | 00011111 | `` | US | Unit Separator | -| 32 | 20 | 00100000 | ` ` | space | Space | -| 33 | 21 | 00100001 | `!` | ! | exclamation mark | -| 34 | 22 | 00100010 | `"` | " | double quote | -| 35 | 23 | 00100011 | `#` | # | number | -| 36 | 24 | 00100100 | `$` | $ | dollar | -| 37 | 25 | 00100101 | `%` | % | percent | -| 38 | 26 | 00100110 | `&` | & | ampersand | -| 39 | 27 | 00100111 | `'` | ' | single quote | -| 40 | 28 | 00101000 | `(` | ( | left parenthesis | -| 41 | 29 | 00101001 | `)` | ) | right parenthesis | -| 42 | 2A | 00101010 | `*` | * | asterisk | -| 43 | 2B | 00101011 | `+` | + | plus | -| 44 | 2C | 00101100 | `,` | , | comma | -| 45 | 2D | 00101101 | `-` | - | minus | -| 46 | 2E | 00101110 | `.` | . | period | -| 47 | 2F | 00101111 | `/` | / | slash | -| 48 | 30 | 00110000 | `0` | 0 | zero | -| 49 | 31 | 00110001 | `1` | 1 | one | -| 50 | 32 | 00110010 | `2` | 2 | two | -| 51 | 33 | 00110011 | `3` | 3 | three | -| 52 | 34 | 00110100 | `4` | 4 | four | -| 53 | 35 | 00110101 | `5` | 5 | five | -| 54 | 36 | 00110110 | `6` | 6 | six | -| 55 | 37 | 00110111 | `7` | 7 | seven | -| 56 | 38 | 00111000 | `8` | 8 | eight | -| 57 | 39 | 00111001 | `9` | 9 | nine | -| 58 | 3A | 00111010 | `:` | : | colon | -| 59 | 3B | 00111011 | `;` | ; | semicolon | -| 60 | 3C | 00111100 | `<` | < | less than | -| 61 | 3D | 00111101 | `=` | = | equality sign | -| 62 | 3E | 00111110 | `>` | > | greater than | -| 63 | 3F | 00111111 | `?` | ? | question mark | -| 64 | 40 | 01000000 | `@` | @ | at sign | -| 65 | 41 | 01000001 | `A` | A | | -| 66 | 42 | 01000010 | `B` | B | | -| 67 | 43 | 01000011 | `C` | C | | -| 68 | 44 | 01000100 | `D` | D | | -| 69 | 45 | 01000101 | `E` | E | | -| 70 | 46 | 01000110 | `F` | F | | -| 71 | 47 | 01000111 | `G` | G | | -| 72 | 48 | 01001000 | `H` | H | | -| 73 | 49 | 01001001 | `I` | I | | -| 74 | 4A | 01001010 | `J` | J | | -| 75 | 4B | 01001011 | `K` | K | | -| 76 | 4C | 01001100 | `L` | L | | -| 77 | 4D | 01001101 | `M` | M | | -| 78 | 4E | 01001110 | `N` | N | | -| 79 | 4F | 01001111 | `O` | O | | -| 80 | 50 | 01010000 | `P` | P | | -| 81 | 51 | 01010001 | `Q` | Q | | -| 82 | 52 | 01010010 | `R` | R | | -| 83 | 53 | 01010011 | `S` | S | | -| 84 | 54 | 01010100 | `T` | T | | -| 85 | 55 | 01010101 | `U` | U | | -| 86 | 56 | 01010110 | `V` | V | | -| 87 | 57 | 01010111 | `W` | W | | -| 88 | 58 | 01011000 | `X` | X | | -| 89 | 59 | 01011001 | `Y` | Y | | -| 90 | 5A | 01011010 | `Z` | Z | | -| 91 | 5B | 01011011 | `[` | [ | left square bracket | -| 92 | 5C | 01011100 | `\` | \|backslash | | -| 93 | 5D | 01011101 | `]` | ] | right square bracket | -| 94 | 5E | 01011110 | `^` | ^ | caret / circumflex | -| 95 | 5F | 01011111 | `_` | _ | underscore | -| 96 | 60 | 01100000 | ``` | ` | grave / accent | -| 97 | 61 | 01100001 | `a` | a | | -| 98 | 62 | 01100010 | `b` | b | | -| 99 | 63 | 01100011 | `c` | c | | -| 100 | 64 | 01100100 | `d` | d | | -| 101 | 65 | 01100101 | `e` | e | | -| 102 | 66 | 01100110 | `f` | f | | -| 103 | 67 | 01100111 | `g` | g | | -| 104 | 68 | 01101000 | `h` | h | | -| 105 | 69 | 01101001 | `i` | i | | -| 106 | 6A | 01101010 | `j` | j | | -| 107 | 6B | 01101011 | `k` | k | | -| 108 | 6C | 01101100 | `l` | l | | -| 109 | 6D | 01101101 | `m` | m | | -| 110 | 6E | 01101110 | `n` | n | | -| 111 | 6F | 01101111 | `o` | o | | -| 112 | 70 | 01110000 | `p` | p | | -| 113 | 71 | 01110001 | `q` | q | | -| 114 | 72 | 01110010 | `r` | r | | -| 115 | 73 | 01110011 | `s` | s | | -| 116 | 74 | 01110100 | `t` | t | | -| 117 | 75 | 01110101 | `u` | u | | -| 118 | 76 | 01110110 | `v` | v | | -| 119 | 77 | 01110111 | `w` | w | | -| 120 | 78 | 01111000 | `x` | x | | -| 121 | 79 | 01111001 | `y` | y | | -| 122 | 7A | 01111010 | `z` | z | | -| 123 | 7B | 01111011 | `{` | { | left curly bracket | -| 124 | 7C | 01111100 | `|` | \| | vertical bar | -| 125 | 7D | 01111101 | `}` | } | right curly bracket | -| 126 | 7E | 01111110 | `~` | ~ | tilde | -| 127 | 7F | 01111111 | `` | DEL | delete | diff --git a/content/notes/ready/cpu_architecture/index.md b/content/notes/ready/cpu_architecture/index.md deleted file mode 100644 index 144883b..0000000 --- a/content/notes/ready/cpu_architecture/index.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: CPU Architecture -description: -draft: false -tags: - - computer-science -author: TrudeEH -showToc: true ---- - -## Components - -### Registers - -We can combine registers to reduce the amount of wires needed. -![image8](image8.png) -Using a data bus (wiring at the top) and a binary decoder, we can select which register to read/write to. - -### Memory - -![image9](image9.png) - -## Assembly - -Assembly is a human-friendly representation of code: binary values that a computer can understand. -![image10](image10.png) -An assembler converts ASM instructions into machine code, which is given to the CPU as input. - -### Arithmetic Operations - -For example, a simple computer architecture could use `00` to represent arithmetic operations. -![image11](image11.png) -To decide which type of operation to execute (subtraction, multiplication, addition, etc), the 3rd and 4th bits could be used. -![image12](image12.png) -Using a [index](ready/binary_operations/index.md), we can build an inefficient, but simple circuit to do this. -![image13](image13.png) -This type of circuit is an Arithmetic Logic Unit (ALU). - -### Memory Operations - -Of course, assembly can also provide instructions to store or load values. -![image14](image14.png) - -#### Load - -```Assembly -LOAD R2 1000 ;Load into register 2 the value in the memory address 1000 -``` - -![image15](image15.png) - -#### Store - -```Assembly -STORE R1 0110 ;Store the value in register 1 into the 0110 memory address -``` - -![image16](image16.png) - -#### Select Which Instruction to Execute (first 2 bits) - -To decide which operation to execute, a binary decoder can be used. -![image17](image17.png) -For memory operations, the 3rd and 4th bits are used to select which register to use. -![image18](image18.png) -The last 4 bits represent the memory address to read/write to. -![image19](image19.png) - -### Instruction Register - -For the instruction to be given, it is stored in a special register: An Instruction Register. -![image20](image20.png) - -### Optimization - -We can use a single Binary Decoder instead of two, to achieve the same result. (Optimization on the right pane) -![image21](image21.png) -Different architectures can have the exact same functionality, while being implemented differently, or even having different instructions. This is why code that is compiled for Intel x64 is not compatible with ARM or RISC-V. - -## Control Unit - -We can finally add the ALU (Arithmetic Logic Unit) we built before into the new circuit, like so: -![image22](image22.png) -The gray trapezoids are multiplexers: -![image23](image23.png) -The output value is then stored in a temporary register, before replacing the first operand register's value. -The component we just built to control the `ALU` is part of a `Control Unit`. The full `control unit` is very complex, as it needs to handle every possible instruction. (So far, we have seen how to implement the `ALU` and `RAM`.) -![image24](image24.png) -Each register in the `CU` has a specific purpose, unlike `RAM`, which can be used to store any values. -![image25](image25.png) -To read the first instruction, the `CU` will **fetch** data from the first address in memory. -![image26](image26.png) -After **fetching**, the `CU` will **decode** the instruction: interpret the bit sequence in the `instruction register`, to send the necessary signals to the components that will **execute** the instruction. We can finally load instructions into the instruction register. -![image27](image27.png) -Then, the `CU` increments 1 byte, to point the `address register` to the next instruction. (Modern architectures increment different values, as the instruction set is more complex) -If the instruction is an arithmetic operation, the steps are similar. The ALU stores the output in a temporary register, which overwrites the register 0 with the result. The result can then be stored in `RAM`. -![image28](image28.png) - -## Load a Program Into Memory - -So far, we can store instructions in memory, but it is also necessary to store values, besides from the instructions themselves. -For example: -![image29](image29.png) -This program uses 2 numeric values. The first 2 instructions load these values into the registers, and then, these values are added together and stored in another memory address. The final instruction, `HALT`, marks the end of the program, to make sure the `CU` does not attempt to read the number 20 as an instruction. -If the program is extended, all memory addresses must be altered. To fix this issue, we can instead store values at the end of the memory stack. -![image30](image30.png) - -## Conditions and Loops - -To create a loop, we can simply jump to a smaller address in memory. -![image31](image31.png) -Internally, the `JMP` command overwrites the Address Register, making it so that the next CPU **cycle** *fetches* the chosen memory address, instead of the next one. -![image32](image32.png) - -### Flags - -Sometimes, we might want to loop only if a certain condition is met. -For context, imagine subtracting a number from itself. In this case, the ALU will provide some extra information, using 1 bit registers called `flags`. -![image33](image33.png) - -| N | Flag | Description | -| --- | ------------ | --------------------------------------------------------- | -| 0 | **O**verflow | When a number is too large to fit in the output register. | -| 1 | **Z**ero | When the result is zero. | -| 0 | **N**egative | When a number is negative. | - -This additional information can be used to make decisions, and make **conditional jumps** possible. - -| ASM | Command | Description | -| -------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `JMP_OFW XXXX` | Jump Overflow | Overwrites the `Address Register` with the value `XXXX` if the `O_FLAG` is **ON**. If the flag is **OFF**, the `Address Register`'s value is incremented by **1**. | -| `JMP_ZRO XXXX` | Jump Zero | Overwrites the `Address Register` with the value `XXXX` if the `Z_FLAG` is **ON**. If the flag is **OFF**, the `Address Register`'s value is incremented by **1**. | -| `JMP_NEG XXXX` | Jump Negative | Overwrites the `Address Register` with the value `XXXX` if the `N_FLAG` is **ON**. If the flag is **OFF**, the `Address Register`'s value is incremented by **1**. | -| `JMP_ABV XXXX` | Jump Above | Overwrites the `Address Register` with the value `XXXX` if **neither** the `Z_FLAG` nor `N_FLAG` are **ON**. If either is **ON,** the `Address Register`'s value is incremented by **1**. | - -Comparing two numbers is the same as subtracting them. - -$$a - 5 = b$$ - -| **b** is negative | **b** is zero | **b** is positive | -| ----------------- | ------------- | ----------------- | -| then | then | then | -| a < 5 | a == 5 | a > 5 | - -For example: -![image34](image34.png) -An `IF` statement works in the exact same way, but without the need to loop: -![image35](image35.png) -Note: These instructions are not from any real architecture. These are examples for this simple, custom architecture. - -## Clock - -The final piece of the puzzle is the clock. A clock can give us time before a circuit loops. -![image36](image36.png) -This is necessary, because energy travels extremely quickly, and so, all memory would be reset before we could even use the stored values. Each clock tick corresponds to an action the `CU` performs (fetch, decode and execute). -A `Data FLIP-FLOP`, for example, uses the clock to store data, acting as the manual `RESET` input. -![image37](image37.png) -This circuit can be used to build a single bit register. -![image38](image38.png) -To generate a clock pulse, we can use a circuit similar to this one: -![image39](image39.png) diff --git a/content/notes/ready/diodes.md b/content/notes/ready/diodes.md deleted file mode 100644 index 7354795..0000000 --- a/content/notes/ready/diodes.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Diodes -description: -draft: false -tags: - - electronics -author: TrudeEH -showToc: true ---- - - - -A diode allows current to only flow in one direction in a circuit. - -## Schematic - -```Plain -Anode (+) --|>|-- Cathode (-) -``` - -## Examples - -```Plain -[Conventional Current (+) -> (-)] -(+)------|>|------(-) Current can flow - The diode is now a conductor. -(+)------|<|------(-) Current can't flow - The diode is now an insulator. -``` - -## Use Cases - -- Protect a circuit (if a battery is connected incorrectly, for example) -- Convert AC to DC current -Fun fact: An LED, for example, is a Light-Emitting Diode. - -## How a Diode Works - -### Conductors and Insulators - -An atom contains the following elements: -- Nucleus (Protons - Neutrons) -- Orbital Shells (Holds the electrons, which orbit around the nucleus) -- Conduction band -The electrons closest to the nucleus hold the most energy. -The outermost shell is the valence shell. A conductor has 1-3 electrons in the valence shell. -If an electron reaches the conduction band, it can break free and move to another atom. -An insulator, however, has a conduction band that is far from the valence shell, making it difficult for an electron to escape. -For example, for copper (a great conductor), the valence shell and conduction band overlap, so it's very easy for an electron to jump between atoms. -Semiconductors have a conduction band close to the valence shell, but have one extra electron in it, making it an insulator. However, given some external energy, some electrons will gain enough energy to reach the conduction band and become free. - -### P-Type and N-Type Doping - -Silicon is a good semiconductor, having 4 electrons in its valence shell. When close to other `Si` atoms, they share 4 electrons with their neighbors, thus, having 8, each, and becoming stable. - -```Plain -Silicon: -Si Si Si Si Si Si Si Si Si Si Si -Si Si Si Si Si Si Si Si Si Si Si -Si Si Si Si Si Si Si Si Si Si Si -Si Si Si Si Si Si Si Si Si Si Si -Si Si Si Si Si Si Si Si Si Si Si -Si Si Si Si Si Si Si Si Si Si Si -``` - -#### N-Type - -Some Phosphorus is added to the Silicon. ==`p`== has one extra electron in its valence shell. -These electrons are not needed, and so, they flow freely from atom to atom. - -```Plain -Si Si p Si Si Si Si Si Si Si p -p Si Si Si Si p Si Si Si Si Si -Si Si Si p Si Si Si Si p Si Si -Si p Si Si p Si Si Si Si Si Si -Si Si Si Si Si Si p Si Si p Si -Si p Si Si Si Si Si Si p Si Si -``` - -#### P-Type - -Some Aluminum is added to the Silicon. `Al` is missing one electron, so it can't provide its 4 neighbors with an electron to share. - -```Plain -Si Si Al Si Si Si Si Si Si Si Al -Al Si Si Si Si Al Si Si Si Si Si -Si Si Si Al Si Si Si Si Al Si Si -Si Al Si Si Al Si Si Si Si Si Si -Si Si Si Si Si Si Al Si Si Al Si -Si Al Si Si Si Si Si Si Al Si Si -``` - -### Combining both Types - -When an N-Type is combined with a P-Type, some electrons from the N-Type side will move over to the P-Type side and occupy the missing electrons there. This creates a barrier between both types, creating an electric field that prevents more electrons from switching sides. - -#### Forward Bias - -If energy is provided to the Cathode, the electrons flow, as the voltage is superior to the barrier's. - -```Plain -(-)-----[P|N]-----(+) -``` - -#### Reverse Bias - -If energy is provided to the Anode, the electrons can't flow, as the barrier expands. - -```Plain -(-)--[P] [N]--(+) -``` diff --git a/content/notes/ready/how_to_computer/3bit_decoder.png b/content/notes/ready/how_to_computer/3bit_decoder.png new file mode 100644 index 0000000..f136a36 Binary files /dev/null and b/content/notes/ready/how_to_computer/3bit_decoder.png differ diff --git a/content/notes/ready/how_to_computer/8bit_register.png b/content/notes/ready/how_to_computer/8bit_register.png new file mode 100644 index 0000000..5765433 Binary files /dev/null and b/content/notes/ready/how_to_computer/8bit_register.png differ diff --git a/content/notes/ready/logic_gates/image51.png b/content/notes/ready/how_to_computer/AND_electronics.png similarity index 100% rename from content/notes/ready/logic_gates/image51.png rename to content/notes/ready/how_to_computer/AND_electronics.png diff --git a/content/notes/ready/logic_gates/image52.png b/content/notes/ready/how_to_computer/AND_electronics_transistors.png similarity index 100% rename from content/notes/ready/logic_gates/image52.png rename to content/notes/ready/how_to_computer/AND_electronics_transistors.png diff --git a/content/notes/ready/how_to_computer/AND_gates.png b/content/notes/ready/how_to_computer/AND_gates.png new file mode 100644 index 0000000..b438c86 Binary files /dev/null and b/content/notes/ready/how_to_computer/AND_gates.png differ diff --git a/content/notes/ready/how_to_computer/AND_gates_big.png b/content/notes/ready/how_to_computer/AND_gates_big.png new file mode 100644 index 0000000..f1a3953 Binary files /dev/null and b/content/notes/ready/how_to_computer/AND_gates_big.png differ diff --git a/content/notes/ready/how_to_computer/NAND_circuit.png b/content/notes/ready/how_to_computer/NAND_circuit.png new file mode 100644 index 0000000..2c24d71 Binary files /dev/null and b/content/notes/ready/how_to_computer/NAND_circuit.png differ diff --git a/content/notes/ready/how_to_computer/NOR_gates.png b/content/notes/ready/how_to_computer/NOR_gates.png new file mode 100644 index 0000000..658563b Binary files /dev/null and b/content/notes/ready/how_to_computer/NOR_gates.png differ diff --git a/content/notes/ready/logic_gates/image50.png b/content/notes/ready/how_to_computer/NOT_electronics.png similarity index 100% rename from content/notes/ready/logic_gates/image50.png rename to content/notes/ready/how_to_computer/NOT_electronics.png diff --git a/content/notes/ready/how_to_computer/NOT_gates.png b/content/notes/ready/how_to_computer/NOT_gates.png new file mode 100644 index 0000000..561204a Binary files /dev/null and b/content/notes/ready/how_to_computer/NOT_gates.png differ diff --git a/content/notes/ready/logic_gates/image53.png b/content/notes/ready/how_to_computer/OR_electronics.png similarity index 100% rename from content/notes/ready/logic_gates/image53.png rename to content/notes/ready/how_to_computer/OR_electronics.png diff --git a/content/notes/ready/how_to_computer/OR_gates.png b/content/notes/ready/how_to_computer/OR_gates.png new file mode 100644 index 0000000..3f87340 Binary files /dev/null and b/content/notes/ready/how_to_computer/OR_gates.png differ diff --git a/content/notes/ready/how_to_computer/OR_gates_big.png b/content/notes/ready/how_to_computer/OR_gates_big.png new file mode 100644 index 0000000..5a508c6 Binary files /dev/null and b/content/notes/ready/how_to_computer/OR_gates_big.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250306105245.png b/content/notes/ready/how_to_computer/Pasted image 20250306105245.png new file mode 100644 index 0000000..c262627 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250306105245.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250306113013.png b/content/notes/ready/how_to_computer/Pasted image 20250306113013.png new file mode 100644 index 0000000..253269e Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250306113013.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250306113821.png b/content/notes/ready/how_to_computer/Pasted image 20250306113821.png new file mode 100644 index 0000000..54bdae5 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250306113821.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250306120537.png b/content/notes/ready/how_to_computer/Pasted image 20250306120537.png new file mode 100644 index 0000000..e214034 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250306120537.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307115740.png b/content/notes/ready/how_to_computer/Pasted image 20250307115740.png new file mode 100644 index 0000000..4dac85a Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307115740.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307131641.png b/content/notes/ready/how_to_computer/Pasted image 20250307131641.png new file mode 100644 index 0000000..737facb Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307131641.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307131757.png b/content/notes/ready/how_to_computer/Pasted image 20250307131757.png new file mode 100644 index 0000000..61500c2 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307131757.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307134315.png b/content/notes/ready/how_to_computer/Pasted image 20250307134315.png new file mode 100644 index 0000000..61e54a8 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307134315.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307135207.png b/content/notes/ready/how_to_computer/Pasted image 20250307135207.png new file mode 100644 index 0000000..1d9804b Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307135207.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307140353.png b/content/notes/ready/how_to_computer/Pasted image 20250307140353.png new file mode 100644 index 0000000..dde9303 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307140353.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307164854.png b/content/notes/ready/how_to_computer/Pasted image 20250307164854.png new file mode 100644 index 0000000..9d6fc4d Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307164854.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250307165834.png b/content/notes/ready/how_to_computer/Pasted image 20250307165834.png new file mode 100644 index 0000000..c62250a Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250307165834.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250310095309.png b/content/notes/ready/how_to_computer/Pasted image 20250310095309.png new file mode 100644 index 0000000..e8051d6 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250310095309.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250310101018.png b/content/notes/ready/how_to_computer/Pasted image 20250310101018.png new file mode 100644 index 0000000..921df4e Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250310101018.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250310112300.png b/content/notes/ready/how_to_computer/Pasted image 20250310112300.png new file mode 100644 index 0000000..920cfba Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250310112300.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250310113000.png b/content/notes/ready/how_to_computer/Pasted image 20250310113000.png new file mode 100644 index 0000000..81a01d6 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250310113000.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250310165158.png b/content/notes/ready/how_to_computer/Pasted image 20250310165158.png new file mode 100644 index 0000000..5fd022f Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250310165158.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250311082902.png b/content/notes/ready/how_to_computer/Pasted image 20250311082902.png new file mode 100644 index 0000000..d9fde14 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250311082902.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250311083221.png b/content/notes/ready/how_to_computer/Pasted image 20250311083221.png new file mode 100644 index 0000000..15302f3 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250311083221.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250311083348.png b/content/notes/ready/how_to_computer/Pasted image 20250311083348.png new file mode 100644 index 0000000..13f76a1 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250311083348.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250311091203.png b/content/notes/ready/how_to_computer/Pasted image 20250311091203.png new file mode 100644 index 0000000..99a172d Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250311091203.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250311091659.png b/content/notes/ready/how_to_computer/Pasted image 20250311091659.png new file mode 100644 index 0000000..2a63c85 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250311091659.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250311091929.png b/content/notes/ready/how_to_computer/Pasted image 20250311091929.png new file mode 100644 index 0000000..6a6c409 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250311091929.png differ diff --git a/content/notes/ready/how_to_computer/Pasted image 20250311102143.png b/content/notes/ready/how_to_computer/Pasted image 20250311102143.png new file mode 100644 index 0000000..8b14f60 Binary files /dev/null and b/content/notes/ready/how_to_computer/Pasted image 20250311102143.png differ diff --git a/content/notes/ready/how_to_computer/XNOR_gates.png b/content/notes/ready/how_to_computer/XNOR_gates.png new file mode 100644 index 0000000..c71054e Binary files /dev/null and b/content/notes/ready/how_to_computer/XNOR_gates.png differ diff --git a/content/notes/ready/how_to_computer/XOR_gates.png b/content/notes/ready/how_to_computer/XOR_gates.png new file mode 100644 index 0000000..dd57c6a Binary files /dev/null and b/content/notes/ready/how_to_computer/XOR_gates.png differ diff --git a/content/notes/ready/binary_operations/addition.png b/content/notes/ready/how_to_computer/addition.png similarity index 100% rename from content/notes/ready/binary_operations/addition.png rename to content/notes/ready/how_to_computer/addition.png diff --git a/content/notes/ready/binary_operations/binarycalc.png b/content/notes/ready/how_to_computer/binarycalc.png similarity index 100% rename from content/notes/ready/binary_operations/binarycalc.png rename to content/notes/ready/how_to_computer/binarycalc.png diff --git a/content/notes/ready/how_to_computer/bit_switch.png b/content/notes/ready/how_to_computer/bit_switch.png new file mode 100644 index 0000000..f3f5844 Binary files /dev/null and b/content/notes/ready/how_to_computer/bit_switch.png differ diff --git a/content/notes/ready/how_to_computer/bus.png b/content/notes/ready/how_to_computer/bus.png new file mode 100644 index 0000000..09c1f42 Binary files /dev/null and b/content/notes/ready/how_to_computer/bus.png differ diff --git a/content/notes/ready/binary_operations/d1.png b/content/notes/ready/how_to_computer/d1.png similarity index 100% rename from content/notes/ready/binary_operations/d1.png rename to content/notes/ready/how_to_computer/d1.png diff --git a/content/notes/ready/binary_operations/d2.png b/content/notes/ready/how_to_computer/d2.png similarity index 100% rename from content/notes/ready/binary_operations/d2.png rename to content/notes/ready/how_to_computer/d2.png diff --git a/content/notes/ready/binary_operations/d3.png b/content/notes/ready/how_to_computer/d3.png similarity index 100% rename from content/notes/ready/binary_operations/d3.png rename to content/notes/ready/how_to_computer/d3.png diff --git a/content/notes/ready/binary_operations/d4.png b/content/notes/ready/how_to_computer/d4.png similarity index 100% rename from content/notes/ready/binary_operations/d4.png rename to content/notes/ready/how_to_computer/d4.png diff --git a/content/notes/ready/binary_operations/d5.png b/content/notes/ready/how_to_computer/d5.png similarity index 100% rename from content/notes/ready/binary_operations/d5.png rename to content/notes/ready/how_to_computer/d5.png diff --git a/content/notes/ready/binary_operations/d6.png b/content/notes/ready/how_to_computer/d6.png similarity index 100% rename from content/notes/ready/binary_operations/d6.png rename to content/notes/ready/how_to_computer/d6.png diff --git a/content/notes/ready/how_to_computer/decoder.png b/content/notes/ready/how_to_computer/decoder.png new file mode 100644 index 0000000..a2bd19b Binary files /dev/null and b/content/notes/ready/how_to_computer/decoder.png differ diff --git a/content/notes/ready/how_to_computer/full_adder.png b/content/notes/ready/how_to_computer/full_adder.png new file mode 100644 index 0000000..d3587e2 Binary files /dev/null and b/content/notes/ready/how_to_computer/full_adder.png differ diff --git a/content/notes/ready/how_to_computer/full_adder_8bit.png b/content/notes/ready/how_to_computer/full_adder_8bit.png new file mode 100644 index 0000000..2401130 Binary files /dev/null and b/content/notes/ready/how_to_computer/full_adder_8bit.png differ diff --git a/content/notes/ready/how_to_computer/half_adder.png b/content/notes/ready/how_to_computer/half_adder.png new file mode 100644 index 0000000..54088dd Binary files /dev/null and b/content/notes/ready/how_to_computer/half_adder.png differ diff --git a/content/notes/ready/how_to_computer/image 1.png b/content/notes/ready/how_to_computer/image 1.png new file mode 100644 index 0000000..f854457 Binary files /dev/null and b/content/notes/ready/how_to_computer/image 1.png differ diff --git a/content/notes/ready/transistors/image1.png b/content/notes/ready/how_to_computer/image1.png similarity index 100% rename from content/notes/ready/transistors/image1.png rename to content/notes/ready/how_to_computer/image1.png diff --git a/content/notes/ready/transistors/image2.png b/content/notes/ready/how_to_computer/image2.png similarity index 100% rename from content/notes/ready/transistors/image2.png rename to content/notes/ready/how_to_computer/image2.png diff --git a/content/notes/ready/transistors/image3.png b/content/notes/ready/how_to_computer/image3.png similarity index 100% rename from content/notes/ready/transistors/image3.png rename to content/notes/ready/how_to_computer/image3.png diff --git a/content/notes/ready/transistors/image4.png b/content/notes/ready/how_to_computer/image4.png similarity index 100% rename from content/notes/ready/transistors/image4.png rename to content/notes/ready/how_to_computer/image4.png diff --git a/content/notes/ready/logic_gates/image42.png b/content/notes/ready/how_to_computer/image42.png similarity index 100% rename from content/notes/ready/logic_gates/image42.png rename to content/notes/ready/how_to_computer/image42.png diff --git a/content/notes/ready/logic_gates/image43.png b/content/notes/ready/how_to_computer/image43.png similarity index 100% rename from content/notes/ready/logic_gates/image43.png rename to content/notes/ready/how_to_computer/image43.png diff --git a/content/notes/ready/logic_gates/image44.png b/content/notes/ready/how_to_computer/image44.png similarity index 100% rename from content/notes/ready/logic_gates/image44.png rename to content/notes/ready/how_to_computer/image44.png diff --git a/content/notes/ready/logic_gates/image45.png b/content/notes/ready/how_to_computer/image45.png similarity index 100% rename from content/notes/ready/logic_gates/image45.png rename to content/notes/ready/how_to_computer/image45.png diff --git a/content/notes/ready/logic_gates/image46.png b/content/notes/ready/how_to_computer/image46.png similarity index 100% rename from content/notes/ready/logic_gates/image46.png rename to content/notes/ready/how_to_computer/image46.png diff --git a/content/notes/ready/logic_gates/image47.png b/content/notes/ready/how_to_computer/image47.png similarity index 100% rename from content/notes/ready/logic_gates/image47.png rename to content/notes/ready/how_to_computer/image47.png diff --git a/content/notes/ready/logic_gates/image49.png b/content/notes/ready/how_to_computer/image49.png similarity index 100% rename from content/notes/ready/logic_gates/image49.png rename to content/notes/ready/how_to_computer/image49.png diff --git a/content/notes/ready/binary_operations/image69.png b/content/notes/ready/how_to_computer/image69.png similarity index 100% rename from content/notes/ready/binary_operations/image69.png rename to content/notes/ready/how_to_computer/image69.png diff --git a/content/notes/ready/binary_operations/image75.png b/content/notes/ready/how_to_computer/image75.png similarity index 100% rename from content/notes/ready/binary_operations/image75.png rename to content/notes/ready/how_to_computer/image75.png diff --git a/content/notes/ready/memory/image84.png b/content/notes/ready/how_to_computer/image84.png similarity index 100% rename from content/notes/ready/memory/image84.png rename to content/notes/ready/how_to_computer/image84.png diff --git a/content/notes/ready/memory/image85.png b/content/notes/ready/how_to_computer/image85.png similarity index 100% rename from content/notes/ready/memory/image85.png rename to content/notes/ready/how_to_computer/image85.png diff --git a/content/notes/ready/memory/image86.png b/content/notes/ready/how_to_computer/image86.png similarity index 100% rename from content/notes/ready/memory/image86.png rename to content/notes/ready/how_to_computer/image86.png diff --git a/content/notes/ready/memory/image87.png b/content/notes/ready/how_to_computer/image87.png similarity index 100% rename from content/notes/ready/memory/image87.png rename to content/notes/ready/how_to_computer/image87.png diff --git a/content/notes/ready/memory/image88.png b/content/notes/ready/how_to_computer/image88.png similarity index 100% rename from content/notes/ready/memory/image88.png rename to content/notes/ready/how_to_computer/image88.png diff --git a/content/notes/ready/memory/image89.png b/content/notes/ready/how_to_computer/image89.png similarity index 100% rename from content/notes/ready/memory/image89.png rename to content/notes/ready/how_to_computer/image89.png diff --git a/content/notes/ready/memory/image90.png b/content/notes/ready/how_to_computer/image90.png similarity index 100% rename from content/notes/ready/memory/image90.png rename to content/notes/ready/how_to_computer/image90.png diff --git a/content/notes/ready/memory/image92.png b/content/notes/ready/how_to_computer/image92.png similarity index 100% rename from content/notes/ready/memory/image92.png rename to content/notes/ready/how_to_computer/image92.png diff --git a/content/notes/ready/how_to_computer/index.md b/content/notes/ready/how_to_computer/index.md new file mode 100644 index 0000000..4cbda93 --- /dev/null +++ b/content/notes/ready/how_to_computer/index.md @@ -0,0 +1,1007 @@ +--- +title: Building a Computer From Scratch +description: From diodes and transistors, to a Turing complete computer. +draft: false +tags: + - electronics + - computer-science +author: TrudeEH +showToc: true +weight: "1" +--- + +## Diodes + +A diode allows current to only flow in one direction in a circuit. + +### Schematic + +```Plain +Anode (+) --|>|-- Cathode (-) +``` + +### Examples + +```Plain +[Conventional Current (+) -> (-)] +(+)------|>|------(-) Current can flow - The diode is now a conductor. +(+)------|<|------(-) Current can't flow - The diode is now an insulator. +``` + +### Use Cases + +- Protect a circuit (if a battery is connected incorrectly, for example) +- Convert AC to DC current +Fun fact: An LED, for example, is a Light-Emitting Diode. + +### How a Diode Works + +#### Conductors and Insulators + +An atom contains the following elements: +- Nucleus (Protons - Neutrons) +- Orbital Shells (Holds the electrons, which orbit around the nucleus) +- Conduction band +The electrons closest to the nucleus hold the most energy. +The outermost shell is the valence shell. A conductor has 1-3 electrons in the valence shell. +If an electron reaches the conduction band, it can break free and move to another atom. +An insulator, however, has a conduction band that is far from the valence shell, making it difficult for an electron to escape. +For example, for copper (a great conductor), the valence shell and conduction band overlap, so it's very easy for an electron to jump between atoms. +Semiconductors have a conduction band close to the valence shell, but have one extra electron in it, making it an insulator. However, given some external energy, some electrons will gain enough energy to reach the conduction band and become free. + +#### P-Type and N-Type Doping + +Silicon is a good semiconductor, having 4 electrons in its valence shell. When close to other `Si` atoms, they share 4 electrons with their neighbors, thus, having 8, each, and becoming stable. + +```Plain +Silicon: +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +``` + +##### N-Type + +Some Phosphorus is added to the Silicon. `p` has one extra electron in its valence shell. +These electrons are not needed, and so, they flow freely from atom to atom. + +```Plain +Si Si p Si Si Si Si Si Si Si p +p Si Si Si Si p Si Si Si Si Si +Si Si Si p Si Si Si Si p Si Si +Si p Si Si p Si Si Si Si Si Si +Si Si Si Si Si Si p Si Si p Si +Si p Si Si Si Si Si Si p Si Si +``` + +##### P-Type + +Some Aluminum is added to the Silicon. `Al` is missing one electron, so it can't provide its 4 neighbors with an electron to share. + +```Plain +Si Si Al Si Si Si Si Si Si Si Al +Al Si Si Si Si Al Si Si Si Si Si +Si Si Si Al Si Si Si Si Al Si Si +Si Al Si Si Al Si Si Si Si Si Si +Si Si Si Si Si Si Al Si Si Al Si +Si Al Si Si Si Si Si Si Al Si Si +``` + +#### Combining both Types + +When an N-Type is combined with a P-Type, some electrons from the N-Type side will move over to the P-Type side and occupy the missing electrons there. This creates a barrier between both types, creating an electric field that prevents more electrons from switching sides. + +##### Forward Bias + +If energy is provided to the Cathode, the electrons flow, as the voltage is superior to the barrier's. + +```Plain +(-)-----[P|N]-----(+) +``` + +##### Reverse Bias + +If energy is provided to the Anode, the electrons can't flow, as the barrier expands. + +```Plain +(-)--[P] [N]--(+) +``` + +## Transistor + +Transistors are electronic components that behave like a `switch`, or `amplifier`. + +### Schematic + +```Plain + .--.,-- Collector +Base --(--|<) + `--`'-- Emitter +``` + +### Examples + +#### Switch + +If the `base` pin is provided with energy, the transistor allows current to flow in the main circuit. +![image](image%201.png) + +#### Amplifier + +Altering the voltage given to the `base` pin allows us to control a larger voltage in the main circuit. +![image1](image1.png) + +### Types of Transistor + +#### NPN + +An NPN transistor combines the `base` pin and `collector` pin. +![image2](image2.png) + +> Note: Even if the collector pin is disconnected from the circuit, a small amount of current still passes through. ![image3](image3.png) + +#### PNP + +A PNP transistor receives energy through the `emitter` pin, and then divides it to the remaining pins. + + +![image4](image4.png) + +## Basic Logic + +A logic gate is a device that performs one boolean operation: Two binary inputs produce a single binary output. These building blocks are the foundations of modern computing. +Each gate has its own truth table, which defines every possible input and output variations. + +### NAND + +A NAND gate can be used to build all other basic gates. It always outputs, unless both inputs are active. + +![image45](image45.png) + +#### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|1| +|0|1|1| +|1|0|1| +|1|1|0| + +#### Implementation + +##### Electronics + +Implementation using switches (transistors could be used instead) and a pull-up resistor: +![NAND_circuit](NAND_circuit.png) + +### NOT + +Invert any given input. + +![image42](image42.png) + +#### Truth Table + +|**Input**|**Output**| +|---|---| +|0|1| +|1|0| + +#### Implementation + +##### Logic Gates + +![NOT_gates](NOT_gates.png) + +##### Electronics + +![image50](NOT_electronics.png) + +### AND + +Outputs `1` only when both inputs are `1`. + +![image43](image43.png) + +#### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|0| +|0|1|0| +|1|0|0| +|1|1|1| + +#### Implementation + +##### Logic Gates + +![AND_gates](AND_gates.png) + +##### Electronics + +![image51](AND_electronics.png) +![image52](AND_electronics_transistors.png) + +#### Bigger AND Gate + +AND gates can be chained to accept more inputs. + +![AND_gates_big](AND_gates_big.png) + +##### Truth Table + +| A | **B** | C | **Output** | +| --- | ----- | --- | ---------- | +| 0 | 0 | 0 | 0 | +| 0 | 1 | 0 | 0 | +| 1 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | +| 0 | 0 | 1 | 0 | +| 0 | 1 | 1 | 0 | +| 1 | 0 | 1 | 0 | +| 1 | 1 | 1 | 1 | + +### OR + +Outputs `1` if at least one input is `1`. + +![image44](image44.png) + +#### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|0| +|0|1|1| +|1|0|1| +|1|1|1| + +#### Implementation + +##### Logic Gates + +![OR_gates](OR_gates.png) + +##### Electronics + +![image53](OR_electronics.png) + +#### Bigger OR Gate + +![OR_gates_big](OR_gates_big.png) + +##### Truth Table + +| A | **B** | C | **Output** | +| --- | ----- | --- | ---------- | +| 0 | 0 | 0 | 0 | +| 0 | 1 | 0 | 1 | +| 1 | 0 | 0 | 1 | +| 1 | 1 | 0 | 1 | +| 0 | 0 | 1 | 1 | +| 0 | 1 | 1 | 1 | +| 1 | 0 | 1 | 1 | +| 1 | 1 | 1 | 1 | + +### NOR + +An OR gate followed by a NOT gate. + +A NOR gate is can also be used to build every other gate, just like NAND. However, NAND gates are preferred over NOR gates, as, in modern computers, they occupy less area and have less delay. + +![image46](image46.png) + +#### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|1| +|0|1|0| +|1|0|0| +|1|1|0| + +#### Implementation + +##### Logic Gates + +![NOR_gates](NOR_gates.png) + +### XOR + +Either input is `1`, exclusively. (OR, but if both inputs are on, it turns off.) + +![image47](image47.png) + +#### Truth Table + +| A | **B** | **Output** | +| --- | ----- | ---------- | +| 0 | 0 | 0 | +| 0 | 1 | 1 | +| 1 | 0 | 1 | +| 1 | 1 | 0 | + +#### Implementation + +##### Logic Gates + +![XOR_gates](XOR_gates.png) + +### XNOR + +Inverted `XOR`. + +![image49](image49.png) + +#### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|1| +|0|1|0| +|1|0|0| +|1|1|1| + +#### Implementation + +##### Logic Gates + +![XNOR_gates](XNOR_gates.png) + +Although this circuits works, it can be further optimized to save `1` gate. + +![Pasted image 20250306105245](Pasted%20image%2020250306105245.png) + +> From this point on, circuits will become exponentially more complex. Optimizations like this one can be found almost everywhere, however, when the choice between efficiency and readability arises, I will choose to keep things simple. If you found a way to optimize any of my circuits, please let me know. I'd be happy to keep improving these notes, and credit you for your findings. + +## Binary + +Binary is a base-2 numeral system: A simple way to represent numbers using only two states. Each binary 'digit' is called a *bit*, and 8 bits together form a *byte*. +To represent large binary values, it's common to use hexadecimal as well, to shorten them into a more readable format. + +| Binary | Decimal | Hexadecimal | +| ------ | ------- | ----------- | +| 0000 | 00 | 0 | +| 0001 | 01 | 1 | +| 0010 | 02 | 2 | +| 0011 | 03 | 3 | +| 0100 | 04 | 4 | +| 0101 | 05 | 5 | +| 0110 | 06 | 6 | +| 0111 | 07 | 7 | +| 1000 | 08 | 8 | +| 1001 | 09 | 9 | +| 1010 | 10 | A | +| 1011 | 11 | B | +| 1100 | 12 | C | +| 1101 | 13 | D | +| 1110 | 14 | E | +| 1111 | 15 | F | + +![Binary Calculations](binarycalc.png) + +## Arithmetic Operations + +### Addition + +Adding two numbers can be done using a simple, manual algorithm: By adding the last *bit* of both numbers first, carry if necessary, then move to the next number, and so on. + +| **+** | 0 | 1 | +| ------- | --- | ---- | +| 0 | 0 | 1 | +| 1 | 1 | 10 | + +![addition](addition.png) + +#### Half Adder + +Add 2, single-digit binary numbers. + +| **A** | **B** | **Carry** | **Sum** | +| ----- | ----- | --------- | ------- | +| 0 | 0 | 0 | 0 | +| 0 | 1 | 0 | 1 | +| 1 | 0 | 0 | 1 | +| 1 | 1 | 1 | 0 | + +![half_adder](half_adder.png) + +#### Full Adder (ADD) + +When adding 2 binary numbers, one operation might return a carry value, which the `half adder` can't accept, as it only has 2 inputs. + +![image69](image69.png) + +To solve this issue, a `full adder` accepts 3 inputs. + +![full_adder](full_adder.png) + +#### 8-Bit Adder + +To add two bytes, chain 8 full-adders. +(The dark blue lines are equivalent to 8 bits in parallel, simplified for better readability. The blue rectangles split the wire into 8 bits, or vice versa.) + +![full_adder_8bit](full_adder_8bit.png) + +### Two's Complement + +The most common solution to represent negative numbers is to interpret the last bit as a negative value. For a byte, the last bit changes its value from 128 to -128. + +> A negative number is often called a *signed* number. + +The main advantage of the Two's Complement system is that the adder built previously also works with it. + +#### Invert Sign + +To switch between negative and positive numbers, flip all bits, then add 1. + +![signed_negator](signed_negator.png) + +### Subtraction + +Subtraction is as easy as negating (inverting the sign of) the second input. + +![Pasted image 20250306113013](Pasted%20image%2020250306113013.png) + +### Multiplication + +Multiplication is also similar to its decimal counterpart, but because binary is so small compared to decimal, the steps are also much simpler. + +First, multiply the top number to every digit of the bottom one, and then add the results together. + +| X | 0 | 1 | +| --- | --- | --- | +| 0 | 0 | 0 | +| 1 | 0 | 1 | + +![multiplication](multiplication.png) + +#### 2-Bit By 2-Bit Multiplier + +![image75](image75.png) + +#### 4-Bit By 4-Bit Multiplier + +![Pasted image 20250306113821](Pasted%20image%2020250306113821.png) + +### Division + +Division is more complex. So much so, that it is often implemented in code, instead of hardware. For example, *ARM* CPUs don't have an instruction for division. +Harder doesn't mean impossible of course, and if you are curious, there are many resources you can see. For example: [This Reddit post](https://www.reddit.com/r/TuringComplete/comments/1eqo00i/my_multiplier_and_divider_in_turing_complete/); [YouTube Video](https://www.youtube.com/watch?v=Wf_1mf6yCoc). + +The steps for binary division are as follows: + +1. Find the smallest part of the dividend greater than or equal to the **divisor**.![d1](d1.png) + + +2. Write the first digit of **the answer**, and **copy the original divisor down**.![d2](d2.png) + + +3. Subtract the **aligned dividend digits** by **the digits under the dividend**.![d3](d3.png) + +4. Lower **the next dividend digit**. + ![d4](d4.png) + +5. Is **the total** greater or equal to the **divisor**? If so, add a `1` to the answer. If not, **add a `0` to the answer and return to step 4**. + ![d5](d5.png) + + +6. Return to step 2, until you reach the end of the number. If you reached the end, you found **the answer**. + ![d6](d6.png) + +## Memory + +### Byte Switch (SWC) + +A bit switch, also known as a transistor, toggles a given input, using a second bit. + +![bit_switch](bit_switch.png) + +If 8 transistors are controlled by the same bit in parallel, a Byte Switch is created. + +### Input Selector + +Using byte switches, we can select which input to use. + +![input_selector](input_selector.png) + +### Bus + +A Bus is useful to simplify wiring. One bit controls which input should be selected, and a second one, the output. This way, a single wire can transfer twice as much information. + +![bus](bus.png) + +### 1 Bit of Memory + +There are [many ways](https://www.geeksforgeeks.org/latches-in-digital-logic/#sr-latch) to achieve a bit of memory. + +#### Using Transistors and a Tick Delay + +The oval component is a delay. This replaces the concept of a clock, however, in an electronic circuit, the save and load states are attached to a clock instead. + +![transistor_latch](transistor_latch.png) + +#### SR Latch + +A Set-Reset Latch is the simplest one. The `S` input sets the output to `1`, and the `R` input, to `0`. If both inputs are on, the latch is in an undefined state, and outputs `0`. + +![Pasted image 20250306120537](Pasted%20image%2020250306120537.png) + +#### D Latch + +A Data Latch has two inputs: `D` (Data) and `E` (Enable). When the `E` input is high, the output `Q` follows the input `D`. When the `E` input is low, the output `Q` holds the last value of `D`. + +![image](image%201.png) + +### 8bit Register + +After obtaining one bit of memory (the hexagon component), a byte of memory can be built. + +![8bit_register](8bit_register.png) + +### Binary Decoder + +A decoder splits the two states of a bit into two separate outputs. + +![decoder](decoder.png) + +### 3bit Decoder + +![3bit_decoder](3bit_decoder.png) + +### Counter + +A counter adds 1 every tick (clock cycle) to its output. If needed, it can also be overwritten to any given value. + +![Pasted image 20250307115740](Pasted%20image%2020250307115740.png) + +### RAM + +We could add more registers to store as much data as needed, however, these don't scale well, as storing a lot of data would require millions of wires. To solve this issue, we can organize latches in a matrix instead of a long, horizontal line. + +![image84](image84.png) +To access a specific latch, binary decoders can be used. +![image85](image85.png) +This way, a single, short memory address can select any latch in the matrix. + +#### Reading and Writing to the Matrix + +We can modify the latch to reduce the amount of wires needed. +![image86](image86.png) +This new latch uses the same wire for both input and output. +![image87](image87.png) +This circuit would store the same value on every latch, which isn't useful. With some modifications, however, we can use the memory address to select which latch to modify. +![image88](image88.png) +![image89](image89.png) + +#### Storing Bytes Instead of Bits + +![image90](image90.png) +In this example, we can provide 1 byte of information, a `write` or `read` signal, and a memory address. Since we are storing a full byte, the same memory address applies for all 8, single bit circuits. +To make it easier to understand, we can abstract these concepts further: +![Pasted image 20250307134315](Pasted%20image%2020250307134315.png) + +The larger the Address Bus is, the more bits can be managed. This is why a 32bit CPU can't manage more than 4 GB of RAM. + +![image92](image92.png) + +This kind of RAM is Static RAM (**S**RAM), which uses many transistors, making it faster, but is more expensive to produce than **D**RAM. + +## CPU Architecture + +### ALU + +An ALU (Arithmetic Logic Unit) performs bitwise operations (OR, AND, NOR, NAND) and basic math (ADD, SUB). You can also add any other arithmetic functionality to it, such as multiplication and division. + +This circuit uses the following instructions: +- `0` OR +- `1` NAND +- `2` NOR +- `3` AND +- `4` ADD +- `5` SUB + +![Pasted image 20250307131641](Pasted%20image%2020250307131641.png) + +This ALU can also be optimized to use fewer gates: + +![Pasted image 20250307131757](Pasted%20image%2020250307131757.png) + +### Conditions + +Conditions allow the CPU to compare values. In this case, values are compared against 0. + +Instructions: +- `0` Never (Always output 0) +- `1` If value = 0 +- `2` If value < 0 +- `3` If value ≤ 0 +- `4` Always (Always output 1) +- `5` If value ≠ 0 +- `6` If value ≥ 0 +- `7` If value > 0 + +![Pasted image 20250307135207](Pasted%20image%2020250307135207.png) + +### Instruction Decoder + +A binary decoder, adapted to use the last 2 bits of a byte. + +Instructions: +- `0` Immediate +- `64` Calculation +- `128` Copy +- `192` Condition + +![Pasted image 20250307140353](Pasted%20image%2020250307140353.png) + +## Putting it All Together + +We can now use the previous components to build and OVERTURE architecture computer! + +### Upgraded Register + +Adding an output pin to always output the register's value will prove to be useful in the future. + +![Pasted image 20250307164854](Pasted%20image%2020250307164854.png) + +### Registers + +This circuit copies information between registers. To do this, it uses the lowest 3 bits of a byte as the destination, and the next 3 bits as the source. + +![Pasted image 20250307165834](Pasted%20image%2020250307165834.png) + +### Program + +The RAM we built previously can be used as a program. To move the memory address forward, simply attach it to our clock. You may notice that many pins are missing on the RAM component: This it to simplify the schematic, as this RAM is read-only and pre-programmed. Despite it having 4 outputs, this computer will only use the first one. + +Every tick of the clock, the next instruction is passed to the registers, allowing the copy of values to be scripted. + +![Pasted image 20250310095309](Pasted%20image%2020250310095309.png) + +### Math + +Copying values between registers isn't very useful by itself. + +Our ALU can perform basic bitwise operations, given an instruction. To implement it, a few modifications had to be made: +1. The Instruction Decoder was added, as well as the ALU; +2. Register decoders should be disabled when not performing a copy operation; +3. The ALU was wired to the OPCODE (instruction) byte as well, since, in this context, the first 3 bits represent which arithmetic operation to execute; +4. Finally the ALU was wired to register 3 (4th), to store the result of the operation, as well as to the register 1 and 2, to act as inputs. + +![Pasted image 20250310101018](Pasted%20image%2020250310101018.png) + +So far, our computer can copy information and perform calculations on that data. +For example, to add 2 numbers from input, and then output the result: + +``` +177 # Input -> REG1 +178 # Input -> REG2 +68 # ADD REG1 and REG2 +158 # REG3 -> Output +``` + +### Immediate Values + +Sometimes it's useful to insert values directly from code (hard-code values). +If the two highest bits are both off, the value provided in the lowest 6 bits is stored in the register 0. + +![Pasted image 20250310112300](Pasted%20image%2020250310112300.png) + +### Conditions + +Finally, we can add conditions to the computer. +Our condition component can only compare a value against 0, but together with subtraction and addition, it allows for any comparison to be executed. + +Any instruction given to the condition circuit will use `REG3` as input, and the output overrides the counter's value. This allows for jumping to any line in the program, and thus, create loops. + +![Pasted image 20250310113000](Pasted%20image%2020250310113000.png) + +Adding conditions was the last step to build a simple, but fully capable computer! Although slow, this computer can execute any 256 bytes program. + +> Keep in mind that loops are still very limited, and because immediate values only supports saving 6 bits, you can't jump past the 63rd instruction. + +## Assembly + +Now that the computer is finished, we can start programming it. + +Remembering the value for each instruction can be difficult, and so, it's useful to assign a name to each. This layer of abstraction is called *assembly*. + +Before a program written in assembly can be executed, it must be compiled; Transcoded back into bytes. + +### Instructions + +#### Immediate + +| Command | Instruction | Description | +| ------- | ----------- | ------------------------------------- | +| `0-63` | 0-63 | Insert a hard-coded value into `REG0` | + +#### Calculation + +| Command | Instruction | Description | +| ------- | ----------- | ---------------------------------------- | +| `OR` | 0 | Bitwise OR `REG1` and `REG2` to `REG3` | +| `NAND` | 1 | Bitwise NAND `REG1` and `REG2` to `REG3` | +| `NOR` | 2 | Bitwise NOR `REG1` and `REG2` to `REG3` | +| `AND` | 3 | Bitwise AND `REG1` and `REG2` to `REG3` | +| `ADD` | 4 | Add `REG1` and `REG2` to `REG3` | +| `SUB` | 5 | Subtract `REG1` and `REG2` to `REG3` | + +#### Copy + +| Command | Instruction | Description | +| ---------------- | ------------- | --------------------------------- | +| `r0r1` - `r0out` | 129-134 | Copy `REG0` to `REG1-5`/`output` | +| `r1r0` - `r1out` | 136-142 | Copy `REG1` to `REG0-5`/`output` | +| `r2r0` - `r2out` | 144-150 | Copy `REG2` to `REG0-5`/`output` | +| `r3r0` - `r3out` | 152-158 | Copy `REG3` to `REG0-5`/`output` | +| `r4r0` - `r4out` | 160-166 | Copy `REG4` to `REG0-5`/`output` | +| `r5r0` - `r5out` | 168-172 & 174 | Copy `REG5` to `REG0-4`/`output` | +| `inr0` - `inout` | 176-182 | Copy `input` to `REG0-5`/`output` | + +#### Condition + +| Command | Instruction | Description | +| -------- | ----------- | ------------------ | +| `never` | 192 | Never jumps | +| `is0` | 193 | Jump if `REG3` = 0 | +| `less0` | 194 | Jump if `REG3` < 0 | +| `leq0` | 195 | Jump if `REG3` ≤ 0 | +| `always` | 196 | Always jumps | +| `not0` | 197 | Jump if `REG3` ≠ 0 | +| `meq0` | 198 | Jump if `REG3` ≥ 0 | +| `more0` | 199 | Jump if `REG3` > 0 | + +## Representing Data + +You might be wondering how computers can display text, images, and play sound. + +Just like how, for negative numbers, the value stored is the same, and only its *context* changes, the same logic applies to represent anything else. + +For example, to represent text, it's very common to use either ASCII or UNICODE. + +The table below is only part of the ASCII standard, used for capitalized letters: + +| Dec | Hex | Binary | HTML | Char | +| --- | --- | -------- | -------- | ---- | +| 65 | 41 | 01000001 | `A` | A | +| 66 | 42 | 01000010 | `B` | B | +| 67 | 43 | 01000011 | `C` | C | +| 68 | 44 | 01000100 | `D` | D | +| 69 | 45 | 01000101 | `E` | E | +| 70 | 46 | 01000110 | `F` | F | +| 71 | 47 | 01000111 | `G` | G | +| 72 | 48 | 01001000 | `H` | H | +| 73 | 49 | 01001001 | `I` | I | +| 74 | 4A | 01001010 | `J` | J | +| 75 | 4B | 01001011 | `K` | K | +| 76 | 4C | 01001100 | `L` | L | +| 77 | 4D | 01001101 | `M` | M | +| 78 | 4E | 01001110 | `N` | N | +| 79 | 4F | 01001111 | `O` | O | +| 80 | 50 | 01010000 | `P` | P | +| 81 | 51 | 01010001 | `Q` | Q | +| 82 | 52 | 01010010 | `R` | R | +| 83 | 53 | 01010011 | `S` | S | +| 84 | 54 | 01010100 | `T` | T | +| 85 | 55 | 01010101 | `U` | U | +| 86 | 56 | 01010110 | `V` | V | +| 87 | 57 | 01010111 | `W` | W | +| 88 | 58 | 01011000 | `X` | X | +| 89 | 59 | 01011001 | `Y` | Y | +| 90 | 5A | 01011010 | `Z` | Z | + +You may have used RGB values before. These are used to represent a color: + +``` +RGB(0-255; 0-255; 0-255) +``` + +As the name suggests, the first value represents Red, the second, Green, and the last, Blue. + +To create images, simply chain RGB values in a grid; Videos are nothing more than many images chained together. + +## LEG + +The LEG computer is similar to OVERTURE, but instead of a single byte per instructions, LEG uses 4. This makes it much easier to program, and allows for immediate values and jumps up to `256`. + +Even though OVERTURE is fully functional, there are still many useful concepts we skipped over, such as functions, writable RAM, and comparisons between two numbers. + +### The Main Board + +Instead of a single output, this program component outputs the selected byte, as well as the 3 following ones. To support 4 byte instructions, the clock increments by 4 instead of 1 each tick. + +Each 'chip' built previously had to be re-built, but without the limitations OVERTURE had, they were also much improved. + +Connecting RAM is as easy as wiring it to replace the last register. This means that now the computer only has 5 usable registers instead of 6, but the RAM provides 256 more, although slower. +`REG4` stores the memory address for the RAM, however, outside of memory operations, it can still be used as a regular register. + +![Pasted image 20250310165158](Pasted%20image%2020250310165158.png) + +### ALU + +Aside from the previous, simple operations, the LEG ALU can also `XOR` and `MUL` (multiply) values. Division, exponentiation, and other operations could be added, although those can be performed through code as well. + +Instructions: +- `0` ADD +- `1` SUB +- `2` AND +- `3` OR +- `4` NOT +- `5` XOR +- `6` MUL(TIPLY) + +![Pasted image 20250311083348](Pasted%20image%2020250311083348.png) + +#### Multiplication + +The following circuit is a 4 bit by 4 bit multiplier. It can then be scaled to use 4 bytes instead of bits. + +![Pasted image 20250311102143](Pasted%20image%2020250311102143.png) + +### Conditional (IF) + +The new conditional chip takes two numbers, and then uses two new components: `Equal` and `Unsigned Less` as a base to compare values. From them alone, all other instructions can be achieved. + +Instructions: +- `32` Equal +- `33` Not equal +- `34` Less than +- `35` Less or equal to +- `36` Greater than +- `37` Greater or equal to +- `38` Always true + +![Pasted image 20250311082902](Pasted%20image%2020250311082902.png) + +#### Equal + +Calculating equality can be done by subtracting both inputs, then verifying that the result is 0. + +![Pasted image 20250311091659](Pasted%20image%2020250311091659.png) + +#### Less (unsigned) + +To verify if the first input is less than the second, invert the first input, then add it with the second. Notice how the output is connected to `ADD`'s `CARRY` pin, instead of the result. The goal is to check if `ADD` overflows. + +> Note: `NEG` and `NOT` are different components. `NEG` converts its input to a negative value, while `NOT` inverts the input. For example, if the input is 6, `NEG` outputs 250 (-6), while `NOT` outputs 249 (-7). + +![Pasted image 20250311091929](Pasted%20image%2020250311091929.png) + +### Functions (FN) + +Although the previous computer was already Turing complete, functions are not only much easier to use than simple jumps, but they allow for function calls to be chained, and to call another function from within a function. + +When a function is called, its value needs to be stored, and then the computer will either encounter a return statement and `POP` the function's address away, or `PUSH` a new value on top. This is the exact behavior of a stack. + +The stack could be implemented in two (or even more) ways: +- Having a separate RAM component just for the stack; +- Using the system RAM, and starting from the last byte, up. + +The latter option is how most modern computers work. The memory allocated to a program is split, eliminating the need for a physical stack. On our LEG computer, though, we only have 256 bytes of RAM, so I decided to implement a physical stack. + +![Pasted image 20250311083221](Pasted%20image%2020250311083221.png) + +#### The Stack + +You may notice how the stack is being populated from the last byte instead of the first. This is to make the `STACK` reusable, if system RAM was to be used instead. + +![Pasted image 20250311091203](Pasted%20image%2020250311091203.png) + +### Assembly + +The assembly for LEG might even be simpler than OVERTURE's. There are a few things to keep in mind, though: +- `REG4` was renamed to `ADDR`, as it is more commonly used as the memory address, opposed to a regular register. +- There is no `COPY` statement. Instead, `ADD` a value with 0 to select a destination to copy to. Keep in mind that 0 is `REG0` in this context, so it must be kept empty while copying values. +- If a value in a command is 0, it must be typed with an actual 0 in that place. This is because the clock is fixed, and if an instruction only uses 2 or 3 bytes instead of 4, the unused bytes must be set to 0, to not misalign the next clock cycle. A solution to this problem would be to implement a variable counter, capable of skipping unused bytes. This would complicate the physical circuit quite a bit, and so I decided against implementing it. + +#### Assembly Codes + +- 32 - 39 `IF` +- 0 - 6 `MATH` +- 64 - 70 `IMMEDIATE` +- 16 - 17 `STACK/FUNCTIONS` + +#### Manual + +All instructions are 4 bytes long. +`OPCODE ARG1 ARG2 DEST` + + +**COPY** - Copy data between `IO`, `REG0-3`, and `ADDR/RAM`. + +```asm +ADD 0 + +ADD REG0 0 REG1 # Example +``` + +**MATH** - Perform arithmetic operations. +- `ADD` +- `SUB` +- `AND` +- `OR` +- `NOT` +- `XOR` +- `MUL` (multiplication) + +```asm +ADD + +SUB REG2 REG1 IO # Example +``` + +**IMMEDIATE** - Insert data directly from the program. +Every arithmetic operation has an `i` variant. + +```asm +ADDi + +ADDi REG0 10 REG2 # Example +``` + +**LOGIC** - Conditionals +If a condition is met, jump to `n` line. +- `EQ` Equal +- `NEQ` Not equal +- `LES` Less than +- `LEQ` Less or equal to +- `MOR` Greater than +- `MOQ` Greater or equal to +- `JMP` Always true; Jump no matter the inputs' values + +```asm +EQ + +MOQ REG1 REG2 12 # Example +JMP 0 0 12 # Example - Jumping with no condition +``` + +**MEMORY** - Store data +The RAM module can hold 256 bytes. +To use RAM: +1. Select a memory address (0-256), and copy it to `ADDR`. +2. Read or Write to `RAM`. + +> The `ADDR` register can be used as a regular register outside of memory operations. + +Example: + +```asm +ADDi 0 10 ADDR # Address 10 +ADD IO 0 RAM # Write Input to RAM +ADD RAM 0 REG0 # Address 10 is still selected; output its contents to REG0 +``` + +**FUNCTIONS** - Reuse code +Create a function: + +```asm +label functionName + ... +RET +``` + +> Label resolves to the next instruction. + +Replace `...` with the function contents. +To call the function: + +```asm +CALL 0 0 functionName +``` + +## Sources and Contributors + +Every circuit in this post was designed by me, mostly through trial and error, so the source would quite literally be: I made it up. `¯\_(ツ)_/¯` + +Most screenshots were taken from Turing Complete, a simulator/game on Steam. As the name suggests, the simulator attempts to teach you the basics of computing, and give you a platform to test and develop on. If you read this far, I highly recommend you to try it! + +If you find that I made a mistake, want to improve one of my circuits, or have any constructive feedback to share, please contact me, and I will happily add your name to the credits. + +Everything in this website, including other notes and posts (and the website itself) are open-source, licensed under the `MIT`. Feel free to use it for your own research. If you'd like to submit a PR or Issue on [GitHub](https://github.com/TrudeEH/web), I would appreciate it! diff --git a/content/notes/ready/how_to_computer/input_selector.png b/content/notes/ready/how_to_computer/input_selector.png new file mode 100644 index 0000000..bc2beb6 Binary files /dev/null and b/content/notes/ready/how_to_computer/input_selector.png differ diff --git a/content/notes/ready/binary_operations/multiplication.png b/content/notes/ready/how_to_computer/multiplication.png similarity index 100% rename from content/notes/ready/binary_operations/multiplication.png rename to content/notes/ready/how_to_computer/multiplication.png diff --git a/content/notes/ready/how_to_computer/signed_negator.png b/content/notes/ready/how_to_computer/signed_negator.png new file mode 100644 index 0000000..386fe0a Binary files /dev/null and b/content/notes/ready/how_to_computer/signed_negator.png differ diff --git a/content/notes/ready/how_to_computer/transistor_latch.png b/content/notes/ready/how_to_computer/transistor_latch.png new file mode 100644 index 0000000..76cd00d Binary files /dev/null and b/content/notes/ready/how_to_computer/transistor_latch.png differ diff --git a/content/notes/ready/logic_gates/image48.png b/content/notes/ready/logic_gates/image48.png deleted file mode 100644 index 8de799a..0000000 Binary files a/content/notes/ready/logic_gates/image48.png and /dev/null differ diff --git a/content/notes/ready/logic_gates/index.md b/content/notes/ready/logic_gates/index.md deleted file mode 100644 index 76a2131..0000000 --- a/content/notes/ready/logic_gates/index.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Logic Gates -description: -draft: false -tags: - - electronics - - computer-science -author: TrudeEH -showToc: true ---- - -## NOT - -Invert the input. -![image42](image42.png) - -### Truth Table - -|**Input**|**Output**| -|---|---| -|0|1| -|1|0| - -## AND - -Output `1` only when both inputs are `1`. -![image43](image43.png) - -### Truth Table - -|A|**B**|**Output**| -|---|---|---| -|0|0|0| -|0|1|0| -|1|0|0| -|1|1|1| - -## OR - -Output `1` if at least one input is `1`. -![image44](image44.png) - -### Truth Table - -|A|**B**|**Output**| -|---|---|---| -|0|0|0| -|0|1|1| -|1|0|1| -|1|1|1| - -## NAND - -An `AND` gate followed by a `NOT` gate. -![image45](image45.png) - -### Truth Table - -|A|**B**|**Output**| -|---|---|---| -|0|0|1| -|0|1|1| -|1|0|1| -|1|1|0| - -## NOR - -An `OR` gate followed by a `NOT` gate. -![image46](image46.png) - -### Truth Table - -|A|**B**|**Output**| -|---|---|---| -|0|0|1| -|0|1|0| -|1|0|0| -|1|1|0| - -## XOR - -Either input is `1`, exclusively. -![image47](image47.png) -![image48](image48.png) - -### Truth Table - -|A|**B**|**Output**| -|---|---|---| -|0|0|0| -|0|1|1| -|1|0|1| -|1|1|0| - -## XNOR - -Inverted `XOR`. -![image49](image49.png) - -### Truth Table - -|A|**B**|**Output**| -|---|---|---| -|0|0|1| -|0|1|0| -|1|0|0| -|1|1|1| - -## Implementation Examples - -### NOT - -![image50](image50.png) - -### AND - -![image51](image51.png) -![image52](image52.png) - -### OR - -![image53](image53.png) diff --git a/content/notes/ready/memory/index.md b/content/notes/ready/memory/index.md deleted file mode 100644 index 027ab21..0000000 --- a/content/notes/ready/memory/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Memory -description: -draft: false -tags: - - computer-science -author: TrudeEH -showToc: true ---- - -## Remembering Data - -An `OR` gate could be used to store a single bit. -![image76](image76.png) -If the input `A` is changed to `1`, the `OR` gate will output `1`, and then receive it. -![image77](image77.png) -Even after the input `A` is set to `0`, the output does not change. The `OR` gate "remembers" that, at one point in the past, the `A` input was set to `1`. -![image78](image78.png) -The inverse can be done with an `AND` gate. -![image79](image79.png) -To remember either a `1` or a `0`, we can do the following: -![image80](image80.png) - -### AND-OR LATCH - -The input `A` sets the output to `1`, and the input `B` sets the output to `0`. This circuit is able to store a bit of information, while powered on, even after both inputs are set to `0`. -A slightly more advanced and intuitive version can be built as follows: -![image81](image81.png) - -### GATED LATCH - -The input `A` is the value to store, and when `B` is set to `1`, the value is stored. -This is not the only way to store data using logic gates, but it is one of the simplest. - -## Registers - -A single bit isn't very useful, so we can use the previous circuit to create an 8bit register. -![image82](image82.png) - -## Binary Decoder - -Select which circuit to activate, depending on the task at hand. -![image83](image83.png) - -## RAM - -Registers don't scale well, however, as storing a large amount of data would require millions of wires. -We can organize latches in a matrix instead of a long, horizontal line. -![image84](image84.png) -To access a specific latch, binary decoders can be used. -![image85](image85.png) -This way, a single, short memory address can select any latch in the matrix. - -### Reading and Writing to the Matrix - -We can modify the latch to reduce the amount of wires needed. -![image86](image86.png) -This new latch uses the same wire for both input and output. -![image87](image87.png) -This circuit would store the same value on every latch, which isn't useful. With some modifications, however, we can use the memory address to select which latch to modify. -![image88](image88.png) -![image89](image89.png) - -### Storing Bytes Instead of Bits - -![image90](image90.png) -In this example, we can provide 1 byte of information, a `write` or `read` signal, and a memory address. Since we are storing a full byte, the same memory address applies for all 8, single bit circuits. -This configuration is more commonly known as **RAM**. -To make it easier to understand, we can abstract these concepts further. -![image91](image91.png) -The largest the Address Bus is, the more bits can be managed. This is why a 32bit CPU can't manage more than 4 GB of RAM. -![image92](image92.png) -This kind of RAM is Static RAM (**S**RAM), which uses many transistors, making it faster, but more expensive to produce than **D**RAM. diff --git a/content/notes/ready/transistors/index.md b/content/notes/ready/transistors/index.md deleted file mode 100644 index c780791..0000000 --- a/content/notes/ready/transistors/index.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Transistors -description: -draft: false -tags: - - electronics -author: TrudeEH -showToc: true ---- - - - -Transistors are electronic components that behave like a `switch`, or `amplifier`. - -## Schematic - -```Plain - .--.,-- Collector -Base --(--|<) - `--`'-- Emitter -``` - -## Examples - -### Switch - -If the `base` pin is provided with energy, the transistor allows current to flow in the main circuit. -![image](image.png) - -### Amplifier - -Altering the voltage given to the `base` pin allows us to control a larger voltage in the main circuit. -![image1](image1.png) - -## Types of Transistor - -### NPN - -An NPN transistor combines the `base` pin and `collector` pin. -![image2](image2.png) - -> Note: Even if the collector pin is disconnected from the circuit, a small amount of current still passes through. ![image3](image3.png) - -### PNP - -A PNP transistor receives energy through the `emitter` pin, and then divides it to the remaining pins. - - -![image4](image4.png)