home *** CD-ROM | disk | FTP | other *** search
- /* ---------------------------------------------------------------------- */
- /* Copyright (C) 1991 by Natürlich! */
- /* This file is copyrighted! */
- /* Refer to the documentation for details. */
- /* ---------------------------------------------------------------------- */
- #ifndef _CODE_
- # define _CODE_
-
- # define C_ACCU 0
- # define C_IMM 1
- # define C_ABS0 2
- # define C_RELX0 3
- # define C_RELY0 4
- # define C_ABS 5
- # define C_RELX 6
- # define C_RELY 7
- # define C_IMPL 8
- # define C_RELA 9
- # define C_INDX 0xA
- # define C_INDY 0xB
- # define C_IND 0xC
-
- # define DEFORG 0x1000 /* Default PC and PC for reloctable code */
- # define inrange( val, min, max) ((val) >= (min) && (val) < (max))
-
- # ifndef KEINE_CODE_INNEREIEN
-
- /* ---------------------------------------------------------- */
- /* What it all means... */
- /* dbyte - drop 16 bits in MSB LSB order -> FEDCBA98 76543210 */
- /* dbeek - read 16 bits in MSB LSB order */
- /* dpoke - drop 16 bits in LSB MSB order -> 76543210 FEDCBA98 */
- /* dpeek - read 16 bits in LSB MSB order */
- /* */
- /* p.... - as above but increment pointer */
- /* f.... - as above but p must point to word aligned adress */
- /* **-PORT #4-** */
- /* ---------------------------------------------------------- */
- # ifdef poke
- # undef poke
- # endif
- # ifdef peek
- # undef peek
- # endif
- # define dswap( p) (__x = ((byte huge *)( p))[ 1], \
- ((byte huge *)( p))[ 1] = *(byte huge *)( p), \
- *(byte huge *)( p) = __x)
-
- # define lswap( p) (__x = ((byte huge *)( p))[ 3], \
- ((byte huge *)( p))[ 3] = *(byte huge *)( p), \
- *(byte huge *)( p) = __x, \
- __x = ((byte huge *)( p))[ 2], \
- ((byte huge *)( p))[ 2] = ((byte huge *)( p))[ 1], \
- ((byte huge *)( p))[ 1] = __x)
-
- # if ! BIGENDIAN
-
- # define dpoke( p, v) \
- __x = (v); \
- *(byte huge *)(p) = *((byte huge *) &__x + 1); \
- *((byte huge *)(p) + 1) = *((byte huge *) &__x)
- # define dpeek( p) \
- (*((byte huge *) &__x + 1) = *(byte huge *)(p), \
- *(byte huge *) &__x = *((byte huge *) (p) + 1), \
- __x)
-
- # if ! PHILOSOPHICAL_PROBLEM /* and you thought C was portable.. */
- # define pdpoke( p, v) \
- __x = (v); \
- *((byte huge *)(p))++ = (byte) __x; \
- *((byte huge *)(p))++ = *((byte huge *) &__x)
- # define pdpeek( p) \
- (*((byte huge *) &__x + 1) = *((byte huge *)(p))++, \
- *(byte huge *)&__x = *((byte huge *)(p))++, \
- __x)
- # else
- # define pdpoke( p, v) \
- __x = (v); \
- *(byte huge *)(p) = (byte) __x; \
- *((byte huge *)(p)+ 1) = *((byte huge *) &__x); \
- (p) = (void huge *) ((byte huge *) (p) + 2)
- # define pdpeek( p) \
- (*((byte huge *) &__x + 1) = *(byte huge *)(p), \
- *(byte huge *)&__x = *((byte huge *)(p) + 1), \
- (p) = (void huge *) ((byte huge *) (p) + 2), \
- __x)
- # endif
-
- # if WORD_EVEN
- # define lbyte( p, v) \
- __lx = (v); \
- *((byte huge *)(p)) = *((byte huge *) &__lx); \
- *((byte huge *)(p) + 1) = *((byte huge *) &__lx + 1); \
- *((byte huge *)(p) + 2) = *((byte huge *) &__lx + 2); \
- *((byte huge *)(p) + 3) = *((byte huge *) &__lx + 3)
-
- # define lbeek( p) \
- (*((byte huge *) &__lx) = *((byte huge *) (p)), \
- *((byte huge *) &__lx + 1) = *((byte huge *) (p) + 1), \
- *((byte huge *) &__lx + 2) = *((byte huge *) (p) + 2), \
- *((byte huge *) &__lx + 3) = *((byte huge *) (p) + 3), \
- __lx)
-
- # define dbyte( p, v) \
- __x = (v); \
- *(byte huge *)(p) = *(byte huge *) &__x; \
- *((byte huge *)(p) + 1) = *((byte huge *) &__x + 1)
- # define dbeek( p) \
- (*(byte huge *) &__x = *(byte huge *)(p), \
- *((byte huge *) &__x + 1) = *((byte huge *) (p) + 1), \
- __x)
-
- # if ! PHILOSOPHICAL_PROBLEM
- # define pdbyte( p, v) \
- __x = (v); \
- *((byte huge *)(p))++ = *((byte huge *) &__x); \
- *((byte huge *)(p))++ = *((byte huge *) &__x + 1)
- # define pdbeek( p) \
- (*(byte huge *) &__x = *((byte huge *)(p))++, \
- *((byte huge *) &__x + 1)= *((byte huge *)(p))++, \
- __x)
- # else
- # define pdbyte( p, v) \
- __x = (v); \
- *(byte huge *)(p) = *((byte huge *) &__x); \
- *((byte huge *)(p) + 1) = *((byte huge *) &__x + 1); \
- (p) = (void huge *) ((byte huge *) (p) + 2)
- # define pdbeek( p) \
- (*(byte huge *) &__x = *(byte huge *)(p), \
- *((byte huge *) &__x + 1)= *((byte huge *)(p) + 1), \
- (p) = (void huge *) ((byte huge *) (p) + 2), \
- __x)
- # endif
- # else
- # define lbyte( p, v) *(lword huge *)(p) = (lword)(v)
- # define lbeek( p) *((lword huge *)(p))
-
- # define dbyte( p, v) *(word huge *)(p) = (word)(v)
- # define dbeek( p) (*(word huge *)(p))
- # if ! PHILOSOPHICAL_PROBLEM
- # define pdbyte( p, v) *((word huge *)(p))++ = (word)(v)
- # define pdbeek( p) (*((word huge *)(p))++)
- # else
- # define pdbyte( p, v) *(word huge *)(p)= (word)(v); \
- (p) = (void huge *) ((word huge *)(p) + 1)
- # define pdbeek( p) (__x = *(word huge *)(p), \
- (p) = (void huge *) ((word huge *)(p) + 1), \
- __x)
- # endif
- # endif
-
- # if ! PHILOSOPHICAL_PROBLEM
- # define plbyte( p, v) *((lword huge *)(p))++ = (lword)(v)
- # define plbeek( p) *((lword huge *)(p))++
- # else
- # define plbyte( p, v) *(lword huge *)(p) = (lword)(v); \
- (p) = (void huge *) ((lword huge *)(p) + 1)
- # define plbeek( p) (__lx = *(lword huge *)(p), \
- (p) = (void huge *) ((lword huge *) (p) + 1), \
- __lx)
- # endif
- # define fdpoke( p, v) dpoke( p, v)
- # define fdpeek( p) dpeek( p)
- # define fdbyte( p, v) *(word huge *)(p) = (word)(v)
- # define fdbeek( p) (*(word huge *)(p))
- # define fpdpoke( p, v) pdpoke( p, v)
- # define fpdpeek( p) pdpeek( p)
- # if ! PHILOSOPHICAL_PROBLEM
- # define fpdbyte( p, v) *((word huge *)(p))++ = (word)(v)
- # define fpdbeek( p) (*((word huge *)(p))++)
- # else
- # define fpdbyte( p, v) *((word huge *)(p)) = (word)(v); \
- (p) = (void huge *) ((word huge *)(p) + 1)
- # define fpdbeek( p) (__x = *(word huge *)(p), \
- (p) = (void huge *) ((word huge *)(p) + 1), \
- __x)
- # endif
-
- # else /* ------ BIG ENDIAN ------ */
-
-
- # if WORD_EVEN
- # define dpoke( p, v) \
- __x = (v); \
- *(byte huge *)(p) = *(byte huge *) &__x; \
- *((byte huge *)(p) + 1) = *((byte huge *) &__x + 1)
- # define dpeek( p) \
- (*(byte huge *) &__x = *(byte huge *) (p), \
- *((byte huge *) &__x + 1) = *((byte huge *) (p) + 1), \
- __x)
- # if ! PHILOSOPHICAL_PROBLEM
- # define pdpoke( p, v) \
- __x = (v); \
- *((byte huge *)(p))++ = *(byte huge *) &__x; \
- *((byte huge *)(p))++ = *((byte huge *) &__x + 1)
- # define pdpeek( p) \
- (*(byte huge *) &__x = *((byte huge *)(p))++, \
- *((byte huge *) &__x + 1)= *((byte huge *)(p))++, \
- __x)
- # else
- # define pdpoke( p, v) \
- __x = (v); \
- *(byte huge *)(p) = *(byte huge *) &__x; \
- *((byte huge *)(p) + 1) = *((byte huge *) &__x + 1); \
- (p) = (void huge *) ((byte huge *) (p) + 2)
- # define pdpeek( p) \
- (*(byte huge *) &__x = *(byte huge *) (p), \
- *((byte huge *) &__x + 1)= *((byte huge *) (p) + 1), \
- (p) = (void huge *) ((byte huge *) (p) + 2), \
- __x)
- # endif
-
- # else /* WORD ACCESS ON ODD ADDRESS OK */
-
- # define dpoke( p, v) *(word huge *)(p) = (word)(v)
- # define dpeek( p) (*(word huge *)(p))
- # if ! PHILOSOPHICAL_PROBLEM
- # define pdpoke( p, v) *((word huge *)(p))++ = (word)(v)
- # define pdpeek( p) (*((word huge *)(p))++)
- # else
- # define pdpoke( p, v) *(word huge *)(p) = (word)(v); \
- (p)=(void huge *)((word huge *)(p) + 1)
- # define pdpeek( p) ( __x = *(word huge *)(p), \
- (p)=(void huge *)((word huge *)(p) + 1),\
- __x)
- # endif
- # endif /* STILL BIGENDIAN */
-
- # define dbyte( p, v) \
- __x = (v); \
- *(byte huge *)(p) = *((byte huge *) &__x + 1); \
- *((byte huge *)(p) + 1) = *(byte huge *) &__x
- # define dbeek( p) \
- (*((byte huge *)&__x + 1) = *(byte huge *) (p), \
- *(byte huge *)&__x = *((byte huge *) (p) + 1), \
- __x)
-
- # if ! PHILOSOPHICAL_PROBLEM
- # define pdbyte( p, v) \
- __x = (v); \
- *((byte huge *)(p))++ = *((byte huge *) &__x + 1); \
- *((byte huge *)(p))++ = *(byte huge *) &__x
- # define pdbeek( p) \
- (*((byte huge *) &__x + 1) = *((byte huge *) (p))++, \
- *((byte huge *) &__x) = *((byte huge *) (p))++, \
- __x)
- # else
- # define pdbyte( p, v) \
- __x = (v); \
- *(byte huge *)(p) = *((byte huge *) &__x + 1); \
- *((byte huge *)(p) + 1) = *(byte huge *) &__x; \
- (p) = (void huge *) ((byte huge *)(p) + 2)
- # define pdbeek( p) \
- (*((byte huge *) &__x + 1) = *(byte huge *) (p), \
- *((byte huge *) &__x) = *((byte huge *) (p) + 1), \
- (p) = (void huge *) ((byte huge *)(p) + 2), \
- __x)
- # endif
-
- # define lbyte( p, v) \
- __lx = (v), \
- *(byte huge *)(p) = *((byte huge *) &__lx + 3); \
- *((byte huge *)(p) + 1) = *((byte huge *) &__lx + 2); \
- *((byte huge *)(p) + 2) = *((byte huge *) &__lx + 1); \
- *((byte huge *)(p) + 3) = *(byte huge *) &__lx
-
- # if ! PHILOSOPHICAL_PROBLEM
- # define plbeek( p) \
- (*((byte huge *) &__lx + 3) = *((byte huge *)(p))++, \
- *((byte huge *) &__lx + 2) = *((byte huge *)(p))++, \
- *((byte huge *) &__lx + 1) = *((byte huge *)(p))++, \
- *((byte huge *) &__lx) = *((byte huge *)(p))++, \
- __lx)
-
- # define plbyte( p, v) \
- __lx = (v), \
- *((byte huge *)(p))++ = *((byte huge *) &__lx + 3); \
- *((byte huge *)(p))++ = *((byte huge *) &__lx + 2); \
- *((byte huge *)(p))++ = *((byte huge *) &__lx + 1); \
- *((byte huge *)(p))++ = *(byte huge *) &__lx
- # else
- # define plbeek( p) \
- (*((byte huge *) &__lx + 3) = *(byte huge *)(p), \
- *((byte huge *) &__lx + 2) = *((byte huge *)(p) + 1), \
- *((byte huge *) &__lx + 1) = *((byte huge *)(p) + 2), \
- *((byte huge *) &__lx) = *((byte huge *)(p) + 3), \
- (p) = (void huge *) ((lword huge *)(p) + 1), \
- __lx)
-
- # define plbyte( p, v) \
- __lx = (v), \
- *(byte huge *)(p) = *((byte huge *) &__lx + 3); \
- *((byte huge *)(p) + 1) = *((byte huge *) &__lx + 2); \
- *((byte huge *)(p) + 2) = *((byte huge *) &__lx + 1); \
- *((byte huge *)(p) + 3) = *(byte huge *) &__lx; \
- (p) = (void huge *) ((lword huge *)(p) + 1)
- # endif
- # define lbeek( p) \
- (*(byte huge *) &__lx = *((byte huge *) (p) + 3), \
- *((byte huge *) &__lx + 1) = *((byte huge *) (p) + 2), \
- *((byte huge *) &__lx + 2) = *((byte huge *) (p) + 1), \
- *((byte huge *) &__lx + 3) = *(byte huge *) (p), \
- __lx)
-
-
- # define fdpoke( p, v) *(word huge *) (p) = (word)(v)
- # define fdpeek( p) (*(word huge *) (p))
- # define fdbyte( p, v) dbyte( p, v)
- # define fdbeek( p) dbeek( p)
- # define fpdpoke( p, v) pdpoke(p, v)
- # define fpdpeek( p) pdpeek( p)
- # define fpdbyte( p, v) pdbyte( p, v)
- # define fpdbeek( p) pdbeek( p)
- # endif
-
- # if WORD_EVEN
- # define dclr( p) *(byte huge *)(p) = *((byte huge *)(p) + 1) = 0
- # if ! PHILOSOPHICAL_PROBLEM
- # if ! LATE_PLUSPLUS
- # define pdclr( p) *((byte huge *)(p))++ = *((byte huge *)(p))++ = 0
- # else
- # define pdclr( p) *((byte huge *)(p))++ = 0; *((byte huge *)(p))++ = 0
- # endif
- # else
- # define pdclr( p) *(byte huge *)(p) = 0; *((byte huge *)(p) + 1) = 0; \
- (p) = (void huge *) ((word huge *)(p) + 1)
- # endif
- # else
- # define dclr( p) *(word huge *)(p) = 0
- # if PHILOSOPHICAL_PROBLEM
- # define pdclr( p) *(word huge *)(p) = 0; \
- (p) = (void huge *) ((word huge *)(p) + 1)
- # else
- # define pdclr( p) *((word huge *)(p))++ = 0
- # endif
- # endif
-
- # define poke( p, v) *(byte huge *)(p) = (byte) (v)
- # define peek( p) *(byte huge *)(p)
- # define apoke( p, v) *(byte huge *)(p) += (byte) (v)
- # define adpoke( p, v) dpoke( p, (v) + dpeek( p))
- # define adbyte( p, v) dbyte( p, dbeek( p) + (word)(v))
-
- # define is_in_program( x) \
- ((byte huge *) (x) >= __program && (byte huge *) (x) < __program + MAXMODULE)
-
- # define p_index() ((word) (__p - __program))
- # define calc_ind( adr) ((word) ((byte huge *)(adr) - __program))
- # ifndef calc_pc
- # define calc_pc( adr) (((word) ((byte huge *)(adr) - __program)) + DEFORG)
- # endif
- # endif
-
- # ifndef __BIG_GENERATOR__
- extern word __pc, __x;
- extern lword __lx;
- extern byte huge *__program, huge *__p;
- # endif
-
-
- #endif
-
-
-
-