sinclair/tsconf.cpp: Added initial software list and cleaned up code a little. (#10196)

This commit is contained in:
holub 2022-08-08 12:26:54 -04:00 committed by GitHub
parent 83ba985f9c
commit 95dc01dd40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 68 additions and 34 deletions

View File

@ -0,0 +1,30 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0
-->
<softwarelist name="tsconf_betadisc_flop" description="TS-Configuration Beta Disc / TR-DOS disk images">
<software name="copter">
<description>Copter v0.1</description>
<year>2012</year>
<publisher>Wizart/DT</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="COPTER.trd" size="655360" crc="43236562" sha1="c4e3a9bcfd2387e954372a633f7415db368dbd4b" />
</dataarea>
</part>
</software>
<software name="zxbatlecity">
<description>ZX Battle City v1.4 (NoVDAC)</description>
<year>2020</year>
<publisher>Marie Slip / n1k-o</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="zxbattlecity_1_4_novdac.trd" size="655360" crc="0a2bfb45" sha1="21747a464db723d934ec2fa8a398b212344f6c1e" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -96,13 +96,13 @@ TILE_GET_INFO_MEMBER(tsconf_state::get_tile_info_16c)
void tsconf_state::tsconf_mem(address_map &map)
{
map(0x0000, 0x3fff).bankr(m_banks[0]).w(FUNC(tsconf_state::tsconf_bank_w<0>));
map(0x0000, 0x3fff).bankr(m_bank_ram[0]).w(FUNC(tsconf_state::tsconf_bank_w<0>));
map(0x0000, 0x3fff).view(m_bank0_rom);
m_bank0_rom[0](0x0000, 0x3fff).bankr(m_banks[4]);
m_bank0_rom[0](0x0000, 0x3fff).bankr(m_bank_rom[0]);
map(0x4000, 0x7fff).bankr(m_banks[1]).w(FUNC(tsconf_state::tsconf_bank_w<1>));
map(0x8000, 0xbfff).bankr(m_banks[2]).w(FUNC(tsconf_state::tsconf_bank_w<2>));
map(0xc000, 0xffff).bankr(m_banks[3]).w(FUNC(tsconf_state::tsconf_bank_w<3>));
map(0x4000, 0x7fff).bankr(m_bank_ram[1]).w(FUNC(tsconf_state::tsconf_bank_w<1>));
map(0x8000, 0xbfff).bankr(m_bank_ram[2]).w(FUNC(tsconf_state::tsconf_bank_w<2>));
map(0xc000, 0xffff).bankr(m_bank_ram[3]).w(FUNC(tsconf_state::tsconf_bank_w<3>));
}
void tsconf_state::tsconf_io(address_map &map)
@ -199,20 +199,21 @@ void tsconf_state::video_start()
void tsconf_state::machine_start()
{
for (auto i = 0; i < 4; i++)
m_banks[i]->configure_entries(0, m_ram->size() / 0x4000, m_ram->pointer(), 0x4000);
memory_region *rom = memregion("maincpu");
m_banks[4]->configure_entries(0, rom->bytes() / 0x4000, rom->base(), 0x4000);
spectrum_128_state::machine_start();
m_maincpu->space(AS_PROGRAM).specific(m_program);
save_item(NAME(m_regs));
// TODO save'm'all!
// reconfigure ROMs
memory_region *rom = memregion("maincpu");
m_bank_rom[0]->configure_entries(0, rom->bytes() / 0x4000, rom->base(), 0x4000);
m_bank_ram[0]->configure_entries(0, m_ram->size() / 0x4000, m_ram->pointer(), 0x4000);
}
void tsconf_state::machine_reset()
{
m_bank0_rom.select(0);
m_program = &m_maincpu->space(AS_PROGRAM);
m_port_f7_ext = DISABLED;
@ -298,6 +299,9 @@ void tsconf_state::tsconf(machine_config &config)
RAM(config, m_sfile).set_default_size("512").set_default_value(0); // 85*6
AT_KEYB(config, m_keyboard, pc_keyboard_device::KEYBOARD_TYPE::AT, 3);
SOFTWARE_LIST(config, "betadisc_list_pent").set_original("spectrum_betadisc_flop");
SOFTWARE_LIST(config, "betadisc_list_tsconf").set_original("tsconf_betadisc_flop");
}
ROM_START(tsconf)
@ -306,4 +310,4 @@ ROM_START(tsconf)
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 2011, tsconf, spec128, 0, tsconf, spec_plus, tsconf_state, empty_init, "NedoPC, TS-Labs", "ZX Evolution TS-Configuration", MACHINE_IS_INCOMPLETE)
COMP( 2011, tsconf, spec128, 0, tsconf, spec_plus, tsconf_state, empty_init, "NedoPC, TS-Labs", "ZX Evolution TS-Configuration", 0)

