mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
ti99/genmod: Add option to decode high address lines for DDCC-1 so that it can be used with Genmod.
This commit is contained in:
parent
7dcdf5db68
commit
f44b654efd
@ -95,19 +95,23 @@ offs_t myarc_fdc_device::get_address()
|
||||
void myarc_fdc_device::debug_read(offs_t offset, uint8_t* value)
|
||||
{
|
||||
offs_t addrcopy = m_address;
|
||||
m_address = offset;
|
||||
if (m_pal->ramsel())
|
||||
{
|
||||
*value = m_buffer_ram->pointer()[m_address & 0x07ff];
|
||||
}
|
||||
|
||||
if (m_pal->romen())
|
||||
if (!m_dec_high || amabc_is_set(offset))
|
||||
{
|
||||
// EPROM selected
|
||||
offs_t base = m_banksel? 0x1000 : 0;
|
||||
*value = m_dsrrom[base | (m_address & 0x0fff)];
|
||||
m_address = offset;
|
||||
if (m_pal->ramsel())
|
||||
{
|
||||
*value = m_buffer_ram->pointer()[m_address & 0x07ff];
|
||||
}
|
||||
|
||||
if (m_pal->romen())
|
||||
{
|
||||
// EPROM selected
|
||||
offs_t base = m_banksel? 0x1000 : 0;
|
||||
*value = m_dsrrom[base | (m_address & 0x0fff)];
|
||||
}
|
||||
m_address = addrcopy;
|
||||
}
|
||||
m_address = addrcopy;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -116,12 +120,16 @@ void myarc_fdc_device::debug_read(offs_t offset, uint8_t* value)
|
||||
void myarc_fdc_device::debug_write(offs_t offset, uint8_t data)
|
||||
{
|
||||
offs_t addrcopy = m_address;
|
||||
m_address = offset;
|
||||
if (m_pal->ramsel())
|
||||
|
||||
if (!m_dec_high || amabc_is_set(offset))
|
||||
{
|
||||
m_buffer_ram->pointer()[m_address & 0x07ff] = data;
|
||||
m_address = offset;
|
||||
if (m_pal->ramsel())
|
||||
{
|
||||
m_buffer_ram->pointer()[m_address & 0x07ff] = data;
|
||||
}
|
||||
m_address = addrcopy;
|
||||
}
|
||||
m_address = addrcopy;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -135,6 +143,9 @@ void myarc_fdc_device::readz(offs_t offset, uint8_t *value)
|
||||
return;
|
||||
}
|
||||
|
||||
// If we have an AMA/B/C decoder and it delivers false, exit here
|
||||
if (m_dec_high && !amabc_is_set(offset)) return;
|
||||
|
||||
if (m_pal->ramsel())
|
||||
{
|
||||
// SRAM selected
|
||||
@ -175,6 +186,9 @@ void myarc_fdc_device::write(offs_t offset, uint8_t data)
|
||||
return;
|
||||
}
|
||||
|
||||
// If we have an AMA/B/C decoder and it delivers false, exit here
|
||||
if (m_dec_high && !amabc_is_set(offset)) return;
|
||||
|
||||
if (m_pal->ramsel())
|
||||
{
|
||||
// SRAM selected
|
||||
@ -346,6 +360,8 @@ void myarc_fdc_device::device_reset()
|
||||
m_wdc = m_wd1770;
|
||||
else
|
||||
m_wdc = m_wd1772;
|
||||
|
||||
m_dec_high = (ioport("AMADECODE")->read()!=0);
|
||||
}
|
||||
|
||||
void myarc_fdc_device::device_config_complete()
|
||||
@ -366,7 +382,7 @@ void myarc_fdc_device::floppy_formats(format_registration &fr)
|
||||
fr.add(FLOPPY_TI99_TDF_FORMAT);
|
||||
}
|
||||
|
||||
static void ccfdc_floppies(device_slot_interface &device)
|
||||
static void myarc_ddcc_floppies(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("525dd", FLOPPY_525_DD); // 40 tracks
|
||||
device.option_add("525qd", FLOPPY_525_QD); // 80 tracks
|
||||
@ -397,6 +413,11 @@ INPUT_PORTS_START(myarc_ddcc )
|
||||
PORT_DIPNAME( 0x08, 0x00, "DSK4 head step time" )
|
||||
PORT_DIPSETTING( 0x00, "6ms")
|
||||
PORT_DIPSETTING( 0x08, "20ms/2ms")
|
||||
|
||||
PORT_START( "AMADECODE" )
|
||||
PORT_CONFNAME( 0x01, 0x01, "Decode AMA/AMB/AMC lines" )
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
||||
PORT_CONFSETTING( 0x01, DEF_STR( On ))
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -438,10 +459,10 @@ void myarc_fdc_device::device_add_mconfig(machine_config& config)
|
||||
DDCC1_PAL(config, PAL_TAG, 0);
|
||||
|
||||
// Floppy drives
|
||||
FLOPPY_CONNECTOR(config, "0", ccfdc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "1", ccfdc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "2", ccfdc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "3", ccfdc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "0", myarc_ddcc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "1", myarc_ddcc_floppies, "525dd", myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "2", myarc_ddcc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, "3", myarc_ddcc_floppies, nullptr, myarc_fdc_device::floppy_formats).enable_sound(true);
|
||||
}
|
||||
|
||||
ioport_constructor myarc_fdc_device::device_input_ports() const
|
||||
|
@ -103,6 +103,9 @@ private:
|
||||
|
||||
// Recent address
|
||||
int m_address;
|
||||
|
||||
// AMA/B/C decoding active
|
||||
bool m_dec_high;
|
||||
};
|
||||
|
||||
// =========== Decoder PAL circuit ================
|
||||
|
@ -796,18 +796,18 @@ void device_ti99_peribox_card_interface::interface_config_complete()
|
||||
|
||||
bool device_ti99_peribox_card_interface::in_dsr_space(offs_t offset, bool amadec)
|
||||
{
|
||||
if (amadec)
|
||||
return (offset & 0x7e000)==0x74000;
|
||||
else
|
||||
return (offset & 0x0e000)==0x04000;
|
||||
if (amadec && !amabc_is_set(offset)) return false;
|
||||
return (offset & 0x0e000)==0x04000;
|
||||
}
|
||||
|
||||
bool device_ti99_peribox_card_interface::in_cart_space(offs_t offset, bool amadec)
|
||||
/*
|
||||
Some cards do not decode the additional address lines AMA, AMB, AMC.
|
||||
This leads to errors when using the card with Genmod. The typical procedure
|
||||
to decode the lines is the same for each card.
|
||||
*/
|
||||
bool device_ti99_peribox_card_interface::amabc_is_set(offs_t offset)
|
||||
{
|
||||
if (amadec)
|
||||
return (offset & 0x7e000)==0x76000;
|
||||
else
|
||||
return (offset & 0x0e000)==0x06000;
|
||||
return (((offset >> 16)&0x07)==0x07);
|
||||
}
|
||||
|
||||
} // end namespace bus::ti99::peb
|
||||
|
@ -202,9 +202,9 @@ protected:
|
||||
int m_cru_base;
|
||||
|
||||
// Methods to decide whether we are acccessing the 4000-5fff region (DSR)
|
||||
// or the cartridge region
|
||||
static bool in_dsr_space(offs_t offset, bool amadec);
|
||||
static bool in_cart_space(offs_t offset, bool amadec);
|
||||
bool in_dsr_space(offs_t offset, bool amadec);
|
||||
|
||||
bool amabc_is_set(offs_t offset);
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user