snes.hpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "interface/interface.hpp"
  2. #include "scheduler/scheduler.hpp"
  3. #include "tracer/tracer.hpp"
  4. class VideoFilter;
  5. class SNES {
  6. public:
  7. enum Region { NTSC = 0, PAL = 1 };
  8. enum RegionAutodetect { Autodetect = 2 };
  9. enum ExpansionPortDevice { ExpansionNone = 0, ExpansionBSX = 1 };
  10. struct Config {
  11. unsigned controller_port1;
  12. unsigned controller_port2;
  13. unsigned expansion_port;
  14. unsigned region;
  15. struct File {
  16. bool autodetect_type;
  17. bool bypass_patch_crc32;
  18. } file;
  19. struct Path {
  20. string base; //binary path
  21. string user; //user profile path (bsnes.cfg, ...)
  22. string current; //current working directory (path to currently loaded cartridge)
  23. string rom, save, patch, cheat, data;
  24. string bsx, st;
  25. } path;
  26. struct CPU {
  27. unsigned version;
  28. unsigned ntsc_clock_rate;
  29. unsigned pal_clock_rate;
  30. unsigned alu_mul_delay;
  31. unsigned alu_div_delay;
  32. unsigned wram_init_value;
  33. } cpu;
  34. struct SMP {
  35. unsigned ntsc_clock_rate;
  36. unsigned pal_clock_rate;
  37. } smp;
  38. struct PPU1 {
  39. unsigned version;
  40. } ppu1;
  41. struct PPU2 {
  42. unsigned version;
  43. } ppu2;
  44. } config;
  45. //system functions
  46. virtual void run();
  47. virtual void runtoframe();
  48. virtual void init();
  49. virtual void term();
  50. virtual void power();
  51. virtual void reset();
  52. virtual void irq();
  53. virtual void frame();
  54. virtual void scanline();
  55. //return *active* region / expansion port device information
  56. //settings cached upon power-on
  57. Region region() const;
  58. ExpansionPortDevice expansion() const;
  59. #include "video/video.hpp"
  60. #include "audio/audio.hpp"
  61. #include "input/input.hpp"
  62. SNES();
  63. virtual ~SNES() {}
  64. private:
  65. unsigned snes_region;
  66. unsigned snes_expansion;
  67. };
  68. extern SNES snes;