scpu.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <../base.hpp>
  2. #define SCPU_CPP
  3. #include <nall/priorityqueue.hpp>
  4. priority_queue<unsigned> event(512, bind(&sCPU::queue_event, &cpu));
  5. #include "core/core.cpp"
  6. #include "dma/dma.cpp"
  7. #include "memory/memory.cpp"
  8. #include "mmio/mmio.cpp"
  9. #include "timing/timing.cpp"
  10. void sCPU::power() {
  11. CPU::power();
  12. regs.a = regs.x = regs.y = 0x0000;
  13. regs.s = 0x01ff;
  14. mmio_power();
  15. dma_power();
  16. timing_power();
  17. reset();
  18. }
  19. void sCPU::reset() {
  20. CPU::reset();
  21. regs.pc.d = 0x000000;
  22. regs.pc.l = bus.read(0xfffc);
  23. regs.pc.h = bus.read(0xfffd);
  24. //note: some registers are not fully reset by SNES
  25. regs.x.h = 0x00;
  26. regs.y.h = 0x00;
  27. regs.s.h = 0x01;
  28. regs.d = 0x0000;
  29. regs.db = 0x00;
  30. regs.p = 0x34;
  31. regs.e = 1;
  32. regs.mdr = 0x00;
  33. status.wai_lock = false;
  34. status.interrupt_pending = false;
  35. status.interrupt_vector = 0xfffc; //reset vector address
  36. mmio_reset();
  37. dma_reset();
  38. timing_reset();
  39. apu_port[0] = 0x00;
  40. apu_port[1] = 0x00;
  41. apu_port[2] = 0x00;
  42. apu_port[3] = 0x00;
  43. }
  44. sCPU::sCPU() {
  45. }
  46. sCPU::~sCPU() {
  47. }