summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bus/vc4000/rom.c
blob: 200d5d4127fd313e7cd09c92d3f7aa3743454200 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
// license:BSD-3-Clause
// copyright-holders:etabeta
/***********************************************************************************************************


 Interton Electronic VC 4000 cart emulation


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


/*  Game List and Emulation Status

 When you load a game it will normally appear to be unresponsive. Most carts contain a number of variants
 of each game (e.g. Difficulty, Player1 vs Player2 or Player1 vs Computer, etc).

 Press F2 (if needed) to select which game variant you would like to play. The variant number will increment
 on-screen. When you've made your choice, press F1 to start. The main keys are unlabelled, because an overlay
 is provided with each cart. See below for a guide. You need to read the instructions that come with each game.

 In some games, the joystick is used like 4 buttons, and other games like a paddle. The two modes are
 incompatible when using a keyboard. Therefore (in the emulation) a config dipswitch is used. The preferred
 setting is listed below.

 (AC = Auto-centre, NAC = no auto-centre, 90 = turn controller 90 degrees).

 The list is rather incomplete, information will be added as it becomes available.

 The game names and numbers were obtained from the Amigan Software site.

 Cart Num    Name
 ----------------------------------------------
 1.      Grand Prix / Car Races / Autosport / Motor Racing / Road Race
 Config: Paddle, NAC
 Status: Working
 Controls: Left-Right: Steer; Up: Accelerate

 2.      Black Jack
 Status: Not working (some digits missing; indicator missing; dealer's cards missing)
 Controls: set bet with S and D; A to deal; 1 to hit, 2 to stay; Q accept insurance, E to decline; double-up (unknown key)
 Indicator: E make a bet then deal; I choose insurance; - you lost; + you won; X hit or stay

 3.      Olympics / Paddle Games / Bat & Ball / Pro Sport 60 / Sportsworld
 Config: Paddle, NAC
 Status: Working

 4.      Tank Battle / Combat
 Config: Button, 90
 Status: Working
 Controls: Left-Right: Steer; Up: Accelerate; Fire: Shoot

 5.      Maths 1
 Status: Working
 Controls: Z difficulty; X = addition or subtraction; C ask question; A=1;S=2;D=3;Q=4;W=5;E=6;1=7;2=8;3=9;0=0; C enter

 6.      Maths 2
 Status: Not working
 Controls: Same as above.

 7.      Air Sea Attack / Air Sea Battle
 Config: Button, 90
 Status: Working
 Controls: Left-Right: Move; Fire: Shoot

 8.      Treasure Hunt / Capture the Flag / Concentration / Memory Match
 Config: Buttons
 Status: Working

 9.      Labyrinth / Maze / Intelligence 1
 Config: Buttons
 Status: Working

 10.     Winter Sports
 Notes: Background colours should be Cyan and White instead of Red and Black

 11.     Hippodrome / Horse Race

 12.     Hunting / Shooting Gallery

 13.     Chess 1
 Status: Can't see what you're typing, wrong colours

 14.     Moto-cros

 15.     Four in a row / Intelligence 2
 Config: Buttons
 Status: Working
 Notes: Seems the unused squares should be black. The screen jumps about while the computer is "thinking".

 16.     Code Breaker / Master Mind / Intelligence 3 / Challenge

 17.     Circus
 STatus: severe gfx issues

 18.     Boxing / Prize Fight

 19.     Outer Space / Spacewar / Space Attack / Outer Space Combat

 20.     Melody Simon / Musical Memory / Follow the Leader / Musical Games / Electronic Music / Face the Music

 21.     Capture / Othello / Reversi / Attack / Intelligence 4
 Config: Buttons
 Status: Working
 Notes: Seems the unused squares should be black

 22.     Chess 2
 Status: Can't see what you're typing, wrong colours

 23.     Pinball / Flipper / Arcade
 Status: gfx issues

 24.     Soccer

 25.     Bowling / NinePins
 Config: Paddle, rotated 90 degrees, up/down autocentre, left-right does not
 Status: Working

 26.     Draughts

 27.     Golf
 Status: gfx issues

 28.     Cockpit
 Status: gfx issues

 29.     Metropolis / Hangman
 Status: gfx issues

 30.     Solitaire

 31.     Casino
 Status: gfx issues, items missing and unplayable
 Controls: 1 or 3=START; q=GO; E=STOP; D=$; Z=^; X=tens; C=units

 32.     Invaders / Alien Invasion / Earth Invasion
 Status: Works
 Config: Buttons

 33.     Super Invaders
 Status: Stars are missing, colours are wrong
 Config: Buttons (90)

 36.     BackGammon
 Status: Not all counters are visible, Dice & game number not visible.
 Controls: Fire=Exec; 1=D+; 3=D-; Q,W,E=4,5,6; A,S,D=1,2,3; Z=CL; X=STOP; C=SET

 37.     Monster Man / Spider's Web
 Status: Works
 Config: Buttons

 38.     Hyperspace
 Status: Works
 Config: Buttons (90)
 Controls: 3 - status button; Q,W,E,A,S,D,Z,X,C selects which galaxy to visit


 40.     Super Space
 Status: Works, some small gfx issues near the bottom
 Config: Buttons



 Acetronic: (dumps are compatible)
 ------------

 * Shooting Gallery
 Status: works but screen flickers
 Config: Buttons

 * Planet Defender
 Status: Works
 Config: Paddle (NAC)

 * Laser Attack
 Status: Works
 Config: Buttons



 Public Domain: (written for emulators, may not work on real hardware)
 ---------------
 * Picture (no controls) - works
 * Wincadia Stub (no controls) - works, small graphic error */



