coco: Fixed loading Orchestra-90, RS-232 Program Pak, Modem Pak from softlist. Fixed MT05291.

This commit is contained in:
Nigel Barnes 2019-03-23 23:24:37 +00:00
parent 30caaa7bef
commit ef4c78e102
5 changed files with 21 additions and 3 deletions

View File

@ -475,6 +475,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo)
<publisher>Tandy</publisher>
<info name="serial" value="26-2226" />
<part name="cart" interface="coco_cart">
<feature name="slot" value="rs232" />
<dataarea name="rom" size="4096">
<rom name="deluxe rs-232 program pak (1983)(26-2226)(tandy).rom" size="4096" crc="d990e1f9" sha1="3fad25f3462a0b581b9c182ac11ad90c8fa08cb6" offset="0" />
</dataarea>
@ -552,6 +553,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo)
<publisher>Tandy</publisher>
<info name="serial" value="26-2228" />
<part name="cart" interface="coco_cart">
<feature name="slot" value="dcmodem" />
<dataarea name="rom" size="8192">
<rom name="color computer modem pak (1985)(26-2228)(tandy).rom" size="8192" crc="667bc55d" sha1="703fe0aba4a603591078cb675ffd26a67c02df88" offset="0" />
</dataarea>
@ -976,6 +978,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo)
<info name="author" value="Jon Bokelman" />
<info name="serial" value="26-3143" />
<part name="cart" interface="coco_cart">
<feature name="slot" value="orch90" />
<dataarea name="rom" size="8192">
<rom name="orchestra 90 (1984)(26-3143)(tandy).rom" size="8192" crc="15fb39af" sha1="6a20fee9c70b36a6435ac8378f31d5b626017df0" offset="0" />
</dataarea>

View File

@ -70,6 +70,11 @@ namespace
return memregion("eprom")->base();
}
virtual memory_region* get_cart_memregion() override
{
return memregion("eprom");
}
private:
// internal state
required_device<mos6551_device> m_uart;

View File

@ -92,6 +92,11 @@ namespace
return memregion("eprom")->base();
}
virtual memory_region* get_cart_memregion() override
{
return memregion("eprom");
}
private:
WRITE8_MEMBER(write_left) { m_ldac->write(data); }
WRITE8_MEMBER(write_right) { m_rdac->write(data); }

View File

@ -68,6 +68,11 @@ namespace
return memregion("eprom")->base();
}
virtual memory_region* get_cart_memregion() override
{
return memregion("eprom");
}
private:
// internal state
required_device<mos6551_device> m_uart;

View File

@ -412,11 +412,11 @@ image_init_result cococart_slot_device::call_load()
{
memory_region *cart_mem = m_cart->get_cart_memregion();
uint8_t *base = cart_mem->base();
offs_t read_length, cart_legnth = cart_mem->bytes();;
offs_t read_length, cart_length = cart_mem->bytes();;
if (!loaded_through_softlist())
{
read_length = fread(base, cart_legnth);
read_length = fread(base, cart_length);
}
else
{
@ -424,7 +424,7 @@ image_init_result cococart_slot_device::call_load()
memcpy(base, get_software_region("rom"), read_length);
}
while (read_length < cart_legnth)
while (read_length < cart_length)
{
offs_t len = std::min(read_length, m_cart->get_cart_size() - read_length);
memcpy(base + read_length, base, len);