[Coco] os9 intercept call from C
Walter Zambotti
zambotti at iinet.net.au
Sun Apr 19 00:34:32 EDT 2020
Gene
I am certain the ansifront in the Climax C compiler is the same one.
It's just a re-bundling by someone who (not sure) that was pulling
together all the C resources they could muster.
The Climax C compiler is in the CoCo archive (which is where I am sure I
got it from).
Walter
On 2020-04-19 12:25, Gene Heskett wrote:
> On Saturday 18 April 2020 22:35:15 Walter Zambotti wrote:
>
>> On 2020-04-19 01:03, Gene Heskett wrote:
>>> On Saturday 18 April 2020 12:44:08 Walter Zambotti wrote:
>>>> Opps nine characters long!!!
>>>>
>>>> Which is exactly when the Ansi front end will start converting long
>>>> variable names to hashes.
>>> What ansi front end are you refering to?
>> The Ansi front end that comes with the Climax C compiler.
>> I'm using the -A switch on cc to trigger ansi mode.
>>
> Never heard of it. All of my C work used the microware c compiler along
> with c.opt2, ansifront, and the c.prep19 I finished up after Mikes prof
> gave him a passing grade for an unfinished program. Then I bought a copy
> of SAS-C 6.51 for the Amiga, ported all my stuff to that, After that I
> found a compiler for Bill Hawes Arrex which had ALL the tools to write
> good software for it, and have looked back only rarely since. One could
> interrupt the microware C process after c.pass2 and hand optimize the
> code for noticeable speed gains, the finish the build. This also allowed
> me to insert a major speedup in the form of a table lookup crc, and
> rzsz3.36 incorporated that. That however was not enough to get it up to
> 9600 baud, and a major buffer rearrangement would have been needed to
> accommodate that but the coco was out of memory so that never got done.
>
> Today I am into cnc machinery and supplying folks with a custom near
> realtime kernel and LinuxCNC builds for raspbian buster running on a
> rpi4b which is running a 75 yo Sheldon 11x54 lathe, making it do tricks
> it was never capable of doing originally. Bed wear over those 75 years
> has been compensated for and it can now do rigid tapping with any tap,
> metric or imperial that you can lay your hands on. Or if you want 66 tpi
> on a 3/4" bolt I can arrange that too including the nuts for it. I have
> another smaller lathe that can also do all that, and a 2, 4 axis milling
> machines, one a gantry style with a 24k rpm spindle. So I'm well equipt
> to make most anything I need. I have stuff on hand that can make gears,
> but before I can use it, I have to make a hoist to put it on the big
> mills table as it weighs nearly 80 kg. So I bought a hoist, Chinese of
> course, but I have to weld up custom mounts as what it came with doesn't
> fit Merican iron. For that I need 75F weather and almost no wind so it
> doesn't blow away my MIG welders gas as its $125 to refill an 18" tall
> bottle. Argon, + 25% co2, which puts carbon back into the weld making it
> much stronger.
>
> Some folks might call me a JOAT. Lotsa stuff I can say I've BTDT in my
> going on 86 years here.
>
>>>> On 2020-04-19 00:41, Walter Zambotti wrote:
>>>>> That's what I have trying to say guys.
>>>>>
>>>>> The intercept function is not in the standard library as expected.
>>>>>
>>>>> At least for me if I comment out my intercept function then it
>>>>> fails to link with unresolved reference to intercept.
>>>>>
>>>>> Figured out what is going wrong with the missing intercept library
>>>>> function.
>>>>>
>>>>> An rdump shows it is in the library.
>>>>>
>>>>> The problem starts when compiling with Ansi front end. It
>>>>> converts the reference to _hexvalue which I can see on the _ntbl
>>>>> file.
>>>>>
>>>>> Which it should not do. Especially since 'intercept' is only 8
>>>>> characters long.
>>>>>
>>>>> I suppose that's another bug in the Ansi front end.
>>>>>
>>>>> I reverted the code back to K&R and it compiles and links with no
>>>>> problem.
>>>>>
>>>>> Thanks guys
>>>>>
>>>>> Walter
>>>>>
>>>>> On 2020-04-18 23:38, Alex Evans wrote:
>>>>>> Largely ignoring the fact that the above code uses ANSI syntax
>>>>>> and the only MW C Compiler I am aware of for the CoCo uses K&R.
>>>>>> If you use the provided intercept function in the library, the
>>>>>> function to be called is a normal C function which takes an
>>>>>> integer as a parameter (no RTI). If you are going to finable
>>>>>> about directly using F$Icpt to set you trap, it needs to return
>>>>>> using RTI. In addition, you need to set the pointer to the
>>>>>> routine's storage area in U, but in the case of the function you
>>>>>> have provided, it does not appear to need any storage space, so
>>>>>> the fact you didn't set U shouldn't be a problem.
>>>>>>
>>>>>> I would think (untested) the answer would be:
>>>>>> int catchall();
>>>>>>
>>>>>> int intflag=0;
>>>>>>
>>>>>> main(argc, argv)
>>>>>> int argc;
>>>>>> char *argv[];
>>>>>> {
>>>>>> intercept(catchall);
>>>>>> while (!intrlag) {
>>>>>> pause();
>>>>>> write(1, "*", 1);
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> catchall(sig)
>>>>>> int sig;
>>>>>> {
>>>>>> intfrag=sig==0x03;
>>>>>> }
>>>>>>
>>>>>> If your really, really want to directly use the system call, you
>>>>>> need to also pull the signal number from somewhere. The routine
>>>>>> expexted by F$cpt is a machine code routine, and sig will
>>>>>> probably not be passed on the stack in the manner that MW C
>>>>>> expects, so you need to figure out where it would be.
>>> Cheers, Gene Heskett
>
> Cheers, Gene Heskett
More information about the Coco
mailing list