We’re not exactly sure how old [SnailMail] is, but he’s probably a member of Generation Alpha considering that to our wizened eyes the lad looks only slightly older than a fetus– which makes it all the more impressive that he’s written his own text editor, from scratch, in C– on a 386. See, [SnailMail] tried to learn the modern way, with IDEs that have code completion and AI integration, but his thoughts couldn’t gel in the modern environment. So he went online and bought an old IBM-compatible complete with monochrome amber monitor, and a whole 4MB of RAM. Big spender that he is, [SnailMail] upgraded that to 8MB.
Rather than fall victim to the siren song of Wolfenstien 3D or SimCity, he set out to learn to code: C, specifically, since that language bridges four decades between [SnailMail] and his new PC. Even more specifically, he got ahold of disks for Borland Turbo C and Turbo C++, which brings back memories for some of us. Of course the lad also had to learn how to use a DOS PC at the same time, but a teen in the 80s with a fresh box would have climbed the same steep learning curve. Some of you probably remember doing so yourselves. Just like you–or the hypothetical teen in the 80s–[SnailMail] did it not by googling or begging Claude for answers, but by digging into books. Many books.
After all the reading, he started with a text editor, something we remember being a pretty big project not given to first year students. Video evidence suggests he pulled it off. He describes how his solution works from about 8:00 in the video, so you greybeards in the audience can judge his work for yourself.
If you’re a member of Gen Alpha reading this and looking to learn to program, we cannot recommend this technique highly enough– [SnailMail] is going to have a better understanding of the underlying logic of computer science than a lot of CS grads being frocked today. Especially when you consider he ends by promising to learn assembly, something we heartily endorse.

