Below you see an overview of the projects I ever started. This list is not meant to be exhaustive. There is even more, but I forget to finalise and report about these things. Some projects are cross connected. Don't get confused. Some projects start out for some silly reason and then, years later, turn out to have been valuable preparations. But most of the projects is never finished. Starting is more fun than finalising.

Projects of Jan Verhoeven.

Project: Description:
Overhaul The site is about to be overhauled to fit in more with the time. At present, all is written in HTML 3.2. The target is to migrate to XHTML 1.0 HTML 5 with lots of as little as possible CSS. Started: 6th August 2009.
Shop Create free shopping cart buttons, using only HTML (and some JavaScript). Paypal required though. But that's free of charge anyway.
openVote An open source machine and procedure for official voting and ballots. Written in open source languages and for the de facto open source operating system running on minimal hardware for the lowest cost democratic base.
Gallium rebuilt Gallium, the old yet sympathetic Dell CPi laptop, gets a facelift. More RAM, a solid state disk and a WLAN card. Now, it's a true laptop and can be used as such. Younger people would refer to this as 'Gallium pimped'.
AVR assembler Before starting on the code generator for Plov I want to wet my appetite and get some fingerspitzengefuehl on code generator making in a truely remarkable AVR assembler.
VAX 01 VAX 01 is a processor board based on the Atmel ATmega 16 CPU. It has all signals made available on connectors and can be used as is as an eight channel datalogger.
404 handler Dynamically generate content for error generating user requests. It does so with Modula-2, CGI and JavaScript.
Okapi 3 The Okapi 3 AVR programmer is ready. It is for sale as of January 2008. This is an open source project meant for people who do not have enough confidence in the free of charge programmers that are around on the internet.
Compilers After having scanned and OCR-ed 'Compilerbouw', the dutch translation of a Classic by Niklaus Wirth, I thought it was suitable to translate and summarize the book into english, thereby adding my improvements and porting the sources to a recent Modula-2 compiler (Mocka).
Read about it in the 'Compiler making' section. If you want to react: send a mail to
PL/0 Oberon-0 is a too complex language to learn compiler construction. FP happened to have the enhanced 1986 dutch translation of Compiler Construction. I scanned the pages, applied OCR and performed reformatting to gain a good book about this topic.
The aim is to remake the programs listed in the book. With the PL/0 compiler as the end product. After the PL/0 project, the Plov project will be started. Plov is an enhanced PL/0 compiler system instead of the m4m project.
Parilux 1 The Parilux 1 project: a simple and affordable feedback device for people who want to learn the art of programming, without making useless pieces of software. Parilux can be used for simple tasks (blinking upto four LED's), simulating a complete I2C or CAN bus and reading two sets of three digital inputs. Estimated costs: less than €20.
AVR NGW100 This ready built Atmel controller is an AVR32 DSP based microcontroller that serves as a router with lots of GP I/O's, USB, SD/MMC interface and it runs Linux!
Gigaweb A next generation picoweb server: the Gigaweb server is announced. It will be a multipart project, starting with a new programmer which acts as a level translator as well.
PicoSam Construct a sampling oscilloscope on the LPT port. COTS parts, no programming of chips required, just make software for the PC.
Minix 3 Minix, the forgotten operating system with a mission. Read it, get inspired and install it on your own systems.
Thermostat A new thermostat was hacked. The old furnace broke down. A new one came. With a new thermostat. Time for some new tinkering! Mechanical and electronic!
VoIP Switching over from TelCo to VoIP (Voice over IP). Expected savings: € 250 per year. Which will be used, partly, for a higher speed internet connection. Read it in Voice over IP.
Okapi Okapi is the LPT port based AVR ISP programmer that has galvanic seperation between PC side and target CPU system. It will also power the target instead of vice versa. Go check it out.
Achatz MWS 2.00 Started a series of explorations and applications of the Achatz micro webserver (a PicoWeb server clone).
Atmel AVR Started a series of topics on the Atmel AVR series of processors and the ATmega8515 in particular. With thanks to Franz of for his inspiring words and fine boards.
Pressure sensor Buy a cheap blood pressure meter and get a pressure sensor, airpump, solenoid valve, airbladder and some smaller parts practically for free. Read about it in the sensors section.
Frame Stomper The frame stomper will force the webserver to produce frames around singly loaded frame sections. So no matter what Google offers you, this program will always present the framed files. There is also a version for gzipped HTML files.
Since it runs fine now, I am converting the code to all of my HTML files. Long live frames.
PIC projects. Although the gameboy project is not finished yet, I started a new project: the fat PIC programmer. In this section I explain about various PIC programmers and I present my improved version of the JDM style PIC programmer.
Gameboy Colour. The Nintendo Gameboy is a very small Z80 system. The processor is a stripped version of the Z80A so not too difficult to program for. The Gameboy has a nice display, some versatile keys and a well documented extension port.
I want to see if I can convert the Gameboy into a controller for many of my older projects (from the DOS era) and for future projects. A second hand GBC is cheaper than the combined prices of the parts you would otherwise have to buy. I'm excited.
PICstart 16B. Back in 1992, the PIC was new. I was one of the first people in The Netherlands to start experimenting with them. My first kit was a Parallax programmer/debugger combination, but it relied on 8051 mnemonics for the PIC and a Parallax cros assembler.
In 1993 I bought a real Microchip development kit: the PICstart 16B. It programmed all the chips of the days, up till the 16C71. I used this programmer for quite some time. Later I lent it to a friend and he returned it to me a few months ago.
Since there are still lots of 16C5x chips in my desk, I want to revive the PICstart 16B to be usable with Linux. See how far I come with this. Follow 'Peripherals' and 'PICstart 16B'.
PIM sources. PIM (Programming in Modula-2) is the formal description of the language Modula-2. It was written by professor Wirth and every Modula-2 programmer should at least have read it. I own the german language version and I am studying it.
So I want to try the examples with my Modula-2 compiler (Mocka) and my operating system (Linux). So I will enter the sources and change them in order to make them compilable with my system. And I publish the sources in PIM.tar.gz.
Oberon pages. Oberon is operating system, compiler and GUI in one. This is a truely marvelous and portable programming environment. It comes with it's own GUI and it's own OOP compiler. I pay attention to it since it is better than Java but still gets less attention. Although it is as least as portable.
The PlyPlot. PlyPlot is my homemade plotter. It will not be contaminated with CNC-ed parts or lots of metal. No, PlyPlot is made of Plywood and parts from your local DIY store. I use screws, carriage bolts and PU based glue. Let's see how far we can get.
Oh, I forgot: the control software will be written by a 10 year old in Modula-2.
My heroes In this section I explain which people I really admire in the world of ICT and computing. The members are listed in order of importance to me and they will include some (not so) personal details.
In each case, I want to supply some kind of postal address so that we can send them a card, occasionally.
The C++ crusade. My crusade aiganst C++ is getting better in shape. It used to be a small tirade against some aspects of that so called 'language', but lately I have been studying it deeper and my aversion keeps on growing. Follow me on my Holy Crusade!
If you believe in fate, and know some english, what do you say, when I tell that C++ is a BS language? Yes, with such an abbreviation, the author would hjave better been a bookkeeper.
GUI coding. There are many GUI producing languages and toolkits. One of them is the GTK (GIMP ToolKit) but we also have Qt, Xlib and to a lesser extent SVGAlib. I have been looking at all of them over some years.
As things look now, I might choose for the Qt system. Although I dislike C++, the features of Qt outweigh GTK by far.
The aim is first learn how to use the GTK from within a C program and then make a FOREIGN MODULE for the Mocka compiler.
PostNine digits. Late 2001, the EUCET announced that as of January 1, 2004, all government agencies are supposed to start programming in and speaking with the new EUCET proposed PostNine hexadecimal digits. These digits were formely depicted by the letters 'A' through 'F', but that lead to a lot of confusion among programmers and accountants.
The new EUCET proposal has been introduced last year in governments of the 25 member states. As of March 1, 2005 all commercial programmers must have followed their lead. I pay attention to this major step in ICT by giving a short summary of what the EUCET P9 (PostNine) digits are about and how these need to be used.
gzipped HTML. While fooling around with CGI scripts I noticed that all major Web software supports 'gzip'. This triggered an experiment: what would happen if I offer the browser a gzipped HTML file?
Surprise, surprise: it displays as if it wasn't gzipped!
Find this out by going to the CGI section and comparing the topics called 'Hello.gz' and 'Hello world'. These are identical with respect to content, but the 'Hello.gz' file is 1600 bytes instead of 3500 for the 'Hello world' related file.
The '80x86 asm' section has been completely gzipped by now. That saved me 25% by ONLY zipping the HTML files.
As you can read in the gzipped HTML sequel, Google (and probably all other search engines) will not index gzipped HTML files. Anything published in a file called *.html.gz is secret and will never be found by a search engine. At least not by Google. Please conduct some experiments on your own and publish the results on the web.
As of March 2006, at least Google will succesfully index gzipped html files. Yahoo still has problems.
HP E-PC c10. I bought two second hand HP E-PC booksized PC's for in the populated parts of the house... Inside is an 866 MHz Pentium III processor, a 20 GB disk, 128 MB of PC133 memory and not much else... I want to to get it running with (probably) Slackware Linux 10.0.
Together with a german friend, we discovered that there are cheap adapters for fitting new slimline drives to the old E-PC connector. These adapters are EUR 40 here and EUR 4 there. So I persuaded an american friend to order some for me. I'm waiting...
So the adapters came to my place. I connected the thingy (it's a very small connector) to the E-PC, mounted ANY combodrive and the system booted as such. No fiddling about, no problems whatsoever.
Mission completed. Now I only need to install a Linux on it. Knoppix 3.6 won't run 'off the disk'.
Mission completed as well: Slackware 10.0 runs like a bat out of hell. And so does Debian Sarge. And with a stable X Windows installed.
Java After my detours via C++, Mocka, SVGAlib with Mocka, Qt and some more, I want to see how far I will get with the JAVA programming environment. Java should make platform independant code files, so this would (or could?) make me produce some executables for Parino and other projects.
In the mean time I made up my mind about this magnificent language. Read all about it in the Java section.
This section is aborted. I will start using the GTK.
Compaq AP400. I bought a second hand Compaq AP400 professional workstation with twin Pentium II processors and lots of other first class hardware. The aim is to get it running Linux while using both CPU's. In the mean time I have been busy...
  1. .. trying to compile an SMP kernel with SCSI for Slackware.
  2. .. compiling the actual SMP kernel for Slackware which runs stable.
  3. .. replacing the Lithium cell on the AP400 mainboard.
My impressium of a twin CPU machine: Two 400 MHz CPU's outperform an 800 MHz single CPU machine. I estimate the machine to be comparable to a 1 GHz single CPU computer.
This is all done now. Both systems run like a new system. Slackware 10 and Knoppix run very stable and fast.
I installed SuSE 9.2 Professional Linux on what was formerly Titanium. I renamed the machine to Fluorine. Check out the AP400 section.
SVGAlib with Modula-2 At last: a new project! And a fun one too. And I need some help here. I want to make some graphical user interface programs for people to use my Parino and Parilux control cards. And since I lack the brains to program in C++ and hence Qt, I will port my VGAlib3 functions to Linux, based on the SVGAlib libraries.
SVGAlib is good, it works, and it's stable. So why re-invent the wheel? I made a FOREIGN MODULE for the Mocka compiler. I changed the compiler front end scripts and adapted the linker script.
And now I can make graphic programs with Modula-2. It's the best of both worlds: C profiles itself as the portable assembler. And the interface modules enable Mocka to use the C based functions, but then with the intrinsic safety of the Modula-2 language.
After some initial failures, I managed to get some working executables that use the SVGA modes. I can even use unbuffered console inputs without a lot of sorcery.
With this combination of languages, you just cannot loose.
Loose ends Not a real project; quite the opposite. These are postponed and abandoned projects. It's a kind of negative project.
Choose your project, based on these drawings. Improve it, produce the code for it and publish about it on the web. And if you like the project (my idea), refer to this site as a kind of tribute.
PariLux. PariLux. The name is short for Parino card under Linux. At this moment I have finalised wiring up a Parino card without the relays but with the opto couplers installed. All relays were replaced by a LED so that I can see what happens and run the prototype off a battery.
More to come.
PIC DSO. I recovered this circuit from an old stockpile of drawings. When I find the accompanying software, we can revive this product. It's cheap and it works.
HPGL to PNG. I am converting all my schematic drawings from scanned laser printer images into direct conversion from HPGL file to PNG image. This will skip the scanning of the paper images and it will at least circumvent image blurring due to the grain of the paper.
CGI executables. I have started a series of CGI processors in a real programming language. Perl is for swines. Real people use Modula-2. Especially the Mocka kind.
Don't rush me, but the intention is to make CGI processors such that making webpages is easier than using Word Perfect.
machines. On this page I tell about some special equipment I have and I show pictures of the insides of other machines and tools.
Raupe tracked robot Winkler Schulbedarf produce a small robotic kit which is very cheap and versatile. Some members of the WISclub decided to buy such a kit and I document my proceedings with it in the "Raupe pages". Just click on the respective link in the navigator frame.
The m4m compiler There just ain't no decent high level programming languages for the small chips (microcontrollers) so a few of us decided it was time to 'just' make one....
The functionality until now is only marginal, but it's a start. Come back to see how things go in a few weeks.
Or, better, join the Mocka mailinglist, where all the action is!
ICPPPP Since I am not satisfied with most existing 'free' (as in 'free beer') programmers for PIC processors, I decided to make my own version which is a true ICSP. Check out the pages, but don't rush me.
Softy If you set out to use a multi-user multi tasking operating system, in which security and reliability are the bottom line, you also must face the consequences: no more tinkering on the LPT port. This is where Softy comes in: it sits on a COM port and replaces the geek port....
It will be able to replace 4 to 6 full LPT ports in one design. If I get it working, of course...
Softy will use a 12 MHz Z8681 ROMless microcontroller with 4 Kb of data memory, 2 Kb of bytewide EEPROM for booting and 2 Kb of SRAM for additional code memory.
As of this moment, I am wiring up Softy (I use wirewrap). As of 2006, the project is halted.
Mocka Mocka (MOdula-2 Compiler KArlsruhe university) is a GNU GPL style FREE Modula-2 compiler. It closely follows the 'Programming in Modula-2, version 3' (PIM3) standard and is available for Linux and the BSD's. For other Unixes, Mocka is not GPL, but it's still cheap when compared to similar compilers.
I started out my Mocka adventures with my SOUP project. Soup is short for SOUrce Printer. It takes a source file from StdIn and adds control sequences for a printer. The result is sent to StdOut. In effect, the source is printed on a sheet of A4 with 80x120 fonts, with an 8 space indent for each line.
In the download section is a full package (source and executable): soup.tar.bz2 ready for download.
Another project is the IOport library. It enables direct port access to Mocka executables (if given the right privileges). Check it out.
batteryclip. Learn how to salvage strong, high grade, batteryclips from old VARTA 9 Volt battery blocks. These clips can be used instead of the pathetic, flimsy, clips that are used in any application that uses some sort of 9 Volt battery or custom battery pack.
The project is fully documented with clear pictures.
Parino I/O card. This is a controlcard that connects to any type of LPT port. The user gets 12 relay outputs (230 V/ 5 A), 5 bit-wise inputs (with opto couplers between PC and "real world") and a serial bus structure to which an I2C interface connects.
I have the full drawings published in this site. First it might be better to download the CAD package to have access to them. Recently I have uploaded the bulk of this project to this site. With this you can start building your own Parino card within hours.
12 bit serial ADC This is a successful attempt to use an 11 channel, 12 bit ADC for medium speed data aquisition. The TLC 2543 A/D-converter is connected to the LPT port through a series of optocouplers.
This will protect the PC against a whole range of errors. I have checked and debugged the hardware and this is OK by now. I have sources to control the card ready in ASM and Modula-2. Now I only need to finish writing some software which enables the user to get a fast recorder or a slow 'scope.
The project is finished. Follow this link to get all the details and how to download it. This project is completely GPL and Open Source. Including the hardware and the TSR to control the sampling.
EEPROM programmer. The BEPPY project comprises an EEPROM programmer for the LPT port. It is a design with a much broader range than just the programmer in itself. The idea behind this dedign was extending the LPT port such that it becomes available as a medium speed multiword I/O bus. It is not difficult to produce a 16 bits I/O system based on the Beppy schematics. But that's yet another project, called LPTGPIB.
Modula-2. Modula-2 is the singlemost recent child from the dynasty of Wirthian languages. It all started out with Algol in the sixties and evolved to Pascal and later Modula-2. Modula was designed for writing operating systems with. That's why it has many low level functions built in which are not present in most other languages. If you are looking for a programming language for which a free of charge compiler is available, together with a decent user library.
I used Modula-2 as the language to control my Beppy interface.
Please follow the link (in the navigator) to the dedicated Modula-2 pages.
I2C I am working on an I2C extension for the Parino card. And I already completed the I2C monitor (almost). Check out the I2C related subjects.
plotter In the Sheets project I explain how to use standard laserprinter to produce plotter-output. Every laserjet compatible printer can switch into HPGL mode. And in that mode, linedrawing becomes very easy and efficient. Check out this site if you want to learn to control that letterchisel.
sheets Armed with the knowledge of the plotter project, I designed some software for making easy to use process performance sheets. These sheets are easy to make and the source can be adapted easily by any reasonably experienced programmer. Or ported to Linux.
RAM cell Once upon a time, I wanted to be efficient and bought a series of RAM (Rechargable Alkaline Manganese) cells. These are fine cells, but not for my applications. And while charging in my alledgedly dedicated charger, one cell was overheated and ruptured. Read about my biased experiences with RAM cells.
VGAlib library Once upon a century, when people needed to be in control of their PC's they used DOS. Single tasking, single user, but fast and reliable. For that platform I made this graphic library and wrote it first in assembly and next ported it to Modula-2.
KittScanner The Kittscanner is based on the walking lights under the hood of Kitt, the talking car in the series 'Night rider'. My Kittscanner does not talk, but it runs 32 LED's back and forth without the aid of a microprocessor. Just some cheap old TTL chips and cross thinking do the trick.
LPTester I made the LPTester to help a friend (or customer, who's to tell?) in his programming lessons. The LPTester is a small box, with a powersupply, some LED's and a serial ADC. Plus some other goodies. All connected to a standard LPT port. This is a nice 'feedback' appliance for newby programmers since the kit offers feedback in several degrees and levels. And feedback is what you need when learning a new language or any other trick.
assembly language. As you will be aware of by now, I like the efficiency and easyness of assembly language. To show and share this, I have added HTML code to some ASM sources so the program flow can be browsed. With the AnyBrowser, of course.. :o)

Page created in 2003 and