yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
snes.h
Go to the documentation of this file.
1#ifndef YAZE_SNES_H_
2#define YAZE_SNES_H_
3
4#include <cstdint>
5
6namespace yaze {
7
8inline uint32_t SnesToPc(uint32_t addr) noexcept {
9 constexpr uint32_t kFastRomRegion = 0x808000;
10 if (addr >= kFastRomRegion) {
11 addr -= kFastRomRegion;
12 }
13 uint32_t temp = (addr & 0x7FFF) + ((addr / 2) & 0xFF8000);
14 return (temp + 0x0);
15}
16
17inline uint32_t PcToSnes(uint32_t addr) {
18 uint8_t* b = reinterpret_cast<uint8_t*>(&addr);
19 b[2] = static_cast<uint8_t>(b[2] * 2);
20
21 if (b[1] >= 0x80) {
22 b[2] += 1;
23 } else {
24 b[1] += 0x80;
25 }
26
27 return addr;
28}
29
30inline uint32_t Get24LocalFromPC(uint8_t* data, int addr, bool pc = true) {
31 uint32_t ret =
32 (PcToSnes(addr) & 0xFF0000) | (data[addr + 1] << 8) | data[addr];
33 if (pc) {
34 return SnesToPc(ret);
35 }
36 return ret;
37}
38
39inline int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept {
40 return (bank << 16) | (high << 8) | low;
41}
42
43inline uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr) noexcept {
44 uint32_t result = 0;
45 result = (bank << 16) | addr;
46 return result;
47}
48
49} // namespace yaze
50
51#endif // YAZE_SNES_H_
Main namespace for the application.
Definition controller.cc:18
uint32_t PcToSnes(uint32_t addr)
Definition snes.h:17
uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr) noexcept
Definition snes.h:43
uint32_t Get24LocalFromPC(uint8_t *data, int addr, bool pc=true)
Definition snes.h:30
int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept
Definition snes.h:39
uint32_t SnesToPc(uint32_t addr) noexcept
Definition snes.h:8