summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/tmc1800.cpp
blob: f672d4d2c27004f065ec2f2b01cbe0ccea66c3c2 (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
// license:BSD-3-Clause
// copyright-holders:Curt Coder
#include "emu.h"
#include "includes/tmc1800.h"

#include "cpu/cosmac/cosmac.h"
#include "machine/rescap.h"
#include "sound/cdp1864.h"
#include "video/cdp1861.h"
#include "screen.h"
#include "speaker.h"


/* Telmac 2000 */

READ_LINE_MEMBER( tmc2000_state::rdata_r )
{
	return BIT(m_color, 2);
}

READ_LINE_MEMBER( tmc2000_state::bdata_r )
{
	return BIT(m_color, 1);
}

READ_LINE_MEMBER( tmc2000_state::gdata_r )
{
	return BIT(m_color, 0);
}

/* OSM-200 */

uint32_t osc1000b_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
	return 0;
}

/* Machine Drivers */

void tmc1800_state::tmc1800_video(machine_config &config)
{
	CDP1861(config, m_vdc, XTAL(1'750'000)).set_screen(SCREEN_TAG);
	m_vdc->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT);
	m_vdc->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT);
	m_vdc->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1);
	SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
}

void osc1000b_state::osc1000b_video(machine_config &config)
{
	screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
	screen.set_screen_update(FUNC(osc1000b_state::screen_update));
	screen.set_refresh_hz(50);
	screen.set_size(320, 200);
	screen.set_visarea(0, 319, 0, 199);
}

void tmc2000_state::tmc2000_video(machine_config &config)
{
	SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
	SPEAKER(config, "mono").front_center();
	CDP1864(config, m_cti, XTAL(1'750'000)).set_screen(SCREEN_TAG);
	m_cti->inlace_cb().set_constant(0);
	m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT);
	m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT);
	m_cti->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1);
	m_cti->rdata_cb().set(FUNC(tmc2000_state::rdata_r));
	m_cti->bdata_cb().set(FUNC(tmc2000_state::bdata_r));
	m_cti->gdata_cb().set(FUNC(tmc2000_state::gdata_r));
	m_cti->set_chrominance(RES_K(1.21), RES_K(2.05), RES_K(2.26), RES_K(3.92)); // RL64, RL63, RL61, RL65 (also RH62 (2K pot) in series, but ignored here)
	m_cti->add_route(ALL_OUTPUTS, "mono", 0.25);
}

void nano_state::nano_video(machine_config &config)
{
	SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
	SPEAKER(config, "mono").front_center();
	CDP1864(config, m_cti, XTAL(1'750'000)).set_screen(SCREEN_TAG);
	m_cti->inlace_cb().set_constant(0);
	m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT);
	m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT);
	m_cti->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1);
	m_cti->rdata_cb().set_constant(1);
	m_cti->bdata_cb().set_constant(1);
	m_cti->gdata_cb().set_constant(1);
	m_cti->set_chrominance(RES_K(1.21), RES_INF, RES_INF, 0); // R18 (unconfirmed)
	m_cti->add_route(ALL_OUTPUTS, "mono", 0.25);
}