utils.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*
  2. * Mapper facilities - The peTI-NESulator Project
  3. * mappers.c
  4. *
  5. * Created by Manoël Trapier.
  6. * Copyright (c) 2002-2019 986-Studio.
  7. *
  8. */
  9. //#define DEBUG_VROM_BANK_SWITCH
  10. //#define DEBUG_PROM_BANK_SWITCH
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <NESCarts.h>
  14. #include <ppu/ppu.h>
  15. #include <mappers/manager.h>
  16. #include <memory/manager.h>
  17. #define __TINES_PPU_INTERNAL__
  18. #include <ppu/ppu.memory.h>
  19. #undef __TINES_PPU_INTERNAL__
  20. extern NesCart *Cart;
  21. extern char MapperWantIRQ;
  22. /*
  23. * Here are some function useful for mappers
  24. */
  25. void set_vrom_bank_1k(uint16_t addr,int slot)
  26. {
  27. #ifdef DEBUG_VROM_BANK_SWITCH
  28. console_printf(Console_Default, "Change vrom 1k bank 0x%X to slot %d\n",addr,slot);
  29. #endif
  30. ppu_setPagePtr1k((addr>>8)&0xFF, Cart->VROMBanks + (slot * 1024));
  31. }
  32. void set_vrom_bank_2k(uint16_t addr,int slot)
  33. {
  34. #ifdef DEBUG_VROM_BANK_SWITCH
  35. console_printf(Console_Default, "Change vrom 2k bank 0x%X to slot %d\n",addr,slot);
  36. #endif
  37. ppu_setPagePtr2k((addr>>8)&0xFF, Cart->VROMBanks + (slot * 2 * 1024));
  38. }
  39. void set_vrom_bank_4k(uint16_t addr,int slot)
  40. {
  41. #ifdef DEBUG_VROM_BANK_SWITCH
  42. console_printf(Console_Default, "Change vrom 4k bank 0x%X to slot %d\n",addr,slot);
  43. #endif
  44. ppu_setPagePtr4k((addr>>8)&0xFF, Cart->VROMBanks + (slot * 4 * 1024));
  45. }
  46. void set_vrom_bank_8k(uint16_t addr, int slot)
  47. {
  48. #ifdef DEBUG_VROM_BANK_SWITCH
  49. console_printf(Console_Default, "Change vrom 8k bank 0x%X to slot %d\n",addr,slot);
  50. #endif
  51. ppu_setPagePtr8k(0x00, Cart->VROMBanks + (slot * 8 * 1024));
  52. }
  53. /*-----------*/
  54. void set_prom_bank_8k(uint16_t addr,int slot)
  55. {
  56. #ifdef DEBUG_PROM_BANK_SWITCH
  57. console_printf(Console_Default, "Change prom 8k bank 0x%X to slot %d\n",addr,slot);
  58. #endif
  59. set_page_ptr_8k(addr >> 8, Cart->PROMBanks + (slot * 8 * 1024));
  60. }
  61. void set_prom_bank_16k(uint16_t addr,int slot)
  62. {
  63. #ifdef DEBUG_PROM_BANK_SWITCH
  64. console_printf(Console_Default, "Change prom 16k bank @ 0x%X [0x%X] to slot 0x%X\n",addr, addr>>8,slot);
  65. #endif
  66. set_page_ptr_16k(addr >> 8, Cart->PROMBanks + (slot * 16 * 1024));
  67. }
  68. void set_prom_bank_32k(uint16_t addr,int slot)
  69. { /* addr may not be different from 0x8000 !*/
  70. /* Anyway I don't use it */
  71. #ifdef DEBUG_PROM_BANK_SWITCH
  72. console_printf(Console_Default, "Change prom 32k bank 0x%X to slot %d\n",addr,slot);
  73. #endif
  74. set_page_ptr_32k(addr >> 8, Cart->PROMBanks + (slot * 32 * 1024));
  75. }
  76. void map_sram()
  77. {
  78. int i;
  79. for (i = 0x60; i < 0x80; i++)
  80. {
  81. set_page_readable(i,true);
  82. set_page_writeable(i,true);
  83. }
  84. }
  85. void unmap_sram()
  86. {
  87. int i;
  88. for (i = 0x60; i < 0x80; i++)
  89. {
  90. set_page_readable(i,false);
  91. set_page_writeable(i,false);
  92. }
  93. }