home *** CD-ROM | disk | FTP | other *** search
- #ifndef QUARK_INTERRUPTPCODE_H
- #define QUARK_INTERRUPTPCODE_H
-
- /* Interrupt PCode commands
- * A PCode instruction is based on the following format
- * struct PCodeInst
- * {
- * u_int32_t Code;
- * u_int32_t Arg1;
- * u_int32_t Arg2;
- * };
- */
-
-
-
-
- #define INTPCODE_BASE (0x11223344)
-
- #define INTPCODE_END (INTPCODE_BASE+0) /* PCODE Stream End */
-
- /* Declare a variable as UBYTE
- */
- #define INTPCODE_VARUBYTE (INTPCODE_BASE+1) /* (Var[0..3],*) */
-
- /* Declare a variable as UWORD
- */
- #define INTPCODE_VARUWORD (INTPCODE_BASE+2) /* (Var[0..3],*) */
-
- /* Declare a variable as ULONG
- */
- #define INTPCODE_VARULONG (INTPCODE_BASE+3) /* (Var[0..3],*) */
-
- /* Declare a variable as BYTE
- */
- #define INTPCODE_VARBYTE (INTPCODE_BASE+4) /* (Var[0..3],*) */
-
- /* Declare a variable as WORD
- */
- #define INTPCODE_VARWORD (INTPCODE_BASE+5) /* (Var[0..3],*) */
-
- /* Declare a variable as LONG
- */
- #define INTPCODE_VARLONG (INTPCODE_BASE+6) /* (Var[0..3],*) */
-
-
-
- /* Declare a variable as UBYTEPTR
- */
- #define INTPCODE_VARUBYTEPTR (INTPCODE_BASE+7) /* (Var[0..3],*) */
-
- /* Declare a variable as UWORDPTR
- */
- #define INTPCODE_VARUWORDPTR (INTPCODE_BASE+8) /* (Var[0..3],*) */
-
- /* Declare a variable as ULONGPTR
- */
- #define INTPCODE_VARULONGPTR (INTPCODE_BASE+9) /* (Var[0..3],*) */
-
- /* Declare a variable as BYTEPTR
- */
- #define INTPCODE_VARBYTEPTR (INTPCODE_BASE+10) /* (Var[0..3],*) */
-
- /* Declare a variable as WORDPTR
- */
- #define INTPCODE_VARWORDPTR (INTPCODE_BASE+11) /* (Var[0..3],*) */
-
- /* Declare a variable as LONGPTR
- */
- #define INTPCODE_VARLONGPTR (INTPCODE_BASE+12) /* (Var[0..3],*) */
-
-
- /* Compare 2 Vars...vars must have the same sign,size
- */
- #define INTPCODE_COMPARE (INTPCODE_BASE+20) /* (Var[0..3],Var[0..3]) */
-
- #define INTPCODE_COMPAREVALUE (INTPCODE_BASE+21) /* (Value,Var[0..3]) */
-
- #define INTPCODE_ANDVALUE (INTPCODE_BASE+22) /* VAR[0..3]=Var[0..3] & Value */
- #define INTPCODE_AND (INTPCODE_BASE+23) /* VAR[0..3]=Var[0..3] & Var[0..3] */
- #define INTPCODE_ORVALUE (INTPCODE_BASE+24) /* VAR[0..3]=Var[0..3] | Value */
- #define INTPCODE_OR (INTPCODE_BASE+25) /* VAR[0..3]=Var[0..3] | Var[0..3] */
- #define INTPCODE_XORVALUE (INTPCODE_BASE+26) /* VAR[0..3]=Var[0..3] ^ Value */
- #define INTPCODE_XOR (INTPCODE_BASE+27) /* VAR[0..3]=Var[0..3] ^ Var[0..3] */
- #define INTPCODE_ADDVALUE (INTPCODE_BASE+28) /* VAR[0..3]=Var[0..3] + Value */
- #define INTPCODE_ADD (INTPCODE_BASE+29) /* VAR[0..3]=Var[0..3] + Var[0..3] */
- #define INTPCODE_SUBVALUE (INTPCODE_BASE+30) /* VAR[0..3]=Var[0..3] - Value */
- #define INTPCODE_SUB (INTPCODE_BASE+31) /* VAR[0..3]=Var[0..3] - Var[0..3] */
- #define INTPCODE_SHIFTLEFTVALUE (INTPCODE_BASE+32) /* VAR[0..3]=Var[0..3] << Value */
- #define INTPCODE_SHIFTLEFT (INTPCODE_BASE+33) /* VAR[0..3]=Var[0..3] << Var[0..3] */
- #define INTPCODE_SHIFTRIGHTVALUE (INTPCODE_BASE+34) /* VAR[0..3]=Var[0..3] >> Value */
- #define INTPCODE_SHIFTRIGHT (INTPCODE_BASE+35) /* VAR[0..3]=Var[0..3] >> Var[0..3] */
-
-
-
-
- /* Conditional Branch
- */
- #define INTPCODE_IF (INTPCODE_BASE+40) /* (CC,*) */
-
-
- /* Else Branch
- */
- #define INTPCODE_ELSE (INTPCODE_BASE+41) /* (*,*) */
-
- /* Conditional End
- */
- #define INTPCODE_ENDIF (INTPCODE_BASE+42) /* (*,*) */
-
- /* return bool_t for the function
- */
- #define INTPCODE_RETURN (INTPCODE_BASE+43) /* return bool_t */
-
-
-
-
- #define INTPCODE_READREG (INTPCODE_BASE+50) /* from *Var[0..3] to Var[0..3] with sizeof(Var[0..3] */
- #define INTPCODE_LOADREGVALUE (INTPCODE_BASE+51) /* from *Var[0..3] to Var[0..3] with sizeof(Var[0..3] */
- #define INTPCODE_WRITEREG (INTPCODE_BASE+52) /* Var[0..3] to *Var[0..3] */
-
-
- #define INTPCODE_VAR_BASE 0x0
- #define INTPCODE_VAR_0 (INTPCODE_VAR_BASE+0)
- #define INTPCODE_VAR_1 (INTPCODE_VAR_BASE+1)
- #define INTPCODE_VAR_2 (INTPCODE_VAR_BASE+2)
- #define INTPCODE_VAR_3 (INTPCODE_VAR_BASE+3)
- #define INTPCODE_VAR_4 (INTPCODE_VAR_BASE+4)
- #define INTPCODE_VAR_5 (INTPCODE_VAR_BASE+5)
-
-
- #define INTPCODE_CC_BASE 0x88776655
- #define INTPCODE_CC_EQUAL (INTPCODE_CC_BASE+0) /* equal */
- #define INTPCODE_CC_NOTEQUAL (INTPCODE_CC_BASE+1) /* not equal */
- #define INTPCODE_CC_LOWER (INTPCODE_CC_BASE+2) /* < */
- #define INTPCODE_CC_LOWERSAME (INTPCODE_CC_BASE+3) /* <= */
- #define INTPCODE_CC_GREATER (INTPCODE_CC_BASE+4) /* > */
- #define INTPCODE_CC_GREATERSAME (INTPCODE_CC_BASE+5) /* >= */
- #define INTPCODE_CC_OVERFLOW (INTPCODE_CC_BASE+6) /* Overflow */
- #define INTPCODE_CC_NOOVERFLOW (INTPCODE_CC_BASE+7) /* Overflow */
- #define INTPCODE_CC_MAX 8 /* size */
-
-
- struct PCodeError
- {
- /* Error Number
- */
- u_int32_t Error;
- /* Command Number
- */
- u_int32_t Command;
- };
-
-
- #define INTERROR_OK 0
-
- /* Unknown PCODE command
- */
- #define INTERROR_UNKNOWN_COMMAND 2
- /* Buffer is too small for the
- * translated code
- */
- #define INTERROR_BUFFERSIZE 3
- /* An IF is missing..so there must
- * be an else or endif too much
- */
- #define INTERROR_MISSING_IF 4
- /* Not enough memory for the pcode
- * compiler.
- */
- #define INTERROR_MEMORY 5
- /* Code after a return,
- * before the fork is closed
- * by end,endif,else
- */
- #define INTERROR_UNUSED_CODE 6
- /* Undeclared variable or no variable
- * slot available.
- */
- #define INTERROR_ILLEGAL_VAR 7
- /* Unknown Condition code of IF
- */
- #define INTERROR_UNKNWON_CC 8
- /* Your vars have different signs
- */
- #define INTERROR_DIFFERENT_SIGN 9
- /* Your vars have different sizes
- */
- #define INTERROR_DIFFERENT_SIZE 10
- /* Your function misses a return
- */
- #define INTERROR_MISSING_RETURN 11
- /* Your use a not yet initialized var
- */
- #define INTERROR_UNSET_VAR 12
- /* The operation isn`t allowed on a ptrvar
- * Security
- */
- #define INTERROR_PTR_VAR 13
- /* The operation is only allowed on a ptrvar.
- * Security.
- */
- #define INTERROR_NOPTR_VAR 14
- /* The operation is only allowed on a legal
- * ptr for this addressspace. If you don`t
- * own the address and it isn`t in the IO
- * Space this error is returned.
- * Security.
- */
- #define INTERROR_ILLEGALPTR_VAR 15
-
- /* No legal return ID
- * The only ideas which are allowed are
- * the WAITINTSTATE_* defined in interrupt.h
- */
- #define INTERROR_ILLEGALRETURN 16
-
- #endif
-