I learned Windows programming from documents included with the Windows 1.0 beta and release Software Development Kits. These included a printed API reference, of course, but beyond that the most important document was the Programming Guide, which was published with the SDK in 1985 as 258 7″x9″ looseleaf pages in a binder. This document contained five sample programs that I studied in great depth in attempting to learn the Windows API.
Lucky guy (since he had a whole stack of libraries to program against)…
In 1985 I bought my first computer and started learning BASIC on a Commodore VIC20. Which eventually led me to learn developing using Assembly on a Commodore C64 less than 2 years later. 2 years more and I was developing using Assembly on my first MS-DOS PC since my parents wanted me to buy a “serious” IBM PC-compatible computer instead of what was my favourite choice at that time: the wonderful Amiga 500 or 1000.
Those were very wild times…
Your parents robbed you of fun times on the Amiga. At least you got a taste of the C64!
*nod*
The only thing I grew up with was one of the original IBM PCs (can’t remember whether it was an XT or an AT) that my parents owned, a series of my father’s office laptops, and a Super Nintendo that my grandmother bought me later on.
Luckily, a childhood spent on QBasic and Mario doesn’t ruin a geek. Just recently, I’ve started working to remedy that. So far:
1. I’ve almost finished assembling a “nostalgia PC” (A 133MHz Pentium that I got for free and have been outfitting with things like my old Gravis PC Gamepad and the genuine SoundBlaster 16, Gamport-MIDI cable, and under-monitor power center I always wanted. My goal being to produce a “rose-colored glasses” version of what I always wanted as a kid)
I’d have included my old Voodoo3 3000 PCI for when I set up a FreeDOS/Win31/Win98 triple boot, but apparently the BIOS doesn’t like it so I put a 100BaseTX NIC in there instead. I’m still not sure what happened to my Voodoo2. (I might have used it to build a PC I gave away to a friend.)
2. I’ve just started acquiring supplies (as funds permit) to do the same with an Atari 520STFM that I grabbed off the curbside a few years ago on big garbage day. (I’m Canadian. The Atari ST series was quite popular here back in the Amiga era.)
The ST seems to work perfectly and included the high-res black-and-white monitor, but no mouse and the NTSC RF modulators on them are widely-known to be garbage. I just received a composite out cable for it and I’m waiting on a PS/2-to-ST mouse adapter. (The Flash-based floppy and/or hard drive emulators will have to wait for a later paycheck.)
I was kind of surprised when I first cleaned it and discovered that, despite the mushy-feeling membrane keyboard, the keycaps were double-shot injection moulded.
Edited 2014-12-10 04:42 UTC
Definitely! And most of all, they robbed me of a fancy life as a videogame developer ! Grrr!
That was what I wanted to become at that time but since PCs sucked a lot at that time at gaming, I grew up as a “serious” developer of business software.
Shame on them
Started on the VIC20 and C64 aswell (in my opinion the Commodore 64 was the best introduction to computers a kid could have had), but then I went with the Amiga and from there on to the PC.
As I was also programming in assembly at the time I recall moving from Amiga with the Motorola 68000 to the world of MS-DOS ‘real mode’ with segment registers etc was a real ‘what is this shi…?’ moment.
Thankfully dos extenders came along to solve that problem, and by the time ‘mode 13’ arrived with it’s planar memory model of one-byte per pixel, PC gaming skyrocketed and the Amiga was essentially dead in the water with it’s slow bitplane-based graphics chip and comparatively slow cpu range.
Yeah, those were hard times but also fun times. I basically studied all languages (including esoteric ones like Pascal and Modula II) but MS-DOS times were the funniest.
MS-DOS programming, especially when using Assembly, was like having a blank sheet where you could draw anything you wished. Couple that with weird things CPUs (and graphic cards) were doing (like, for ex., some 286s being unable to come “back” to normal operation when switched into “protected mode”) and result was FUN
Heh, I remember back then I thought that compilers would never be a viable option for performance oriented code, since everytime I looked at disassembled compiler generated code it was simply awful.
But then the Watcom compiler arrived and I looked at the generated code and, was like ‘eh, this is actually quite good’, and so started my migration from assembly to high level languages.
Thankfully dos extenders arrived shortly after I went to PC (dos4gw FTW!), which offered a protected flat memory mode and hid all the real mode crazyness from you in order to keep you sane
And then VESA came along, and we were back to slow bank-switching operations etc… We had to wait until VESA 2.0 and decent drivers (univbe)and decent DOS Extenders (DOS4G/W, DJGPP)to have the luxury of a flat-address framebuffer again
Sometimes I get nostalgic and start up DosBox, just to fiddle with DOS compilers again. A few months ago, I even developed a small DOS C library for EMS memory handling. Fun times…
Ah, DJGPP + the Allegro library, great nostalgia
I don’t recall ever using VESA prior to it having a linear framebuffer, but it was quite some time ago and my memory betrays me ever so often.
My first steps into graphics programming were done with DJGPP and Allegro
Good times!
Also the Allegro library is still going strong, it’s at version 5 last time I checked, although it has serious competition from SDL among others these days.
Valhalla,
Somehow I didn’t realize Allegro was still around.
I liked SDL in the past because it just worked without much fuss, but 1.2 always had a single window / multiscreen limitation that drove me to use Fltk instead (which has lots of design quirks IMHO). SDL 2 was working on these things but it didn’t look like it was making any progress at the time. Anybody know if it’s improved on this front?
These days there are a lot of solutions in that space, SDL, SFML, GLFW, not to mention directly game oriented things like libgdx, phaser, Haxe, l~APve etc, so you shouldn’t be too hard on yourself
No idea, not sure I understand exactly what the problem you’re having is though.
Valhalla,
I’m really out of the loop, I don’t have time to tinker with games or rasterization software any more
At the time (about 5 years ago), SDL’s API was single window only, which forced me to seek alternatives.
Edit: Anyone here build games? If so do you still have another “day job” to pay the bills?
Edited 2014-12-10 17:33 UTC
Too bad, it’s fun !
Ah, ok, I was confused if it had something to do with multiple monitors, the answer is yes, SDL2 has support for multiple windows.
I have a few toy projects that I thinker with from time to time, and of course one of them is a ‘roguelike’
If they ever get finished is something I’m very much starting to doubt, particularly since I seem to end up continously rewriting them in other languages and against new frameworks that I come across, most recently Go, now I’m thinking about giving Rust a try as it is starting to stabilize and also it has a nice looking game framework actively developed called ‘piston’.
And yes, I thankfully have another ‘day job’, else I’d be starving that’s for sure
I spent years writing simple games in Pascal which I learnt from Denthor of Asphyxia’s VGA primers – http://www.textfiles.com/programming/astrainer.txt
Much later I discovered Allegro and thought it was amazing. Especially after all that using inline assembler just to put a pixel.
frood,
Nah, this is what I remember by heart (I hope it’s right).
From there you’d build up line / poly algorithms.
This video mode was easy because there were no pixel banks, just one simple buffer. Unlike banked modes, vesa 2 modes were easy because they enabled us to overcome the 64k barrier. Entering protected mode (or flat real mode) was it’s own challenge until environments like DJGPP came along to natively support 32bit addressing from the ground up.
Boy do I miss experimenting with graphics, great fun! I was fairly proficient at 3d rasterization. I built some cool things back in the day. The IT bust happened right when I graduated and I scrambled to make ends meet with any jobs I could find. I turned to sys admin/database/web dev, which still have more demand to this day. Outsourcing is taking a toll though.
The best times to be in computer science were probably in the 80’s/90’s, tons of things were happening with technology and we had a genuinely high demand for CS skills, so much so that companies would gladly pay for education and training, nowadays they get thousands of resumes from candidates who have gone into debt for a diploma just to get a chance to apply.
I’m still very passionate about CS, it just feels like we are under appreciated.
Edited 2014-12-11 15:02 UTC
Valhalla,
Same here, I did a good amount of DOS programming in assembly/C: interrupts, protected mode, sound, graphics, the whole shebang. Amiga might well have been better but it’s not what I had access to. I found it very fascinating that with easily attainable resources (books, ralph brown’s interrupt list, etc) you could single handedly do it all, even write a small OS. This was when I was young and living at home. I suspect many software developers share similar experiences: fondness as they are learning and pushing their boundaries, followed by “well this is boring” when they’re way overqualified and underpaid in the job market.
Edited 2014-12-10 14:49 UTC
Nearly the same.
Learned to code on VIC20. Wrote my first game on C64.
Learned to use assembly and overlays (Grrrr) on real mode DOS using Borland Turbo Pascal (ummmm ) and Turbo C (Ugh!). Nothing beats writing your own VGA 320×200 paint library in assembly…
I still remember the first time I used 32bit protected mode using DJGPP (?).
Afterwards, OS2 (ugly API), Win32 (Somewhat better API), WinNT API (NDIS sucks), before switching to Linux kernel mode.
What a ride
First example of a “Hello World” windows program was in a C book I had long ago. Ew.
It sorta reminds me of this classic short story:
http://www.cgl.uwaterloo.ca/~smann/Humor/devil.txt
Edited 2014-12-10 02:11 UTC
When moving from DOS to Windows, the CRT changed to a different thing that implemented a subset of functions and changed the implementation of others (compiled into a dozen variants at install time.) Some pieces of DOS needed to be called directly by a Windows program; others were strictly off limits. Segmented memory, either in its real mode 20 bit form or the later protected mode 32 bit form, meant that memory had strict locality requirements. Cooperative multitasking meant that the program no longer owned its own processing loop, so the whole design of programs needed to be rethought.
When I first wrote a Win32 program I was amazed how simple it was. All the insanity was gone. One CRT. DOS replaced by meaningful functions. Flat memory. Preemptive multitasking. It was a panacea compared to 16 bit Windows.
I remember those times. I was young and the success of this piece of shit that was Windows made me angry. I had an Amiga and didn’t understand why people were buying this stuff which was such a piece of shit for more money than a proper computer with multitasking and a 68000 processor.
Sometimes I’m still angry at those suckers that bought it because they are partly responsible for the death of the Amiga.
“spiderman”, I was in the same position and thought just as you did. But over time, I just went on. For example, I use Amiga emulators and I witness the demise of PC’s (and Windows) due to rise of mobile devices.
However, it’s important not to retain bitterness within yourself (“Sometimes I’m still angry…”). Let go of it and use the good principles you learned with Amiga for the current and upcoming ideas and creations. You’ll help others appreciate what “those suckers” hadn’t.
If nothing else, remember the biography of Nikola Tesla. He wasn’t angry that the contemporary people couldn’t understand his principles (nor that the most influental businesses tried to lock him aside).
All the best,
Ivan
Now I remember why I never made the jump from DOS programming to Windows programming … the freaking “Hello World” example is several pages long, while in DOS it was a couple of lines long. Atrocious.
It looks terrible, and is, yet it’s still better than the X Windows example: http://www.paulgriffiths.net/program/c/srcs/helloxsrc.html
How?
The main issue with the X one is that it’s wordy; a lot of things have to be done by hand instead of having sensible defaults, and there’s a number of different structures to be set.
Apart from that, it looks reasonable enough. The C looks like C, the control flow makes sense, and things are bundled in structures with descriptive names. I imagine it would hurt to try and remember all the structures/fields/constants, but that’s an issue in all large APIs.
Edited 2014-12-11 14:27 UTC
1
Browser: Mozilla/4.0 (compatible; Synapse)