diff --git a/inc/adr68k.h b/inc/adr68k.h index 8fd36a9..37039be 100644 --- a/inc/adr68k.h +++ b/inc/adr68k.h @@ -9,8 +9,6 @@ * Hiroshi Hayata */ - - /************************************************************************/ /* */ /* Copyright 1989, 1990 Venue, Fuji Xerox Co., Ltd, Xerox Corp. */ @@ -20,8 +18,6 @@ /* */ /************************************************************************/ - - /**********************************************************************/ /* Func name : adr68k.h @@ -32,7 +28,51 @@ */ /**********************************************************************/ +#include +#include +#include "lispemul.h" +#include "lspglob.h" +static inline LispPTR LAddrFromNative(void *NAddr) +{ + if ((uintptr_t)NAddr & 1) { + printf("Misaligned pointer in LAddrFromNative %p\n", NAddr); + } + return ((DLword *)NAddr) - Lisp_world; +} + +static inline DLword *NativeAligned2FromLAddr(LispPTR LAddr) +{ + return (Lisp_world + LAddr); +} + +static inline LispPTR *NativeAligned4FromLAddr(LispPTR LAddr) +{ + if (LAddr & 1) { + printf("Misaligned pointer in NativeAligned4FromLAddr 0x%x\n", LAddr); + } + return (LispPTR *)(Lisp_world + LAddr); +} + +static inline LispPTR *NativeAligned4FromLPage(LispPTR LPage) +{ + return (LispPTR *)(Lisp_world + (LPage << 8)); +} + +static inline DLword StackOffsetFromNative(DLword *SAddr) +{ + /* Stack offsets are expressed as an offset in DLwords from the stack base */ + ptrdiff_t hoffset = SAddr - Stackspace; + if (hoffset > 0xffff) { + printf("Stack offset is too large: 0x%tx\n", hoffset); + } + return (DLword)hoffset; +} + +static inline DLword *NativeAligned2FromStackOffset(DLword StackOffset) +{ + return Stackspace + StackOffset; +} /* translate 68k ptr to Lisp DLword address */ #define LADDR_from_68k(ptr68k) ((LispPTR)(((UNSIGNED)(ptr68k) - (UNSIGNED)Lisp_world) >>1)) @@ -49,10 +89,6 @@ /* translate LispPage to 68k address */ #define Addr68k_from_LPAGE(Lisp_page) (Addr68k_from_LADDR(((Lisp_page) << 8) )) - - - - /* Stack Offset Macros */ #define StkOffset_from_68K(ptr68k)\