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.
Me too, but I had his haircut, so this story made me chuckle…
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.
Elon better snap him up, a’fore my guys at the Marshall Space Flight Center can git him to do rope-memory for SLS.
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
[turns green with envy]
K&R was the book I learned C from as well. After writing 6800 assembler for a while, C was a joy! My university courses were taught in Pascal, which I mastered but never liked. At Data General, I used DG/L, their version of Algol. It was OK.
But, C? All the flexibility of assembly, with the readability and ease-of-use of assembly :-) Seriously, I found it quite readable and it made my transition to Verilof easier.
Back to K&R. Hands down, the absolute best documentation and learning tool for a language that I have ever found. The Springer book for Pascal has got to be one of the worst.
Pascal is actually a much better language overall but that ship sailed many moons ago. If the Springer book you’re referring to is the User Manual and Report I can understand the frustration – we used that only as a reference.
i never figured out how to do arrays that didn’t make me die inside with pascal so i gave up
Pascal was designed as a teaching language back when CS students had to timeshare a mainframe or mini. Its primary claim to fame is that it uses a single pass compiler that compiles to a semi-interpreted intermediate, “P-Code”. Its a pretty good applications language but its not much use for systems programming (that is, writing computer infrastructure).
(…and yes, a GUI is an application despite its pretentions to be an operating environment.)
Good for this young lady, 😀 Hopefully more young women will follow suit.
Not sure what “Gen Alpha” is but bless this young man! We need (many) more like him instead of the know-nothing-AI-junkies polluting the workforce. Now get off my lawn!
The generation that came after Gen Z, Gen Beta is the generation that is starting to be born.
Since we ran out the regular alphabet with Gen Z (1997-2012), the new generations will be named after the Greek alphabet, starting with Gen Alpha (2013-2027/28).
(Although there were still plenty of letters available, since we started designating generations by letters with Gen X)
Available, but out of order. Still, there are other western alphabets. The next generation after Z could have been Å.
Quick glance at ASCII table tattoo.
After Z comes [
then /
then ]
Embarrassing.
\ not /
The tat isn’t wrong, I’m just slow.
“Gen Alpha” are the successors to the delightful “Gen Z”s, who are likewise the successors to “Millennials” – AlsoDave (these are the Daves I know I know, these are the Daves I know)
There are overlaps and different interpretations, also.
Not all countries use the US definitions, also.
For example, in early 90s, kids were still being told they’re part of then-current Gen X.
The Gen Y and Millennial definition came later. It’s all just arbitrary, let’s just relax.
There are also micro generations. Xillenials and Zillennials, for example.
Then there are “digital natives”, or there’s “Generation C64” coined in Germany.
https://de.wikipedia.org/wiki/Generation_C64
C64 sold approximately 3 million units in Germany, against 61 million people around the time. Only 5% of the population ever owned one. Even if we account for the 20 million people figure given in the wikipedia article, that’s still a ratio of roughly 1 computers per 7 kids, and that’s not even counting East Germany in yet.
The notion that the “C64 generation” has moved to many leading positions in the society has more to do with the fact that the 1 kid out of 7 was most likely born to a rich family. They’re nepo-babies, who became the definition of a generation because guess who owns the media and gets to speak on it now?
Hi there! Not sure what to say. 🤷♂️
I heard so many people here reminiscing about the C64 here in Germany, simply.
At one point, when a father told his son in public that a Zuse was something like his C64 in his youth, I resigned mentally.
Non-fixable that generation. Can’t be argued with. Just smile and ignore.
By contrast, my father and me were more into Z80 computers, such as Sharp MZ 80K.
Even the former east Germans have fond memories of the C64, it seems.
While they techncially merelly had AC-1 and KC-85 computers and some late ZX Spectrum clones, their heart was about the C64.
From what I heard/read, they couldn’t afford buying them but got them as gifts (so-called Westpakete) by their relatives in west Germany.
The AC-1/KC/ZX computers were probably even more rare in real life, because they were not owned by individuals but shared in school, youth centres and computer clubs.
There’s an documentary about C64 home computers in GDR.
https://wwe.youtube.com/watch?v=_QvSNB3ibXk
Here’s an article about home computers in GDR.
https://www.spiegel.de/geschichte/ddr-computer-mit-kilobytes-gegen-den-klassenfeind-a-948669.html
As a former west German I can’t judge these things, unfortunately.
I think I have to believe what articles and fellow citizens tell me. 😕
When something is propped to the status of an icon, many people start to “remember” how they were part of it, and what an important part it was.
Then there is also the company you keep. If you hang around the same class, you’re likely to find people who had it as good as yourself, being able to play with computers when they were kids. That is also what happens with the reporting in the media.
We’re talking about a privileged group who became politicians, business owners, media personalities, famous artists, academics and professors etc. and who consequently got to talk of their interests and pivotal moments in public as the history of the people in general. Yet the numbers show that this could not have been the experience for the vast majority of people at the time.
This is an example of the winners writing the history books.
No, no. Let’s stop it here. We’re not going into that rabbit hole. 😆
I may not been a C64 user back then, nor I am an C64 expert.
And I don’t mean to defend the C64 or its user base here.
Because I’m tired about how it is being hyped by its generation over and over again (like SOMI is as a game).
But still, I do acknowledge the view that the C64 was a mainstream phenomenon, not an exlusive for the elitists.
It rather was the computer of the lower middle class and the workers. The peasants, if we will.
Too many ordinary citizens I talked to told me stories about the C64 that I can’t just ignore, simply. 🤷♂️
And my father and me had computers early on too but we were not rich, either.
We simply prioritized, made less vacations, bought less experience cloths etc.
Or simply saved up money for the few things we wanted to own, rather than being consumption-driven.
We also had to sell things in order to get something. Nothing out of the ordinary.
In addition, Commodore was very obsessed with mass-production and price cuts, after all.
Comparably, NES and Gameboy were mass-produced, too.
In addition, Commodore had a factory in Braunschweig.
So Germany must been sort of a hub for European market to Commodore, I guess.
Just like Nintendo in Großostheim was to Nintendo products in the 90s.
Which explains why Commodore was so popular here.
PC10 and other computer models sold well, too.
Then there were stores like Aldi in W-Germany which from time to time had special offers for C64.
Such as bundles of the C64 with games.
The C64 was sold like a toy, not seldomly. In fact, it was sold in toy stores, too. Like the Amiga 500 was sold there.
Mail order companies such as Quelle, Otto or Neckerman had sold the C64 and other computers, too.
(About elititism, or being rich or being privileged..
To what I read, in the third-world countries, the Famicom had many clones.
Kids in Russia, South America or China probably had more games than the “spoiled” kids in the decadent west.
Because bootleg games in those placed were everywhere, kids traded them.
By contrast, western kids had to pay a much higher price for their original cartridges.
Last but not least, in eastern block, the ZX Spectrum clones flourished. Many of which were homebuilt, remarkable.)
About the C64.. The C64 was not the most expensive part, I think.
It rather was the buggy VC1541 floppy drive (had expensive on-board computer) and blank 5,25″ floppies.
Until late 80s, at least, when 1541 compatibles got available and when the floppy diskette had become a household item.
That’s when the cool C64 kids were into cracking and copying games en masse.
Poor C64 kids in Europe/Germany were limited to datasette releases durin C64 era, basically, which were rather obsolete quickly in the US.
Overseas the 1541 was well established, from what I’ve read.
In east Germany, floppy technology was exclusive to goverment, school and factory.
Merely the Robotron business computers used them. And computer mice didn’t exist to them.
Ordinary citizens with their KC85 or C64 barely ever saw a floppy.
They were lucky to have a datasette drive, if at all.
MCs, audio cassettes, were readily available in both Germanies, though.
Poor C64 kids in both Germanies had a TV or a small mono monitor instead of a color monitor (1084 etc).
The C64 had a strong influence like Windows 95 had, maybe. Like it or not.
After talking to fellow citizens and reading personal stories on forums for years I simply can’t deny myself of that possibility.
There were requests in classifieds sections of computer magazines that said “who can gift an east German citizen a Commodore C64?”.
That shows how much influence the C64 had past the iron curtain, even.
An aquaintance from east Germany told me multiple times how we
was p*ssed that the C64 was out of reach and sold for a fortune in GDR.
He felt being scammed. Even decades later, he’s still upset. 😕
(Sorry about the poor wording. I had a power outage and had to rewite everything from scratch.)
Ah, I see. The good old “history is written by the winners”. 🙂
Makes sense, because why not? Someone has, too, after all.
But that’s also a slightly bit populistic view, isn’t it? ;)
I remember that line from the older folks who grew up after war.
Those folks who held a gruge against the allies, despite all the documented cruelties our German ancestors did.
Not all of them were involved, of course, but many of them.
I tend to believe the witnesses, their stories are too sad and dark to be not imagined.
But yeah, “winners” probably tend to leave out some less heroic bits of their own history.
I sometimes wonder if the line shouldn’t say “history is written by the survivors”, simply.
Anyway, I’m glad that historians do collect artifacts and seek for truth to complete the picture.
The truth always comes out, people say. I suppose that makes sense.
+1
Well, not wrong per se but this is all relative, probably? 🤷♂️
Back then, computers in general were less being widespread.
So defining something based on a “vast majority” as such is slightly paradox, maybe.
Some people of the era were technophobic even. Especially in western Europe.
The ordinary people feared that computers were almighty, all knowing or would take people’s jobs.
Which in turn makes the existing numbers even more notable in a positive way.
Also, there were less people on earth, too, which affects the equation.
Not sure how to put this into words.
Luxury.
When I was a kid we had to first harvest papyrus for punched cards…
Get a grip Joshua.
The heat is getting to you.
Drink more beer.
Post less.
Gen Alphas birth range is about the 2010s to the early 2020s
I cracked DOS with the help command, but I used dosshell for heavy stuff where mistyped commands could cause file deletion.
modernity ended 1930.
This is the way
At least he had now some skills for a job in the Embedded industrie. In this enviroment C is still a standard that everyone is using every day.
Lol sorry for the sarcasm but as a genZ CS student I learnt C too (and even 386 assembly) , and made nds games (4mb ram)
We’re not just AI-slopped like it’s sounding
Yeah, this article is weird. You can learn C on a modern IDE, and you can also turn off all those random features? That’s what I do. And truthfully, learning C only strengthens practice in contemporary OOP? And if engineers are complaining about AI slop… why don’t they engineer something better?
Why don’t they engineer something better? Because they don’t have to – we were doing just fine before LLMs, and the only people who wanted AI were the business owners who didn’t want to pay humans. You know – the objects who buy their products. facepalm
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.
I still prefer learning from books, but I hope he did google things when he got stuck.
I gave up learning C in the 80s because I came across problems that my books didn’t mention, and no one I knew IRL could answer. It’s a good thing we’re no longer limited by who we know and what books we can afford.
Um, in principle, there were online databases in the 1980s.
The online service “CompuServe” had forums and a CB simulator, for example.
Other users exchanged files via computer mailboxes (BBSes).
Either directly via telephone line, over X.25 PADs or AX.25 Packet Padio (ham radio).
Fidonet was a popular mailbox network, I think.
Here in Germany, we had Datex-P service, which was an X.25 provider.
It allowed calling a database in overseas (US or Canada) without paying for huge phone bills.
Sometimes, the database would pay for the user’s connection.
That happened if the user was a member of said database, for example.
Other services/networks were Datapac, Alaskanet etc.
CompuServe Information Manager could use all of them for contacting CompuServe network from outside USA.
Other commercial online services were Genie, Prodigy, Delphi or Q-Link.
They used the X.25 infrastucture, too, I think.
Then, there also were Videotex online service in many European countries.
Such as French Minitel or German BTX (later known as T-Online Classic or Datex-J).
They allowed visiting the pages of computer magazines, too.
Download of “telesoftware” was possible, too.
The Videotex services could be reached via an X.25 link, too, if my memory serves me well.
Then, there was quite a bit of shareware, freeware and public domain on mailboxes and shareware disks.
Some contained textfiles and programs about programming (ASM, Pascal, C etc).
In early 90s, this intensified thanks to shareware CDs.
But it also was possible to get shareware via an “shareware vendor” in your town/city.
It often was a computer shop with a catalog to choose shareware from.
Users could buy an 5,25″ floppy in the shop and have it filled with shareware on a special computer terminal with an 5,25″ floppy drive.
It worked by entering a catalog number on a num pad, for example.
Of course, this was far from mainstream and rxsctly cheap.
But so was hobby computing and hobby electronics. 🤷♂️
I just mean to say that the 80s and 90s weren’t the dark ages.
We had no internet, but not so bad alternatives.
Telecommunications was one the rise, too.
I mention this, because the press nowadays has little idea about pre-internet telecommunications.
Just like people had access to telephones and fax machines, computer users had online alternatives.
They were not dependant on stone tablets, mail pidgeons or medival postmen riding on donkeys anymore. 🙂
Besides this, in many countrirs, there still was the local public library.
Computer books could be read there, the oldschool way! 😎
Lucky for people who knew about those things and had access to them. Nowadays something existing means you can find it and use it. My whole point is in those days the information wasn’t easy to find.
No one I knew talked about them, and I never saw them mentioned in books, so I never heard of BBSes until years later. Even if I had, they would have involved long distance calls my parents couldn’t afford. And you’d have been lucky to find WordPerfect for Dummies in my local library, you weren’t going to learn anything about C in there.
I was fortunate, never lacked for folks who were better than me at…you name it.
You’ve made C to look like some archaic relic, whilst it is still contemporary, and is also the progenitor of nearly all other modern languages.
Why still so relevant? C is the speed of light!
Anything with an advanced virtual 86 mode was classified as a supercomputer in it’s time, and were it not for it’s lesser useful work per joule metric, might still be relevant today.
-=C
“If you think like a computer, writing C makes sense”
“When I read C, I know what the assembly language will look like”
– Linus
Exactly my POV.
I missed the jump from cards to terminals. Maybe not as big as the jump that LLM assistance makes, but stories hint it was big. The exacting nature of our field can tempt this expectation of perfection, but I imagine even the most seasoned of us can do what he’s done and discover a gulf of impactful missing experience. Good to see.
Well, both Unix and C are archaic relics. They already were in late 20th century. That’s nothing new, I think.
Especially that “everything is a file” is such a stone old concept, IMHO.
“stone old” => “bedrock”
No one is born knowing stone old concepts. It’s nice to see practices that have proved useful continue to be in the present consciousness. I have a fondness for C and GDB sessions for the understanding of how a computer works. But they are not my daily drivers.
Please, BASIC was 80’s language!
Unfortunately, very few users had contact with mature BASIC versions.
Most were stuck with home computer versions on ZX81, C64 or IBM PC (toys such as ROM Basic, BASICA, GW- Basic).
Grown up BASICs were, for example: Locomotive Basic v2, Amiga Basic, GFA Basic, Borland Turbo Basic or MS QB 4.x, PDS 7..
In the 90s, Visual Basic on DOS and Windows was king.
the differences between GWBASIC and QB were not really that significant. QB was marginally faster and let you give up line numbers. If you were doing a lot of basic, those were nice enhancements, but when i was actually doing a lot of basic the thing i was actually doing was longing for C. And QB didn’t make me long for C any less.
He has developed a valuable skill by doing this – he learned how to teach himself. For now, the quality of his editor doesn’t matter. He is on his way to becoming an autodidact. For most of us older folks this was a required skill for progress, and sometimes even survival. This lad will have no problem with newer tech…EVER!
Agreed +20. Take an autodidact with minimal computer training vs someone in IT who needs to be spoon-fed and my money is on the self-learner. In my career I encountered people with Literature and Psychology degrees that thought, designed and implemented code better than some CS degree holders I worked with.
Correction. Make that ‘most CS degree holders’
Having spent my whole life in IT, I can concur. The difference being that the “spoon-fed” can code, etc…but they cannot solve problems.
The thing about c is you could actually read and write physical addresses in the machine and do some assembly instructions. C++ changed all that from undocumented to pretty much impossible.
I totally understand why, allowing code to actually control the bits in internet connected hardware is kind of unsafe but c++ wasn’t any fun at all, and as languages became more object oriented it became impossible th figure out what was actually going on.
I have to admit that the first thing I wrote in C was the equivalent of basic’s POKE instruction.
I remember now that I loved to nest assembly code while writing C. So later I often nested C code while programming C++. I can’t remembered if I nested C in C++ to be able to nest assembly code. Was thag a thing?
Yes.
I once needed to make bios calls in Borland C++, force a reboot or something else silly.
I beat the language into submission by embedding assembly in C++.
Don’t recall the details well enough to say if C was involved.
‘Real men’ write self modifying Fortran code, in Haskell.
You are incorrect in your assumption that C++ changed all that which you have mentioned. I’m hoping you are trolling.
Well, c++ made it a lot harder, at least for me.
In c , and on the Amiga, I could write code that would patch another program -the video toaster- to run my code during the vertical interval of the video signal . That was necessary because the other program was turning off all interupts including the part of the os that was reading my hardware. So I had to write assembly code to read the value of one of the game paddle inputs and reproduce the os’s denoising routine because the interupts were turned off by this other program.
Luckily I had a friend who could decompile the vidio toaster software so that I could find where in memory it was running, and patch it to run my code during the vertical interval that took the values of the hardware address over the last 6 fields of video, removed the highest two values because they might have been from a noisy potentiometer, add the other four shift right two bits to divide by four, and write that to a value to a rexx program that the video toaster software would then read.
This all necessary because rexx could read the same value with one line of code except the interrupt in needed was turned off.
This was of course something that we could have fixed in hardware but we already had thousands of these control panels manufactured that looked like a video switcher with a wipe lever, but the Amiga treated as a game controller.
So essentially I had to find another developer’s running code in memory, patch the code that ran during the vertical interval which was only waiting for the vertical interval to be over. The patch would read and de-noise the potentiometer which would have have been done by the OS so that my Rexx program could send a command to the rexx port that was part of the toasters API
There’s a lot more to the story. I showed the toaster developers my decompiled c of their software, with some bugs I had found, and explained what I was doing. Their reactions were pretty funny.
It was definitely one of those projects that I would not have taken on if I had known it was going to be more than some Rexx code reading a system value an sending a message to the toaster software the toaster.
Anyway I couldn’t figure out how to do that in c++. Frankly I’m equal parts amazed and alarmed that it was possible, since obviously a bad person could very bad things finding a program running in memory and writing over it with your own code
So, I tried to write code to directly read and write to addresses in memory in c++ and it wouldn’t let me. C didn’t like it either but I was able do some pointer abuse to make it work.
This was all 30 years ago , and I’m a little fuzzy on the details.
It’s not the languages job to keep you out of another program’s memory.
That’s the OS’s job.
You end run that by installing something in the kernel to invade other program’s memory.
This is why Microkernels will ultimately win.
Amiga had pre-emptive multitasking but not protected memory (during toaster days).
I don’t know anything about later Amigas.
I assume they fixed the OS at some point.
You do it in C++ just like you did it in C.
With a pointer.
Modifying other people’s code running in memory is JV.
Modify your own code running in memory!
Just to piss off a CS instructor/Rust user.
Yeah, the lack of memory protection was fun, but probably not a good idea for internet connected machines.
Someone at Commodore told me that the Amiga didn’t have memory protection because management didn’t want to pay for a MC68451 on a 68000 “game machine” and then the lack of memory protection became locked in because some best selling software relied on it.
Pretty much anything that talked directly to the custom chips wouldn’t be able to run with anything else that did the same.
The Amiga developer program was always warning against self modifying code because some upgrade was going to break it.
IIRC it’s a commandment held by the ‘First Church of Christ Computer Programmer’
‘Thou shall not write self modifying code.’
Semicolon!
Reading and writing physical memory was never undocumented in C, and is still supported in all C++ versions.
And C++ is not an object oriented language, it is a multi-paradigm 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.