_u32 loadL(_u32 address) { address &= 0xFFFFFF; _u32* ptr = translate_address_read(address); if (ptr == NULL) return 0; else return *ptr; }
/* Treat all 32-bit operations as two 16-bit operations */ uint8 loadB(uint32 address) { address &= 0xFFFFFF; if(FastReadMap[address >> 16]) return(FastReadMap[address >> 16][address]); uint8* ptr = (uint8*)translate_address_read(address); if (ptr) return *ptr; if(address >= 0x8000 && address <= 0xbfff) return(NGPGfx->read8(address)); if(address >= 0x4000 && address <= 0x7fff) { return(*(uint8 *)(CPUExRAM + address - 0x4000)); } if(address >= 0x70 && address <= 0x7F) { return(int_read8(address)); } if(address >= 0x90 && address <= 0x97) { return(rtc_read8(address)); } if(address >= 0x20 && address <= 0x29) { return(timer_read8(address)); } if(address == 0x50) return(SC0BUF); if(address == 0xBC) return Z80_ReadComm(); //printf("UNK B R: %08x\n", address); return(0); }
uint16 loadW(uint32 address) { address &= 0xFFFFFF; if(address & 1) { uint16 ret; ret = loadB(address); ret |= loadB(address + 1) << 8; return(ret); } if(FastReadMap[address >> 16]) return(MDFN_de16lsb<true>(&FastReadMap[address >> 16][address])); uint16* ptr = (uint16*)translate_address_read(address); if(ptr) return MDFN_de16lsb<true>(ptr); if(address >= 0x8000 && address <= 0xbfff) return(NGPGfx->read16(address)); if(address >= 0x4000 && address <= 0x7fff) { return(MDFN_de16lsb<true>(CPUExRAM + address - 0x4000)); } if(address == 0x50) return(SC0BUF); if(address >= 0x70 && address <= 0x7F) { uint16 ret; ret = int_read8(address); ret |= int_read8(address + 1) << 8; return(ret); } if(address >= 0x90 && address <= 0x97) { uint16 ret; ret = rtc_read8(address); ret |= rtc_read8(address + 1) << 8; return(ret); } if(address >= 0x20 && address <= 0x29) { uint16 ret; ret = timer_read8(address); ret |= timer_read8(address + 1) << 8; return(ret); } if(address == 0xBC) return Z80_ReadComm(); //printf("UNK W R: %08x\n", address); return(0); }