home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
program
/
compiler
/
nasm20b
/
nasm_src
/
code.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-19
|
17KB
|
365 lines
/* ---------------------------------------------------------------------- */
/* 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