As you might expect by now, I am a member of the Forth
gg (dutch for Forth user group). We are very active with robotics and
hardware control. Yes, that is the user group that has won the most awards
over the last 14 years at the dutch computer fair "HCC dagen". Fall 1995
we won the second prize with a kind of monkey climbing along a cable, a
fully autonomous robot exhibiting a diversity of behaviours. That was a creation of
Willem Ouwerkerk, now a famous artist robot builder.
At present the awards are too political too be worthy of being proud
off.
If we can reproduce it, we must make a list of all the awards we have won
in the course of the history of the "HCC dagen".
Off we go. some projects in Forth.
FORTHERS AWAKE! STOP WRITING THOSE TOY PROGRAMS!
If you decide to embark on one of these projects, you can be assured of my help. Or even cooperation. You can learn a lot! And not in the last place about project control. (I prefer that over "project management". Some "well managed" projects I have seen failing. I am very proud of one audit on a project where I was the project leader. It amounts to "project management is bad and the project is fully under control". A two year project and I was added to it in the last three months. It was fully out of hand when I started. I had to discard a 300 page detailed design document.)
I am at a dan3+ level at least in c, c++, assembler, Forth, reverse engineering and project control. But you know that. Because you have seen my site and you haven't quit yet.
The ciforth project is the only of those that has already started.
It is a "common Intel" ISO Forth intended to run on multiple platforms.
It is a generic system that generates an
assembler file in multiple configuration for bootable and MSDOS and Linux, 32 and 16 bits,
protected and unprotected, complete or with loadable extensions.
The Linux version has been stable for a long time now,
likewise the Windows (DPMI) version and a version customized for Windows XP.
It has the complete ISO core set plus what is deemed practical: CATCH
GET-FILE INCLUDED BLOCKS string-handling.
It has complete
documentation and is published on this site.
It stands my own recurrence test and
the well-known test suite of the John Hopkins university.
I can use some help, because this is never finished.
There is now a stable and and an experimental branch,
where I'm busy with optimisation.
The other day I was testing the SAVE-SYSTEM of my ciforth . It crashes. Apparently it has not the proper format, somehow. Under LINUX I fire up the much touted gdb . It refuses to run... because the format is no good. An unpleasant experience... (Since then I have found the mistake I made in the ELF header.)
I want a debugger written in Forth. Not like the debuggers that are
in some Forth's. They are just part of that
Forth and are only able to run well-behaved Forth code.
No, I want a truly mouse and window oriented debugger at the system
level and has the appearance and interactivity of the Atari debugger.
One that starts will a screen chock full of information.
It should be present at a level
higher than the BIOS and certainly higher than Windows,
and allow to improve the BIOS code and write it back.
This can be done: the ICE boys did it.
The ultimate reverse engineering tool.
The disassembler of my
Forth assembler for Intel
could be one starting point.
This beast should probably come in several version.
The most important one is windows "driver", that once installed
takes over the machine.
Features: highest privilege level, permanent data store to keep
reverse info,
I constantly use ee. It is like emacs and designed at about the same time. Without the bloat and without some of the design errors. It is written is C. With mouse support, windows integration etc. Coding at an ee-clone could start right away. No need to write documentation. It has been all done! I am using it right now. In this www-directory the keys are configured to put A /A around an marked area. Features: multiple file, configurable keys, configurable mouse click, configuration depending on current directory, unlimited undo, journalling.
My Intel 386 assembler has been enhanced with all the instruction from the Pentium architecture. This was straightforward, painstaking but rewarding. The total instruction set of the Pentium, including floating point and the sixteen bit instructions is also present in the screens of the latest cforth. Leaving out the error detection and explanations results in slightly over a dozen screens for the full assembler.
Documenting my Intel 386 assembler is a project in its own right. It has redesigned mnemonics, especially designed for reverse engineering. The Intel instruction set where 3 or 4 machine code instructions map unto the same assembler instruction is no good for that! Because of the complication of the Intel processor and its addressing mode, this is quite challenging. But I have succeeded in supplementing the documentation with a cross reference between the two systems. So this is another project finished, but I could use a helping hand because this kind of documentation really needs others to go over it to make it unusable.
This project is part of the effort to put Forth and in particular
ciforth on the map as a Linux development language.
The Netherlands POSTBANK has a brain damaged program to access
your bank account over the phone.
It must be possible to make a much better program.
Some politics gets involved: you must get the specification of
the protocol accessing the postbank computer.
If they refuse, it becomes a reverse engineering job.
I can learn you how to do that!
A prerequisite (or part) of this program is that we have learned
to use the mouse in Forth.
Features:
You see just the transaction records, later additions :
checking against cashier slips and such.
This project is part of the effort to put Forth and in particular
ciforth on the map as a Linux development language.
You may have seen the X' program on this home
page. It is a general solver for ODE (Ordinary Differential
Equations), for the specification of a whole spectra of
physical system. In Forth this can be done much better, less
bloated. Also the user interface must be redesigned to be
simpler and more intuitive, except for the plotting subpart,
that was contributed by me. (Anecdote. That was, at first shot,
a contribution of 40 man hours. One other X'-prime members
contributed 600 man hours to the project, without any effect in
the code. But although this was C++, I am a Forth programmer.
). A prerequisite (or part) of this program is that we have
learned to use the mouse in Forth.
People have criticized the Forth community for elitist behaviour. I want to better my ways. I am willing to cooperate with a novice to translate the ciforth manual in dutch (the use of English was one of the criticisms). Because the novice has to understand everything, he will learn a lot. Of course modifications to be better suited for novices can be made in parallel, or maybe afterwards.
This project is part of the effort to put Forth and in particular
ciforth on the map as a Linux development language.
Did you know that each map can be coloured with just four colors?
This has been proven mathematically, just a few years ago and
the proof was extremely hard and involved looking at so many
special cases that a computer program had to be invoked.
By generating a random map, this problem can be turned into
a game. Click on a each country to change its color, and the
game is won as soon as no neighbouring countries have the same color.
The puzzle is hard if each country has sufficient neighbours.
So we start with a brick wall, where each brick has six neighbours.
Then we make a random modification such that two bricks together
form one area. Of course there is a time limit and a high score.
Like this
______________________________________________________________ |__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|_ |__|__|__| |__|__|__|__|__|__|__|_____|__|__|__|_____|__|__|__|_ |__|__|_ |__|__|_____|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__| |_____|__|_ |__|__|__|_ |__|__|__|__| _|__|__|__|__|__|__|__|_ |__|__|__|__|__|__|__|__|__|_____|__|__|__|__|__|__|__|__|__|__| |__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|
Because this is an original game, it can draw more attention. This game has the advantage of the possibly of using character graphics. Colored blocks is all you need.
This project is part of the effort to put Forth and in particular
ciforth on the map as a Linux development language.
Some of the nice games from MS-windows are not available under
Linux. I think card games are well suited, because the graphics
is not complicated. Just rectangular cards, to be drawn somewhere.
The mouse clicks are not complicated either.
But I am convinced that MS-Windows games that runs under Linux
simulator for MS-Windows (WINE) will be outperformed by
a similar game written in Forth, probably dramatically.
Once in Forth we have a
toolkit with mouse access and such, we can build card games
fast and easily.
This may not be original, but if it is playable it will
attract an audience. If it is a popular game that is not
available otherwise under Linux, the better.
This project is part of the effort to put Forth and in particular
ciforth on the map as a Linux development language.
The documentation systems of tforth
, ciforth and fig86.gnr all rely on ssort. This
program allows to sort records defined by regular expressions
and once you have used it, you will find it indispensable. This
program is available in C++, is released for MSDOS and its
binary is available
on request for Linux.
I want to have it rewritten in Forth, in the
hope that it will make it into all Linux distributions as a
Forth program. Because it is indispensable.
Coding at ssort could start right away. No need to write
documentation. That has been all done! No need to write test
cases, that has all been done. There is little in the way of
researching Linux system calls, such as for GUI projects. This
should be an very attractive project for someone who wants to
earn kudos in the Linux community, promoting Forth on
the way.
By the way. I will refuse any cooperating for projects other than open source. I prefer using the GNU license.