Programming

Basic Theory

Von Neumann Architecture. It is very important that aspiring computer programmers learn about the Von Neumann Architecture, which is a generalization of almost any real computer in extant today.

Low Level Programming

For the content below, it would be most helpful if the reader has a working knowledge of the x86-64 architecture, for example, by studying the Intel and/or A.M.D. microprocessor architecture manuals. It would also be beneficial if the reader has a very good knowledge of the G.N.U. tool chain, which may be gained, if necessary, by reading G.N.U. info documentation relating to the programs `cpp', `gcc', `gas', `ld', `make', and the like (this documentation may need to be installed on your computer, as documentation is often packaged separately). For your convenience, we have provided a PDF document that introduces the GNU C compiler. If the reader wishes to learn about the C programming language (which is also very necessary for the understanding of the subsequent material in this subsection), it is recommended that the reader read Kernighan and Ritchie's book .

Boot Sector. This boot sector is mostly written in C. This code is not recommended for a production boot sector, as it makes too many assumptions about how the compiler optimizer will work in the future (i.e., it is not certain that the G.N.U. C compiler will, in future releases, optimize the size within 512 bytes, however unlikely it may be that it will become less effective). The author wrote it just to show that it is possible to write a boot sector in C.

3 stage boot loader. This is a 3 stage boot loader that simply puts the machine into long mode, displays a memory map, then halts the processor.

System V A.B.I. Tutorial. This tutorial illustrates the System V A.B.I. for x86-64 Linux. For more information about this A.B.I., please refer to the official A.M.D. documentation .

System call interface. This code illustrates how a standard C library might begin implementing the Linux system call interface for user space processes.

i386 Linux Assembly Tutorial . This is an old tutorial covering assembly programming for i386 Linux. The A.B.I., and other details, have changed for the x86-64 architecture. However, the x86-64 C.P.U. starts out in 16 bit mode, is switched to 32 bit mode, and then subsequently switched to 64 bit mode, therefore, this tutorial retains some usefulness for x86-64 low level programming.

G.C.C. inline assembly. This is another old tutorial that covers inline assembly for the G.N.U. C compiler. Although this tutorial is for i386, the concepts gained from this material may be applied to the x86-64 architecture.

Application Programming

There is a wealth of information, located elsewhere, directly related to user space application programming. If the reader would like to know more about the standard library, the user should read the G.N.U. C library info documentation.

libdstralg. This is a data structure and algorithms library,

Daemon Example. This demonstrates how one might start writing a program meant to execute as a daemonized process. More specifically, this code demonstrates how sysV style daemons are implemented.

Configuration File. This demonstrates how a simple configuration file parsing may be implemented. As a side effect, this package also demonstrates how a key-value data structure may be implemented, as well as how the usage of the P.O.S.I.X. libc tsearch functions.

Music

Instrument Tuner. This is a program that generates a tone specified by a chromatic number, relative to 440 Hz, on the command line. The source code (this is a very small program) should document how this program is used. This program was written mainly to demonstrate how to use `libalsa'. However, it is also a useful program for musicians who wish to tune their instruments by ear relative to a known generated tone.

Music Theory. This is my treatise on music theory.


.


For comments, suggestions, or friendly conversation concerning the above, please send me an email.