Unlimited Faxes, No Fees, Dedicated Phone Number
These are my current projects that I'm either working on or would like to work on, as time permits. Some are well under-way, and others are just concepts.
Recently (probably around the end of January, 2007) I installed FreeBSD 6.2 on my Sun Ultra-SPARC 2 computer. I'm hoping to learn how to use FreeBSD from it.
I managed to get X to work. I first figured out the correct key-mapping ("sun" rules, "type5" layout), then just today (2007-02-07) I got the mouse working. Turns out that it is on /dev/cuau3. I'm running moused so the mouse works both in the consoles and in X.
This Web site is a current project, to which I'm adding content all the time. Now that I use No-IP for my dynamic DNS entry (christop.homeip.net), I host this site on my home computer. This way I can update the site a lot more flexibly than with a limited file upload form found on nearly all free Web site hosts. I can even write shell and "ed" scripts to modify many pages at once, as I do with The Book of Mormon on this site.
XChip-8 is a Chip-8 virtual machine for the X Window System. It is already well under-way, but I still fiddle with it from time to time.
The Book of Mormon is another section of my site that I'm working on. I started with the original text and split it into separate files. I'm making it navigable by adding navigation links, verse links, and links to the current book in each chapter. For example, in 1 Nephi chapter 2, there are links to chapters 1 and 3, to 1 Nephi, and for each verse. The verse links make bookmarking a specific verse possible.
I split it and added links, stylesheets, and various things, all by using the standard Unix text utilities. I wrote a few shell scripts and ed scripts to add hyperlinks. I had to do a little bit of hand-editing at first on some of the files that were slightly mis-formatted, but now I rely on the automated scripts and tools.
I'd kind of like to add some features like a full-text search, but I would need to write a CGI program for that (I could do that if I had the time). I'd also like to make a complete index of books and chapters.
Punix is a Unix-like operating system that I'm developing for the TI-89 and TI-92+ graphing calculators.
It doesn't have a filesystem yet, since I'm still trying to figure out the best way to do that on the Flash ROM. I also haven't developed the binary file-execution yet (such as execv), because there are a couple ways to do it:
a5 on the 68k processor). I don't know if TIGCC can support this easily.I also have a project page on ti-news.net for Punix. That page has downloads for various releases.
World Sunlight Map is a program for the TI-86 graphing calculator that displays a map of the earth and the areas where the sun shines on it. The program computes the illumination of the sun on the earth for every pixel on the screen. It does this in only about two seconds.
I also wrote a routine for this program to do Bayer dithering, so I didn't have to use real gray-scale.
Here is a screenshot of it:

This also has a File Information page on ticalc.org.
Threads is a cooperative multi-threading system for the Z80 processor.
I am writing a small X11 server for two main purposes:
So far I have the framework for receiving and requests and sending responses almost done. Now I have to write allocators for all of the different resources (windows, cursors, colormaps, etc.) and actually handle requests. That's most of it that I still have to write, basically.
I recently wrote a program to synthesize a simplified MIDI-like data stream. I wrote this first for the PC, then I re-wrote it in Z80 assembly for the TI-86. The TI-86 was my original target for this program; I wrote it in C for the computer first to debug the concept and the data format.
The data stream consists of a series of events. An event includes:
The note numbers are the same as for the MIDI format (note 69 is A4, or 440 Hz). An event is similar to one of MIDI's "note on" or "note off" events. In fact, events in my format are limited to only "note on" and "note off". Setting a voice to 0 is effectively a "note off" event or a pause for that voice (note 0 is normally in octave -2, which is not on most keyboards; and it is about 8 Hz, which is inaudible to humans).
Another major difference between MIDI and my format is that mine supports only one note per voice, whereas MIDI supports any number of notes per channel. A conversion program will have to allocate more voices when more than one note is played (such as a chord) on a channel. I think these limitations are acceptable because the target has limited computing power to synthesize music.
The output of the program is one-bit sound, as the TI-86 has a link port that is either on or off. It uses a frequency/error accumulator pair for each voice, and for each sample the frequency is added to the error accumulator for each respecitive voice. When the accumulator overflows, the program emits a 1 bit to the link port.
Currently in the TI-86 version there are only 6 voices; I found this to be the greatest number of voices that the 6 MHz Z80 can handle at 8192 samples per second. I tested this in Virtual TI (VTI), and I know that VTI does not emulate the link port at the correct speed (it's slower on real hardware). This means that a real TI-86 could support only 5 voices, and I might need to slow down the voice computations slightly to fine-tune its speed.
As of 2006-12-12, there are two special voices: 0 and 1. Voice 0 is the control voice; setting it to 0 is a no-op. Setting voice 0 to 1 ends the input stream. Voice 1 is the tick frequency; it defaults to 256 (each tick is 1/256 second). I haven't worked out exactly how to convert standard MIDI clock ticks in the conversion from standard MIDI files to my simpler format. By reserving voice 1 for the tick rate, a conversion program can convert MIDI tempo events into voice 1 events. Alternatively, a converter can convert MIDI tempo into 1/256 second ticks.
During testing of this program, I converted by hand part of a standard MIDI file. I had previously written a program to synthesize MIDI files to high-quality sound, and that program prints the MIDI events as it parses the file. I used that listing of events to convert the MIDI file to my format.
This is just in the concept phase. It will not be a vector-based laser projector like this guy's home-build laser projector. Instead, I want to build a raster projector, much like a CRT.
In my brain so far, I envision two orthogonal spinning mirrors (each actually has many facets, like 10 or 20), one for the vertical scan and the other for horizontal scan. A laser points at one mirror, the beam reflects off it onto the second mirror, and that reflects onto a screen. The construction is very similar to a vector type of projector, but the mirrors spin at a fixed rate in my design, and the only variable is the laser brightness.
The vertical scan mirror will spin so that it scans 60 frames per second, and the horizontal mirror will spin to produce 525 horizontal scans per vertical scan, to produce 525 scan lines. This is the standard number of scan lines for NTSC, which I'd like to use for input. As I plan this more, I'll need to account for interlacing and other fun stuff like that. I also need to figure out how to control the brightness of a laser diode quickly enough to produce light and dark dots horizontally.
I imagine the output would look something like the following simulated image:

It's red because I have only a red laser, but if I wanted, I could buy a green laser (which would look better, I think). Either way, it will be monochrome (just the "Y" conductor of a component or S-video input), unless I bought a green and a blue laser, which I don't see happening due to their high costs (available for $99.99 and $999.00 for green and blue, respectively, at ThinkGeek).
I'll probably refer to Television and Video Resolution frequently while building this.
I'll put other projects here as I think to write them down.