// license:BSD-3-Clause // copyright-holders:Roberto Fresca /*************************************************************************** MANN, OH-MANN 199? - MERKUR Preliminary driver by Roberto Fresca. German board game similar to Ludo, derivated from the indian game Parchisi. Coin-operated machine for 1-4 players. No screen, just artwork and lamps. The machine was designed for pubs, etc... Field: 93 cm. High: 105 cm. 1x keylock. Accept DM and Euro. It's all a challenge. Even once emulated, the game will need a lot of artwork and lamps work... Currently sits in a loop between 0x100000 and 0x600006 addresses r/w, the snippet is there: 001BB8: move.b (A2), D0 001BBA: jsr $6dc0.l 001BC0: tst.b D0 001BC2: bne $1bb8 Passing this loop it checks the i/o stuff, including the sound addresses **************************************************************************** Hardware Notes... - XTAL1 = 8.000 MHz. - XTAL2 = 3.6864 MHz. 1x MC68000P8 ; Motorola, 16-bits CPU. 1x SAA1099P ; Philips, 6-Voice Sound Generator. 2x LC3664BL-10 ; Sanyo, 64K Static RAM. 1x M62X42B : OKI, Real Time Clock with built in crystal. 1x MC68230P8 ; Motorola, Parallel Interface / Timer. 1x SCN68681C1N40 ; Philips, Dual Asynchronous Receiver/Transmitter (DUART). 1x MAX696CP ; Maxim, Microprocessor Supervisory Circuits. PCB Layout: .------------------------------------------------------. | .-------------. .-----. .---------. | | |:::::::::::::| |:::::| |:::::::::| | | '-------------' '-----' '---------' | | .------------------------. .-------. | | .-. | MC68230P8 | | L4962 | | | |.| | 1C10R | '-------' | | |.| | WC9336 | | |R|.| '------------------------' | |E|.| | |S|.| | |E|.| .---------. .-----------. | |R|.| |74HC245N | | POWER | | |V|.| '---------' | MODULE | | |E|.| | | | | |.| .---------. | 3 VOLTS | .--------. | | |.| |74HC273B1| | | |MAX696CP| | | '-' '---------' | | '--------' | | | | | | .--------. '-----------' | | |74HC4094| | | '--------' .-------------. .-------------. | | | SANYO | | SANYO | | | .--------. | LC3664BL-10 | | LC3664BL-10 | | | |74HC04B1| | | | | | | '--------' '-------------' '-------------' | | .--------. | | |74HC164B| | | '--------' .-------------. .-------------. | | |Mann,oh-Mann | |Mann,oh-Mann | | | |Austria | |Austria | | | .---. XTAL1 |Vorserie II | |Vorserie I | | | '-------------' '-------------' | | .--------. .---------. .---------. | | |74HC04B1| |74HC245N | |74HC245N | | | '--------' '---------' '---------' | | ......... ......... | | 8x10K 8x10K | | .--------. | | |74HC139N| .--------------------------------. | | '--------' | | | | | MC68000P8 | | | | | | | .--------. | | | | |74HC30B1| '--------------------------------' | | '--------' ......... ......... | | 8x10K 8x10K | | .--------. .--------. .----------. | | |74HC32N | |74HC138B| | 74HC245N | | | '--------' '--------' '----------' | | .--------. .---------. | | |74HC00B1| | M62X42B | | | '--------' '---------' | | .--------. .---------. | | |74HC74B1| |SAA1099P | | | '--------' '---------' | | .---. XTAL2 | | . .------------------------. | |8. | | | |x. | SCN68681C1N40 | | |1. | | | |0. '------------------------' | |K. ......... | | . 8x10K | | .--------. .--------. .--------. .----. .--. | | |::::::::| |::::::::| |::::::::| |::::| |::| | | '--------' '--------' '--------' '----' '--' | | SERVICE SERIAL1 SERIAL2 SPEAKER | '------------------------------------------------------' **************************************************************************** Memory Map: ----------- 000000-01FFFF ROM Space. 500000-503FFF RAM. ***************************************************************************/ #include "emu.h" #include "cpu/m68000/m68000.h" #include "machine/68230pit.h" #include "machine/mc68681.h" #include "machine/msm6242.h" #include "machine/nvram.h" #include "sound/saa1099.h" #include "speaker.h" class manohman_state : public driver_device { public: manohman_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_duart(*this, "duart"), m_pit(*this, "pit") { } void manohman(machine_config &config); private: virtual void machine_start() override; void mem_map(address_map &map); IRQ_CALLBACK_MEMBER(iack_handler); required_device m_maincpu; required_device m_duart; required_device m_pit; }; void manohman_state::machine_start() { } IRQ_CALLBACK_MEMBER(manohman_state::iack_handler) { if (irqline >= M68K_IRQ_4) return m_duart->get_irq_vector(); else if (irqline >= M68K_IRQ_2) return m_pit->irq_tiack(); else return M68K_INT_ACK_SPURIOUS; // doesn't really matter } /********************************************* * Memory Map Definition * *********************************************/ void manohman_state::mem_map(address_map &map) { map(0x000000, 0x01ffff).rom(); map(0x100000, 0x10003f).rw(m_pit, FUNC(pit68230_device::read), FUNC(pit68230_device::write)).umask16(0x00ff); map(0x200000, 0x20001f).rw(m_duart, FUNC(mc68681_device::read), FUNC(mc68681_device::write)).umask16(0x00ff); map(0x300000, 0x300003).w("saa", FUNC(saa1099_device::write)).umask16(0x00ff).nopr(); map(0x400000, 0x40001f).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write)).umask16(0x00ff); map(0x500000, 0x503fff).ram().share("nvram"); //work RAM map(0x600002, 0x600003).nopw(); // output through shift register? map(0x600004, 0x600005).nopr(); map(0x600006, 0x600007).noprw(); //(r) is discarded (watchdog?) } /* RW 100000 ; R \ 100000 ; W 0000 | Constant after RAM test... Seems for the MAX696's watchdog. 100000 ; W 00FF / 500000-503FF9 ; R 500000-503FF9 ; W FFFF \ 500000-503FF9 ; W AAAA | Seems bit patterns for testing RAM... 500000-503FF9 ; W 5555 | 500000-503FF9 ; W 0000 / 503FFA - 503FFF RW 500300 ; R 500302 ; R 600006 ; R 600006 ; W FFFF \ 600006 ; W AAAA | These bit patterns are for 500000-503ff8 comparison. 600006 ; W 5555 | 600006 ; W 0000 / BP at 0x1880 to point to the end of RAM test. */ /********************************************* * Input Ports Definitions * *********************************************/ static INPUT_PORTS_START( manohman ) INPUT_PORTS_END /********************************************* * Machine Config * *********************************************/ MACHINE_CONFIG_START(manohman_state::manohman) MCFG_DEVICE_ADD("maincpu", M68000, XTAL(8'000'000)) // MC68000P8 MCFG_DEVICE_PROGRAM_MAP(mem_map) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(manohman_state, iack_handler) PIT68230(config, m_pit, XTAL(8'000'000)); // MC68230P8 m_pit->timer_irq_callback().set_inputline("maincpu", M68K_IRQ_2); MCFG_DEVICE_ADD("duart", MC68681, XTAL(3'686'400)) MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", M68K_IRQ_4)) MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768)) // M62X42B NVRAM(config, "nvram", nvram_device::DEFAULT_NONE); // KM6264BL-10 x2 + MAX696CFL + battery SPEAKER(config, "mono").front_center(); MCFG_DEVICE_ADD("saa", SAA1099, XTAL(8'000'000) / 2) // clock not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) MACHINE_CONFIG_END /********************************************* * Rom Load * *********************************************/ ROM_START( manohman ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE( "mom_austria_vorserie_ii.bin", 0x00000, 0x10000, CRC(4b57409c) SHA1(0438f5d52f4de2ece8fb684cf2d82bdea0eacf0b) ) ROM_LOAD16_BYTE( "mom_austria_vorserie_i.bin", 0x00001, 0x10000, CRC(3c9507f9) SHA1(489a6aadfb7d61be0873bf48d428e9d915268f95) ) ROM_END ROM_START( backgamn ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE( "b_f2_i.bin", 0x00000, 0x10000, CRC(9e42937c) SHA1(85d462a560b85b03ee9d341e18815b7c396118ac) ) ROM_LOAD16_BYTE( "b_f2_ii.bin", 0x00001, 0x10000, CRC(8e0ee50c) SHA1(2a05c337db1131b873646aa4109593636ebaa356) ) ROM_END /********************************************* * Game Drivers * *********************************************/ // YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS GAME( 199?, manohman, 0, manohman, manohman, manohman_state, empty_init, ROT0, "Merkur", "Mann, oh-Mann", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_REQUIRES_ARTWORK ) GAME( 1990, backgamn, 0, manohman, manohman, manohman_state, empty_init, ROT0, "Merkur", "Backgammon", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_REQUIRES_ARTWORK )