utils.c 3.0 KB

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