38
49
Twenty four 8116 rams.
40
****************************************************************/
51
****************************************************************************************/
42
53
#include "driver.h"
43
54
#include "cpu/m6502/m6502.h"
44
55
#include "sound/ay8910.h"
45
#include "includes/btime.h"
56
#include "video/mc6845.h"
58
static UINT8 char_pen,char_pen_vreg;
59
static UINT8 *progolf_fg_fb;
60
static UINT8 *progolf_fbram;
61
static UINT8 scrollx_hi;
62
static UINT8 scrollx_lo;
63
static UINT8 progolf_gfx_switch;
65
static UINT8 sound_cmd;
67
static VIDEO_START( progolf )
72
progolf_fg_fb = auto_alloc_array(machine, UINT8, 0x2000*8);
73
videoram = auto_alloc_array(machine, UINT8, 0x1000);
77
static VIDEO_UPDATE( progolf )
79
int count,color,x,y,xi,yi;
82
int scroll = (scrollx_lo | ((scrollx_hi & 0x03) << 8));
90
int tile = videoram[count];
92
drawgfx_opaque(bitmap,cliprect,screen->machine->gfx[0],tile,1,0,0,(256-x*8)+scroll,y*8);
94
drawgfx_opaque(bitmap,cliprect,screen->machine->gfx[0],tile,1,0,0,(256-x*8)+scroll-1024,y*8);
101
/* framebuffer is 8x8 chars arranged like a bitmap + a register that controls the pen handling. */
113
color = progolf_fg_fb[(xi+yi*8)+count*0x40];
115
if((x+yi) <= cliprect->max_x && (256-y+xi) <= cliprect->max_y && color != 0)
116
*BITMAP_ADDR16(bitmap, x+yi, 256-y+xi) = screen->machine->pens[(color & 0x7)];
128
static WRITE8_HANDLER( progolf_charram_w )
131
progolf_fbram[offset] = data;
136
progolf_fg_fb[offset*8+i] = 0;
142
if(progolf_fg_fb[offset*8+i] == char_pen)
143
progolf_fg_fb[offset*8+i] = data & (1<<(7-i)) ? char_pen : 0;
145
progolf_fg_fb[offset*8+i] = data & (1<<(7-i)) ? progolf_fg_fb[offset*8+i]|char_pen : progolf_fg_fb[offset*8+i];
150
static WRITE8_HANDLER( progolf_char_vregs_w )
152
char_pen = data & 0x07;
153
progolf_gfx_switch = data & 0xf0;
154
char_pen_vreg = data & 0x30;
157
static WRITE8_HANDLER( progolf_scrollx_lo_w )
162
static WRITE8_HANDLER( progolf_scrollx_hi_w )
167
static WRITE8_HANDLER( progolf_flip_screen_w )
169
flip_screen_set(space->machine, data & 1);
171
printf("$9600 with data = %02x used\n",data);
174
static WRITE8_HANDLER( audio_command_w )
177
cputag_set_input_line(space->machine, "audiocpu", 0, ASSERT_LINE);
180
static READ8_HANDLER( audio_command_r )
182
cputag_set_input_line(space->machine, "audiocpu", 0, CLEAR_LINE);
186
static READ8_HANDLER( progolf_videoram_r )
188
UINT8 *gfx_rom = memory_region(space->machine, "gfx1");
190
if (offset >= 0x0800)
192
if (progolf_gfx_switch == 0x50)
193
return gfx_rom[offset];
194
else if (progolf_gfx_switch == 0x60)
195
return gfx_rom[offset + 0x1000];
196
else if (progolf_gfx_switch == 0x70)
197
return gfx_rom[offset + 0x2000];
199
return videoram[offset];
201
if (progolf_gfx_switch == 0x10)
202
return gfx_rom[offset];
203
else if (progolf_gfx_switch == 0x20)
204
return gfx_rom[offset + 0x1000];
205
else if (progolf_gfx_switch == 0x30)
206
return gfx_rom[offset + 0x2000];
208
return videoram[offset];
212
static WRITE8_HANDLER( progolf_videoram_w )
214
//if(progolf_gfx_switch & 0x40)
215
videoram[offset] = data;
47
218
static ADDRESS_MAP_START( main_cpu, ADDRESS_SPACE_PROGRAM, 8 )
48
AM_RANGE(0x0000, 0x0fff) AM_RAM
49
AM_RANGE(0x1000, 0x1fff) AM_RAM //AM_WRITE(deco_charram_w) AM_BASE(&deco_charram)
50
AM_RANGE(0x2000, 0x7fff) AM_RAM AM_BASE(&deco_charram) //AM_WRITE(deco_charram_w)
51
AM_RANGE(0x9000, 0x9000) AM_WRITENOP //video control?
52
AM_RANGE(0x9000, 0x9000) AM_READNOP
53
AM_RANGE(0x9200, 0x9200) AM_WRITENOP
54
AM_RANGE(0x9400, 0x9400) AM_WRITENOP
55
AM_RANGE(0x9600, 0x9600) AM_WRITENOP
56
AM_RANGE(0x9600, 0x9600) AM_READ_PORT("IN0") /* VBLANK */
57
AM_RANGE(0x9800, 0x9800) AM_READNOP
58
AM_RANGE(0x9800, 0x9801) AM_WRITENOP // mc6845 regs
59
AM_RANGE(0x9a00, 0x9a00) AM_WRITENOP
60
AM_RANGE(0x9a00, 0x9a00) AM_READNOP
61
AM_RANGE(0x9e00, 0x9e00) AM_WRITENOP
62
AM_RANGE(0x8000, 0x83ff) AM_RAM AM_BASE(&btime_videoram) AM_SIZE(&btime_videoram_size)
63
AM_RANGE(0x8400, 0x87ff) AM_RAM AM_BASE(&btime_colorram)
64
AM_RANGE(0x8800, 0x881f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
65
AM_RANGE(0x8820, 0x8fff) AM_RAM
219
AM_RANGE(0x0000, 0x5fff) AM_RAM
220
AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE(progolf_charram_w) AM_BASE(&progolf_fbram)
221
AM_RANGE(0x8000, 0x8fff) AM_READWRITE(progolf_videoram_r,progolf_videoram_w)
222
AM_RANGE(0x9000, 0x9000) AM_READ_PORT("IN2") AM_WRITE(progolf_char_vregs_w)
223
AM_RANGE(0x9200, 0x9200) AM_READ_PORT("P1") AM_WRITE(progolf_scrollx_hi_w) //p1 inputs
224
AM_RANGE(0x9400, 0x9400) AM_READ_PORT("P2") AM_WRITE(progolf_scrollx_lo_w) //p2 inputs
225
AM_RANGE(0x9600, 0x9600) AM_READ_PORT("IN0") AM_WRITE(progolf_flip_screen_w) /* VBLANK */
226
AM_RANGE(0x9800, 0x9800) AM_READ_PORT("DSW1")
227
AM_RANGE(0x9800, 0x9800) AM_DEVWRITE("crtc", mc6845_address_w)
228
AM_RANGE(0x9801, 0x9801) AM_DEVWRITE("crtc", mc6845_register_w)
229
AM_RANGE(0x9a00, 0x9a00) AM_READ_PORT("DSW2") AM_WRITE(audio_command_w)
230
// AM_RANGE(0x9e00, 0x9e00) AM_WRITENOP
66
231
AM_RANGE(0xb000, 0xffff) AM_ROM
72
237
AM_RANGE(0x5000, 0x5fff) AM_DEVWRITE("ay1", ay8910_address_w)
73
238
AM_RANGE(0x6000, 0x6fff) AM_DEVREADWRITE("ay2", ay8910_r, ay8910_data_w)
74
239
AM_RANGE(0x7000, 0x7fff) AM_DEVWRITE("ay2", ay8910_address_w)
75
// AM_RANGE(0x8000, 0x8fff) AM_WRITE(interrupt_enable_w) //???
76
AM_RANGE(0x9000, 0xafff) AM_READ(soundlatch_r)
240
AM_RANGE(0x8000, 0x8fff) AM_READ(audio_command_r) AM_WRITENOP //volume control?
77
241
AM_RANGE(0xf000, 0xffff) AM_ROM
244
static INPUT_CHANGED( coin_inserted )
246
cputag_set_input_line(field->port->machine, "maincpu", INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE);
80
249
static INPUT_PORTS_START( progolf )
82
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
83
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
84
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
85
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
86
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
87
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
88
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
251
PORT_DIPNAME( 0x01, 0x01, "IN0" )
252
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
253
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
254
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
255
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
256
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
257
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
258
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
259
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
260
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
261
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
262
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
263
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
264
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
265
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
266
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
267
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
268
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
269
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
270
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
271
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
89
272
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
275
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
276
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
277
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
278
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
279
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
280
PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_UNUSED )
281
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
95
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
96
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
97
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
98
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
99
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
100
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
101
PORT_BIT( 0x40, IP_ACTIVE_HIGH,IPT_COIN1 ) PORT_IMPULSE(2)
102
PORT_BIT( 0x80, IP_ACTIVE_HIGH,IPT_COIN2 ) PORT_IMPULSE(2)
284
PORT_DIPNAME( 0x01, 0x01, "IN3" )
285
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
286
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
287
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
288
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
289
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
290
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
291
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
292
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
293
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
294
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
295
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
296
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
297
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
298
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
299
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
300
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
301
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
302
PORT_BIT( 0x40, IP_ACTIVE_LOW,IPT_COIN1 ) PORT_CHANGED(coin_inserted, 0)
303
PORT_BIT( 0x80, IP_ACTIVE_LOW,IPT_COIN2 ) PORT_CHANGED(coin_inserted, 0)
306
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
307
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
308
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
309
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
310
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
311
PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_UNUSED )
312
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START2 )
315
PORT_DIPNAME( 0x01, 0x00, "DSW1" )
316
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
317
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
318
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
319
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
320
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
321
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
322
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
323
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
324
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
325
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
326
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
327
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
328
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
329
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
330
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
331
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
332
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
333
PORT_BIT( 0x40, IP_ACTIVE_HIGH,IPT_SERVICE1 ) PORT_CHANGED(coin_inserted, 0)
334
PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
337
PORT_DIPNAME( 0x01, 0x00, "DSW2" )
338
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
339
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
340
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
341
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
342
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
343
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
344
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
345
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
346
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
347
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
348
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
349
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
350
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
351
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
352
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
353
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
354
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
355
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
356
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
357
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
358
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
359
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
360
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
105
static const gfx_layout charlayout =
107
8,8, /* 8*8 characters */
108
1024, /* 1024 characters */
109
3, /* 3 bits per pixel */
110
{ 2*1024*8*8, 1024*8*8, 0 }, /* the bitplanes are separated */
111
{ 0, 1, 2, 3, 4, 5, 6, 7 },
112
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
113
8*8 /* every char takes 8 consecutive bytes */
116
static const gfx_layout spritelayout =
118
16,16, /* 16*16 sprites */
119
256, /* 256 sprites */
120
3, /* 3 bits per pixel */
121
{ 2*256*16*16, 256*16*16, 0 }, /* the bitplanes are separated */
122
{ 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
123
0, 1, 2, 3, 4, 5, 6, 7 },
124
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
125
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
126
32*8 /* every sprite takes 32 consecutive bytes */
129
363
static const gfx_layout progolf_charlayout =
131
365
8,8, /* 8*8 characters */
137
371
8*8 /* every char takes 8 consecutive bytes */
140
static const gfx_layout progolf_charlayout2 =
142
8,8, /* 8*8 characters */
143
RGN_FRAC(1,1), /* 512 characters */
144
1, /* 3 bits per pixel */
145
{ 0 }, /* the bitplanes are separated */
146
{ 0, 1, 2, 3, 4, 5, 6, 7 },
147
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
148
8*8 /* every char takes 8 consecutive bytes */
152
static const gfx_layout progolf_spritelayout2 =
154
16,16, /* 16*16 sprites */
155
RGN_FRAC(1,1), /* 256 sprites */
156
1,//3, /* 3 bits per pixel */
157
{ 0},//RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, /* the bitplanes are separated */
158
{ 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
159
0, 1, 2, 3, 4, 5, 6, 7 },
160
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
161
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
162
32*8 /* every sprite takes 32 consecutive bytes */
165
374
static GFXDECODE_START( progolf )
166
375
GFXDECODE_ENTRY( "gfx1", 0x0000, progolf_charlayout, 0, 8 ) /* sprites */
167
GFXDECODE_ENTRY( NULL, 0x2000, charlayout, 0, 4 ) /* char set #1 */
168
GFXDECODE_ENTRY( NULL, 0x2000, spritelayout, 0, 4 ) /* sprites */
170
// GFXDECODE_ENTRY( "gfx2", 0x0000, progolf_charlayout2, 0, 8 ) /* sprites */
171
// GFXDECODE_ENTRY( "gfx2", 0x0000, progolf_spritelayout2, 0, 8 ) /* sprites */
175
#ifdef UNUSED_FUNCTION
379
//#ifdef UNUSED_FUNCTION
176
380
static INTERRUPT_GEN( progolf_interrupt )
178
//if (input_port_read(machine, "IN2") & 0xc0)
179
cpu_set_input_line(device, /*0*/INPUT_LINE_NMI, /*HOLD_LINE*/PULSE_LINE);
385
static const mc6845_interface mc6845_intf =
387
"screen", /* screen we are acting on */
388
8, /* number of pixels per video memory address */
389
NULL, /* before pixel update callback */
390
NULL, /* row update callback */
391
NULL, /* after pixel update callback */
392
DEVCB_NULL, /* callback for display state changes */
393
DEVCB_NULL, /* callback for cursor state changes */
394
DEVCB_NULL, /* HSYNC callback */
395
DEVCB_NULL, /* VSYNC callback */
396
NULL /* update address callback */
400
static PALETTE_INIT( progolf )
404
for (i = 0;i < machine->config->total_colors;i++)
406
int bit0,bit1,bit2,r,g,b;
409
bit0 = (color_prom[i] >> 0) & 0x01;
410
bit1 = (color_prom[i] >> 1) & 0x01;
411
bit2 = (color_prom[i] >> 2) & 0x01;
412
r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
413
/* green component */
414
bit0 = (color_prom[i] >> 3) & 0x01;
415
bit1 = (color_prom[i] >> 4) & 0x01;
416
bit2 = (color_prom[i] >> 5) & 0x01;
417
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
420
bit1 = (color_prom[i] >> 6) & 0x01;
421
bit2 = (color_prom[i] >> 7) & 0x01;
422
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
424
palette_set_color(machine,i,MAKE_RGB(r,g,b));
183
428
static MACHINE_DRIVER_START( progolf )
184
429
/* basic machine hardware */
185
MDRV_CPU_ADD("maincpu", M6502, 2000000) /* ? */
430
MDRV_CPU_ADD("maincpu", M6502, 3000000/2) /* guess, 3 Mhz makes the game to behave worse? */
186
431
MDRV_CPU_PROGRAM_MAP(main_cpu)
187
// MDRV_CPU_VBLANK_INT("screen", progolf_interrupt)
432
MDRV_CPU_VBLANK_INT("screen", progolf_interrupt)
189
434
MDRV_CPU_ADD("audiocpu", M6502, 500000)
190
435
MDRV_CPU_PROGRAM_MAP(sound_cpu)
191
// MDRV_CPU_VBLANK_INT("screen",nmi_line_pulse)
437
MDRV_QUANTUM_PERFECT_CPU("maincpu")
193
439
/* video hardware */
194
440
MDRV_SCREEN_ADD("screen", RASTER)
272
518
memory_set_decrypted_region(space,0x0000,0xffff, decrypted);
274
520
/* Swap bits 5 & 6 for opcodes */
275
for (A = 0;A < 0x10000;A++)
521
for (A = 0xb000 ; A < 0x10000 ; A++)
276
522
decrypted[A] = BITSWAP8(rom[A],7,5,6,4,3,2,1,0);
279
/*Maybe progolf is a bootleg and progolfa is the original (with Deco C10707 as CPU)?*/
280
GAME( 1981, progolf, 0, progolf, progolf, progolf, ROT270, "Data East Corporation", "18 Holes Pro Golf (set 1)", GAME_NOT_WORKING )
281
GAME( 1981, progolfa, progolf, progolf, progolf, progolf, ROT270, "Data East Corporation", "18 Holes Pro Golf (set 2)", GAME_NOT_WORKING ) // doesn't display anything
525
static DRIVER_INIT( progolfa )
528
const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
529
UINT8 *rom = memory_region(machine, "maincpu");
530
UINT8* decrypted = auto_alloc_array(machine, UINT8, 0x10000);
532
memory_set_decrypted_region(space,0x0000,0xffff, decrypted);
534
/* data is likely to not be encrypted, just the opcodes are. */
535
for (A = 0x0000 ; A < 0x10000 ; A++)
538
decrypted[A] = BITSWAP8(rom[A],6,4,7,5,3,2,1,0);
540
decrypted[A] = rom[A];
544
/* Maybe progolf is a bootleg? progolfa uses DECO CPU-6 as custom module CPU (the same as Zoar) */
545
GAME( 1981, progolf, 0, progolf, progolf, progolf, ROT270, "Data East Corporation", "18 Holes Pro Golf (set 1)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS )
546
GAME( 1981, progolfa, progolf, progolf, progolf, progolfa, ROT270, "Data East Corporation", "18 Holes Pro Golf (set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL )