-tankbatt: Added netlist audio. [Ryan Holtz]
This commit is contained in:
parent
88bfa9826d
commit
48be14bade
@ -2975,6 +2975,8 @@ files {
|
|||||||
MAME_DIR .. "src/mame/includes/skykid.h",
|
MAME_DIR .. "src/mame/includes/skykid.h",
|
||||||
MAME_DIR .. "src/mame/video/skykid.cpp",
|
MAME_DIR .. "src/mame/video/skykid.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/sweetland.cpp",
|
MAME_DIR .. "src/mame/drivers/sweetland.cpp",
|
||||||
|
MAME_DIR .. "src/mame/audio/nl_tankbatt.h",
|
||||||
|
MAME_DIR .. "src/mame/audio/nl_tankbatt.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/tankbatt.cpp",
|
MAME_DIR .. "src/mame/drivers/tankbatt.cpp",
|
||||||
MAME_DIR .. "src/mame/includes/tankbatt.h",
|
MAME_DIR .. "src/mame/includes/tankbatt.h",
|
||||||
MAME_DIR .. "src/mame/video/tankbatt.cpp",
|
MAME_DIR .. "src/mame/video/tankbatt.cpp",
|
||||||
|
@ -595,7 +595,7 @@
|
|||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Source: src/lib/netlist/devices/nld_4006.cpp
|
// Source: src/lib/netlist/devices/nld_4006.cpp
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// usage : CD4006(name, pCLOCK, pD1, pD2, pD3, pD4, pD1P4, pD1P4S, pD2P4, pD2P5, pD3P4, pD4P4, pD3P5)
|
// usage : CD4006(name, pCLOCK, pD1, pD2, pD3, pD4, pD1P4, pD1P4S, pD2P4, pD2P5, pD3P4, pD4P4, pD4P5)
|
||||||
// auto connect: VCC, GND
|
// auto connect: VCC, GND
|
||||||
#define CD4006(...) \
|
#define CD4006(...) \
|
||||||
NET_REGISTER_DEVEXT(CD4006, __VA_ARGS__)
|
NET_REGISTER_DEVEXT(CD4006, __VA_ARGS__)
|
||||||
|
165
src/mame/audio/nl_tankbatt.cpp
Normal file
165
src/mame/audio/nl_tankbatt.cpp
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Ryan Holtz
|
||||||
|
|
||||||
|
//
|
||||||
|
// Netlist for Tank Battalion
|
||||||
|
//
|
||||||
|
// Derived from the schematics in the manual.
|
||||||
|
//
|
||||||
|
// Known problems/issues:
|
||||||
|
//
|
||||||
|
// * None.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "netlist/devices/net_lib.h"
|
||||||
|
#include "nl_tankbatt.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Main netlist
|
||||||
|
//
|
||||||
|
|
||||||
|
NETLIST_START(tankbatt)
|
||||||
|
|
||||||
|
SOLVER(Solver, 48000)
|
||||||
|
ANALOG_INPUT(V5, 5)
|
||||||
|
ALIAS(VCC, V5)
|
||||||
|
|
||||||
|
CLOCK(2V, 4000) // 18.432MHz / (3 * 384 * 2)
|
||||||
|
CLOCK(4V, 2000) // 18.432MHz / (3 * 384 * 4)
|
||||||
|
|
||||||
|
TTL_INPUT(S1, 0) // active high
|
||||||
|
TTL_INPUT(S2, 0) // active high
|
||||||
|
TTL_INPUT(OFF, 1) // active high
|
||||||
|
TTL_INPUT(ENGINE_HI, 0) // active high
|
||||||
|
TTL_INPUT(SHOOT, 0) // active high
|
||||||
|
TTL_INPUT(HIT, 0) // active high
|
||||||
|
|
||||||
|
RES(R31, 470)
|
||||||
|
RES(R32, 470)
|
||||||
|
RES(R35, RES_K(4.7))
|
||||||
|
RES(R36, RES_K(4.7))
|
||||||
|
RES(R37, RES_K(6.8))
|
||||||
|
RES(R38, RES_K(10))
|
||||||
|
//RES(R41, RES_K(22))
|
||||||
|
RES(R42, RES_K(22))
|
||||||
|
RES(R43, RES_K(22))
|
||||||
|
RES(R44, RES_K(33))
|
||||||
|
RES(R45, RES_K(47))
|
||||||
|
RES(R46, RES_K(4.7)) // Possible schematic or scan-quality error: Schematic says 47K
|
||||||
|
RES(R47, RES_K(4.7))
|
||||||
|
RES(R48, RES_K(4.7))
|
||||||
|
RES(R49, RES_K(4.7)) // Possible schematic or scan-quality error: Schematic says 47K
|
||||||
|
RES(R50, RES_K(150))
|
||||||
|
RES(R51, RES_K(150))
|
||||||
|
RES(R52, RES_K(220))
|
||||||
|
RES(R53, RES_K(470))
|
||||||
|
RES(R54, RES_K(470))
|
||||||
|
RES(R56_1, RES_K(1))
|
||||||
|
RES(R56_2, RES_K(1))
|
||||||
|
RES(R57, RES_K(10))
|
||||||
|
RES(R58, RES_K(1))
|
||||||
|
RES(R59, RES_K(1))
|
||||||
|
RES(R60, RES_K(1))
|
||||||
|
RES(R61, RES_K(1))
|
||||||
|
|
||||||
|
CAP(C10, CAP_U(2.2))
|
||||||
|
CAP(C11, CAP_U(2.2))
|
||||||
|
CAP(C12, CAP_U(2.2))
|
||||||
|
CAP(C13, CAP_U(2.2))
|
||||||
|
CAP(C14, CAP_U(0.1))
|
||||||
|
CAP(C15, CAP_U(0.01))
|
||||||
|
CAP(C16, CAP_U(0.01))
|
||||||
|
CAP(C17, CAP_U(0.01))
|
||||||
|
CAP(C18, CAP_U(0.01))
|
||||||
|
CAP(C42, CAP_U(0.1))
|
||||||
|
|
||||||
|
DIODE(D8, "D") // Generic diodes, types not listed on schematic
|
||||||
|
DIODE(D9, "D")
|
||||||
|
DIODE(D10, "D")
|
||||||
|
DIODE(D11, "D")
|
||||||
|
|
||||||
|
CD4006(_6F)
|
||||||
|
CD4066_DIP(_6L)
|
||||||
|
LM324_DIP(_6J)
|
||||||
|
TTL_7486_DIP(_6K)
|
||||||
|
TTL_7492_DIP(_5K)
|
||||||
|
|
||||||
|
NET_C(VCC, _5K.5, _6F.VDD, _6J.4, _6K.7, _6L.14, S1.VCC, S2.VCC, OFF.VCC, ENGINE_HI.VCC, SHOOT.VCC, HIT.VCC, 2V.VCC, 4V.VCC)
|
||||||
|
NET_C(GND, _5K.10, _6F.VSS, _6J.11, _6K.14, _6L.7, S1.GND, S2.GND, OFF.GND, ENGINE_HI.GND, SHOOT.GND, HIT.GND, 2V.GND, 4V.GND)
|
||||||
|
|
||||||
|
// Noise generation (presumably)
|
||||||
|
NET_C(_6F.CLOCK, 2V)
|
||||||
|
NET_C(_6F.D1P4, _6F.D3)
|
||||||
|
NET_C(_6F.D3P4, _6F.D4, _6L.12, _6L.6)
|
||||||
|
NET_C(_6F.D1, _6F.D2P5, _6K.A.A)
|
||||||
|
NET_C(_6F.D4P4, _6K.A.B)
|
||||||
|
NET_C(_6K.A.Q, R38.1)
|
||||||
|
NET_C(_6F.D2, R38.2, D9.K)
|
||||||
|
NET_C(_6F.D4P5, D8.A, R53.1)
|
||||||
|
NET_C(D8.K, R53.2, C42.1, _6J.2)
|
||||||
|
NET_C(_6J.1, C42.2, D9.A)
|
||||||
|
NET_C(_6J.3, C12.1, R43.1, R44.1, _6J.12, _6J.10)
|
||||||
|
NET_C(C12.2, GND)
|
||||||
|
NET_C(R43.2, GND)
|
||||||
|
NET_C(R44.2, V5)
|
||||||
|
|
||||||
|
// S1
|
||||||
|
NET_C(S1.Q, _6L.5)
|
||||||
|
NET_C(4V, _6L.4)
|
||||||
|
NET_C(_6L.3, R35.1)
|
||||||
|
|
||||||
|
// S2
|
||||||
|
NET_C(S2.Q, _6L.13)
|
||||||
|
NET_C(2V, _6L.1)
|
||||||
|
NET_C(_6L.2, R36.1)
|
||||||
|
|
||||||
|
// Hit
|
||||||
|
NET_C(HIT.Q, R31.1)
|
||||||
|
NET_C(R31.2, D10.A)
|
||||||
|
NET_C(D10.K, C10.1, _6L.8)
|
||||||
|
NET_C(C10.2, GND)
|
||||||
|
NET_C(_6L.9, R50.1)
|
||||||
|
NET_C(R50.2, R42.1, C15.1, C16.1)
|
||||||
|
NET_C(R42.2, GND)
|
||||||
|
NET_C(C16.2, R54.1, _6J.9)
|
||||||
|
NET_C(C15.2, R54.2, _6J.8, R56_1.1)
|
||||||
|
|
||||||
|
// Shoot
|
||||||
|
NET_C(SHOOT.Q, R32.1)
|
||||||
|
NET_C(R32.2, D11.A)
|
||||||
|
NET_C(D11.K, C11.1, _6L.11)
|
||||||
|
NET_C(C11.2, GND)
|
||||||
|
NET_C(_6L.10, R45.1)
|
||||||
|
NET_C(R45.2, R37.1, C17.1, C18.1)
|
||||||
|
NET_C(R37.2, GND)
|
||||||
|
NET_C(C18.2, R51.1, _6J.13)
|
||||||
|
NET_C(C17.2, R51.2, _6J.14, R56_2.1)
|
||||||
|
|
||||||
|
// Engine Rumble
|
||||||
|
NET_C(ENGINE_HI.Q, _6K.B.A)
|
||||||
|
NET_C(_6K.B.B, _6K.C.Q)
|
||||||
|
NET_C(_6K.B.Q, R52.1, _5K.1)
|
||||||
|
NET_C(R52.2, R46.1, _6J.6, C14.1)
|
||||||
|
NET_C(C14.2, GND)
|
||||||
|
NET_C(_6J.5, R47.1, R48.1, R49.1)
|
||||||
|
NET_C(R47.2, V5)
|
||||||
|
NET_C(R48.2, GND)
|
||||||
|
NET_C(R49.2, R57.1, _6J.7, R46.2, _6K.C.A)
|
||||||
|
NET_C(R57.2, GND)
|
||||||
|
NET_C(_6K.C.B, VCC)
|
||||||
|
NET_C(_5K.7, VCC)
|
||||||
|
NET_C(_5K.6, OFF.Q)
|
||||||
|
NET_C(_5K.11, R60.1, _6K.D.A)
|
||||||
|
NET_C(_5K.8, R58.1, _6K.D.B)
|
||||||
|
NET_C(_6K.D.Q, _5K.14)
|
||||||
|
NET_C(_5K.12, R61.1)
|
||||||
|
NET_C(R58.2, R60.2, R61.2, C13.1, R59.1)
|
||||||
|
NET_C(C13.2, GND)
|
||||||
|
|
||||||
|
// Mixing
|
||||||
|
//NET_C(R56_1.2, R56_2.2)
|
||||||
|
//NET_C(R35.2, R36.2)
|
||||||
|
//NET_C(R56_2.2, R59.2)
|
||||||
|
NET_C(R35.2, R36.2, R56_1.2, R56_2.2, R59.2)
|
||||||
|
//NET_C(R41.2, GND)
|
||||||
|
NETLIST_END()
|
10
src/mame/audio/nl_tankbatt.h
Normal file
10
src/mame/audio/nl_tankbatt.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Ryan Holtz
|
||||||
|
#ifndef MAME_AUDIO_NL_TANKBATT_H
|
||||||
|
#define MAME_AUDIO_NL_TANKBATT_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
NETLIST_EXTERNAL(tankbatt)
|
||||||
|
|
||||||
|
#endif // MAME_AUDIO_NL_TANKBATT_H
|
@ -6,49 +6,71 @@ Tank Battalion memory map (verified)
|
|||||||
|
|
||||||
driver by Brad Oliver
|
driver by Brad Oliver
|
||||||
|
|
||||||
$0000-$000f : bullet ram, first entry is player's bullet
|
Memory Map:
|
||||||
$0010-$01ff : zero page & stack
|
$0000-$03ff : Work RAM 0
|
||||||
$0200-$07ff : RAM
|
$0400-$07ff : Work RAM 1
|
||||||
$0800-$0bff : videoram
|
$0800-$0bff : VRAM
|
||||||
$0c00-$0c1f : I/O
|
$0c00-$0fff : I/O
|
||||||
|
$2000-$3fff : ROM
|
||||||
|
|
||||||
Read:
|
A 4-bit BCD value is created from the following four bits:
|
||||||
$0c00-$0c03 : p1 joystick
|
Bit 0: A3
|
||||||
$0c04
|
Bit 1: A4
|
||||||
$0c07 : stop at grid self-test if bit 7 is low
|
Bit 2: Read
|
||||||
$0c0f : stop at first self-test if bit 7 is low
|
Bit 3: !(A10 & A11)
|
||||||
|
|
||||||
$0c18 : Cabinet, 0 = table, 1 = upright
|
For writes, the following upper ranges are decoded:
|
||||||
$0c19-$0c1a : Coinage, 00 = free play, 01 = 2 coin 1 credit, 10 = 1 coin 2 credits, 11 = 1 coin 1 credit
|
xxxx 11xx xxx0 0xxx: OUT0
|
||||||
$0c1b-$0c1c : Bonus, 00 = 10000, 01 = 15000, 10 = 20000, 11 = none
|
xxxx 11xx xxx0 1xxx: OUT1
|
||||||
$0c1d : Tanks, 0 = 3, 1 = 2
|
xxxx 11xx xxx1 0xxx: INTACK
|
||||||
$0c1e-$0c1f : ??
|
xxxx 11xx xxx1 1xxx: Watchdog
|
||||||
|
|
||||||
Write:
|
For reads, the following upper ranges are decoded:
|
||||||
$0c00-$0c01 : p1/p2 start leds
|
xxxx 11xx xxx0 0xxx: IN0
|
||||||
$0c02 : ?? written to at end of IRQ, either 0 or 1 - coin counter?
|
xxxx 11xx xxx0 1xxx: IN1
|
||||||
$0c03 : ?? written to during IRQ if grid test is on
|
xxxx 11xx xxx1 0xxx: -
|
||||||
$0c08 : ?? written to during IRQ if grid test is on
|
xxxx 11xx xxx1 1xxx: DIP switches
|
||||||
$0c09 : Sound - coin ding
|
|
||||||
$0c0a : Sound enable (active low) ?? game only ??
|
|
||||||
$0c0b : Sound - background noise, 0 - low rumble, 1 - high rumble
|
|
||||||
$0c0c : Sound - player fire
|
|
||||||
$0c0d : Sound - explosion
|
|
||||||
$0c0f : NMI enable (active high) ?? demo only ??
|
|
||||||
|
|
||||||
$0c10 : IRQ ack (written at the end of the irq routine)
|
OUT0:
|
||||||
$0c18 : Watchdog
|
000: Edge Pin F P1 LED (schematic states Unused)
|
||||||
|
001: Edge Pin 6 P2 LED (schematic states Unused)
|
||||||
|
010: Edge Pin H Coin Counter (schematic states Unused)
|
||||||
|
011: Edge Pin 7 Coin Lockout (schematic states Coin Counter)
|
||||||
|
1xx: Unused
|
||||||
|
|
||||||
$2000-$3fff : ROM (A14, A15 not decoded)
|
OUT1:
|
||||||
|
000: S1 (Square Wave 1, connected to 2V)
|
||||||
|
001: S2 (Square Wave 2, connected to 4V)
|
||||||
|
010: Sound off (1), on (0)
|
||||||
|
011: Rumble hi (1), rumble low (0)
|
||||||
|
100: Shoot sound effect
|
||||||
|
101: Hit sound effect
|
||||||
|
110: Unused
|
||||||
|
111: NMI Enable
|
||||||
|
|
||||||
|
IN0:
|
||||||
|
000: Edge Pin Y Joystick Up
|
||||||
|
001: Edge Pin M Joystick Left
|
||||||
|
010: Edge Pin 14 Joystick Down
|
||||||
|
011: Edge Pin 11 Joystick Right
|
||||||
|
100: Edge Pin N Shoot
|
||||||
|
101: Edge Pin J Coin 1
|
||||||
|
110: Edge Pin 8 Coin 2
|
||||||
|
111: Edge Pin 9 Service Switch
|
||||||
|
|
||||||
|
IN1:
|
||||||
|
000: Edge Pin 21 Joystick Up (Cocktail)
|
||||||
|
001: Edge Pin P Joystick Left (Cocktail)
|
||||||
|
010: Edge Pin V Joystick Down (Cocktail)
|
||||||
|
011: Edge Pin 13 Joystick Right (Cocktail)
|
||||||
|
100: Edge Pin 12 Shoot (Cocktail)
|
||||||
|
101: Edge Pin L P1 Start
|
||||||
|
110: Edge Pin 10 P2 Start
|
||||||
|
111: Edge Pin K Test DIP Switch
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
. Needs proper discrete emulation
|
|
||||||
. Resistor values on the color prom need to be corrected
|
. Resistor values on the color prom need to be corrected
|
||||||
|
|
||||||
Known issues:
|
|
||||||
. The 'moving' tank rumble noise seems to keep playing a second too long
|
|
||||||
. Sample support is all a crapshoot. I have no idea how it really works
|
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -58,7 +80,6 @@ Known issues:
|
|||||||
#include "machine/74259.h"
|
#include "machine/74259.h"
|
||||||
#include "machine/input_merger.h"
|
#include "machine/input_merger.h"
|
||||||
#include "machine/watchdog.h"
|
#include "machine/watchdog.h"
|
||||||
#include "sound/samples.h"
|
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
@ -70,62 +91,17 @@ void tankbatt_state::machine_start()
|
|||||||
|
|
||||||
uint8_t tankbatt_state::in0_r(offs_t offset)
|
uint8_t tankbatt_state::in0_r(offs_t offset)
|
||||||
{
|
{
|
||||||
int val;
|
return BIT(m_player_input[0]->read(), offset) << 7;
|
||||||
|
|
||||||
val = ioport("P1")->read();
|
|
||||||
return ((val << (7 - offset)) & 0x80);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t tankbatt_state::in1_r(offs_t offset)
|
uint8_t tankbatt_state::in1_r(offs_t offset)
|
||||||
{
|
{
|
||||||
int val;
|
return BIT(m_player_input[1]->read(), offset) << 7;
|
||||||
|
|
||||||
val = ioport("P2")->read();
|
|
||||||
return ((val << (7 - offset)) & 0x80);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t tankbatt_state::dsw_r(offs_t offset)
|
uint8_t tankbatt_state::dsw_r(offs_t offset)
|
||||||
{
|
{
|
||||||
int val;
|
return BIT(m_dips->read(), offset) << 7;
|
||||||
|
|
||||||
val = ioport("DSW")->read();
|
|
||||||
return ((val << (7 - offset)) & 0x80);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(tankbatt_state::sound_off_w)
|
|
||||||
{
|
|
||||||
m_sound_enable = !state;
|
|
||||||
|
|
||||||
// turn off the engine noise
|
|
||||||
if (state) m_samples->stop(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(tankbatt_state::sh_expl_w)
|
|
||||||
{
|
|
||||||
if (state) // rising edge
|
|
||||||
{
|
|
||||||
m_samples->start(1, 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(tankbatt_state::sh_engine_w)
|
|
||||||
{
|
|
||||||
if (m_sound_enable)
|
|
||||||
{
|
|
||||||
if (state)
|
|
||||||
m_samples->start(2, 2, true);
|
|
||||||
else
|
|
||||||
m_samples->start(2, 1, true);
|
|
||||||
}
|
|
||||||
else m_samples->stop(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(tankbatt_state::sh_fire_w)
|
|
||||||
{
|
|
||||||
if (state) // rising edge
|
|
||||||
{
|
|
||||||
m_samples->start(0, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tankbatt_state::intack_w(uint8_t data)
|
void tankbatt_state::intack_w(uint8_t data)
|
||||||
@ -172,7 +148,7 @@ static INPUT_PORTS_START( tankbatt )
|
|||||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_TILT )
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE )
|
||||||
|
|
||||||
PORT_START("P2") /* IN1 */
|
PORT_START("P2") /* IN1 */
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
|
||||||
@ -237,17 +213,6 @@ GFXDECODE_END
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const char *const tankbatt_sample_names[] =
|
|
||||||
{
|
|
||||||
"*tankbatt",
|
|
||||||
"fire",
|
|
||||||
"engine1",
|
|
||||||
"engine2",
|
|
||||||
"explode1",
|
|
||||||
nullptr /* end of array */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void tankbatt_state::tankbatt(machine_config &config)
|
void tankbatt_state::tankbatt(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -268,12 +233,12 @@ void tankbatt_state::tankbatt(machine_config &config)
|
|||||||
// Q4 through Q7 are not connected
|
// Q4 through Q7 are not connected
|
||||||
|
|
||||||
cd4099_device &outlatch1(CD4099(config, "outlatch1")); // 4099 at 4H or 259 at 4J
|
cd4099_device &outlatch1(CD4099(config, "outlatch1")); // 4099 at 4H or 259 at 4J
|
||||||
outlatch1.q_out_cb<0>().set_nop(); // TODO: S1 tone
|
outlatch1.q_out_cb<0>().set(m_sound_s1, FUNC(netlist_mame_logic_input_device::write_line));
|
||||||
outlatch1.q_out_cb<1>().set_nop(); // TODO: S2 tone
|
outlatch1.q_out_cb<1>().set(m_sound_s2, FUNC(netlist_mame_logic_input_device::write_line));
|
||||||
outlatch1.q_out_cb<2>().set(FUNC(tankbatt_state::sound_off_w));
|
outlatch1.q_out_cb<2>().set(m_sound_off, FUNC(netlist_mame_logic_input_device::write_line));
|
||||||
outlatch1.q_out_cb<3>().set(FUNC(tankbatt_state::sh_engine_w));
|
outlatch1.q_out_cb<3>().set(m_sound_engine_hi, FUNC(netlist_mame_logic_input_device::write_line));
|
||||||
outlatch1.q_out_cb<4>().set(FUNC(tankbatt_state::sh_fire_w));
|
outlatch1.q_out_cb<4>().set(m_sound_shoot, FUNC(netlist_mame_logic_input_device::write_line));
|
||||||
outlatch1.q_out_cb<5>().set(FUNC(tankbatt_state::sh_expl_w)); // bit 7 also set by ASL instruction
|
outlatch1.q_out_cb<5>().set(m_sound_hit, FUNC(netlist_mame_logic_input_device::write_line));
|
||||||
// Q6 is not connected
|
// Q6 is not connected
|
||||||
outlatch1.q_out_cb<7>().set("nmigate", FUNC(input_merger_device::in_w<1>));
|
outlatch1.q_out_cb<7>().set("nmigate", FUNC(input_merger_device::in_w<1>));
|
||||||
|
|
||||||
@ -290,10 +255,18 @@ void tankbatt_state::tankbatt(machine_config &config)
|
|||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
SAMPLES(config, m_samples);
|
NETLIST_SOUND(config, "sound_nl", 48000)
|
||||||
m_samples->set_channels(3);
|
.set_source(NETLIST_NAME(tankbatt))
|
||||||
m_samples->set_samples_names(tankbatt_sample_names);
|
.add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||||
m_samples->add_route(ALL_OUTPUTS, "mono", 0.25);
|
|
||||||
|
NETLIST_LOGIC_INPUT(config, "sound_nl:s1", "S1.IN", 0);
|
||||||
|
NETLIST_LOGIC_INPUT(config, "sound_nl:s2", "S2.IN", 0);
|
||||||
|
NETLIST_LOGIC_INPUT(config, "sound_nl:off", "OFF.IN", 0);
|
||||||
|
NETLIST_LOGIC_INPUT(config, "sound_nl:engine_hi", "ENGINE_HI.IN", 0);
|
||||||
|
NETLIST_LOGIC_INPUT(config, "sound_nl:shoot", "SHOOT.IN", 0);
|
||||||
|
NETLIST_LOGIC_INPUT(config, "sound_nl:hit", "HIT.IN", 0);
|
||||||
|
|
||||||
|
NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "R35.2").set_mult_offset(10000.0, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "machine/timer.h"
|
#include "machine/timer.h"
|
||||||
#include "sound/samples.h"
|
#include "machine/netlist.h"
|
||||||
|
|
||||||
|
#include "netlist/nl_setup.h"
|
||||||
|
#include "audio/nl_tankbatt.h"
|
||||||
|
|
||||||
#include "emupal.h"
|
#include "emupal.h"
|
||||||
#include "tilemap.h"
|
#include "tilemap.h"
|
||||||
|
|
||||||
@ -16,37 +20,49 @@ public:
|
|||||||
tankbatt_state(const machine_config &mconfig, device_type type, const char *tag) :
|
tankbatt_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_samples(*this, "samples"),
|
|
||||||
m_gfxdecode(*this, "gfxdecode"),
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
m_palette(*this, "palette"),
|
m_palette(*this, "palette"),
|
||||||
m_bulletsram(*this, "bulletsram"),
|
m_bulletsram(*this, "bulletsram"),
|
||||||
m_videoram(*this, "videoram")
|
m_videoram(*this, "videoram"),
|
||||||
|
m_player_input(*this, "P%u", 1U),
|
||||||
|
m_dips(*this, "DSW"),
|
||||||
|
m_sound_s1(*this, "sound_nl:s1"),
|
||||||
|
m_sound_s2(*this, "sound_nl:s2"),
|
||||||
|
m_sound_off(*this, "sound_nl:off"),
|
||||||
|
m_sound_engine_hi(*this, "sound_nl:engine_hi"),
|
||||||
|
m_sound_shoot(*this, "sound_nl:shoot"),
|
||||||
|
m_sound_hit(*this, "sound_nl:hit")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void tankbatt(machine_config &config);
|
void tankbatt(machine_config &config);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<samples_device> m_samples;
|
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
required_device<palette_device> m_palette;
|
required_device<palette_device> m_palette;
|
||||||
|
|
||||||
required_shared_ptr<uint8_t> m_bulletsram;
|
required_shared_ptr<uint8_t> m_bulletsram;
|
||||||
required_shared_ptr<uint8_t> m_videoram;
|
required_shared_ptr<uint8_t> m_videoram;
|
||||||
|
|
||||||
|
required_ioport_array<2> m_player_input;
|
||||||
|
required_ioport m_dips;
|
||||||
|
|
||||||
|
required_device<netlist_mame_logic_input_device> m_sound_s1;
|
||||||
|
required_device<netlist_mame_logic_input_device> m_sound_s2;
|
||||||
|
required_device<netlist_mame_logic_input_device> m_sound_off;
|
||||||
|
required_device<netlist_mame_logic_input_device> m_sound_engine_hi;
|
||||||
|
required_device<netlist_mame_logic_input_device> m_sound_shoot;
|
||||||
|
required_device<netlist_mame_logic_input_device> m_sound_hit;
|
||||||
|
|
||||||
int m_sound_enable;
|
int m_sound_enable;
|
||||||
tilemap_t *m_bg_tilemap;
|
tilemap_t *m_bg_tilemap;
|
||||||
|
|
||||||
uint8_t in0_r(offs_t offset);
|
uint8_t in0_r(offs_t offset);
|
||||||
uint8_t in1_r(offs_t offset);
|
uint8_t in1_r(offs_t offset);
|
||||||
uint8_t dsw_r(offs_t offset);
|
uint8_t dsw_r(offs_t offset);
|
||||||
DECLARE_WRITE_LINE_MEMBER(sound_off_w);
|
|
||||||
DECLARE_WRITE_LINE_MEMBER(sh_expl_w);
|
|
||||||
DECLARE_WRITE_LINE_MEMBER(sh_engine_w);
|
|
||||||
DECLARE_WRITE_LINE_MEMBER(sh_fire_w);
|
|
||||||
void intack_w(uint8_t data);
|
void intack_w(uint8_t data);
|
||||||
DECLARE_WRITE_LINE_MEMBER(coincounter_w);
|
void coincounter_w(int state);
|
||||||
DECLARE_WRITE_LINE_MEMBER(coinlockout_w);
|
void coinlockout_w(int state);
|
||||||
void videoram_w(offs_t offset, uint8_t data);
|
void videoram_w(offs_t offset, uint8_t data);
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline_interrupt);
|
TIMER_DEVICE_CALLBACK_MEMBER(scanline_interrupt);
|
||||||
|
Loading…
Reference in New Issue
Block a user