Fixed Phoenix XT Clone and Tandy RAM detection, fixes #3219.
This commit is contained in:
@@ -128,6 +128,7 @@ typedef struct tandy_t {
|
||||
int rom_offset; /* SL2 */
|
||||
|
||||
uint32_t base;
|
||||
uint32_t mask;
|
||||
int is_sl2;
|
||||
|
||||
t1kvid_t *vid;
|
||||
@@ -1319,8 +1320,19 @@ tandy_write(uint16_t addr, uint8_t val, void *priv)
|
||||
|
||||
switch (addr) {
|
||||
case 0x00a0:
|
||||
mem_mapping_set_addr(&dev->ram_mapping,
|
||||
((val >> 1) & 7) * 128 * 1024, 0x20000);
|
||||
if (val & 0x10) {
|
||||
dev->base = (mem_size - 256) * 1024;
|
||||
dev->mask = 0x3ffff;
|
||||
mem_mapping_set_addr(&ram_low_mapping, 0, dev->base);
|
||||
mem_mapping_set_addr(&dev->ram_mapping,
|
||||
((val >> 1) & 7) * 128 * 1024, 0x40000);
|
||||
} else {
|
||||
dev->base = (mem_size - 128) * 1024;
|
||||
dev->mask = 0x1ffff;
|
||||
mem_mapping_set_addr(&ram_low_mapping, 0, dev->base);
|
||||
mem_mapping_set_addr(&dev->ram_mapping,
|
||||
((val >> 1) & 7) * 128 * 1024, 0x20000);
|
||||
}
|
||||
dev->ram_bank = val;
|
||||
break;
|
||||
|
||||
@@ -1378,7 +1390,7 @@ write_ram(uint32_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
const tandy_t *dev = (tandy_t *) priv;
|
||||
|
||||
ram[dev->base + (addr & 0x1ffff)] = val;
|
||||
ram[dev->base + (addr & dev->mask)] = val;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -1386,7 +1398,7 @@ read_ram(uint32_t addr, void *priv)
|
||||
{
|
||||
const tandy_t *dev = (tandy_t *) priv;
|
||||
|
||||
return (ram[dev->base + (addr & 0x1ffff)]);
|
||||
return (ram[dev->base + (addr & dev->mask)]);
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -1462,8 +1474,10 @@ machine_tandy1k_init(const machine_t *model, int type)
|
||||
* 0xFFE8 (SL2), so we remove it from the main mapping.
|
||||
*/
|
||||
dev->base = (mem_size - 128) * 1024;
|
||||
mem_mapping_add(&dev->ram_mapping, 0x80000, 0x20000,
|
||||
read_ram, NULL, NULL, write_ram, NULL, NULL, NULL, 0, dev);
|
||||
dev->mask = 0x1ffff;
|
||||
mem_mapping_add(&dev->ram_mapping, 0x60000, 0x20000,
|
||||
read_ram, NULL, NULL, write_ram, NULL, NULL, NULL,
|
||||
MEM_MAPPING_INTERNAL, dev);
|
||||
mem_mapping_set_addr(&ram_low_mapping, 0, dev->base);
|
||||
|
||||
device_add(&keyboard_tandy_device);
|
||||
|
@@ -310,7 +310,9 @@ machine_xt_pxxt_init(const machine_t *model)
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_xt_clone_init(model);
|
||||
device_add(&keyboard_xt_device);
|
||||
|
||||
machine_xt_common_init(model);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user