forte2, unkhorse: small cleanup

This commit is contained in:
hap 2023-08-09 15:03:41 +02:00
parent d94d4b338c
commit f70bc8ee7a
4 changed files with 209 additions and 162 deletions

View File

@ -2,12 +2,12 @@
// copyright-holders:hap, Tomasz Slanina
/*******************************************************************************
unknown Japanese horse gambling game
probably early 80s, manufacturer unknown
unknown Japanese horse gambling game
probably early 80s, manufacturer unknown
from a broken PCB, labeled EFI TG-007
8085A CPU + 8155 (for I/O and sound)
8KB RAM mainly for bitmap video, and 512x4 RAM for color map
from a broken PCB, labeled EFI TG-007
M5L8085AP CPU + M5L8155P (for I/O and sound)
8KB RAM mainly for bitmap video, and 512x4 RAM for color map
TODO:
- identify game!
@ -38,37 +38,40 @@ public:
horse_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_speaker(*this, "speaker"),
m_inputs(*this, "IN.%u", 0),
m_vram(*this, "vram")
m_i8155(*this, "i8155"),
m_screen(*this, "screen"),
m_vram(*this, "vram"),
m_colorram(*this, "colorram", 0x200, ENDIANNESS_LITTLE),
m_inputs(*this, "IN.%u", 0)
{ }
void horse(machine_config &config);
protected:
virtual void machine_start() override;
private:
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_device<i8155_device> m_i8155;
required_device<screen_device> m_screen;
required_shared_ptr<u8> m_vram;
memory_share_creator<u8> m_colorram;
required_ioport_array<4> m_inputs;
required_shared_ptr<uint8_t> m_vram;
std::unique_ptr<uint8_t[]> m_colorram;
uint8_t m_output = 0;
u8 m_output = 0;
uint8_t colorram_r(offs_t offset) { return m_colorram[(offset >> 2 & 0x1e0) | (offset & 0x1f)] | 0x0f; }
void colorram_w(offs_t offset, uint8_t data) { m_colorram[(offset >> 2 & 0x1e0) | (offset & 0x1f)] = data & 0xf0; }
uint8_t input_r();
void output_w(uint8_t data);
u8 colorram_r(offs_t offset) { return m_colorram[(offset >> 2 & 0x1e0) | (offset & 0x1f)] | 0x0f; }
void colorram_w(offs_t offset, u8 data) { m_colorram[(offset >> 2 & 0x1e0) | (offset & 0x1f)] = data & 0xf0; }
u8 input_r();
void output_w(u8 data);
virtual void machine_start() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void horse_io_map(address_map &map);
void horse_map(address_map &map);
};
void horse_state::machine_start()
{
m_colorram = std::make_unique<uint8_t []>(0x200);
save_pointer(NAME(m_colorram), 0x200);
save_item(NAME(m_output));
}
@ -78,14 +81,14 @@ void horse_state::machine_start()
Video
*******************************************************************************/
uint32_t horse_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
u32 horse_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
for (int x = 0; x < 32; x++)
{
uint8_t data = m_vram[y << 5 | x];
uint8_t color = m_colorram[(y << 1 & 0x1e0) | x] >> 4;
u8 data = m_vram[y << 5 | x];
u8 color = m_colorram[(y << 1 & 0x1e0) | x] >> 4;
for (int i = 0; i < 8; i++)
bitmap.pix(y, x << 3 | i) = (data >> i & 1) ? color : 0;
@ -101,32 +104,36 @@ uint32_t horse_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
I/O
*******************************************************************************/
u8 horse_state::input_r()
{
return m_inputs[m_output >> 6 & 3]->read();
}
void horse_state::output_w(u8 data)
{
// d4: payout related
// d6-d7: input mux
// other bits: ?
m_output = data;
}
/*******************************************************************************
Address Maps
*******************************************************************************/
void horse_state::horse_map(address_map &map)
{
map(0x0000, 0x37ff).rom();
map(0x4000, 0x40ff).rw("i8155", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0x4000, 0x40ff).rw(m_i8155, FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0x6000, 0x7fff).ram().share("vram");
map(0x8000, 0x87ff).mirror(0x0800).rw(FUNC(horse_state::colorram_r), FUNC(horse_state::colorram_w));
}
void horse_state::horse_io_map(address_map &map)
{
map(0x40, 0x47).rw("i8155", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
}
uint8_t horse_state::input_r()
{
return m_inputs[m_output >> 6 & 3]->read();
}
void horse_state::output_w(uint8_t data)
{
m_output = data;
// d4: payout related
// d6-d7: input mux
// other bits: ?
map(0x40, 0x47).rw(m_i8155, FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
}
@ -138,14 +145,14 @@ void horse_state::output_w(uint8_t data)
static INPUT_PORTS_START( horse )
PORT_START("IN.0")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:1,2,3")
PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
PORT_DIPNAME( 0x08, 0x08, "UNK04" ) PORT_DIPLOCATION("SW:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@ -190,30 +197,31 @@ INPUT_PORTS_END
void horse_state::horse(machine_config &config)
{
/* basic machine hardware */
I8085A(config, m_maincpu, XTAL(12'000'000) / 2);
// basic machine hardware
I8085A(config, m_maincpu, 12_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &horse_state::horse_map);
m_maincpu->set_addrmap(AS_IO, &horse_state::horse_io_map);
i8155_device &i8155(I8155(config, "i8155", XTAL(12'000'000) / 4)); // port A input, B output, C output but unused
i8155.in_pa_callback().set(FUNC(horse_state::input_r));
i8155.out_pb_callback().set(FUNC(horse_state::output_w));
i8155.out_to_callback().set("speaker", FUNC(speaker_sound_device::level_w));
I8155(config, m_i8155, 12_MHz_XTAL / 4); // port A input, B output, C output but unused
m_i8155->in_pa_callback().set(FUNC(horse_state::input_r));
m_i8155->out_pb_callback().set(FUNC(horse_state::output_w));
m_i8155->out_to_callback().set("speaker", FUNC(speaker_sound_device::level_w));
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(32*8, 32*8);
m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
m_screen->set_screen_update(FUNC(horse_state::screen_update));
m_screen->screen_vblank().set_inputline(m_maincpu, I8085_RST75_LINE);
m_screen->set_palette("palette");
/* 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, 1*8, 31*8-1);
screen.set_screen_update(FUNC(horse_state::screen_update));
screen.screen_vblank().set_inputline(m_maincpu, I8085_RST75_LINE);
screen.set_palette("palette");
PALETTE(config, "palette", palette_device::BGR_3BIT);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.25);
}

View File

@ -105,7 +105,6 @@ private:
* Input Ports Demux & Common Routines *
****************************************/
void big10_state::mux_w(uint8_t data)
{
m_mux_data = ~data;
@ -138,7 +137,7 @@ void big10_state::main_map(address_map &map)
void big10_state::main_io(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).r(FUNC(big10_state::mux_r)); // present in test mode
map(0x00, 0x00).r(FUNC(big10_state::mux_r)); // present in test mode
map(0x02, 0x02).portr("SYSTEM"); // coins and service
map(0x98, 0x9b).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write));
map(0xa0, 0xa1).w("aysnd", FUNC(ay8910_device::address_data_w));
@ -157,8 +156,8 @@ static INPUT_PORTS_START( big10 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode, go to the game whilst keep pressed.
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode, go to the game whilst keep pressed.
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode, go to the game whilst keep pressed.
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2)
@ -188,7 +187,7 @@ static INPUT_PORTS_START( big10 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Small")
PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode triggers a sound and screen turns black, hanging the game.
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode triggers a sound and screen turns black, hanging the game.
PORT_START("IN4")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
@ -234,12 +233,14 @@ INPUT_PORTS_END
void big10_state::big10(machine_config &config)
{
// basic machine hardware
Z80(config, m_maincpu, MASTER_CLOCK/6); // guess
Z80(config, m_maincpu, MASTER_CLOCK/6); // guess
m_maincpu->set_addrmap(AS_PROGRAM, &big10_state::main_map);
m_maincpu->set_addrmap(AS_IO, &big10_state::main_io);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(HOPPER_PULSE), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW);
// video hardware
v9938_device &v9938(V9938(config, "v9938", MASTER_CLOCK));
v9938.set_screen_ntsc("screen");
@ -249,13 +250,11 @@ void big10_state::big10(machine_config &config)
// sound hardware
SPEAKER(config, "mono").front_center();
ym2149_device &aysnd(YM2149(config, "aysnd", MASTER_CLOCK/12)); // guess
ym2149_device &aysnd(YM2149(config, "aysnd", MASTER_CLOCK/12)); // guess
aysnd.port_a_read_callback().set_ioport("DSW2");
aysnd.port_b_read_callback().set_ioport("DSW1");
aysnd.port_a_write_callback().set(FUNC(big10_state::mux_w));
aysnd.add_route(ALL_OUTPUTS, "mono", 0.30);
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(HOPPER_PULSE), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW);
}
@ -277,5 +276,5 @@ ROM_END
* Game Driver(s) *
**************************************/
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
GAME( 1985, big10, 0, big10, big10, big10_state, empty_init, ROT0, "Success", "Big 10", MACHINE_SUPPORTS_SAVE )

View File

@ -1,45 +1,49 @@
// license:BSD-3-Clause
// copyright-holders:hap, Mariusz Wojcieszek
/* Brazilian bootleg board from 1989. Forte II Games, Industria Brasileira.
/*******************************************************************************
Brazilian bootleg board from 1989. Forte II Games, Industria Brasileira.
MAME driver by Mariusz Wojcieszek & hap, based on
information from Alexandre Souza (a.k.a. "Tabajara").
Hardware is based on MSX1, excluding i8255 PPI:
64KB RAM, largely unused
64KB EPROM (2764-15, contains hacked BIOS and game ROM)
Z80 @ 3.58MHz
GI AY-3-8910
TI TMS9928A
(no dipswitches)
- 64KB RAM, largely unused
- 64KB EPROM (2764-15, contains hacked BIOS and game ROM)
- Z80 @ 3.58MHz
- GI AY-3-8910
- TI TMS9928A
- (no dipswitches)
Games:
Pesadelo (means 'nightmare' in Portuguese), 1989 bootleg of Knightmare (Majou
Densetsu in Japan) (C) 1986 Konami, originally released exclusively on MSX.
This arcade conversion has been made a bit harder, eg. bonus power-ups deplete
three times quicker, and the game starts at a later, more difficult level.
A precise translation of the Brazilian Portuguese text displayed
upon inserting a coin is:
A precise translation of the Brazilian Portuguese text displayed upon
inserting a coin is:
NIGHTMARE DIFFICULTY-LEVEL 2 DOES NOT ACCUMULATE
CREDITS , ONLY INSERT A NEW
COIN AFTER THE END OF THE GAME
IN ORDER TO START THE GAME PRESS
THE FIRE BUTTON.
NIGHTMARE DIFFICULTY-LEVEL 2 DOES NOT ACCUMULATE
CREDITS , ONLY INSERT A NEW
COIN AFTER THE END OF THE GAME
IN ORDER TO START THE GAME PRESS
THE FIRE BUTTON.
GOOD LUCK!
If the coin detector is activated for a few seconds, an error message
meaning STUCK COIN shows up blinking and beeping:
FICHA PRESA
FICHA PRESA (meaning STUCK COIN) shows up blinking and beeping.
According to Alexandre, there are more games for this board, but not
found/dumped yet. */
found/dumped yet.
*******************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "video/tms9928a.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
@ -49,9 +53,10 @@ namespace {
class forte2_state : public driver_device
{
public:
forte2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
forte2_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_inputs(*this, "IN0")
{ }
void init_pesadelo();
@ -59,22 +64,74 @@ public:
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
required_device<cpu_device> m_maincpu;
required_ioport m_inputs;
u8 m_input_mask = 0xff;
u8 input_r();
void input_mask_w(u8 data);
void io_mem(address_map &map);
void program_mem(address_map &map);
uint8_t ay8910_read_input();
void ay8910_set_input_mask(uint8_t data);
required_device<cpu_device> m_maincpu;
uint8_t m_input_mask = 0;
};
/*******************************************************************************
Initialization
*******************************************************************************/
void forte2_state::init_pesadelo()
{
u8 *mem = memregion("maincpu")->base();
int memsize = memregion("maincpu")->bytes();
// data swap
for (int i = 0; i < memsize; i++)
{
mem[i] = bitswap<8>(mem[i],3,5,6,7,0,4,2,1);
}
// address line swap
std::vector<u8> buf(&mem[0], &mem[memsize]);
for (int i = 0; i < memsize; i++)
{
mem[bitswap<16>(i,11,9,8,13,14,15,12,7,6,5,4,3,2,1,0,10)] = buf[i];
}
}
void forte2_state::machine_start()
{
save_item(NAME(m_input_mask));
}
/*******************************************************************************
I/O
*******************************************************************************/
u8 forte2_state::input_r()
{
return m_inputs->read() | (m_input_mask & 0x7f);
}
void forte2_state::input_mask_w(u8 data)
{
// PSG reg 15, writes 0 at coin insert, 0xff at boot and game over
m_input_mask = data;
}
/*******************************************************************************
Address Maps
*******************************************************************************/
void forte2_state::program_mem(address_map &map)
{
map(0x0000, 0xbfff).rom();
@ -88,87 +145,62 @@ void forte2_state::io_mem(address_map &map)
map(0x98, 0x99).rw("tms9928a", FUNC(tms9928a_device::read), FUNC(tms9928a_device::write));
map(0xa0, 0xa1).w("aysnd", FUNC(ay8910_device::address_data_w));
map(0xa2, 0xa2).r("aysnd", FUNC(ay8910_device::data_r));
// map(0xa8, 0xa8).ram(); // Ports a8-ab are originally for communicating with the i8255 PPI on MSX.
// map(0xa9, 0xab).noprw(); // Since this arcade board doesn't have one, those ports should be unmapped.
map(0xa8, 0xab).noprw(); // no 8255
}
/*******************************************************************************
Input Ports
*******************************************************************************/
static INPUT_PORTS_START( pesadelo )
PORT_START("IN0")
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP)
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN)
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT)
PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT)
PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_BUTTON1)
PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_START1)
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT (0x80, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
INPUT_PORTS_END
uint8_t forte2_state::ay8910_read_input()
{
return ioport("IN0")->read() | (m_input_mask & 0x3f);
}
void forte2_state::ay8910_set_input_mask(uint8_t data)
{
/* PSG reg 15, writes 0 at coin insert, 0xff at boot and game over */
m_input_mask = data;
}
void forte2_state::machine_reset()
{
m_input_mask = 0xff;
}
void forte2_state::machine_start()
{
/* register for save states */
save_item(NAME(m_input_mask));
}
/*******************************************************************************
Machine Configs
*******************************************************************************/
void forte2_state::pesadelo(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(3'579'545));
// basic machine hardware
Z80(config, m_maincpu, 3.579545_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &forte2_state::program_mem);
m_maincpu->set_addrmap(AS_IO, &forte2_state::io_mem);
/* video hardware */
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
// video hardware
tms9928a_device &vdp(TMS9928A(config, "tms9928a", 10.738635_MHz_XTAL));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
ay8910_device &aysnd(AY8910(config, "aysnd", XTAL(3'579'545)/2));
aysnd.port_a_read_callback().set(FUNC(forte2_state::ay8910_read_input));
aysnd.port_b_write_callback().set(FUNC(forte2_state::ay8910_set_input_mask));
ay8910_device &aysnd(AY8910(config, "aysnd", 3.579545_MHz_XTAL/2));
aysnd.port_a_read_callback().set(FUNC(forte2_state::input_r));
aysnd.port_b_write_callback().set(FUNC(forte2_state::input_mask_w));
aysnd.add_route(ALL_OUTPUTS, "mono", 0.50);
}
void forte2_state::init_pesadelo()
{
uint8_t *mem = memregion("maincpu")->base();
int memsize = memregion("maincpu")->bytes();
// data swap
for (int i = 0; i < memsize; i++)
{
mem[i] = bitswap<8>(mem[i],3,5,6,7,0,4,2,1);
}
// address line swap
std::vector<uint8_t> buf(&mem[0], &mem[memsize]);
for (int i = 0; i < memsize; i++)
{
mem[bitswap<16>(i,11,9,8,13,14,15,12,7,6,5,4,3,2,1,0,10)] = buf[i];
}
}
/*******************************************************************************
ROM Definitions
*******************************************************************************/
ROM_START( pesadelo )
ROM_REGION( 0x10000, "maincpu", 0 )
@ -178,4 +210,10 @@ ROM_END
} // anonymous namespace
GAME( 1989, pesadelo, 0, pesadelo, pesadelo, forte2_state, init_pesadelo, ROT0, "bootleg (Forte II Games)", "Pesadelo (bootleg of Konami Knightmare)", MACHINE_SUPPORTS_SAVE )
/*******************************************************************************
Drivers
*******************************************************************************/
// YEAR NAME PARENT MACHINE INPUT CLASS INIT SCREEN COMPANY FULLNAME FLAGS
GAME( 1989, pesadelo, 0, pesadelo, pesadelo, forte2_state, init_pesadelo, ROT0, "bootleg (Forte II Games)", "Pesadelo (bootleg of Konami Knightmare)", MACHINE_SUPPORTS_SAVE )

View File

@ -219,6 +219,7 @@ static INPUT_PORTS_START( pengadvb2 ) // reads are scrambled
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:8")
INPUT_PORTS_END
/***************************************************************************
IC Interfaces
@ -272,6 +273,7 @@ void pengadvb_state::ppi_port_c_w(uint8_t data)
m_kb_matrix_row = data & 0x0f;
}
/***************************************************************************
Machine config(s)