mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +03:00
(MESS) lisa: Removed runtime tagmap lookups. (nw)
This commit is contained in:
parent
9fde608c12
commit
fc452e743b
@ -29,20 +29,20 @@ static ADDRESS_MAP_START(lisa_map, AS_PROGRAM, 16, lisa_state )
|
|||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( lisa_cop_io_map, AS_IO, 8, lisa_state )
|
static ADDRESS_MAP_START( lisa_cop_io_map, AS_IO, 8, lisa_state )
|
||||||
AM_RANGE(COP400_PORT_L, COP400_PORT_L)
|
AM_RANGE(COP400_PORT_L, COP400_PORT_L) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_G, COP400_PORT_G)
|
AM_RANGE(COP400_PORT_G, COP400_PORT_G) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_D, COP400_PORT_D)
|
AM_RANGE(COP400_PORT_D, COP400_PORT_D) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_IN, COP400_PORT_IN)
|
AM_RANGE(COP400_PORT_IN, COP400_PORT_IN) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_SK, COP400_PORT_SK) AM_WRITENOP
|
AM_RANGE(COP400_PORT_SK, COP400_PORT_SK) AM_WRITENOP
|
||||||
AM_RANGE(COP400_PORT_SIO, COP400_PORT_SIO) AM_NOP
|
AM_RANGE(COP400_PORT_SIO, COP400_PORT_SIO) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_CKO, COP400_PORT_CKO) AM_READNOP
|
AM_RANGE(COP400_PORT_CKO, COP400_PORT_CKO) AM_READNOP
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( kb_cop_io_map, AS_IO, 8, lisa_state )
|
static ADDRESS_MAP_START( kb_cop_io_map, AS_IO, 8, lisa_state )
|
||||||
AM_RANGE(COP400_PORT_L, COP400_PORT_L)
|
AM_RANGE(COP400_PORT_L, COP400_PORT_L) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_G, COP400_PORT_G)
|
AM_RANGE(COP400_PORT_G, COP400_PORT_G) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_D, COP400_PORT_D)
|
AM_RANGE(COP400_PORT_D, COP400_PORT_D) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_IN, COP400_PORT_IN)
|
AM_RANGE(COP400_PORT_IN, COP400_PORT_IN) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_SK, COP400_PORT_SK) AM_WRITENOP
|
AM_RANGE(COP400_PORT_SK, COP400_PORT_SK) AM_WRITENOP
|
||||||
AM_RANGE(COP400_PORT_SIO, COP400_PORT_SIO) AM_NOP
|
AM_RANGE(COP400_PORT_SIO, COP400_PORT_SIO) AM_NOP
|
||||||
AM_RANGE(COP400_PORT_CKO, COP400_PORT_CKO) AM_READNOP
|
AM_RANGE(COP400_PORT_CKO, COP400_PORT_CKO) AM_READNOP
|
||||||
|
@ -9,8 +9,14 @@
|
|||||||
#ifndef LISA_H_
|
#ifndef LISA_H_
|
||||||
#define LISA_H_
|
#define LISA_H_
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
#include "machine/6522via.h"
|
#include "machine/6522via.h"
|
||||||
#include "machine/8530scc.h"
|
#include "machine/8530scc.h"
|
||||||
|
#include "machine/6522via.h"
|
||||||
|
#include "machine/applefdc.h"
|
||||||
|
#include "devices/sonydriv.h"
|
||||||
|
#include "cpu/m68000/m68000.h"
|
||||||
|
#include "sound/speaker.h"
|
||||||
|
|
||||||
#define COP421_TAG "u9f"
|
#define COP421_TAG "u9f"
|
||||||
#define KB_COP421_TAG "kbcop"
|
#define KB_COP421_TAG "kbcop"
|
||||||
@ -95,15 +101,46 @@ public:
|
|||||||
lisa_state(const machine_config &mconfig, device_type type, const char *tag)
|
lisa_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_via0(*this, "via6522_0"),
|
||||||
|
m_via1(*this, "via6522_1"),
|
||||||
|
m_fdc(*this, "fdc"),
|
||||||
m_scc(*this, "scc"),
|
m_scc(*this, "scc"),
|
||||||
|
m_speaker(*this, SPEAKER_TAG),
|
||||||
m_fdc_rom(*this,"fdc_rom"),
|
m_fdc_rom(*this,"fdc_rom"),
|
||||||
m_fdc_ram(*this,"fdc_ram") { }
|
m_fdc_ram(*this,"fdc_ram"),
|
||||||
|
m_io_line0(*this, "LINE0"),
|
||||||
|
m_io_line1(*this, "LINE1"),
|
||||||
|
m_io_line2(*this, "LINE2"),
|
||||||
|
m_io_line3(*this, "LINE3"),
|
||||||
|
m_io_line4(*this, "LINE4"),
|
||||||
|
m_io_line5(*this, "LINE5"),
|
||||||
|
m_io_line6(*this, "LINE6"),
|
||||||
|
m_io_line7(*this, "LINE7"),
|
||||||
|
m_io_mouse_x(*this, "MOUSE_X"),
|
||||||
|
m_io_mouse_y(*this, "MOUSE_Y")
|
||||||
|
{ }
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<legacy_cpu_device> m_maincpu;
|
||||||
|
required_device<via6522_device> m_via0;
|
||||||
|
required_device<via6522_device> m_via1;
|
||||||
|
optional_device<applefdc_base_device> m_fdc;
|
||||||
required_device<scc8530_t> m_scc;
|
required_device<scc8530_t> m_scc;
|
||||||
|
required_device<speaker_sound_device> m_speaker;
|
||||||
|
|
||||||
required_shared_ptr<UINT8> m_fdc_rom;
|
required_shared_ptr<UINT8> m_fdc_rom;
|
||||||
required_shared_ptr<UINT8> m_fdc_ram;
|
required_shared_ptr<UINT8> m_fdc_ram;
|
||||||
|
|
||||||
|
required_ioport m_io_line0;
|
||||||
|
required_ioport m_io_line1;
|
||||||
|
required_ioport m_io_line2;
|
||||||
|
required_ioport m_io_line3;
|
||||||
|
required_ioport m_io_line4;
|
||||||
|
required_ioport m_io_line5;
|
||||||
|
required_ioport m_io_line6;
|
||||||
|
required_ioport m_io_line7;
|
||||||
|
required_ioport m_io_mouse_x;
|
||||||
|
required_ioport m_io_mouse_y;
|
||||||
|
|
||||||
UINT8 *m_ram_ptr;
|
UINT8 *m_ram_ptr;
|
||||||
UINT8 *m_rom_ptr;
|
UINT8 *m_rom_ptr;
|
||||||
UINT8 *m_videoROM_ptr;
|
UINT8 *m_videoROM_ptr;
|
||||||
@ -174,6 +211,20 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(COPS_via_out_b);
|
DECLARE_WRITE8_MEMBER(COPS_via_out_b);
|
||||||
DECLARE_WRITE8_MEMBER(COPS_via_out_cb2);
|
DECLARE_WRITE8_MEMBER(COPS_via_out_cb2);
|
||||||
DECLARE_READ8_MEMBER(parallel_via_in_b);
|
DECLARE_READ8_MEMBER(parallel_via_in_b);
|
||||||
|
|
||||||
|
void field_interrupts();
|
||||||
|
void set_parity_error_pending(int value);
|
||||||
|
void set_VTIR(int value);
|
||||||
|
void cpu_board_control_access(offs_t offset);
|
||||||
|
void init_COPS();
|
||||||
|
void reset_COPS();
|
||||||
|
void lisa_fdc_ttl_glue_access(offs_t offset);
|
||||||
|
void COPS_send_data_if_possible();
|
||||||
|
void COPS_queue_data(const UINT8 *data, int len);
|
||||||
|
void COPS_via_irq_func(int val);
|
||||||
|
void scan_keyboard();
|
||||||
|
void unplug_keyboard();
|
||||||
|
void plug_keyboard();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,13 +36,7 @@
|
|||||||
Raphael Nabet, 2000-2003
|
Raphael Nabet, 2000-2003
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "includes/lisa.h"
|
#include "includes/lisa.h"
|
||||||
#include "machine/6522via.h"
|
|
||||||
#include "machine/applefdc.h"
|
|
||||||
#include "devices/sonydriv.h"
|
|
||||||
#include "cpu/m68000/m68000.h"
|
|
||||||
#include "sound/speaker.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -91,9 +85,6 @@ the drive type (TWIGGY or 3.5'')) */
|
|||||||
a hard disk
|
a hard disk
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void COPS_via_irq_func(device_t *device, int val);
|
|
||||||
|
|
||||||
|
|
||||||
const via6522_interface lisa_via6522_0_intf =
|
const via6522_interface lisa_via6522_0_intf =
|
||||||
{
|
{
|
||||||
/* COPS via */
|
/* COPS via */
|
||||||
@ -103,7 +94,7 @@ const via6522_interface lisa_via6522_0_intf =
|
|||||||
DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_a), DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_b),
|
DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_a), DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_b),
|
||||||
DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_ca2), DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_cb2),
|
DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_ca2), DEVCB_DRIVER_MEMBER(lisa_state,COPS_via_out_cb2),
|
||||||
DEVCB_NULL, DEVCB_NULL,
|
DEVCB_NULL, DEVCB_NULL,
|
||||||
DEVCB_LINE(COPS_via_irq_func),
|
DEVCB_DRIVER_LINE_MEMBER(lisa_state,COPS_via_irq_func)
|
||||||
};
|
};
|
||||||
|
|
||||||
const via6522_interface lisa_via6522_1_intf =
|
const via6522_interface lisa_via6522_1_intf =
|
||||||
@ -114,7 +105,7 @@ const via6522_interface lisa_via6522_1_intf =
|
|||||||
DEVCB_NULL, DEVCB_NULL,
|
DEVCB_NULL, DEVCB_NULL,
|
||||||
DEVCB_NULL, DEVCB_NULL,
|
DEVCB_NULL, DEVCB_NULL,
|
||||||
DEVCB_NULL, DEVCB_NULL,
|
DEVCB_NULL, DEVCB_NULL,
|
||||||
DEVCB_NULL, DEVCB_NULL,
|
DEVCB_NULL, DEVCB_NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -149,75 +140,72 @@ enum lisa_model_t
|
|||||||
Interrupt handling
|
Interrupt handling
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void lisa_field_interrupts(running_machine &machine)
|
void lisa_state::field_interrupts()
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
if (m_parity_error_pending)
|
||||||
if (state->m_parity_error_pending)
|
|
||||||
return; /* don't touch anything... */
|
return; /* don't touch anything... */
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (RSIR)
|
if (RSIR)
|
||||||
// serial interrupt
|
// serial interrupt
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_6, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_6, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
else if (int0)
|
else if (int0)
|
||||||
// external interrupt
|
// external interrupt
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_5, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_5, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
else if (int1)
|
else if (int1)
|
||||||
// external interrupt
|
// external interrupt
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_4, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_4, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
else if (int2)
|
else if (int2)
|
||||||
// external interrupt
|
// external interrupt
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_3, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_3, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if (state->m_KBIR)
|
if (m_KBIR)
|
||||||
/* COPS VIA interrupt */
|
/* COPS VIA interrupt */
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_2, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_2, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
else if (state->m_FDIR || state->m_VTIR)
|
else if (m_FDIR || m_VTIR)
|
||||||
/* floppy disk or VBl */
|
/* floppy disk or VBl */
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_1, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_1, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
else
|
else
|
||||||
/* clear all interrupts */
|
/* clear all interrupts */
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_1, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_1, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_parity_error_pending(running_machine &machine, int value)
|
void lisa_state::set_parity_error_pending(int value)
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
|
||||||
#if 1
|
#if 1
|
||||||
/* does not work well due to bugs in 68k cores */
|
/* does not work well due to bugs in 68k cores */
|
||||||
state->m_parity_error_pending = value;
|
m_parity_error_pending = value;
|
||||||
if (state->m_parity_error_pending)
|
if (m_parity_error_pending)
|
||||||
{
|
{
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
machine.device("maincpu")->execute().set_input_line(M68K_IRQ_7, CLEAR_LINE);
|
m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* work-around... */
|
/* work-around... */
|
||||||
if ((! state->m_parity_error_pending) && value)
|
if ((! m_parity_error_pending) && value)
|
||||||
{
|
{
|
||||||
state->m_parity_error_pending = 1;
|
m_parity_error_pending = 1;
|
||||||
machine.device("maincpu")->execute().set_input_line_and_vector(M68K_IRQ_7, PULSE_LINE, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_and_vector(M68K_IRQ_7, PULSE_LINE, M68K_INT_ACK_AUTOVECTOR);
|
||||||
}
|
}
|
||||||
else if (state->m_parity_error_pending && (! value))
|
else if (m_parity_error_pending && (! value))
|
||||||
{
|
{
|
||||||
state->m_parity_error_pending = 0;
|
m_parity_error_pending = 0;
|
||||||
lisa_field_interrupts(machine);
|
field_interrupts();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE void set_VTIR(running_machine &machine, int value)
|
void lisa_state::set_VTIR(int value)
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
if (m_VTIR != value)
|
||||||
if (state->m_VTIR != value)
|
|
||||||
{
|
{
|
||||||
state->m_VTIR = value;
|
m_VTIR = value;
|
||||||
if (state->m_VTIR==1)
|
if (m_VTIR==1)
|
||||||
lisa_field_interrupts(machine);
|
field_interrupts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,40 +215,37 @@ INLINE void set_VTIR(running_machine &machine, int value)
|
|||||||
keyboard interface (COPS simulation; our COPS CPU core is too broken and too esoteric to emulate this correctly, I tried)
|
keyboard interface (COPS simulation; our COPS CPU core is too broken and too esoteric to emulate this correctly, I tried)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
INLINE void COPS_send_data_if_possible(running_machine &machine)
|
void lisa_state::COPS_send_data_if_possible()
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||||
via6522_device *via_0 = machine.device<via6522_device>("via6522_0");
|
|
||||||
address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
|
|
||||||
|
|
||||||
if ((! state->m_hold_COPS_data) && state->m_fifo_size && (! state->m_COPS_Ready))
|
if ((! m_hold_COPS_data) && m_fifo_size && (! m_COPS_Ready))
|
||||||
{
|
{
|
||||||
// printf("COPsim: sending %02x to VIA\n", state->m_fifo_data[state->m_fifo_head]);
|
// printf("COPsim: sending %02x to VIA\n", m_fifo_data[m_fifo_head]);
|
||||||
|
|
||||||
via_0->write_porta(space, 0, state->m_fifo_data[state->m_fifo_head]); /* output data */
|
m_via0->write_porta(space, 0, m_fifo_data[m_fifo_head]); /* output data */
|
||||||
if (state->m_fifo_head == state->m_mouse_data_offset)
|
if (m_fifo_head == m_mouse_data_offset)
|
||||||
state->m_mouse_data_offset = -1; /* we just phased out the mouse data in buffer */
|
m_mouse_data_offset = -1; /* we just phased out the mouse data in buffer */
|
||||||
state->m_fifo_head = (state->m_fifo_head+1) & 0x7;
|
m_fifo_head = (m_fifo_head+1) & 0x7;
|
||||||
state->m_fifo_size--;
|
m_fifo_size--;
|
||||||
via_0->write_ca1(1); /* pulse ca1 so that VIA reads it */
|
m_via0->write_ca1(1); /* pulse ca1 so that VIA reads it */
|
||||||
via_0->write_ca1(0); /* BTW, I have no idea how a real COPS does it ! */
|
m_via0->write_ca1(0); /* BTW, I have no idea how a real COPS does it ! */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* send data (queue it into the FIFO if needed) */
|
/* send data (queue it into the FIFO if needed) */
|
||||||
static void COPS_queue_data(running_machine &machine, const UINT8 *data, int len)
|
void lisa_state::COPS_queue_data(const UINT8 *data, int len)
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
|
||||||
#if 0
|
#if 0
|
||||||
if (state->m_fifo_size + len <= 8)
|
if (m_fifo_size + len <= 8)
|
||||||
#else
|
#else
|
||||||
/* trash old data */
|
/* trash old data */
|
||||||
while (state->m_fifo_size > 8 - len)
|
while (m_fifo_size > 8 - len)
|
||||||
{
|
{
|
||||||
if (state->m_fifo_head == state->m_mouse_data_offset)
|
if (m_fifo_head == m_mouse_data_offset)
|
||||||
state->m_mouse_data_offset = -1; /* we just phased out the mouse data in buffer */
|
m_mouse_data_offset = -1; /* we just phased out the mouse data in buffer */
|
||||||
state->m_fifo_head = (state->m_fifo_head+1) & 0x7;
|
m_fifo_head = (m_fifo_head+1) & 0x7;
|
||||||
state->m_fifo_size--;
|
m_fifo_size--;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -269,13 +254,13 @@ static void COPS_queue_data(running_machine &machine, const UINT8 *data, int len
|
|||||||
|
|
||||||
while (len--)
|
while (len--)
|
||||||
{
|
{
|
||||||
state->m_fifo_data[state->m_fifo_tail] = * (data++);
|
m_fifo_data[m_fifo_tail] = * (data++);
|
||||||
state->m_fifo_tail = (state->m_fifo_tail+1) & 0x7;
|
m_fifo_tail = (m_fifo_tail+1) & 0x7;
|
||||||
state->m_fifo_size++;
|
m_fifo_size++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*logerror("COPS_queue_data : trying to send data to VIA\n");*/
|
/*logerror("COPS_queue_data : trying to send data to VIA\n");*/
|
||||||
COPS_send_data_if_possible(machine);
|
COPS_send_data_if_possible();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,44 +273,41 @@ static void COPS_queue_data(running_machine &machine, const UINT8 *data, int len
|
|||||||
|
|
||||||
/* keyboard matrix to detect transition */
|
/* keyboard matrix to detect transition */
|
||||||
|
|
||||||
static void scan_keyboard(running_machine &machine)
|
void lisa_state::scan_keyboard()
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
|
||||||
int i, j;
|
int i, j;
|
||||||
int keybuf;
|
|
||||||
UINT8 keycode;
|
UINT8 keycode;
|
||||||
static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7" };
|
UINT8 keybuf[8] = { m_io_line0->read(), m_io_line1->read(), m_io_line2->read(), m_io_line3->read(),
|
||||||
|
m_io_line4->read(), m_io_line5->read(), m_io_line6->read(), m_io_line7->read() };
|
||||||
|
|
||||||
if (! state->m_COPS_force_unplug)
|
if (! m_COPS_force_unplug)
|
||||||
for (i=0; i<8; i++)
|
for (i=0; i<8; i++)
|
||||||
{
|
{
|
||||||
keybuf = machine.root_device().ioport(keynames[i])->read();
|
if (keybuf[i] != m_key_matrix[i])
|
||||||
|
|
||||||
if (keybuf != state->m_key_matrix[i])
|
|
||||||
{ /* if state has changed, find first bit which has changed */
|
{ /* if state has changed, find first bit which has changed */
|
||||||
/*logerror("keyboard state changed, %d %X\n", i, keybuf);*/
|
/*logerror("keyboard state changed, %d %X\n", i, keybuf);*/
|
||||||
|
|
||||||
for (j=0; j<16; j++)
|
for (j=0; j<16; j++)
|
||||||
{
|
{
|
||||||
if (((keybuf ^ state->m_key_matrix[i]) >> j) & 1)
|
if (((keybuf[i] ^ m_key_matrix[i]) >> j) & 1)
|
||||||
{
|
{
|
||||||
/* update key_matrix */
|
/* update key_matrix */
|
||||||
state->m_key_matrix[i] = (state->m_key_matrix[i] & ~ (1 << j)) | (keybuf & (1 << j));
|
m_key_matrix[i] = (m_key_matrix[i] & ~ (1 << j)) | (keybuf[i] & (1 << j));
|
||||||
|
|
||||||
/* create key code */
|
/* create key code */
|
||||||
keycode = (i << 4) | j;
|
keycode = (i << 4) | j;
|
||||||
if (keybuf & (1 << j))
|
if (keybuf[i] & (1 << j))
|
||||||
{ /* key down */
|
{ /* key down */
|
||||||
keycode |= 0x80;
|
keycode |= 0x80;
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
if (keycode == state->m_NMIcode)
|
if (keycode == m_NMIcode)
|
||||||
{ /* generate NMI interrupt */
|
{ /* generate NMI interrupt */
|
||||||
machine.device("maincpu")->execute().set_input_line(M68K_IRQ_7, PULSE_LINE);
|
m_maincpu->set_input_line(M68K_IRQ_7, PULSE_LINE);
|
||||||
machine.device("maincpu")->execute().set_input_line_vector(M68K_IRQ_7, M68K_INT_ACK_AUTOVECTOR);
|
m_maincpu->set_input_line_vector(M68K_IRQ_7, M68K_INT_ACK_AUTOVECTOR);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
COPS_queue_data(machine, & keycode, 1);
|
COPS_queue_data(&keycode, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -344,8 +326,8 @@ TIMER_CALLBACK_MEMBER(lisa_state::handle_mouse)
|
|||||||
return; /* ???? */
|
return; /* ???? */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
new_mx = machine().root_device().ioport("MOUSE_X")->read();
|
new_mx = m_io_mouse_x->read();
|
||||||
new_my = machine().root_device().ioport("MOUSE_Y")->read();
|
new_my = m_io_mouse_y->read();
|
||||||
|
|
||||||
/* see if it moved in the x coord */
|
/* see if it moved in the x coord */
|
||||||
if (new_mx != m_last_mx)
|
if (new_mx != m_last_mx)
|
||||||
@ -407,7 +389,7 @@ TIMER_CALLBACK_MEMBER(lisa_state::handle_mouse)
|
|||||||
m_fifo_size += 3;
|
m_fifo_size += 3;
|
||||||
|
|
||||||
/*logerror("handle_mouse : trying to send data to VIA\n");*/
|
/*logerror("handle_mouse : trying to send data to VIA\n");*/
|
||||||
COPS_send_data_if_possible(machine());
|
COPS_send_data_if_possible();
|
||||||
}
|
}
|
||||||
/* else, mouse data is lost forever (correct ??) */
|
/* else, mouse data is lost forever (correct ??) */
|
||||||
}
|
}
|
||||||
@ -418,16 +400,15 @@ TIMER_CALLBACK_MEMBER(lisa_state::handle_mouse)
|
|||||||
TIMER_CALLBACK_MEMBER(lisa_state::read_COPS_command)
|
TIMER_CALLBACK_MEMBER(lisa_state::read_COPS_command)
|
||||||
{
|
{
|
||||||
int command;
|
int command;
|
||||||
via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
|
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||||
address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
|
|
||||||
|
|
||||||
m_COPS_Ready = 0;
|
m_COPS_Ready = 0;
|
||||||
|
|
||||||
/*logerror("read_COPS_command : trying to send data to VIA\n");*/
|
/*logerror("read_COPS_command : trying to send data to VIA\n");*/
|
||||||
COPS_send_data_if_possible(machine());
|
COPS_send_data_if_possible();
|
||||||
|
|
||||||
/* some pull-ups allow the COPS to read 1s when the VIA port is not set as output */
|
/* some pull-ups allow the COPS to read 1s when the VIA port is not set as output */
|
||||||
command = (m_COPS_command | (~ via_0->read(space, VIA_DDRA))) & 0xff;
|
command = (m_COPS_command | (~ m_via0->read(space, VIA_DDRA))) & 0xff;
|
||||||
|
|
||||||
// printf("Dropping Ready, command = %02x\n", command);
|
// printf("Dropping Ready, command = %02x\n", command);
|
||||||
|
|
||||||
@ -581,7 +562,7 @@ TIMER_CALLBACK_MEMBER(lisa_state::read_COPS_command)
|
|||||||
reply[5] = (m_clock_regs.minutes2 << 4) | m_clock_regs.seconds1;
|
reply[5] = (m_clock_regs.minutes2 << 4) | m_clock_regs.seconds1;
|
||||||
reply[6] = (m_clock_regs.seconds2 << 4) | m_clock_regs.tenths;
|
reply[6] = (m_clock_regs.seconds2 << 4) | m_clock_regs.tenths;
|
||||||
|
|
||||||
COPS_queue_data(machine(), reply, 7);
|
COPS_queue_data(reply, 7);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -597,22 +578,22 @@ TIMER_CALLBACK_MEMBER(lisa_state::set_COPS_ready)
|
|||||||
machine().scheduler().timer_set(attotime::from_usec(20), timer_expired_delegate(FUNC(lisa_state::read_COPS_command),this));
|
machine().scheduler().timer_set(attotime::from_usec(20), timer_expired_delegate(FUNC(lisa_state::read_COPS_command),this));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_COPS(lisa_state *state)
|
void lisa_state::reset_COPS()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
state->m_fifo_size = 0;
|
m_fifo_size = 0;
|
||||||
state->m_fifo_head = 0;
|
m_fifo_head = 0;
|
||||||
state->m_fifo_tail = 0;
|
m_fifo_tail = 0;
|
||||||
state->m_mouse_data_offset = -1;
|
m_mouse_data_offset = -1;
|
||||||
|
|
||||||
for (i=0; i<8; i++)
|
for (i=0; i<8; i++)
|
||||||
state->m_key_matrix[i] = 0;
|
m_key_matrix[i] = 0;
|
||||||
|
|
||||||
state->m_mouse_timer->reset();
|
m_mouse_timer->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unplug_keyboard(running_machine &machine)
|
void lisa_state::unplug_keyboard()
|
||||||
{
|
{
|
||||||
static const UINT8 cmd[2] =
|
static const UINT8 cmd[2] =
|
||||||
{
|
{
|
||||||
@ -620,11 +601,10 @@ static void unplug_keyboard(running_machine &machine)
|
|||||||
0xFD /* keyboard unplugged */
|
0xFD /* keyboard unplugged */
|
||||||
};
|
};
|
||||||
|
|
||||||
COPS_queue_data(machine, cmd, 2);
|
COPS_queue_data(cmd, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lisa_state::plug_keyboard()
|
||||||
static void plug_keyboard(running_machine &machine)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
possible keyboard IDs according to Lisa Hardware Manual and boot ROM source code
|
possible keyboard IDs according to Lisa Hardware Manual and boot ROM source code
|
||||||
@ -648,17 +628,16 @@ static void plug_keyboard(running_machine &machine)
|
|||||||
0x3f /* keyboard ID - US for now */
|
0x3f /* keyboard ID - US for now */
|
||||||
};
|
};
|
||||||
|
|
||||||
COPS_queue_data(machine, cmd, 2);
|
COPS_queue_data(cmd, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* called at power-up */
|
/* called at power-up */
|
||||||
static void init_COPS(running_machine &machine)
|
void lisa_state::init_COPS()
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
m_COPS_Ready = 0;
|
||||||
state->m_COPS_Ready = 0;
|
|
||||||
|
|
||||||
reset_COPS(state);
|
reset_COPS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -683,7 +662,7 @@ WRITE8_MEMBER(lisa_state::COPS_via_out_ca2)
|
|||||||
/*logerror("COPS CA2 line state : %d\n", val);*/
|
/*logerror("COPS CA2 line state : %d\n", val);*/
|
||||||
|
|
||||||
/*logerror("COPS_via_out_ca2 : trying to send data to VIA\n");*/
|
/*logerror("COPS_via_out_ca2 : trying to send data to VIA\n");*/
|
||||||
COPS_send_data_if_possible(machine());
|
COPS_send_data_if_possible();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -715,17 +694,15 @@ READ8_MEMBER(lisa_state::COPS_via_in_b)
|
|||||||
|
|
||||||
WRITE8_MEMBER(lisa_state::COPS_via_out_b)
|
WRITE8_MEMBER(lisa_state::COPS_via_out_b)
|
||||||
{
|
{
|
||||||
via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
|
|
||||||
|
|
||||||
/* pull-up */
|
/* pull-up */
|
||||||
data |= (~ via_0->read(space,VIA_DDRA)) & 0x01;
|
data |= (~ m_via0->read(space,VIA_DDRA)) & 0x01;
|
||||||
|
|
||||||
if (data & 0x01)
|
if (data & 0x01)
|
||||||
{
|
{
|
||||||
if (m_COPS_force_unplug)
|
if (m_COPS_force_unplug)
|
||||||
{
|
{
|
||||||
m_COPS_force_unplug = 0;
|
m_COPS_force_unplug = 0;
|
||||||
plug_keyboard(machine());
|
plug_keyboard();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -733,7 +710,7 @@ WRITE8_MEMBER(lisa_state::COPS_via_out_b)
|
|||||||
if (! m_COPS_force_unplug)
|
if (! m_COPS_force_unplug)
|
||||||
{
|
{
|
||||||
m_COPS_force_unplug = 1;
|
m_COPS_force_unplug = 1;
|
||||||
unplug_keyboard(machine());
|
unplug_keyboard();
|
||||||
//reset_COPS(state);
|
//reset_COPS(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -741,17 +718,15 @@ WRITE8_MEMBER(lisa_state::COPS_via_out_b)
|
|||||||
|
|
||||||
WRITE8_MEMBER(lisa_state::COPS_via_out_cb2)
|
WRITE8_MEMBER(lisa_state::COPS_via_out_cb2)
|
||||||
{
|
{
|
||||||
device_t *speaker = machine().device(SPEAKER_TAG);
|
speaker_level_w(m_speaker, data);
|
||||||
speaker_level_w(speaker, data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void COPS_via_irq_func(device_t *device, int val)
|
void lisa_state::COPS_via_irq_func(int val)
|
||||||
{
|
{
|
||||||
lisa_state *state = device->machine().driver_data<lisa_state>();
|
if (m_KBIR != val)
|
||||||
if (state->m_KBIR != val)
|
|
||||||
{
|
{
|
||||||
state->m_KBIR = val;
|
m_KBIR = val;
|
||||||
lisa_field_interrupts(device->machine());
|
field_interrupts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -835,13 +810,13 @@ DIRECT_UPDATE_HANDLER (lisa_OPbaseoverride)
|
|||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
lisa_state *state = machine.driver_data<lisa_state>();
|
||||||
/* upper 7 bits -> segment # */
|
/* upper 7 bits -> segment # */
|
||||||
int segment = (address >> 17) & 0x7f;
|
int segment = (address >> 17) & 0x7f;
|
||||||
int the_seg = state->m_seg;
|
int the_seg = m_seg;
|
||||||
|
|
||||||
address &= 0xffffff;
|
address &= 0xffffff;
|
||||||
|
|
||||||
printf("lisa: logical address %x\n", address);
|
printf("lisa: logical address %x\n", address);
|
||||||
|
|
||||||
if (state->m_setup)
|
if (m_setup)
|
||||||
{
|
{
|
||||||
if (address & 0x004000)
|
if (address & 0x004000)
|
||||||
{
|
{
|
||||||
@ -855,7 +830,7 @@ DIRECT_UPDATE_HANDLER (lisa_OPbaseoverride)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ /* system ROMs */
|
{ /* system ROMs */
|
||||||
direct.explicit_configure((address & 0xffc000), (address & 0xffc000) + 0x003fff, 0xffffff, state->m_rom_ptr - (address & 0x3fff));
|
direct.explicit_configure((address & 0xffc000), (address & 0xffc000) + 0x003fff, 0xffffff, m_rom_ptr - (address & 0x3fff));
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
@ -863,7 +838,7 @@ DIRECT_UPDATE_HANDLER (lisa_OPbaseoverride)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (machine.device("maincpu")->state().state_int(M68K_SR) & 0x2000)
|
if (m_maincpu->state_int(M68K_SR) & 0x2000)
|
||||||
{
|
{
|
||||||
/* supervisor mode -> force register file 0 */
|
/* supervisor mode -> force register file 0 */
|
||||||
the_seg = 0;
|
the_seg = 0;
|
||||||
@ -873,18 +848,18 @@ DIRECT_UPDATE_HANDLER (lisa_OPbaseoverride)
|
|||||||
int seg_offset = address & 0x01ffff;
|
int seg_offset = address & 0x01ffff;
|
||||||
|
|
||||||
/* add revelant origin -> address */
|
/* add revelant origin -> address */
|
||||||
offs_t mapped_address = (state->m_mmu_regs[the_seg][segment].sorg + seg_offset) & 0x1fffff;
|
offs_t mapped_address = (m_mmu_regs[the_seg][segment].sorg + seg_offset) & 0x1fffff;
|
||||||
|
|
||||||
switch ((mmu_entry_t)state->m_mmu_regs[the_seg][segment].type)
|
switch ((mmu_entry_t)m_mmu_regs[the_seg][segment].type)
|
||||||
{
|
{
|
||||||
case RAM_r:
|
case RAM_r:
|
||||||
case RAM_rw:
|
case RAM_rw:
|
||||||
if (seg_offset > state->m_mmu_regs[the_seg][segment].slim)
|
if (seg_offset > m_mmu_regs[the_seg][segment].slim)
|
||||||
{
|
{
|
||||||
/* out of segment limits : bus error */
|
/* out of segment limits : bus error */
|
||||||
printf("illegal opbase address%lX\n", (long) address);
|
printf("illegal opbase address%lX\n", (long) address);
|
||||||
}
|
}
|
||||||
direct.explicit_configure((address & 0xffc000), (address & 0xffc000) + 0x003fff, 0xffffff, state->m_ram_ptr + mapped_address - address);
|
direct.explicit_configure((address & 0xffc000), (address & 0xffc000) + 0x003fff, 0xffffff, m_ram_ptr + mapped_address - address);
|
||||||
printf("RAM\n");
|
printf("RAM\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -897,7 +872,7 @@ DIRECT_UPDATE_HANDLER (lisa_OPbaseoverride)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case special_IO:
|
case special_IO:
|
||||||
direct.explicit_configure((address & 0xffc000), (address & 0xffc000) + 0x003fff, 0xffffff, state->m_rom_ptr + (mapped_address & 0x003fff) - address);
|
direct.explicit_configure((address & 0xffc000), (address & 0xffc000) + 0x003fff, 0xffffff, m_rom_ptr + (mapped_address & 0x003fff) - address);
|
||||||
printf("ROM\n");
|
printf("ROM\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -912,6 +887,7 @@ DIRECT_UPDATE_HANDLER (lisa_OPbaseoverride)
|
|||||||
NVRAM_HANDLER(lisa)
|
NVRAM_HANDLER(lisa)
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
lisa_state *state = machine.driver_data<lisa_state>();
|
||||||
|
|
||||||
if (read_or_write)
|
if (read_or_write)
|
||||||
{
|
{
|
||||||
file->write(state->m_fdc_ram, 1024);
|
file->write(state->m_fdc_ram, 1024);
|
||||||
@ -950,16 +926,16 @@ NVRAM_HANDLER(lisa)
|
|||||||
#if 0
|
#if 0
|
||||||
UINT32 temp32;
|
UINT32 temp32;
|
||||||
SINT8 temp8;
|
SINT8 temp8;
|
||||||
temp32 = (state->m_clock_regs.alarm << 12) | (state->m_clock_regs.years << 8) | (state->m_clock_regs.days1 << 4)
|
temp32 = (m_clock_regs.alarm << 12) | (m_clock_regs.years << 8) | (m_clock_regs.days1 << 4)
|
||||||
| state->m_clock_regs.days2;
|
| m_clock_regs.days2;
|
||||||
|
|
||||||
temp32 = (state->m_clock_regs.days3 << 28) | (state->m_clock_regs.hours1 << 24) | (state->m_clock_regs.hours2 << 20)
|
temp32 = (m_clock_regs.days3 << 28) | (m_clock_regs.hours1 << 24) | (m_clock_regs.hours2 << 20)
|
||||||
| (state->m_clock_regs.minutes1 << 16) | (state->m_clock_regs.minutes2 << 12)
|
| (m_clock_regs.minutes1 << 16) | (m_clock_regs.minutes2 << 12)
|
||||||
| (state->m_clock_regs.seconds1 << 8) | (state->m_clock_regs.seconds2 << 4) | state->m_clock_regs.tenths;
|
| (m_clock_regs.seconds1 << 8) | (m_clock_regs.seconds2 << 4) | m_clock_regs.tenths;
|
||||||
|
|
||||||
temp8 = clock_mode; /* clock mode */
|
temp8 = clock_mode; /* clock mode */
|
||||||
|
|
||||||
temp8 = state->m_clock_regs.clock_write_ptr; /* clock byte to be written next (-1 if clock write disabled) */
|
temp8 = m_clock_regs.clock_write_ptr; /* clock byte to be written next (-1 if clock write disabled) */
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -967,17 +943,17 @@ NVRAM_HANDLER(lisa)
|
|||||||
void init_lisa1(void)
|
void init_lisa1(void)
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
lisa_state *state = machine.driver_data<lisa_state>();
|
||||||
state->m_model = lisa1;
|
m_model = lisa1;
|
||||||
state->m_features.has_fast_timers = 0;
|
m_features.has_fast_timers = 0;
|
||||||
state->m_features.floppy_hardware = twiggy;
|
m_features.floppy_hardware = twiggy;
|
||||||
state->m_features.has_double_sided_floppy = 1;
|
m_features.has_double_sided_floppy = 1;
|
||||||
state->m_features.has_mac_xl_video = 0;
|
m_features.has_mac_xl_video = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DRIVER_INIT_MEMBER(lisa_state,lisa2)
|
DRIVER_INIT_MEMBER(lisa_state,lisa2)
|
||||||
{
|
{
|
||||||
m_ram_ptr = machine().root_device().memregion("maincpu")->base() + RAM_OFFSET;
|
m_ram_ptr = memregion("maincpu")->base() + RAM_OFFSET;
|
||||||
m_rom_ptr = memregion("maincpu")->base() + ROM_OFFSET;
|
m_rom_ptr = memregion("maincpu")->base() + ROM_OFFSET;
|
||||||
m_model = lisa2;
|
m_model = lisa2;
|
||||||
m_features.has_fast_timers = 0;
|
m_features.has_fast_timers = 0;
|
||||||
@ -990,7 +966,7 @@ DRIVER_INIT_MEMBER(lisa_state,lisa2)
|
|||||||
|
|
||||||
DRIVER_INIT_MEMBER(lisa_state,lisa210)
|
DRIVER_INIT_MEMBER(lisa_state,lisa210)
|
||||||
{
|
{
|
||||||
m_ram_ptr = machine().root_device().memregion("maincpu")->base() + RAM_OFFSET;
|
m_ram_ptr = memregion("maincpu")->base() + RAM_OFFSET;
|
||||||
m_rom_ptr = memregion("maincpu")->base() + ROM_OFFSET;
|
m_rom_ptr = memregion("maincpu")->base() + ROM_OFFSET;
|
||||||
m_model = lisa210;
|
m_model = lisa210;
|
||||||
m_features.has_fast_timers = 1;
|
m_features.has_fast_timers = 1;
|
||||||
@ -1003,7 +979,7 @@ DRIVER_INIT_MEMBER(lisa_state,lisa210)
|
|||||||
|
|
||||||
DRIVER_INIT_MEMBER(lisa_state,mac_xl)
|
DRIVER_INIT_MEMBER(lisa_state,mac_xl)
|
||||||
{
|
{
|
||||||
m_ram_ptr = machine().root_device().memregion("maincpu")->base() + RAM_OFFSET;
|
m_ram_ptr = memregion("maincpu")->base() + RAM_OFFSET;
|
||||||
m_rom_ptr = memregion("maincpu")->base() + ROM_OFFSET;
|
m_rom_ptr = memregion("maincpu")->base() + ROM_OFFSET;
|
||||||
m_model = mac_xl;
|
m_model = mac_xl;
|
||||||
m_features.has_fast_timers = 1;
|
m_features.has_fast_timers = 1;
|
||||||
@ -1024,12 +1000,12 @@ void lisa_state::machine_start()
|
|||||||
|
|
||||||
void lisa_state::machine_reset()
|
void lisa_state::machine_reset()
|
||||||
{
|
{
|
||||||
m_ram_ptr = machine().root_device().memregion("maincpu")->base() + RAM_OFFSET;
|
m_ram_ptr = memregion("maincpu")->base() + RAM_OFFSET;
|
||||||
m_rom_ptr = machine().root_device().memregion("maincpu")->base() + ROM_OFFSET;
|
m_rom_ptr = memregion("maincpu")->base() + ROM_OFFSET;
|
||||||
m_videoROM_ptr = memregion("gfx1")->base();
|
m_videoROM_ptr = memregion("gfx1")->base();
|
||||||
|
|
||||||
// machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate_create_static(lisa_OPbaseoverride, *machine()));
|
// m_maincpu->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate_create_static(lisa_OPbaseoverride, *machine()));
|
||||||
// m68k_set_reset_callback(machine().device("maincpu"), /*lisa_reset_instr_callback*/NULL);
|
// m68k_set_reset_callback(m_maincpu, /*lisa_reset_instr_callback*/NULL);
|
||||||
|
|
||||||
/* init MMU */
|
/* init MMU */
|
||||||
m_setup = 1;
|
m_setup = 1;
|
||||||
@ -1046,13 +1022,13 @@ void lisa_state::machine_reset()
|
|||||||
/* init video */
|
/* init video */
|
||||||
|
|
||||||
m_VTMSK = 0;
|
m_VTMSK = 0;
|
||||||
set_VTIR(machine(), 0);
|
set_VTIR(0);
|
||||||
|
|
||||||
m_video_address_latch = 0;
|
m_video_address_latch = 0;
|
||||||
m_videoram_ptr = (UINT16 *) m_ram_ptr;
|
m_videoram_ptr = (UINT16 *) m_ram_ptr;
|
||||||
|
|
||||||
/* reset COPS keyboard/mouse controller */
|
/* reset COPS keyboard/mouse controller */
|
||||||
init_COPS(machine());
|
init_COPS();
|
||||||
|
|
||||||
{
|
{
|
||||||
COPS_via_out_ca2(generic_space(), 0, 0); /* VIA core forgets to do so */
|
COPS_via_out_ca2(generic_space(), 0, 0); /* VIA core forgets to do so */
|
||||||
@ -1062,12 +1038,12 @@ void lisa_state::machine_reset()
|
|||||||
{
|
{
|
||||||
if (m_features.floppy_hardware == sony_lisa2)
|
if (m_features.floppy_hardware == sony_lisa2)
|
||||||
{
|
{
|
||||||
sony_set_enable_lines(machine().device("fdc"),1); /* on lisa2, drive unit 1 is always selected (?) */
|
sony_set_enable_lines(m_fdc, 1); /* on lisa2, drive unit 1 is always selected (?) */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* reset 68k to pick up proper vectors from MMU */
|
/* reset 68k to pick up proper vectors from MMU */
|
||||||
machine().device("maincpu")->reset();
|
m_maincpu->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(lisa_state::lisa_interrupt)
|
INTERRUPT_GEN_MEMBER(lisa_state::lisa_interrupt)
|
||||||
@ -1092,7 +1068,7 @@ INTERRUPT_GEN_MEMBER(lisa_state::lisa_interrupt)
|
|||||||
0x80, /* RESET code */
|
0x80, /* RESET code */
|
||||||
0xFC /* timer time-out */
|
0xFC /* timer time-out */
|
||||||
};
|
};
|
||||||
COPS_queue_data(machine(), cmd, 2);
|
COPS_queue_data(cmd, 2);
|
||||||
|
|
||||||
m_clock_regs.alarm = 0xfffffL;
|
m_clock_regs.alarm = 0xfffffL;
|
||||||
}
|
}
|
||||||
@ -1159,12 +1135,12 @@ INTERRUPT_GEN_MEMBER(lisa_state::lisa_interrupt)
|
|||||||
|
|
||||||
/* set VBI */
|
/* set VBI */
|
||||||
if (m_VTMSK)
|
if (m_VTMSK)
|
||||||
set_VTIR(machine(), 1);
|
set_VTIR(1);
|
||||||
else
|
else
|
||||||
set_VTIR(machine(), 0);
|
set_VTIR(0);
|
||||||
|
|
||||||
/* do keyboard scan */
|
/* do keyboard scan */
|
||||||
scan_keyboard(machine());
|
scan_keyboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1174,9 +1150,8 @@ INTERRUPT_GEN_MEMBER(lisa_state::lisa_interrupt)
|
|||||||
cannot support 2 floppy drives)...
|
cannot support 2 floppy drives)...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
INLINE void lisa_fdc_ttl_glue_access(running_machine &machine, offs_t offset)
|
void lisa_state::lisa_fdc_ttl_glue_access(offs_t offset)
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
|
||||||
switch ((offset & 0x000E) >> 1)
|
switch ((offset & 0x000E) >> 1)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@ -1189,22 +1164,20 @@ INLINE void lisa_fdc_ttl_glue_access(running_machine &machine, offs_t offset)
|
|||||||
/* enable/disable the motor on Lisa 1 */
|
/* enable/disable the motor on Lisa 1 */
|
||||||
/* can disable the motor on Lisa 2/10, too (although it is not useful) */
|
/* can disable the motor on Lisa 2/10, too (although it is not useful) */
|
||||||
/* On lisa 2, commands the loading of the speed register on lisalite board */
|
/* On lisa 2, commands the loading of the speed register on lisalite board */
|
||||||
if (state->m_features.floppy_hardware == sony_lisa2)
|
if (m_features.floppy_hardware == sony_lisa2)
|
||||||
{
|
{
|
||||||
int oldMT1 = state->m_MT1;
|
int oldMT1 = m_MT1;
|
||||||
state->m_MT1 = offset & 1;
|
m_MT1 = offset & 1;
|
||||||
if (state->m_MT1 && ! oldMT1)
|
if (m_MT1 && ! oldMT1)
|
||||||
{
|
{
|
||||||
applefdc_base_device *fdc = machine.device<applefdc_base_device>("fdc");
|
m_PWM_floppy_motor_speed = (m_PWM_floppy_motor_speed << 1) & 0xff;
|
||||||
|
if (m_fdc->get_lines() & APPLEFDC_PH0)
|
||||||
state->m_PWM_floppy_motor_speed = (state->m_PWM_floppy_motor_speed << 1) & 0xff;
|
m_PWM_floppy_motor_speed |= 1;
|
||||||
if (fdc->get_lines() & APPLEFDC_PH0)
|
sony_set_speed(((256-m_PWM_floppy_motor_speed) * 1.3) + 237);
|
||||||
state->m_PWM_floppy_motor_speed |= 1;
|
|
||||||
sony_set_speed(((256-state->m_PWM_floppy_motor_speed) * 1.3) + 237);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*else
|
/*else
|
||||||
state->m_MT1 = offset & 1;*/
|
m_MT1 = offset & 1;*/
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
/*DIS = offset & 1;*/ /* forbids access from the 68000 to our RAM */
|
/*DIS = offset & 1;*/ /* forbids access from the 68000 to our RAM */
|
||||||
@ -1212,19 +1185,19 @@ INLINE void lisa_fdc_ttl_glue_access(running_machine &machine, offs_t offset)
|
|||||||
case 5:
|
case 5:
|
||||||
/*HDS = offset & 1;*/ /* head select (-> disk side) on twiggy */
|
/*HDS = offset & 1;*/ /* head select (-> disk side) on twiggy */
|
||||||
#if 0
|
#if 0
|
||||||
if (state->m_features.floppy_hardware == twiggy)
|
if (m_features.floppy_hardware == twiggy)
|
||||||
twiggy_set_head_line(offset & 1);
|
twiggy_set_head_line(offset & 1);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
if (state->m_features.floppy_hardware == sony_lisa210)
|
if (m_features.floppy_hardware == sony_lisa210)
|
||||||
sony_set_sel_line(machine.device("fdc"), offset & 1);
|
sony_set_sel_line(m_fdc, offset & 1);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
state->m_DISK_DIAG = offset & 1;
|
m_DISK_DIAG = offset & 1;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
state->m_FDIR = offset & 1; /* Interrupt request to 68k */
|
m_FDIR = offset & 1; /* Interrupt request to 68k */
|
||||||
lisa_field_interrupts(machine);
|
field_interrupts();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1232,16 +1205,15 @@ INLINE void lisa_fdc_ttl_glue_access(running_machine &machine, offs_t offset)
|
|||||||
READ8_MEMBER(lisa_state::lisa_fdc_io_r)
|
READ8_MEMBER(lisa_state::lisa_fdc_io_r)
|
||||||
{
|
{
|
||||||
int answer=0;
|
int answer=0;
|
||||||
applefdc_base_device *fdc = machine().device<applefdc_base_device>("fdc");
|
|
||||||
|
|
||||||
switch ((offset & 0x0030) >> 4)
|
switch ((offset & 0x0030) >> 4)
|
||||||
{
|
{
|
||||||
case 0: /* IWM */
|
case 0: /* IWM */
|
||||||
answer = fdc->read(offset);
|
answer = m_fdc->read(offset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /* TTL glue */
|
case 1: /* TTL glue */
|
||||||
lisa_fdc_ttl_glue_access(machine(), offset);
|
lisa_fdc_ttl_glue_access(offset);
|
||||||
answer = 0; /* ??? */
|
answer = 0; /* ??? */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1259,16 +1231,14 @@ READ8_MEMBER(lisa_state::lisa_fdc_io_r)
|
|||||||
|
|
||||||
WRITE8_MEMBER(lisa_state::lisa_fdc_io_w)
|
WRITE8_MEMBER(lisa_state::lisa_fdc_io_w)
|
||||||
{
|
{
|
||||||
applefdc_base_device *fdc = machine().device<applefdc_base_device>("fdc");
|
|
||||||
|
|
||||||
switch ((offset & 0x0030) >> 4)
|
switch ((offset & 0x0030) >> 4)
|
||||||
{
|
{
|
||||||
case 0: /* IWM */
|
case 0: /* IWM */
|
||||||
fdc->write(offset, data);
|
m_fdc->write(offset, data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /* TTL glue */
|
case 1: /* TTL glue */
|
||||||
lisa_fdc_ttl_glue_access(machine(), offset);
|
lisa_fdc_ttl_glue_access(offset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /* writes the PWM register */
|
case 2: /* writes the PWM register */
|
||||||
@ -1391,7 +1361,7 @@ READ16_MEMBER(lisa_state::lisa_r)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (machine().device("maincpu")->state().state_int(M68K_SR) & 0x2000)
|
if (m_maincpu->state_int(M68K_SR) & 0x2000)
|
||||||
/* supervisor mode -> force register file 0 */
|
/* supervisor mode -> force register file 0 */
|
||||||
the_seg = 0;
|
the_seg = 0;
|
||||||
|
|
||||||
@ -1420,7 +1390,7 @@ READ16_MEMBER(lisa_state::lisa_r)
|
|||||||
&& (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
|
&& (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
|
||||||
{
|
{
|
||||||
m_mem_err_addr_latch = address >> 5;
|
m_mem_err_addr_latch = address >> 5;
|
||||||
set_parity_error_pending(machine(), 1);
|
set_parity_error_pending(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -1438,7 +1408,7 @@ READ16_MEMBER(lisa_state::lisa_r)
|
|||||||
&& (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
|
&& (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
|
||||||
{
|
{
|
||||||
m_mem_err_addr_latch = address >> 5;
|
m_mem_err_addr_latch = address >> 5;
|
||||||
set_parity_error_pending(machine(), 1);
|
set_parity_error_pending(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -1493,12 +1463,12 @@ READ16_MEMBER(lisa_state::lisa_r)
|
|||||||
if ((time_in_frame >= 364) && (time_in_frame <= 375))
|
if ((time_in_frame >= 364) && (time_in_frame <= 375))
|
||||||
{
|
{
|
||||||
answer = m_videoROM_ptr[m_videoROM_address|0x80] << 8;
|
answer = m_videoROM_ptr[m_videoROM_address|0x80] << 8;
|
||||||
logerror("reading1 %06X=%04x PC=%06x time=%d\n", address, answer, machine().device("maincpu")->safe_pc(), time_in_frame);
|
logerror("reading1 %06X=%04x %s time=%d\n", address, answer, machine().describe_context(), time_in_frame);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
answer = m_videoROM_ptr[m_videoROM_address] << 8;
|
answer = m_videoROM_ptr[m_videoROM_address] << 8;
|
||||||
logerror("reading2 %06X=%04x PC=%06x time=%d\n", address, answer, machine().device("maincpu")->safe_pc(), time_in_frame);
|
logerror("reading2 %06X=%04x %s time=%d\n", address, answer, machine().describe_context(), time_in_frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1597,7 +1567,7 @@ WRITE16_MEMBER(lisa_state::lisa_w)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (machine().device("maincpu")->state().state_int(M68K_SR) & 0x2000)
|
if (m_maincpu->state_int(M68K_SR) & 0x2000)
|
||||||
/* supervisor mode -> force register file 0 */
|
/* supervisor mode -> force register file 0 */
|
||||||
the_seg = 0;
|
the_seg = 0;
|
||||||
|
|
||||||
@ -1728,70 +1698,67 @@ WRITE16_MEMBER(lisa_state::lisa_w)
|
|||||||
* *
|
* *
|
||||||
\**************************************************************************************/
|
\**************************************************************************************/
|
||||||
|
|
||||||
INLINE void cpu_board_control_access(running_machine &machine, offs_t offset)
|
void lisa_state::cpu_board_control_access(offs_t offset)
|
||||||
{
|
{
|
||||||
lisa_state *state = machine.driver_data<lisa_state>();
|
|
||||||
switch ((offset & 0x03ff) << 1)
|
switch ((offset & 0x03ff) << 1)
|
||||||
{
|
{
|
||||||
case 0x0002: /* Set DIAG1 Latch */
|
case 0x0002: /* Set DIAG1 Latch */
|
||||||
case 0x0000: /* Reset DIAG1 Latch */
|
case 0x0000: /* Reset DIAG1 Latch */
|
||||||
break;
|
break;
|
||||||
case 0x0006: /* Set Diag2 Latch */
|
case 0x0006: /* Set Diag2 Latch */
|
||||||
state->m_diag2 = 1;
|
m_diag2 = 1;
|
||||||
break;
|
break;
|
||||||
case 0x0004: /* ReSet Diag2 Latch */
|
case 0x0004: /* ReSet Diag2 Latch */
|
||||||
state->m_diag2 = 0;
|
m_diag2 = 0;
|
||||||
break;
|
break;
|
||||||
case 0x000A: /* SEG1 Context Selection bit SET */
|
case 0x000A: /* SEG1 Context Selection bit SET */
|
||||||
/*logerror("seg bit 0 set\n");*/
|
/*logerror("seg bit 0 set\n");*/
|
||||||
state->m_seg |= 1;
|
m_seg |= 1;
|
||||||
break;
|
break;
|
||||||
case 0x0008: /* SEG1 Context Selection bit RESET */
|
case 0x0008: /* SEG1 Context Selection bit RESET */
|
||||||
/*logerror("seg bit 0 clear\n");*/
|
/*logerror("seg bit 0 clear\n");*/
|
||||||
state->m_seg &= ~1;
|
m_seg &= ~1;
|
||||||
break;
|
break;
|
||||||
case 0x000E: /* SEG2 Context Selection bit SET */
|
case 0x000E: /* SEG2 Context Selection bit SET */
|
||||||
/*logerror("seg bit 1 set\n");*/
|
/*logerror("seg bit 1 set\n");*/
|
||||||
state->m_seg |= 2;
|
m_seg |= 2;
|
||||||
break;
|
break;
|
||||||
case 0x000C: /* SEG2 Context Selection bit RESET */
|
case 0x000C: /* SEG2 Context Selection bit RESET */
|
||||||
/*logerror("seg bit 1 clear\n");*/
|
/*logerror("seg bit 1 clear\n");*/
|
||||||
state->m_seg &= ~2;
|
m_seg &= ~2;
|
||||||
break;
|
break;
|
||||||
case 0x0010: /* SETUP register SET */
|
case 0x0010: /* SETUP register SET */
|
||||||
logerror("setup SET PC=%x\n", machine.device("maincpu")->safe_pc());
|
logerror("setup SET %s\n", machine().describe_context());
|
||||||
state->m_setup = 1;
|
m_setup = 1;
|
||||||
break;
|
break;
|
||||||
case 0x0012: /* SETUP register RESET */
|
case 0x0012: /* SETUP register RESET */
|
||||||
logerror("setup UNSET PC=%x\n", machine.device("maincpu")->safe_pc());
|
logerror("setup UNSET %s\n", machine().describe_context());
|
||||||
state->m_setup = 0;
|
m_setup = 0;
|
||||||
break;
|
break;
|
||||||
case 0x001A: /* Enable Vertical Retrace Interrupt */
|
case 0x001A: /* Enable Vertical Retrace Interrupt */
|
||||||
logerror("enable retrace PC=%x\n", machine.device("maincpu")->safe_pc());
|
logerror("enable retrace %s\n", machine().describe_context());
|
||||||
state->m_VTMSK = 1;
|
m_VTMSK = 1;
|
||||||
break;
|
break;
|
||||||
case 0x0018: /* Disable Vertical Retrace Interrupt */
|
case 0x0018: /* Disable Vertical Retrace Interrupt */
|
||||||
logerror("disable retrace PC=%x\n", machine.device("maincpu")->safe_pc());
|
logerror("disable retrace %s\n", machine().describe_context());
|
||||||
state->m_VTMSK = 0;
|
m_VTMSK = 0;
|
||||||
set_VTIR(machine, 2);
|
set_VTIR(2);
|
||||||
break;
|
break;
|
||||||
case 0x0016: /* Enable Soft Error Detect. */
|
case 0x0016: /* Enable Soft Error Detect. */
|
||||||
case 0x0014: /* Disable Soft Error Detect. */
|
case 0x0014: /* Disable Soft Error Detect. */
|
||||||
break;
|
break;
|
||||||
case 0x001E: /* Enable Hard Error Detect */
|
case 0x001E: /* Enable Hard Error Detect */
|
||||||
state->m_test_parity = 1;
|
m_test_parity = 1;
|
||||||
break;
|
break;
|
||||||
case 0x001C: /* Disable Hard Error Detect */
|
case 0x001C: /* Disable Hard Error Detect */
|
||||||
state->m_test_parity = 0;
|
m_test_parity = 0;
|
||||||
set_parity_error_pending(machine, 0);
|
set_parity_error_pending(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
READ16_MEMBER(lisa_state::lisa_IO_r)
|
READ16_MEMBER(lisa_state::lisa_IO_r)
|
||||||
{
|
{
|
||||||
via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
|
|
||||||
via6522_device *via_1 = machine().device<via6522_device>("via6522_1");
|
|
||||||
int answer=0;
|
int answer=0;
|
||||||
|
|
||||||
switch ((offset & 0x7000) >> 12)
|
switch ((offset & 0x7000) >> 12)
|
||||||
@ -1841,13 +1808,13 @@ READ16_MEMBER(lisa_state::lisa_IO_r)
|
|||||||
case 2: /* parallel port */
|
case 2: /* parallel port */
|
||||||
/* 1 VIA located at 0xD901 */
|
/* 1 VIA located at 0xD901 */
|
||||||
if (ACCESSING_BITS_0_7)
|
if (ACCESSING_BITS_0_7)
|
||||||
answer = via_1->read(space, (offset >> 2) & 0xf);
|
answer = m_via1->read(space, (offset >> 2) & 0xf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /* keyboard/mouse cops via */
|
case 3: /* keyboard/mouse cops via */
|
||||||
/* 1 VIA located at 0xDD81 */
|
/* 1 VIA located at 0xDD81 */
|
||||||
if (ACCESSING_BITS_0_7)
|
if (ACCESSING_BITS_0_7)
|
||||||
answer = via_0->read(space, offset & 0xf);
|
answer = m_via0->read(space, offset & 0xf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1858,7 +1825,7 @@ READ16_MEMBER(lisa_state::lisa_IO_r)
|
|||||||
switch ((offset & 0x0C00) >> 10)
|
switch ((offset & 0x0C00) >> 10)
|
||||||
{
|
{
|
||||||
case 0x0: /* cpu board control */
|
case 0x0: /* cpu board control */
|
||||||
cpu_board_control_access(machine(), offset & 0x03ff);
|
cpu_board_control_access(offset & 0x03ff);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x1: /* Video Address Latch */
|
case 0x1: /* Video Address Latch */
|
||||||
@ -1905,7 +1872,7 @@ READ16_MEMBER(lisa_state::lisa_IO_r)
|
|||||||
else
|
else
|
||||||
answer |= 0x04;
|
answer |= 0x04;
|
||||||
/* huh... we need to emulate some other bits */
|
/* huh... we need to emulate some other bits */
|
||||||
logerror("read status PC=%x val=%x\n", machine().device("maincpu")->safe_pc(), answer);
|
logerror("read status %s val=%x\n", machine().describe_context(), answer);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1917,9 +1884,6 @@ READ16_MEMBER(lisa_state::lisa_IO_r)
|
|||||||
|
|
||||||
WRITE16_MEMBER(lisa_state::lisa_IO_w)
|
WRITE16_MEMBER(lisa_state::lisa_IO_w)
|
||||||
{
|
{
|
||||||
via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
|
|
||||||
via6522_device *via_1 = machine().device<via6522_device>("via6522_1");
|
|
||||||
|
|
||||||
switch ((offset & 0x7000) >> 12)
|
switch ((offset & 0x7000) >> 12)
|
||||||
{
|
{
|
||||||
case 0x0:
|
case 0x0:
|
||||||
@ -1967,12 +1931,12 @@ WRITE16_MEMBER(lisa_state::lisa_IO_w)
|
|||||||
|
|
||||||
case 2: /* paralel port */
|
case 2: /* paralel port */
|
||||||
if (ACCESSING_BITS_0_7)
|
if (ACCESSING_BITS_0_7)
|
||||||
via_1->write(space, (offset >> 2) & 0xf, data & 0xff);
|
m_via1->write(space, (offset >> 2) & 0xf, data & 0xff);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /* keyboard/mouse cops via */
|
case 3: /* keyboard/mouse cops via */
|
||||||
if (ACCESSING_BITS_0_7)
|
if (ACCESSING_BITS_0_7)
|
||||||
via_0->write(space, offset & 0xf, data & 0xff);
|
m_via0->write(space, offset & 0xf, data & 0xff);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1983,7 +1947,7 @@ WRITE16_MEMBER(lisa_state::lisa_IO_w)
|
|||||||
switch ((offset & 0x0C00) >> 10)
|
switch ((offset & 0x0C00) >> 10)
|
||||||
{
|
{
|
||||||
case 0x0: /* cpu board control */
|
case 0x0: /* cpu board control */
|
||||||
cpu_board_control_access(machine(), offset & 0x03ff);
|
cpu_board_control_access(offset & 0x03ff);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x1: /* Video Address Latch */
|
case 0x1: /* Video Address Latch */
|
||||||
|
Loading…
Reference in New Issue
Block a user