SAS AMIGA 680x0OBJ Module Disassembler 6.57
Copyright © 1995 SAS Institute, Inc.


Amiga Object File Loader V1.00
68000 Instruction Set

EXTERNAL DEFINITIONS

__chkabort 0000-00    _CreatePPCTask 002A-00    ___libfpinit 0160-00    
___libfpterm 018A-00    __LibInit 01B4-00    __LibOpen 0346-00    
__LibClose 04BA-00    __LibExpunge 053C-00    __OSERR 0068-01    
___base 006C-01    __StackPtr 0070-01    ___stack 0074-01    __ONEXIT 0078-01
__WBenchMsg 007C-01    _WBenchMsg 0080-01    __LibInitTab 0000-02

SECTION 00 "text" 000005EC BYTES
;   1: #define  _USEOLDEXEC_ 1
;   2: #include <exec/types.h>
;   3: #include <exec/nodes.h>
;   4: #include <exec/memory.h>
;   5: #include <exec/resident.h>
;   6: #include <exec/libraries.h>
;   7: #include <exec/execbase.h>
;   8: #include <libraries/dos.h>
;   9: #include <proto/exec.h>
;  10: #include <proto/dos.h>
;  11: #include <string.h>
;  12: #include <dos/dostags.h>
;  13: #include <PowerUP/PPCLib/Interface.h>
;  14: #include <PowerUP/PPCLib/tasks.h>
;  15: #include <PowerUP/PPCLib/ppc.h>
;  16: #include <PowerUP/PPCLib/object.h>
;  17: #include <PowerUP/PPCDisslib/PPCDiss.h>
;  18: #include <PowerUP/pragmas/ppc_pragmas.h>
;  19: #include <PowerUP/clib/ppc_protos.h>
;  20: #include <PowerUP/pragmas/ppcdiss_pragmas.h>
;  21: #include <PowerUP/clib/ppcdiss_protos.h>
;  22: 
;  23: 
;  24: /* Prototypes */
;  25: ULONG __asm _LibExpunge( register __a6 struct MyLibrary *libbase );
;  26: ULONG __asm _LibInit   ( register __a0 APTR seglist,
;  27:                          register __d0 struct MyLibrary *libbase );
;  28: 
;  29: int  __saveds __asm __UserLibInit   (register __a6 struct MyLibrary *libbase);
;  30: void __saveds __asm __UserLibCleanup(register __a6 struct MyLibrary *libbase);
;  31: 
;  32: int  __saveds __asm __UserDevInit   (register __d0 long unit,
;  33:                                      register __a0 struct IORequest *ior,
;  34:                                      register __a6 struct MyLibrary *libbase);
;  35: void __saveds __asm __UserDevCleanup(register __a0 struct IORequest *ior,
;  36:                                      register __a6 struct MyLibrary *libbase);
;  37: 
;  38: int  __saveds __asm __libfpinit     (register __a6 struct MyLibrary *libbase);
;  39: void __saveds __asm __libfpterm     (register __a6 struct MyLibrary *libbase);
;  40: void __saveds __asm Set_ElfEntry    (register __a6 struct MyLibrary *libbase, 
;  41:                                      register __d0 long value);
;  42: 
;  43: struct MyLibrary {
;  44:         struct             Library ml_Lib;
;  45:         ULONG              ml_SegList;
;  46:         ULONG              ml_Flags;
;  47:         APTR               ml_ExecBase; /* pointer to exec base  */
;  48: #ifndef ONE_GLOBAL_SECTION
;  49:         long *             ml_relocs;   /* pointer to relocs.    */
;  50:         struct MyLibrary * ml_origbase; /* pointer to original library base  */
;  51:         long               ml_numjmps;
;  52: #endif
;  53:         void *             ml_MyObject; /* pointer to ELF Object */
;  54: 
;  55: };
;  56: 
;  57: typedef LONG (*myPFL)();   /* pointer to function returning 32-bit int      */
;  58: 
;  59: /* library initialization table, used for AUTOINIT libraries                */
;  60: struct InitTable {
;  61:         ULONG        *it_DataSize;       /* library data space size         */
;  62:         myPFL        *it_FuncTable;      /* table of entry points           */
;  63:         APTR         it_DataInit;        /* table of data initializers      */
;  64:         myPFL        it_InitFunc;        /* initialization function to run  */
;  65: };
;  66: 
;  67: #ifndef ONE_GLOBAL_SECTION
;  68: long _OSERR;
;  69: long __base;
;  70: #endif
;  71: 
;  72: /* symbols generated by blink */
;  73: extern char __far _LibID[];             /* ID string                        */
;  74: extern char __far _LibName[];           /* Name string                      */
;  75: extern char __far RESLEN;               /* size of init data                */
;  76: extern long __far NEWDATAL;             /* size of global data              */
;  77: extern long __far NUMJMPS;              /* number of jmp vectors to copy    */
;  78: extern myPFL _LibFuncTab[];             /* my function table                */
;  79: extern long __far _LibVersion;          /* Version of library               */
;  80: extern long __far _LibRevision;         /* Revision of library              */
;  81: 
;  82: long _StackPtr;
;  83: long __stack;
;  84: long __base;
;  85: long _ONEXIT;
;  86: struct WBStartup *_WBenchMsg;
;  87: struct WBStartup *WBenchMsg;
;  88: 
;  89: 
;  90: #define MYVERSION ((long)&_LibVersion)
;  91: #define MYREVISION ((long)&_LibRevision)
;  92: #define DATAWORDS ((long)&NEWDATAL)     /* magic to get right tpye of reloc */ 
;  93: #define SIZEJMPTAB ((long)libbase->ml_origbase->ml_numjmps)
;  94:                                         /* size in bytes of jmp table       */
;  95: 
;  96: /* From libent.o, needed to determine where data is loaded by loadseg       */
;  97: extern long far _Libmergeddata; 
;  98: 
;  99: #define MYLIBRARYSIZE ((sizeof(struct MyLibrary) +3) & ~3)
; 100: 
; 101: 
; 102: 
; 103: struct InitTable __far _LibInitTab =  {
; 104:         (long *)(&RESLEN+MYLIBRARYSIZE),
; 105:         _LibFuncTab,
; 106:         NULL,                        /* will initialize my own data */
; 107:         _LibInit,
; 108: };
; 109: 
; 110: 
; 111: int _chkabort(void)
       | 0000  594F                           SUBQ.W      #4,A7
       | 0002  2E8E                           MOVE.L      A6,(A7)
