1 // license:BSD-3-Clause
2 // copyright-holders:Steve Ellenoff, Pierpaolo Prazzoli
3 /**************************************************************************
4  Portraits
5  (c) 1983 Olympia
6 
7 Preliminary Driver by Steve Ellenoff & Peo
8 
9 Changes:
10 
11 Pierpaolo Prazzoli, xx-07-2004
12   - fixed scrolling
13   - fixed screen resolution
14   - added NVRAM
15   - added fake photo when you get the best score
16   - fixed service switches and coins
17   - added missing roms and the 2nd set
18 
19   SW = service switch
20 
21   SW1 - SW2
22    ON   OFF -> grid test
23    ON    ON -> camera test
24 
25 TODO:
26  - add sound;
27  - add colors (maybe not RGB555);
28  - fix sprites positions (zooming?);
29  - video priority bits;
30  - offset background scrolling positions (i.e. monkey climbing on trees);
31  - camera device (type?);
32  - misc unknown input/outputs;
33 
34 
35 RAM Location 9240: Controls what level you are on: 0-3 (for each scene)
36 
37 -------------------------------------------------------------------------
38 
39 Board layout
40 
41 
42 Top board
43 
44 8039                                   rom p3f
45 
46               74s288                   rom p2f
47 
48 rom SA                                 rom p1f
49 
50 rom M/A                                rom p0f
51 
52 rom W         18318 18318      rom 15  rom 14
53 
54 8253          18318 18318      rom 05  rom 04
55               18318 18318
56 8253          18318 18318      rom 13  rom 12
57               18318 18318
58 TMS5200       18318 18318      rom 03  rom 02
59               18318 18318
60                                rom 11  rom 10
61               18318 18318
62                                rom 01  rom 00
63 
64 Bottom board
65 
66 93Z511DC      93425
67 DM81LS95      93425
68               93425            18318
69               2148
70               2148             18318
71 
72                                18318
73 
74                                18318
75 
76                                18318
77 
78               74s288           18318
79                      2114
80                      2114 4016
81                      2114
82                      2114 4016
83 
84         Z80
85 DIP1
86 DIP2    XD2210
87 
88 
89 XD2210 or 8202
90 DM81LS95 = TriState buffer
91 **************************************************************************/
92 
93 #include "emu.h"
94 #include "includes/portrait.h"
95 
96 #include "cpu/z80/z80.h"
97 #include "cpu/mcs48/mcs48.h"
98 #include "machine/gen_latch.h"
99 #include "machine/nvram.h"
100 #include "screen.h"
101 #include "speaker.h"
102 
103 
ctrl_w(uint8_t data)104 void portrait_state::ctrl_w(uint8_t data)
105 {
106 	/* bits 4 and 5 are unknown */
107 
108 	machine().bookkeeping().coin_counter_w(0, data & 0x01);
109 	machine().bookkeeping().coin_counter_w(1, data & 0x02);
110 	machine().bookkeeping().coin_counter_w(2, data & 0x04);
111 
112 	/* the 2 lamps near the camera */
113 	m_lamps[0] = BIT(data, 3);
114 	m_lamps[1] = BIT(data, 6);
115 
116 	/* shows the black and white photo from the camera */
117 	output().set_value("photo", (data >> 7) & 1);
118 }
119 
positive_scroll_w(uint8_t data)120 void portrait_state::positive_scroll_w(uint8_t data)
121 {
122 	m_scroll = data;
123 }
124 
negative_scroll_w(uint8_t data)125 void portrait_state::negative_scroll_w(uint8_t data)
126 {
127 	m_scroll = - (data ^ 0xff);
128 }
129 
portrait_map(address_map & map)130 void portrait_state::portrait_map(address_map &map)
131 {
132 	map(0x0000, 0x7fff).rom();
133 	map(0x8000, 0x87ff).ram().w(FUNC(portrait_state::bgvideo_write)).share("bgvideoram");
134 	map(0x8800, 0x8fff).ram().w(FUNC(portrait_state::fgvideo_write)).share("fgvideoram");
135 	map(0x9000, 0x91ff).ram().share("spriteram");
136 	map(0x9200, 0x97ff).ram();
137 	map(0xa000, 0xa000).w("soundlatch", FUNC(generic_latch_8_device::write));
138 	map(0xa010, 0xa010).nopw(); // ?
139 	map(0xa000, 0xa000).portr("DSW1");
140 	map(0xa004, 0xa004).portr("DSW2");
141 	map(0xa008, 0xa008).portr("SYSTEM").w(FUNC(portrait_state::ctrl_w));
142 	map(0xa010, 0xa010).portr("INPUTS");
143 	map(0xa018, 0xa018).nopr().w(FUNC(portrait_state::positive_scroll_w));
144 	map(0xa019, 0xa019).w(FUNC(portrait_state::negative_scroll_w));
145 	map(0xa800, 0xa83f).ram().share("nvram");
146 	map(0xffff, 0xffff).nopr();
147 }
148 
149 
portrait_sound_map(address_map & map)150 void portrait_state::portrait_sound_map(address_map &map)
151 {
152 	map(0x0000, 0x0fff).rom();
153 }
154 
155 
156 static INPUT_PORTS_START( portrait )
157 	PORT_START("DSW1")
158 	PORT_DIPNAME( 0x0f, 0x08, DEF_STR( Coin_A ) )
159 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_1C ) )
160 	PORT_DIPSETTING(    0x09, DEF_STR( 1C_2C ) )
161 	PORT_DIPSETTING(    0x0a, DEF_STR( 1C_3C ) )
162 	PORT_DIPSETTING(    0x0b, DEF_STR( 1C_4C ) )
163 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_5C ) )
164 	PORT_DIPSETTING(    0x0d, DEF_STR( 1C_7C ) )
165 	PORT_DIPSETTING(    0x0e, "1 Coin / 10 Credits" )
166 	PORT_DIPSETTING(    0x0f, "1 Coin / 12 Credits" )
167 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) )
168 	PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
169 	PORT_DIPSETTING(    0x05, DEF_STR( 2C_3C ) )
170 	PORT_DIPSETTING(    0x06, DEF_STR( 2C_5C ) )
171 	PORT_DIPSETTING(    0x07, DEF_STR( 2C_7C ) )
172 	PORT_DIPSETTING(    0x01, "3 Coins / 5 Credits" )
173 	PORT_DIPSETTING(    0x02, "3 Coins / 7 Credits" )
174 	PORT_DIPSETTING(    0x03, "3 Coins / 10 Credits" )
175 	PORT_DIPNAME( 0x70, 0x40, DEF_STR( Coin_B ) )
176 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_1C ) )
177 	PORT_DIPSETTING(    0x50, DEF_STR( 1C_2C ) )
178 	PORT_DIPSETTING(    0x60, DEF_STR( 1C_5C ) )
179 	PORT_DIPSETTING(    0x70, "1 Coin / 10 Credits" )
180 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) )
181 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
182 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_3C ) )
183 	PORT_DIPSETTING(    0x30, DEF_STR( 2C_5C ) )
184 	PORT_DIPNAME( 0x80, 0x00, "Service Coin" )
185 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
186 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
187 
188 	PORT_START("DSW2")
189 	PORT_DIPNAME( 0x01, 0x00, "Game Play" )
190 	PORT_DIPSETTING(    0x00, "Normal Play" )
191 	PORT_DIPSETTING(    0x01, "Freeplay (255 Cameras)" )
192 	PORT_DIPNAME( 0x02, 0x00, "High Score" )
193 	PORT_DIPSETTING(    0x00, "11.350 Points" )
194 	PORT_DIPSETTING(    0x02, "1.350 Points" )
195 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
196 	PORT_DIPSETTING(    0x00, "2" )
197 	PORT_DIPSETTING(    0x04, "3" )
198 	PORT_DIPSETTING(    0x08, "4" )
199 	PORT_DIPSETTING(    0x0c, "5" )
200 	PORT_DIPNAME( 0x30, 0x30, "Extra Camera" )
201 	PORT_DIPSETTING(    0x00, DEF_STR( None ) )
202 	PORT_DIPSETTING(    0x10, "Every 10.000 Points" )
203 	PORT_DIPSETTING(    0x20, "Every 20.000 Points" )
204 	PORT_DIPSETTING(    0x30, "Every 30.000 Points" )
205 	PORT_DIPNAME( 0x40, 0x00, "Ostrich Speed" )
206 	PORT_DIPSETTING(    0x00, "Slow" )
207 	PORT_DIPSETTING(    0x40, "Quick" )
208 	PORT_DIPNAME( 0x80, 0x80, "Obstacles" )
209 	PORT_DIPSETTING(    0x80, DEF_STR( No ) )
210 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
211 
212 	PORT_START("SYSTEM")
213 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )    PORT_IMPULSE(2)
214 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )    PORT_IMPULSE(2)
215 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_IMPULSE(2)
216 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
217 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
218 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
219 	PORT_DIPNAME( 0x40, 0x40, "Service Switch 1" )
220 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
221 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
222 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
223 
224 	PORT_START("INPUTS")
225 	PORT_BIT( 0x01, IP_ACTIVE_LOW,  IPT_JOYSTICK_UP    ) PORT_4WAY
226 	PORT_BIT( 0x02, IP_ACTIVE_LOW,  IPT_JOYSTICK_DOWN  ) PORT_4WAY
227 	PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_JOYSTICK_RIGHT ) PORT_4WAY
228 	PORT_BIT( 0x08, IP_ACTIVE_LOW,  IPT_JOYSTICK_LEFT  ) PORT_4WAY
229 	PORT_BIT( 0x10, IP_ACTIVE_LOW,  IPT_BUTTON1 )
230 	PORT_BIT( 0x20, IP_ACTIVE_LOW,  IPT_SERVICE2 ) // hold during boot to clear the NVRAM
231 	PORT_DIPNAME( 0x40, 0x40, "Service Switch 2" )
232 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
233 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
234 	PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_UNKNOWN )
235 INPUT_PORTS_END
236 
237 static const gfx_layout tile_layout =
238 {
239 	16,16, /* tile width, height   */
240 	1024,  /* number of characters  */
241 	3,     /* bits per pixel */
242 	{ 0x8000*8, 0x4000*8, 0x0000*8 }, /* bitplane offsets */
243 	{
244 		RGN_FRAC(1,2)+7, RGN_FRAC(1,2)+6, RGN_FRAC(1,2)+5, RGN_FRAC(1,2)+4,
245 		RGN_FRAC(1,2)+3, RGN_FRAC(1,2)+2, RGN_FRAC(1,2)+1, RGN_FRAC(1,2)+0,
246 		0, 1, 2, 3, 4, 5, 6, 7
247 	},
248 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 8*9, 8*10, 8*11, 8*12, 8*13, 8*14, 8*15 },
249 	8*16 /* character offset */
250 };
251 
252 static GFXDECODE_START( gfx_portrait )
253 	GFXDECODE_ENTRY( "gfx1", 0x00000, tile_layout, 0, 0x800/8 )
254 GFXDECODE_END
255 
256 
portrait(machine_config & config)257 void portrait_state::portrait(machine_config &config)
258 {
259 	Z80(config, m_maincpu, 4000000);     /* 4 MHz ? */
260 	m_maincpu->set_addrmap(AS_PROGRAM, &portrait_state::portrait_map);
261 	m_maincpu->set_vblank_int("screen", FUNC(portrait_state::irq0_line_hold));
262 
263 	i8039_device &audiocpu(I8039(config, "audiocpu", 3120000));  /* ? */
264 	audiocpu.set_addrmap(AS_PROGRAM, &portrait_state::portrait_sound_map);
265 
266 	NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
267 
268 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
269 	screen.set_refresh_hz(50);
270 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
271 	screen.set_size(64*8, 64*8);
272 	screen.set_visarea(0*8, 54*8-1, 0*8, 40*8-1);
273 	screen.set_screen_update(FUNC(portrait_state::screen_update));
274 	screen.set_palette(m_palette);
275 
276 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_portrait);
277 	PALETTE(config, m_palette, FUNC(portrait_state::portrait_palette), 0x800, 0x40);
278 
279 	/* sound hardware */
280 	SPEAKER(config, "mono").front_center();
281 
282 	GENERIC_LATCH_8(config, "soundlatch");
283 
284 	TMS5200(config, m_tms, 640000).add_route(ALL_OUTPUTS, "mono", 1.0);
285 }
286 
287 
288 ROM_START( portrait )
289 	ROM_REGION( 0x10000, "maincpu", 0 )     /* 64k for the cpu */
290 	ROM_LOAD( "prt-p0.bin",  0x0000, 0x2000, CRC(a21874fa) SHA1(3db863f465a35d7d14dd71b47aa7dfe7b39fccf0) )
291 	ROM_LOAD( "prt-p1.bin",  0x2000, 0x2000, CRC(4d4d7793) SHA1(f828950ebbf285fc92c65f24421a20ceacef1cb9) )
292 	ROM_LOAD( "prt-p2.bin",  0x4000, 0x2000, CRC(83d88c9c) SHA1(c876f72b66537a49620fa27a5cb8a4aecd378f0a) )
293 	ROM_LOAD( "prt-p3.bin",  0x6000, 0x2000, CRC(bd32d007) SHA1(cdf814b00c22f9a4503fa54d43fb5781251b67a7) )
294 
295 	ROM_REGION( 0x1000, "audiocpu", 0 )
296 	ROM_LOAD( "port_w.bin",  0x0000, 0x0800, CRC(d3a4e950) SHA1(0a399d43c7690d568874f3b1d55135f803fc223f) )
297 	ROM_LOAD( "port_ma.bin", 0x0800, 0x0800, CRC(ee242e4f) SHA1(fb67e0d136927e04f4fa819f684c97b0d52ee48c) )
298 
299 	ROM_REGION( 0x20000, "gfx1", 0 )
300 	ROM_LOAD( "port_00.a1", 0x00000, 0x2000, CRC(eb3e1c12) SHA1(2d38b66f52546b40553244c8a5c961279559f5b6) ) /*bit plane 1*/
301 	ROM_LOAD( "port_10.b1", 0x02000, 0x2000, CRC(0f44e377) SHA1(1955f9f4deab2166f637f43c1f326bd65fc90f6a) ) /*bit plane 1*/
302 
303 	ROM_LOAD( "port_02.d1", 0x04000, 0x2000, CRC(bd93a3f9) SHA1(9cb479b8840cafd6043ff0cb9d5ca031dcd332ba) ) /*bit plane 2*/
304 	ROM_LOAD( "port_12.e1", 0x06000, 0x2000, CRC(656b9f20) SHA1(c1907aba3d19be79d92cd73784b8e7ae94910da6) ) /*bit plane 2*/
305 
306 	ROM_LOAD( "port_04.g1", 0x08000, 0x2000, CRC(2a99feb5) SHA1(b373d2a2bd28aad6dd7a15a2166e03a8b7a34d9b) ) /*bit plane 3*/
307 	ROM_LOAD( "port_14.g1", 0x0a000, 0x2000, CRC(224b7a58) SHA1(b84e70d22d1cab41e5773fc9daa2e4e55ec9d96e) ) /*bit plane 3*/
308 
309 	ROM_LOAD( "port_01.a2", 0x10000, 0x2000, CRC(70d27508) SHA1(d011f85b31bb3aa6f386e8e0edb91df10f4c4eb6) ) /*bit plane 1*/
310 	ROM_LOAD( "port_11.b2", 0x12000, 0x2000, CRC(f498e395) SHA1(beb1d12433a350e5b773126de3f2803a9f5620c1) ) /*bit plane 1*/
311 
312 	ROM_LOAD( "port_03.d2", 0x14000, 0x2000, CRC(03d4153a) SHA1(7ce69ce6a101870dbfca1a9787fb1e660024bc02) ) /*bit plane 2*/
313 	ROM_LOAD( "port_13.e2", 0x16000, 0x2000, CRC(10fa22b8) SHA1(e8f4c24fcdda0ce5e33bc600acd574a232a9bb21) ) /*bit plane 2*/
314 
315 	ROM_LOAD( "port_05.g2", 0x18000, 0x2000, CRC(43ea7951) SHA1(df0ae7fa802365979514063e1d67cdd45ecada90) ) /*bit plane 3*/
316 	ROM_LOAD( "port_15.h2", 0x1a000, 0x2000, CRC(ab20b438) SHA1(ea5d60f6a9f06397bd0c6ee028b463c684090c01) ) /*bit plane 3*/
317 
318 	ROM_REGION( 0x0800, "user1", 0 ) // sound related?
319 	ROM_LOAD( "port_sa.bin", 0x0000, 0x0800, CRC(50510897) SHA1(8af0f42699602a5b33500968c958e3784e03377f) )
320 
321 	ROM_REGION( 0x800, "tileattr", 0 ) // tile attributes
322 	ROM_LOAD( "93z511.bin",   0x0000, 0x0800, CRC(d66d9036) SHA1(7a25efbd8f2f94a01aad9e2be9cb18da7b9ec1d1) )
323 
324 	ROM_REGION( 0x40, "proms", 0 ) // colors
325 	ROM_LOAD( "port_pr1.bin", 0x00, 0x0020, CRC(1e2deabb) SHA1(8357e53dba26bca9bc5d7a25c715836f0b3700b9) )
326 	ROM_LOAD( "port_pr2.n4",  0x20, 0x0020, CRC(008634f3) SHA1(7cde6b09ede672d562569866d944428198f2ba9c) )
327 ROM_END
328 
329 ROM_START( portraita )
330 	ROM_REGION( 0x10000, "maincpu", 0 )     /* 64k for the cpu */
331 	ROM_LOAD( "portp0f.m1",   0x0000, 0x2000, CRC(333eace3) SHA1(8f02df09d8b50d7e37d5abf7d539624c59a7201e) )
332 	ROM_LOAD( "portp0f.p1",   0x2000, 0x2000, CRC(fe258052) SHA1(f453eb05c68d61dfd644688732ff5c07366c68c0) )
333 	ROM_LOAD( "portp2f.r1",   0x4000, 0x2000, CRC(bc0104d5) SHA1(7707b85cde2dc9bd95391d4e1dbed219c52618cd) )
334 	ROM_LOAD( "portp3f.s1",   0x6000, 0x2000, CRC(3f5a3bdf) SHA1(cc4b5d24d0df0962b0cfd4d5c66baac5e4718237) )
335 
336 	ROM_REGION( 0x1000, "audiocpu", 0 )
337 	ROM_LOAD( "port_w.bin",  0x0000, 0x0800, CRC(d3a4e950) SHA1(0a399d43c7690d568874f3b1d55135f803fc223f) )
338 	ROM_LOAD( "port_ma.bin", 0x0800, 0x0800, CRC(ee242e4f) SHA1(fb67e0d136927e04f4fa819f684c97b0d52ee48c) )
339 
340 	ROM_REGION( 0x20000, "gfx1", 0 )
341 	ROM_LOAD( "port_00.a1", 0x00000, 0x2000, CRC(eb3e1c12) SHA1(2d38b66f52546b40553244c8a5c961279559f5b6) ) /*bit plane 1*/
342 	ROM_LOAD( "port_10.b1", 0x02000, 0x2000, CRC(0f44e377) SHA1(1955f9f4deab2166f637f43c1f326bd65fc90f6a) ) /*bit plane 1*/
343 	ROM_LOAD( "port_02.d1", 0x04000, 0x2000, CRC(bd93a3f9) SHA1(9cb479b8840cafd6043ff0cb9d5ca031dcd332ba) ) /*bit plane 2*/
344 	ROM_LOAD( "port_12.e1", 0x06000, 0x2000, CRC(656b9f20) SHA1(c1907aba3d19be79d92cd73784b8e7ae94910da6) ) /*bit plane 2*/
345 	ROM_LOAD( "port_04.g1", 0x08000, 0x2000, CRC(2a99feb5) SHA1(b373d2a2bd28aad6dd7a15a2166e03a8b7a34d9b) ) /*bit plane 3*/
346 	ROM_LOAD( "port_14.g1", 0x0a000, 0x2000, CRC(224b7a58) SHA1(b84e70d22d1cab41e5773fc9daa2e4e55ec9d96e) ) /*bit plane 3*/
347 
348 	ROM_LOAD( "port_01.a2", 0x10000, 0x2000, CRC(70d27508) SHA1(d011f85b31bb3aa6f386e8e0edb91df10f4c4eb6) ) /*bit plane 1*/
349 	ROM_LOAD( "port_11.b2", 0x12000, 0x2000, CRC(f498e395) SHA1(beb1d12433a350e5b773126de3f2803a9f5620c1) ) /*bit plane 1*/
350 	ROM_LOAD( "port_03.d2", 0x14000, 0x2000, CRC(03d4153a) SHA1(7ce69ce6a101870dbfca1a9787fb1e660024bc02) ) /*bit plane 2*/
351 	ROM_LOAD( "port_13.e2", 0x16000, 0x2000, CRC(10fa22b8) SHA1(e8f4c24fcdda0ce5e33bc600acd574a232a9bb21) ) /*bit plane 2*/
352 	ROM_LOAD( "port_05.g2", 0x18000, 0x2000, CRC(43ea7951) SHA1(df0ae7fa802365979514063e1d67cdd45ecada90) ) /*bit plane 3*/
353 	ROM_LOAD( "port_15.h2", 0x1a000, 0x2000, CRC(ab20b438) SHA1(ea5d60f6a9f06397bd0c6ee028b463c684090c01) ) /*bit plane 3*/
354 
355 	ROM_REGION( 0x800, "tileattr", 0 ) // tile attributes (see notes)
356 	ROM_LOAD( "93z511.bin",   0x0000, 0x0800, CRC(d66d9036) SHA1(7a25efbd8f2f94a01aad9e2be9cb18da7b9ec1d1) )
357 
358 	ROM_REGION( 0x40, "proms", 0 ) // colors
359 	ROM_LOAD( "port_pr1.bin", 0x00, 0x0020, CRC(1e2deabb) SHA1(8357e53dba26bca9bc5d7a25c715836f0b3700b9) )
360 	ROM_LOAD( "port_pr2.n4",  0x20, 0x0020, CRC(008634f3) SHA1(7cde6b09ede672d562569866d944428198f2ba9c) )
361 ROM_END
362 
363 /* tileattr rom
364 
365   this appears to be divided into 2 0x400 banks
366 
367   0x000 - 0x3ff relates to tiles 0x000-0x0ff
368 
369   0x400 - 0x7ff relates to tiles 0x100-0x1ff, 0x200-0x2ff, and 0x300-0x3ff
370 
371   every 2 tiles are somehow related to 8 bytes in the data
372 
373    so tiles 0x00 and 0x01 use bytes 0x000-0x007
374             0x02                    0x008
375             0x04                    0x010
376             0x06                    0x018
377             0x08                    0x020
378             0x0a                    0x028
379             0x0c                    0x030
380             0x0e                    0x038
381             0x10                    0x040
382                .......
383             0xfe and 0xff use bytes 0x3f8-0x3ff
384             etc.
385 
386     it's probably some kind of lookup table for the colours (6bpp = 8 colours, maybe every 2 tiles share the same 8 colours)
387     I guess either the bank (0/1) can be selected, or bank 0 is hardcoded to tiles 0x000-0x0ff (because tilemaps can use
388      these tiles too, so it's not a case of it being a sprite/tilemap lookup split)
389 
390     anyway.. this is why the portraits logo is broken across 3 areas (0x1f2, 0x2f2, 0x3f2) so that they can share the same
391     attributes from this rom
392 
393   */
394 
395 
396 
397 GAME( 1983, portrait, 0,        portrait, portrait, portrait_state, empty_init, ROT270, "Olympia", "Portraits (set 1)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
398 GAME( 1983, portraita,portrait, portrait, portrait, portrait_state, empty_init, ROT270, "Olympia", "Portraits (set 2)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
399