micro3d: Use ADC0844 device and fix throttle regression

The throttle has been broken since 0.154.
This commit is contained in:
Dirk Best 2017-11-07 13:26:52 +01:00
parent 8161629eb5
commit 46296ff713
3 changed files with 21 additions and 46 deletions

View File

@ -30,6 +30,7 @@
#include "cpu/am29000/am29000.h"
#include "cpu/m68000/m68000.h"
#include "cpu/mcs51/mcs51.h"
#include "machine/adc0844.h"
#include "machine/mc68681.h"
#include "machine/mc68901.h"
#include "machine/nvram.h"
@ -210,7 +211,7 @@ static ADDRESS_MAP_START( hostmem, AS_PROGRAM, 16, micro3d_state )
AM_RANGE(0x920000, 0x920001) AM_READ_PORT("INPUTS_C_D")
AM_RANGE(0x940000, 0x940001) AM_READ_PORT("INPUTS_A_B")
AM_RANGE(0x960000, 0x960001) AM_WRITE(micro3d_reset_w)
AM_RANGE(0x980000, 0x980001) AM_READWRITE(micro3d_adc_r, micro3d_adc_w)
AM_RANGE(0x980000, 0x980001) AM_DEVREADWRITE8("adc", adc0844_device, read, write, 0x00ff)
AM_RANGE(0x9a0000, 0x9a0007) AM_DEVREADWRITE("vgb", tms34010_device, host_r, host_w)
AM_RANGE(0x9c0000, 0x9c0001) AM_NOP /* Lamps */
AM_RANGE(0x9e0000, 0x9e002f) AM_DEVREADWRITE8("mc68901", mc68901_device, read, write, 0xff00)
@ -340,6 +341,10 @@ static MACHINE_CONFIG_START( micro3d )
MCFG_SCREEN_UPDATE_DEVICE("vgb", tms34010_device, tms340x0_ind16)
MCFG_SCREEN_PALETTE("palette")
MCFG_ADC0844_ADD("adc")
MCFG_ADC0844_INTR_CB(DEVWRITELINE("mc68901", mc68901_device, i3_w))
MCFG_ADC0844_CH1_CB(IOPORT("THROTTLE"))
MCFG_ADC0844_CH2_CB(READ8(micro3d_state, adc_volume_r))
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -360,6 +365,12 @@ static MACHINE_CONFIG_START( micro3d )
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END
MACHINE_CONFIG_DERIVED( tankbatl, micro3d )
MCFG_DEVICE_MODIFY("adc")
MCFG_ADC0844_CH1_CB(NOOP)
MCFG_ADC0844_CH2_CB(NOOP)
MACHINE_CONFIG_END
/*************************************
*
@ -645,8 +656,8 @@ ROM_END
*
*************************************/
GAME( 1991, f15se, 0, micro3d, f15se, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "F-15 Strike Eagle (rev. 2.2 02/25/91)", MACHINE_IMPERFECT_SOUND )
GAME( 1991, f15se21, f15se, micro3d, f15se, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "F-15 Strike Eagle (rev. 2.1 02/04/91)", MACHINE_IMPERFECT_SOUND )
GAME( 1992, botss, 0, micro3d, botss, micro3d_state, botss, ROT0, "Microprose Games Inc.", "Battle of the Solar System (rev. 1.1a 7/23/92)", MACHINE_IMPERFECT_SOUND )
GAME( 1992, botss11, botss, micro3d, botss11, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "Battle of the Solar System (rev. 1.1 3/24/92)", MACHINE_IMPERFECT_SOUND )
GAME( 1992, tankbatl, 0, micro3d, tankbatl, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "Tank Battle (prototype rev. 4/21/92)", MACHINE_IMPERFECT_SOUND )
GAME( 1991, f15se, 0, micro3d, f15se, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "F-15 Strike Eagle (rev. 2.2 02/25/91)", MACHINE_IMPERFECT_SOUND )
GAME( 1991, f15se21, f15se, micro3d, f15se, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "F-15 Strike Eagle (rev. 2.1 02/04/91)", MACHINE_IMPERFECT_SOUND )
GAME( 1992, botss, 0, micro3d, botss, micro3d_state, botss, ROT0, "Microprose Games Inc.", "Battle of the Solar System (rev. 1.1a 7/23/92)", MACHINE_IMPERFECT_SOUND )
GAME( 1992, botss11, botss, micro3d, botss11, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "Battle of the Solar System (rev. 1.1 3/24/92)", MACHINE_IMPERFECT_SOUND )
GAME( 1992, tankbatl, 0, tankbatl, tankbatl, micro3d_state, micro3d, ROT0, "Microprose Games Inc.", "Tank Battle (prototype rev. 4/21/92)", MACHINE_IMPERFECT_SOUND )