; 112: {
; 113:     return 0;
       | 0004  7000                           MOVEQ       #00,D0
; 114: }
       | 0006  584F                           ADDQ.W      #4,A7
       | 0008  4E75                           RTS
       | 000A  646F                           BCC.B       007B
       | 000C  732E                           
       | 000E  6C69                           BGE.B       0079
       | 0010  6272                           BHI.B       0084
       | 0012  6172                           BSR.B       0086
       | 0014  7900                           
       | 0016  7070                           MOVEQ       #70,D0
       | 0018  632E                           BLS.B       0048
       | 001A  6C69                           BGE.B       0085
       | 001C  6272                           BHI.B       0090
       | 001E  6172                           BSR.B       0092
       | 0020  7900                           
       | 0022  5F5F                           SUBQ.W      #7,(A7)+
       | 0024  456E                           
       | 0026  7472                           MOVEQ       #72,D2
       | 0028  7900                           
; 115: 
; 116: 
; 117: 
; 118: 
; 119: int CreatePPCTask(struct MyLibrary *libbase, void *entry)
       | 002A  514F                           SUBQ.W      #8,A7
       | 002C  48E7 0136                      MOVEM.L     D7/A2-A3/A5-A6,-(A7)
       | 0030  266F 0024                      MOVEA.L     0024(A7),A3
       | 0034  2A6F 0020                      MOVEA.L     0020(A7),A5
       | 0038  2F4E 0014                      MOVE.L      A6,0014(A7)
; 120: {
; 121:     static struct TagItem	MyTags[13];
; 122:     struct DOSLibrary *DOSBase;
; 123:     struct Library *PPCLibBase;
; 124:     long result;
; 125:     
; 126:     DOSBase = (void *)OpenLibrary("dos.library", 0);
       | 003C  43FA FFCC                      LEA         FFCC(PC),A1
       | 0040  7000                           MOVEQ       #00,D0
       | 0042  2C78 0004                      MOVEA.L     0004,A6
       | 0046  4EAE FDD8                      JSR         FDD8(A6)
       | 004A  2440                           MOVEA.L     D0,A2
; 127:     if (DOSBase == NULL) return -1;
       | 004C  200A                           MOVE.L      A2,D0
       | 004E  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 0052  6606                           BNE.B       005A
       | 0054  70FF                           MOVEQ       #FF,D0
       | 0056  6000 0100                      BRA.W       0158
; 128: 
; 129:     if ((PPCLibBase = OpenLibrary("ppc.library",0)) == NULL)
       | 005A  43FA FFBA                      LEA         FFBA(PC),A1
       | 005E  7000                           MOVEQ       #00,D0
       | 0060  2C78 0004                      MOVEA.L     0004,A6
       | 0064  4EAE FDD8                      JSR         FDD8(A6)
       | 0068  2F40 0018                      MOVE.L      D0,0018(A7)
       | 006C  4A80                           TST.L       D0
       | 006E  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 0072  6610                           BNE.B       0084
; 130:     {
; 131:         CloseLibrary((void *)DOSBase);
       | 0074  224A                           MOVEA.L     A2,A1
       | 0076  2C78 0004                      MOVEA.L     0004,A6
       | 007A  4EAE FE62                      JSR         FE62(A6)
; 132:         return -1;
       | 007E  70FF                           MOVEQ       #FF,D0
       | 0080  6000 00D6                      BRA.W       0158
; 133:     }
; 134: 
; 135:     MyTags[0].ti_Tag	=	PPCTASKTAG_STOPTASK;
       | 0084  297C 8002 0012  0000-01.2      MOVE.L      #80020012,01.00000000(A4)
; 136:     MyTags[0].ti_Data	=	FALSE;
       | 008C  42AC  0004-01.2                CLR.L       01.00000004(A4)
; 137:     MyTags[1].ti_Tag	=	PPCTASKTAG_WAITFINISH;
       | 0090  297C 8002 0031  0008-01.2      MOVE.L      #80020031,01.00000008(A4)
; 138:     MyTags[1].ti_Data	=	TRUE;
       | 0098  7001                           MOVEQ       #01,D0
       | 009A  2940  000C-01.2                MOVE.L      D0,01.0000000C(A4)
; 139:     MyTags[2].ti_Tag	=	PPCTASKTAG_INPUTHANDLE;
       | 009E  297C 8002 000F  0010-01.2      MOVE.L      #8002000F,01.00000010(A4)
; 140:     MyTags[2].ti_Data	=	(ULONG) Input();
       | 00A6  2C4A                           MOVEA.L     A2,A6
       | 00A8  4EAE FFCA                      JSR         FFCA(A6)
       | 00AC  2940  0014-01.2                MOVE.L      D0,01.00000014(A4)
; 141:     MyTags[3].ti_Tag	=	PPCTASKTAG_OUTPUTHANDLE;
       | 00B0  297C 8002 0010  0018-01.2      MOVE.L      #80020010,01.00000018(A4)
; 142:     MyTags[3].ti_Data	=	(ULONG) Output();
       | 00B8  2C4A                           MOVEA.L     A2,A6
       | 00BA  4EAE FFC4                      JSR         FFC4(A6)
       | 00BE  2940  001C-01.2                MOVE.L      D0,01.0000001C(A4)
; 143:     MyTags[4].ti_Tag	=	PPCTASKTAG_ARG1;
       | 00C2  297C 8002 0003  0020-01.2      MOVE.L      #80020003,01.00000020(A4)
; 144:     MyTags[4].ti_Data	=	(ULONG) 0;
       | 00CA  42AC  0024-01.2                CLR.L       01.00000024(A4)
; 145:     MyTags[5].ti_Tag	=	PPCTASKTAG_STACKSIZE;
       | 00CE  297C 8002 000D  0028-01.2      MOVE.L      #8002000D,01.00000028(A4)
; 146:     MyTags[5].ti_Data	=	0x10000;
       | 00D6  297C 0001 0000  002C-01.2      MOVE.L      #00010000,01.0000002C(A4)
; 147:     MyTags[6].ti_Tag	=	NP_CloseInput;
       | 00DE  297C 8000 03EE  0030-01.2      MOVE.L      #800003EE,01.00000030(A4)
; 148:     MyTags[6].ti_Data	=	FALSE;
       | 00E6  42AC  0034-01.2                CLR.L       01.00000034(A4)
; 149:     MyTags[7].ti_Tag	=	NP_CloseOutput;
       | 00EA  297C 8000 03EF  0038-01.2      MOVE.L      #800003EF,01.00000038(A4)
; 150:     MyTags[7].ti_Data	=	FALSE;
       | 00F2  42AC  003C-01.2                CLR.L       01.0000003C(A4)
; 151:     MyTags[8].ti_Tag	=	PPCTASKTAG_BREAKSIGNAL;
       | 00F6  297C 8002 0019  0040-01.2      MOVE.L      #80020019,01.00000040(A4)
; 152:     MyTags[8].ti_Data	=	TRUE;
       | 00FE  7001                           MOVEQ       #01,D0
       | 0100  2940  0044-01.2                MOVE.L      D0,01.00000044(A4)
; 153:     MyTags[9].ti_Tag	=	PPCTASKTAG_ARG3;
       | 0104  297C 8002 0005  0048-01.2      MOVE.L      #80020005,01.00000048(A4)
; 154:     MyTags[9].ti_Data	=	(ULONG) libbase;
       | 010C  294D  004C-01.2                MOVE.L      A5,01.0000004C(A4)
; 155:     MyTags[10].ti_Tag	=	PPCTASKTAG_ARG4;
       | 0110  297C 8002 0006  0050-01.2      MOVE.L      #80020006,01.00000050(A4)
; 156:     MyTags[10].ti_Data	=	(ULONG) entry;
       | 0118  294B  0054-01.2                MOVE.L      A3,01.00000054(A4)
; 157:     MyTags[11].ti_Tag	=	PPCTASKTAG_ARG2;
       | 011C  297C 8002 0004  0058-01.2      MOVE.L      #80020004,01.00000058(A4)
; 158:     MyTags[11].ti_Data	=	(ULONG) _WBenchMsg;
       | 0124  296C  007C-01.2   005C-01.2    MOVE.L      01.0000007C(A4),01.0000005C(A4)
; 159: 
; 160:     MyTags[12].ti_Tag	=	TAG_END;
       | 012A  42AC  0060-01.2                CLR.L       01.00000060(A4)
; 161: 
; 162:     CloseLibrary((void *)DOSBase);
       | 012E  224A                           MOVEA.L     A2,A1
       | 0130  2C78 0004                      MOVEA.L     0004,A6
       | 0134  4EAE FE62                      JSR         FE62(A6)
; 163: 
; 164:     result =  (ULONG) PPCCreateTask(libbase->ml_MyObject,
; 165:                                     &MyTags[0]);
       | 0138  206D 003A                      MOVEA.L     003A(A5),A0
       | 013C  43EC  0000-01.2                LEA         01.00000000(A4),A1
       | 0140  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 0144  4EAE FFAC                      JSR         FFAC(A6)
       | 0148  2E00                           MOVE.L      D0,D7
; 166:                                      
; 167:     CloseLibrary(PPCLibBase);
       | 014A  226F 0018                      MOVEA.L     0018(A7),A1
       | 014E  2C78 0004                      MOVEA.L     0004,A6
       | 0152  4EAE FE62                      JSR         FE62(A6)
; 168:     return result; 
       | 0156  2007                           MOVE.L      D7,D0
; 169: 
; 170: }
       | 0158  4CDF 6C80                      MOVEM.L     (A7)+,D7/A2-A3/A5-A6
       | 015C  504F                           ADDQ.W      #8,A7
       | 015E  4E75                           RTS
