GloriousCow
Veteran Member
- Joined
- Oct 27, 2022
- Messages
- 591
| VCF Southeast | Aug 01 - 02, 2026, | Atlanta, GA |
| VCF West | Aug 01 - 02, 2026, | Mountain View, CA |
| VCF Midwest | Sep 12 - 13, 2026, | Schaumburg Convention Center, IL |
| VCF Montreal V2.0 | Nov 07 - 08, 2026, | Saint-Lambert, Montreal, Canada |
| VCF SoCal | TBD, 2027, | Southern CA |
| VCF East | TBD, 2027, | InfoAge, Wall, NJ |
| VCF Latam | TBD, 2027, | Bahía Blanca, Argentina |
| VCF Pac. NW | TBD , 2027, | Tukwila, WA |
| VCF Southwest | TBD, 2027, | Westin Dallas Fort Worth Airport |
Just stumbled across this thread, quite surprised to see activity this recent! I'm slowly building up the parts to take on building one of these, but struggling to find sources for Capacitors 5, 8, and 9 (the axial ones). I'm not sure what material they're made of and I'm unfortunately not quite yet familiar enough with electronics to know what would be a suitable replacement; can anybody point me in the right direction? Thanks!
Super helpful, thank you!Whatever they were made of you probably don't want that.
For a modern replacement, i'd suggest a metallized polypropylene film capacitor.
For C5 & C9 this should do
and for C8
You can search for "0.047 uF Axial Film Capacitors" or "0.01 uF Axial Film Capacitors" if you'd like to look at other options. They also come in yellow! Just make sure they're at least 50VDC but just about every modern one there will greatly exceed that rating.
For a modern replacement, i'd suggest a metallized polypropylene film capacitor.
You can search for "0.047 uF Axial Film Capacitors" or "0.01 uF Axial Film Capacitors" if you'd like to look at other options. They also come in yellow! Just make sure they're at least 50VDC but just about every modern one there will greatly exceed that rating.
Super helpful, thank you!
You can find everything, as long as you are willing to do some dumpster diving on ebay or aliexpress.Are there any people out there interested in going through the entire parts list to determine what's still available and what replacements are available for what's no longer able to be found?
This would help bring this project back alive.

In the above image I didn't. I exported to the top layer of the svg "Sockets + Chips + Expansion-Slots + Misc-Components + Functional-Labels + Silkscreen" which left a transparent layer below to the traces, sourced from the BRD. The traces themselves are composited as an SDF rendering which is sourced from the active state of the pins.How did you map the net list to the SVG?

#include "ic/ic_74s00_u81.h"
#include <spdlog/spdlog.h>
namespace bench {
IC_74S00_U81::IC_74S00_U81() : CallbackComponent("74S00") { set_description("Quad 2-In NAND"); }
void IC_74S00_U81::install(Socket& socket) {
auto connect_pin = [&](int p) -> Pin {
Signal* s = socket.pin_signal(p);
if (s) s->connect(this);
return s ? s->pin() : Pin{};
};
auto pin = [&](int p) -> Pin {
Signal* s = socket.pin_signal(p);
return s ? s->pin() : Pin{};
};
// Gate 1: pins 1,2 -> 3
gates_[0].a = connect_pin(1);
gates_[0].b = connect_pin(2); // RAS (input)
gates_[0].y = pin(3);
// Gate 2: pins 4,5 -> 6
gates_[1].a = connect_pin(4);
gates_[1].b = connect_pin(5);
gates_[1].y = pin(6); // RAS (output)
// Gate 3: pins 9,10 -> 8 (~CAS output)
// Physical pin inputs ignored -- gate 3 uses virtual TD1 (delayed RAS).
gates_[2].a = connect_pin(9);
gates_[2].b = connect_pin(10);
gates_[2].y = pin(8);
// Gate 4: pins 12,13 -> 11
gates_[3].a = connect_pin(12);
gates_[3].b = connect_pin(13);
gates_[3].y = pin(11);
// VCC
Signal* vcc = socket.pin_signal(14);
if (vcc) vcc->connect(this);
// Pin directions
for (auto& g : gates_) {
declare_input(g.a);
declare_input(g.b);
declare_output(g.y);
}
}
void IC_74S00_U81::connect_addr_sel(Signal& addr_sel) {
addr_sel_pin_ = addr_sel.pin();
declare_output(addr_sel_pin_);
}
void IC_74S00_U81::on_power_on() {
td1_pending_ = Level::HiZ;
if (addr_sel_pin_.idx != 0) addr_sel_pin_.drive(Level::HiZ);
for (auto& g : gates_) {
bool both = g.a.level() == Level::High && g.b.level() == Level::High;
g.y.drive(both ? Level::Low : Level::High);
}
}
void IC_74S00_U81::on_power_off() {
td1_pending_ = Level::HiZ;
if (addr_sel_pin_.idx != 0) addr_sel_pin_.release();
for (auto& g : gates_)
g.y.release();
}
void IC_74S00_U81::on_cycle(Fiber /*caller*/) {
// Gate 2 first (drives RAS)
{
auto& g = gates_[1];
Level a = g.a.level(), b = g.b.level();
bool both = a == Level::High && b == Level::High;
Level y = both ? Level::Low : Level::High;
g.y.drive(y);
}
// Gate 3: virtual TD1 -- use delayed RAS, not pin inputs.
// Skip the update when gate 2 inputs are HiZ -- that indicates a
// spurious re-evaluation from a bidir release-and-re-drive glitch,
// not a real memory command. Advancing td1_pending_ in that case
// would collapse the row/column split into a single eval.
{
Level ras_now = gates_[1].y.level();
Level g2a = gates_[1].a.level();
Level g2b = gates_[1].b.level();
if (g2a != Level::HiZ && g2b != Level::HiZ) {
if (addr_sel_pin_.idx != 0)
addr_sel_pin_.drive(td1_pending_);
Level out = (td1_pending_ == Level::High) ? Level::Low : Level::High;
gates_[2].y.drive(out);
td1_pending_ = ras_now;
}
}
// Gates 1 and 4
for (int i : {0, 3}) {
auto& g = gates_[i];
bool both = g.a.level() == Level::High && g.b.level() == Level::High;
g.y.drive(both ? Level::Low : Level::High);
}
}
} // namespace bench
(> 95%?) has been AI powered
It shouldn't be a disappointment. I've written emultors before by hand (again, see DOSBox and Munt, among others.) The AI here just happens to be able to type 100 times faster than I can. The DAG, the optimization to getting it running at native 4.77 Mhz speed, is all human. The slog (type this boilerplate here for the nth time) is delegated to AI. Waving aside the actual hype train for a moment, it's a tool. I wrote in two weeks what before would have taken months or more.Right, well, that's admittedly a bit of a disappointment. Apologies; I will make no further comment on the matter.