Implement DIMM properties.

This commit is contained in:
joevt
2023-10-30 20:53:00 -07:00
committed by dingusdev
parent 47969d9d50
commit 3124b10eaa
5 changed files with 44 additions and 12 deletions

View File

@@ -128,7 +128,7 @@ void HammerheadCtrl::write(uint32_t rgn_start, uint32_t offset, uint32_t value,
void HammerheadCtrl::insert_ram_dimm(int slot_num, uint32_t capacity)
{
if (slot_num < 0 || slot_num >= 26) {
if (slot_num < 0 || slot_num >= 13) {
ABORT_F("%s: invalid DIMM slot number %d", this->name.c_str(), slot_num);
}

View File

@@ -79,8 +79,11 @@ int initialize_catalyst(std::string& id)
return -1;
}
// plug 8MB RAM DIMM into slot #0
platinum_obj->insert_ram_dimm(0, DRAM_CAP_8MB);
// insert RAM DIMMs
platinum_obj->insert_ram_dimm(0, GET_INT_PROP("rambank1_size") * DRAM_CAP_1MB);
platinum_obj->insert_ram_dimm(1, GET_INT_PROP("rambank2_size") * DRAM_CAP_1MB);
platinum_obj->insert_ram_dimm(2, GET_INT_PROP("rambank3_size") * DRAM_CAP_1MB);
platinum_obj->insert_ram_dimm(3, GET_INT_PROP("rambank4_size") * DRAM_CAP_1MB);
// allocate and map physical RAM
platinum_obj->map_phys_ram();
@@ -107,7 +110,7 @@ int initialize_catalyst(std::string& id)
static const PropMap pm7200_settings = {
{"rambank1_size",
new IntProperty(16, std::vector<uint32_t>({4, 8, 16, 32, 64, 128}))},
new IntProperty( 8, std::vector<uint32_t>({ 4, 8, 16, 32, 64, 128}))},
{"rambank2_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank3_size",

View File

@@ -75,6 +75,15 @@ static const map<string, string> PropHelp = {
{"rambank2_size", "specifies RAM bank 2 size in MB"},
{"rambank3_size", "specifies RAM bank 3 size in MB"},
{"rambank4_size", "specifies RAM bank 4 size in MB"},
{"rambank5_size", "specifies RAM bank 5 size in MB"},
{"rambank6_size", "specifies RAM bank 6 size in MB"},
{"rambank7_size", "specifies RAM bank 7 size in MB"},
{"rambank8_size", "specifies RAM bank 8 size in MB"},
{"rambank9_size", "specifies RAM bank 9 size in MB"},
{"rambank10_size", "specifies RAM bank 10 size in MB"},
{"rambank11_size", "specifies RAM bank 11 size in MB"},
{"rambank12_size", "specifies RAM bank 12 size in MB"},
{"rambank0_size", "specifies onboard RAM bank size in MB"},
{"gfxmem_size", "specifies video memory size in MB"},
{"fdd_img", "specifies path to floppy disk image"},
{"fdd_fmt", "specifies floppy disk format"},

View File

@@ -77,8 +77,11 @@ int initialize_gazelle(std::string& id)
return -1;
}
// plug 32MB RAM DIMM into slot #0
psx_obj->insert_ram_dimm(0, DRAM_CAP_32MB);
// insert RAM DIMMs
psx_obj->insert_ram_dimm(0, GET_INT_PROP("rambank1_size") * DRAM_CAP_1MB);
psx_obj->insert_ram_dimm(1, GET_INT_PROP("rambank2_size") * DRAM_CAP_1MB);
psx_obj->insert_ram_dimm(2, GET_INT_PROP("rambank3_size") * DRAM_CAP_1MB);
psx_obj->insert_ram_dimm(3, GET_INT_PROP("rambank4_size") * DRAM_CAP_1MB);
// allocate and map physical RAM
psx_obj->map_phys_ram();
@@ -98,7 +101,7 @@ int initialize_gazelle(std::string& id)
static const PropMap pm6500_settings = {
{"rambank1_size",
new IntProperty(16, std::vector<uint32_t>({4, 8, 16, 32, 64, 128}))},
new IntProperty(32, std::vector<uint32_t>({ 4, 8, 16, 32, 64, 128}))},
{"rambank2_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank3_size",

View File

@@ -118,11 +118,10 @@ int initialize_tnt(std::string& id)
}
// populate RAM banks from configuration properties
for (int bank_num = 0; bank_num <= 3; bank_num++) {
std::string bn = {char('1' + bank_num)};
for (int bank_num = 0; bank_num <= 12; bank_num++) {
std::string bn = std::to_string(bank_num);
int bank_size = GET_INT_PROP("rambank" + bn + "_size");
if (bank_size)
memctrl_obj->insert_ram_dimm(bank_num, bank_size * DRAM_CAP_1MB);
memctrl_obj->insert_ram_dimm(bank_num, bank_size * DRAM_CAP_1MB);
}
// allocate and map physical RAM
@@ -153,14 +152,32 @@ int initialize_tnt(std::string& id)
template <uint32_t cpu>
static const PropMap pm7500_settings = {
{"rambank0_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank1_size",
new IntProperty(16, std::vector<uint32_t>({4, 8, 16, 32, 64, 128}))},
new IntProperty(16, std::vector<uint32_t>({ 4, 8, 16, 32, 64, 128}))},
{"rambank2_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank3_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank4_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank5_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank6_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank7_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank8_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank9_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank10_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank11_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"rambank12_size",
new IntProperty( 0, std::vector<uint32_t>({0, 4, 8, 16, 32, 64, 128}))},
{"emmo",
new BinProperty(0)},
{"cpu",