I didn’t touch C until much later (90 or so). BASIC on Apple hardware and various versions of Pascal (and TurboPascal) on x86 hardware.
As an owner of an autographed 1st edition of the C Programming Language by K&R, I applaud this young man. I also used Borland C, so additional kudos for that.
First language was 68000 assembly.
Yes, I’m a baby boomer.
68000 assembler?
Luxury!
I started with a Hp 6024/5 and much later, a 6800. The instruction set looked alot like a PDP 8.
The Bible… Signed! This late Gen X bows down.
I am rewriting classic how to program by Deitels exercises like knights tour and eight queens in java by without using a single private instance variable. I am using Late 80s structured programming and by using local variables and passing parameters only of which I am a master. I was told private instance variables are crashing servers due to threads issue, and my programming can be used seamlessly on web with million users using it at the same time. I have done many complex programs already. More will come later by God’s grace
Good for this young lady, 😀 Hopefully more young women will follow suit.
modernity ended 1930.
Hard relate: I learned 6502 with 32k between 83 and 89 then my family fell on hard times and I didn’t touch a computer until 1996 and went to college and learned HTML and then the brand new language of JavaScript, at some point I got curious about bridging the two worlds and installed dosbox on my mac and learned to write dos games in C from second hand books that I bought for 99p. It was the most fun I’d had with a computer since I was a kid
I would hire him so fast he’d but an electric car on the way home.
80s DOS? PC-DOS 3.30 (’87) had a fine set of manuals, I remember.
Very user friendly, with color graphics.
Another pair of third-party books I fondly remember are about the cartoon character “M.S. DOSe”.
They’re humorous, in German and from the 90, unfortunately.
ISBN 3-89390-430-1 and ISBN 3-89390-329-1
Lovely nostalgic picture. NC on an amber monitor.
That’s a good decision, actually, I think.
For a developer’s PC, a Novell server, running Windows or a CAD Workstation a few dozen MBs of RAM make sense.
It also allows good balance of RAM (a few MBs for XMS, a few dozen KBs for UMBs, a few MBs for EMS and large SmartDrive HDD cache).
Up to 16 MB are safe on most 386/486 motherboards, because of the maximum cacheable area.
Because with the common motherboard cache of the time, RAM access past 16 MB nolonger was being cached, causing slow downs.
(With just 64 KB of motherboard cache, it caches up to 16 MB if there’s dirty bit, otherwise it caches up to merely 8 MB.)
16 MB was also the maximum physical range of both 80286 and ISA bus (16/24-Bit).
386SX motherboards thus had a 16 MB limit, too.
On Pentium PCs, with common motherboard cache of 256KB, the usual cache able area was 64 MB.
That’s also the maximum of RAM that older XMS 2 memory managers support.
Such as the Himem.sys shipped with MS-DOS 6.x (MS-DOS 5 Himem.sys still had 16 MB limit).
For more memory, Windows 9x Himem.sys can be used (XMS 3).
But beware, the Himem.sys in DOS 5+6 and 7.x (Win 9x DOS) do address memory in different directions.
One is top-down, another one us bottom-up. That’s important for RAM outside of cacheable area.
For best/most trouble-free memory managment, dedicated EMS cards and RAM/UMB cards are recommended (say Lo-Tech 2MB EMS card, Lo-Tech 1 MB RAM card).
Because they provide RAM without the need for V86 memory managers.
Everything thus works cleanly in Real-Mode.
They’re 8-Bit cards, however, and thus cause poor performance newer PCs.
Together with QRAM’s DOS-UP.sys, USE!UMBS.sys and other utilities memory can be optimized on any 8088 or higher PC. Without the need for V86.
Otherwise, if Real-Mode compatibility isn’t important, the once popular QEMM (say 7 or 9) can help. 386MAX, too.
That’s more sophisticated than EMM386/MemMaker.
A lesser known gem I recently read about is Helix Multimedia Cloaking.
It works differently, I read. Puts large drivers for mouse, cache and CD-ROM into Extended Memory.
An older, related software was Helix Netroom. That’s where MemMaker utility came from, I think.
Some 286/386/486 motherboards also had offered chipset EMS (and UMB memory).
On later PCs with PCI bridge, UMBPCI can be used to provide hardware UMBs.
As an emergency solution, EMS can also be provided by so-called LIMulators.
Such as EMM286, Above Disc, Turbo EMS or EMS Magic.
Some even support using HDD (swap file) and have Window 2 compatibility.
Hope that little summary helps a bit, it may or may not contain errors.
MS-DOS memory managment was or is a game of its own.
Please, BASIC was 80’s language!
Back when computing was fun. I got excited when I discovered, with the help of Edit in binary more, the ExitWindowsEx DLL call to restart Windows 95. No internet access at the time, just digging around the system.
Nobody would ever need more than 640K of RAM, so why bother upgrading to 8 MB? :-P
I applaud this young person for the Approach. Better than mine at the time: I read Kernighan Ritchie and started working as a professional programmer using Computer Innovations´ C86 compiler.
However, I was previously literate in electronics, assemblers and comfortable with programming in hex editors for various processors. I’m a boomer, quite obviously.
He would probably have been even more enthusiastic (as we were) at the time because back then it was all new to mankind at large. I still remember the feeling of exploring uncharted terrain, potentially upending the way people live. You all know what actually happened but that’s a different topic entirely.
Kudos to [SnailMail] for resisting the lure of modern gadgets in favor of enabling his own brain for the task. He would be the kind of person I’d enjoy hanging out with, given physical proximity.
Ah, nostalgia galore.
Back in the day the first program I made was
Bulls and Cows— what became the basis for the Invicta game ofMastermind— on an IBM S/360 Model 30 (16kB memory, 5 tape stations, a console, 2×5MB DASD (hard disks) and a line printer). I programmed it in machine code (hex), entered it on the front panel, it took some time, although I can’t remember how much.It was played on the front panel too. Start the program and it loops until
Interruptis pressed (that was my way of generating a random numbers by just counting until the interrupt). Enter a guess with the hex dials, pressInterrupt, see the amount of correct guesses (i.e. lit lamps in theRegister 1display) and the amount of misplaced guesses (i.e. lit lamps in theRegister 2display), enter a new guess, and so forth.I was rather lucky that I got access to the computer, which was owned by a mortgage institute where I had an after-school job as a typist. The security measures back then were horrible compared to today’s standards.
Btw, you can still play SimCity on modern systems, it’s called Micropolis
Also purchased a copy of Turbo C. I found it very useable, and actually did a course in Windows 3.1 programming with it. Might even still have the disks somewhere, though ISTR it was released as a free download at some point.
There’s value in starting from the bottom and working your way up. Modern coding is a lot simpler, but you lose touch with the hardware.
(retired now, but did embedded systems hardware)
Hi, speaking of Windows development, the successor “Turbo C++ for Windows” was a rival to “MS Quick C for Windows 1.0”.
Quick C was not bad for Windows programming, at all.
Unlike Windows SDK and MS C 6, it does run entirely on Windows 3.x.
No need to fiddle with the limitations of the DOS environments.
Such as running out of memory for path variables or conventional memory.
“Turbo C++ for Windows” must have been similiar, I think.
Again, just saying. Microsoft’s Windows SDK on DOS was quite massive.
Running it on OS/2 helped, maybe, if the DOS compiler/linker were OS/2 Family API applications.
When run on OS/2 or NT (via 16-Bit OS/2 subsystem), they could access large amounts of memory.
Alternatively, if they used DPMI, it would have helped, too.
Turbo Pascal 7 or Borland Pascal 7 (full version) offered 16-Bit DPMI support for compiled applications, I think.
Not sure about Turbo C or Turbo C++, however.
Both OS/2 Warp and Win NT had an DPMI host.
Hopefully this same young man will stop listening to hippity hop “music” and instead listen to the music of my youth, particularly that song about needing a gyro “straight from the fight” and making love at midnight and getting caught in the rain!
cringe…
Music from your youth? Vaudeville? Does this page have a “Hide racist undertones” button?
Borland Turbo Pascal/C/C++ all used a single-pass compiler and ran compilation in RAM. That’s why they were so fast.
It was good enough for student projects like endless hello worlds, binary searches and trivial artillery games. For anything else it sucked bad compared to gcc.
Jealous? ;) I’m not sure about that open sausage compiler collection, but Turbo Pascal 3 was historically relevant.
It allowed porting applications between CP/M-80, CP/M-86 and DOS.
And it created very small and fast COM applications.
On CP/M-80, it demanded for an Z80 or compatible (NSC800).
The plain i8080 ot i8085 wasn’t adequate for its capabilities.
It also supported overlay files (OVLs) to overcome memory limitations.
The TP3 menu was not IBM PC-specific and ran on MS-DOS compatibles, too.
Later, Turbo Pascal 4 (DOS) created EXE files, introduced an IDE and supported TPUs.
It also had optional Borland Turbo Graphix Toolbox (BGI drivers etc).
Turbo Pascal 6 then became a classic and Turbo Pascal 7 (TP7) and Borland Pascal 7 (professional version, BP7) offered Turbo Vision to developers.
BP7 also included a Windows compiler based on the earlier Turbo Pascal 1.5 for Windows (TPW).
Which created very lightweight and superfast Win16 applications.
Its WinCRT unit allowed a pseudo-DOS output on Windows.
(TPW 1.x compiled EXEs were compatible with Windows 3.0 in Real-Mode on 8088 PCs).
The later released Delphi 1 still can compile TPW projects.
About the RAM compilation..
By mid-80s it was possible to use a RAM drive on PC/ATs without much effort.
They were among the first type of software to make use of memory beyond conventional memory (printer spoolers being another type).
Ramdrive.sys/vdisk.sys were included in MS-DOS/PC-DOS 3.x.
So in principle, it was possible to run compilers/linkers on a RAM drive.
I won a round of free classes to learn Borland c++ when I was a freshman in highschool in 1993, I was the youngest person in the classroom and some of the topics involved math that I wouldn’t learn for another 4 years. I still use c+ on and off. One of the better languages in my opinion. Wish it had been pushed in more schools as curriculum.
C is fairly modern and no thanks I don’t need to go backwards until poorly designed spaghetti universe
Does anybody remember the ollavetti audit 5? Mmm punch cards
Learning C is interesting and stuff
Wow, now I really feel old! I wrote my first editor on a 6800 in assembly language.
“C” from 20+ years ago on the PC can be found in QUINCY.
Really easy environment for learning the foundation but one must understand that all the C-standards (and capabilities) we observe today did not exist during that age.
http://quincy.codecutter.org/
Millennial here, I had a basic computer programming course in highschool. It wasn’t super useful like most high school courses at the time, although I’m being a little biased as I didn’t care much for high school. I did not go into programming after that.
Jeremy spoke in class today. Do not imagine emoticon here.
Pretty cool topic but there is so much wrong with this article
https://colorcomputerarchive.com/repo/Documents/Books/The%20C%20Programming%20Language%20%28Kernighan%20Ritchie%29.pdf
A must read IMHO xXx💜xXx
I remember Summer of ’88. I had learned to read 6510 assembly (and could disassemble a good chunk of machine code in my head), but with no theory, the “why“ was lost on me.
My parents got me a Pascal compiler and a C compiler for my Commodore 128 for my 17th birthday. I focused on Pascal because that was the language universities focused on. Pascal pointers baffled me. When I finally switched to C, everything clicked. Pointers were just a way to access load or store indirect instructions. And the purpose for all the push/pop instructions I’d been seeing made sense.
I also recall spending countless all-nighters in Turbo Pascal. (See above, mostly I had to work in Pascal; only one professor in the CS department would let us use C and his classes filled up fast.)
Having written a text editor in C (MsgEd) for those who remember FidoNet), nice job! It’s not horribly difficult, but it’s also not an easy task.
I love this article and the developer’s approach. High level languages have their place, but when something goes wrong, you need to understand the underlying computing, otherwise debugging becomes a lesson in futility. I’ve seen this play out with so many young developers who never bothered to learn the core technologies.
I learned 6502 assembler on a Rockwell AIM-65 circa 1977. I had to prove my understanding of it before I was allowed onto the “big computer” — a DEC PDP-8 — using Fortran. C to me is the perfect marriage between assembler and a high level language, sort of a high level assembler. Glad to see it find new fans.
Trivia: I was briefly “digital penpals” with Dennis Ritchie circa 1997. I think I have those messages in my archives somewhere. Oh, and my eclectic collection includes an autographed Apple I schematic, a print roller for making IBM punch cards, an original IBM Think pad (it was originally not a computer!), a couple of circuits from an IBM tube computer, a tube from a Univac 1, and a bunch of other little trinkets from the history of computing. Unfortunately, my hardbound K&R C second edition is not autographed…
Guess what, in about 10-15 years all those “precious” trinkets will end up in a skip. Books and schematics maybe will live once more as a cardboard box or toilet paper.\
Time is evil but it’s justice for all.
You do realize that there are many systems still running COBOL ?
Job security, if one can get in.
During COVID my 17 year old son with interests in maths, music and languages wanted a new challenge. I ran up a Linux terminal on his chromebook and installed gcc and gave him a basic makefile.
He found a website of maths problems where you upload the answer and set about solving them. As they got harder, there were some great lessons in optimisation – an initial brute force solution that took minutes could be reduced to a few seconds.
Call me old but from C to machine code via YAC and LEX and a quick tour of logic gates and barrel shift registers and you have a thorough grounding in computer science.
It’s funny. I decided to do something similar when I got frustrated while learning to use arduino. I got frustrated with the gap between using libraries and writing the kind of code that goes into libraries so I decided to learn Forth. It went pretty well! I used mecrisp-stellaris Forth and that taught me a lot about what a microcontroller is. There’s something to be said for approaching a problem from a different angle when you get stuck.
My favorite question for this and the assembly is better people: Where is the product or git repo?
Where can I see something more efficient without memory leaks and exploitable bugs?
git.kernel.org
Seems like a good way to learn and also enjoy your retro tech hobby. I like the amber CRTs, but I wouldn’t get one just to have it.
Reject modernity, return to 80s, learn Common Lisp. You’ll get execution speed in the same order of magnitude than C but the productivity levels of Python (and even beyond).
I never understood, why single board computers, like the Raspberry Pi, always want you to program in Python.. Compared to C, Python is slow (about 30% slower), and bulky.. you’re putting an interpreter with the ASCII Python script, where as with C, you have the compiled program, streamlined, no waste. Ironic, to @mark g, I used to Love amber screens, I always found green and white phosphorus screens harsh on the eyes.. A lot of the times, I was using a CP/M machine, writing little utilities in C, A company called Hi-Tech had released both their 386 back, and CP/M-80 compiler to the public domain, and I was writing on both platforms.. Around the same time, a company called Venturcom, had released the Digital (DEC) Professional-350 and 380 computers, and I compiled the Software Key they released the source code in a zip file, for activating them, so since the install disk Images were Teledisk stored, I compiled the key generator which was in C, along with the images.
I think people are associating the wrong ideas with programming languages. C for speed, Python for AI, Rust for safety….
The concepts matter, the ideas, the algorithms, the process. It’s not that Doom is written in C, it’s how Doom is doing the things it does. You can write memory safe code, you just need the discipline to follow an ownership agreement and structure that demands it, like rust enforces, but maybe less cringy. C could be prettier, like python, with the correct/pythonic standard library.
Some concepts have been lost. Self modifying code on a 6502 is awesome, makes your Nintedo games fast. vtables on the Amiga are way better than anything C++ ever offered. I have seen 3D game engines that use no malloc, single stack, so fast, no fragmentation.
i don’t like python but C really can’t be expressive the way python is because defining a function and passing it to another function can’t be done in-line.
The models are ok’ish in converting one language to another. As long as the code is mostly self contained. “Convert to python.”
Strangely the google model seems to buck in places. Adds “simplified” code in places, “Only adding 1 of 10 cases here for simplification” like some lazy teen…
Learned C and assembly (mips) in my undergrad curriculum, I would say its very helpful to learn, although a good school should teach those already
C? Try Sphinx C– (before it was taken over by the Russians). Careful because accessing a wild pointer could blow away your CMOS settings. On the plus side you’ll get adept at reinstalling DR DOS and windows 3.1
Speaking my language.
I wish I could tell [SnailMail] the following:
I learned 6502 Assembly on the Apple ][+ the year it came out when I was 14 so I could have a decent terminal program to wardial into the FIDONET, Random BBSs, and the ARPANET before it became known as the internet on a weird internal Zoom Modem with a nonstandard RS232 connection using only the White Refrence Manual. It was really revealing, and much simpler than the 8080/8086/x86/x64 mess to learn.
I would recommend an MAME style emulator.
They can boot into actual machines.
Or a VM.
And learn C++.
It’s a higher level language that lets you drop into assembly.
Then learn Perl. (From the 90s or 2000s)
And a little early LISP wouldn’t hurt either.
Boreland rocked.
Perl is Open Source, and looking at those physical manuals and experimenting is great.
Jump up and down the abstraction layer stacks, and sideways. (Including the network stack.)
Try some self modifying code (thats wild and useful, and of course dangerous if you don’t know what youre doing, but love is just a reboot away.).
Ignore HTTP/HTTPS and talk to ports directly.
Write some email servers and programs and web-browser using various web-agent signatures. Download what you want without the bloat.
When you know how the metal works you’ll wonder why everything is so ***m slow and bloated.
Ask yourself why I could boot my Apple ][+ and be in my word processor in 30 seconds, and it takes minutes for Windows to fully load. Why, despite the fact that EVERYTHING has to run on bare metal, everything is actually pseudo code and compiles just in time. Every time. We used to call that an interpreted language.
Ask yourself why everyone is using probabilistic NNs and LLMs to guess about how to do determining stuff that was done better and faster in the 80s. Why word-perfect’s last text word processor’s spell check and grammer checker runs rings around what’s available today.
Why rudimentary speech recognition (because it matched pure sound, not guessed) was done on my Apple ][+ on through the tape port for a cassette tape recorder for voice and bad sounding music and most stuff cant get any of it right anymore.
Why an LLM cant keep track of order, or takes more than a water bottle’s worth of cooling water to calculate a simple 1+1=2. And a calculator function could do it a million times on a simple button cell battery.
Do that and you’ll be a million times ahead of the current people pouring trillions of dollars into programming and guardrailing things around a neural net pretraind mostly internet garbage no one expected to produce apparently rational speech.
And not producing convincing nonsense.
AND you’ll be a programming wiz.
Earning as much as a self-checkout attendant at local Lidl.
Represent for the xenials, remember the analog but still the first fully emersed digital population. Oh this is cool to the boomers who that C was hard… We throw c around now for fun…. Arduino for example. Cool retro rig tho…
We used Borland C and C++ for DOS in the 100 and 200 level Computer Science classes. That was the late 90s, that stuff was already old but they felt it was still just as good for teaching the basics as anything new and they actually wanted to save us some money. One of the professors actually got permission from Borland to give it to us.
I have thought about digging that out and revisiting some of my old school projects. Maybe even finish off one that I never got 100% working and always meant to return to.
But… buy a 386 and an amber monitor just for that? No way! Most of it should work just fine in Dosbox. If that’s not good enough then an emulator. And if you really just feel that is cheating you can always install DOS on a modern pc! You can even dual boot so you don’t need a second one.
Even as an elementary school kid in the 80s I remember using a color monitor!
Pascal and assembler is better
Small.is the gate and narrow the way
This is the only way. Otherwise you are a drop in the pond and that fact looms over you. This path strips you naked and forces you to include the environment as needed. This is the way. Beware, there be dragons and THROUGH them salvation.
I taught myself C… but only after learning assembly language on 8- and 16-bit CPUs…
I will do this after i have made enough money to settle down and locked it in this way. But going through the aged learning right now hell no.