Skip to content

Commit

Permalink
-bus/a2bus: Added SNES MAX game controller interface card.
Browse files Browse the repository at this point in the history
-docs: Clarified description of EMULATOR make option.
  • Loading branch information
cuavas committed Mar 10, 2024
1 parent 8f99c62 commit c53b36b
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 2 deletions.
5 changes: 3 additions & 2 deletions docs/source/initialsetup/compilingmame.rst
Original file line number Diff line number Diff line change
Expand Up @@ -560,8 +560,9 @@ TOOLS
Set to **1** to build additional tools along with the emulator, including
**unidasm**, **chdman**, **romcmp**, and **srcclean**.
EMULATOR
Set to **0** along with **TOOLS=1** to build *only* the tools and not the
main MAME emulator itself.
When set to **0**, the main emulator target will not be created. This is
intended to be used in conjunction with setting **TOOLS** to **1** to build
the additional tools without building the emulator.
NO_OPENGL
Set to **1** to disable building the OpenGL video output module.
NO_USE_PORTAUDIO
Expand Down
2 changes: 2 additions & 0 deletions scripts/src/bus.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2992,6 +2992,8 @@ if (BUSES["A2BUS"]~=null) then
MAME_DIR .. "src/devices/bus/a2bus/romcard.h",
MAME_DIR .. "src/devices/bus/a2bus/sider.cpp",
MAME_DIR .. "src/devices/bus/a2bus/sider.h",
MAME_DIR .. "src/devices/bus/a2bus/snesmax.cpp",
MAME_DIR .. "src/devices/bus/a2bus/snesmax.h",
MAME_DIR .. "src/devices/bus/a2bus/softcard3.cpp",
MAME_DIR .. "src/devices/bus/a2bus/softcard3.h",
MAME_DIR .. "src/devices/bus/a2bus/ssbapple.cpp",
Expand Down
4 changes: 4 additions & 0 deletions src/devices/bus/a2bus/cards.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
#include "ramcard16k.h"
#include "romcard.h"
#include "sider.h"
#include "snesmax.h"
#include "softcard3.h"
#include "ssbapple.h"
#include "ssprite.h"
Expand Down Expand Up @@ -136,6 +137,7 @@ void apple2_cards(device_slot_interface &device)
device.option_add("ssprite", A2BUS_SSPRITE); // Synetix SuperSprite Board
device.option_add("ssbapple", A2BUS_SSBAPPLE); // SSB Apple speech board
device.option_add("4play", A2BUS_4PLAY); // 4Play Joystick Card (Rev. B)
device.option_add("snesmax", A2BUS_SNES_MAX); // SNES MAX controller adapter
device.option_add("ceyes2", A2BUS_COMPUTEREYES2); // ComputerEyes/2 Video Digitizer
device.option_add("twarp", A2BUS_TRANSWARP); // AE TransWarp accelerator
device.option_add("applesurance", A2BUS_APPLESURANCE); // Applesurance Diagnostic Controller
Expand Down Expand Up @@ -212,6 +214,7 @@ void apple2e_cards(device_slot_interface &device)
device.option_add("twarp", A2BUS_TRANSWARP); // AE TransWarp accelerator
device.option_add("vulcan", A2BUS_VULCANIIE); // Applied Engineering Vulcan IDE drive
device.option_add("4play", A2BUS_4PLAY); // 4Play Joystick Card (Rev. B)
device.option_add("snesmax", A2BUS_SNES_MAX); // SNES MAX controller adapter
device.option_add("ceyes2", A2BUS_COMPUTEREYES2); // ComputerEyes/2 Video Digitizer
device.option_add("applesurance", A2BUS_APPLESURANCE); // Applesurance Diagnostic Controller
device.option_add("byte8251", A2BUS_BYTE8251); // BYTE Magazine 8251 serial card
Expand Down Expand Up @@ -286,6 +289,7 @@ void apple2gs_cards(device_slot_interface &device)
device.option_add("vulcan", A2BUS_VULCAN); // Applied Engineering Vulcan IDE drive
device.option_add("vulcangold", A2BUS_VULCANGOLD); // Applied Engineering Vulcan Gold IDE drive
device.option_add("4play", A2BUS_4PLAY); // 4Play Joystick Card (Rev. B)
device.option_add("snesmax", A2BUS_SNES_MAX); // SNES MAX controller adapter
// device.option_add("magicmusician", A2BUS_MAGICMUSICIAN); // Magic Musician Card
// device.option_add("pcxport", A2BUS_PCXPORTER); // Applied Engineering PC Transporter
device.option_add("byte8251", A2BUS_BYTE8251); // BYTE Magazine 8251 serial card
Expand Down
97 changes: 97 additions & 0 deletions src/devices/bus/a2bus/snesmax.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
#include "emu.h"
#include "snesmax.h"

