mirror of
https://github.com/holub/mame
synced 2025-07-01 08:18:59 +03:00
babypac,granny: added sound.
This commit is contained in:
parent
d3b7dce411
commit
c40822e561
@ -2,18 +2,32 @@
|
|||||||
// copyright-holders:Robbbert, Quench
|
// copyright-holders:Robbbert, Quench
|
||||||
/********************************************************************************************
|
/********************************************************************************************
|
||||||
|
|
||||||
PINBALL
|
PINBALL
|
||||||
Bally MPU AS-2518-17
|
Bally MPU AS-2518-17
|
||||||
|
|
||||||
These are some very early and well known Solid State machines, such as 'Eight Ball'.
|
Games:
|
||||||
|
**** Bally ****
|
||||||
|
- Bow and Arrow (#1033)
|
||||||
|
- Freedom (#1066)
|
||||||
|
- Night Rider (#1074)
|
||||||
|
- Black Jack (#1092)
|
||||||
|
- Evel Knievel (#1094)
|
||||||
|
- Mata Hari (#1104)
|
||||||
|
- Eight Ball (#1118)
|
||||||
|
- Bobby Orr Power Play (#1120)
|
||||||
|
- Strikes and Spares (#1135)
|
||||||
|
**** Other ****
|
||||||
|
- 301/Bull's Eye
|
||||||
|
- Stellar Airship
|
||||||
|
- Super Zeus
|
||||||
|
- Verspiel Dein Wasser Nicht!
|
||||||
|
|
||||||
They have orange digital 6 digit displays, and a mechanical chime unit for sounds.
|
They have orange digital 6 digit displays, and a mechanical chime unit for sounds.
|
||||||
|
|
||||||
|
|
||||||
ToDo:
|
ToDo:
|
||||||
- Bow & Arrow fails the PIA test and doesn't boot
|
- Bow & Arrow fails the PIA test and doesn't boot
|
||||||
- Dips, Inputs, Solenoids vary per game
|
- Dips, Inputs, Solenoids vary per game
|
||||||
- Mechanical
|
|
||||||
|
|
||||||
*********************************************************************************************/
|
*********************************************************************************************/
|
||||||
|
|
||||||
@ -75,19 +89,19 @@ protected:
|
|||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t m_u10a;
|
uint8_t m_u10a = 0U;
|
||||||
uint8_t m_u10b;
|
uint8_t m_u10b = 0U;
|
||||||
uint8_t m_u11a;
|
uint8_t m_u11a = 0U;
|
||||||
uint8_t m_u11b;
|
uint8_t m_u11b = 0U;
|
||||||
bool m_u10_ca2;
|
bool m_u10_ca2 = 0;
|
||||||
bool m_u10_cb1;
|
bool m_u10_cb1 = 0;
|
||||||
bool m_u10_cb2;
|
bool m_u10_cb2 = 0;
|
||||||
bool m_u11_ca1;
|
bool m_u11_ca1 = 0;
|
||||||
bool m_u11_cb2;
|
bool m_u11_cb2 = 0;
|
||||||
uint8_t m_segment[6];
|
uint8_t m_segment[6]{};
|
||||||
uint8_t m_lamp_decode;
|
uint8_t m_lamp_decode = 0U;
|
||||||
uint8_t m_solenoid_features[20][4];
|
uint8_t m_solenoid_features[20][4]{};
|
||||||
uint8_t m_io_hold_x[5]; // Used to hold switches closed (drop targets, balls in outholes/saucers etc). Solenoid activity release them.
|
uint8_t m_io_hold_x[5]{}; // Used to hold switches closed (drop targets, balls in outholes/saucers etc). Solenoid activity release them.
|
||||||
required_device<m6800_cpu_device> m_maincpu;
|
required_device<m6800_cpu_device> m_maincpu;
|
||||||
required_shared_ptr<uint8_t> m_nvram;
|
required_shared_ptr<uint8_t> m_nvram;
|
||||||
required_device<pia6821_device> m_pia_u10;
|
required_device<pia6821_device> m_pia_u10;
|
||||||
@ -1127,7 +1141,7 @@ ROM_START(eightblo) // Has an exploit if you tilt the ball in play and hold ti
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/*--------------------------------
|
/*--------------------------------
|
||||||
/ Power Play #1120
|
/ Bobby Orr Power Play #1120
|
||||||
/-------------------------------*/
|
/-------------------------------*/
|
||||||
ROM_START(pwerplay)
|
ROM_START(pwerplay)
|
||||||
ROM_REGION(0x1000, "roms", 0)
|
ROM_REGION(0x1000, "roms", 0)
|
||||||
@ -1145,7 +1159,7 @@ ROM_START(stk_sprs)
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/*--------------------------------------------------------------
|
/*--------------------------------------------------------------
|
||||||
/ Stellar Airship / Geiger-Automatenbau GMBH, of Germany (1981)
|
/ Stellar Airship / Geiger-Automatenbau GMBH, of Germany (1979)
|
||||||
/---------------------------------------------------------------*/
|
/---------------------------------------------------------------*/
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
@ -13,42 +13,104 @@ There are many sound boards used, however there are only a few major types.
|
|||||||
* Cheap Squeak has 6803 + ZN429 + 2x2kROM
|
* Cheap Squeak has 6803 + ZN429 + 2x2kROM
|
||||||
* Xenon (#1196) has a sound board (similar to AS-3022) and a vocalizer board, with 32k of roms.
|
* Xenon (#1196) has a sound board (similar to AS-3022) and a vocalizer board, with 32k of roms.
|
||||||
|
|
||||||
|
List of games:
|
||||||
|
|
||||||
Sound Board Machine
|
Game NUM Sound Board
|
||||||
---------------------------------------------
|
-----------------------------------------------------------------------------------------------
|
||||||
AS-2888-1 1106,1116,1119,1138,1147,1148
|
**** Bally ****
|
||||||
AS-2888-3 1152
|
Mysterian 868
|
||||||
AS-2888-4 1161,1162,1167
|
Supersonic 1106 AS-2888-1
|
||||||
AS-3022-1 1173
|
Playboy 1116 AS-2888-1
|
||||||
AS-3022-2 1154
|
Lost World 1119 AS-2888-1
|
||||||
AS-3022-3 1157
|
The Six Million Dollar Man 1138 AS-2888-1
|
||||||
AS-3022-5 1187
|
Voltan Escapes Cosmic Doom 1147 AS-2888-1
|
||||||
AS-3022-6 1178
|
Star Trek 1148 AS-2888-1
|
||||||
AS-3022-7 1192
|
Kiss 1152 AS-2888-3
|
||||||
AS-3022-8 1198
|
Nitro Ground Shaker 1154 AS-3022-2
|
||||||
AS-3022-9 1199
|
Silverball Mania 1157 AS-3022-3
|
||||||
AS-3022-11 1210
|
Harlem Globetrotters on Tour 1161 AS-2888-4
|
||||||
AS-3022-12 1217
|
Dolly Parton 1162 AS-2888-4
|
||||||
AS-3022-14 1273
|
Paragon 1167 AS-2888-4
|
||||||
AS-3022-15 1276
|
Future Spa 1173 AS-3022-1
|
||||||
AS-3022-18 1311
|
Space Invaders 1178 AS-3022-6
|
||||||
AS-3059/3060 1196
|
Rolling Stones 1187 AS-3022-5
|
||||||
AS-3107-1 1215
|
Mystic 1192 AS-3022-7
|
||||||
AS-3107-2 1220
|
Xenon 1196 AS-3059 (AS-2518-56) (Sounds Plus) and AS-3060 (AS-2518-57) (Vocalizer)
|
||||||
AS-3107-3 1219
|
Viking 1198 AS-3022-8
|
||||||
AS-3107-4 1222
|
Hotdoggin' 1199 AS-3022-9
|
||||||
AS-3107-5 1233
|
Skateball 1210 AS-3022-11
|
||||||
AS-3107-6 1245
|
Flash Gordon 1215 AS-3107-1 (AS-2518-61) (Squawk & Talk)
|
||||||
AS-3107-7 1239
|
Frontier 1217 AS-3022-12
|
||||||
AS-3107-8 1248
|
Fireball II 1219 AS-3107-3
|
||||||
AS-3107-9 1247
|
Eight Ball Deluxe 1220 AS-3107-2
|
||||||
AS-3107-10 1262
|
Embryon 1222 AS-3107-4
|
||||||
AS-3107-11 1282
|
Fathom 1233 AS-3107-5
|
||||||
AS-3107-12 1283
|
Centaur 1239 AS-3107-7
|
||||||
A084-91495-A371 1371
|
Medusa 1245 AS-3107-6
|
||||||
Cheap Squeak 1390,1391,0A17,0A40,0A44,0B42
|
Vector 1247 AS-3107-9
|
||||||
(unknown) 1370 (Centaur II - Manual has the correct cover but insides are for Centaur #1239)
|
Elektra 1248 AS-3107-8
|
||||||
|
Spectrum 1262 AS-3107-10
|
||||||
|
Speakeasy / Speakeasy 4 1273 AS-3022-14
|
||||||
|
BMX 1276 AS-3022-15
|
||||||
|
Rapid Fire 1282 AS-3107-11 (No flippers in this game)
|
||||||
|
Mr & Mrs Pac-Man Pinball 1283 AS-3107-12
|
||||||
|
Eight Ball Deluxe LE 1300
|
||||||
|
Grand Slam (BY133) 1311 AS-3022-18
|
||||||
|
Gold Ball (BY133) 1314 (0371) A084-91945-A371
|
||||||
|
Centaur II 1370 (0370) Squawk & Talk, plus Say It Again (reverb card)
|
||||||
|
Kings of Steel 1390 (0390) Cheap Squeak
|
||||||
|
X's & O's 1391 (0391) Cheap Squeak
|
||||||
|
Midnight Marauders 0A12 (gun game)
|
||||||
|
Spy Hunter 0A17 Cheap Squeak
|
||||||
|
Fireball Classic 0A40 Cheap Squeak
|
||||||
|
Black Pyramid 0A44 Cheap Squeak
|
||||||
|
Cybernaut 0B42 Cheap Squeak
|
||||||
|
Eight Ball Deluxe (reissue) 0B87
|
||||||
|
Big Bat (BY133) ---- AS-2518-61 (Squawk & Talk)
|
||||||
|
**** Bell ****
|
||||||
|
Cosmic Flash
|
||||||
|
Fantasy
|
||||||
|
Fireball II
|
||||||
|
Flash Gordon
|
||||||
|
Frontier
|
||||||
|
New Wave
|
||||||
|
Pinball
|
||||||
|
Pin Ball Pool
|
||||||
|
Saturn 2
|
||||||
|
Super Bowl
|
||||||
|
Tiger Rag
|
||||||
|
**** Nuova Bell ****
|
||||||
|
Cobra
|
||||||
|
Dark Shadow
|
||||||
|
F1 Grand Prix
|
||||||
|
Future Queen
|
||||||
|
Skill Flight
|
||||||
|
Space Hawks
|
||||||
|
Top Pin
|
||||||
|
U-boat 65
|
||||||
|
World Defender
|
||||||
|
**** I.D.I. ****
|
||||||
|
Movie Master
|
||||||
|
**** Geiger-Automatenbau ****
|
||||||
|
Dark Rider
|
||||||
|
Fly High
|
||||||
|
Miss World
|
||||||
|
Space Rider
|
||||||
|
**** Grand Products ****
|
||||||
|
301/Bullseye
|
||||||
|
**** Arkon Automaten ****
|
||||||
|
Sexy Girl
|
||||||
|
**** Elbos Electronics ****
|
||||||
|
Genesis
|
||||||
|
**** Zaccaria ****
|
||||||
|
Mystic Star
|
||||||
|
**** United ****
|
||||||
|
Big Ball Bowling (shuffle)
|
||||||
|
**** Monroe ****
|
||||||
|
Stars and Strikes (shuffle)
|
||||||
|
**** Stern ****
|
||||||
|
Black Beauty (shuffle)
|
||||||
|
--------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
- The Nuova Bell Games from Dark Shadow onwards use inhouse designed circuit boards. The MPU board contains enhancements for full
|
- The Nuova Bell Games from Dark Shadow onwards use inhouse designed circuit boards. The MPU board contains enhancements for full
|
||||||
CPU address space, larger ROMs, 6802 CPU, Toshiba TC5517 CMOS RAM (2kb) for battery backup that can be jumpered in nibble or byte mode, etc.
|
CPU address space, larger ROMs, 6802 CPU, Toshiba TC5517 CMOS RAM (2kb) for battery backup that can be jumpered in nibble or byte mode, etc.
|
||||||
@ -171,24 +233,24 @@ protected:
|
|||||||
void by35_map(address_map &map);
|
void by35_map(address_map &map);
|
||||||
void nuovo_map(address_map &map);
|
void nuovo_map(address_map &map);
|
||||||
|
|
||||||
uint8_t m_u10a;
|
uint8_t m_u10a = 0U;
|
||||||
uint8_t m_u10b;
|
uint8_t m_u10b = 0U;
|
||||||
uint8_t m_u11a;
|
uint8_t m_u11a = 0U;
|
||||||
uint8_t m_u11b;
|
uint8_t m_u11b = 0U;
|
||||||
|
|
||||||
static solenoid_feature_data const s_solenoid_features_default;
|
static solenoid_feature_data const s_solenoid_features_default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_u10_ca2;
|
bool m_u10_ca2 = 0;
|
||||||
bool m_u10_cb1;
|
bool m_u10_cb1 = 0;
|
||||||
bool m_u10_cb2;
|
bool m_u10_cb2 = 0;
|
||||||
bool m_u11_ca1;
|
bool m_u11_ca1 = 0;
|
||||||
bool m_u11_cb2;
|
bool m_u11_cb2 = 0;
|
||||||
bool m_7d;
|
bool m_7d = 0;
|
||||||
uint8_t m_segment[6];
|
uint8_t m_segment[6]{};
|
||||||
uint8_t m_lamp_decode;
|
uint8_t m_lamp_decode = 0U;
|
||||||
solenoid_feature_data const &m_solenoid_features;
|
solenoid_feature_data const &m_solenoid_features;
|
||||||
uint8_t m_io_hold_x[6];
|
uint8_t m_io_hold_x[6]{};
|
||||||
required_device<m6800_cpu_device> m_maincpu;
|
required_device<m6800_cpu_device> m_maincpu;
|
||||||
required_shared_ptr<uint8_t> m_nvram;
|
required_shared_ptr<uint8_t> m_nvram;
|
||||||
required_device<pia6821_device> m_pia_u10;
|
required_device<pia6821_device> m_pia_u10;
|
||||||
@ -1240,7 +1302,7 @@ void by35_state::u11_b_w(uint8_t data)
|
|||||||
if (m_solenoid_features[(data & 0x0f)][3]) // Reset/release relevant switch after firing Solenoid
|
if (m_solenoid_features[(data & 0x0f)][3]) // Reset/release relevant switch after firing Solenoid
|
||||||
m_io_hold_x[(m_solenoid_features[(data & 0x0f)][2])] &= (m_solenoid_features[(data & 0x0f)][3]);
|
m_io_hold_x[(m_solenoid_features[(data & 0x0f)][2])] &= (m_solenoid_features[(data & 0x0f)][3]);
|
||||||
}
|
}
|
||||||
else // Rest output - all momentary solenoids are off
|
else // Reset output - all momentary solenoids are off
|
||||||
{
|
{
|
||||||
std::fill_n(std::begin(m_solenoids), 15, false);
|
std::fill_n(std::begin(m_solenoids), 15, false);
|
||||||
}
|
}
|
||||||
|
@ -10,25 +10,35 @@ A blend of arcade video game and pinball. It has the shape of
|
|||||||
ball is injected from between the flippers; there's no shooter.
|
ball is injected from between the flippers; there's no shooter.
|
||||||
There's flipper buttons on the sides, and a joystick on the
|
There's flipper buttons on the sides, and a joystick on the
|
||||||
control panel.
|
control panel.
|
||||||
|
Granny has an additional "Power" button, it's a gun to shoot
|
||||||
|
the alligators, if you have collected ammo. You need money to
|
||||||
|
pass the toll gates.
|
||||||
|
|
||||||
|
List of BY133 games:
|
||||||
|
|
||||||
Games:
|
Game NUM Sound Board
|
||||||
- Baby Pacman (#1299)
|
-----------------------------------------------------------------------------------------------
|
||||||
- Granny & the Gators (#1369)
|
Baby Pacman (1982) 1299 The vidiot board contains the cheap squeak circuit
|
||||||
|
Grand Slam (1983) 1311 AS-2518-51 (in by35.cpp)
|
||||||
|
Gold Ball (1983) 1314 (0371) A084-91495-A371/A360,AS-2518-51 (in by35.cpp)
|
||||||
|
Granny & the Gators (1984) 1369 (0369) Cheap Squeak
|
||||||
|
Big Bat (1984) ---- AS-2518-61 (in by35.cpp)
|
||||||
|
|
||||||
Babypac uses a MPU4 board containing the main cpu, and a Vidiot
|
Babypac uses a MPU4 board containing the main cpu, and a Vidiot
|
||||||
board containing the video and sound cpus, and the video controller
|
board containing the video and sound cpus, and the video controller
|
||||||
and the sound DAC and amp.
|
and the sound DAC and amp.
|
||||||
|
|
||||||
Granny uses the MPU4 board, but it has a Vidiot Deluxe for the
|
Granny uses the MPU4 board, but it has a Vidiot Deluxe for the
|
||||||
video, and a Cheap Squeek sound board. The manual incorrectly
|
video, and a Cheap Squeak sound board. The manual incorrectly
|
||||||
describes the babypac vidiot board. Unable to locate a schematic.
|
describes the babypac vidiot board. Unable to locate a schematic.
|
||||||
|
|
||||||
Status:
|
Status:
|
||||||
- All machines are playable.
|
- Both machines are playable.
|
||||||
|
- To exit the pinball back to the video:
|
||||||
|
Babypac: press O or P;
|
||||||
|
Granny: press X.
|
||||||
|
|
||||||
ToDo: (all)
|
ToDo: (all)
|
||||||
- Sound. It gets stuck waiting for "input capture interrupt".
|
|
||||||
- Beeper needs to be replaced by a red LED.
|
- Beeper needs to be replaced by a red LED.
|
||||||
|
|
||||||
ToDo (granny):
|
ToDo (granny):
|
||||||
@ -46,8 +56,8 @@ ToDo (granny):
|
|||||||
#include "cpu/m6809/m6809.h"
|
#include "cpu/m6809/m6809.h"
|
||||||
#include "machine/6821pia.h"
|
#include "machine/6821pia.h"
|
||||||
#include "machine/timer.h"
|
#include "machine/timer.h"
|
||||||
|
#include "audio/bally.h"
|
||||||
#include "sound/beep.h"
|
#include "sound/beep.h"
|
||||||
#include "sound/dac.h"
|
|
||||||
#include "video/tms9928a.h"
|
#include "video/tms9928a.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
@ -61,7 +71,9 @@ public:
|
|||||||
: genpin_class(mconfig, type, tag)
|
: genpin_class(mconfig, type, tag)
|
||||||
, m_maincpu(*this, "maincpu")
|
, m_maincpu(*this, "maincpu")
|
||||||
, m_videocpu(*this, "videocpu")
|
, m_videocpu(*this, "videocpu")
|
||||||
, m_audiocpu(*this, "audiocpu")
|
, m_cheap_squeak(*this, "cheap_squeak")
|
||||||
|
, m_sound_select_handler(*this)
|
||||||
|
, m_sound_int_handler(*this)
|
||||||
, m_pia_u7(*this, "pia_u7")
|
, m_pia_u7(*this, "pia_u7")
|
||||||
, m_pia_u10(*this, "pia_u10")
|
, m_pia_u10(*this, "pia_u10")
|
||||||
, m_pia_u11(*this, "pia_u11")
|
, m_pia_u11(*this, "pia_u11")
|
||||||
@ -83,10 +95,10 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_INPUT_CHANGED_MEMBER(video_test);
|
DECLARE_INPUT_CHANGED_MEMBER(video_test);
|
||||||
DECLARE_INPUT_CHANGED_MEMBER(sound_test);
|
|
||||||
DECLARE_INPUT_CHANGED_MEMBER(activity_test);
|
DECLARE_INPUT_CHANGED_MEMBER(activity_test);
|
||||||
DECLARE_INPUT_CHANGED_MEMBER(self_test);
|
DECLARE_INPUT_CHANGED_MEMBER(self_test);
|
||||||
|
|
||||||
|
void by133(machine_config &config);
|
||||||
void babypac(machine_config &config);
|
void babypac(machine_config &config);
|
||||||
void granny(machine_config &config);
|
void granny(machine_config &config);
|
||||||
|
|
||||||
@ -95,25 +107,27 @@ private:
|
|||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
u8 m_mpu_to_vid = 0U;
|
u8 m_mpu_to_vid = 0U;
|
||||||
u8 m_vid_to_mpu = 0U;
|
u8 m_vid_to_mpu = 0U;
|
||||||
u8 m_u7_a = 0U;
|
u8 m_u7a = 0U;
|
||||||
u8 m_u7_b = 0U;
|
u8 m_u7b = 0U;
|
||||||
bool m_u7_cb2 = 0;
|
u8 m_u10a = 0U;
|
||||||
u8 m_u10_a = 0U;
|
u8 m_u10b = 0U;
|
||||||
u8 m_u10_b = 0U;
|
|
||||||
bool m_u10_cb2 = 0;
|
bool m_u10_cb2 = 0;
|
||||||
u8 m_u11_a = 0U;
|
bool m_u11_cb2 = 0;
|
||||||
u8 m_u11_b = 0U;
|
u8 m_u11a = 0U;
|
||||||
|
u8 m_u11b = 0U;
|
||||||
bool m_u10_timer = 0;
|
bool m_u10_timer = 0;
|
||||||
bool m_u11_timer = 0;
|
bool m_u11_timer = 0;
|
||||||
required_device<m6800_cpu_device> m_maincpu;
|
required_device<m6800_cpu_device> m_maincpu;
|
||||||
required_device<mc6809_device> m_videocpu;
|
required_device<mc6809_device> m_videocpu;
|
||||||
required_device<m6803_cpu_device> m_audiocpu;
|
required_device<bally_cheap_squeak_device> m_cheap_squeak;
|
||||||
|
devcb_write8 m_sound_select_handler;
|
||||||
|
devcb_write_line m_sound_int_handler;
|
||||||
required_device<pia6821_device> m_pia_u7;
|
required_device<pia6821_device> m_pia_u7;
|
||||||
required_device<pia6821_device> m_pia_u10;
|
required_device<pia6821_device> m_pia_u10;
|
||||||
required_device<pia6821_device> m_pia_u11;
|
required_device<pia6821_device> m_pia_u11;
|
||||||
required_device<tms9928a_device> m_crtc;
|
required_device<tms9928a_device> m_crtc;
|
||||||
optional_device<tms9928a_device> m_crtc2; // for Granny only
|
optional_device<tms9928a_device> m_crtc2; // for Granny only
|
||||||
optional_device<beep_device> m_beep; // temp
|
required_device<beep_device> m_beep; // temp
|
||||||
required_ioport m_io_test;
|
required_ioport m_io_test;
|
||||||
required_ioport m_io_dsw0;
|
required_ioport m_io_dsw0;
|
||||||
required_ioport m_io_dsw1;
|
required_ioport m_io_dsw1;
|
||||||
@ -129,8 +143,6 @@ private:
|
|||||||
|
|
||||||
u8 sound_data_r();
|
u8 sound_data_r();
|
||||||
void sound_data_w(u8 data);
|
void sound_data_w(u8 data);
|
||||||
u8 m6803_port2_r();
|
|
||||||
void m6803_port2_w(u8 data);
|
|
||||||
u8 u7_a_r();
|
u8 u7_a_r();
|
||||||
void u7_a_w(u8 data);
|
void u7_a_w(u8 data);
|
||||||
u8 u7_b_r();
|
u8 u7_b_r();
|
||||||
@ -149,13 +161,13 @@ private:
|
|||||||
DECLARE_WRITE_LINE_MEMBER(u7_cb2_w);
|
DECLARE_WRITE_LINE_MEMBER(u7_cb2_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(u10_cb2_w);
|
DECLARE_WRITE_LINE_MEMBER(u10_cb2_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(u11_cb2_w);
|
DECLARE_WRITE_LINE_MEMBER(u11_cb2_w);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(sound_ack_w) { m_pia_u11->cb2_w(state); }
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(u10_timer);
|
TIMER_DEVICE_CALLBACK_MEMBER(u10_timer);
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(u11_timer);
|
TIMER_DEVICE_CALLBACK_MEMBER(u11_timer);
|
||||||
void granny_crtc_w(offs_t offset, u8 data);
|
void granny_crtc_w(offs_t offset, u8 data);
|
||||||
uint32_t screen_update_granny(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update_granny(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
void granny_map(address_map &map);
|
void granny_map(address_map &map);
|
||||||
void main_map(address_map &map);
|
void main_map(address_map &map);
|
||||||
void audio_map(address_map &map);
|
|
||||||
void video_map(address_map &map);
|
void video_map(address_map &map);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -195,11 +207,6 @@ void by133_state::granny_map(address_map &map)
|
|||||||
map(0x4000, 0xffff).rom();
|
map(0x4000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
|
|
||||||
void by133_state::audio_map(address_map &map)
|
|
||||||
{ // U27 Vidiot
|
|
||||||
map(0xc000, 0xffff).rom();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
INPUT_CHANGED_MEMBER( by133_state::video_test )
|
INPUT_CHANGED_MEMBER( by133_state::video_test )
|
||||||
{
|
{
|
||||||
@ -207,12 +214,6 @@ INPUT_CHANGED_MEMBER( by133_state::video_test )
|
|||||||
m_videocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
m_videocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
||||||
}
|
}
|
||||||
|
|
||||||
INPUT_CHANGED_MEMBER( by133_state::sound_test )
|
|
||||||
{
|
|
||||||
if(newval)
|
|
||||||
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
|
||||||
}
|
|
||||||
|
|
||||||
INPUT_CHANGED_MEMBER( by133_state::activity_test )
|
INPUT_CHANGED_MEMBER( by133_state::activity_test )
|
||||||
{
|
{
|
||||||
if(newval)
|
if(newval)
|
||||||
@ -227,7 +228,6 @@ INPUT_CHANGED_MEMBER( by133_state::self_test )
|
|||||||
static INPUT_PORTS_START( babypac )
|
static INPUT_PORTS_START( babypac )
|
||||||
PORT_START("TEST")
|
PORT_START("TEST")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Video Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, video_test, 0)
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Video Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, video_test, 0)
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Sound Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, sound_test, 0)
|
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Activity") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, activity_test, 0)
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Activity") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, activity_test, 0)
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Self Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, self_test, 0)
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Self Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, self_test, 0)
|
||||||
|
|
||||||
@ -380,7 +380,6 @@ INPUT_PORTS_END
|
|||||||
static INPUT_PORTS_START( granny )
|
static INPUT_PORTS_START( granny )
|
||||||
PORT_START("TEST")
|
PORT_START("TEST")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Video Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, video_test, 0)
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Video Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, video_test, 0)
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Sound Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, sound_test, 0)
|
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Activity") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, activity_test, 0)
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Activity") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, activity_test, 0)
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Self Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, self_test, 0)
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Self Test") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by133_state, self_test, 0)
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Power") // Also 2P start
|
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Power") // Also 2P start
|
||||||
@ -558,20 +557,6 @@ void by133_state::sound_data_w(u8 data)
|
|||||||
m_vid_to_mpu = data;
|
m_vid_to_mpu = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 by133_state::m6803_port2_r()
|
|
||||||
{
|
|
||||||
u8 data = ((m_u7_b << 1) & 0x1f) | 0x40 | m_u7_cb2;
|
|
||||||
m_u7_cb2 = false;
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void by133_state::m6803_port2_w(u8 data)
|
|
||||||
{
|
|
||||||
//m_u7_b = data >> 1;
|
|
||||||
m_beep->set_clock(600);
|
|
||||||
m_beep->set_state(BIT(data, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( by133_state::u7_ca2_w )
|
WRITE_LINE_MEMBER( by133_state::u7_ca2_w )
|
||||||
{
|
{
|
||||||
// comms out
|
// comms out
|
||||||
@ -592,8 +577,8 @@ WRITE_LINE_MEMBER( by133_state::u7_cb2_w )
|
|||||||
// red led
|
// red led
|
||||||
m_beep->set_clock(950);
|
m_beep->set_clock(950);
|
||||||
m_beep->set_state(state);
|
m_beep->set_state(state);
|
||||||
if (state)
|
if (!m_sound_int_handler.isnull())
|
||||||
m_u7_cb2 = true;
|
m_sound_int_handler(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( by133_state::u10_cb2_w )
|
WRITE_LINE_MEMBER( by133_state::u10_cb2_w )
|
||||||
@ -605,89 +590,97 @@ WRITE_LINE_MEMBER( by133_state::u10_cb2_w )
|
|||||||
WRITE_LINE_MEMBER( by133_state::u11_cb2_w )
|
WRITE_LINE_MEMBER( by133_state::u11_cb2_w )
|
||||||
{
|
{
|
||||||
// solenoid-sound selector
|
// solenoid-sound selector
|
||||||
|
|
||||||
|
m_u11_cb2 = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 by133_state::u7_a_r()
|
u8 by133_state::u7_a_r()
|
||||||
{
|
{
|
||||||
return m_u7_a;
|
return m_u7a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by133_state::u7_a_w(u8 data)
|
void by133_state::u7_a_w(u8 data)
|
||||||
{
|
{
|
||||||
m_u7_a = data;
|
m_u7a = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 by133_state::u7_b_r()
|
u8 by133_state::u7_b_r()
|
||||||
{
|
{
|
||||||
if (BIT(m_u7_a, 7)) // bits 6 and 7 work; pinmame uses 7
|
if (BIT(m_u7a, 7)) // bits 6 and 7 work; pinmame uses 7
|
||||||
m_u7_b |= m_io_joy->read();
|
m_u7b |= m_io_joy->read();
|
||||||
|
|
||||||
if (BIT(m_u7_a, 6)) // Granny has a "power" button - used to shoot your gun. Is also 2-player start.
|
if (BIT(m_u7a, 6)) // Granny has a "power" button - used to shoot your gun. Is also 2-player start.
|
||||||
m_u7_b = m_io_test->read() & 0x80;
|
m_u7b = m_io_test->read() & 0x80;
|
||||||
|
|
||||||
return m_u7_b;
|
return m_u7b;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by133_state::u7_b_w(u8 data)
|
void by133_state::u7_b_w(u8 data)
|
||||||
{
|
{
|
||||||
//machine().scheduler().synchronize();
|
//machine().scheduler().synchronize();
|
||||||
m_u7_b = data;
|
m_u7b = data;
|
||||||
|
// Handle sound
|
||||||
|
if (!m_sound_select_handler.isnull())
|
||||||
|
{
|
||||||
|
//u8 sound = (m_u11b & 0x0f) | ((data & 0x02) << 3);
|
||||||
|
m_sound_select_handler(data & 15);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 by133_state::u10_a_r()
|
u8 by133_state::u10_a_r()
|
||||||
{
|
{
|
||||||
return m_u10_a;
|
return m_u10a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by133_state::u10_a_w(u8 data)
|
void by133_state::u10_a_w(u8 data)
|
||||||
{
|
{
|
||||||
m_u10_a = data;
|
m_u10a = data;
|
||||||
if (BIT(m_u11_a, 2) == 0)
|
if (BIT(m_u11a, 2) == 0)
|
||||||
m_mpu_to_vid = data ^ 0x0f;
|
m_mpu_to_vid = data ^ 0x0f;
|
||||||
// Lamps
|
// Lamps
|
||||||
if (!m_u10_cb2)
|
if (!m_u10_cb2)
|
||||||
{
|
{
|
||||||
if (!BIT(m_u10_a, 6))
|
if (!BIT(m_u10a, 6))
|
||||||
for (u8 i = 0; i < 16; i++)
|
for (u8 i = 0; i < 16; i++)
|
||||||
m_io_outputs[16+u8(m_u10_timer)*16+i] = ((m_u10_a & 15) == i);
|
m_io_outputs[16+u8(m_u10_timer)*16+i] = ((m_u10a & 15) == i);
|
||||||
if (!BIT(m_u10_a, 7))
|
if (!BIT(m_u10a, 7))
|
||||||
for (u8 i = 0; i < 16; i++)
|
for (u8 i = 0; i < 16; i++)
|
||||||
m_io_outputs[48+u8(m_u10_timer)*16+i] = ((m_u10_a & 15) == i);
|
m_io_outputs[48+u8(m_u10_timer)*16+i] = ((m_u10a & 15) == i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 by133_state::u10_b_r()
|
u8 by133_state::u10_b_r()
|
||||||
{
|
{
|
||||||
if (BIT(m_u11_a, 3) == 0)
|
if (BIT(m_u11a, 3) == 0)
|
||||||
return ~m_u7_a & 0x03;
|
return ~m_u7a & 0x03;
|
||||||
|
|
||||||
if (BIT(m_u11_a, 1) == 0)
|
if (BIT(m_u11a, 1) == 0)
|
||||||
return m_vid_to_mpu;
|
return m_vid_to_mpu;
|
||||||
|
|
||||||
u8 data = 0;
|
u8 data = 0;
|
||||||
|
|
||||||
if (BIT(m_u10_a, 0))
|
if (BIT(m_u10a, 0))
|
||||||
data |= m_io_x0->read();
|
data |= m_io_x0->read();
|
||||||
|
|
||||||
if (BIT(m_u10_a, 1))
|
if (BIT(m_u10a, 1))
|
||||||
data |= m_io_x1->read();
|
data |= m_io_x1->read();
|
||||||
|
|
||||||
if (BIT(m_u10_a, 2))
|
if (BIT(m_u10a, 2))
|
||||||
data |= m_io_x2->read();
|
data |= m_io_x2->read();
|
||||||
|
|
||||||
if (BIT(m_u10_a, 3))
|
if (BIT(m_u10a, 3))
|
||||||
data |= m_io_x3->read();
|
data |= m_io_x3->read();
|
||||||
|
|
||||||
if (BIT(m_u10_a, 4))
|
if (BIT(m_u10a, 4))
|
||||||
data |= m_io_x4->read(); // granny only
|
data |= m_io_x4->read(); // granny only
|
||||||
|
|
||||||
if (BIT(m_u10_a, 5))
|
if (BIT(m_u10a, 5))
|
||||||
data |= m_io_dsw0->read();
|
data |= m_io_dsw0->read();
|
||||||
|
|
||||||
if (BIT(m_u10_a, 6))
|
if (BIT(m_u10a, 6))
|
||||||
data |= m_io_dsw1->read();
|
data |= m_io_dsw1->read();
|
||||||
|
|
||||||
if (BIT(m_u10_a, 7))
|
if (BIT(m_u10a, 7))
|
||||||
data |= m_io_dsw2->read();
|
data |= m_io_dsw2->read();
|
||||||
|
|
||||||
if (m_u10_cb2)
|
if (m_u10_cb2)
|
||||||
@ -698,29 +691,29 @@ u8 by133_state::u10_b_r()
|
|||||||
|
|
||||||
void by133_state::u10_b_w(u8 data)
|
void by133_state::u10_b_w(u8 data)
|
||||||
{
|
{
|
||||||
m_u10_b = data;
|
m_u10b = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 by133_state::u11_a_r()
|
u8 by133_state::u11_a_r()
|
||||||
{
|
{
|
||||||
return m_u11_a;
|
return m_u11a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by133_state::u11_a_w(u8 data)
|
void by133_state::u11_a_w(u8 data)
|
||||||
{
|
{
|
||||||
m_u11_a = data;
|
m_u11a = data;
|
||||||
m_pia_u7->ca1_w(BIT(data, 1));
|
m_pia_u7->ca1_w(BIT(data, 1));
|
||||||
m_pia_u7->ca2_w(BIT(data, 2));
|
m_pia_u7->ca2_w(BIT(data, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 by133_state::u11_b_r()
|
u8 by133_state::u11_b_r()
|
||||||
{
|
{
|
||||||
return m_u11_b;
|
return m_u11b;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by133_state::u11_b_w(u8 data)
|
void by133_state::u11_b_w(u8 data)
|
||||||
{
|
{
|
||||||
m_u11_b = data;
|
m_u11b = data;
|
||||||
if (data == 0xB1)
|
if (data == 0xB1)
|
||||||
m_samples->start(5, 5); // outhole
|
m_samples->start(5, 5); // outhole
|
||||||
// Bits 0,1,2 go to 74LS138 to select one solenoid
|
// Bits 0,1,2 go to 74LS138 to select one solenoid
|
||||||
@ -749,18 +742,20 @@ TIMER_DEVICE_CALLBACK_MEMBER( by133_state::u11_timer )
|
|||||||
void by133_state::machine_start()
|
void by133_state::machine_start()
|
||||||
{
|
{
|
||||||
genpin_class::machine_start();
|
genpin_class::machine_start();
|
||||||
|
m_sound_select_handler.resolve();
|
||||||
|
m_sound_int_handler.resolve();
|
||||||
m_io_outputs.resolve();
|
m_io_outputs.resolve();
|
||||||
|
|
||||||
save_item(NAME(m_mpu_to_vid));
|
save_item(NAME(m_mpu_to_vid));
|
||||||
save_item(NAME(m_vid_to_mpu));
|
save_item(NAME(m_vid_to_mpu));
|
||||||
save_item(NAME(m_u7_a));
|
save_item(NAME(m_u7a));
|
||||||
save_item(NAME(m_u7_b));
|
save_item(NAME(m_u7b));
|
||||||
save_item(NAME(m_u7_cb2));
|
save_item(NAME(m_u10a));
|
||||||
save_item(NAME(m_u10_a));
|
save_item(NAME(m_u10b));
|
||||||
save_item(NAME(m_u10_b));
|
|
||||||
save_item(NAME(m_u10_cb2));
|
save_item(NAME(m_u10_cb2));
|
||||||
save_item(NAME(m_u11_a));
|
save_item(NAME(m_u11_cb2));
|
||||||
save_item(NAME(m_u11_b));
|
save_item(NAME(m_u11a));
|
||||||
|
save_item(NAME(m_u11b));
|
||||||
save_item(NAME(m_u10_timer));
|
save_item(NAME(m_u10_timer));
|
||||||
save_item(NAME(m_u11_timer));
|
save_item(NAME(m_u11_timer));
|
||||||
}
|
}
|
||||||
@ -771,13 +766,13 @@ void by133_state::machine_reset()
|
|||||||
for (u8 i = 0; i < m_io_outputs.size(); i++)
|
for (u8 i = 0; i < m_io_outputs.size(); i++)
|
||||||
m_io_outputs[i] = 0;
|
m_io_outputs[i] = 0;
|
||||||
|
|
||||||
m_u7_a = 0;
|
m_u7a = 0;
|
||||||
m_u7_b = 1; // select mode 2 of mc6803 on /reset (not emulated yet by the cpu)
|
m_u7b = 1; // select mode 2 of mc6803 on /reset (not emulated yet by the cpu)
|
||||||
m_u10_a = 0;
|
m_u10a = 0;
|
||||||
m_u10_b = 0;
|
m_u10b = 0;
|
||||||
m_u10_cb2 = 0;
|
m_u10_cb2 = 0;
|
||||||
m_u11_a = 0;
|
m_u11a = 0;
|
||||||
m_u11_b = 0;
|
m_u11b = 0;
|
||||||
m_mpu_to_vid = 0;
|
m_mpu_to_vid = 0;
|
||||||
m_vid_to_mpu = 0;
|
m_vid_to_mpu = 0;
|
||||||
m_beep->set_state(0);
|
m_beep->set_state(0);
|
||||||
@ -793,7 +788,7 @@ uint32_t by133_state::screen_update_granny(screen_device &screen, bitmap_rgb32 &
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void by133_state::babypac(machine_config &config)
|
void by133_state::by133(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
M6800(config, m_maincpu, XTAL(3'579'545)/4); // no xtal, just 2 chips
|
M6800(config, m_maincpu, XTAL(3'579'545)/4); // no xtal, just 2 chips
|
||||||
@ -802,12 +797,6 @@ void by133_state::babypac(machine_config &config)
|
|||||||
MC6809(config, m_videocpu, XTAL(3'579'545));
|
MC6809(config, m_videocpu, XTAL(3'579'545));
|
||||||
m_videocpu->set_addrmap(AS_PROGRAM, &by133_state::video_map);
|
m_videocpu->set_addrmap(AS_PROGRAM, &by133_state::video_map);
|
||||||
|
|
||||||
M6803(config, m_audiocpu, XTAL(3'579'545));
|
|
||||||
m_audiocpu->set_addrmap(AS_PROGRAM, &by133_state::audio_map);
|
|
||||||
m_audiocpu->out_p1_cb().set("dac", FUNC(dac_byte_interface::data_w)); // P10-P17
|
|
||||||
m_audiocpu->in_p2_cb().set(FUNC(by133_state::m6803_port2_r)); // P20-P24 sound command in
|
|
||||||
m_audiocpu->out_p2_cb().set(FUNC(by133_state::m6803_port2_w));
|
|
||||||
|
|
||||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||||
|
|
||||||
PIA6821(config, m_pia_u7, 0);
|
PIA6821(config, m_pia_u7, 0);
|
||||||
@ -850,8 +839,13 @@ void by133_state::babypac(machine_config &config)
|
|||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
genpin_audio(config);
|
genpin_audio(config);
|
||||||
SPEAKER(config, "speaker").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
ZN429E(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // U32 (Vidiot) or U6 (Cheap Squeak)
|
|
||||||
|
BALLY_CHEAP_SQUEAK(config, m_cheap_squeak);
|
||||||
|
m_cheap_squeak->add_route(ALL_OUTPUTS, "mono", 1.00);
|
||||||
|
m_sound_select_handler.bind().set(m_cheap_squeak, FUNC(bally_cheap_squeak_device::sound_select));
|
||||||
|
m_sound_int_handler.bind().set(m_cheap_squeak, FUNC(bally_cheap_squeak_device::sound_int));
|
||||||
|
m_cheap_squeak->sound_ack_w_handler().set(FUNC(by133_state::sound_ack_w));
|
||||||
|
|
||||||
SPEAKER(config, "beee").front_center();
|
SPEAKER(config, "beee").front_center();
|
||||||
BEEP(config, m_beep, 600).add_route(ALL_OUTPUTS, "beee", 0.10);
|
BEEP(config, m_beep, 600).add_route(ALL_OUTPUTS, "beee", 0.10);
|
||||||
@ -859,7 +853,7 @@ void by133_state::babypac(machine_config &config)
|
|||||||
|
|
||||||
void by133_state::granny(machine_config &config)
|
void by133_state::granny(machine_config &config)
|
||||||
{
|
{
|
||||||
babypac(config);
|
by133(config);
|
||||||
|
|
||||||
MC6809(config.replace(), m_videocpu, XTAL(8'000'000)); // MC68B09P (XTAL value hard to read)
|
MC6809(config.replace(), m_videocpu, XTAL(8'000'000)); // MC68B09P (XTAL value hard to read)
|
||||||
m_videocpu->set_addrmap(AS_PROGRAM, &by133_state::granny_map);
|
m_videocpu->set_addrmap(AS_PROGRAM, &by133_state::granny_map);
|
||||||
@ -886,8 +880,8 @@ ROM_START(babypac)
|
|||||||
ROM_LOAD( "891-05-u11.764", 0xc000, 0x2000, CRC(0a5967a4) SHA1(26d56ddea3f39d41e382449007bf7ba113c0285f))
|
ROM_LOAD( "891-05-u11.764", 0xc000, 0x2000, CRC(0a5967a4) SHA1(26d56ddea3f39d41e382449007bf7ba113c0285f))
|
||||||
ROM_LOAD( "891-06-u12.764", 0xe000, 0x2000, CRC(58cfe542) SHA1(e024d14019866bd460d1da6b901f9b786a76a181))
|
ROM_LOAD( "891-06-u12.764", 0xe000, 0x2000, CRC(58cfe542) SHA1(e024d14019866bd460d1da6b901f9b786a76a181))
|
||||||
|
|
||||||
ROM_REGION(0x10000, "audiocpu", 0)
|
ROM_REGION(0x10000, "cheap_squeak:cpu", 0)
|
||||||
ROM_LOAD( "891-12-u29.764", 0xe000, 0x2000, CRC(0b57fd5d) SHA1(43a03e6d16c87c3305adb04722484f992f23a1bd))
|
ROM_LOAD( "891-12-u29.764", 0xc000, 0x2000, CRC(0b57fd5d) SHA1(43a03e6d16c87c3305adb04722484f992f23a1bd))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START(babypac2)
|
ROM_START(babypac2)
|
||||||
@ -901,8 +895,8 @@ ROM_START(babypac2)
|
|||||||
ROM_LOAD( "891-05-u11.764", 0xc000, 0x2000, CRC(0a5967a4) SHA1(26d56ddea3f39d41e382449007bf7ba113c0285f))
|
ROM_LOAD( "891-05-u11.764", 0xc000, 0x2000, CRC(0a5967a4) SHA1(26d56ddea3f39d41e382449007bf7ba113c0285f))
|
||||||
ROM_LOAD( "891-06-u12.764", 0xe000, 0x2000, CRC(58cfe542) SHA1(e024d14019866bd460d1da6b901f9b786a76a181))
|
ROM_LOAD( "891-06-u12.764", 0xe000, 0x2000, CRC(58cfe542) SHA1(e024d14019866bd460d1da6b901f9b786a76a181))
|
||||||
|
|
||||||
ROM_REGION(0x10000, "audiocpu", 0)
|
ROM_REGION(0x10000, "cheap_squeak:cpu", 0)
|
||||||
ROM_LOAD( "891-12-u29.764", 0xe000, 0x2000, CRC(0b57fd5d) SHA1(43a03e6d16c87c3305adb04722484f992f23a1bd))
|
ROM_LOAD( "891-12-u29.764", 0xc000, 0x2000, CRC(0b57fd5d) SHA1(43a03e6d16c87c3305adb04722484f992f23a1bd))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/*-----------------------------------------------------------------
|
/*-----------------------------------------------------------------
|
||||||
@ -921,13 +915,13 @@ ROM_START(granny)
|
|||||||
ROM_LOAD( "vid_u8.764", 0xc000, 0x2000, CRC(a442bc01) SHA1(2c01123dc5799561ae9e7c5d6db588b82b5ae59c))
|
ROM_LOAD( "vid_u8.764", 0xc000, 0x2000, CRC(a442bc01) SHA1(2c01123dc5799561ae9e7c5d6db588b82b5ae59c))
|
||||||
ROM_LOAD( "vid_u9.764", 0xe000, 0x2000, CRC(6b67a1f7) SHA1(251c2b941898363bbd6ee1a94710e2b2938ec851))
|
ROM_LOAD( "vid_u9.764", 0xe000, 0x2000, CRC(6b67a1f7) SHA1(251c2b941898363bbd6ee1a94710e2b2938ec851))
|
||||||
|
|
||||||
ROM_REGION(0x10000, "audiocpu", 0)
|
ROM_REGION(0x10000, "cheap_squeak:cpu", 0)
|
||||||
ROM_LOAD( "cs_u3.764", 0xe000, 0x2000, CRC(0a39a51d) SHA1(98342ba38e48578ce9870f2ee85b553d46c0e35f))
|
ROM_LOAD( "cs_u3.764", 0xc000, 0x2000, CRC(0a39a51d) SHA1(98342ba38e48578ce9870f2ee85b553d46c0e35f))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
GAME( 1982, babypac, 0, babypac, babypac, by133_state, empty_init, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 1)", MACHINE_IS_SKELETON_MECHANICAL )
|
GAME( 1982, babypac, 0, by133, babypac, by133_state, empty_init, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 1)", MACHINE_IS_SKELETON_MECHANICAL )
|
||||||
GAME( 1982, babypac2, babypac, babypac, babypac, by133_state, empty_init, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 2)", MACHINE_IS_SKELETON_MECHANICAL )
|
GAME( 1982, babypac2, babypac, by133, babypac, by133_state, empty_init, ROT90, "Dave Nutting Associates / Bally", "Baby Pac-Man (set 2)", MACHINE_IS_SKELETON_MECHANICAL )
|
||||||
GAME( 1984, granny, 0, granny, granny, by133_state, empty_init, ROT0, "Bally", "Granny and the Gators", MACHINE_IS_SKELETON_MECHANICAL )
|
GAME( 1984, granny, 0, granny, granny, by133_state, empty_init, ROT0, "Bally", "Granny and the Gators", MACHINE_IS_SKELETON_MECHANICAL )
|
||||||
|
@ -47,14 +47,14 @@ private:
|
|||||||
void zac_2_io(address_map &map);
|
void zac_2_io(address_map &map);
|
||||||
void zac_2_map(address_map &map);
|
void zac_2_map(address_map &map);
|
||||||
|
|
||||||
uint8_t m_input_line = 0U;
|
uint8_t m_row = 0U;
|
||||||
uint8_t m_t_c = 0U;
|
uint8_t m_t_c = 0U;
|
||||||
uint8_t m_out_offs = 0U;
|
uint8_t m_out_offs = 0U;
|
||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
virtual void machine_start() override { m_digits.resolve(); }
|
virtual void machine_start() override { m_digits.resolve(); }
|
||||||
required_device<s2650_device> m_maincpu;
|
required_device<s2650_device> m_maincpu;
|
||||||
required_shared_ptr<uint8_t> m_p_ram;
|
required_shared_ptr<uint8_t> m_p_ram;
|
||||||
required_ioport_array<7> m_io_keyboard;
|
required_ioport_array<8> m_io_keyboard;
|
||||||
output_finder<78> m_digits;
|
output_finder<78> m_digits;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -167,19 +167,19 @@ static INPUT_PORTS_START( zac_2 )
|
|||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("INP53")
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("INP53")
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("INP54")
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("INP54")
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("INP55")
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("INP55")
|
||||||
|
|
||||||
|
PORT_START("X7")
|
||||||
|
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
uint8_t zac_2_state::ctrl_r()
|
uint8_t zac_2_state::ctrl_r()
|
||||||
{
|
{
|
||||||
if (m_input_line < 7)
|
return m_io_keyboard[m_row]->read();
|
||||||
return m_io_keyboard[m_input_line]->read();
|
|
||||||
|
|
||||||
return 0xff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void zac_2_state::ctrl_w(uint8_t data)
|
void zac_2_state::ctrl_w(uint8_t data)
|
||||||
{
|
{
|
||||||
m_input_line = data & 7;
|
m_row = data & 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
void zac_2_state::data_w(uint8_t data)
|
void zac_2_state::data_w(uint8_t data)
|
||||||
|
Loading…
Reference in New Issue
Block a user