Hi Paul, I did something similar. Except I took C source, compiled it under Linux, used TAS to assemble it, and linked it up on OS/390 to produce non-LE based zlib and bzip2 libraries. You can find the libraries in the assembler section over at http://www.homerow.net, but here's a snippet from the readme that might help you out:
HOW TO USE Since GCC was used to build the object, the standard OS linkage conventions are not used. You will need to pay attention to a few things when using the library. First, you HAVE to provide a stack before calling any of the functions. A 4096 byte stack seems to be sufficient. The address of the stack is placed in register R15 and, since the stack is of the top-down variety, the address MUST point to the end of the stack minus the first frame. Each frame is 96 bytes unless a function requires more than 5 parameters. For instance, calling BZ2_bzBuffToBuffCompress() would require you to reserve the standard 96 bytes, plus 8 more since it has 7 parameters. So: L R15,Stkptr Get address of stack AL R15,=F'4096' Point to end of stack SL R15,=F'104' Reserve first frame ... Setup function parms and call The first 5 parameters of a function are passed in registers R2 through R6. Remaining parameters are placed on the stack starting at offset +96. So, calling BZ2_bzBuffToBuffCompress() would require the stack setup above and: L R2,dest Destination buffer LA R3,destLen Pointer to destination length L R4,source Source buffer L R5,sourceLen Source length L R6,blockSize100k Block size (compression level) MVC 96(4,R15),verbosity Monitoring/debugging level MVC 100(4,R15),workFactor "Speed control" ;-) ... Call function The functions use register R14 for the return address, so to call the BZ2_bzBuffToBuffCompress() function, do the above setup and: L R1,funcptr Load function ptr (use any reg) BASR R14,R1 Call the function For functions that return a value, register R2 will contain the value upon return. Finally, registers R0 through R5 are considered fair game and may be destroyed by the functions, so it is important that you preserve any contents prior to calling a function. Others will have to address your 24/31 bit problem, but I would expect that you'd be okay as long as you didn't use the high byte for addresses for anything weird. Leland