prim_ops.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /****************************************************************************
  2. *
  3. * Realmode X86 Emulator Library
  4. *
  5. * Copyright (C) 1991-2004 SciTech Software, Inc.
  6. * Copyright (C) David Mosberger-Tang
  7. * Copyright (C) 1999 Egbert Eich
  8. *
  9. * ========================================================================
  10. *
  11. * Permission to use, copy, modify, distribute, and sell this software and
  12. * its documentation for any purpose is hereby granted without fee,
  13. * provided that the above copyright notice appear in all copies and that
  14. * both that copyright notice and this permission notice appear in
  15. * supporting documentation, and that the name of the authors not be used
  16. * in advertising or publicity pertaining to distribution of the software
  17. * without specific, written prior permission. The authors makes no
  18. * representations about the suitability of this software for any purpose.
  19. * It is provided "as is" without express or implied warranty.
  20. *
  21. * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  22. * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  23. * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  24. * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
  25. * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  26. * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  27. * PERFORMANCE OF THIS SOFTWARE.
  28. *
  29. * ========================================================================
  30. *
  31. * Language: ANSI C
  32. * Environment: Any
  33. * Developer: Kendall Bennett
  34. *
  35. * Description: Header file for primitive operation functions.
  36. *
  37. ****************************************************************************/
  38. #ifndef __X86EMU_PRIM_OPS_H
  39. #define __X86EMU_PRIM_OPS_H
  40. #ifdef __cplusplus
  41. extern "C" { /* Use "C" linkage when in C++ mode */
  42. #endif
  43. u16 aaa_word (u16 d);
  44. u16 aas_word (u16 d);
  45. u16 aad_word (u16 d);
  46. u16 aam_word (u8 d);
  47. u8 adc_byte (u8 d, u8 s);
  48. u16 adc_word (u16 d, u16 s);
  49. u32 adc_long (u32 d, u32 s);
  50. u8 add_byte (u8 d, u8 s);
  51. u16 add_word (u16 d, u16 s);
  52. u32 add_long (u32 d, u32 s);
  53. u8 and_byte (u8 d, u8 s);
  54. u16 and_word (u16 d, u16 s);
  55. u32 and_long (u32 d, u32 s);
  56. u8 cmp_byte (u8 d, u8 s);
  57. u16 cmp_word (u16 d, u16 s);
  58. u32 cmp_long (u32 d, u32 s);
  59. u8 daa_byte (u8 d);
  60. u8 das_byte (u8 d);
  61. u8 dec_byte (u8 d);
  62. u16 dec_word (u16 d);
  63. u32 dec_long (u32 d);
  64. u8 inc_byte (u8 d);
  65. u16 inc_word (u16 d);
  66. u32 inc_long (u32 d);
  67. u8 or_byte (u8 d, u8 s);
  68. u16 or_word (u16 d, u16 s);
  69. u32 or_long (u32 d, u32 s);
  70. u8 neg_byte (u8 s);
  71. u16 neg_word (u16 s);
  72. u32 neg_long (u32 s);
  73. u8 not_byte (u8 s);
  74. u16 not_word (u16 s);
  75. u32 not_long (u32 s);
  76. u8 rcl_byte (u8 d, u8 s);
  77. u16 rcl_word (u16 d, u8 s);
  78. u32 rcl_long (u32 d, u8 s);
  79. u8 rcr_byte (u8 d, u8 s);
  80. u16 rcr_word (u16 d, u8 s);
  81. u32 rcr_long (u32 d, u8 s);
  82. u8 rol_byte (u8 d, u8 s);
  83. u16 rol_word (u16 d, u8 s);
  84. u32 rol_long (u32 d, u8 s);
  85. u8 ror_byte (u8 d, u8 s);
  86. u16 ror_word (u16 d, u8 s);
  87. u32 ror_long (u32 d, u8 s);
  88. u8 shl_byte (u8 d, u8 s);
  89. u16 shl_word (u16 d, u8 s);
  90. u32 shl_long (u32 d, u8 s);
  91. u8 shr_byte (u8 d, u8 s);
  92. u16 shr_word (u16 d, u8 s);
  93. u32 shr_long (u32 d, u8 s);
  94. u8 sar_byte (u8 d, u8 s);
  95. u16 sar_word (u16 d, u8 s);
  96. u32 sar_long (u32 d, u8 s);
  97. u16 shld_word (u16 d, u16 fill, u8 s);
  98. u32 shld_long (u32 d, u32 fill, u8 s);
  99. u16 shrd_word (u16 d, u16 fill, u8 s);
  100. u32 shrd_long (u32 d, u32 fill, u8 s);
  101. u8 sbb_byte (u8 d, u8 s);
  102. u16 sbb_word (u16 d, u16 s);
  103. u32 sbb_long (u32 d, u32 s);
  104. u8 sub_byte (u8 d, u8 s);
  105. u16 sub_word (u16 d, u16 s);
  106. u32 sub_long (u32 d, u32 s);
  107. void test_byte (u8 d, u8 s);
  108. void test_word (u16 d, u16 s);
  109. void test_long (u32 d, u32 s);
  110. u8 xor_byte (u8 d, u8 s);
  111. u16 xor_word (u16 d, u16 s);
  112. u32 xor_long (u32 d, u32 s);
  113. void imul_byte (u8 s);
  114. void imul_word (u16 s);
  115. void imul_long (u32 s);
  116. void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s);
  117. void mul_byte (u8 s);
  118. void mul_word (u16 s);
  119. void mul_long (u32 s);
  120. void idiv_byte (u8 s);
  121. void idiv_word (u16 s);
  122. void idiv_long (u32 s);
  123. void div_byte (u8 s);
  124. void div_word (u16 s);
  125. void div_long (u32 s);
  126. void ins (int size);
  127. void outs (int size);
  128. u16 mem_access_word (int addr);
  129. void push_word (u16 w);
  130. void push_long (u32 w);
  131. u16 pop_word (void);
  132. u32 pop_long (void);
  133. #ifdef __cplusplus
  134. } /* End of "C" linkage for C++ */
  135. #endif
  136. #endif /* __X86EMU_PRIM_OPS_H */