summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/x68k.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/x68k.c')
-rw-r--r--src/mess/drivers/x68k.c620
1 files changed, 310 insertions, 310 deletions
diff --git a/src/mess/drivers/x68k.c b/src/mess/drivers/x68k.c
index 6b199283d54..3003b1592f3 100644
--- a/src/mess/drivers/x68k.c
+++ b/src/mess/drivers/x68k.c
@@ -147,19 +147,19 @@
#ifdef UNUSED_FUNCTION
static attotime prescale(int val)
{
- switch(val)
- {
- case 0: return attotime::from_nsec(0);
- case 1: return attotime::from_nsec(1000);
- case 2: return attotime::from_nsec(2500);
- case 3: return attotime::from_nsec(4000);
- case 4: return attotime::from_nsec(12500);
- case 5: return attotime::from_nsec(16000);
- case 6: return attotime::from_nsec(25000);
- case 7: return attotime::from_nsec(50000);
- default:
- fatalerror("out of range\n");
- }
+ switch(val)
+ {
+ case 0: return attotime::from_nsec(0);
+ case 1: return attotime::from_nsec(1000);
+ case 2: return attotime::from_nsec(2500);
+ case 3: return attotime::from_nsec(4000);
+ case 4: return attotime::from_nsec(12500);
+ case 5: return attotime::from_nsec(16000);
+ case 6: return attotime::from_nsec(25000);
+ case 7: return attotime::from_nsec(50000);
+ default:
+ fatalerror("out of range\n");
+ }
}
#endif
@@ -171,141 +171,141 @@ void x68k_state::mfp_init()
m_mfp.current_irq = -1; // No current interrupt
#if 0
- mfp_timer[0] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_a_callback),this));
- mfp_timer[1] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_b_callback),this));
- mfp_timer[2] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_c_callback),this));
- mfp_timer[3] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_d_callback),this));
- mfp_irq = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_update_irq),this));
- mfp_irq->adjust(attotime::zero, 0, attotime::from_usec(32));
+ mfp_timer[0] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_a_callback),this));
+ mfp_timer[1] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_b_callback),this));
+ mfp_timer[2] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_c_callback),this));
+ mfp_timer[3] = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_timer_d_callback),this));
+ mfp_irq = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_state::mfp_update_irq),this));
+ mfp_irq->adjust(attotime::zero, 0, attotime::from_usec(32));
#endif
}
#ifdef UNUSED_FUNCTION
TIMER_CALLBACK_MEMBER(x68k_state::mfp_update_irq)
{
- int x;
-
- if((m_ioc.irqstatus & 0xc0) != 0)
- return;
-
- // check for pending IRQs, in priority order
- if(m_mfp.ipra != 0)
- {
- for(x=7;x>=0;x--)
- {
- if((m_mfp.ipra & (1 << x)) && (m_mfp.imra & (1 << x)))
- {
- m_current_irq_line = m_mfp.irqline;
- m_mfp.current_irq = x + 8;
- // assert IRQ line
+ int x;
+
+ if((m_ioc.irqstatus & 0xc0) != 0)
+ return;
+
+ // check for pending IRQs, in priority order
+ if(m_mfp.ipra != 0)
+ {
+ for(x=7;x>=0;x--)
+ {
+ if((m_mfp.ipra & (1 << x)) && (m_mfp.imra & (1 << x)))
+ {
+ m_current_irq_line = m_mfp.irqline;
+ m_mfp.current_irq = x + 8;
+ // assert IRQ line
// if(m_mfp.iera & (1 << x))
- {
- m_current_vector[6] = (m_mfp.vr & 0xf0) | (x+8);
- machine().device("maincpu")->execute().set_input_line_and_vector(m_mfp.irqline,ASSERT_LINE,(m_mfp.vr & 0xf0) | (x + 8));
+ {
+ m_current_vector[6] = (m_mfp.vr & 0xf0) | (x+8);
+ machine().device("maincpu")->execute().set_input_line_and_vector(m_mfp.irqline,ASSERT_LINE,(m_mfp.vr & 0xf0) | (x + 8));
// logerror("MFP: Sent IRQ vector 0x%02x (IRQ line %i)\n",(m_mfp.vr & 0xf0) | (x+8),m_mfp.irqline);
- return; // one at a time only
- }
- }
- }
- }
- if(m_mfp.iprb != 0)
- {
- for(x=7;x>=0;x--)
- {
- if((m_mfp.iprb & (1 << x)) && (m_mfp.imrb & (1 << x)))
- {
- m_current_irq_line = m_mfp.irqline;
- m_mfp.current_irq = x;
- // assert IRQ line
+ return; // one at a time only
+ }
+ }
+ }
+ }
+ if(m_mfp.iprb != 0)
+ {
+ for(x=7;x>=0;x--)
+ {
+ if((m_mfp.iprb & (1 << x)) && (m_mfp.imrb & (1 << x)))
+ {
+ m_current_irq_line = m_mfp.irqline;
+ m_mfp.current_irq = x;
+ // assert IRQ line
// if(m_mfp.ierb & (1 << x))
- {
- m_current_vector[6] = (m_mfp.vr & 0xf0) | x;
- machine().device("maincpu")->execute().set_input_line_and_vector(m_mfp.irqline,ASSERT_LINE,(m_mfp.vr & 0xf0) | x);
+ {
+ m_current_vector[6] = (m_mfp.vr & 0xf0) | x;
+ machine().device("maincpu")->execute().set_input_line_and_vector(m_mfp.irqline,ASSERT_LINE,(m_mfp.vr & 0xf0) | x);
// logerror("MFP: Sent IRQ vector 0x%02x (IRQ line %i)\n",(m_mfp.vr & 0xf0) | x,m_mfp.irqline);
- return; // one at a time only
- }
- }
- }
- }
+ return; // one at a time only
+ }
+ }
+ }
+ }
}
void mfp_trigger_irq(running_machine &machine, int irq)
{
x68k_state *state = machine.driver_data<x68k_state>();
- // check if interrupt is enabled
- if(irq > 7)
- {
- if(!(state->m_mfp.iera & (1 << (irq-8))))
- return; // not enabled, no action taken
- }
- else
- {
- if(!(state->m_mfp.ierb & (1 << irq)))
- return; // not enabled, no action taken
- }
-
- // set requested IRQ as pending
- if(irq > 7)
- state->m_mfp.ipra |= (1 << (irq-8));
- else
- state->m_mfp.iprb |= (1 << irq);
-
- // check for IRQs to be called
+ // check if interrupt is enabled
+ if(irq > 7)
+ {
+ if(!(state->m_mfp.iera & (1 << (irq-8))))
+ return; // not enabled, no action taken
+ }
+ else
+ {
+ if(!(state->m_mfp.ierb & (1 << irq)))
+ return; // not enabled, no action taken
+ }
+
+ // set requested IRQ as pending
+ if(irq > 7)
+ state->m_mfp.ipra |= (1 << (irq-8));
+ else
+ state->m_mfp.iprb |= (1 << irq);
+
+ // check for IRQs to be called
// mfp_update_irq(0);
}
TIMER_CALLBACK_MEMBER(x68k_state::mfp_timer_a_callback)
{
- m_mfp.timer[0].counter--;
- if(m_mfp.timer[0].counter == 0)
- {
- m_mfp.timer[0].counter = m_mfp.tadr;
- mfp_trigger_irq(MFP_IRQ_TIMERA);
- }
+ m_mfp.timer[0].counter--;
+ if(m_mfp.timer[0].counter == 0)
+ {
+ m_mfp.timer[0].counter = m_mfp.tadr;
+ mfp_trigger_irq(MFP_IRQ_TIMERA);
+ }
}
TIMER_CALLBACK_MEMBER(x68k_state::mfp_timer_b_callback)
{
- m_mfp.timer[1].counter--;
- if(m_mfp.timer[1].counter == 0)
- {
- m_mfp.timer[1].counter = m_mfp.tbdr;
- mfp_trigger_irq(MFP_IRQ_TIMERB);
- }
+ m_mfp.timer[1].counter--;
+ if(m_mfp.timer[1].counter == 0)
+ {
+ m_mfp.timer[1].counter = m_mfp.tbdr;
+ mfp_trigger_irq(MFP_IRQ_TIMERB);
+ }
}
TIMER_CALLBACK_MEMBER(x68k_state::mfp_timer_c_callback)
{
- m_mfp.timer[2].counter--;
- if(m_mfp.timer[2].counter == 0)
- {
- m_mfp.timer[2].counter = m_mfp.tcdr;
- mfp_trigger_irq(MFP_IRQ_TIMERC);
- }
+ m_mfp.timer[2].counter--;
+ if(m_mfp.timer[2].counter == 0)
+ {
+ m_mfp.timer[2].counter = m_mfp.tcdr;
+ mfp_trigger_irq(MFP_IRQ_TIMERC);
+ }
}
TIMER_CALLBACK_MEMBER(x68k_state::mfp_timer_d_callback)
{
- m_mfp.timer[3].counter--;
- if(m_mfp.timer[3].counter == 0)
- {
- m_mfp.timer[3].counter = m_mfp.tddr;
- mfp_trigger_irq(MFP_IRQ_TIMERD);
- }
+ m_mfp.timer[3].counter--;
+ if(m_mfp.timer[3].counter == 0)
+ {
+ m_mfp.timer[3].counter = m_mfp.tddr;
+ mfp_trigger_irq(MFP_IRQ_TIMERD);
+ }
}
void mfp_set_timer(int timer, unsigned char data)
{
- if((data & 0x07) == 0x0000)
- { // Timer stop
- mfp_timer[timer]->adjust(attotime::zero);
- logerror("MFP: Timer #%i stopped. \n",timer);
- return;
- }
+ if((data & 0x07) == 0x0000)
+ { // Timer stop
+ mfp_timer[timer]->adjust(attotime::zero);
+ logerror("MFP: Timer #%i stopped. \n",timer);
+ return;
+ }
- mfp_timer[timer]->adjust(attotime::zero, 0, prescale(data & 0x07));
- logerror("MFP: Timer #%i set to %2.1fus\n",timer, prescale(data & 0x07).as_double() * 1000000);
+ mfp_timer[timer]->adjust(attotime::zero, 0, prescale(data & 0x07));
+ logerror("MFP: Timer #%i set to %2.1fus\n",timer, prescale(data & 0x07).as_double() * 1000000);
}
#endif
@@ -347,36 +347,36 @@ READ16_MEMBER(x68k_state::x68k_dmac_r)
void x68k_state::x68k_keyboard_ctrl_w(int data)
{
/* Keyboard control commands:
- 00xxxxxx - TV Control
- Not of much use as yet
+ 00xxxxxx - TV Control
+ Not of much use as yet
- 01000xxy - y = Mouse control signal
+ 01000xxy - y = Mouse control signal
- 01001xxy - y = Keyboard enable
+ 01001xxy - y = Keyboard enable
- 010100xy - y = Sharp X1 display compatibility mode
+ 010100xy - y = Sharp X1 display compatibility mode
- 010101xx - xx = LED brightness (00 = bright, 11 = dark)
+ 010101xx - xx = LED brightness (00 = bright, 11 = dark)
- 010110xy - y = Display control enable
+ 010110xy - y = Display control enable
- 010111xy - y = Display control via the Opt. 2 key enable
+ 010111xy - y = Display control via the Opt. 2 key enable
- 0110xxxx - xxxx = Key delay (default 500ms)
- 100 * (delay time) + 200ms
+ 0110xxxx - xxxx = Key delay (default 500ms)
+ 100 * (delay time) + 200ms
- 0111xxxx - xxxx = Key repeat rate (default 110ms)
- (repeat rate)^2*5 + 30ms
+ 0111xxxx - xxxx = Key repeat rate (default 110ms)
+ (repeat rate)^2*5 + 30ms
- 1xxxxxxx - xxxxxxx = keyboard LED status
- b6 = "full size"
- b5 = hiragana
- b4 = insert
- b3 = caps
- b2 = code input
- b1 = romaji input
- b0 = kana
- */
+ 1xxxxxxx - xxxxxxx = keyboard LED status
+ b6 = "full size"
+ b5 = hiragana
+ b4 = insert
+ b3 = caps
+ b2 = code input
+ b1 = romaji input
+ b0 = kana
+ */
if(data & 0x80) // LED status
{
@@ -1224,168 +1224,168 @@ READ16_MEMBER(x68k_state::x68k_mfp_r)
{
// Initial settings indicate that IRQs are generated for FM (YM2151), Receive buffer error or full,
- // MFP Timer C, and the power switch
+ // MFP Timer C, and the power switch
// logerror("MFP: [%08x] Reading offset %i\n",space.device().safe_pc(),offset);
- switch(offset)
- {
+ switch(offset)
+ {
#if 0
- case 0x00: // GPIP - General purpose I/O register (read-only)
- ret = 0x23;
- if(machine.primary_screen->vpos() == m_crtc.reg[9])
- ret |= 0x40;
- if(m_crtc.vblank == 0)
- ret |= 0x10; // Vsync signal (low if in vertical retrace)
+ case 0x00: // GPIP - General purpose I/O register (read-only)
+ ret = 0x23;
+ if(machine.primary_screen->vpos() == m_crtc.reg[9])
+ ret |= 0x40;
+ if(m_crtc.vblank == 0)
+ ret |= 0x10; // Vsync signal (low if in vertical retrace)
// if(m_mfp.isrb & 0x08)
// ret |= 0x08; // FM IRQ signal
- if(machine.primary_screen->hpos() > m_crtc.width - 32)
- ret |= 0x80; // Hsync signal
+ if(machine.primary_screen->hpos() > m_crtc.width - 32)
+ ret |= 0x80; // Hsync signal
// logerror("MFP: [%08x] Reading offset %i (ret=%02x)\n",space.device().safe_pc(),offset,ret);
- return ret; // bit 5 is always 1
- case 3:
- return m_mfp.iera;
- case 4:
- return m_mfp.ierb;
- case 5:
- return m_mfp.ipra;
- case 6:
- return m_mfp.iprb;
- case 7:
- if(m_mfp.eoi_mode == 0) // forced low in auto EOI mode
- return 0;
- else
- return m_mfp.isra;
- case 8:
- if(m_mfp.eoi_mode == 0) // forced low in auto EOI mode
- return 0;
- else
- return m_mfp.isrb;
- case 9:
- return m_mfp.imra;
- case 10:
- return m_mfp.imrb;
- case 15: // TADR
- return m_mfp.timer[0].counter; // Timer data registers return their main counter values
- case 16: // TBDR
- return m_mfp.timer[1].counter;
- case 17: // TCDR
- return m_mfp.timer[2].counter;
- case 18: // TDDR
- return m_mfp.timer[3].counter;
+ return ret; // bit 5 is always 1
+ case 3:
+ return m_mfp.iera;
+ case 4:
+ return m_mfp.ierb;
+ case 5:
+ return m_mfp.ipra;
+ case 6:
+ return m_mfp.iprb;
+ case 7:
+ if(m_mfp.eoi_mode == 0) // forced low in auto EOI mode
+ return 0;
+ else
+ return m_mfp.isra;
+ case 8:
+ if(m_mfp.eoi_mode == 0) // forced low in auto EOI mode
+ return 0;
+ else
+ return m_mfp.isrb;
+ case 9:
+ return m_mfp.imra;
+ case 10:
+ return m_mfp.imrb;
+ case 15: // TADR
+ return m_mfp.timer[0].counter; // Timer data registers return their main counter values
+ case 16: // TBDR
+ return m_mfp.timer[1].counter;
+ case 17: // TCDR
+ return m_mfp.timer[2].counter;
+ case 18: // TDDR
+ return m_mfp.timer[3].counter;
#endif
- case 21: // RSR
- return m_mfp.rsr;
- case 22: // TSR
- return m_mfp.tsr | 0x80; // buffer is typically empty?
- case 23:
- return x68k_keyboard_pop_scancode();
- default:
+ case 21: // RSR
+ return m_mfp.rsr;
+ case 22: // TSR
+ return m_mfp.tsr | 0x80; // buffer is typically empty?
+ case 23:
+ return x68k_keyboard_pop_scancode();
+ default:
if (ACCESSING_BITS_0_7) return m_mfpdev->read(space, offset);
- }
- return 0xffff;
+ }
+ return 0xffff;
}
WRITE16_MEMBER(x68k_state::x68k_mfp_w)
{
/* For the Interrupt registers, the bits are set out as such:
- Reg A - bit 7: GPIP7 (HSync)
- bit 6: GPIP6 (CRTC CIRQ)
- bit 5: Timer A
- bit 4: Receive buffer full
- bit 3: Receive error
- bit 2: Transmit buffer empty
- bit 1: Transmit error
- bit 0: Timer B
- Reg B - bit 7: GPIP5 (Unused, always 1)
- bit 6: GPIP4 (VSync)
- bit 5: Timer C
- bit 4: Timer D
- bit 3: GPIP3 (FM IRQ)
- bit 2: GPIP2 (Power switch)
- bit 1: GPIP1 (EXPON)
- bit 0: GPIP0 (Alarm)
- */
+ Reg A - bit 7: GPIP7 (HSync)
+ bit 6: GPIP6 (CRTC CIRQ)
+ bit 5: Timer A
+ bit 4: Receive buffer full
+ bit 3: Receive error
+ bit 2: Transmit buffer empty
+ bit 1: Transmit error
+ bit 0: Timer B
+ Reg B - bit 7: GPIP5 (Unused, always 1)
+ bit 6: GPIP4 (VSync)
+ bit 5: Timer C
+ bit 4: Timer D
+ bit 3: GPIP3 (FM IRQ)
+ bit 2: GPIP2 (Power switch)
+ bit 1: GPIP1 (EXPON)
+ bit 0: GPIP0 (Alarm)
+ */
switch(offset)
{
#if 0
- case 0: // GPDR
- // All bits are inputs generally, so no action taken.
- break;
- case 1: // AER
- m_mfp.aer = data;
- break;
- case 2: // DDR
- m_mfp.ddr = data; // usually all bits are 0 (input)
- break;
- case 3: // IERA
- m_mfp.iera = data;
- break;
- case 4: // IERB
- m_mfp.ierb = data;
- break;
- case 5: // IPRA
- m_mfp.ipra = data;
- break;
- case 6: // IPRB
- m_mfp.iprb = data;
- break;
- case 7:
- m_mfp.isra = data;
- break;
- case 8:
- m_mfp.isrb = data;
- break;
- case 9:
- m_mfp.imra = data;
+ case 0: // GPDR
+ // All bits are inputs generally, so no action taken.
+ break;
+ case 1: // AER
+ m_mfp.aer = data;
+ break;
+ case 2: // DDR
+ m_mfp.ddr = data; // usually all bits are 0 (input)
+ break;
+ case 3: // IERA
+ m_mfp.iera = data;
+ break;
+ case 4: // IERB
+ m_mfp.ierb = data;
+ break;
+ case 5: // IPRA
+ m_mfp.ipra = data;
+ break;
+ case 6: // IPRB
+ m_mfp.iprb = data;
+ break;
+ case 7:
+ m_mfp.isra = data;
+ break;
+ case 8:
+ m_mfp.isrb = data;
+ break;
+ case 9:
+ m_mfp.imra = data;
// mfp_update_irq(0);
// logerror("MFP: IRQ Mask A write: %02x\n",data);
- break;
- case 10:
- m_mfp.imrb = data;
+ break;
+ case 10:
+ m_mfp.imrb = data;
// mfp_update_irq(0);
// logerror("MFP: IRQ Mask B write: %02x\n",data);
- break;
- case 11: // VR
- m_mfp.vr = 0x40;//data; // High 4 bits = high 4 bits of IRQ vector
- m_mfp.eoi_mode = data & 0x08; // 0 = Auto, 1 = Software End-of-interrupt
- if(m_mfp.eoi_mode == 0) // In-service registers are cleared if this bit is cleared.
- {
- m_mfp.isra = 0;
- m_mfp.isrb = 0;
- }
- break;
- case 12: // TACR
- m_mfp.tacr = data;
- mfp_set_timer(0,data & 0x0f);
- break;
- case 13: // TBCR
- m_mfp.tbcr = data;
- mfp_set_timer(1,data & 0x0f);
- break;
- case 14: // TCDCR
- m_mfp.tcdcr = data;
- mfp_set_timer(2,(data & 0x70)>>4);
- mfp_set_timer(3,data & 0x07);
- break;
- case 15: // TADR
- m_mfp.tadr = data;
- m_mfp.timer[0].counter = data;
- break;
- case 16: // TBDR
- m_mfp.tbdr = data;
- m_mfp.timer[1].counter = data;
- break;
- case 17: // TCDR
- m_mfp.tcdr = data;
- m_mfp.timer[2].counter = data;
- break;
- case 18: // TDDR
- m_mfp.tddr = data;
- m_mfp.timer[3].counter = data;
- break;
- case 20:
- m_mfp.ucr = data;
- break;
+ break;
+ case 11: // VR
+ m_mfp.vr = 0x40;//data; // High 4 bits = high 4 bits of IRQ vector
+ m_mfp.eoi_mode = data & 0x08; // 0 = Auto, 1 = Software End-of-interrupt
+ if(m_mfp.eoi_mode == 0) // In-service registers are cleared if this bit is cleared.
+ {
+ m_mfp.isra = 0;
+ m_mfp.isrb = 0;
+ }
+ break;
+ case 12: // TACR
+ m_mfp.tacr = data;
+ mfp_set_timer(0,data & 0x0f);
+ break;
+ case 13: // TBCR
+ m_mfp.tbcr = data;
+ mfp_set_timer(1,data & 0x0f);
+ break;
+ case 14: // TCDCR
+ m_mfp.tcdcr = data;
+ mfp_set_timer(2,(data & 0x70)>>4);
+ mfp_set_timer(3,data & 0x07);
+ break;
+ case 15: // TADR
+ m_mfp.tadr = data;
+ m_mfp.timer[0].counter = data;
+ break;
+ case 16: // TBDR
+ m_mfp.tbdr = data;
+ m_mfp.timer[1].counter = data;
+ break;
+ case 17: // TCDR
+ m_mfp.tcdr = data;
+ m_mfp.timer[2].counter = data;
+ break;
+ case 18: // TDDR
+ m_mfp.tddr = data;
+ m_mfp.timer[3].counter = data;
+ break;
+ case 20:
+ m_mfp.ucr = data;
+ break;
#endif
case 21:
if(data & 0x01)
@@ -1625,7 +1625,7 @@ TIMER_CALLBACK_MEMBER(x68k_state::x68k_bus_error)
READ16_MEMBER(x68k_state::x68k_rom0_r)
{
/* this location contains the address of some expansion device ROM, if no ROM exists,
- then access causes a bus error */
+ then access causes a bus error */
m_current_vector[2] = 0x02; // bus error
m_current_irq_line = 2;
// machine().device("maincpu")->execute().set_input_line_and_vector(2,ASSERT_LINE,m_current_vector[2]);
@@ -1642,7 +1642,7 @@ READ16_MEMBER(x68k_state::x68k_rom0_r)
WRITE16_MEMBER(x68k_state::x68k_rom0_w)
{
/* this location contains the address of some expansion device ROM, if no ROM exists,
- then access causes a bus error */
+ then access causes a bus error */
m_current_vector[2] = 0x02; // bus error
m_current_irq_line = 2;
// machine().device("maincpu")->execute().set_input_line_and_vector(2,ASSERT_LINE,m_current_vector[2]);
@@ -1658,7 +1658,7 @@ WRITE16_MEMBER(x68k_state::x68k_rom0_w)
READ16_MEMBER(x68k_state::x68k_emptyram_r)
{
/* this location is unused RAM, access here causes a bus error
- Often a method for detecting amount of installed RAM, is to read or write at 1MB intervals, until a bus error occurs */
+ Often a method for detecting amount of installed RAM, is to read or write at 1MB intervals, until a bus error occurs */
m_current_vector[2] = 0x02; // bus error
m_current_irq_line = 2;
// machine().device("maincpu")->execute().set_input_line_and_vector(2,ASSERT_LINE,m_current_vector[2]);
@@ -1675,7 +1675,7 @@ READ16_MEMBER(x68k_state::x68k_emptyram_r)
WRITE16_MEMBER(x68k_state::x68k_emptyram_w)
{
/* this location is unused RAM, access here causes a bus error
- Often a method for detecting amount of installed RAM, is to read or write at 1MB intervals, until a bus error occurs */
+ Often a method for detecting amount of installed RAM, is to read or write at 1MB intervals, until a bus error occurs */
m_current_vector[2] = 0x02; // bus error
m_current_irq_line = 2;
// machine().device("maincpu")->execute().set_input_line_and_vector(2,ASSERT_LINE,m_current_vector[2]);
@@ -1991,18 +1991,18 @@ WRITE_LINE_MEMBER( x68k_state::mfp_tdo_w )
static MC68901_INTERFACE( mfp_interface )
{
- 4000000, /* timer clock */
- 0, /* receive clock */
- 0, /* transmit clock */
- DEVCB_DRIVER_LINE_MEMBER(x68k_state,mfp_irq_callback), /* interrupt */
- DEVCB_DRIVER_MEMBER(x68k_state, mfp_gpio_r), /* GPIO read */
- DEVCB_NULL, /* GPIO write */
- DEVCB_NULL, /* TAO */
- DEVCB_NULL, /* TBO */
- DEVCB_NULL, /* TCO */
- DEVCB_DRIVER_LINE_MEMBER(x68k_state, mfp_tdo_w), /* TDO */
- DEVCB_NULL, /* serial input */
- DEVCB_NULL, /* serial output */
+ 4000000, /* timer clock */
+ 0, /* receive clock */
+ 0, /* transmit clock */
+ DEVCB_DRIVER_LINE_MEMBER(x68k_state,mfp_irq_callback), /* interrupt */
+ DEVCB_DRIVER_MEMBER(x68k_state, mfp_gpio_r), /* GPIO read */
+ DEVCB_NULL, /* GPIO write */
+ DEVCB_NULL, /* TAO */
+ DEVCB_NULL, /* TBO */
+ DEVCB_NULL, /* TCO */
+ DEVCB_DRIVER_LINE_MEMBER(x68k_state, mfp_tdo_w), /* TDO */
+ DEVCB_NULL, /* serial input */
+ DEVCB_NULL, /* serial output */
DEVCB_NULL,
DEVCB_NULL
};
@@ -2058,23 +2058,23 @@ static INPUT_PORTS_START( x68000 )
// TODO: Sharp Cyber Stick (CZ-8NJ2) support
PORT_START( "joy1" )
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(1) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0x0f, EQUALS, 0x00)
PORT_START( "joy2" )
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(2) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("ctrltype", 0xf0, EQUALS, 0x00)
PORT_START( "key1" )
@@ -2203,14 +2203,14 @@ static INPUT_PORTS_START( x68000 )
PORT_START("options")
PORT_CONFNAME( 0x01, 0x01, "Enable keyboard hack")
- PORT_CONFSETTING( 0x00, DEF_STR( Off ))
- PORT_CONFSETTING( 0x01, DEF_STR( On ))
+ PORT_CONFSETTING( 0x00, DEF_STR( Off ))
+ PORT_CONFSETTING( 0x01, DEF_STR( On ))
PORT_CONFNAME( 0x02, 0x02, "Enable fake bus errors")
- PORT_CONFSETTING( 0x00, DEF_STR( Off ))
- PORT_CONFSETTING( 0x02, DEF_STR( On ))
+ PORT_CONFSETTING( 0x00, DEF_STR( Off ))
+ PORT_CONFSETTING( 0x02, DEF_STR( On ))
PORT_CONFNAME( 0x04, 0x04, "Enable partial updates on each HSync")
- PORT_CONFSETTING( 0x00, DEF_STR( Off ))
- PORT_CONFSETTING( 0x04, DEF_STR( On ))
+ PORT_CONFSETTING( 0x00, DEF_STR( Off ))
+ PORT_CONFSETTING( 0x04, DEF_STR( On ))
PORT_START("mouse1") // mouse buttons
PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_NAME("Left mouse button") PORT_CODE(MOUSECODE_BUTTON1)
@@ -2415,8 +2415,8 @@ SLOT_INTERFACE_END
MACHINE_RESET_MEMBER(x68k_state,x68000)
{
/* The last half of the IPLROM is mapped to 0x000000 on reset only
- Just copying the inital stack pointer and program counter should
- more or less do the same job */
+ Just copying the inital stack pointer and program counter should
+ more or less do the same job */
int drive;
UINT8* romdata = memregion("user2")->base();
@@ -2625,7 +2625,7 @@ DRIVER_INIT_MEMBER(x68k_state,x68030)
}
FLOPPY_FORMATS_MEMBER( x68k_state::floppy_formats )
- FLOPPY_XDF_FORMAT
+ FLOPPY_XDF_FORMAT
FLOPPY_FORMATS_END
static SLOT_INTERFACE_START( x68k_floppies )