mirror of
https://github.com/holub/mame
synced 2025-10-08 09:30:17 +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_pic(*this, "ic31"),
|
||||||
m_pit(*this, "ic16"),
|
m_pit(*this, "ic16"),
|
||||||
m_z80sio(*this, "ic15"),
|
m_z80sio(*this, "ic15"),
|
||||||
m_fdc(*this, "ic68")
|
m_fdc(*this, "ic68"),
|
||||||
,
|
m_screen_buffer(*this, "screen_buffer"),
|
||||||
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<cpu_device> m_maincpu;
|
||||||
required_device<ram_device> m_ram;
|
required_device<ram_device> m_ram;
|
||||||
@ -51,22 +54,27 @@ public:
|
|||||||
required_device<pit8253_device> m_pit;
|
required_device<pit8253_device> m_pit;
|
||||||
required_device<z80sio0_device> m_z80sio;
|
required_device<z80sio0_device> m_z80sio;
|
||||||
required_device<wd2793_device> m_fdc;
|
required_device<wd2793_device> m_fdc;
|
||||||
|
|
||||||
|
required_shared_ptr<UINT16> m_screen_buffer;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(apricot_sysctrl_r);
|
DECLARE_READ8_MEMBER(apricot_sysctrl_r);
|
||||||
DECLARE_WRITE8_MEMBER(apricot_sysctrl_w);
|
DECLARE_WRITE8_MEMBER(apricot_sysctrl_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out1);
|
DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out1);
|
||||||
DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out2);
|
DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out2);
|
||||||
DECLARE_WRITE_LINE_MEMBER(apricot_wd2793_intrq_w);
|
DECLARE_WRITE_LINE_MEMBER(apricot_wd2793_intrq_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(apricot_wd2793_drq_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_video_mode;
|
||||||
bool m_display_on;
|
bool m_display_on;
|
||||||
bool m_display_enabled;
|
|
||||||
required_shared_ptr<UINT16> m_screen_buffer;
|
int m_display_enabled;
|
||||||
DECLARE_DRIVER_INIT(apricot);
|
|
||||||
virtual void palette_init();
|
|
||||||
UINT32 screen_update_apricot(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
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 )
|
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,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -139,6 +144,7 @@ static Z80SIO_INTERFACE( apricot_z80sio_intf )
|
|||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
|
|
||||||
|
// channel b
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -146,19 +152,14 @@ static Z80SIO_INTERFACE( apricot_z80sio_intf )
|
|||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
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
|
FLOPPY
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
@ -192,7 +193,7 @@ UINT32 apricot_state::screen_update_apricot(screen_device &screen, bitmap_rgb32
|
|||||||
if (!m_display_on)
|
if (!m_display_on)
|
||||||
m_crtc->screen_update( screen, bitmap, cliprect);
|
m_crtc->screen_update( screen, bitmap, cliprect);
|
||||||
else
|
else
|
||||||
bitmap.fill(0, cliprect);
|
bitmap.fill(RGB_BLACK, cliprect);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -200,7 +201,6 @@ UINT32 apricot_state::screen_update_apricot(screen_device &screen, bitmap_rgb32
|
|||||||
static MC6845_UPDATE_ROW( apricot_update_row )
|
static MC6845_UPDATE_ROW( apricot_update_row )
|
||||||
{
|
{
|
||||||
apricot_state *state = device->machine().driver_data<apricot_state>();
|
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();
|
UINT8 *ram = state->m_ram->pointer();
|
||||||
int i, x;
|
int i, x;
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ static MC6845_UPDATE_ROW( apricot_update_row )
|
|||||||
{
|
{
|
||||||
int color = fill ? 1 : BIT(data, x);
|
int color = fill ? 1 : BIT(data, x);
|
||||||
if (BIT(code, 15)) color = !color; /* reverse? */
|
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 )
|
static MC6845_INTERFACE( apricot_mc6845_intf )
|
||||||
{
|
{
|
||||||
false,
|
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);
|
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));
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -280,8 +264,8 @@ DRIVER_INIT_MEMBER(apricot_state,apricot)
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static ADDRESS_MAP_START( apricot_mem, AS_PROGRAM, 16, apricot_state )
|
static ADDRESS_MAP_START( apricot_mem, AS_PROGRAM, 16, apricot_state )
|
||||||
AM_RANGE(0x00000, 0x3ffff) AM_RAMBANK("standard_ram")
|
// AM_RANGE(0x00000, 0x3ffff) AM_RAMBANK("standard_ram")
|
||||||
AM_RANGE(0x40000, 0xeffff) AM_RAMBANK("expansion_ram")
|
// AM_RANGE(0x40000, 0xeffff) AM_RAMBANK("expansion_ram")
|
||||||
AM_RANGE(0xf0000, 0xf0fff) AM_MIRROR(0x7000) AM_RAM AM_SHARE("screen_buffer")
|
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)
|
AM_RANGE(0xfc000, 0xfffff) AM_MIRROR(0x4000) AM_ROM AM_REGION("bootstrap", 0)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
@ -309,18 +293,6 @@ static INPUT_PORTS_START( apricot )
|
|||||||
INPUT_PORTS_END
|
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
|
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_VISIBLE_AREA(0, 800-1, 0, 400-1)
|
||||||
MCFG_SCREEN_REFRESH_RATE(72)
|
MCFG_SCREEN_REFRESH_RATE(72)
|
||||||
MCFG_SCREEN_UPDATE_DRIVER(apricot_state, screen_update_apricot)
|
MCFG_SCREEN_UPDATE_DRIVER(apricot_state, screen_update_apricot)
|
||||||
MCFG_PALETTE_LENGTH(3)
|
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
@ -398,7 +369,7 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
|
|||||||
MCFG_I8255A_ADD("ic17", apricot_i8255a_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_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 */
|
/* floppy */
|
||||||
MCFG_WD2793_ADD("ic68", apricot_wd17xx_intf)
|
MCFG_WD2793_ADD("ic68", apricot_wd17xx_intf)
|
||||||
@ -430,6 +401,6 @@ ROM_END
|
|||||||
GAME DRIVERS
|
GAME DRIVERS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||||
COMP( 1983, apricot, 0, 0, apricot, apricot, apricot_state, apricot, "ACT", "Apricot PC", GAME_NOT_WORKING )
|
COMP( 1983, apricot, 0, 0, apricot, apricot, driver_device, 0, "ACT", "Apricot PC", GAME_NOT_WORKING )
|
||||||
COMP( 1984, apricotxi, apricot, 0, apricotxi, apricot, apricot_state, apricot, "ACT", "Apricot Xi", 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