#define ADDR_MASK (space - 1)
#define BANK_MASK (bank_size - 1)
+
void MEMORY::initialize()
{
__UNLIKELY_IF((rd_table == NULL) || (wr_table == NULL)) {
const uint32_t start_bank = start >> addr_shift;
const uint32_t end_bank = end >> addr_shift;
uint32_t to_bank = to >> addr_shift;
- const uint64_t blocks = space / bank_size;
+ const uint64_t blocks = space >> addr_shift;
for(uint64_t i = start_bank; i <= end_bank; i++) {
if(to_bank >= blocks) break;
const uint32_t start_bank = start >> addr_shift;
const uint32_t end_bank = end >> addr_shift;
uint32_t to_bank = to >> addr_shift;
- const uint64_t blocks = space / bank_size;
+ const uint64_t blocks = space >> addr_shift;
for(uint64_t i = start_bank; i <= end_bank; i++) {
if(to_bank >= blocks) break;
// unique functions
inline int get_bank(uint32_t addr) const
{
- return (addr & (space - 1)) >> addr_shift;
+ const uint64_t _mask = space - 1;
+
+ return (uint32_t)(((uint64_t)addr & _mask) >> addr_shift);
}
inline int bus_access_times_16(uint32_t addr) const
{
bank_t *rd_table;
bank_t *wr_table;
- uint32_t space;
+ uint64_t space;
uint32_t bank_size;
int bus_width;
};