From 46296ff713db83591ee5f79111f24f93e9d8ddf7 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Tue, 7 Nov 2017 13:26:52 +0100 Subject: [PATCH] micro3d: Use ADC0844 device and fix throttle regression The throttle has been broken since 0.154. --- src/mame/drivers/micro3d.cpp | 23 +++++++++++++++++------ src/mame/includes/micro3d.h | 10 ++-------- src/mame/machine/micro3d.cpp | 34 ++-------------------------------- 3 files changed, 21 insertions(+), 46 deletions(-) diff --git a/src/mame/drivers/micro3d.cpp b/src/mame/drivers/micro3d.cpp index b2dc7d7ba21..24d06c23a71 100644 --- a/src/mame/drivers/micro3d.cpp +++ b/src/mame/drivers/micro3d.cpp @@ -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 ) diff --git a/src/mame/includes/micro3d.h b/src/mame/includes/micro3d.h index eeb57b3dbcf..726a7eef87f 100644 --- a/src/mame/includes/micro3d.h +++ b/src/mame/includes/micro3d.h @@ -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); diff --git a/src/mame/machine/micro3d.cpp b/src/mame/machine/micro3d.cpp index 512a9483b53..e57bf7695a2 100644 --- a/src/mame/machine/micro3d.cpp +++ b/src/mame/machine/micro3d.cpp @@ -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)