Fixed hardcoded memory size on Toshiba T1000/T1200.

Added ability to disable video on T1200.
Patch form John Elliott.
This commit is contained in:
SarahW 2018-02-24 15:09:03 +00:00
commit 636fd9748d
3 changed files with 23 additions and 2 deletions

View file

@ -210,7 +210,7 @@ static void ems_set_hardram(struct t1000_system *sys, uint8_t val)
sys->ems_base = 0; sys->ems_base = 0;
} }
/* pclog("EMS base set to %02x\n", val); */ /* pclog("EMS base set to %02x\n", val); */
sys->ems_pages = 48 - 4 * sys->ems_base; sys->ems_pages = ((mem_size - 512) / 16) - 4 * sys->ems_base;
if (sys->ems_pages < 0) sys->ems_pages = 0; if (sys->ems_pages < 0) sys->ems_pages = 0;
/* Recalculate EMS mappings */ /* Recalculate EMS mappings */
for (n = 0; n < 4; n++) for (n = 0; n < 4; n++)
@ -421,6 +421,14 @@ static void write_t1000_ctl(uint16_t addr, uint8_t val, void *priv)
} }
} }
break; break;
/* It looks as if the T1200, like the T3100, can disable
* its builtin video chipset if it detects the presence of
* another video card. */
case 6: if (romset == ROM_T1200)
{
t1000_video_enable(val & 0x01 ? 0 : 1);
}
break;
/* EMS control*/ /* EMS control*/
case 0x0F: case 0x0F:
switch (sys->sys_ctl[0x0E]) switch (sys->sys_ctl[0x0E])

View file

@ -27,6 +27,7 @@ static uint8_t language;
* Bit 0: Thin font * Bit 0: Thin font
*/ */
static uint8_t st_video_options; static uint8_t st_video_options;
static uint8_t st_enabled = 1;
static uint8_t st_display_internal = -1; static uint8_t st_display_internal = -1;
void t1000_video_options_set(uint8_t options) void t1000_video_options_set(uint8_t options)
@ -35,6 +36,11 @@ void t1000_video_options_set(uint8_t options)
st_video_options |= language; st_video_options |= language;
} }
void t1000_video_enable(uint8_t enabled)
{
st_enabled = enabled;
}
void t1000_display_set(uint8_t internal) void t1000_display_set(uint8_t internal)
{ {
st_display_internal = internal; st_display_internal = internal;
@ -413,12 +419,18 @@ static void t1000_poll(void *p)
{ {
t1000_t *t1000 = (t1000_t *)p; t1000_t *t1000 = (t1000_t *)p;
if (t1000->video_options != st_video_options) if (t1000->video_options != st_video_options ||
t1000->enabled != st_enabled)
{ {
t1000->video_options = st_video_options; t1000->video_options = st_video_options;
t1000->enabled = st_enabled;
/* Set the font used for the external display */ /* Set the font used for the external display */
t1000->cga.fontbase = ((t1000->video_options & 3) * 256); t1000->cga.fontbase = ((t1000->video_options & 3) * 256);
if (t1000->enabled) /* Disable internal chipset */
mem_mapping_enable(&t1000->mapping);
else mem_mapping_disable(&t1000->mapping);
} }
/* Switch between internal plasma and external CRT display. */ /* Switch between internal plasma and external CRT display. */
if (st_display_internal != -1 && st_display_internal != t1000->internal) if (st_display_internal != -1 && st_display_internal != t1000->internal)

View file

@ -2,3 +2,4 @@ extern device_t t1000_device;
void t1000_video_options_set(uint8_t options); void t1000_video_options_set(uint8_t options);
void t1000_display_set(uint8_t internal); void t1000_display_set(uint8_t internal);
void t1000_video_enable(uint8_t enabled);