; 171: 
; 172: /* PPC functions that run the PPC autoinitializers */
; 173: extern int _fpinit(void);
; 174: extern int _fpterm(void);
; 175: 
; 176: int  __saveds __asm __libfpinit(register __a6 struct MyLibrary *libbase)
       | 0160  594F                           SUBQ.W      #4,A7
       | 0162  48E7 000E                      MOVEM.L     A4-A6,-(A7)
       | 0166  2A4E                           MOVEA.L     A6,A5
       | 0168  49EE  0000-XX.2                LEA         _LinkerDB(A6),A4
       | 016C  2F4E 000C                      MOVE.L      A6,000C(A7)
; 177: {
; 178:     return CreatePPCTask(libbase, _fpinit);
       | 0170  41FA  0000-XX.1                LEA         __fpinit(PC),A0
       | 0174  2F08                           MOVE.L      A0,-(A7)
       | 0176  2F0D                           MOVE.L      A5,-(A7)
       | 0178  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 017C  6100 FEAC                      BSR.W       002A
       | 0180  504F                           ADDQ.W      #8,A7
; 179: }
       | 0182  4CDF 7000                      MOVEM.L     (A7)+,A4-A6
       | 0186  584F                           ADDQ.W      #4,A7
       | 0188  4E75                           RTS
; 180: 
; 181: void __saveds __asm __libfpterm(register __a6 struct MyLibrary *libbase)
       | 018A  594F                           SUBQ.W      #4,A7
       | 018C  48E7 000E                      MOVEM.L     A4-A6,-(A7)
       | 0190  2A4E                           MOVEA.L     A6,A5
       | 0192  49EE  0000-XX.2                LEA         _LinkerDB(A6),A4
       | 0196  2F4E 000C                      MOVE.L      A6,000C(A7)
; 182: {
; 183:     CreatePPCTask(libbase, _fpterm);
       | 019A  41FA  0000-XX.1                LEA         __fpterm(PC),A0
       | 019E  2F08                           MOVE.L      A0,-(A7)
       | 01A0  2F0D                           MOVE.L      A5,-(A7)
       | 01A2  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 01A6  6100 FE82                      BSR.W       002A
       | 01AA  504F                           ADDQ.W      #8,A7
; 184: }
       | 01AC  4CDF 7000                      MOVEM.L     (A7)+,A4-A6
       | 01B0  584F                           ADDQ.W      #4,A7
       | 01B2  4E75                           RTS
; 185: 
; 186: 
; 187: 
; 188: 
; 189: 
; 190: 
; 191: __asm ULONG _LibInit( register __a0 APTR seglist,
; 192:                       register __d0 struct MyLibrary *libbase )
       | 01B4  9EFC 003C                      SUBA.W      #003C,A7
       | 01B8  48E7 0136                      MOVEM.L     D7/A2-A3/A5-A6,-(A7)
       | 01BC  2640                           MOVEA.L     D0,A3
       | 01BE  2A48                           MOVEA.L     A0,A5
       | 01C0  2F4E 0014                      MOVE.L      A6,0014(A7)
; 193: {
; 194: #ifdef ONE_GLOBAL_SECTION
; 195:     long *reloc;
; 196: #endif
; 197:     long *sdata;
; 198:     char *ddata;
; 199:     long nrelocs;
; 200:     struct TagItem MyTags[3];
; 201:     extern __far long _ElfObject;
; 202:     struct Library *PPCLibBase;
; 203: 
; 204:     libbase->ml_SegList = (ULONG) seglist;
       | 01C4  274D 0022                      MOVE.L      A5,0022(A3)
; 205: 
; 206:     /* init. library structure (since I don't do automatic data init.) */
; 207: #ifdef DEVICE
; 208:     libbase->ml_Lib.lib_Node.ln_Type = NT_DEVICE;
; 209: #else
; 210:     libbase->ml_Lib.lib_Node.ln_Type = NT_LIBRARY;
       | 01C8  177C 0009 0008                 MOVE.B      #09,0008(A3)
; 211: #endif
; 212:     libbase->ml_Lib.lib_Node.ln_Name =  _LibName;
       | 01CE  41F9  0000 0000-XX             LEA         __LibName,A0
       | 01D4  2748 000A                      MOVE.L      A0,000A(A3)
; 213:     libbase->ml_Lib.lib_Flags = LIBF_SUMUSED | LIBF_CHANGED;
       | 01D8  177C 0006 000E                 MOVE.B      #06,000E(A3)
; 214:     libbase->ml_Lib.lib_Version = MYVERSION;
       | 01DE  41F9  0000 0000-XX             LEA         __LibVersion,A0
       | 01E4  2008                           MOVE.L      A0,D0
       | 01E6  3740 0014                      MOVE.W      D0,0014(A3)
; 215:     libbase->ml_Lib.lib_Revision = MYREVISION;
       | 01EA  41F9  0000 0000-XX             LEA         __LibRevision,A0
       | 01F0  2008                           MOVE.L      A0,D0
       | 01F2  3740 0016                      MOVE.W      D0,0016(A3)
; 216:     libbase->ml_Lib.lib_IdString = (APTR) _LibID;
       | 01F6  277C  0000 0000-XX  0018       MOVE.L      #__LibID,0018(A3)
; 217: #ifndef ONE_GLOBAL_SECTION
; 218:     libbase->ml_relocs = NULL;
       | 01FE  42AB 002E                      CLR.L       002E(A3)
; 219:     libbase->ml_origbase = libbase;
       | 0202  274B 0032                      MOVE.L      A3,0032(A3)
; 220:     sdata = (long *)_LibInitTab.it_FuncTable;
       | 0206  2479  0000 0004-02             MOVEA.L     02.00000004,A2
; 221:     libbase->ml_numjmps = (long)&NUMJMPS;
       | 020C  277C  0000 0000-XX  0036       MOVE.L      #_NUMJMPS,0036(A3)
; 222: #endif
; 223: 
; 224: 
; 225:     /* load the PPC ELF stub */
; 226:     MyTags[0].ti_Tag = PPCELFLOADTAG_ELFADDRESS;
       | 0214  2F7C 8002 3301 0034            MOVE.L      #80023301,0034(A7)
; 227:     MyTags[0].ti_Data = (long)&_ElfObject;
       | 021C  2F7C  0000 0000-XX  0038       MOVE.L      #__ElfObject,0038(A7)
; 228:     MyTags[1].ti_Tag = PPCELFLOADTAG_ELFNAME;
       | 0224  2F7C 8002 3300 003C            MOVE.L      #80023300,003C(A7)
; 229:     MyTags[1].ti_Data = (long)_LibName;
       | 022C  2F7C  0000 0000-XX  0040       MOVE.L      #__LibName,0040(A7)
; 230:     MyTags[2].ti_Tag = TAG_DONE;
       | 0234  42AF 0044                      CLR.L       0044(A7)
; 231: 
; 232: 
; 233:     if ((PPCLibBase = OpenLibrary("ppc.library",0)) == NULL)
       | 0238  43FA FDDC                      LEA         FDDC(PC),A1
       | 023C  7000                           MOVEQ       #00,D0
       | 023E  2C78 0004                      MOVEA.L     0004,A6
       | 0242  4EAE FDD8                      JSR         FDD8(A6)
       | 0246  2F40 0030                      MOVE.L      D0,0030(A7)
       | 024A  4A80                           TST.L       D0
       | 024C  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 0250  6606                           BNE.B       0258
; 234:        return NULL;
       | 0252  7000                           MOVEQ       #00,D0
       | 0254  6000 00E6                      BRA.W       033C
; 235: 
; 236:     if (libbase->ml_MyObject=PPCLoadObjectTagList(MyTags))
       | 0258  41EF 0034                      LEA         0034(A7),A0
       | 025C  2C6F 0030                      MOVEA.L     0030(A7),A6
       | 0260  4EAE FE68                      JSR         FE68(A6)
       | 0264  2740 003A                      MOVE.L      D0,003A(A3)
       | 0268  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 026C  4A80                           TST.L       D0
       | 026E  6738                           BEQ.B       02A8
; 237:     {
; 238:         struct PPCObjectInfo MyInfo;
; 239: 
; 240:         MyInfo.Address   =        0;
       | 0270  42AF 0018                      CLR.L       0018(A7)
; 241:         MyInfo.Name      =        "__Entry";
       | 0274  41FA FDAC                      LEA         FDAC(PC),A0
       | 0278  2F48 001C                      MOVE.L      A0,001C(A7)
; 242:         MyTags[0].ti_Tag =        TAG_END;
       | 027C  42AF 0034                      CLR.L       0034(A7)
; 243: 
; 244:         PPCGetObjectAttrs(libbase->ml_MyObject,
; 245:                           &MyInfo,
; 246:                           MyTags);
       | 0280  2F0A                           MOVE.L      A2,-(A7)
       | 0282  206B 003A                      MOVEA.L     003A(A3),A0
       | 0286  43EF 001C                      LEA         001C(A7),A1
       | 028A  2C6F 0034                      MOVEA.L     0034(A7),A6
       | 028E  45EF 0038                      LEA         0038(A7),A2
       | 0292  4EAE FF3A                      JSR         FF3A(A6)
       | 0296  245F                           MOVEA.L     (A7)+,A2
; 247:         Set_ElfEntry(libbase, MyInfo.Address);
       | 0298  202F 0018                      MOVE.L      0018(A7),D0
       | 029C  2C4B                           MOVEA.L     A3,A6
       | 029E  6100  0000-XX.1                BSR.W       _Set_ElfEntry
       | 02A2  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 02A6  6012                           BRA.B       02BA
; 248:         
; 249:     }
; 250:     else
; 251:     {
; 252:        CloseLibrary(PPCLibBase);
       | 02A8  226F 0030                      MOVEA.L     0030(A7),A1
       | 02AC  2C78 0004                      MOVEA.L     0004,A6
       | 02B0  4EAE FE62                      JSR         FE62(A6)
; 253:        return NULL;
       | 02B4  7000                           MOVEQ       #00,D0
       | 02B6  6000 0084                      BRA.W       033C
; 254:     }
; 255:     CloseLibrary(PPCLibBase);
       | 02BA  226F 0030                      MOVEA.L     0030(A7),A1
       | 02BE  2C78 0004                      MOVEA.L     0004,A6
       | 02C2  4EAE FE62                      JSR         FE62(A6)
; 256: 
; 257: 
; 258:      /* Start of copy of global data after structure */
; 259:     ddata = (char *)libbase + MYLIBRARYSIZE; 
       | 02C6  41EB 0040                      LEA         0040(A3),A0
       | 02CA  2F48 004C                      MOVE.L      A0,004C(A7)
; 260: 
; 261:     sdata = (long *)&_Libmergeddata; /* where loadseg loaded the data */
       | 02CE  45F9  0000 0000-XX             LEA         __Libmergeddata,A2
; 262:     memcpy(ddata, (void *)sdata, DATAWORDS*4);
       | 02D4  41F9  0000 0000-XX             LEA         _NEWDATAL,A0
       | 02DA  2008                           MOVE.L      A0,D0
       | 02DC  2200                           MOVE.L      D0,D1
       | 02DE  E581                           ASL.L       #2,D1
       | 02E0  204A                           MOVEA.L     A2,A0
       | 02E2  226F 004C                      MOVEA.L     004C(A7),A1
       | 02E6  6002                           BRA.B       02EA
       | 02E8  12D8                           MOVE.B      (A0)+,(A1)+
       | 02EA  5381                           SUBQ.L      #1,D1
       | 02EC  64FA                           BCC.B       02E8
; 263: 
; 264:     /* perform relocs if we want one global section for all programs */
; 265:     /* that have this lib open. If we want a global section for each */
; 266:     /* open, copy the relocs, and do them on each open call.         */
; 267:     sdata = sdata + DATAWORDS;
       | 02EE  41F9  0000 0000-XX             LEA         _NEWDATAL,A0
       | 02F4  2008                           MOVE.L      A0,D0
       | 02F6  2200                           MOVE.L      D0,D1
       | 02F8  E581                           ASL.L       #2,D1
       | 02FA  D5C1                           ADDA.L      D1,A2
; 268:     nrelocs = *sdata;
       | 02FC  2E12                           MOVE.L      (A2),D7
       | 02FE  2C6F 0014                      MOVEA.L     0014(A7),A6
; 269: #ifdef ONE_GLOBAL_SECTION
; 270:     sdata++;
; 271:     while (nrelocs > 0)
; 272:     {
; 273:        reloc = (long *)((long)ddata + *sdata++);
; 274:        *reloc += (long)ddata;
; 275:        nrelocs--;
; 276:     }
; 277:     
; 278:     
; 279: #ifndef DEVICE
; 280:     if (__UserLibInit(libbase) != 0)
; 281:        return NULL; /* abort if user init failed */
; 282: #endif
; 283: 
; 284: #else
; 285:     if (nrelocs) 
       | 0302  4A87                           TST.L       D7
       | 0304  6734                           BEQ.B       033A
; 286:     {
; 287:       if ((libbase->ml_relocs = AllocMem((nrelocs * 4) + 4, MEMF_PUBLIC)) == NULL)
       | 0306  2007                           MOVE.L      D7,D0
       | 0308  E580                           ASL.L       #2,D0
       | 030A  5880                           ADDQ.L      #4,D0
       | 030C  7201                           MOVEQ       #01,D1
       | 030E  2C78 0004                      MOVEA.L     0004,A6
       | 0312  4EAE FF3A                      JSR         FF3A(A6)
       | 0316  2740 002E                      MOVE.L      D0,002E(A3)
       | 031A  4A80                           TST.L       D0
       | 031C  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 0320  6604                           BNE.B       0326
; 288:         return 0;
       | 0322  7000                           MOVEQ       #00,D0
       | 0324  6016                           BRA.B       033C
; 289:       memcpy((void *)libbase->ml_relocs, (void *)sdata, (nrelocs * 4) + 4);
       | 0326  2007                           MOVE.L      D7,D0
       | 0328  E580                           ASL.L       #2,D0
       | 032A  5880                           ADDQ.L      #4,D0
       | 032C  204A                           MOVEA.L     A2,A0
       | 032E  226B 002E                      MOVEA.L     002E(A3),A1
       | 0332  6002                           BRA.B       0336
       | 0334  12D8                           MOVE.B      (A0)+,(A1)+
       | 0336  5380                           SUBQ.L      #1,D0
       | 0338  64FA                           BCC.B       0334
; 290:     }
; 291: #endif
; 292: 
; 293:     return ( (ULONG) libbase );
       | 033A  200B                           MOVE.L      A3,D0
; 294: }
       | 033C  4CDF 6C80                      MOVEM.L     (A7)+,D7/A2-A3/A5-A6
       | 0340  DEFC 003C                      ADDA.W      #003C,A7
       | 0344  4E75                           RTS