View File

@ -43,8 +43,7 @@ class micro3d_state : public driver_device
public:
enum
{
TIMER_MAC_DONE,
TIMER_ADC_DONE
TIMER_MAC_DONE
};
micro3d_state(const machine_config &mconfig, device_type type, const char *tag)
@ -96,9 +95,6 @@ public:
int m_ti_uart_mode_cycle;
int m_ti_uart_sync_cycle;
/* ADC */
uint8_t m_adc_val;
/* Hardware version-check latch for BOTSS 1.1a */
uint8_t m_botss_latch;
@ -147,8 +143,7 @@ public:
DECLARE_WRITE32_MEMBER(micro3d_mac2_w);
DECLARE_READ16_MEMBER(micro3d_encoder_h_r);
DECLARE_READ16_MEMBER(micro3d_encoder_l_r);
DECLARE_READ16_MEMBER(micro3d_adc_r);
DECLARE_WRITE16_MEMBER(micro3d_adc_w);
DECLARE_READ8_MEMBER(adc_volume_r);
DECLARE_READ16_MEMBER(botss_140000_r);
DECLARE_READ16_MEMBER(botss_180000_r);
DECLARE_WRITE16_MEMBER(micro3d_reset_w);
@ -174,7 +169,6 @@ public:
virtual void video_reset() override;
INTERRUPT_GEN_MEMBER(micro3d_vblank);
TIMER_CALLBACK_MEMBER(mac_done_callback);
TIMER_CALLBACK_MEMBER(adc_done_callback);
DECLARE_WRITE8_MEMBER(micro3d_upd7759_w);
DECLARE_WRITE8_MEMBER(data_from_i8031);
DECLARE_READ8_MEMBER(data_to_i8031);

View File

@ -239,9 +239,6 @@ void micro3d_state::device_timer(emu_timer &timer, device_timer_id id, int param
case TIMER_MAC_DONE:
mac_done_callback(ptr, param);
break;
case TIMER_ADC_DONE:
adc_done_callback(ptr, param);
break;
default:
assert_always(false, "Unknown id in micro3d_state::device_timer");
}
@ -483,36 +480,9 @@ READ16_MEMBER(micro3d_state::micro3d_encoder_l_r)
return ((y_encoder & 0xff) << 8) | (x_encoder & 0xff);
}
TIMER_CALLBACK_MEMBER(micro3d_state::adc_done_callback)
READ8_MEMBER( micro3d_state::adc_volume_r )
{
switch (param)
{
case 0: m_adc_val = m_throttle.read_safe(0);
break;
case 1: m_adc_val = (uint8_t)((255.0/100.0) * m_volume->read() + 0.5);
break;
case 2: break;
case 3: break;
}
// mc68901_int_gen(machine(), GPIP3);
}
READ16_MEMBER(micro3d_state::micro3d_adc_r)
{
return m_adc_val;
}
WRITE16_MEMBER(micro3d_state::micro3d_adc_w)
{
/* Only handle single-ended mode */
if (data < 4 || data > 7)
{
logerror("ADC0844 unhandled MUX mode: %x\n", data);
return;
}
timer_set(attotime::from_usec(40), TIMER_ADC_DONE, data & ~4);
return (uint8_t)((255.0/100.0) * m_volume->read() + 0.5);
}
CUSTOM_INPUT_MEMBER(micro3d_state::botss_hwchk_r)