home *** CD-ROM | disk | FTP | other *** search
- ****************************************************
- * *
- * PowerPacker library glue code *
- * (for Lattice C) *
- * *
- * Copyright (c) 1990 by Nico François *
- * *
- ****************************************************
-
- *********************************************************************
- * *
- * To assemble the SMALL_CODE version USE: *
- * ASM -oLIB:ppSCglue.o -iINCLUDE: -dSMALL_CODE latticeglue.asm *
- * *
- * To assemble the LARGE_CODE version USE: *
- * ASM -oLIB:ppLCglue.o -iINCLUDE: -dLARGE_CODE latticeglue.asm *
- * *
- * To use link with 'LIB:ppSCglue.o' or 'LIB:ppLCglue.o' *
- * *
- * (based on ARP glue code, thanks arp :-) *
- * *
- *********************************************************************
-
- IFND LIBRARIES_POWERPACKER_LIB_I
- include "libraries/powerpacker_lib.i"
- ENDC
-
- * First some macros
-
- GLUEDEF MACRO
- XDEF _\1
- _\1:
- THIS_LIB SET _LVO\1 ; Set the offset to call
- ENDM
-
- *
- * Set SMALL_CODE=1 for a4 addressing...
- * Set LARGE_CODE=1 for absolute addressing...
- * if neither, just cause an error...
- *
-
- CALLPP MACRO
- move.l a6,-(a7) ; Save a6...
- IFD SMALL_CODE
- move.l _PPBase(a4),a6 ; If a4 addressing....
- ENDC
- IFD LARGE_CODE
- move.l _PPBase,a6 ; If not a4 addressing...
- ENDC
- IFND SMALL_CODE
- IFND LARGE_CODE
- moveq.l #12323,a0 ; Cause an error!
- ENDC
- ENDC
- jsr THIS_LIB(a6)
- move.l (a7)+,a6
- ENDM
-
- * Now for the actual glue routines
-
- XREF _PPBase
-
- SECTION "PPGlue",CODE
-
- * ULONG ppLoadData (char *, ULONG, ULONG, UBYTE **, ULONG *, BOOL (*)());
- * D0 A0 D0 D1 A1 A2 A3
-
- GLUEDEF ppLoadData
- movem.l a2/a3,-(a7)
- move.l 8+4(a7),a0
- movem.l 8+8(a7),d0/d1/a1/a2/a3
- CALLPP
- movem.l (a7)+,a2/a3
- rts
-
- * ULONG ppCalcChecksum (char *);
- * D0 A0
-
- GLUEDEF ppCalcChecksum
- move.l 4(a7),a0
- CALLPP
- rts
-
- * ULONG ppCalcPasskey (char *);
- * D0 A0
-
- GLUEDEF ppCalcPasskey
- move.l 4(a7),a0
- CALLPP
- rts
-
- * void ppDecrypt (UBYTE *, ULONG, ULONG);
- * A0 D0 D1
-
- GLUEDEF ppDecrypt
- move.l 4(a7),a0
- movem.l 8(a7),d0/d1
- CALLPP
- rts
-
- * BOOL ppGetPassword (struct Screen *, UBYTE *, ULONG, ULONG);
- * D0 A0 A1 D0 D1
-
- GLUEDEF ppGetPassword
- movem.l 4(a7),a0/a1
- movem.l 12(a7),d0/d1
- CALLPP
- rts
-
- * void ppDecrunchBuffer (UBYTE *, UBYTE *, ULONG *, ULONG);
- * A0 A1 A2 D0
-
- GLUEDEF ppDecrunchBuffer
- move.l a2,-(a7)
- movem.l 4+4(a7),a0/a1/a2
- move.l 4+16(a7),d0
- CALLPP
- bra.s PopA2rts
-
- * BOOL ppGetString (struct Screen *, UBYTE *, ULONG, char *);
- * D0 A0 A1 D0 A2
-
- GLUEDEF ppGetString
- move.l a2,-(a7)
- movem.l 4+4(a7),a0/a1
- movem.l 4+12(a7),d0/a2
- CALLPP
- PopA2rts:
- move.l (a7)+,a2
- rts
-
- * BOOL ppGetLong (struct Screen *, ULONG *, char *);
- * D0 A0 A1 A2
-
- GLUEDEF ppGetLong
- move.l a2,-(a7)
- movem.l 4+4(a7),a0/a1/a2
- CALLPP
- bra.s PopA2rts
-
- END
-