| About this page | Algorithms | ||
| What's new | Hardware & BIOS | ||
| Other internet sites of interest | DOS and Windows programming | ||
| Internet programming & standards | Linux programming |
I started this website back in the 90s. Back then, things were very different... MS-DOS was still prevalent, and 80286 processors were still fairly common. People thought the next version of Windows would be 4.0.
At that time, writing hobby software usually meant interfacing directly with a variety of hardware components, and often doing so behind the back of the operating system (Linux was first released in 1991, but in nothing like its present form, and I know I personally never tinkered with it until about 1998 or '99. Windows 3.1 existed, of course, but there was a lack of free development tools and API information).
Information about programming various hardware components could be difficult to come across and was almost invariably badly written and incomplete, if not downright self-contradictory (to this day, I have not figured out if the original AT was or was not capable of memory-to-memory DMA transfers, for example). I began collecting information, testing it, merging it to fill the gaps, experimenting, and finally re-writing it, before presenting it on this website.
Being so hardware-oriented means that much of the information here is now not needed for typical application programming. However, some of it might still be useful for embedded work, operating systems development (one of my more recent interests), or if you just happen to have a really, really old computer lying around that you feel the need to tinker with... Of course there's also a few algorithms here that might be of more general use.
The page has had a great deal of work put into it (albeit stretched out over a long time span) and I provide it to the general community as a service, purely for the enjoyment of knowing that I am helping others. So if you do find something useful - or if there's something you think is missing (remember the site is always under construction) - let me know that my hard work and time is not going to waste.
Davin McCall - davpage@davmac.org.
| 10/10/07 | Cleanups, re-wrote "about" section, some work on the PC system overview. |
| 27/01/03 | Added the Introduction to IDE. It's light on technical details but highlights some issues and gives a good overview. |
| 6/6/03 | Some stuff about Asynchronous I/O on linux. |
| 23/4/03 | The road goes ever on... back with some info on network programming under linux. And the news that someone actually found my fibonacci stuff useful. |
| 18/12/02 | Page comes back online; Updates to details, history. New content is planned soon. |
| 21/5/00 | Added info on programming the PIC |
| 15/4/00 | General updates. Removed ad banner. |
| 6/1/99 | Added info on programming the DMA controllers |
| 2/1/99 | Updated some incorrect statements, in the BIOS startup information and the hardware overview. |
Note: This stuff is somewhat incomplete, and most of it fairly irrelevant by today's standards.
Overview on DOS
Information on DOS & DOS program startup
DOS disk information & formats
DOS Executable file formats
DOS Internal (Int 2Fh) functions list
Writing DOS programs to run with Windows
The FreeWinSDK (Software Development Kit)
Numerical algorithms
Lempel-Ziv Welch compression (of .GIF file fame)
RSA encryption (Public Key Cryptography)
2-3-4 trees and Red-Black trees
Also, some things that no-one's likely to use, but which are interesting in their own right:
Algorithm: Finding the nth number in the Fibonacci sequence
Further breakdown of the Fibonacci algorithm
There are hundreds of "operating system projects" out in the WWW-wilderness; so many people seem to think that they're going to write the next great OS, and end up with little more than a bootloader. Here's a few OSes which got past that stage: