Fixed Phoenix XT Clone and Tandy RAM detection, fixes #3219.

This commit is contained in:
OBattler
2023-08-21 05:41:37 +02:00
parent 5b4bc444cb
commit 2ab8bdee0e
2 changed files with 23 additions and 7 deletions

View File

@@ -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);

View File

@@ -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;
}