; 295: 
; 296: LONG __asm _LibOpen( 
; 297: #ifdef DEVICE
; 298:                      register __d0 long unit,
; 299:                      register __a1 struct IORequest *ior,
; 300: #endif
; 301:                      register __a6 struct MyLibrary *libbase )
       | 0346  9EFC 001C                      SUBA.W      #001C,A7
       | 034A  48E7 0136                      MOVEM.L     D7/A2-A3/A5-A6,-(A7)
       | 034E  2A4E                           MOVEA.L     A6,A5
       | 0350  2F4E 0018                      MOVE.L      A6,0018(A7)
; 302: {
; 303: #ifndef ONE_GLOBAL_SECTION
; 304:     struct MyLibrary *origbase = libbase;
       | 0354  264D                           MOVEA.L     A5,A3
; 305:     struct ExecBase *SysBase = *(struct ExecBase **)4;
       | 0356  307C 0004                      MOVEA.W     #0004,A0
       | 035A  2450                           MOVEA.L     (A0),A2
; 306:     char *newlib;
; 307:     long *sdata, *ddata, *reloc;
; 308:     long nrelocs;
; 309: #endif
; 310: 
; 311: 
; 312: char *a = 0;
       | 035C  42AF 001C                      CLR.L       001C(A7)
; 313: *a = 0;
       | 0360  206F 001C                      MOVEA.L     001C(A7),A0
       | 0364  4210                           CLR.B       (A0)
; 314: 
; 315:     /* mark us as having another customer */
; 316:     libbase->ml_Lib.lib_OpenCnt++;
       | 0366  526D 0020                      ADDQ.W      #1,0020(A5)
; 317: 
; 318:     /* clear delayed expunges (standard procedure) */
; 319:     libbase->ml_Lib.lib_Flags &= ~LIBF_DELEXP;
       | 036A  08AD 0003 000E                 BCLR        #0003,000E(A5)
; 320: 
; 321: #ifndef ONE_GLOBAL_SECTION
; 322:     /* Allocate new lib base */
; 323:     newlib = AllocMem((long)(MYLIBRARYSIZE + 
       | 0370  41F9  0000 0000-XX             LEA         _RESLEN,A0
       | 0376  226D 0032                      MOVEA.L     0032(A5),A1
       | 037A  2008                           MOVE.L      A0,D0
       | 037C  D0A9 0036                      ADD.L       0036(A1),D0
       | 0380  7240                           MOVEQ       #40,D1
       | 0382  D081                           ADD.L       D1,D0
       | 0384  2F40 0014                      MOVE.L      D0,0014(A7)
; 324:                              ((long)&RESLEN) + SIZEJMPTAB), 
; 325:                              MEMF_PUBLIC|MEMF_CLEAR);
       | 0388  202F 0014                      MOVE.L      0014(A7),D0
       | 038C  223C 0001 0001                 MOVE.L      #00010001,D1
       | 0392  2C78 0004                      MOVEA.L     0004,A6
       | 0396  4EAE FF3A                      JSR         FF3A(A6)
       | 039A  2F40 002C                      MOVE.L      D0,002C(A7)
; 326: 
; 327:     if (newlib == NULL) goto error;
       | 039E  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 03A2  6608                           BNE.B       03AC
       | 03A4  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 03A8  6000 00F2                      BRA.W       049C
; 328:         
; 329:     /* copy over data */
; 330:     memcpy(newlib, (char *)libbase - SIZEJMPTAB, 
; 331:            (long)(MYLIBRARYSIZE + DATAWORDS*4 + SIZEJMPTAB));
       | 03AC  206D 0032                      MOVEA.L     0032(A5),A0
       | 03B0  224D                           MOVEA.L     A5,A1
       | 03B2  93E8 0036                      SUBA.L      0036(A0),A1
       | 03B6  4DF9  0000 0000-XX             LEA         _NEWDATAL,A6
       | 03BC  200E                           MOVE.L      A6,D0
       | 03BE  2200                           MOVE.L      D0,D1
       | 03C0  E581                           ASL.L       #2,D1
       | 03C2  D2A8 0036                      ADD.L       0036(A0),D1
       | 03C6  7040                           MOVEQ       #40,D0
       | 03C8  D280                           ADD.L       D0,D1
       | 03CA  206F 002C                      MOVEA.L     002C(A7),A0
       | 03CE  6002                           BRA.B       03D2
       | 03D0  10D9                           MOVE.B      (A1)+,(A0)+
       | 03D2  5381                           SUBQ.L      #1,D1
       | 03D4  64FA                           BCC.B       03D0
; 332:     
; 333:     libbase = (struct MyLibrary *)(newlib+SIZEJMPTAB);
       | 03D6  206D 0032                      MOVEA.L     0032(A5),A0
       | 03DA  226F 002C                      MOVEA.L     002C(A7),A1
       | 03DE  D3E8 0036                      ADDA.L      0036(A0),A1
       | 03E2  2A49                           MOVEA.L     A1,A5
; 334:     libbase->ml_relocs = NULL;
       | 03E4  42AD 002E                      CLR.L       002E(A5)
; 335:     
; 336:     /* perform relocs */       
; 337:     ddata = (long *)((char *)libbase + MYLIBRARYSIZE); 
       | 03E8  41ED 0040                      LEA         0040(A5),A0
       | 03EC  2F48 0024                      MOVE.L      A0,0024(A7)
; 338:     sdata = libbase->ml_origbase->ml_relocs;
       | 03F0  206D 0032                      MOVEA.L     0032(A5),A0
       | 03F4  2268 002E                      MOVEA.L     002E(A0),A1
       | 03F8  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 03FC  2F49 0028                      MOVE.L      A1,0028(A7)
; 339:     if (sdata)
       | 0400  6738                           BEQ.B       043A
; 340:     {
; 341:        nrelocs = *sdata++;
       | 0402  206F 0028                      MOVEA.L     0028(A7),A0
       | 0406  2E18                           MOVE.L      (A0)+,D7
       | 0408  2F48 0028                      MOVE.L      A0,0028(A7)
       | 040C  2C6F 0018                      MOVEA.L     0018(A7),A6
; 342:        while (nrelocs > 0)
       | 0410  4A87                           TST.L       D7
       | 0412  6F26                           BLE.B       043A
; 343:        {
; 344:           reloc = (long *)((long)ddata + *sdata++);
       | 0414  202F 0024                      MOVE.L      0024(A7),D0
       | 0418  2200                           MOVE.L      D0,D1
       | 041A  206F 0028                      MOVEA.L     0028(A7),A0
       | 041E  D298                           ADD.L       (A0)+,D1
       | 0420  2F41 0020                      MOVE.L      D1,0020(A7)
       | 0424  2F48 0028                      MOVE.L      A0,0028(A7)
; 345:           *reloc += (long)ddata;
       | 0428  202F 0024                      MOVE.L      0024(A7),D0
       | 042C  206F 0020                      MOVEA.L     0020(A7),A0
       | 0430  D190                           ADD.L       D0,(A0)
; 346:           nrelocs--;
       | 0432  5387                           SUBQ.L      #1,D7
       | 0434  2C6F 0018                      MOVEA.L     0018(A7),A6
; 347:        }
       | 0438  60D6                           BRA.B       0410
; 348:     }
; 349: 
; 350:     /* now we need to flush the cache because we copied the jmp table */
; 351:     if (SysBase->LibNode.lib_Version >= 36) 
       | 043A  0C6A 0024 0014                 CMPI.W      #0024,0014(A2)
       | 0440  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 0444  6508                           BCS.B       044E
; 352:       CacheClearU();
       | 0446  2C78 0004                      MOVEA.L     0004,A6
       | 044A  4EAE FD84                      JSR         FD84(A6)
; 353: 
; 354: #ifdef DEVICE
; 355:     ior->io_Device = (struct Device *)libbase; /* local copy of libary base */
; 356: #endif
; 357: 
; 358:     if (__libfpinit(libbase) || 
       | 044E  2C4D                           MOVEA.L     A5,A6
       | 0450  6100 FD0E                      BSR.W       0160
       | 0454  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 0458  4A80                           TST.L       D0
       | 045A  660E                           BNE.B       046A
; 359: #ifdef DEVICE
; 360:         __UserDevInit(unit, ior, libbase) != 0
; 361: #else
; 362:         __UserLibInit(libbase) != 0
       | 045C  2C4D                           MOVEA.L     A5,A6
       | 045E  6100  0000-XX.1                BSR.W       ___UserLibInit
       | 0462  4A80                           TST.L       D0
       | 0464  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 0468  6744                           BEQ.B       04AE
; 363: #endif
; 364:        )
; 365:     {
; 366:        __libfpterm(libbase);
       | 046A  2C4D                           MOVEA.L     A5,A6
       | 046C  6100 FD1C                      BSR.W       018A
; 367:        FreeMem(newlib, (long)(MYLIBRARYSIZE + 
       | 0470  41F9  0000 0000-XX             LEA         _RESLEN,A0
       | 0476  226D 0032                      MOVEA.L     0032(A5),A1
       | 047A  2008                           MOVE.L      A0,D0
       | 047C  D0A9 0036                      ADD.L       0036(A1),D0
       | 0480  7240                           MOVEQ       #40,D1
       | 0482  D081                           ADD.L       D1,D0
       | 0484  2F40 0014                      MOVE.L      D0,0014(A7)
; 368:                        ((long)&RESLEN) + SIZEJMPTAB));
       | 0488  226F 002C                      MOVEA.L     002C(A7),A1
       | 048C  202F 0014                      MOVE.L      0014(A7),D0
       | 0490  2C78 0004                      MOVEA.L     0004,A6
       | 0494  4EAE FF2E                      JSR         FF2E(A6)
       | 0498  2C6F 0018                      MOVEA.L     0018(A7),A6
; 369: error:
; 370:        origbase->ml_origbase->ml_Lib.lib_OpenCnt--;
       | 049C  206B 0032                      MOVEA.L     0032(A3),A0
       | 04A0  3028 0020                      MOVE.W      0020(A0),D0
       | 04A4  5340                           SUBQ.W      #1,D0
       | 04A6  3140 0020                      MOVE.W      D0,0020(A0)
; 371:        return NULL; /* abort if user init failed */
       | 04AA  7000                           MOVEQ       #00,D0
       | 04AC  6002                           BRA.B       04B0
; 372:     }
; 373: 
; 374: #else
; 375: #ifdef DEVICE
; 376:     if (__UserDevInit(unit, ior, libbase) != 0)
; 377:     {
; 378:         libbase->ml_Lib.lib_OpenCnt--;
; 379:         return NULL;
; 380:     }    
; 381: #endif
; 382: #endif
; 383: 
; 384:     return ( (LONG) libbase );
       | 04AE  200D                           MOVE.L      A5,D0
; 385: }
       | 04B0  4CDF 6C80                      MOVEM.L     (A7)+,D7/A2-A3/A5-A6
       | 04B4  DEFC 001C                      ADDA.W      #001C,A7
       | 04B8  4E75                           RTS