#include "emu.h"
#include "rom.h"


//-------------------------------------------------
//  vc4000_rom_device - constructor
//-------------------------------------------------

const device_type VC4000_ROM_STD = &device_creator<vc4000_rom_device>;
const device_type VC4000_ROM_RAM1K = &device_creator<vc4000_ram1k_device>;
const device_type VC4000_ROM_CHESS2 = &device_creator<vc4000_chess2_device>;


vc4000_rom_device::vc4000_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
					: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
						device_vc4000_cart_interface( mconfig, *this )
{
}

vc4000_rom_device::vc4000_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
					: device_t(mconfig, VC4000_ROM_STD, "VC 4000 Standard Carts", tag, owner, clock, "vc4000_rom", __FILE__),
						device_vc4000_cart_interface( mconfig, *this )
{
}

vc4000_ram1k_device::vc4000_ram1k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
					: vc4000_rom_device(mconfig, VC4000_ROM_RAM1K, "VC 4000 Carts w/1K RAM", tag, owner, clock, "vc4000_ram1k", __FILE__)
{
}

vc4000_chess2_device::vc4000_chess2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
					: vc4000_rom_device(mconfig, VC4000_ROM_CHESS2, "VC 4000 Chess II Cart", tag, owner, clock, "vc4000_chess2", __FILE__)
{
}


/*-------------------------------------------------
 mapper specific handlers
 -------------------------------------------------*/

READ8_MEMBER(vc4000_rom_device::read_rom)
{
	if (offset < m_rom_size)
		return m_rom[offset];
	else
		return 0xff;
}


READ8_MEMBER(vc4000_ram1k_device::read_ram)
{
	return m_ram[offset & (m_ram.count() - 1)];
}

WRITE8_MEMBER(vc4000_ram1k_device::write_ram)
{
	m_ram[offset & (m_ram.count() - 1)] = data;
}


READ8_MEMBER(vc4000_chess2_device::extra_rom)
{
	if (offset < (m_rom_size - 0x2000))
		return m_rom[offset + 0x2000];
	else
		return 0xff;
}

READ8_MEMBER(vc4000_chess2_device::read_ram)
{
	return m_ram[offset & (m_ram.count() - 1)];
}

WRITE8_MEMBER(vc4000_chess2_device::write_ram)
{
	m_ram[offset & (m_ram.count() - 1)] = data;
}