#include "bus/snes_ctrl/ctrl.h"

namespace {

class a2bus_snes_max_device : public device_t, public device_a2bus_card_interface
{
public:
a2bus_snes_max_device(
machine_config const &mconfig,
char const *tag,
device_t *owner,
u32 clock) :
device_t(mconfig, A2BUS_SNES_MAX, tag, owner, clock),
device_a2bus_card_interface(mconfig, *this),
m_controllers(*this, "%u", 1U),
m_latch_timer(nullptr),
m_data(0xff)
{
}

virtual u8 read_c0nx(u8 offset) override
{
return m_data;
}

virtual void write_c0nx(u8 offset, u8 data) override
{
if (BIT(offset, 0))
{
m_data =
(m_controllers[0]->read_pin4() ? 0x00 : 0x80) |
(m_controllers[1]->read_pin4() ? 0x00 : 0x40) |
0x3f;
}
else
{
machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_snes_max_device::set_latch), this), 0);
}
}

virtual bool take_c800() override
{
return false;
}

protected:
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD
{
SNES_CONTROL_PORT(config, m_controllers[0], snes_control_port_devices, "joypad");
SNES_CONTROL_PORT(config, m_controllers[1], snes_control_port_devices, "joypad");
}

virtual void device_start() override ATTR_COLD
{
m_latch_timer = timer_alloc(FUNC(a2bus_snes_max_device::reset_latch), this);

m_data = 0xff;

save_item(NAME(m_data));

m_controllers[0]->write_strobe(0);
m_controllers[1]->write_strobe(0);
}

private:
TIMER_CALLBACK_MEMBER(set_latch)
{
m_controllers[0]->write_strobe(1);
m_controllers[1]->write_strobe(1);
m_latch_timer->adjust(attotime::from_ticks(7, clock()));
}

TIMER_CALLBACK_MEMBER(reset_latch)
{
m_controllers[0]->write_strobe(0);
m_controllers[1]->write_strobe(0);

m_data =
(m_controllers[0]->read_pin4() ? 0x00 : 0x80) |
(m_controllers[1]->read_pin4() ? 0x00 : 0x40) |
0x3f;
}

required_device_array<snes_control_port_device, 2> m_controllers;
emu_timer *m_latch_timer;
u8 m_data;
};

} // anonymous namespace


DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_SNES_MAX, device_a2bus_card_interface, a2bus_snes_max_device, "a2snesmax", "SNES MAX Game Controller Interface")
20 changes: 20 additions & 0 deletions src/devices/bus/a2bus/snesmax.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
/***********************************************************************
Orange Micro Grappler/Grappler+ Printer Interface
https://lukazi.blogspot.com/2021/06/game-controller-snes-max-snes.html
***********************************************************************/
#ifndef MAME_BUS_A2BUS_SNESMAX_H
#define MAME_BUS_A2BUS_SNESMAX_H

#pragma once

#include "a2bus.h"


DECLARE_DEVICE_TYPE(A2BUS_SNES_MAX, device_a2bus_card_interface)

#endif // MAME_BUS_A2BUS_SNESMAX_H

0 comments on commit c53b36b

Please sign in to comment.