I'm new to programming and starting to learn it from the ground up. I want to make a move to understanding 16 bit dos and windows and then to 32 bit dos and windows.

I'm looking for the Microsoft SDK 3.0 or 3.1. I've looked around MSDN site but couldn't find this SDK version. If it is legal, can this be obtained by downloading from a site that has it. If it not, where can I buy it. I've looked around everywhere, even on ebay.

Another question, is this SDK bundled along with other Microsoft product?

Here are the list of tools I'm looking for:

RC.EXE? (SDK v3 .O)
LIB W.LIB (SDK ~3.0)
WINSTUB.EXE (from the SDK)

Is the SDK bundled with Visual C++ 1.5, Microsoft C/C++ 6,7 and later?

I'm not restricting the SDK solely to the version 3.0 or 3.1 but to versions that uses windows 3.x standards. What are the other versions that is compatible with windows 3.x?

You maybe wondering why I would need this old legacy tool for windows 3.x development. The reason is that I want to learn assembly language programming from a book called "Windows Assembly Language and System Programming, 16 and 32 bit low level programming for the PC and Windows, Second Edition by Barry Kauler".

I'm aware I could use Borland products to do this without getting the SDK, but I want to be consistent and use masm related products.

Posted on 2005-06-09 08:38:59 by evangelionep25_26
AFAIK  MS stopped the support for Windows95, not to mention the 16-bit ones  :shock:  start learning from 32-bit windows - it's easier,more practical, and has much much much documentation/tutorials/support on the web (for example: this forum).
Posted on 2005-06-09 08:50:58 by ti_mo_n
I agree with timon - start with 32bit assembly. If you later on feel a need for 16bit, you can then start to pursue it.
Posted on 2005-06-10 09:22:02 by f0dder
I'm mainly interested in low level programming, system programming, debugging, reverse engineering. Windows is a very large and complex software. I've read about practical programming but they rely on services provided by windows. These software run under windows but some software utilise their own device drivers to handle the hardware, but still under the rules of windows. Windows gets even larger and complex the later version. The abstraction is even higher the later version. Different versions of windows uses different rules. My first PC experience was with Windows 95. I use it and take it for granted not knowing about it, lest about programming.

Some software that I'm interersted lead me to learn programming, but upon reading, I found out there are even more layers and dependability. Recently, I've decided to start to learn the older system by looking at the bigger picture and history of windows.

I realised that studying history is important to understand the system because the system undergoes changes from version to version. Many of the things are brought from history.

When I see windows box and click on the buttons on the interface, I take it for granted.
Whenever my PC fails, I have nothing to resort to other than a few tricks to get it to work.

Programming is hard at this time, when software are so complex like windows unless you don't care about the under the hood implementation and learn only Visual Basic or .NET and follow it. The reason it is hard is that people like me who wants to start programming don't have the experience in programming dos and early windows for the early intel cpus, or for any other machine architech in the 80s.

I'm still reading the Art of Assembly 32 bit programming and following the HLA programming syntax. I also can read C. I know programming is an art. You can do programming like some kind of art with the knowledge of math and algorithm without the knowledge of implementation of the device code or higher libraries of code upon the device code. You can program using higher abstraction and not knowing about windows.

Learning the history and knowing where resources are located to learn the history is important to the learn the current system.

So the conclusion leads to my implication, are you able to provide me with the resources and not provide me your own advice for other alternatives?
Posted on 2005-06-10 22:07:56 by evangelionep25_26
Let me recap.

You want to start programming on Win 3.Stoneage because the spaghetti code they threw together 20 years ago will give you insights on how to reverse engineer on nowadays systems. Also you're using HLA 32 bit as the programming tool because the syntax will be very similar to what you will be encountering in your reverse engineering career.

Posted on 2005-06-10 22:35:23 by JimmyClif
With the goals you have stated, forget about win3.x and win9x. Get "inside windows 2000" by russinovich et al, "programming windows" by Petzold, the vc2003 toolkit, ollydbg and windbg, and a freeware version of IDA (or buy the full version). Wait with the device driver programming until you're familiar with these.
Posted on 2005-06-11 10:57:08 by f0dder
I would get rid of Kauler's book. It only gets you to one stage of Windows programming - "Hello, World!". And it does not teach you assembly language programming. Some of the other chapters have non-Windows examples that work on Win95, but probably won't work under XP.

If you want insight into Windows architecture, I would recommend some out-of-print books like Pietrek's "Windows Internals" and "Windows 95 System Programming Secrets". Sven Schreiber also published a book on undocumented Win32 internals.

There are a number of people that have been writing DOS code, and www.masmforum.com has a subforum for those people. If you start with DOS, I would recommend skipping Windows 3.x (Win16), and going straight to Win32. There is much in Win16 that works the same as in Win32. You may as well start with Win32.

The cost of going from DOS to either Win16 or Win32 is in learning three things: event-driven programming, using a different "memory model", and abandoning the use of INT instructions for "system services". If you already can create Windows GUI programs, you already have some notion of event-driven programming. The memory models of both Win16 and Win32 systems is dictated by the use of "protected mode". In this mode, you cannot use segment registers as freely as in DOS. Going straight to Win32 frees you from the 64K limits of both DOS and Win16. There are two general purpose systems under Win32 - the Win9x system (where a few 64K limits still exist) and the NT system (where there are no 64K limits). Windows ME was the last Win9x system. Windows 2000 and XP are both NT systems.
Posted on 2005-06-14 00:14:38 by tenkey
If you want a "bare metal" programming course without any software layer to bother you, then I suggest you to start building your own "playground" OS. It's fun, I've worked on such a thing  a little bit. Perhaps my article here can help you. Another option would be developing simple application for simpler hardware, such as GameBoy Advance, this way you can quickly see the result of your program in the "bare metal", you are in total control of the hardware.  I can assure you that it's totally fun, you might want to check out this link for more info on GameBoy Advance related development.
Posted on 2005-06-14 04:32:54 by Pinczakko