Mirror of CollapseOS
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.2KB

  1. #pragma once
  2. #define regax 0
  3. #define regcx 1
  4. #define regdx 2
  5. #define regbx 3
  6. #define regsp 4
  7. #define regbp 5
  8. #define regsi 6
  9. #define regdi 7
  10. #define reges 0
  11. #define regcs 1
  12. #define regss 2
  13. #define regds 3
  14. #ifdef __BIG_ENDIAN__
  15. #define regal 1
  16. #define regah 0
  17. #define regcl 3
  18. #define regch 2
  19. #define regdl 5
  20. #define regdh 4
  21. #define regbl 7
  22. #define regbh 6
  23. #else
  24. #define regal 0
  25. #define regah 1
  26. #define regcl 2
  27. #define regch 3
  28. #define regdl 4
  29. #define regdh 5
  30. #define regbl 6
  31. #define regbh 7
  32. #endif
  33. #define segbase(x) ((uint32_t) x << 4)
  34. #define getmem8(x, y) read86(segbase(x) + y)
  35. #define getmem16(x, y) readw86(segbase(x) + y)
  36. #define putmem8(x, y, z) write86(segbase(x) + y, z)
  37. #define putmem16(x, y, z) writew86(segbase(x) + y, z)
  38. #define getreg16(regid) regs.wordregs[regid]
  39. #define putreg16(regid, writeval) regs.wordregs[regid] = writeval
  40. typedef void (*INTHOOK) ();
  41. union _bytewordregs_ {
  42. uint16_t wordregs[8];
  43. uint8_t byteregs[8];
  44. };
  45. void write86 (uint32_t addr32, uint8_t value);
  46. void writew86 (uint32_t addr32, uint16_t value);
  47. uint8_t read86 (uint32_t addr32);
  48. uint16_t readw86 (uint32_t addr32);
  49. int exec86(int execloops); // returns 0 if halted
  50. void reset86(uint16_t startip);