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
134
135
136
137
138
139
140
141
142
|
// license:BSD-3-Clause
// copyright-holders:JJ Stacino
/////////////////////////////////////////////////////////////////////////////////
///// Hector video
/////////////////////////////////////////////////////////////////////////////////
/* Hector 2HR+
Victor
Hector 2HR
Hector HRX
Hector MX40c
Hector MX80c
Hector 1
Interact
12/05/2009 Skeleton driver - Micko : mmicko@gmail.com
31/06/2009 Video - Robbbert
29/10/2009 Update skeleton to functional machine
by yo_fr (jj.stac @ aliceadsl.fr)
=> add Keyboard,
=> add color,
=> add cassette,
=> add sn76477 sound and 1bit sound,
=> add joysticks (stick, pot, fire)
=> add BR/HR switching
=> add bank switch for HRX
=> add device MX80c and bank switching for the ROM
Important note : the keyboard function has been taken from the
DChector project : http://dchector.free.fr/ made by DanielCoulom
(thanks Daniel)
TODO : Add the cartridge function,
Adjust the one shot and A/D timing (sn76477)
*/
#include "emu.h"
#include "includes/hec2hrp.h"
#include "screen.h"
void hec2hrp_state::init_palette()
{
m_hector_color[0] = 0; // black
m_hector_color[1] = 1; // red
m_hector_color[2] = 7; // white
m_hector_color[3] = 3; // yellow
// Full brightness
m_palette->set_pen_color( 0,rgb_t(000,000,000)); // black
m_palette->set_pen_color( 1,rgb_t(255,000,000)); // red
m_palette->set_pen_color( 2,rgb_t(000,255,000)); // green
m_palette->set_pen_color( 3,rgb_t(255,255,000)); // yellow
m_palette->set_pen_color( 4,rgb_t(000,000,255)); // blue
m_palette->set_pen_color( 5,rgb_t(255,000,255)); // magenta
m_palette->set_pen_color( 6,rgb_t(000,255,255)); // cyan
m_palette->set_pen_color( 7,rgb_t(255,255,255)); // white
// Half brightness
m_palette->set_pen_color( 8,rgb_t(000,000,000)); // black
m_palette->set_pen_color( 9,rgb_t(128,000,000)); // red
m_palette->set_pen_color( 10,rgb_t(000,128,000)); // green
m_palette->set_pen_color( 11,rgb_t(128,128,000)); // yellow
m_palette->set_pen_color( 12,rgb_t(000,000,128)); // blue
m_palette->set_pen_color( 13,rgb_t(128,000,128)); // magenta
m_palette->set_pen_color( 14,rgb_t(000,128,128)); // cyan
m_palette->set_pen_color( 15,rgb_t(128,128,128)); // white
}
void hec2hrp_state::hector_hr(bitmap_ind16 &bitmap, uint8_t *page, int ymax, int yram)
{
uint8_t *hector_color = m_hector_color;
int sy = 0;
int ma = 0;
for (int y = 0; y <= ymax; y++)
{
uint16_t *pix = &bitmap.pix16(sy++);
for (int x = ma; x < ma + yram; x++)
{
uint8_t gfx = *(page + x);
*pix++ = hector_color[(gfx >> 0) & 0x03];
*pix++ = hector_color[(gfx >> 2) & 0x03];
*pix++ = hector_color[(gfx >> 4) & 0x03];
*pix++ = hector_color[(gfx >> 6) & 0x03];
}
ma+=yram;
}
}
void hec2hrp_state::hector_80c(bitmap_ind16 &bitmap, uint8_t *page, int ymax, int yram)
{
int sy = 0;
int ma = 0;
for (int y = 0; y <= ymax; y++)
{
uint16_t *pix = &bitmap.pix16(sy++);
for (int x = ma; x < ma + yram; x++)
{
uint8_t gfx = *(page + x);
*pix++ = (gfx & 0x01) ? 7 : 0;
*pix++ = (gfx & 0x02) ? 7 : 0;
*pix++ = (gfx & 0x04) ? 7 : 0;
*pix++ = (gfx & 0x08) ? 7 : 0;
*pix++ = (gfx & 0x10) ? 7 : 0;
*pix++ = (gfx & 0x20) ? 7 : 0;
*pix++ = (gfx & 0x40) ? 7 : 0;
*pix++ = (gfx & 0x80) ? 7 : 0;
}
ma += yram;
}
}
VIDEO_START_MEMBER(hec2hrp_state,hec2hrp)
{
init_palette();
}
uint32_t hec2hrp_state::screen_update_hec2hrp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint8_t *videoram = m_videoram;
uint8_t *videoram_HR = m_hector_videoram;
if (m_hector_flag_hr==1)
{
if (m_hector_flag_80c==0)
{
screen.set_visible_area(0, 243, 0, 227);
hector_hr(bitmap , &videoram_HR[0], 227, 64);
}
else
{
screen.set_visible_area(0, 243*2, 0, 227);
hector_80c(bitmap , &videoram_HR[0], 227, 64);
}
}
else
{
screen.set_visible_area(0, 113, 0, 75);
hector_hr(bitmap, videoram, 77, 32);
}
return 0;
}
|