View File

@ -28,7 +28,6 @@ public:
tsconf_state(const machine_config &mconfig, device_type type, const char *tag)
: spectrum_128_state(mconfig, type, tag),
m_bank0_rom(*this, "bank0_rom"),
m_banks(*this, "bank%u", 0U),
m_keyboard(*this, "pc_keyboard"),
m_beta(*this, BETA_DISK_TAG),
m_dma(*this, "dma"),
@ -191,9 +190,8 @@ private:
std::map<tsconf_regs, u8> m_scanline_delayed_regs_update;
u8 m_regs[0x100];
address_space *m_program = nullptr;
memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_program;
memory_view m_bank0_rom;
required_memory_bank_array<5> m_banks; // 0..3 - RAM, 4 - ROM
required_device<at_keyboard_device> m_keyboard;

View File

@ -72,12 +72,12 @@ void tsconf_state::tsconf_update_bank0()
if (W0_RAM)
{
m_banks[0]->set_entry(page0);
m_bank_ram[0]->set_entry(page0);
m_bank0_rom.disable();
}
else
{
m_banks[4]->set_entry(page0 & 0x1f);
m_bank_rom[0]->set_entry(page0 & 0x1f);
m_bank0_rom.select(0);
}
}
@ -508,15 +508,15 @@ void tsconf_state::tsconf_port_xxaf_w(offs_t port, u8 data)
break;
case PAGE1:
m_banks[1]->set_entry(data);
m_bank_ram[1]->set_entry(data);
break;
case PAGE2:
m_banks[2]->set_entry(data);
m_bank_ram[2]->set_entry(data);
break;
case PAGE3:
m_banks[3]->set_entry(data);
m_bank_ram[3]->set_entry(data);
break;
case DMAS_ADDRESS_L:
@ -811,30 +811,32 @@ TIMER_CALLBACK_MEMBER(tsconf_state::irq_scanline)
u8 tsconf_state::beta_neutral_r(offs_t offset)
{
return m_program->read_byte(offset);
return m_program.read_byte(offset);
}
u8 tsconf_state::beta_enable_r(offs_t offset)
{
if (!W0_RAM && m_banks[4]->entry() == 3)
{
if (m_beta->started() /*&& !m_beta->is_active()*/)
if (!(machine().side_effects_disabled())) {
if (!W0_RAM && m_bank_rom[0]->entry() == 3)
{
m_beta->enable();
tsconf_update_bank0();
if (m_beta->started() && !m_beta->is_active())
{
m_beta->enable();
tsconf_update_bank0();
}
}
}
return m_program->read_byte(offset + 0x3d00);
return m_program.read_byte(offset + 0x3d00);
}
u8 tsconf_state::beta_disable_r(offs_t offset)
{
if (m_beta->started() && m_beta->is_active())
{
m_beta->disable();
tsconf_update_bank0();
if (!(machine().side_effects_disabled())) {
if (m_beta->started() && m_beta->is_active())
{
m_beta->disable();
tsconf_update_bank0();
}
}
return m_program->read_byte(offset + 0x4000);
return m_program.read_byte(offset + 0x4000);
}