dsp1.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include <../base.hpp>
  2. #include <../cart/cart.hpp>
  3. #define DSP1_CPP
  4. #include "dsp1.hpp"
  5. #include "dsp1emu.cpp"
  6. void DSP1::init() {}
  7. void DSP1::enable() {}
  8. void DSP1::power() {
  9. reset();
  10. }
  11. void DSP1::reset() {
  12. dsp1.reset();
  13. }
  14. /*****
  15. * addr_decode()
  16. * determine whether address is accessing
  17. * data register (DR) or status register (SR)
  18. * -- 0 (false) = DR
  19. * -- 1 (true ) = SR
  20. *
  21. * note: there is no need to bounds check addresses,
  22. * as memory mapper will not allow DSP1 accesses outside
  23. * of expected ranges
  24. *****/
  25. bool DSP1::addr_decode(uint16 addr) {
  26. switch(cartridge.dsp1_mapper()) {
  27. case Cartridge::DSP1LoROM1MB: {
  28. //$[20-3f]:[8000-bfff] = DR, $[20-3f]:[c000-ffff] = SR
  29. return (addr >= 0xc000);
  30. }
  31. case Cartridge::DSP1LoROM2MB: {
  32. //$[60-6f]:[0000-3fff] = DR, $[60-6f]:[4000-7fff] = SR
  33. return (addr >= 0x4000);
  34. }
  35. case Cartridge::DSP1HiROM: {
  36. //$[00-1f]:[6000-6fff] = DR, $[00-1f]:[7000-7fff] = SR
  37. return (addr >= 0x7000);
  38. }
  39. }
  40. return 0;
  41. }
  42. uint8 DSP1::read(unsigned addr) {
  43. return (addr_decode(addr) == 0) ? dsp1.getDr() : dsp1.getSr();
  44. }
  45. void DSP1::write(unsigned addr, uint8 data) {
  46. if(addr_decode(addr) == 0) {
  47. dsp1.setDr(data);
  48. }
  49. }