dsp4emu.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //DSP-4 emulator code
  2. //Copyright (c) 2004-2006 Dreamer Nom, John Weidman, Kris Bleakley, Nach, z80 gaiden
  3. #ifndef DSP4EMU_H
  4. #define DSP4EMU_H
  5. #undef TRUE
  6. #undef FALSE
  7. #define TRUE true
  8. #define FALSE false
  9. struct DSP4_t
  10. {
  11. bool8 waiting4command;
  12. bool8 half_command;
  13. uint16 command;
  14. uint32 in_count;
  15. uint32 in_index;
  16. uint32 out_count;
  17. uint32 out_index;
  18. uint8 parameters[512];
  19. uint8 output[512];
  20. };
  21. extern struct DSP4_t DSP4;
  22. struct DSP4_vars_t
  23. {
  24. // op control
  25. int8 DSP4_Logic; // controls op flow
  26. // projection format
  27. int16 lcv; // loop-control variable
  28. int16 distance; // z-position into virtual world
  29. int16 raster; // current raster line
  30. int16 segments; // number of raster lines drawn
  31. // 1.15.16 or 1.15.0 [sign, integer, fraction]
  32. int32 world_x; // line of x-projection in world
  33. int32 world_y; // line of y-projection in world
  34. int32 world_dx; // projection line x-delta
  35. int32 world_dy; // projection line y-delta
  36. int16 world_ddx; // x-delta increment
  37. int16 world_ddy; // y-delta increment
  38. int32 world_xenv; // world x-shaping factor
  39. int16 world_yofs; // world y-vertical scroll
  40. int16 view_x1; // current viewer-x
  41. int16 view_y1; // current viewer-y
  42. int16 view_x2; // future viewer-x
  43. int16 view_y2; // future viewer-y
  44. int16 view_dx; // view x-delta factor
  45. int16 view_dy; // view y-delta factor
  46. int16 view_xofs1; // current viewer x-vertical scroll
  47. int16 view_yofs1; // current viewer y-vertical scroll
  48. int16 view_xofs2; // future viewer x-vertical scroll
  49. int16 view_yofs2; // future viewer y-vertical scroll
  50. int16 view_yofsenv; // y-scroll shaping factor
  51. int16 view_turnoff_x; // road turnoff data
  52. int16 view_turnoff_dx; // road turnoff delta factor
  53. // drawing area
  54. int16 viewport_cx; // x-center of viewport window
  55. int16 viewport_cy; // y-center of render window
  56. int16 viewport_left; // x-left of viewport
  57. int16 viewport_right; // x-right of viewport
  58. int16 viewport_top; // y-top of viewport
  59. int16 viewport_bottom; // y-bottom of viewport
  60. // sprite structure
  61. int16 sprite_x; // projected x-pos of sprite
  62. int16 sprite_y; // projected y-pos of sprite
  63. int16 sprite_attr; // obj attributes
  64. bool8 sprite_size; // sprite size: 8x8 or 16x16
  65. int16 sprite_clipy; // visible line to clip pixels off
  66. int16 sprite_count;
  67. // generic projection variables designed for
  68. // two solid polygons + two polygon sides
  69. int16 poly_clipLf[2][2]; // left clip boundary
  70. int16 poly_clipRt[2][2]; // right clip boundary
  71. int16 poly_ptr[2][2]; // HDMA structure pointers
  72. int16 poly_raster[2][2]; // current raster line below horizon
  73. int16 poly_top[2][2]; // top clip boundary
  74. int16 poly_bottom[2][2]; // bottom clip boundary
  75. int16 poly_cx[2][2]; // center for left/right points
  76. int16 poly_start[2]; // current projection points
  77. int16 poly_plane[2]; // previous z-plane distance
  78. // OAM
  79. int16 OAM_attr[16]; // OAM (size,MSB) data
  80. int16 OAM_index; // index into OAM table
  81. int16 OAM_bits; // offset into OAM table
  82. int16 OAM_RowMax; // maximum number of tiles per 8 aligned pixels (row)
  83. int16 OAM_Row[32]; // current number of tiles per row
  84. };
  85. extern struct DSP4_vars_t DSP4_vars;
  86. #endif