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 */
|
int rom_offset; /* SL2 */
|
||||||
|
|
||||||
uint32_t base;
|
uint32_t base;
|
||||||
|
uint32_t mask;
|
||||||
int is_sl2;
|
int is_sl2;
|
||||||
|
|
||||||
t1kvid_t *vid;
|
t1kvid_t *vid;
|
||||||
@@ -1319,8 +1320,19 @@ tandy_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
|
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case 0x00a0:
|
case 0x00a0:
|
||||||
|
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,
|
mem_mapping_set_addr(&dev->ram_mapping,
|
||||||
((val >> 1) & 7) * 128 * 1024, 0x20000);
|
((val >> 1) & 7) * 128 * 1024, 0x20000);
|
||||||
|
}
|
||||||
dev->ram_bank = val;
|
dev->ram_bank = val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1378,7 +1390,7 @@ write_ram(uint32_t addr, uint8_t val, void *priv)
|
|||||||
{
|
{
|
||||||
const tandy_t *dev = (tandy_t *) priv;
|
const tandy_t *dev = (tandy_t *) priv;
|
||||||
|
|
||||||
ram[dev->base + (addr & 0x1ffff)] = val;
|
ram[dev->base + (addr & dev->mask)] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t
|
static uint8_t
|
||||||
@@ -1386,7 +1398,7 @@ read_ram(uint32_t addr, void *priv)
|
|||||||
{
|
{
|
||||||
const tandy_t *dev = (tandy_t *) priv;
|
const tandy_t *dev = (tandy_t *) priv;
|
||||||
|
|
||||||
return (ram[dev->base + (addr & 0x1ffff)]);
|
return (ram[dev->base + (addr & dev->mask)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t
|
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.
|
* 0xFFE8 (SL2), so we remove it from the main mapping.
|
||||||
*/
|
*/
|
||||||
dev->base = (mem_size - 128) * 1024;
|
dev->base = (mem_size - 128) * 1024;
|
||||||
mem_mapping_add(&dev->ram_mapping, 0x80000, 0x20000,
|
dev->mask = 0x1ffff;
|
||||||
read_ram, NULL, NULL, write_ram, NULL, NULL, NULL, 0, dev);
|
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);
|
mem_mapping_set_addr(&ram_low_mapping, 0, dev->base);
|
||||||
|
|
||||||
device_add(&keyboard_tandy_device);
|
device_add(&keyboard_tandy_device);
|
||||||
|
@@ -310,7 +310,9 @@ machine_xt_pxxt_init(const machine_t *model)
|
|||||||
if (bios_only || !ret)
|
if (bios_only || !ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
machine_xt_clone_init(model);
|
device_add(&keyboard_xt_device);
|
||||||
|
|
||||||
|
machine_xt_common_init(model);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user