special.cpp a bit less hacky banking (nw)

This commit is contained in:
MetalliC 2020-06-02 18:08:32 +03:00
parent c0ad2afea4
commit 009f1364e1
3 changed files with 19 additions and 21 deletions

View File

@ -21,8 +21,8 @@
/* Address maps */
void special_state::specialist_mem(address_map &map)
{
map(0x0000, 0x2fff).bankrw("bank1"); // First bank
map(0x3000, 0x8fff).ram(); // RAM
map(0x0000, 0x3fff).bankrw("bank1"); // First bank, hacky, upon reset c000-ffff area should be mirrored at 0000, 4000 and 8000
map(0x4000, 0x8fff).ram(); // RAM
map(0x9000, 0xbfff).ram().share("videoram"); // Video RAM
map(0xc000, 0xefff).rom(); // System ROM
map(0xf800, 0xf803).mirror(0x7fc).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write));
@ -30,8 +30,8 @@ void special_state::specialist_mem(address_map &map)
void special_state::specialp_mem(address_map &map)
{
map(0x0000, 0x2fff).bankrw("bank1"); // First bank
map(0x3000, 0x7fff).ram(); // RAM
map(0x0000, 0x3fff).bankrw("bank1"); // First bank
map(0x4000, 0x7fff).ram(); // RAM
map(0x8000, 0xbfff).ram().share("videoram"); // Video RAM
map(0xc000, 0xefff).rom(); // System ROM
map(0xf800, 0xf803).mirror(0x7fc).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write));
@ -370,8 +370,6 @@ void special_state::special(machine_config &config)
I8080(config, m_maincpu, 2000000);
m_maincpu->set_addrmap(AS_PROGRAM, &special_state::specialist_mem);
MCFG_MACHINE_RESET_OVERRIDE(special_state, special )
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(50);
@ -463,7 +461,7 @@ void special_state::specimx(machine_config &config)
m_ppi->in_pb_callback().set(FUNC(special_state::specimx_8255_portb_r));
m_ppi->out_pb_callback().set(FUNC(special_state::specialist_8255_portb_w));
m_ppi->in_pc_callback().set(FUNC(special_state::specialist_8255_portc_r));
m_ppi->out_pc_callback().set(FUNC(special_state::specialist_8255_portc_w));
m_ppi->out_pc_callback().set(FUNC(special_state::specialistmx_8255_portc_w));
FD1793(config, m_fdc, 8_MHz_XTAL / 8);
m_fdc->drq_wr_callback().set(FUNC(special_state::fdc_drq));
@ -514,7 +512,7 @@ void special_state::erik(machine_config &config)
m_ppi->in_pb_callback().set(FUNC(special_state::specialist_8255_portb_r));
m_ppi->out_pb_callback().set(FUNC(special_state::specialist_8255_portb_w));
m_ppi->in_pc_callback().set(FUNC(special_state::specialist_8255_portc_r));
m_ppi->out_pc_callback().set(FUNC(special_state::specialist_8255_portc_w));
m_ppi->out_pc_callback().set(FUNC(special_state::specialistmx_8255_portc_w));
FD1793(config, m_fdc, 8_MHz_XTAL / 8);
m_fdc->drq_wr_callback().set(FUNC(special_state::fdc_drq));

View File

@ -66,7 +66,6 @@ protected:
private:
enum
{
TIMER_RESET,
TIMER_PIT8253_GATES
};
@ -89,8 +88,8 @@ private:
void specialist_8255_porta_w(uint8_t data);
void specialist_8255_portb_w(uint8_t data);
void specialist_8255_portc_w(uint8_t data);
void specialistmx_8255_portc_w(uint8_t data);
DECLARE_MACHINE_RESET(special);
DECLARE_MACHINE_RESET(erik);
void erik_palette(palette_device &palette) const;
DECLARE_MACHINE_START(specimx);

View File

@ -20,7 +20,7 @@ void special_state::init_special()
{
/* set initialy ROM to be visible on first bank */
uint8_t *RAM = m_region_maincpu->base();
memset(RAM,0x0000,0x3000); // make first page empty by default
memset(RAM,0x0000,0x4000); // make first page empty by default
m_bank1->configure_entries(1, 2, RAM, 0x0000);
m_bank1->configure_entries(0, 2, RAM, 0xc000);
}
@ -109,15 +109,23 @@ void special_state::specialist_8255_portc_w(uint8_t data)
m_cassette->output(BIT(data, 7) ? 1 : -1);
m_dac->write(BIT(data, 5)); //beeper
m_bank1->set_entry(BIT(data, 4));
}
void special_state::specialistmx_8255_portc_w(uint8_t data)
{
m_specialist_8255_portc = data;
m_cassette->output(BIT(data, 7) ? 1 : -1);
m_dac->write(BIT(data, 5)); //beeper
}
void special_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
case TIMER_RESET:
m_bank1->set_entry(0);
break;
case TIMER_PIT8253_GATES:
m_pit->write_gate0(0);
m_pit->write_gate1(0);
@ -129,13 +137,6 @@ void special_state::device_timer(emu_timer &timer, device_timer_id id, int param
}
MACHINE_RESET_MEMBER(special_state,special)
{
timer_set(attotime::from_usec(10), TIMER_RESET);
m_bank1->set_entry(1);
}
/*
Specialist MX
*/