; 386: 
; 387: ULONG __asm _LibClose( 
; 388: #ifdef DEVICE
; 389:                        register __a1 struct IORequest *ior,
; 390: #endif                       
; 391:                        register __a6 struct MyLibrary *libbase )
       | 04BA  514F                           SUBQ.W      #8,A7
       | 04BC  48E7 0116                      MOVEM.L     D7/A3/A5-A6,-(A7)
       | 04C0  2A4E                           MOVEA.L     A6,A5
       | 04C2  2F4E 0014                      MOVE.L      A6,0014(A7)
; 392: {
; 393:     ULONG retval = 0;
       | 04C6  7E00                           MOVEQ       #00,D7
; 394:     
; 395: #ifndef ONE_GLOBAL_SECTION
; 396:     struct MyLibrary *origbase;
; 397: 
; 398:     if (libbase != libbase->ml_origbase)
       | 04C8  206D 0032                      MOVEA.L     0032(A5),A0
       | 04CC  B1CD                           CMPA.L      A5,A0
       | 04CE  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 04D2  6740                           BEQ.B       0514
; 399:     {
; 400: #ifdef DEVICE
; 401:        __UserDevCleanup(ior, libbase);
; 402: #else
; 403:        __UserLibCleanup(libbase);
       | 04D4  2C4D                           MOVEA.L     A5,A6
       | 04D6  6100  0000-XX.1                BSR.W       ___UserLibCleanup
; 404: #endif
; 405:        __libfpterm(libbase);
       | 04DA  2C4D                           MOVEA.L     A5,A6
       | 04DC  6100 FCAC                      BSR.W       018A
; 406:        origbase = libbase->ml_origbase;
       | 04E0  266D 0032                      MOVEA.L     0032(A5),A3
; 407:        FreeMem((char *)libbase-SIZEJMPTAB, 
       | 04E4  206D 0032                      MOVEA.L     0032(A5),A0
       | 04E8  224D                           MOVEA.L     A5,A1
       | 04EA  93E8 0036                      SUBA.L      0036(A0),A1
       | 04EE  2F49 0010                      MOVE.L      A1,0010(A7)
; 408:                (long)(MYLIBRARYSIZE + ((long)&RESLEN)+SIZEJMPTAB));
       | 04F2  41F9  0000 0000-XX             LEA         _RESLEN,A0
       | 04F8  226D 0032                      MOVEA.L     0032(A5),A1
       | 04FC  2008                           MOVE.L      A0,D0
       | 04FE  D0A9 0036                      ADD.L       0036(A1),D0
       | 0502  7240                           MOVEQ       #40,D1
       | 0504  D081                           ADD.L       D1,D0
       | 0506  226F 0010                      MOVEA.L     0010(A7),A1
       | 050A  2C78 0004                      MOVEA.L     0004,A6
       | 050E  4EAE FF2E                      JSR         FF2E(A6)
; 409:        libbase = origbase;
       | 0512  2A4B                           MOVEA.L     A3,A5
; 410:     }
; 411: #else
; 412: #ifdef DEVICE
; 413:     __UserDevCleanup(ior, libbase);
; 414: #endif
; 415: #endif
; 416: 
; 417:     if (( --libbase->ml_Lib.lib_OpenCnt == 0 ) &&
       | 0514  536D 0020                      SUBQ.W      #1,0020(A5)
       | 0518  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 051C  6614                           BNE.B       0532
; 418:                         ( libbase->ml_Lib.lib_Flags & LIBF_DELEXP ))
       | 051E  082D 0003 000E                 BTST        #0003,000E(A5)
       | 0524  2C6F 0014                      MOVEA.L     0014(A7),A6
       | 0528  6708                           BEQ.B       0532
; 419:     {
; 420:         /* no more people have me open,
; 421:          * and I have a delayed expunge pending
; 422:          */
; 423:          retval = _LibExpunge( libbase ); /* return segment list        */
       | 052A  2C4D                           MOVEA.L     A5,A6
       | 052C  6100 000E                      BSR.W       053C
       | 0530  2E00                           MOVE.L      D0,D7
; 424:     }
; 425: 
; 426:     return (retval);
       | 0532  2007                           MOVE.L      D7,D0
; 427: }
       | 0534  4CDF 6880                      MOVEM.L     (A7)+,D7/A3/A5-A6
       | 0538  504F                           ADDQ.W      #8,A7
       | 053A  4E75                           RTS
