"How can I contribute to the project?"

If you woud like to contribute to my efforts, you are very welcome. I have made a list of tasks that need to be done whenever time permits. Just pick a task you like and send me a mail via newtonos@matthiasm.com.


Requirements

Please download Einstein from googlecode.com and compile it, either on Linux or on OS X. Put your ROM file into the _Data_ directory and add symbols.txt there as well. Once you have NewtonOS running inside Einstein, you are ready to go.


Task 1: add Monitor to the MSWindows implementation

If you are a Microsoft coder, you could do us a huge favor by writing the Windows implementation of the Monitor. Einstein uses FLTK 1.3 as a cross-platform UI library. Maybe you can move the code to Qt or the native Windows API to make things smoother.


Task 2: transcode functions

If you already understand parts of the ROM, take your disassembler and find familiar functions. Create s script file that retargets these functions. Then verify that NewtonOS still runs flawlessly. I will collect a list of transcoded functions and add them to The Great Retargeter to create as much retargeted code as possible.

Please make a list of functions that do not translate automatically. If you can, find out why and try to find a solution. The more we can translate automatically, the less we have to hand-code later.

Make sure that functions a put into source files with a sensible name. The better we do this now, the ess work we will have down the road.


Task 3: understanding the REx

Its great to have all those symbolic informations for the ROM, but unfortunatley we have none for the ROM Extension that starts at 0x0071FC4C. I have a bunch ofinformation on it, but no readable labels. Anything you can find out about this is helpful, but I am mostly interested in possible "C" and ARM code entry and exit points, and how they are linked into the ROM via Newton's own implementation of virtaul functions.


Task 4: understanding data blocks

There are several big data blocks in the ROM that we don't understand. Somewhere there is the bitmap data for the fonts, but how is it read? There are dictionaries, but how are they encoded? You task is to use watchpoints to find the functions that decode these blocks, retarget them, and make them available from the Monitor.

The goal is to transcode these database into "C" code or whatever is convinient. modify and fix it, and regenerate the original databases. We need this so that we can add new word to our wordlists, and to optimize font rendering, etc. .

Find those binary blocks by generating an assembler listing and search for symbols that start with a lower case 'g'. If you have a shell, this will give you a rough overview:

grep -A 10 -e '^g[A-Z]' newtonos.s


Task 5: understanding the floating point emulation

The poor little ARM CPU in the MesagePad has no native support for floating point math. ARM assembler defines FP instruction, but on the SA110, they cause an "Unknown Instruction" fault, followed by a myriad of integer math instructions that emulate what could have been in the CPU. If you know how these instructions work exactly, please please write the JIT implementation for Einstein. I will happily translate your code for retargeting.

It makes my eyes hurt to see an emulator emulate ARM code that calls an emulator to emulate FP operations, if you catch my emulated drift ;-) .


Task 6: rewrite the Fiber implementation for your platform

In the "K" library that is part of Einstein, you can find my implementation of fibers. Fibers a the basic puzzle piece to make cooperative user-mode mulitatasking possible. My current implementation sucks and must be repkaced by something much more light-weight. Boost implements just what I needed (boost::context), but they do not supprt OS X in 32 bit mode. If you have any idea how to make a beatiful interface and implementation with the simplicity and minimal overhead of ucontext, please take on this task.


Task 7: finding ARM code in RAM

This may be a bit esoteric and ahead of its time, but it would be interesting nvertheless. All binary code that shall run on NewtonOS in retargeted mode must be retargeted as well. Find and list packages that contain binary code. Try to understand them and share you knowledge. Know packages are the SD card driver by Paul Guyot, the MP3 player by ???, and the Networking Kit by Apple.