(MESS) apollo: Cleaned up PIC8259 usage. [R. Belmont]

This commit is contained in:
R. Belmont 2014-03-03 16:11:38 +00:00
parent f46c71c679
commit 5832fc70a3
3 changed files with 45 additions and 105 deletions

View File

@ -745,8 +745,8 @@ static ADDRESS_MAP_START(dn3500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8(APOLLO_PIC1_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8(APOLLO_PIC2_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8(master_req_register_r, master_req_register_w, 0xffffffff)
@ -796,8 +796,8 @@ static ADDRESS_MAP_START(dsp3500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8(APOLLO_PIC1_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8(APOLLO_PIC2_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8(master_req_register_r, master_req_register_w, 0xffffffff)
@ -834,8 +834,8 @@ static ADDRESS_MAP_START(dn3000_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x009100, 0x0091ff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
AM_RANGE(0x009200, 0x0092ff) AM_READWRITE8(apollo_dma_page_register_r, apollo_dma_page_register_w, 0xffffffff )
AM_RANGE(0x009300, 0x0093ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
AM_RANGE(0x009400, 0x0094ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
AM_RANGE(0x009500, 0x0095ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
AM_RANGE(0x009400, 0x0094ff) AM_DEVREADWRITE8(APOLLO_PIC1_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x009500, 0x0095ff) AM_DEVREADWRITE8(APOLLO_PIC2_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x009600, 0x0096ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
AM_RANGE(0x050000, 0x050007) AM_DEVREADWRITE8_LEGACY(APOLLO_CTAPE_TAG, sc499_r, sc499_w, 0xffffffff)
@ -874,8 +874,8 @@ static ADDRESS_MAP_START(dsp3000_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x009100, 0x0091ff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
AM_RANGE(0x009200, 0x0092ff) AM_READWRITE8(apollo_dma_page_register_r, apollo_dma_page_register_w, 0xffffffff )
AM_RANGE(0x009300, 0x0093ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
AM_RANGE(0x009400, 0x0094ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
AM_RANGE(0x009500, 0x0095ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
AM_RANGE(0x009400, 0x0094ff) AM_DEVREADWRITE8(APOLLO_PIC1_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x009500, 0x0095ff) AM_DEVREADWRITE8(APOLLO_PIC2_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x009600, 0x0096ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
@ -910,8 +910,8 @@ static ADDRESS_MAP_START(dn5500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8(APOLLO_PIC1_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8(APOLLO_PIC2_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
AM_RANGE(0x011400, 0x0114ff) AM_READWRITE8(dn5500_memory_present_register_r, dn5500_memory_present_register_w, 0xffffffff )
@ -964,8 +964,8 @@ static ADDRESS_MAP_START(dsp5500_map, AS_PROGRAM, 32, apollo_state )
AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8(APOLLO_PIC1_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8(APOLLO_PIC2_TAG, pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
AM_RANGE(0x011400, 0x0114ff) AM_READWRITE8(dn5500_memory_present_register_r, dn5500_memory_present_register_w, 0xffffffff )
@ -1365,3 +1365,4 @@ COMP( 1988, dn3000_19i, dn3500, 0, dn3000_19i, dn3500, apollo_state, dn3000
COMP( 1991, dn5500, dn3500, 0, dn5500_15i, dn3500, apollo_state, dn5500, "Apollo", "Apollo DN5500", GAME_NOT_WORKING )
COMP( 1991, dsp5500, dn3500, 0, dsp5500, dsp3500, apollo_state,dsp5500,"Apollo", "Apollo DSP5500", GAME_NOT_WORKING )
COMP( 1991, dn5500_19i, dn3500, 0, dn5500_19i, dn3500, apollo_state, dn5500, "Apollo", "Apollo DN5500 19\" Monochrome", GAME_NOT_WORKING )

View File

@ -234,6 +234,8 @@ public:
DECLARE_WRITE_LINE_MEMBER( apollo_ptm_timer_tick );
DECLARE_READ8_MEMBER( apollo_pic8259_get_slave_ack );
void apollo_pic_set_irq_line(int irq, int state);
private:
UINT32 ptm_counter;
UINT8 sio_output_data;
@ -288,27 +290,6 @@ UINT16 apollo_csr_get_control_register(void);
UINT16 apollo_csr_get_status_register(void);
void apollo_csr_set_status_register(UINT16 mask, UINT16 data);
/*----------- machine/apollo_dma.c -----------*/
/*----------- machine/apollo_pic.c -----------*/
DECLARE_WRITE8_DEVICE_HANDLER(apollo_pic8259_master_w ) ;
DECLARE_READ8_DEVICE_HANDLER( apollo_pic8259_master_r );
DECLARE_WRITE8_DEVICE_HANDLER(apollo_pic8259_slave_w );
DECLARE_READ8_DEVICE_HANDLER( apollo_pic8259_slave_r );
/*----------- machine/apollo_rtc.c -----------*/
/*----------- machine/apollo_fdc.c -----------*/
/*----------- machine/apollo_eth.c -----------*/
// ethernet transmitter

View File

@ -597,76 +597,34 @@ static I8237_INTERFACE( apollo_dma8237_2_config )
#undef VERBOSE
#define VERBOSE 0
INLINE pic8259_device *get_pic8259_master(device_t *device) {
return device->machine().driver_data<apollo_state>()->m_pic8259_master;
}
INLINE pic8259_device *get_pic8259_slave(device_t *device) {
return device->machine().driver_data<apollo_state>()->m_pic8259_slave;
}
/*-------------------------------------------------
Interrupt Controller 8259 PIC #1 at 0x9400/0x11000
-------------------------------------------------*/
WRITE8_DEVICE_HANDLER(apollo_pic8259_master_w ) {
DLOG1(("writing %s at offset %X = %02x", device->tag(), offset, data));
downcast<pic8259_device *>(device)->write(space, offset, data);
}
READ8_DEVICE_HANDLER( apollo_pic8259_master_r ) {
UINT8 data = downcast<pic8259_device *>(device)->read(space, offset);
DLOG1(("reading %s at offset %X = %02x", device->tag(), offset, data));
return data;
}
/*-------------------------------------------------
Interrupt Controller 8259 PIC #2 at 0x9500/0x11100
-------------------------------------------------*/
WRITE8_DEVICE_HANDLER(apollo_pic8259_slave_w ) {
DLOG1(("writing %s at offset %X = %02x", device->tag(), offset, data));
downcast<pic8259_device *>(device)->write(space, offset, data);
}
READ8_DEVICE_HANDLER( apollo_pic8259_slave_r ) {
UINT8 data = downcast<pic8259_device *>(device)->read(space, offset);
DLOG1(("reading %s at offset %X = %02x", device->tag(), offset, data));
return data;
}
static void apollo_pic_set_irq_line(device_t *device, int irq, int state) {
// don't log PTM interrupts
if (irq != APOLLO_IRQ_PTM) {
DLOG1(("apollo_pic_set_irq_line: irq=%d state=%d", irq, state));
}
void apollo_state::apollo_pic_set_irq_line(int irq, int state)
{
switch (irq) {
case 0: get_pic8259_master(device)->ir0_w(state); break;
case 1: get_pic8259_master(device)->ir1_w(state); break;
case 2: get_pic8259_master(device)->ir2_w(state); break;
case 3: get_pic8259_master(device)->ir3_w(state); break;
case 4: get_pic8259_master(device)->ir4_w(state); break;
case 5: get_pic8259_master(device)->ir5_w(state); break;
case 6: get_pic8259_master(device)->ir6_w(state); break;
case 7: get_pic8259_master(device)->ir7_w(state); break;
case 0: m_pic8259_master->ir0_w(state); break;
case 1: m_pic8259_master->ir1_w(state); break;
case 2: m_pic8259_master->ir2_w(state); break;
case 3: m_pic8259_master->ir3_w(state); break;
case 4: m_pic8259_master->ir4_w(state); break;
case 5: m_pic8259_master->ir5_w(state); break;
case 6: m_pic8259_master->ir6_w(state); break;
case 7: m_pic8259_master->ir7_w(state); break;
case 8: get_pic8259_slave(device)->ir0_w(state); break;
case 9: get_pic8259_slave(device)->ir1_w(state); break;
case 10: get_pic8259_slave(device)->ir2_w(state); break;
case 11: get_pic8259_slave(device)->ir3_w(state); break;
case 12: get_pic8259_slave(device)->ir4_w(state); break;
case 13: get_pic8259_slave(device)->ir5_w(state); break;
case 14: get_pic8259_slave(device)->ir6_w(state); break;
case 15: get_pic8259_slave(device)->ir7_w(state); break;
case 8: m_pic8259_slave->ir0_w(state); break;
case 9: m_pic8259_slave->ir1_w(state); break;
case 10: m_pic8259_slave->ir2_w(state); break;
case 11: m_pic8259_slave->ir3_w(state); break;
case 12: m_pic8259_slave->ir4_w(state); break;
case 13: m_pic8259_slave->ir5_w(state); break;
case 14: m_pic8259_slave->ir6_w(state); break;
case 15: m_pic8259_slave->ir7_w(state); break;
}
}
IRQ_CALLBACK_MEMBER(apollo_state::apollo_pic_acknowledge)
{
UINT32 vector = get_pic8259_master(&device)->acknowledge();
UINT32 vector = m_pic8259_master->acknowledge();
if ((vector & 0x0f) == APOLLO_IRQ_PIC_SLAVE) {
vector = get_pic8259_slave(&device)->acknowledge();
vector = m_pic8259_slave->acknowledge();
}
// don't log ptm interrupts
@ -719,7 +677,7 @@ WRITE_LINE_MEMBER( apollo_state::apollo_pic8259_slave_set_int_line ) {
device_t *device = m_pic8259_slave;
DLOG1(("apollo_pic8259_slave_set_int_line: %x", state));
interrupt_line = state;
apollo_pic_set_irq_line(device, 3, state);
apollo_pic_set_irq_line(3, state);
}
}
@ -749,7 +707,7 @@ WRITE_LINE_MEMBER(apollo_state::apollo_ptm_timer_tick)
WRITE_LINE_MEMBER(apollo_state::apollo_ptm_irq_function)
{
apollo_pic_set_irq_line(this, APOLLO_IRQ_PTM, state);
apollo_pic_set_irq_line(APOLLO_IRQ_PTM, state);
}
// Timer 1's input is a 250-kHz (4-microsecond period) signal.
@ -806,7 +764,7 @@ static TIMER_CALLBACK( apollo_rtc_timer )
if ((state->apollo_rtc_r(space, 0x0c) & 0x80))
{
//SLOG2(("apollo_rtc_timer - set_irq_line %d", APOLLO_IRQ_RTC));
apollo_pic_set_irq_line(&space.device(), APOLLO_IRQ_RTC, 1);
state->apollo_pic_set_irq_line(APOLLO_IRQ_RTC, 1);
}
}
@ -816,14 +774,14 @@ static TIMER_CALLBACK( apollo_rtc_timer )
WRITE_LINE_MEMBER(apollo_state::sio_irq_handler)
{
apollo_pic_set_irq_line(this, APOLLO_IRQ_SIO1, state);
apollo_pic_set_irq_line(APOLLO_IRQ_SIO1, state);
}
WRITE8_MEMBER(apollo_state::sio_output)
{
if ((data & 0x80) != (sio_output_data & 0x80))
{
apollo_pic_set_irq_line(this, APOLLO_IRQ_DIAG, (data & 0x80) ? 1 : 0);
apollo_pic_set_irq_line(APOLLO_IRQ_DIAG, (data & 0x80) ? 1 : 0);
sio_output_data = data;
}
}
@ -840,7 +798,7 @@ WRITE8_MEMBER(apollo_state::sio_output)
WRITE_LINE_MEMBER(apollo_state::sio2_irq_handler)
{
apollo_pic_set_irq_line(this, APOLLO_IRQ_SIO2, state);
apollo_pic_set_irq_line(APOLLO_IRQ_SIO2, state);
}
//##########################################################################
@ -857,7 +815,7 @@ SLOT_INTERFACE_END
void apollo_state::fdc_interrupt(bool state) {
apollo_pic_set_irq_line( m_maincpu, APOLLO_IRQ_FDC, state ? ASSERT_LINE : CLEAR_LINE);
apollo_pic_set_irq_line(APOLLO_IRQ_FDC, state ? ASSERT_LINE : CLEAR_LINE);
}
void apollo_state::fdc_dma_drq(bool state) {
@ -870,7 +828,7 @@ void apollo_state::fdc_dma_drq(bool state) {
static void apollo_3c505_set_irq(device_t *device, int state) {
// DLOG2(("apollo_3c505_interrupt: state=%x", state ));
apollo_pic_set_irq_line(device->machine().driver_data<apollo_state>()->m_maincpu, APOLLO_IRQ_ETH1, state);
device->machine().driver_data<apollo_state>()->apollo_pic_set_irq_line(APOLLO_IRQ_ETH1, state);
}
static int apollo_3c505_tx_data(device_t *device,
@ -914,7 +872,7 @@ static THREECOM3C505_INTERFACE(apollo_3c505_config) = {
static void apollo_wdc_set_irq(const running_machine *machine, int state) {
// FIXME:
// MLOG2(("apollo_wdc_set_irq: state=%x", state ));
apollo_pic_set_irq_line(machine->driver_data<apollo_state>()->m_maincpu, APOLLO_IRQ_WIN1, state);
machine->driver_data<apollo_state>()->apollo_pic_set_irq_line(APOLLO_IRQ_WIN1, state);
}
static const omti8621_config apollo_wdc_config = {
@ -927,7 +885,7 @@ static const omti8621_config apollo_wdc_config = {
static void apollo_ctape_set_irq(const device_t *device, int state) {
DLOG2(("apollo_ctape_set_irq: state=%x", state ));
apollo_pic_set_irq_line(device->machine().driver_data<apollo_state>()->m_maincpu, APOLLO_IRQ_CTAPE, state);
device->machine().driver_data<apollo_state>()->apollo_pic_set_irq_line(APOLLO_IRQ_CTAPE, state);
}