summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/konmedal020.cpp
blob: 578eee996f9ab5a5004eec099d2fc10cf39cd59e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// license:BSD-3-Clause
// copyright-holders:R. Belmont
/***************************************************************************

    konmedal020.cpp: Konami 68EC020/VGA based medal games

    Mighty Joker?
    GS471
    (c) 1997 Konami

    Major ICs:
    MC68EC020-25 CPU
    YMZ280B sound
    16552 serial UART
    Oak OTI64111 "Spitfire" Super VGA video
    K056879 input/EEPROM interface

***************************************************************************/

#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "machine/eepromser.h"
#include "machine/gen_latch.h"
#include "machine/nvram.h"
#include "machine/timer.h"
#include "sound/ymz280b.h"
#include "video/pc_vga.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"

namespace {

class konmedal020_state : public driver_device
{
public:
	konmedal020_state(const machine_config &mconfig, device_type type, const char *tag) :
		driver_device(mconfig, type, tag),
		m_maincpu(*this, "maincpu"),
		m_vga(*this, "oak"),
		m_ymz(*this, "ymz")
	{ }

	void gs471(machine_config &config);

protected:
	virtual void machine_start() override;
	virtual void machine_reset() override;
	virtual void video_start() override;

	required_device<cpu_device> m_maincpu;
	required_device<oak_oti111_vga_device> m_vga;
	required_device<ymz280b_device> m_ymz;

private:
	void gs471_main(address_map &map);
};

void konmedal020_state::video_start()
{
}

void konmedal020_state::gs471_main(address_map &map)
{
	map(0x000000, 0x1fffff).rom().region("maincpu", 0);
	map(0x200000, 0x23ffff).ram();
	// Watchdog and system control at 0x380000
	map(0x3e0000, 0x3e1fff).ram();  // NVRAM?
	map(0x800000, 0x8fffff).rw(m_vga, FUNC(oak_oti111_vga_device::mem_linear_r), FUNC(oak_oti111_vga_device::mem_linear_w));
	map(0xe00000, 0xe0007f).rw(m_vga, FUNC(oak_oti111_vga_device::xga_read), FUNC(oak_oti111_vga_device::xga_write));
	map(0xe00070, 0xe00071).lrw8([this](offs_t a){ return m_vga->xga_read(0x70 + (a ^ 1)); }, "srcxr",
			[this](offs_t a, u8 data){ m_vga->xga_write(0x70 + (a ^ 1), data); }, "srcxw");
	map(0xe00078, 0xe00079).lrw8([this](offs_t a){ return m_vga->xga_read(0x78 + (a ^ 1)); }, "dstxr",
			[this](offs_t a, u8 data){ m_vga->xga_write(0x78 + (a ^ 1), data); }, "dstxw");
	map(0xf003b0, 0xf003bf).rw(m_vga, FUNC(oak_oti111_vga_device::port_03b0_r), FUNC(oak_oti111_vga_device::port_03b0_w));
	map(0xf003c0, 0xf003cf).rw(m_vga, FUNC(oak_oti111_vga_device::port_03c0_r), FUNC(oak_oti111_vga_device::port_03c0_w));
	map(0xf003d0, 0xf003df).rw(m_vga, FUNC(oak_oti111_vga_device::port_03d0_r), FUNC(oak_oti111_vga_device::port_03d0_w));
	map(0xf021e0, 0xf021e9).rw(m_vga, FUNC(oak_oti111_vga_device::dac_read), FUNC(oak_oti111_vga_device::dac_write));
}

static INPUT_PORTS_START( gs471 )
INPUT_PORTS_END


void konmedal020_state::machine_start()
{
}

void konmedal020_state::machine_reset()
{
}

void konmedal020_state::gs471(machine_config &config)
{
	/* basic machine hardware */
	M68EC020(config, m_maincpu, XTAL(25'000'000));
	m_maincpu->set_addrmap(AS_PROGRAM, &konmedal020_state::gs471_main);
	//NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);

	/* video hardware */
	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
	screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
	screen.set_screen_update(m_vga, FUNC(vga_device::screen_update));
	screen.screen_vblank().set_inputline(m_maincpu, M68K_IRQ_3);

	OTI111(config, m_vga, 0);
	m_vga->set_screen("screen");
	m_vga->set_vram_size(0x100000);

	/* sound hardware */
	SPEAKER(config, "lspeaker").front_left();
	SPEAKER(config, "rspeaker").front_right();

	YMZ280B(config, m_ymz, XTAL(16'934'400)); // 16.9344 MHz xtal verified on PCB
	m_ymz->add_route(0, "lspeaker", 0.75);
	m_ymz->add_route(1, "rspeaker", 0.75);
}

ROM_START( gs471 )
	ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */
	ROM_LOAD32_WORD_SWAP("471-b04.15t", 0x000000, 0x080000, CRC(78f071b1) SHA1(4dac30917ea903e0fe803a988351992a30de668a))
	ROM_LOAD32_WORD_SWAP("471-b05.17t-2", 0x000002, 0x080000, CRC(45b1febf) SHA1(b504153631d11f7a9ebfb47fea6b09ce10b95654))
	ROM_LOAD32_WORD_SWAP("471-b06.20t", 0x100000, 0x080000, CRC(7bc5f090) SHA1(f25095883c1b747fd7971c8841000ef33878081d))
	ROM_LOAD32_WORD_SWAP("471-b07.22t", 0x100002, 0x080000, CRC(7d9153b5) SHA1(cebfbd1531e479b27ae8f176a47d928be9cfab88))

	ROM_REGION( 0x100000, "ymz", 0 )
	ROM_LOAD("471-b01.15l", 0x000000, 0x080000, CRC(064c4830) SHA1(a4051a16d7bed7a5aab0dafc570b9bc0ddb0fac5))
	ROM_LOAD("471-b02.18l", 0x080000, 0x080000, CRC(4a3f6c74) SHA1(d631d988a3334de0a4d13bd2b1bfa2133da7507e))
ROM_END

} // Anonymous namespace

GAME( 1997, gs471,  0, gs471,  gs471, konmedal020_state, empty_init, ROT0, "Konami", "unknown medal game GS471", MACHINE_NOT_WORKING )