[CDG5] Process Manager

Elliot Nunn elliotnunn at fastmail.com
Sun Dec 30 16:52:39 AWST 2018


https://github.com/elliotnunn/CubeE/tree/processmgr-snapshot

I can build the Process Manager! It *almost* round-trips, except that
the linker puts the segments in the wrong order. Once that is fixed I
will be able to clear up any lurking compilation problems.

The commit message is the command to pipe into BuildCubeE. The commit is
very messy, but I wanted to show this part off.

> On 30 Dec 2018, at 11:34 am, Elliot Nunn <elliotnunn at fastmail.com> wrote:
> 
> Didn't learn my lesson, either. I just spent 30 minutes learning that
> '-opt full' *might* somehow affect code generation.
> 
>> On 30 Dec 2018, at 11:31 am, Jason Duerstock <jason.duerstock at gmail.com> wrote:
>> 
>> Man, you should've asked.  "Check the compiler flags" would've been the first thing I thought of.
>> 
>> On Sat, Dec 29, 2018 at 9:51 PM Elliot Nunn <elliotnunn at fastmail.com> wrote:
>> Like Max, I had a bit of a code-generation problem last night. Thought
>> I'd share it for your entertainment.
>> 
>> As a big part of getting a System build to work, I am recreating the
>> makefiles for the Process Manager. The Process Mgr has a very novel
>> runtime (it actually gets loaded from 'scod' resources by the Segment
>> Loader). With not many clues around about how to build it, I decided
>> that I should take a deep dive at this point and get it round-tripping.
>> System 7.1 seems to be a good fit.
>> 
>> For context, the build is currently producing about 1/2 to 2/3 of a
>> System file, albeit of dubious quality.
>> 
>> Here is the function in question.
>> 
>>        /* CheckUnitTableEntry.  See if the UNITTABLE entry that this driver would occupy
>>         * is acceptable.  For now, just checks whether entry is already in use.
>>         */
>>        OSErr
>>        CheckUnitTableEntry(short resourceID)
>>                {
>>                register DCtlPtr        dCtlPtr;
>>                DCtlHandle                      dCtlHdl;
>>                OSErr                           result;
>> 
>>                result = noErr;
>>                dCtlHdl = (DCtlHandle) UNITTABLE[resourceID];
>>                if ( (dCtlHdl != nil) && ((dCtlPtr = *dCtlHdl) != nil) && ((dCtlPtr->dCtlFlags & DOpened) != 0) )
>>                        result = portInUse;
>> 
>>                return(result);
>>                }
>> 
>> UNITTABLE is defined as (*(Handle **)(0x11C))
>> 
>> The unit table access was compiling to "EXT.L D0; MOVE.L $11C,A0; MOVE.L
>> $0(A0,D0.L*4),A3" when I wanted "EXT.L D0; MOVE.L $11C,A0; ASL #2,D0;
>> MOVE.L $0(A0,D0.L),A3". I fought with this until 1 am, changing headers,
>> types and compiler versions to no avail. I found that the same motif
>> appears in two or three places in that segment, and the ASL persists up
>> to System 7.1.2, after which it was refactored out of existence.
>> 
>> This morning I was about to email the list for help, when in a testament
>> to the "starting really hard at a problem" methodology, the answer came
>> to me. "MOVE.L $0(A0,D0.L*4),A3" is a very fancy-looking addressing
>> mode, I thought. It wouldn't work on a vanilla M68k... Oh! System 7.1
>> *does* run on a 68000, because it supports the Plus and Classic. (I
>> should know, because I grew up using it on a Classic.) The C compiler
>> was being run with the -mc68020 argument because I copied the makefile
>> from the ROM build. Now fixed!
>> _______________________________________________
>> cdg5 mailing list
>> cdg5 at ucc.asn.au
>> https://lists.ucc.gu.uwa.edu.au/mailman/listinfo/cdg5
>> _______________________________________________
>> cdg5 mailing list
>> cdg5 at ucc.asn.au
>> https://lists.ucc.gu.uwa.edu.au/mailman/listinfo/cdg5
> 
> _______________________________________________
> cdg5 mailing list
> cdg5 at ucc.asn.au
> https://lists.ucc.gu.uwa.edu.au/mailman/listinfo/cdg5



More information about the cdg5 mailing list