My coding expedition had taken me to my final year project from University – a meta-assembler written in Modula-2. In my second year I had used Benchmark Modula-2 to write my Modula-2 assignments, but by the time I got into my third year I was using Topspeed Modula-2 under MS-DOS on the Twinhead 8088 with hard drive. I thought it would be ‘fun’ to attempt to back-port this project back onto my Amiga.
It’s worth explaining that one of Modula-2’s main tricks is to provide the ability to define an interface to a code module which is separate from the implementation. The interface is defined in a ‘definition’ module, and an implementation of that module is defined in the, yes you guessed it, implementation module. The idea being that you can swap out the implementation without affecting the interface. You might find a more efficient way of doing things, or in this case provide a machine/operating-system specific implementation without affecting the rest of the code base.
I had tried to isolate the code that interacts with the operating system into a single module and knew that this would take some effort to get working under the different environment presented by the Amiga. This work went quite well and I was able to leverage the Amiga-specific I/O modules and also improve on the separation between definition module and implementation to remove the last implementation specific type definitions from the definition module.
All good stuff. The meta-assembler takes a single program module called ADM that defines a machine for which the meta-assembler is targeted (a meta-assembler is an assembler that can be used to assemble to different machine architectures). The ADM module I provided as part of the project is for the 68000 processor.
When compiling the implementation module I think I have hit a hard limit. I get the following error message:
200 (not yet implemented)
The manual defines the issue as follows:
‘The source program uses an unimplemented function in the compiler. This error should not occur under normal circumstances.’
So there we have it. I think what has happened is that I’ve hit some sort of hard limit in the compiler. Now I have a decision to make – do I persevere or give up. Given how much time I have been able to dedicate to this Retrochallenge I think I might just quietly move on.