mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
New working machines
-------------------- Hot Chilli (95103, v0104) [Roberto Fresca, Grull Osgo, Matt B]
This commit is contained in:
parent
9b07129f5a
commit
8ffa5ef1d9
@ -4880,6 +4880,7 @@ files {
|
||||
MAME_DIR .. "src/mame/includes/homedata.h",
|
||||
MAME_DIR .. "src/mame/video/homedata.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/hotblock.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/hotchili.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/hotstuff.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/houseball.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/imolagp.cpp",
|
||||
|
@ -564,6 +564,7 @@ homedata.cpp
|
||||
homerun.cpp
|
||||
hornet.cpp
|
||||
hotblock.cpp
|
||||
hotchili.cpp
|
||||
hotstuff.cpp
|
||||
houseball.cpp
|
||||
hshavoc.cpp
|
||||
|
688
src/mame/drivers/hotchili.cpp
Normal file
688
src/mame/drivers/hotchili.cpp
Normal file
@ -0,0 +1,688 @@
|
||||
// license:<license>
|
||||
// copyright-holders: Roberto Fresca, Grull Osgo.
|
||||
/***************************************************************************************
|
||||
|
||||
HOT CHILLI
|
||||
1995, Pacific Gaming Pty Ltd.
|
||||
|
||||
Driver by Roberto Fresca & Grull Osgo.
|
||||
|
||||
|
||||
One of the most beautiful designs for 8bit slots machines.
|
||||
|
||||
The reverse-engineering was made seeing a few PCB pictures, and following the code.
|
||||
After all these exhaustive analysis we finally got the inputs working, but they are
|
||||
temporized and transformed in some way through dedicated hardware, so maybe they are
|
||||
not totally accurate.
|
||||
|
||||
The game has dual coin sensor (upper/lower) to allow hook a modern coin comparator.
|
||||
|
||||
|
||||
****************************************************************************************
|
||||
|
||||
Technical Notes:
|
||||
----------------
|
||||
|
||||
MAIN PCB:
|
||||
J1100155A
|
||||
K1100355A
|
||||
|
||||
1x Zilog Z0840006PSC (Z80 CPU)
|
||||
1x Yamaha YM2149F
|
||||
|
||||
1x Allumer/Seta X1-001A
|
||||
1x Allumer/Seta X1-002A
|
||||
|
||||
1x 6264 SRAM.
|
||||
|
||||
1x 27C512 for program (IC32).
|
||||
4x 27C512 for graphics (IC1, IC2, IC25, IC26).
|
||||
|
||||
2x MB7124 Bipolar PROMs (IC8, IC9).
|
||||
|
||||
1x Maxim MAX232C (IC55)
|
||||
1x Taito TC0070RGB (RGB DAC)
|
||||
1x NEC D825
|
||||
|
||||
1x Xtal 12.000 MHz.
|
||||
1x Xtal 2.4576 MHz.
|
||||
|
||||
1x unpopulated DIP40 socket
|
||||
marked as JAE PS-20STS (*)
|
||||
|
||||
(*) Here is plugged a UNIVERSAL RAM PCB:
|
||||
|
||||
Etched:
|
||||
J9100140A
|
||||
K9100188A
|
||||
|
||||
IC1: 8464A-10LL
|
||||
IC2: LS174
|
||||
IC3: LM393N
|
||||
IC4: MC14011BCP
|
||||
IC5: SN74LS273N
|
||||
IC6: AMPAL18P8APC
|
||||
IC7: SN74LS74AN
|
||||
|
||||
1x unknown battery (not present)
|
||||
|
||||
|
||||
***************************************************************************************
|
||||
|
||||
How to play...
|
||||
|
||||
Let the machine boots.
|
||||
Add credits with the COIN IN key (key 5).
|
||||
Choose the number of lines to play (1-3-5-7-9) using the PLAY LINE keys (keys A-S-D-F-G).
|
||||
Bet/Play de desired amount of credits (1-2-3-5-10) using the BET buttons (keys Z-X-C-V-B).
|
||||
|
||||
|
||||
To enter the Test Mode:
|
||||
|
||||
1) Open the Door (be patient, it's a temporized input and could take more than 10 sec.)
|
||||
2) Use TEST key (key T) to switch the test type.
|
||||
3) Use PLAY 1 CREDIT key (key Z) to choose/set.
|
||||
3) Use the TEST END key (key Y) to exit to the game.
|
||||
|
||||
To see the meters just press BOOKS key (key 0). Press it again to exit.
|
||||
If you want to use the clear/set function, just keep pressed key 9 during boot.
|
||||
|
||||
|
||||
***************************************************************************************
|
||||
|
||||
Message codes:
|
||||
--------------
|
||||
|
||||
00 CLEAR MESSAGE LINE
|
||||
01 COPYRIGHT PACIFIC GAMES
|
||||
02 HOPPER EMPTY CALL ATT
|
||||
03 DOOR OPENED DO NOT PLAY
|
||||
04 DOOR CLOSED PLAY BOW
|
||||
05 MACHINE RESERVED
|
||||
06 POWER UP PLAY NOW
|
||||
07/08 CONGRATULATIONS LARGE WIN
|
||||
09 LOW VOLTAGE
|
||||
0A BATTERY
|
||||
0B COIN JAM
|
||||
0C COINS OVER DISPENSED
|
||||
0D HOPPER JAM
|
||||
0E HOPPER JAM
|
||||
0F SUB CLEAR
|
||||
10 dIP SW 8 ON
|
||||
11 GAME INVALID OFF LINE ERROR
|
||||
12 GAME INVALID COMM ERROR
|
||||
13 MACHINE STOP
|
||||
14 GAME INVALID METER FAULT
|
||||
15 PLAY OR PRESS COLLECT FOR HAND PAY
|
||||
16 CALL ATT. FOR HAND PAY
|
||||
17 A A A A A A A A
|
||||
18 OVER 50 CREDITS CALL ATT.
|
||||
19 OVER 100 CREDITS CALL ATT.
|
||||
1A OVER 150 CREDITS CALL ATT.
|
||||
1B OVER 250 CREDITS CALL ATT.
|
||||
1C OVER 300 CREDITS CALL ATT.
|
||||
1D OVER 500 CREDITS CALL ATT.
|
||||
1E OVER 600 CREDITS CALL ATT.
|
||||
1F OVER 1000 CREDITS CALL ATT.
|
||||
20 OVER 1500 CREDITS CALL ATT.
|
||||
21 OVER 2500 CREDITS CALL ATT.
|
||||
22 OVER 3000 CREDITS CALL ATT.
|
||||
23 OVER 5000 CREDITS CALL ATT.
|
||||
24 OVER 10000 CREDITS CALL ATT.
|
||||
25 NO HAY MENSAJE
|
||||
26 1ST GAMBLE OVER
|
||||
27 NO MESSAGE
|
||||
28 FOR HAND PAY PRESS COLLECT
|
||||
29 FREE GAME #1
|
||||
2A FREE GAME #2
|
||||
2B FREE GAME #3
|
||||
2C FREE GAME #4
|
||||
2D FREE GAME #5
|
||||
2E FREE GAME OVER
|
||||
2F FREE GANE OVER PLAY OR PRESS COLLECT FOR HAND PAY
|
||||
30 2ND GAMBLE OVER
|
||||
31 3RD GAMBLE OVER
|
||||
32 4TH GAMBLE OVER
|
||||
33 5TH GAMBLE OVER
|
||||
34 2ND GAMBLE OVER PLAY OR PRESS COLLECT FOR HAND PAY
|
||||
35 3RD GAMBLE OVER PLAY OR PRESS COLLECT FOR HAND PAY
|
||||
36 4TH GAMBLE OVER PLAY OR PRESS COLLECT FOR HAND PAY
|
||||
37 5TH GAMBLE OVER PLAY OR PRESS COLLECT FOR HAND PAY
|
||||
|
||||
***************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "video/seta001.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
#include "hotchili.lh"
|
||||
|
||||
#define MAIN_CLOCK XTAL(8'000'000)
|
||||
|
||||
|
||||
class hotchili_state : public driver_device
|
||||
{
|
||||
|
||||
public:
|
||||
hotchili_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_seta001(*this, "spritegen")
|
||||
, m_palette(*this, "palette")
|
||||
, m_mainbank(*this, "mainbank")
|
||||
, m_ram(*this, RAM_TAG)
|
||||
, m_nvram(*this, "nvram")
|
||||
, m_lamp(*this, "lamp%u", 0U)
|
||||
{
|
||||
}
|
||||
|
||||
void hotchili(machine_config &config);
|
||||
void hotchili_mainbank(machine_config &config);
|
||||
void init_hc();
|
||||
|
||||
|
||||
protected:
|
||||
// driver_device overrides
|
||||
virtual void machine_start() override;
|
||||
|
||||
|
||||
private:
|
||||
// screen updates
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void hc_palette(palette_device &palette) const;
|
||||
|
||||
void seta001_ctrl_write(offs_t offs, uint8_t data);
|
||||
uint8_t seta001_ctrl_read(offs_t offs);
|
||||
|
||||
//external ram
|
||||
void extram_w(offs_t offset, uint8_t data);
|
||||
uint8_t extram_r(offs_t offset);
|
||||
uint8_t lo, hi;
|
||||
uint16_t mask, addr_latch;
|
||||
|
||||
void hc_map(address_map &map);
|
||||
void mainbank_map(address_map &map);
|
||||
void bankswitch_w(uint8_t data);
|
||||
|
||||
//inports
|
||||
uint8_t inport0_r();
|
||||
uint8_t inport3_r();
|
||||
|
||||
//outports
|
||||
void outp1_w(offs_t offset, uint8_t data);
|
||||
void outp2_w(offs_t offset, uint8_t data);
|
||||
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<seta001_device> m_seta001;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<address_map_bank_device> m_mainbank;
|
||||
required_device<ram_device> m_ram;
|
||||
required_device<nvram_device> m_nvram;
|
||||
output_finder<40> m_lamp;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
|
||||
|
||||
uint8_t m_meters = 0;
|
||||
uint8_t m_frame = 0;
|
||||
bool m_auxbtt = false;
|
||||
};
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Video Hardware *
|
||||
*********************************************/
|
||||
|
||||
void hotchili_state::seta001_ctrl_write(offs_t offs, uint8_t data)
|
||||
{
|
||||
offs = (offs & 0x0c) >> 2;
|
||||
m_seta001->spritectrl_w8(offs, data);
|
||||
logerror("m_seta001_offs_w:%x: data:%x\n", offs, data);
|
||||
}
|
||||
|
||||
uint8_t hotchili_state::seta001_ctrl_read(offs_t offs)
|
||||
{
|
||||
offs = (offs & 0x0c) >> 2;
|
||||
logerror("m_seta001_offs_r:%x:\n", offs);
|
||||
return m_seta001->spritectrl_r8(offs);
|
||||
}
|
||||
|
||||
void hotchili_state::hc_palette(palette_device &palette) const
|
||||
{
|
||||
uint8_t const *const color_prom = memregion("proms")->base();
|
||||
|
||||
for (int i = 0; i < palette.entries(); i++)
|
||||
{
|
||||
int const col = (color_prom[i] << 8) | color_prom[i + 512];
|
||||
palette.set_pen_color(i, pal5bit(col >> 10), pal5bit(col >> 5), pal5bit(col >> 0));
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t hotchili_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
bitmap.fill(0x1f0, cliprect);
|
||||
|
||||
m_seta001->draw_sprites(screen, bitmap, cliprect, 0x1000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Bankswitching *
|
||||
*********************************************/
|
||||
|
||||
void hotchili_state::bankswitch_w(uint8_t data)
|
||||
{
|
||||
uint8_t bank, hibit, high;
|
||||
high = data & 0x03;
|
||||
hibit = data >> 7;
|
||||
bank = hibit ? 4 + high : 4;
|
||||
m_mainbank->set_bank(bank);
|
||||
}
|
||||
|
||||
void hotchili_state::mainbank_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07fff).rom().region(":maincpu", 0x0000);
|
||||
map(0x008000, 0x0ffff).rom().region(":maincpu", 0x8000);
|
||||
}
|
||||
|
||||
void hotchili_state::hotchili_mainbank(machine_config &config)
|
||||
{
|
||||
ADDRESS_MAP_BANK(config, "mainbank").set_map(&hotchili_state::mainbank_map).set_options(ENDIANNESS_LITTLE, 8, 16, 0x2000);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Memory Map Information *
|
||||
*********************************************/
|
||||
|
||||
void hotchili_state::hc_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom();
|
||||
map(0x8000, 0xbfff).m(m_mainbank, FUNC(address_map_bank_device::amap8));
|
||||
map(0xa000, 0xafff).ram().rw(m_seta001, FUNC(seta001_device::spritecodelow_r8), FUNC(seta001_device::spritecodelow_w8));
|
||||
map(0xb000, 0xbfff).ram().rw(m_seta001, FUNC(seta001_device::spritecodehigh_r8), FUNC(seta001_device::spritecodehigh_w8));
|
||||
map(0xc000, 0xdfff).ram();
|
||||
map(0xe000, 0xe2ff).ram().rw(m_seta001, FUNC(seta001_device::spriteylow_r8), FUNC(seta001_device::spriteylow_w8));
|
||||
map(0xe300, 0xe303).ram().w(m_seta001, FUNC(seta001_device::spritectrl_w8));
|
||||
map(0xe800, 0xe800).w(m_seta001, FUNC(seta001_device::spritebgflag_w8));
|
||||
map(0xf000, 0xf00c).rw( FUNC(hotchili_state::extram_r), FUNC(hotchili_state::extram_w));
|
||||
map(0xf200, 0xf200).w(FUNC(hotchili_state::outp2_w)); // outport (mem img ca85h)
|
||||
map(0xf300, 0xf300).w(FUNC(hotchili_state::bankswitch_w));
|
||||
map(0xf400, 0xf40c).w(FUNC(hotchili_state::outp1_w)); // 4 outports 0,4,8,c (mem img ca81h - ca84h)
|
||||
map(0xf500, 0xf500).r(FUNC(hotchili_state::inport0_r));
|
||||
map(0xf501, 0xf501).portr("IN1");
|
||||
map(0xf600, 0xf600).portr("IN2");
|
||||
map(0xf601, 0xf601).r(FUNC(hotchili_state::inport3_r));
|
||||
map(0xf700, 0xf700).noprw(); // watchdog???
|
||||
map(0xf800, 0xf801).rw("ay8910", FUNC(ay8910_device::data_r), FUNC(ay8910_device::address_data_w));
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Input Ports *
|
||||
*********************************************/
|
||||
|
||||
static INPUT_PORTS_START( hotchili )
|
||||
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("All Clear / Configuration") // pressed on startup
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unknown
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) // active: enables RNG and read inputs on secondary buffer (inputs with special timing)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Meter Reading Key") PORT_TOGGLE
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_U) PORT_NAME("Jackpot Reset Key")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_6) PORT_NAME("Clear Att. Key") //Next Page into Input or Output Test
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Collect")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8) PORT_NAME("Reserve / Next (Met.Read)")
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) // coin upper sensor - currently not used
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) // coin lower sensor
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_CODE(KEYCODE_E) PORT_NAME("CoinToCashBox") // coin to cashbox
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("CoinTest") // coin test
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_T) PORT_NAME("Test Select") // test select
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_Y) PORT_NAME("Test End")
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_GAMBLE_DOOR ) PORT_TOGGLE
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Play 1 Credits / Change (Setup)") // 1st. Start
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Play 2 Credits") // 2nd. Start
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Play 3 Credits") // 3rd. Start
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Play 5 Credits") // 4th. Start
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Play 10 Credits / Next (Setup)") // 5th. Start
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unknown
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_J) PORT_NAME("Hopper Empty Reset Key")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_K) PORT_NAME("Hopper CountSW")
|
||||
|
||||
PORT_START("IN4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_A) PORT_NAME("Play 1 Line")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_S) PORT_NAME("Play 3 Lines")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_D) PORT_NAME("Play 5 Lines")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_F) PORT_NAME("Play 7 Lines")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_G) PORT_NAME("Play 9 Lines")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER )
|
||||
|
||||
PORT_START("DSW1")
|
||||
PORT_DIPNAME( 0x01, 0x01, "DSW1" )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/*******************************************
|
||||
* Inputs *
|
||||
*******************************************/
|
||||
|
||||
uint8_t hotchili_state::inport0_r()
|
||||
{
|
||||
if(m_frame == 8)
|
||||
{
|
||||
m_frame = 0;
|
||||
return ioport("IN0")->read() & 0xf9; // enables alternate inputs read
|
||||
}
|
||||
|
||||
return ioport("IN0")->read();
|
||||
}
|
||||
|
||||
|
||||
uint8_t hotchili_state::inport3_r()
|
||||
{
|
||||
return m_meters; // meters signal feedback
|
||||
}
|
||||
|
||||
|
||||
/*******************************************
|
||||
* Lamps and Outputs *
|
||||
*******************************************/
|
||||
|
||||
|
||||
void hotchili_state::outp1_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
offset = (offset >> 2) & 0x03;
|
||||
switch( offset )
|
||||
{
|
||||
case 0:
|
||||
m_lamp[0] = BIT(data,0); // 1st Start
|
||||
m_lamp[1] = BIT(data,1); // 2nd Start
|
||||
m_lamp[2] = BIT(data,2); // 3rd Start
|
||||
m_lamp[3] = BIT(data,3); // 4th Start
|
||||
m_lamp[4] = BIT(data,4); // 5th Start
|
||||
m_lamp[5] = BIT(data,5);
|
||||
m_lamp[6] = BIT(data,6);
|
||||
m_lamp[7] = BIT(data,7); // motor hopper
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_lamp[8] = BIT(data,0); // 1st Start - Test Mode
|
||||
m_lamp[9] = BIT(data,1); // 2nd Start
|
||||
m_lamp[10] = BIT(data,2); // 3rd Start
|
||||
m_lamp[11] = BIT(data,3); // 4th Start
|
||||
m_lamp[12] = BIT(data,4); // 5th Start
|
||||
m_lamp[13] = BIT(data,5); // Coin Lock Out Coil
|
||||
m_lamp[14] = BIT(data,6); // Divert Solenoid
|
||||
m_lamp[15] = BIT(data,7); // Divert Solenoid
|
||||
break;
|
||||
|
||||
case 2:
|
||||
m_lamp[16] = BIT(data,0); // alt door lamp?
|
||||
m_lamp[17] = BIT(data,1); // Animation Lamp D
|
||||
m_lamp[18] = BIT(data,2); // Animation Lamp C
|
||||
m_lamp[19] = BIT(data,3); // Animation Lamp B
|
||||
m_lamp[20] = BIT(data,4); // Animation Lamp A
|
||||
m_lamp[21] = BIT(data,5); // Door Oper Tower
|
||||
m_lamp[22] = BIT(data,6); // Call Attendat Tower
|
||||
m_lamp[23] = BIT(data,7); // Jackpot Tower
|
||||
break;
|
||||
|
||||
case 3:
|
||||
m_meters = data;
|
||||
m_lamp[24] = BIT(data,0); machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); // Coin 1
|
||||
m_lamp[25] = BIT(data,1); machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); // Coin 2
|
||||
m_lamp[26] = BIT(data,2); machine().bookkeeping().coin_counter_w(2, BIT(data, 2)); // Coin 3 Credits Played
|
||||
m_lamp[27] = BIT(data,3); machine().bookkeeping().coin_counter_w(3, BIT(data, 3)); // Coin 4 Credits Won
|
||||
m_lamp[28] = BIT(data,4); machine().bookkeeping().coin_counter_w(4, BIT(data, 4)); // Coin 5 Credits to Cash Box
|
||||
m_lamp[29] = BIT(data,5); machine().bookkeeping().coin_counter_w(5, BIT(data, 5)); // Coin 6 Creditos Cancelados (Hand Pay)
|
||||
m_lamp[30] = BIT(data,6); machine().bookkeeping().coin_counter_w(6, BIT(data, 6)); // Coin 7 Games
|
||||
m_lamp[31] = BIT(data,7); machine().bookkeeping().coin_counter_w(7, BIT(data, 7)); // Coin 8
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hotchili_state::outp2_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_lamp[32] = BIT(data,0); // 1st Line
|
||||
m_lamp[33] = BIT(data,1); // 2nd Line
|
||||
m_lamp[34] = BIT(data,2); //·3rd Line
|
||||
m_lamp[35] = BIT(data,3); // 4th Line
|
||||
m_lamp[36] = BIT(data,4); // 5th Line
|
||||
m_lamp[37] = BIT(data,5);
|
||||
m_lamp[38] = BIT(data,6);
|
||||
m_lamp[39] = BIT(data,7);
|
||||
}
|
||||
|
||||
/*********************************************
|
||||
* Graphics Layouts *
|
||||
*********************************************/
|
||||
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,4),
|
||||
4,
|
||||
{ RGN_FRAC(3,4), RGN_FRAC(2,4), RGN_FRAC(1,4), RGN_FRAC(0,4) },
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7,
|
||||
8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||
16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
|
||||
32*8
|
||||
};
|
||||
|
||||
|
||||
/**************************************************
|
||||
* Graphics Decode Information *
|
||||
**************************************************/
|
||||
|
||||
|
||||
static GFXDECODE_START( gfx_hotchili )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x0, 32 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/**************************************************
|
||||
* Universal External RAM Module *
|
||||
**************************************************/
|
||||
|
||||
|
||||
void hotchili_state::extram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
//logerror("external_memory_w:%x: data:%x\n", offset, data);
|
||||
offset = (offset >> 2) & 0x03;
|
||||
switch( offset )
|
||||
{
|
||||
case 0: lo = data;
|
||||
break;
|
||||
|
||||
case 1: hi = data & 0x07;
|
||||
break;
|
||||
|
||||
case 2: mask = data; addr_latch = (hi * 0x100) + lo;
|
||||
break;
|
||||
|
||||
case 3: m_ram->pointer()[addr_latch & 0x0fff] = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t hotchili_state::extram_r(offs_t offset)
|
||||
{
|
||||
//logerror("external_memory_r:%x\n", offset);
|
||||
offset = (offset >> 2) & 0x07;
|
||||
switch( offset )
|
||||
{
|
||||
case 0: return lo;
|
||||
break;
|
||||
|
||||
case 1: return hi;
|
||||
break;
|
||||
|
||||
case 2: return 0x3f; // mask
|
||||
break;
|
||||
|
||||
case 3: return m_ram->pointer()[addr_latch & 0x0fff];
|
||||
break;
|
||||
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************************************
|
||||
* Machine Start *
|
||||
******************************************/
|
||||
|
||||
|
||||
void hotchili_state::machine_start()
|
||||
{
|
||||
m_lamp.resolve();
|
||||
m_nvram->set_base(m_ram->pointer(), m_ram->size());
|
||||
}
|
||||
|
||||
|
||||
/******************************************
|
||||
* Interrupts Handling *
|
||||
******************************************/
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(hotchili_state::vblank_irq)
|
||||
{
|
||||
m_maincpu->set_input_line(0, HOLD_LINE);
|
||||
|
||||
if(state)
|
||||
{
|
||||
m_frame++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Machine Drivers *
|
||||
*********************************************/
|
||||
|
||||
|
||||
void hotchili_state::hotchili(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
Z80(config, m_maincpu, MAIN_CLOCK / 2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &hotchili_state::hc_map);
|
||||
|
||||
hotchili_mainbank(config);
|
||||
|
||||
RAM(config, m_ram).set_default_size("2K").set_default_value(0);
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||
|
||||
// video hardware
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_refresh_hz(60);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
screen.set_size(32*8, 32*8);
|
||||
screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
|
||||
screen.set_screen_update(FUNC(hotchili_state::screen_update));
|
||||
screen.screen_vblank().set(FUNC(hotchili_state::vblank_irq));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
SETA001_SPRITE(config, m_seta001, 16'000'000, m_palette, gfx_hotchili);
|
||||
m_seta001->set_fg_yoffsets( -0x12, 0x0e );
|
||||
m_seta001->set_bg_yoffsets( 0x1, -0x1 );
|
||||
|
||||
PALETTE(config, m_palette, FUNC(hotchili_state::hc_palette), 512);
|
||||
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
ay8910_device &ay8910(AY8910(config, "ay8910", MAIN_CLOCK / 4));
|
||||
ay8910.port_a_read_callback().set_ioport("DSW1");
|
||||
ay8910.port_b_read_callback().set_ioport("IN4");
|
||||
ay8910.add_route(ALL_OUTPUTS, "mono", 1.00);
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Rom Load *
|
||||
*********************************************/
|
||||
|
||||
|
||||
ROM_START( hotchili )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "h.chilli_95103_v0191__27c512.ic32", 0x0000, 0x10000, CRC(54b7c675) SHA1(7ce0348ae9561784519cdb99e33a57922520941c) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx1", 0 )
|
||||
ROM_LOAD( "9510301_chr0_h.c.nsw.ic2", 0x00000, 0x10000, CRC(52faf9ae) SHA1(72050a3168f7326f39743e8424a0795b14b00d69) )
|
||||
ROM_LOAD( "9510301_chr1_h.c.nsw.ic1", 0x10000, 0x10000, CRC(f0ac0f98) SHA1(45a2f304758f2b1d701feb8db58b6137e58fed4c) )
|
||||
ROM_LOAD( "9510301_chr2_h.c.nsw.ic25", 0x20000, 0x10000, CRC(a946c2e4) SHA1(7530aebd5c5204bb7aa091acd108b0cd00ac272b) )
|
||||
ROM_LOAD( "9510301_chr3_h.c.nsw.ic26", 0x30000, 0x10000, CRC(69dc0f95) SHA1(7b613a5d1f2d431b178fc105c2023ec8bbf3a873) )
|
||||
|
||||
ROM_REGION( 0x0800, "nvram", 0 )
|
||||
ROM_LOAD( "hotchili_nvram.bin", 0x0000, 0x0800, CRC(e2b463e5) SHA1(a94ae3888858173aed53e54cceb951a9fe8b7a20) )
|
||||
|
||||
ROM_REGION( 0x0400, "proms", 0 )
|
||||
ROM_LOAD( "vn55-1.ic8", 0x0000, 0x0200, CRC(3acb6539) SHA1(f202b2403acf1c6e7abc61e860a75aef318ab03c) )
|
||||
ROM_LOAD( "vn55-2.ic9", 0x0200, 0x0200, CRC(e1d2897e) SHA1(2e8ff5041dfd4b69488f0d580645564bd523fc10) )
|
||||
ROM_END
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Driver Init *
|
||||
*********************************************/
|
||||
|
||||
void hotchili_state::init_hc()
|
||||
{
|
||||
uint8_t *ROM = memregion("maincpu")->base();
|
||||
|
||||
ROM[0x03e0] = 0x05; // Shortens long delay at startup
|
||||
ROM[0x05bc] = 0x00; // Avoids ram error flag setup
|
||||
ROM[0x06c1] = 0x20; // Skip Rom Error
|
||||
ROM[0x06c4] = 0xc6; // Skip Ram Error
|
||||
ROM[0x06d1] = 0xd3; // Skip Ram Error
|
||||
ROM[0x06d2] = 0x06; // Skip Ram Error
|
||||
ROM[0x1c54] = 0x84; // Avoids meter error
|
||||
ROM[0x1c5b] = 0x84; // Avoids meter error
|
||||
}
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Game Drivers *
|
||||
*********************************************/
|
||||
|
||||
// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
|
||||
GAMEL( 1995, hotchili, 0, hotchili, hotchili, hotchili_state, init_hc, ROT0, "Pacific Gaming Pty Ltd.", "Hot Chilli (95103, v0104)", 0 , layout_hotchili )
|
153
src/mame/layout/hotchili.lay
Normal file
153
src/mame/layout/hotchili.lay
Normal file
@ -0,0 +1,153 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
|
||||
<element name="bet_1" defstate="0">
|
||||
<rect state="1"><color red="1.0" green="0.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.3" green="0.0" blue="0.0" /></rect>
|
||||
<text string="BET 1">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="bet_2" defstate="0">
|
||||
<rect state="1"><color red="1.0" green="0.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.3" green="0.0" blue="0.0" /></rect>
|
||||
<text string="BET 2">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="bet_3" defstate="0">
|
||||
<rect state="1"><color red="1.0" green="0.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.3" green="0.0" blue="0.0" /></rect>
|
||||
<text string="BET 3">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="bet_5" defstate="0">
|
||||
<rect state="1"><color red="1.0" green="0.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.3" green="0.0" blue="0.0" /></rect>
|
||||
<text string="BET 5">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="bet_10" defstate="0">
|
||||
<rect state="1"><color red="1.0" green="0.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.3" green="0.0" blue="0.0" /></rect>
|
||||
<text string="BET 10">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="play_1l" defstate="0">
|
||||
<rect state="1"><color red="0.0" green="1.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.0" green="0.3" blue="0.0" /></rect>
|
||||
<text string="PLAY 1 L">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="play_3l" defstate="0">
|
||||
<rect state="1"><color red="0.0" green="1.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.0" green="0.3" blue="0.0" /></rect>
|
||||
<text string="PLAY 3 L">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="play_5l" defstate="0">
|
||||
<rect state="1"><color red="0.0" green="1.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.0" green="0.3" blue="0.0" /></rect>
|
||||
<text string="PLAY 5 L">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="play_7l" defstate="0">
|
||||
<rect state="1"><color red="0.0" green="1.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.0" green="0.3" blue="0.0" /></rect>
|
||||
<text string="PLAY 7 L">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="play_9l" defstate="0">
|
||||
<rect state="1"><color red="0.0" green="1.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.0" green="0.3" blue="0.0" /></rect>
|
||||
<text string="PLAY 9 L">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="collect" defstate="0">
|
||||
<rect state="1"><color red="1.0" green="1.0" blue="0.0" /></rect>
|
||||
<rect state="0"><color red="0.3" green="0.3" blue="0.0" /></rect>
|
||||
<text string="COLLECT">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0.1" y="0.15" width="0.8" height="0.7" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="cpanel">
|
||||
<rect>
|
||||
<color red="0.00" green="0.00" blue="0.00" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
|
||||
|
||||
<view name="Button Lamps">
|
||||
<screen index="0">
|
||||
<bounds left="0" top="0" right="640" bottom="480" />
|
||||
</screen>
|
||||
<element ref="cpanel"><bounds left="0" right="640" top="480" bottom="530" /></element>
|
||||
<element name="lamp8" ref="bet_1" inputtag="IN2" inputmask="0x01">
|
||||
<bounds x="4" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp9" ref="bet_2" inputtag="IN2" inputmask="0x02">
|
||||
<bounds x="62" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp10" ref="bet_3" inputtag="IN2" inputmask="0x04">
|
||||
<bounds x="120" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp11" ref="bet_5" inputtag="IN2" inputmask="0x08">
|
||||
<bounds x="178" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp12" ref="bet_10" inputtag="IN2" inputmask="0x10">
|
||||
<bounds x="236" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp32" ref="play_1l" inputtag="IN4" inputmask="0x01">
|
||||
<bounds x="294" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp33" ref="play_3l" inputtag="IN4" inputmask="0x02">
|
||||
<bounds x="352" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp34" ref="play_5l" inputtag="IN4" inputmask="0x04">
|
||||
<bounds x="410" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp35" ref="play_7l" inputtag="IN4" inputmask="0x08">
|
||||
<bounds x="468" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp36" ref="play_9l" inputtag="IN4" inputmask="0x10">
|
||||
<bounds x="526" y="490" width="54" height="28" />
|
||||
</element>
|
||||
<element name="lamp10" ref="collect" inputtag="IN0" inputmask="0x40">
|
||||
<bounds x="584" y="490" width="54" height="28" />
|
||||
</element>
|
||||
</view>
|
||||
</mamelayout>
|
@ -17016,6 +17016,9 @@ hotblock // (c) 1993 Nics? / NIX?
|
||||
hotblocka // (c) 1993 Nics? / NIX?
|
||||
hotblockb // (c) 1993 Nics? / NIX?
|
||||
|
||||
@source:hotchili.cpp
|
||||
hotchili // (c) 1995 Pacific Gaming Pty Ltd.
|
||||
|
||||
@source:hotstuff.cpp
|
||||
hotstuff //
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user