Skip to content

Commit

Permalink
galaxian.cpp: Implement konami filters using netlist. [Couriersud]
Browse files Browse the repository at this point in the history
This change improves accuracy and scalability.
  • Loading branch information
couriersud committed Jan 19, 2020
1 parent 0f69abe commit ee0e0c9
Show file tree
Hide file tree
Showing 7 changed files with 494 additions and 79 deletions.
2 changes: 2 additions & 0 deletions scripts/target/mame/arcade.lua
Expand Up @@ -2821,6 +2821,8 @@ files {
MAME_DIR .. "src/mame/audio/galaxian.cpp",
MAME_DIR .. "src/mame/audio/galaxian.h",
MAME_DIR .. "src/mame/video/galaxian.cpp",
MAME_DIR .. "src/mame/audio/nl_konami.h",
MAME_DIR .. "src/mame/audio/nl_konami.cpp",
MAME_DIR .. "src/mame/drivers/galaxold.cpp",
MAME_DIR .. "src/mame/includes/galaxold.h",
MAME_DIR .. "src/mame/machine/galaxold.cpp",
Expand Down
12 changes: 12 additions & 0 deletions scripts/target/mame/nl.lua
Expand Up @@ -51,6 +51,7 @@ SOUNDS["TMS5220"] = true
SOUNDS["BEEP"] = true
SOUNDS["VOLT_REG"] = true
SOUNDS["SPEAKER"] = true
SOUNDS["DIGITALKER"] = true

--------------------------------------------------
-- specify available video cores
Expand Down Expand Up @@ -184,6 +185,17 @@ files{
MAME_DIR .. "src/mame/includes/cheekyms.h",
MAME_DIR .. "src/mame/video/cheekyms.cpp",

MAME_DIR .. "src/mame/drivers/galaxian.cpp",
MAME_DIR .. "src/mame/includes/galaxian.h",
MAME_DIR .. "src/mame/audio/galaxian.cpp",
MAME_DIR .. "src/mame/audio/galaxian.h",
MAME_DIR .. "src/mame/video/galaxian.cpp",
MAME_DIR .. "src/mame/audio/nl_konami.h",
MAME_DIR .. "src/mame/audio/nl_konami.cpp",

MAME_DIR .. "src/mame/audio/cclimber.cpp",
MAME_DIR .. "src/mame/audio/cclimber.h",

MAME_DIR .. "src/mame/audio/nl_zac1b11142.cpp",
MAME_DIR .. "src/mame/audio/nl_zacc1b11142.h",
MAME_DIR .. "src/mame/audio/zaccaria.cpp",
Expand Down
183 changes: 183 additions & 0 deletions src/mame/audio/nl_konami.cpp
@@ -0,0 +1,183 @@
// license:CC0
// copyright-holders:Couriersud
#include "netlist/devices/net_lib.h"

#ifdef NLBASE_H_
#error Somehow nl_base.h made it into the include chain.
#endif

static NETLIST_START(filter)
CD4066_GATE(G1)
PARAM(G1.BASER, 270.0)
CD4066_GATE(G2)
PARAM(G2.BASER, 270.0)
RES(RI, RES_K(1))
RES(RO, RES_K(5))
CAP(C1, CAP_U(0.22))
CAP(C2, CAP_U(0.047))
NET_C(RI.2, RO.1, G1.R.1, G2.R.1)
NET_C(G1.R.2, C1.1)
NET_C(G2.R.2, C2.1)

NET_C(C1.2, C2.2, G1.VSS, G2.VSS)
NET_C(G1.VDD, G2.VDD)

ALIAS(I, RI.1)
ALIAS(O, RO.2)

ALIAS(CTL1, G1.CTL)
ALIAS(CTL2, G2.CTL)

ALIAS(VDD, G1.VDD)
ALIAS(VSS, G1.VSS)
NETLIST_END()

static NETLIST_START(amp)

UA741_DIP8(X3A)
RES(R1, RES_K(2.2))
RES(R2, RES_K(4.7))
RES(VR, 200) // Actually a potentiometer
CAP(C1, CAP_U(0.15))
RES(RI, RES_K(100))

NET_C(X3A.2, R1.1)
NET_C(X3A.6, R1.2, R2.1)
NET_C(R2.2, VR.1)
NET_C(VR.1, C1.1) // 100% pot position
NET_C(C1.2, RI.1)

NET_C(GND, VR.2, RI.2)

// Amplifier M51516L, assume input RI 100k

ALIAS(OPAMP, X3A.2)
ALIAS(OUT, RI.1)
ALIAS(VP, X3A.7)
ALIAS(VM, X3A.4)
ALIAS(GND, X3A.3)

NETLIST_END()

static NETLIST_START(AY1)
TTL_INPUT(CTL0, 0)
TTL_INPUT(CTL1, 0)
TTL_INPUT(CTL2, 0)
TTL_INPUT(CTL3, 0)
TTL_INPUT(CTL4, 0)
TTL_INPUT(CTL5, 0)
/* AY 8910 internal resistors */
RES(R_AY3D_A, 1000)
RES(R_AY3D_B, 1000)
RES(R_AY3D_C, 1000)
NET_C(VP5, R_AY3D_A.1, R_AY3D_B.1, R_AY3D_C.1)

SUBMODEL(filter, FCHA1)
NET_C(FCHA1.I, R_AY3D_A.2)
SUBMODEL(filter, FCHB1)
NET_C(FCHB1.I, R_AY3D_B.2)
SUBMODEL(filter, FCHC1)
NET_C(FCHC1.I, R_AY3D_C.2)

NET_C(FCHA1.CTL1, CTL0)
NET_C(FCHA1.CTL2, CTL1)
NET_C(FCHB1.CTL1, CTL2)
NET_C(FCHB1.CTL2, CTL3)
NET_C(FCHC1.CTL1, CTL4)
NET_C(FCHC1.CTL2, CTL5)

NET_C(VP5, FCHA1.VDD, FCHB1.VDD, FCHC1.VDD)
NET_C(GND, FCHA1.VSS, FCHB1.VSS, FCHC1.VSS)

NET_C(VP5, CTL0.VCC, CTL1.VCC, CTL2.VCC, CTL3.VCC, CTL4.VCC, CTL5.VCC)
NET_C(GND, CTL0.GND, CTL1.GND, CTL2.GND, CTL3.GND, CTL4.GND, CTL5.GND)

NETLIST_END()

static NETLIST_START(AY2)
TTL_INPUT(CTL6, 0)
TTL_INPUT(CTL7, 0)
TTL_INPUT(CTL8, 0)
TTL_INPUT(CTL9, 0)
TTL_INPUT(CTL10, 0)
TTL_INPUT(CTL11, 0)
/* AY 8910 internal resistors */
RES(R_AY3C_A, 1000)
RES(R_AY3C_B, 1000)
RES(R_AY3C_C, 1000)
NET_C(VP5, R_AY3C_A.1, R_AY3C_B.1, R_AY3C_C.1)

SUBMODEL(filter, FCHA2)
NET_C(FCHA2.I, R_AY3C_A.2)
SUBMODEL(filter, FCHB2)
NET_C(FCHB2.I, R_AY3C_B.2)
SUBMODEL(filter, FCHC2)
NET_C(FCHC2.I, R_AY3C_C.2)

NET_C(FCHA2.CTL1, CTL6)
NET_C(FCHA2.CTL2, CTL7)
NET_C(FCHB2.CTL1, CTL8)
NET_C(FCHB2.CTL2, CTL9)
NET_C(FCHC2.CTL1, CTL10)
NET_C(FCHC2.CTL2, CTL11)

NET_C(VP5, FCHA2.VDD, FCHB2.VDD, FCHC2.VDD)
NET_C(GND, FCHA2.VSS, FCHB2.VSS, FCHC2.VSS)

NET_C(VP5, CTL6.VCC, CTL7.VCC, CTL8.VCC, CTL9.VCC, CTL10.VCC, CTL11.VCC)
NET_C(GND, CTL6.GND, CTL7.GND, CTL8.GND, CTL9.GND, CTL10.GND, CTL11.GND)

NETLIST_END()

NETLIST_START(konami2x)

SOLVER(Solver, 48000)

ANALOG_INPUT(VP5, 5)
ANALOG_INPUT(VM5, -5)

LOCAL_SOURCE(filter)
LOCAL_SOURCE(amp)
LOCAL_SOURCE(AY1)
LOCAL_SOURCE(AY2)

INCLUDE(AY1)
INCLUDE(AY2)

NET_C(FCHA1.O, FCHB1.O, FCHC1.O, FCHA2.O, FCHB2.O, FCHC2.O)

SUBMODEL(amp, AMP)

NET_C(VP5, AMP.VP)
NET_C(GND, AMP.GND)
NET_C(VM5, AMP.VM)
NET_C(FCHA1.O, AMP.OPAMP)

ALIAS(OUT, AMP.OUT)
NETLIST_END()

NETLIST_START(konami1x)

SOLVER(Solver, 48000)

ANALOG_INPUT(VP5, 5)
ANALOG_INPUT(VM5, -5)

LOCAL_SOURCE(filter)
LOCAL_SOURCE(amp)
LOCAL_SOURCE(AY1)
LOCAL_SOURCE(AY2)

INCLUDE(AY1)

NET_C(FCHA1.O, FCHB1.O, FCHC1.O)

SUBMODEL(amp, AMP)

NET_C(VP5, AMP.VP)
NET_C(GND, AMP.GND)
NET_C(VM5, AMP.VM)
NET_C(FCHA1.O, AMP.OPAMP)

ALIAS(OUT, AMP.OUT)
NETLIST_END()
7 changes: 7 additions & 0 deletions src/mame/audio/nl_konami.h
@@ -0,0 +1,7 @@
// license:CC0
// copyright-holders:Couriersud

#include "netlist/nl_setup.h"

NETLIST_EXTERNAL(konami1x)
NETLIST_EXTERNAL(konami2x)

0 comments on commit ee0e0c9

Please sign in to comment.