About this pageAlgorithms
What's newHardware & BIOS
Other internet sites of interestDOS and Windows programming
Internet programming & standardsLinux programming

Disclaimer: I (the author) believe that the information on this page is correct, however, I'm not infallible. If you're doing important research, double-check with other references! and, if you're doing low-level hardware programming, be aware that it may be possible to damage the hardware by programming it incorrectly! In other words: be generally careful.

About this website...

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.


What's New(ish)...

10/10/07Cleanups, re-wrote "about" section, some work on the PC system overview.
27/01/03Added the Introduction to IDE. It's light on technical details but highlights some issues and gives a good overview.
6/6/03Some stuff about Asynchronous I/O on linux.
23/4/03The 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/02Page comes back online; Updates to details, history. New content is planned soon.
21/5/00Added info on programming the PIC
15/4/00General updates. Removed ad banner.
6/1/99Added info on programming the DMA controllers
2/1/99Updated some incorrect statements, in the BIOS startup information and the hardware overview.

Hardware & BIOS

General PC system overview (rough & ready). Note that 'The PC Guide' also has non-technical information on PC's & components.
DMA controller programming
PIC programming
PC startup & bootstrap information.
Joystick access information
Mouse hardware programming
VESA programming (versions 1.2, 2.0)
Introduction to IDE

Dos and Windows

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)


Linux programming

Asynchronous I/O on linux
Sound programming in linux
Network programming in linux
Real-time signals

Internet programming & standards

The PPP (point-to-point) protocol

Algorithms

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


Other Internet Areas of Interest...

Operatig Systems development resources

Sigh... it's worth mentioning that most of these resources aren't updated terribly often. Somewhat like this very website. But there's still plenty of good stuff to be found.

Free Operating Systems on the 'net

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: