2025-07-10 11:30:57 +08:00
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ye781205<30><35>NESģ<53><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// NES MAP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/1
|
|
|
|
|
// <20>汾<EFBFBD><E6B1BE>V1.0
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
2025-06-27 00:32:57 +08:00
|
|
|
|
#include "nes_mapper.h"
|
2025-07-10 11:30:57 +08:00
|
|
|
|
#include "nes_main.h"
|
|
|
|
|
#include "nes_ppu.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef u8
|
|
|
|
|
#define u8 uint8_t
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef u16
|
|
|
|
|
#define u16 uint16_t
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef u32
|
|
|
|
|
#define u32 uint32_t
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef uint8
|
|
|
|
|
#define uint8 uint8_t
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef uint16
|
|
|
|
|
#define uint16 uint16_t
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef uint32
|
|
|
|
|
#define uint32 uint32_t
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef int32
|
|
|
|
|
#define int32 int32_t
|
|
|
|
|
#endif
|
|
|
|
|
|
2025-06-27 00:32:57 +08:00
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map<61>ļ<EFBFBD><C4BC><EFBFBD>.
|
2025-06-27 00:32:57 +08:00
|
|
|
|
#include "mapper/000.cpp"
|
|
|
|
|
#include "mapper/001.cpp"
|
|
|
|
|
#include "mapper/002.cpp"
|
|
|
|
|
#include "mapper/003.cpp"
|
|
|
|
|
#include "mapper/004.cpp"
|
|
|
|
|
#include "mapper/006.cpp"
|
|
|
|
|
#include "mapper/007.cpp"
|
|
|
|
|
#include "mapper/008.cpp"
|
|
|
|
|
#include "mapper/011.cpp"
|
|
|
|
|
#include "mapper/013.cpp"
|
|
|
|
|
#include "mapper/015.cpp"
|
2025-07-10 11:30:57 +08:00
|
|
|
|
#include "mapper/016.cpp"
|
2025-06-27 00:32:57 +08:00
|
|
|
|
#include "mapper/017.cpp"
|
|
|
|
|
#include "mapper/018.cpp"
|
|
|
|
|
#include "mapper/019.cpp"
|
|
|
|
|
#include "mapper/021.cpp"
|
|
|
|
|
#include "mapper/022.cpp"
|
|
|
|
|
#include "mapper/023.cpp"
|
|
|
|
|
#include "mapper/024.cpp"
|
|
|
|
|
#include "mapper/025.cpp"
|
|
|
|
|
#include "mapper/032.cpp"
|
|
|
|
|
#include "mapper/033.cpp"
|
2025-07-10 11:30:57 +08:00
|
|
|
|
#include "mapper/034.cpp"
|
|
|
|
|
#include "mapper/064.cpp"
|
|
|
|
|
#include "mapper/065.cpp"
|
|
|
|
|
#include "mapper/066.cpp"
|
|
|
|
|
#include "mapper/067.cpp"
|
|
|
|
|
#include "mapper/069.cpp"
|
|
|
|
|
#include "mapper/070.cpp"
|
|
|
|
|
#include "mapper/071.cpp"
|
|
|
|
|
#include "mapper/072.cpp"
|
|
|
|
|
#include "mapper/073.cpp"
|
|
|
|
|
#include "mapper/075.cpp"
|
2025-06-27 00:32:57 +08:00
|
|
|
|
#include "mapper/076.cpp"
|
|
|
|
|
#include "mapper/078.cpp"
|
|
|
|
|
#include "mapper/079.cpp"
|
|
|
|
|
#include "mapper/085.cpp"
|
|
|
|
|
#include "mapper/087.cpp"
|
|
|
|
|
#include "mapper/088.cpp"
|
|
|
|
|
#include "mapper/099.cpp"
|
2025-07-10 11:30:57 +08:00
|
|
|
|
#include "mapper/113.cpp"
|
2025-06-27 00:32:57 +08:00
|
|
|
|
#include "mapper/189.cpp"
|
|
|
|
|
#include "mapper/225.cpp"
|
|
|
|
|
#include "mapper/227.cpp"
|
2025-07-10 11:30:57 +08:00
|
|
|
|
#include "mapper/240.cpp"
|
|
|
|
|
#include "mapper/245.cpp"
|
2025-06-27 00:32:57 +08:00
|
|
|
|
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
// ֧<>ֵ<EFBFBD>Mapper<65><72>,<2C>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
const int MapTab[] = {
|
|
|
|
|
0, 1, 2, 3, 4, 6, 7, 8, 11, 13, 15, 16, 17, 18, 19, 21,
|
|
|
|
|
22, 23, 24, 25, 32, 33, 34, 64, 65, 66, 67, 69, 70, 71, 72, 73,
|
|
|
|
|
75, 76, 78, 79, 85, 87, 88, 99, 113, 189, 225, 227, 240, 245,
|
|
|
|
|
-1, // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,-1,<2C><>ʾ<EFBFBD><CABE>֧<EFBFBD>ֵ<EFBFBD>map<61><70>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
};
|
2025-07-10 11:30:57 +08:00
|
|
|
|
#define MASK_BANK(bank, mask) (bank) = ((bank) & (mask))
|
|
|
|
|
#define VALIDATE_VROM_BANK(bank) \
|
|
|
|
|
MASK_BANK(bank, VROM_mask); \
|
|
|
|
|
if ((bank) >= VROM_1K_SIZE) \
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
uint32_t VROM_mask;
|
|
|
|
|
|
|
|
|
|
void Mapper_Reset(void) {}
|
|
|
|
|
uint8_t Mapper_ReadLow(uint16_t addr) { return 0; }
|
|
|
|
|
void Mapper_WriteLow(uint16_t addr, uint8_t data) {}
|
|
|
|
|
void Mapper_Write(uint16_t addr, uint8_t data) {}
|
|
|
|
|
void Mapper_Read(uint8_t data, uint16_t addr) {}
|
|
|
|
|
void Mapper_HSync(int scanline) {}
|
|
|
|
|
void Mapper_VSync(void) {}
|
2025-06-27 00:32:57 +08:00
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void Mapper_Init(void) {
|
|
|
|
|
uint32_t probe;
|
|
|
|
|
NES_Mapper->Reset = Mapper_Reset;
|
|
|
|
|
NES_Mapper->Write = Mapper_Write;
|
|
|
|
|
NES_Mapper->Read = Mapper_Read;
|
|
|
|
|
NES_Mapper->WriteLow = Mapper_WriteLow;
|
|
|
|
|
NES_Mapper->ReadLow = Mapper_ReadLow;
|
|
|
|
|
NES_Mapper->HSync = Mapper_HSync;
|
|
|
|
|
NES_Mapper->VSync = Mapper_VSync;
|
|
|
|
|
VROM_mask = 0xFFFF;
|
|
|
|
|
for (probe = 0x8000; probe; probe >>= 1) {
|
|
|
|
|
if ((VROM_1K_SIZE - 1) & probe)
|
|
|
|
|
break;
|
|
|
|
|
VROM_mask >>= 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (MapperNo) {
|
|
|
|
|
case 0:
|
|
|
|
|
MAP0_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
MAP1_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
MAP2_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
MAP3_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
MAP4_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
MAP6_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 7:
|
|
|
|
|
MAP7_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 8:
|
|
|
|
|
MAP8_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 11:
|
|
|
|
|
MAP11_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 13:
|
|
|
|
|
MAP13_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 15:
|
|
|
|
|
MAP15_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 16:
|
|
|
|
|
MAP16_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 17:
|
|
|
|
|
MAP17_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 18:
|
|
|
|
|
MAP18_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 19:
|
|
|
|
|
MAP19_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 21:
|
|
|
|
|
MAP21_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 22:
|
|
|
|
|
MAP22_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 23:
|
|
|
|
|
MAP23_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 24:
|
|
|
|
|
MAP24_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 25:
|
|
|
|
|
MAP25_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 32:
|
|
|
|
|
MAP32_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 33:
|
|
|
|
|
MAP33_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 34:
|
|
|
|
|
MAP34_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 64:
|
|
|
|
|
MAP64_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 65:
|
|
|
|
|
MAP65_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 66:
|
|
|
|
|
MAP66_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 67:
|
|
|
|
|
MAP67_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 69:
|
|
|
|
|
MAP69_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 70:
|
|
|
|
|
MAP70_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 71:
|
|
|
|
|
MAP71_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 72:
|
|
|
|
|
MAP72_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 73:
|
|
|
|
|
MAP73_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 75:
|
|
|
|
|
MAP75_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 76:
|
|
|
|
|
MAP76_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 78:
|
|
|
|
|
MAP78_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 79:
|
|
|
|
|
MAP79_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 85:
|
|
|
|
|
MAP85_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 87:
|
|
|
|
|
MAP87_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 88:
|
|
|
|
|
MAP88_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 99:
|
|
|
|
|
MAP99_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 113:
|
|
|
|
|
MAP113_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 189:
|
|
|
|
|
MAP189_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 225:
|
|
|
|
|
MAP225_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 227:
|
|
|
|
|
MAP227_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 240:
|
|
|
|
|
MAP240_Init();
|
|
|
|
|
break;
|
|
|
|
|
case 245:
|
|
|
|
|
MAP245_Init();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
NES_Mapper->Reset();
|
|
|
|
|
}
|
|
|
|
|
void asm_Mapper_Write(uint8_t byData, uint16_t wAddr) {
|
|
|
|
|
NES_Mapper->Write(wAddr, byData);
|
|
|
|
|
}
|
|
|
|
|
void asm_Mapper_ReadLow(uint16_t wAddr) // <20><><EFBFBD>ӵ<EFBFBD>
|
2025-06-27 00:32:57 +08:00
|
|
|
|
{
|
2025-07-10 11:30:57 +08:00
|
|
|
|
NES_Mapper->ReadLow(wAddr);
|
|
|
|
|
}
|
|
|
|
|
void asm_Mapper_WriteLow(uint8_t byData, uint16_t wAddr) {
|
|
|
|
|
NES_Mapper->WriteLow(wAddr, byData);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_CPU_bank3(signed char page) { map67_(page); }
|
|
|
|
|
void set_CPU_bank4(signed char page) { map89_(page); }
|
|
|
|
|
void set_CPU_bank5(signed char page) { mapAB_(page); }
|
|
|
|
|
void set_CPU_bank6(signed char page) { mapCD_(page); }
|
|
|
|
|
void set_CPU_bank7(signed char page) { mapEF_(page); }
|
|
|
|
|
void set_CPU_banks(int bank0_num, int bank1_num, int bank2_num, int bank3_num) {
|
|
|
|
|
map89_(bank0_num);
|
|
|
|
|
mapAB_(bank1_num);
|
|
|
|
|
mapCD_(bank2_num);
|
|
|
|
|
mapEF_(bank3_num);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_banks(uint32_t bank0_num, uint32_t bank1_num, uint32_t bank2_num,
|
|
|
|
|
uint32_t bank3_num, uint32_t bank4_num, uint32_t bank5_num,
|
|
|
|
|
uint32_t bank6_num, uint32_t bank7_num) {
|
2025-06-27 00:32:57 +08:00
|
|
|
|
VALIDATE_VROM_BANK(bank0_num);
|
|
|
|
|
VALIDATE_VROM_BANK(bank1_num);
|
|
|
|
|
VALIDATE_VROM_BANK(bank2_num);
|
|
|
|
|
VALIDATE_VROM_BANK(bank3_num);
|
|
|
|
|
VALIDATE_VROM_BANK(bank4_num);
|
|
|
|
|
VALIDATE_VROM_BANK(bank5_num);
|
|
|
|
|
VALIDATE_VROM_BANK(bank6_num);
|
|
|
|
|
VALIDATE_VROM_BANK(bank7_num);
|
|
|
|
|
|
|
|
|
|
ppu->PPU_VRAM_banks[0] = VROM_banks + (bank0_num << 10); // * 0x400
|
|
|
|
|
ppu->PPU_VRAM_banks[1] = VROM_banks + (bank1_num << 10);
|
|
|
|
|
ppu->PPU_VRAM_banks[2] = VROM_banks + (bank2_num << 10);
|
|
|
|
|
ppu->PPU_VRAM_banks[3] = VROM_banks + (bank3_num << 10);
|
|
|
|
|
ppu->PPU_VRAM_banks[4] = VROM_banks + (bank4_num << 10);
|
|
|
|
|
ppu->PPU_VRAM_banks[5] = VROM_banks + (bank5_num << 10);
|
|
|
|
|
ppu->PPU_VRAM_banks[6] = VROM_banks + (bank6_num << 10);
|
|
|
|
|
ppu->PPU_VRAM_banks[7] = VROM_banks + (bank7_num << 10);
|
2025-07-10 11:30:57 +08:00
|
|
|
|
|
|
|
|
|
set_tile_banks(VROM_tiles + bank0_num * 0x400, VROM_tiles + bank1_num * 0x400,
|
|
|
|
|
VROM_tiles + bank2_num * 0x400, VROM_tiles + bank3_num * 0x400,
|
|
|
|
|
VROM_tiles + bank4_num * 0x400, VROM_tiles + bank5_num * 0x400,
|
|
|
|
|
VROM_tiles + bank6_num * 0x400,
|
|
|
|
|
VROM_tiles + bank7_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank0(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[0] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(0, VROM_tiles + bank_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank1(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[1] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(1, VROM_tiles + bank_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank2(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[2] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(2, VROM_tiles + bank_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank3(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[3] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(3, VROM_tiles + bank_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank4(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[4] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(4, VROM_tiles + bank_num * 0x400);
|
|
|
|
|
}
|
|
|
|
|
void set_PPU_bank5(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[5] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(5, VROM_tiles + bank_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank6(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[6] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(6, VROM_tiles + bank_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank7(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[7] = VROM_banks + (bank_num << 10); // * 0x400
|
|
|
|
|
set_tile_bank(7, VROM_tiles + bank_num * 0x400);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
// for mapper 19,68,90
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank8(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[8] = VROM_banks + (bank_num << 10);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank9(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[9] = VROM_banks + (bank_num << 10);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank10(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[10] = VROM_banks + (bank_num << 10);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_PPU_bank11(uint32_t bank_num) {
|
|
|
|
|
VALIDATE_VROM_BANK(bank_num);
|
|
|
|
|
ppu->PPU_VRAM_banks[11] = VROM_banks + (bank_num << 10);
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// for mapper 1,4,5,6,13,19,80,85,96,119
|
2025-07-10 11:30:57 +08:00
|
|
|
|
void set_VRAM_bank(uint8_t bank, uint32_t bank_num) {
|
|
|
|
|
if (bank < 8) {
|
|
|
|
|
ppu->PPU_VRAM_banks[bank] = PPU_patterntables + ((bank_num & 0x0f) << 10);
|
|
|
|
|
} else if (bank < 12) {
|
|
|
|
|
set_name_table(bank, bank_num);
|
|
|
|
|
}
|
2025-06-27 00:32:57 +08:00
|
|
|
|
}
|