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) 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); 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(0x4000, 0x7fff).bankr(m_bank_ram[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(0x8000, 0xbfff).bankr(m_bank_ram[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(0xc000, 0xffff).bankr(m_bank_ram[3]).w(FUNC(tsconf_state::tsconf_bank_w<3>));
} }
void tsconf_state::tsconf_io(address_map &map) void tsconf_state::tsconf_io(address_map &map)
@ -199,20 +199,21 @@ void tsconf_state::video_start()
void tsconf_state::machine_start() void tsconf_state::machine_start()
{ {
for (auto i = 0; i < 4; i++) spectrum_128_state::machine_start();
m_banks[i]->configure_entries(0, m_ram->size() / 0x4000, m_ram->pointer(), 0x4000); m_maincpu->space(AS_PROGRAM).specific(m_program);
memory_region *rom = memregion("maincpu");
m_banks[4]->configure_entries(0, rom->bytes() / 0x4000, rom->base(), 0x4000);
save_item(NAME(m_regs)); save_item(NAME(m_regs));
// TODO save'm'all! // 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() void tsconf_state::machine_reset()
{ {
m_bank0_rom.select(0); m_bank0_rom.select(0);
m_program = &m_maincpu->space(AS_PROGRAM);
m_port_f7_ext = DISABLED; 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 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); 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) ROM_START(tsconf)
@ -306,4 +310,4 @@ ROM_START(tsconf)
ROM_END ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS // 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) tsconf_state(const machine_config &mconfig, device_type type, const char *tag)
: spectrum_128_state(mconfig, type, tag), : spectrum_128_state(mconfig, type, tag),
m_bank0_rom(*this, "bank0_rom"), m_bank0_rom(*this, "bank0_rom"),
m_banks(*this, "bank%u", 0U),
m_keyboard(*this, "pc_keyboard"), m_keyboard(*this, "pc_keyboard"),
m_beta(*this, BETA_DISK_TAG), m_beta(*this, BETA_DISK_TAG),
m_dma(*this, "dma"), m_dma(*this, "dma"),
@ -191,9 +190,8 @@ private:
std::map<tsconf_regs, u8> m_scanline_delayed_regs_update; std::map<tsconf_regs, u8> m_scanline_delayed_regs_update;
u8 m_regs[0x100]; u8 m_regs[0x100];
address_space *m_program = nullptr; memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_program;
memory_view m_bank0_rom; memory_view m_bank0_rom;
required_memory_bank_array<5> m_banks; // 0..3 - RAM, 4 - ROM
required_device<at_keyboard_device> m_keyboard; required_device<at_keyboard_device> m_keyboard;

View File

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