; 428: 
; 429: ULONG __asm _LibExpunge( register __a6 struct MyLibrary *libbase )
       | 053C  594F                           SUBQ.W      #4,A7
       | 053E  48E7 2316                      MOVEM.L     D2/D6-D7/A3/A5-A6,-(A7)
       | 0542  2A4E                           MOVEA.L     A6,A5
       | 0544  2F4E 0018                      MOVE.L      A6,0018(A7)
; 430: {
; 431:     ULONG seglist = 0;
       | 0548  7E00                           MOVEQ       #00,D7
; 432:     LONG  libsize;
; 433:     struct Library *PPCLibBase;
; 434: 
; 435: #ifndef ONE_GLOBAL_SECTION
; 436:     libbase = libbase->ml_origbase;
       | 054A  204D                           MOVEA.L     A5,A0
       | 054C  2A68 0032                      MOVEA.L     0032(A0),A5
; 437: #endif
; 438: 
; 439:     libbase->ml_Lib.lib_Flags |= LIBF_DELEXP;
       | 0550  08ED 0003 000E                 BSET        #0003,000E(A5)
; 440:     if ( libbase->ml_Lib.lib_OpenCnt == 0 )
       | 0556  4A6D 0020                      TST.W       0020(A5)
       | 055A  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 055E  6600 0082                      BNE.W       05E2
; 441:     {
; 442:         /* really expunge: remove libbase and freemem        */
; 443: #ifndef ONE_GLOBAL_SECTION
; 444:         if (libbase->ml_relocs)
       | 0562  202D 002E                      MOVE.L      002E(A5),D0
       | 0566  6718                           BEQ.B       0580
; 445:            FreeMem(libbase->ml_relocs, (*libbase->ml_relocs * 4) + 4);
       | 0568  206D 002E                      MOVEA.L     002E(A5),A0
       | 056C  2010                           MOVE.L      (A0),D0
       | 056E  2200                           MOVE.L      D0,D1
       | 0570  E581                           ASL.L       #2,D1
       | 0572  5881                           ADDQ.L      #4,D1
       | 0574  2248                           MOVEA.L     A0,A1
       | 0576  2001                           MOVE.L      D1,D0
       | 0578  2C78 0004                      MOVEA.L     0004,A6
       | 057C  4EAE FF2E                      JSR         FF2E(A6)
; 446: #else
; 447:         __UserLibCleanup(libbase);
; 448: #endif
; 449: 
; 450:         if (PPCLibBase = OpenLibrary("ppc.library",0))
       | 0580  43FA FA94                      LEA         FA94(PC),A1
       | 0584  7000                           MOVEQ       #00,D0
       | 0586  2C78 0004                      MOVEA.L     0004,A6
       | 058A  4EAE FDD8                      JSR         FDD8(A6)
       | 058E  2640                           MOVEA.L     D0,A3
       | 0590  2C6F 0018                      MOVEA.L     0018(A7),A6
       | 0594  200B                           MOVE.L      A3,D0
       | 0596  6714                           BEQ.B       05AC
; 451:         {
; 452:            PPCUnLoadObject(libbase->ml_MyObject);
       | 0598  206D 003A                      MOVEA.L     003A(A5),A0
       | 059C  2C4B                           MOVEA.L     A3,A6
       | 059E  4EAE FFDC                      JSR         FFDC(A6)
; 453:            CloseLibrary(PPCLibBase);
       | 05A2  224B                           MOVEA.L     A3,A1
       | 05A4  2C78 0004                      MOVEA.L     0004,A6
       | 05A8  4EAE FE62                      JSR         FE62(A6)
; 454:         }
; 455:         
; 456:         seglist = libbase->ml_SegList;
       | 05AC  2E2D 0022                      MOVE.L      0022(A5),D7
; 457: 
; 458:         Remove( (struct Node *) libbase);
       | 05B0  224D                           MOVEA.L     A5,A1
       | 05B2  2C78 0004                      MOVEA.L     0004,A6
       | 05B6  4EAE FF04                      JSR         FF04(A6)
; 459: 
; 460:         libsize = libbase->ml_Lib.lib_NegSize + libbase->ml_Lib.lib_PosSize;
       | 05BA  7000                           MOVEQ       #00,D0
       | 05BC  302D 0010                      MOVE.W      0010(A5),D0
       | 05C0  7200                           MOVEQ       #00,D1
       | 05C2  322D 0012                      MOVE.W      0012(A5),D1
       | 05C6  2400                           MOVE.L      D0,D2
       | 05C8  D481                           ADD.L       D1,D2
       | 05CA  2C02                           MOVE.L      D2,D6
; 461:         FreeMem( (char *) libbase - libbase->ml_Lib.lib_NegSize,(LONG) libsize );
       | 05CC  204D                           MOVEA.L     A5,A0
       | 05CE  7000                           MOVEQ       #00,D0
       | 05D0  302D 0010                      MOVE.W      0010(A5),D0
       | 05D4  91C0                           SUBA.L      D0,A0
       | 05D6  2248                           MOVEA.L     A0,A1
       | 05D8  2006                           MOVE.L      D6,D0
       | 05DA  2C78 0004                      MOVEA.L     0004,A6
       | 05DE  4EAE FF2E                      JSR         FF2E(A6)
; 462:     }
; 463: 
; 464:     /* return NULL or real seglist                                */
; 465:     return ( (ULONG) seglist );
       | 05E2  2007                           MOVE.L      D7,D0
; 466: }
       | 05E4  4CDF 68C4                      MOVEM.L     (A7)+,D2/D6-D7/A3/A5-A6
       | 05E8  584F                           ADDQ.W      #4,A7
       | 05EA  4E75                           RTS

SECTION 01 "__MERGED" 00000084 BYTES

SECTION 02 "data" 00000010 BYTES
0000 00000040-XX _RESLEN+00000040
0004 00000000-XX __LibFuncTab
OFFSETS 0008 THROUGH 000B CONTAIN ZERO
000C 000001B4-00 00.000001B4
