home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / System / MorphOS / Developer / include / public / quark / interruptpcode.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-11-02  |  6.0 KB  |  217 lines

  1. #ifndef    QUARK_INTERRUPTPCODE_H
  2. #define    QUARK_INTERRUPTPCODE_H
  3.  
  4. /* Interrupt PCode commands
  5.  * A PCode instruction is based on the following format
  6.  * struct PCodeInst
  7.  * {
  8.  *   u_int32_t    Code;
  9.  *   u_int32_t    Arg1;
  10.  *   u_int32_t    Arg2;
  11.  * };
  12.  */
  13.  
  14.  
  15.  
  16.  
  17. #define    INTPCODE_BASE            (0x11223344)
  18.  
  19. #define    INTPCODE_END            (INTPCODE_BASE+0)        /* PCODE Stream End */
  20.  
  21. /* Declare a variable as UBYTE
  22.  */
  23. #define    INTPCODE_VARUBYTE        (INTPCODE_BASE+1)        /* (Var[0..3],*) */
  24.  
  25. /* Declare a variable as UWORD
  26.  */
  27. #define    INTPCODE_VARUWORD        (INTPCODE_BASE+2)        /* (Var[0..3],*) */
  28.  
  29. /* Declare a variable as ULONG
  30.  */
  31. #define    INTPCODE_VARULONG        (INTPCODE_BASE+3)        /* (Var[0..3],*) */
  32.  
  33. /* Declare a variable as BYTE
  34.  */
  35. #define    INTPCODE_VARBYTE        (INTPCODE_BASE+4)        /* (Var[0..3],*) */
  36.  
  37. /* Declare a variable as WORD
  38.  */
  39. #define    INTPCODE_VARWORD        (INTPCODE_BASE+5)        /* (Var[0..3],*) */
  40.  
  41. /* Declare a variable as LONG
  42.  */
  43. #define    INTPCODE_VARLONG        (INTPCODE_BASE+6)        /* (Var[0..3],*) */
  44.  
  45.  
  46.  
  47. /* Declare a variable as UBYTEPTR
  48.  */
  49. #define    INTPCODE_VARUBYTEPTR        (INTPCODE_BASE+7)        /* (Var[0..3],*) */
  50.  
  51. /* Declare a variable as UWORDPTR
  52.  */
  53. #define    INTPCODE_VARUWORDPTR        (INTPCODE_BASE+8)        /* (Var[0..3],*) */
  54.  
  55. /* Declare a variable as ULONGPTR
  56.  */
  57. #define    INTPCODE_VARULONGPTR        (INTPCODE_BASE+9)        /* (Var[0..3],*) */
  58.  
  59. /* Declare a variable as BYTEPTR
  60.  */
  61. #define    INTPCODE_VARBYTEPTR        (INTPCODE_BASE+10)        /* (Var[0..3],*) */
  62.  
  63. /* Declare a variable as WORDPTR
  64.  */
  65. #define    INTPCODE_VARWORDPTR        (INTPCODE_BASE+11)        /* (Var[0..3],*) */
  66.  
  67. /* Declare a variable as LONGPTR
  68.  */
  69. #define    INTPCODE_VARLONGPTR        (INTPCODE_BASE+12)        /* (Var[0..3],*) */
  70.  
  71.  
  72. /* Compare 2 Vars...vars must have the same sign,size
  73.  */
  74. #define    INTPCODE_COMPARE        (INTPCODE_BASE+20)        /* (Var[0..3],Var[0..3]) */
  75.  
  76. #define    INTPCODE_COMPAREVALUE        (INTPCODE_BASE+21)        /* (Value,Var[0..3]) */
  77.  
  78. #define    INTPCODE_ANDVALUE        (INTPCODE_BASE+22)        /* VAR[0..3]=Var[0..3] & Value */
  79. #define    INTPCODE_AND            (INTPCODE_BASE+23)        /* VAR[0..3]=Var[0..3] & Var[0..3] */
  80. #define    INTPCODE_ORVALUE        (INTPCODE_BASE+24)        /* VAR[0..3]=Var[0..3] | Value */
  81. #define    INTPCODE_OR            (INTPCODE_BASE+25)        /* VAR[0..3]=Var[0..3] | Var[0..3] */
  82. #define    INTPCODE_XORVALUE        (INTPCODE_BASE+26)        /* VAR[0..3]=Var[0..3] ^ Value */
  83. #define    INTPCODE_XOR            (INTPCODE_BASE+27)        /* VAR[0..3]=Var[0..3] ^ Var[0..3] */
  84. #define    INTPCODE_ADDVALUE        (INTPCODE_BASE+28)        /* VAR[0..3]=Var[0..3] + Value */
  85. #define    INTPCODE_ADD            (INTPCODE_BASE+29)        /* VAR[0..3]=Var[0..3] + Var[0..3] */
  86. #define    INTPCODE_SUBVALUE        (INTPCODE_BASE+30)        /* VAR[0..3]=Var[0..3] - Value */
  87. #define    INTPCODE_SUB            (INTPCODE_BASE+31)        /* VAR[0..3]=Var[0..3] - Var[0..3] */
  88. #define    INTPCODE_SHIFTLEFTVALUE        (INTPCODE_BASE+32)        /* VAR[0..3]=Var[0..3] << Value */
  89. #define    INTPCODE_SHIFTLEFT        (INTPCODE_BASE+33)        /* VAR[0..3]=Var[0..3] << Var[0..3] */
  90. #define    INTPCODE_SHIFTRIGHTVALUE    (INTPCODE_BASE+34)        /* VAR[0..3]=Var[0..3] >> Value */
  91. #define    INTPCODE_SHIFTRIGHT        (INTPCODE_BASE+35)        /* VAR[0..3]=Var[0..3] >> Var[0..3] */
  92.  
  93.  
  94.  
  95.  
  96. /* Conditional Branch
  97.  */
  98. #define    INTPCODE_IF            (INTPCODE_BASE+40)        /* (CC,*) */
  99.  
  100.  
  101. /* Else Branch
  102.  */
  103. #define    INTPCODE_ELSE            (INTPCODE_BASE+41)        /* (*,*) */
  104.  
  105. /* Conditional End
  106.  */
  107. #define    INTPCODE_ENDIF            (INTPCODE_BASE+42)        /* (*,*) */
  108.  
  109. /* return bool_t for the function
  110.  */
  111. #define    INTPCODE_RETURN            (INTPCODE_BASE+43)        /* return bool_t */
  112.  
  113.  
  114.  
  115.  
  116. #define    INTPCODE_READREG        (INTPCODE_BASE+50)        /* from *Var[0..3] to Var[0..3] with sizeof(Var[0..3] */
  117. #define    INTPCODE_LOADREGVALUE        (INTPCODE_BASE+51)        /* from *Var[0..3] to Var[0..3] with sizeof(Var[0..3] */
  118. #define    INTPCODE_WRITEREG        (INTPCODE_BASE+52)        /* Var[0..3] to *Var[0..3] */
  119.  
  120.  
  121. #define    INTPCODE_VAR_BASE        0x0
  122. #define    INTPCODE_VAR_0            (INTPCODE_VAR_BASE+0)
  123. #define    INTPCODE_VAR_1            (INTPCODE_VAR_BASE+1)
  124. #define    INTPCODE_VAR_2            (INTPCODE_VAR_BASE+2)
  125. #define    INTPCODE_VAR_3            (INTPCODE_VAR_BASE+3)
  126. #define    INTPCODE_VAR_4            (INTPCODE_VAR_BASE+4)
  127. #define    INTPCODE_VAR_5            (INTPCODE_VAR_BASE+5)
  128.  
  129.  
  130. #define    INTPCODE_CC_BASE        0x88776655
  131. #define    INTPCODE_CC_EQUAL        (INTPCODE_CC_BASE+0)        /* equal */
  132. #define    INTPCODE_CC_NOTEQUAL        (INTPCODE_CC_BASE+1)        /* not equal */
  133. #define    INTPCODE_CC_LOWER        (INTPCODE_CC_BASE+2)        /* < */
  134. #define    INTPCODE_CC_LOWERSAME        (INTPCODE_CC_BASE+3)        /* <= */
  135. #define    INTPCODE_CC_GREATER        (INTPCODE_CC_BASE+4)        /* > */
  136. #define    INTPCODE_CC_GREATERSAME        (INTPCODE_CC_BASE+5)        /* >= */
  137. #define    INTPCODE_CC_OVERFLOW        (INTPCODE_CC_BASE+6)        /* Overflow */
  138. #define    INTPCODE_CC_NOOVERFLOW        (INTPCODE_CC_BASE+7)        /* Overflow */
  139. #define    INTPCODE_CC_MAX            8                /* size */
  140.  
  141.  
  142. struct PCodeError
  143. {
  144.     /* Error Number
  145.          */
  146.     u_int32_t    Error;
  147.     /* Command Number
  148.          */
  149.     u_int32_t    Command;
  150. };
  151.  
  152.  
  153. #define    INTERROR_OK            0
  154.  
  155. /* Unknown PCODE command
  156.  */
  157. #define    INTERROR_UNKNOWN_COMMAND    2
  158. /* Buffer is too small for the
  159.  * translated code
  160.  */
  161. #define    INTERROR_BUFFERSIZE        3
  162. /* An IF is missing..so there must
  163.  * be an else or endif too much
  164.  */
  165. #define    INTERROR_MISSING_IF        4
  166. /* Not enough memory for the pcode
  167.  * compiler.
  168.  */
  169. #define    INTERROR_MEMORY            5
  170. /* Code after a return,
  171.  * before the fork is closed
  172.  * by end,endif,else
  173.  */
  174. #define    INTERROR_UNUSED_CODE        6
  175. /* Undeclared variable or no variable
  176.  * slot available.
  177.  */
  178. #define    INTERROR_ILLEGAL_VAR        7
  179. /* Unknown Condition code of IF
  180.  */
  181. #define    INTERROR_UNKNWON_CC        8
  182. /* Your vars have different signs
  183.  */
  184. #define    INTERROR_DIFFERENT_SIGN        9
  185. /* Your vars have different sizes
  186.  */
  187. #define    INTERROR_DIFFERENT_SIZE        10
  188. /* Your function misses a return
  189.  */
  190. #define    INTERROR_MISSING_RETURN        11
  191. /* Your use a not yet initialized var
  192.  */
  193. #define    INTERROR_UNSET_VAR        12
  194. /* The operation isn`t allowed on a ptrvar
  195.  * Security
  196.  */
  197. #define    INTERROR_PTR_VAR        13
  198. /* The operation is only allowed on a ptrvar.
  199.  * Security.
  200.  */
  201. #define    INTERROR_NOPTR_VAR        14
  202. /* The operation is only allowed on a legal
  203.  * ptr for this addressspace. If you don`t
  204.  * own the address and it isn`t in the IO
  205.  * Space this error is returned.
  206.  * Security.
  207.  */
  208. #define    INTERROR_ILLEGALPTR_VAR        15
  209.  
  210. /* No legal return ID
  211.  * The only ideas which are allowed are
  212.  * the WAITINTSTATE_* defined in interrupt.h
  213.  */
  214. #define    INTERROR_ILLEGALRETURN        16
  215.  
  216. #endif
  217.