utils.c 3.2 KB

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