mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
apricot.c: cleaned up, fixed regression, back to error 08 now
This commit is contained in:
parent
1062e2bd39
commit
d36fed32fd
@ -38,9 +38,12 @@ public:
|
||||
m_pic(*this, "ic31"),
|
||||
m_pit(*this, "ic16"),
|
||||
m_z80sio(*this, "ic15"),
|
||||
m_fdc(*this, "ic68")
|
||||
,
|
||||
m_screen_buffer(*this, "screen_buffer"){ }
|
||||
m_fdc(*this, "ic68"),
|
||||
m_screen_buffer(*this, "screen_buffer"),
|
||||
m_video_mode(0),
|
||||
m_display_on(1),
|
||||
m_display_enabled(0)
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<ram_device> m_ram;
|
||||
@ -51,22 +54,27 @@ public:
|
||||
required_device<pit8253_device> m_pit;
|
||||
required_device<z80sio0_device> m_z80sio;
|
||||
required_device<wd2793_device> m_fdc;
|
||||
|
||||
required_shared_ptr<UINT16> m_screen_buffer;
|
||||
|
||||
DECLARE_READ8_MEMBER(apricot_sysctrl_r);
|
||||
DECLARE_WRITE8_MEMBER(apricot_sysctrl_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out1);
|
||||
DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out2);
|
||||
DECLARE_WRITE_LINE_MEMBER(apricot_wd2793_intrq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(apricot_wd2793_drq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(apricot_mc6845_de);
|
||||
DECLARE_WRITE_LINE_MEMBER(apricot_mc6845_de) { m_display_enabled = state; };
|
||||
|
||||
virtual void machine_start();
|
||||
|
||||
IRQ_CALLBACK_MEMBER( irq_callback ) { return m_pic->inta_r(); }
|
||||
|
||||
bool m_video_mode;
|
||||
bool m_display_on;
|
||||
bool m_display_enabled;
|
||||
required_shared_ptr<UINT16> m_screen_buffer;
|
||||
DECLARE_DRIVER_INIT(apricot);
|
||||
virtual void palette_init();
|
||||
|
||||
int m_display_enabled;
|
||||
|
||||
UINT32 screen_update_apricot(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(apricot_sio_irq_w);
|
||||
IRQ_CALLBACK_MEMBER(apricot_irq_ack);
|
||||
};
|
||||
|
||||
|
||||
@ -123,15 +131,12 @@ static const struct pit8253_interface apricot_pit8253_intf =
|
||||
}
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER(apricot_state::apricot_sio_irq_w)
|
||||
{
|
||||
m_pic->ir5_w(state);
|
||||
}
|
||||
|
||||
static Z80SIO_INTERFACE( apricot_z80sio_intf )
|
||||
{
|
||||
0, 0, 0, 0,
|
||||
0, 0,
|
||||
XTAL_4MHz / 16, XTAL_4MHz / 16,
|
||||
|
||||
// channel a
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -139,6 +144,7 @@ static Z80SIO_INTERFACE( apricot_z80sio_intf )
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
// channel b
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -146,19 +152,14 @@ static Z80SIO_INTERFACE( apricot_z80sio_intf )
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_DRIVER_LINE_MEMBER(apricot_state, apricot_sio_irq_w)
|
||||
DEVCB_DEVICE_LINE_MEMBER("ic31", pic8259_device, ir5_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
INTERRUPTS
|
||||
***************************************************************************/
|
||||
|
||||
IRQ_CALLBACK_MEMBER(apricot_state::apricot_irq_ack)
|
||||
{
|
||||
return m_pic->inta_r();
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
FLOPPY
|
||||
***************************************************************************/
|
||||
@ -192,7 +193,7 @@ UINT32 apricot_state::screen_update_apricot(screen_device &screen, bitmap_rgb32
|
||||
if (!m_display_on)
|
||||
m_crtc->screen_update( screen, bitmap, cliprect);
|
||||
else
|
||||
bitmap.fill(0, cliprect);
|
||||
bitmap.fill(RGB_BLACK, cliprect);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -200,7 +201,6 @@ UINT32 apricot_state::screen_update_apricot(screen_device &screen, bitmap_rgb32
|
||||
static MC6845_UPDATE_ROW( apricot_update_row )
|
||||
{
|
||||
apricot_state *state = device->machine().driver_data<apricot_state>();
|
||||
const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
|
||||
UINT8 *ram = state->m_ram->pointer();
|
||||
int i, x;
|
||||
|
||||
@ -222,7 +222,7 @@ static MC6845_UPDATE_ROW( apricot_update_row )
|
||||
{
|
||||
int color = fill ? 1 : BIT(data, x);
|
||||
if (BIT(code, 15)) color = !color; /* reverse? */
|
||||
bitmap.pix32(y, x + i*10) = palette[color ? 1 + BIT(code, 14) : 0];
|
||||
bitmap.pix32(y, x + i*10) = RGB_MONOCHROME_GREEN_HIGHLIGHT[color ? 1 + BIT(code, 14) : 0];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -233,12 +233,6 @@ static MC6845_UPDATE_ROW( apricot_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( apricot_state::apricot_mc6845_de )
|
||||
{
|
||||
m_display_enabled = state;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( apricot_mc6845_intf )
|
||||
{
|
||||
false,
|
||||
@ -255,23 +249,13 @@ static MC6845_INTERFACE( apricot_mc6845_intf )
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
DRIVER INIT
|
||||
MACHINE EMULATION
|
||||
***************************************************************************/
|
||||
|
||||
DRIVER_INIT_MEMBER(apricot_state,apricot)
|
||||
void apricot_state::machine_start()
|
||||
{
|
||||
address_space &prg = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
UINT8 *ram = m_ram->pointer();
|
||||
UINT32 ram_size = m_ram->size();
|
||||
|
||||
prg.unmap_readwrite(0x40000, 0xeffff);
|
||||
prg.install_ram(0x00000, ram_size - 1, ram);
|
||||
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(apricot_state::apricot_irq_ack),this));
|
||||
|
||||
m_video_mode = 0;
|
||||
m_display_on = 1;
|
||||
m_maincpu->space(AS_PROGRAM).install_ram(0x00000, m_ram->size() - 1, m_ram->pointer());
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(apricot_state::irq_callback), this));
|
||||
}
|
||||
|
||||
|
||||
@ -280,8 +264,8 @@ DRIVER_INIT_MEMBER(apricot_state,apricot)
|
||||
***************************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( apricot_mem, AS_PROGRAM, 16, apricot_state )
|
||||
AM_RANGE(0x00000, 0x3ffff) AM_RAMBANK("standard_ram")
|
||||
AM_RANGE(0x40000, 0xeffff) AM_RAMBANK("expansion_ram")
|
||||
// AM_RANGE(0x00000, 0x3ffff) AM_RAMBANK("standard_ram")
|
||||
// AM_RANGE(0x40000, 0xeffff) AM_RAMBANK("expansion_ram")
|
||||
AM_RANGE(0xf0000, 0xf0fff) AM_MIRROR(0x7000) AM_RAM AM_SHARE("screen_buffer")
|
||||
AM_RANGE(0xfc000, 0xfffff) AM_MIRROR(0x4000) AM_ROM AM_REGION("bootstrap", 0)
|
||||
ADDRESS_MAP_END
|
||||
@ -309,18 +293,6 @@ static INPUT_PORTS_START( apricot )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
PALETTE
|
||||
***************************************************************************/
|
||||
|
||||
void apricot_state::palette_init()
|
||||
{
|
||||
palette_set_color(machine(), 0, MAKE_RGB(0x00, 0x00, 0x00)); /* black */
|
||||
palette_set_color(machine(), 1, MAKE_RGB(0x00, 0x7f, 0x00)); /* low intensity */
|
||||
palette_set_color(machine(), 2, MAKE_RGB(0x00, 0xff, 0x00)); /* high intensitiy */
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
SOUND INTERFACE
|
||||
**************************************************************************/
|
||||
@ -380,7 +352,6 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 800-1, 0, 400-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(72)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(apricot_state, screen_update_apricot)
|
||||
MCFG_PALETTE_LENGTH(3)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -396,9 +367,9 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
|
||||
/* Devices */
|
||||
MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10, apricot_mc6845_intf)
|
||||
MCFG_I8255A_ADD("ic17", apricot_i8255a_intf)
|
||||
MCFG_PIC8259_ADD("ic31", INPUTLINE("maincpu",0), VCC, NULL)
|
||||
MCFG_PIC8259_ADD("ic31", INPUTLINE("maincpu", 0), VCC, NULL)
|
||||
MCFG_PIT8253_ADD("ic16", apricot_pit8253_intf)
|
||||
MCFG_Z80SIO0_ADD("ic15", 0, apricot_z80sio_intf)
|
||||
MCFG_Z80SIO0_ADD("ic15", XTAL_15MHz / 6, apricot_z80sio_intf)
|
||||
|
||||
/* floppy */
|
||||
MCFG_WD2793_ADD("ic68", apricot_wd17xx_intf)
|
||||
@ -430,6 +401,6 @@ ROM_END
|
||||
GAME DRIVERS
|
||||
***************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1983, apricot, 0, 0, apricot, apricot, apricot_state, apricot, "ACT", "Apricot PC", GAME_NOT_WORKING )
|
||||
COMP( 1984, apricotxi, apricot, 0, apricotxi, apricot, apricot_state, apricot, "ACT", "Apricot Xi", GAME_NOT_WORKING )
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1983, apricot, 0, 0, apricot, apricot, driver_device, 0, "ACT", "Apricot PC", GAME_NOT_WORKING )
|
||||
COMP( 1984, apricotxi, apricot, 0, apricotxi, apricot, driver_device, 0, "ACT", "Apricot Xi", GAME_NOT_WORKING )
|
||||
|
Loading…
Reference in New Issue
Block a user