This commit is contained in:
2025-08-29 15:28:30 +02:00
parent 83b8df17fe
commit 591ea99899
143 changed files with 7773 additions and 0 deletions

View File

@@ -0,0 +1,257 @@
<!DOCTYPE html>
<html>
<head>
<title>etc-nand</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" sizes="512x512" href="res/favicon.png">
<link rel="image_src" type="image/png" href="res/favicon.png">
<link type="application/atom+xml" rel="alternate" title="alexs168's blog" href="atom.xml">
</head>
<body>
<style>
@font-face {
font-family: 'DejaVu Sans Mono';
src:local('DejaVu Sans Mono'),
url('res/DejaVuSansMono.woff2') format('woff2'),
local('Courier New'),
local(Courier),
local(monospace);
font-weight: normal;
font-style: normal;
font-display: swap;
}
/*
@font-face {
font-family: 'DejaVu Sans Mono';
src:local('DejaVu Sans Mono'),
url('res/DejaVuSansMono-Bold.woff2') format('woff2'),
local('Courier New'),
local(Courier),
local(monospace);
font-weight: bold;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'DejaVu Sans';
src:local('DejaVu Sans'),
url('res/DejaVuSans-Bold.woff2') format('woff2'),
local('Courier New');
font-weight: bold;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'DejaVu Sans';
src:local('DejaVu Sans'),
url('res/DejaVuSans.woff2') format('woff2'),
local('Courier New');
font-weight: normal;
font-style: normal;
font-display: swap;
}*/
body {
font-family: DejaVu Sans Mono;
font-size: 17pt;
}
td {
width: 100%;
display: inline;
vertical-align: top;
}
h1,h2,h3,h4 {
margin-top: 1%;
margin-bottom: 0.75%;
margin-left: -0.75%;
}
p {
margin-top: 0.75%;
margin-bottom: 0.75%;
}
ul {
margin-top: 0%;
}
.current {
font-weight: bold;
}
pre {
margin-top: 0px;
margin-bottom: 0px;
display: inline;
}
a {
color: #3f51b5;
text-decoration: none;
}
a:visited {
color: #3f51b5;
text-decoration: none;
}
</style>
<table>
<tr>
<td><span class="sidebar" style><span class="column-fixed" style="display: inline-flex; position: fixed; justify-content: center; width: 25%"><table><tr><td><span class="table-of-contents" style><div style="
border:1.2pt solid black;
border-radius:2pt;
padding:3%;"><p><span style="text-decoration: underline">Table of contents</span><br></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-0"><a href="#loc-1">Overview</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-1"><a href="#loc-2">Estimates</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">|  └─</span> <span class style="flex:1;"><span class="headingr" id="headingr-2"><a href="#loc-3">Planned Specifications</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-3"><a href="#loc-4">Purchase</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">└─</span> <span class style="flex:1;"><span class="headingr" id="headingr-4"><a href="#loc-5">Images</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">   ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-5"><a href="#loc-6">16 bit register</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">   ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-6"><a href="#loc-7">8 bit ALU slice</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">   └─</span> <span class style="flex:1;"><span class="headingr" id="headingr-7"><a href="#add8">8 bit adder</a></span></span></span></p></div></span><span class="table-of-contents" style><script>document.addEventListener('DOMContentLoaded', function() {
let tags = ['h2', 'h3', 'h4'].flatMap(x => Array.from(document.getElementsByTagName(x))).sort((a, b) => a.getBoundingClientRect().top - b.getBoundingClientRect().top);
let pageHeight = document.documentElement.scrollHeight-window.innerHeight;
document.addEventListener('scroll', (event) => {
let progress = -(document.documentElement.getBoundingClientRect().y / pageHeight);
let delta = progress * window.innerHeight;
let idx = tags.map(x => 0 > x.getBoundingClientRect().top - delta).lastIndexOf(true);
Array.from(document.getElementsByClassName('headingr')).map(x => x.classList.remove('current'));
if (idx != -1) {
document.getElementById('headingr-' + idx).classList.add('current');
}
}
);
})</script><style>
.table-of-contents > p > span { width: 100%; }
</style></span></td></tr><tr><td><br>
<a href="index.html"><b>Website Home</b></a> <br>
</td></tr><tr><td><p>Renderings of this page:</p><ul><li><a href="#" onclick="gotoVariant(&quot;.min.pdf&quot;);">minimal PDF (printable)</a></li><li><a href="#" onclick="gotoVariant(&quot;.nano.html&quot;);">minimal HTML</a></li></ul></td></tr><tr><td><a href="atom.xml">Atom feed</a> <br>
</td></tr><tr><td><style>
@media only screen and (max-width: 1200px) {
.sidebar {
display: none !important;
}
.column-fixed {
width: 0% !important;
}
.body-column {
left: 3% !important;
}
}
@media only screen and (max-width: 1800px) {
.body-column > span {
width: 75% !important;
}
}
@media only screen and (max-width: 1200px) {
.body-column {
width: 97% !important;
}
.body-column > span {
width: 100% !important;
}
}
.hide { display: inline; background: black; transition: background 0.3s linear; }
.hide:hover, .hide:focus { background: transparent; }
</style></td></tr></table><style>
.column-fixed > table > tbody > tr > td > * { width: 100%; }
</style></span></span></td>
<td><span class="body-column" style="position: absolute; left: 28%; width: 72%"><span style="
width:50%;
display:inline-block"><div style="
"><p><br></p><h1>etc-nand</h1></div><div style="
"><br>You can click the PCB images to switch to the other side.</div><div style="
"><p><br><span id="loc-1" style="text-decoration: underline"><h2>Overview</h2></span></p><p>etc-nand is a real-world <a href="https://github.com/ETC-A/etca-spec/">ETC.A</a> CPU built from almost only quad NAND gate ICs (74hc00)</p><p>It will probably be finished in a few months.</p></div><div style="
"><p><br><span id="loc-2" style="text-decoration: underline"><h3>Estimates</h3></span></p><p>Estimated gate count:</p><ul><li>2800 NAND gates</li><li>320 tristate buffers</li></ul><p><br>
Estimated component counts:</p><ul><li>700x 74hc00 quad NAND gates</li><li>40x 74HC54 octal tristate buffers</li><li>a few simple resistors</li></ul></div><div style="
"><p><br><span id="loc-3" style="text-decoration: underline"><h3>Planned Specifications</h3></span> ETC.A base instruction set + byte operations + S&amp;F + Von Neumann</p><p>The CPU will communicate with peripherals over a 16 bit data + 15 bit address memory bus</p></div><div style="
"><p><br><span id="loc-4" style="text-decoration: underline"><h2>Purchase</h2></span> You will be able to purchase one in the future.</p><p>Stay tuned!</p></div><div style="
"><br><span id="loc-5" style="text-decoration: underline"><h2>Images</h2></span> Images of PCBs that are either already manifactured or currently beeing manifactured by JLCPCB.</div><div style="
"><p><br><span id="loc-6" style="text-decoration: underline"><h3>16 bit register</h3></span></p><img draggable="false" tite="Click Me!" src="res/etc-nand/reg16_front.png" data-other="res/etc-nand/reg16_back.png" onclick="swapFrontBack(this);" style="width:80%; cursor:pointer;"><script>
function swapFrontBack(img) {
let oldsrc = img.src;
img.src = img.dataset.other;
img.dataset.other = oldsrc;
}
</script></div><div style="
"><p><br><span id="loc-7" style="text-decoration: underline"><h3>8 bit ALU slice</h3></span> A <a href="#add8">8 bit adder module</a> will be placed in the middle</p><img draggable="false" tite="Click Me!" src="res/etc-nand/alu8_front.png" data-other="res/etc-nand/alu8_back.png" onclick="swapFrontBack(this);" style="width:80%; cursor:pointer;"><script>
function swapFrontBack(img) {
let oldsrc = img.src;
img.src = img.dataset.other;
img.dataset.other = oldsrc;
}
</script></div><div style="
"><p><br><span id="add8" style="text-decoration: underline"><h3>8 bit adder</h3></span></p><img draggable="false" tite="Click Me!" src="res/etc-nand/add8_front.png" data-other="res/etc-nand/add8_back.png" onclick="swapFrontBack(this);" style="width:80%; cursor:pointer;"><script>
function swapFrontBack(img) {
let oldsrc = img.src;
img.src = img.dataset.other;
img.dataset.other = oldsrc;
}
</script></div></span></span></td>
<td></td>
</tr>
</table>
<script>
function gotoVariant(variant) {
window.location.href = window.location.href.replace(/\.\w+.html/g, variant);
}
window.addEventListener('beforeprint', (event) => {
gotoVariant('.min.pdf');
});
</script>
<script src="coffee.js" async>
</script>
</body>
</html>