mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
special.cpp a bit less hacky banking (nw)
This commit is contained in:
parent
c0ad2afea4
commit
009f1364e1
@ -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));
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user