From f70bc8ee7af602e417258781b9cf8283770d35b3 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 9 Aug 2023 15:03:41 +0200 Subject: forte2, unkhorse: small cleanup --- src/mame/misc/unkhorse.cpp | 136 +++++++++++++++-------------- src/mame/msx/big10.cpp | 19 ++-- src/mame/msx/forte2.cpp | 210 ++++++++++++++++++++++++++------------------- src/mame/msx/pengadvb.cpp | 2 + 4 files changed, 207 insertions(+), 160 deletions(-) diff --git a/src/mame/misc/unkhorse.cpp b/src/mame/misc/unkhorse.cpp index 6b38223cbb8..d56402274cc 100644 --- a/src/mame/misc/unkhorse.cpp +++ b/src/mame/misc/unkhorse.cpp @@ -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 m_maincpu; - required_device m_speaker; + required_device m_i8155; + required_device m_screen; + required_shared_ptr m_vram; + memory_share_creator m_colorram; required_ioport_array<4> m_inputs; - required_shared_ptr m_vram; - std::unique_ptr 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(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 *******************************************************************************/ -void horse_state::horse_map(address_map &map) +u8 horse_state::input_r() { - map(0x0000, 0x37ff).rom(); - map(0x4000, 0x40ff).rw("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)); + return m_inputs[m_output >> 6 & 3]->read(); } -void horse_state::horse_io_map(address_map &map) +void horse_state::output_w(u8 data) { - map(0x40, 0x47).rw("i8155", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w)); + // d4: payout related + // d6-d7: input mux + // other bits: ? + m_output = data; } -uint8_t horse_state::input_r() + +/******************************************************************************* + Address Maps +*******************************************************************************/ + +void horse_state::horse_map(address_map &map) { - return m_inputs[m_output >> 6 & 3]->read(); + map(0x0000, 0x37ff).rom(); + 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::output_w(uint8_t data) +void horse_state::horse_io_map(address_map &map) { - 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)); - - /* 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"); + 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"); + 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); } diff --git a/src/mame/msx/big10.cpp b/src/mame/msx/big10.cpp index d8c359e9446..afedf20b555 100644 --- a/src/mame/msx/big10.cpp +++ b/src/mame/msx/big10.cpp @@ -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 ) diff --git a/src/mame/msx/forte2.cpp b/src/mame/msx/forte2.cpp index d7aa9270f06..d1a85ede01b 100644 --- a/src/mame/msx/forte2.cpp +++ b/src/mame/msx/forte2.cpp @@ -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) - -Games: +- 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) + 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,21 +64,73 @@ public: protected: virtual void machine_start() override; - virtual void machine_reset() override; private: + required_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 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 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) { @@ -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 } -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) -INPUT_PORTS_END -uint8_t forte2_state::ay8910_read_input() -{ - return ioport("IN0")->read() | (m_input_mask & 0x3f); -} +/******************************************************************************* + Input Ports +*******************************************************************************/ -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; -} +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 ) +INPUT_PORTS_END -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 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 ) diff --git a/src/mame/msx/pengadvb.cpp b/src/mame/msx/pengadvb.cpp index b026e1820d9..96128167d16 100644 --- a/src/mame/msx/pengadvb.cpp +++ b/src/mame/msx/pengadvb.cpp @@ -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) -- cgit v1.2.3