The Philosophy of Problems

A common issue new Mecrisp-Stellaris users encounter is the “Jump too far” compiler error message.

Error Message

Description

Jump too far

All jumps use Thumb1 short opcodes. Solution; split your code into smaller Words

I fought thru this myself years ago and I found it very annoying because it was stopping my program from working, at least that was my initial reaction.

As tempting as it is to blame Mecrisp-Stellaris for this impediment, the real issues like most things in life are far more complex.

Please bear with me as I detour slightly.

Forth is above all else, a PROBLEM SOLVING SYSTEM

It has been said that one does not write a program in Forth
           Rather, one extends Forth to make a new language
                                      Specifically designed
                                For the application at hand

I think this is a very important principle, so important that I’m always asking myself, “what is the problem I’m trying to solve?”.

I believe that the answer is always built into the question, but to get the right answer, the right question must be asked. If I don’t understand the problem, I can’t ask the right questions.

… back to our topic.

What Problem is Mecrisp-Stellaris solving ?

Why did Matthias Koch write Mecrisp-Stellaris, what problem(s) was he trying to solve ?

I’m obviously NOT Matthias Koch but I do have some observations gathered since I began learning Mecrisp-Stellaris Forth in 2014. These are my opinions, and only Matthias knows the actual motivations underlying his design. I don’t believe they are a secret and I’m sure Matthias would be pleased to give them if asked.

What do I know about Dr Koch ?

  • Is a scientist who thinks in MSP430 Assembly Language

  • Thinks “outside the box” and is highly creative.

  • Studies the natural world to learn from Mother Nature

  • Loves efficiency and abhors waste and bloat

  • Loves solving complex algorithms

  • Designed Mecrisp for himself, not for you or I, but freely gave it to us believing it may be useful.

  • Believes that if he can do anything, so can you or I. Matthias is an equal opportunity genius.

Can we get to the point please ?

Based on what I know about Matthias, I believe he created Mecrisp-* because he wanted a highly efficient, small, fast, self optimising, reliable Forth to test and showcase his capabilities and to use in his daily work and life interfacing with the real world.

How does this concern the “Jump too far” error ?

Could Matthias make this error go away ?

I’m sure he could, but would he, that’s the real question.

My personal opinion is that his current strategy provides the fastest/most efficient solution for his design time and he probably feels that if we see this as a problem, then we are free to change Mecrisp-Stellaris for ourselves because his sourcecode is freely available under the GPL license.

Comment on the “Jump too far” error message from Matthias Koch

I considered adding longer jumps at the beginning, but then I ran into the problem that I could not reuse the same code on M0 as on M3/M4. Optimisation of the control structures is a tricky piece, as control structures require backpatching of jump opcodes. How much memory should be reserved for the opcode without knowing the necessary range in advance ? As I had no urgent need for longer jump ranges, I just did it the easy way: All jumps use M0 short opcodes.

It’s mostly a balance of my needs vs the implimentation development time

Rationale Behind This Page

A new user will inevitably encounter many or all of the Mecrisp-Stellaris Error Messages and anything that stops our code from working can be very annoying.

I believe it pays to understand the aims and goals of the Mecrisp-Stellaris Architect when trying to understand what an error message means, what it is trying to tell us to help fix our problem.

Finally, I’ve been using Mecrisp-Stellaris since 2014 and although I have thought I’ve found dozens of bugs, I have never found a single actual bug.

All I have discovered again and again, is my own ignorance of Forth or insufficient logic in my design, fortunately both conditions have a cure, read, design, code and build as often as you can.