~ubuntu-branches/debian/sid/mame/sid

« back to all changes in this revision

Viewing changes to mess/src/mess/drivers/primo.c

  • Committer: Package Import Robot
  • Author(s): Jordi Mallach, Jordi Mallach, Emmanuel Kasper
  • Date: 2011-12-19 22:56:27 UTC
  • mfrom: (0.1.2)
  • Revision ID: package-import@ubuntu.com-20111219225627-ub5oga1oys4ogqzm
Tags: 0.144-1
[ Jordi Mallach ]
* Fix syntax errors in DEP5 copyright file (lintian).
* Use a versioned copyright Format specification field.
* Update Vcs-* URLs.
* Move transitional packages to the new metapackages section, and make
  them priority extra.
* Remove references to GNU/Linux and MESS sources from copyright.
* Add build variables for s390x.
* Use .xz tarballs as it cuts 4MB for the upstream sources.
* Add nplayers.ini as a patch. Update copyright file to add CC-BY-SA-3.0.

[ Emmanuel Kasper ]
* New upstream release. Closes: #651538.
* Add Free Desktop compliant png icons of various sizes taken from
  the hydroxygen iconset
* Mess is now built from a new source package, to avoid possible source
  incompatibilities between mame and the mess overlay.
* Mame-tools are not built from the mame source package anymore, but
  from the mess source package

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*******************************************************************************
2
 
 
3
 
Primo driver by Krzysztof Strzecha
4
 
 
5
 
What's new:
6
 
-----------
7
 
2009.07.19 -    Removed hacked and duplicated ROMs (Krzysztof Strzecha)
8
 
2008.08.31 -    Added new ROMs including B32 and B48 [Miodrag Milanovic]
9
 
2005.05.19 -    Primo B-32 and B-48 testdrivers added.
10
 
2005.05.15 -    EPROM+RAM expansion.
11
 
        Support for .pp files improved.
12
 
        Some cleanups.
13
 
2005.05.12 -    Memory fixed for A-48 model what make it fully working.
14
 
        Fixed address of second video memory area.
15
 
 
16
 
To do:
17
 
    1. Disk
18
 
    2. V.24 / tape control
19
 
    3. CDOS autoboot
20
 
    4. Joystick
21
 
    5. Printer
22
 
    6. .PRI format
23
 
 
24
 
Primo variants:
25
 
    A-32 - 16kB RAM + 16KB ROM
26
 
    A-48 - 32kB RAM + 16KB ROM
27
 
    A-64 - 48kB RAM + 16KB ROM
28
 
    B-32 - 16kB RAM + 16KB ROM
29
 
    B-48 - 32kB RAM + 16KB ROM
30
 
    B-64 - 48kB RAM + 16KB ROM
31
 
 
32
 
CPU:
33
 
    U880D (DDR clone of Z80), 2.5 MHz
34
 
 
35
 
Memory map:
36
 
    A-32, B-32
37
 
    0000-3fff ROM
38
 
    4000-7fff RAM
39
 
    8000-bfff not mapped
40
 
    c000-ffff not mapped
41
 
 
42
 
    A-48, B-48
43
 
    0000-3fff ROM
44
 
    4000-7fff RAM
45
 
    8000-bfff RAM
46
 
    c000-ffff not mapped
47
 
 
48
 
    A-64, B-64
49
 
    0000-3fff ROM
50
 
    4000-7fff RAM
51
 
    8000-bfff RAM
52
 
    c000-ffff RAM
53
 
 
54
 
I/O Ports:
55
 
    Write:
56
 
    00h-3fh
57
 
        bit 7 - NMI
58
 
                0 - disable
59
 
                1 - enable
60
 
        bit 6 - joystick register shift
61
 
        bit 5 - V.24 (2) / tape control
62
 
        bit 4 - speaker
63
 
        bit 3 - display page
64
 
                0 - secondary
65
 
                1 - primary
66
 
        bit 2 - V.24 (1) / tape control
67
 
        bit 1 - cassette output
68
 
        bit 0 /
69
 
                00 - -110mV
70
 
                01 - 0V
71
 
                10 - 0V
72
 
                11 - 110mV
73
 
    40h-ffh (B models only)
74
 
        bit 7 - not used
75
 
        bit 6 - not used
76
 
        bit 5 - SCLK
77
 
        bit 4 - SDATA
78
 
        bit 3 - not used
79
 
        bit 2 - SRQ
80
 
        bit 1 - ATN
81
 
        bit 0 - not used
82
 
    Read:
83
 
    00h-3fh
84
 
        bit 7 - not used
85
 
        bit 6 - not used
86
 
        bit 5 - VBLANK
87
 
        bit 4 - I4
88
 
        bit 3 - I3
89
 
        bit 2 - cassette input
90
 
        bit 1 - reset
91
 
        bit 0 - keyboard input
92
 
    40h-ffh (B models only)
93
 
        bit 7 - not used
94
 
        bit 6 - not used
95
 
        bit 5 - SCLK
96
 
        bit 4 - SDATA
97
 
        bit 3 - SRQ
98
 
        bit 2 - joystick 2
99
 
        bit 1 - ATN
100
 
        bit 0 - joystick 1
101
 
 
102
 
Interrupts:
103
 
    NMI - 20ms (50HZ), can be disbled/enabled by I/O write
104
 
 
105
 
*******************************************************************************/
106
 
 
107
 
#include "emu.h"
108
 
#include "sound/speaker.h"
109
 
#include "sound/wave.h"
110
 
#include "includes/primo.h"
111
 
#include "cpu/z80/z80.h"
112
 
#include "imagedev/cassette.h"
113
 
#include "imagedev/snapquik.h"
114
 
#include "imagedev/cartslot.h"
115
 
#include "formats/primoptp.h"
116
 
#include "machine/cbmiec.h"
117
 
 
118
 
static ADDRESS_MAP_START( primoa_port, AS_IO, 8 )
119
 
        ADDRESS_MAP_GLOBAL_MASK(0xff)
120
 
        AM_RANGE( 0x00, 0x3f ) AM_READWRITE( primo_be_1_r, primo_ki_1_w )
121
 
        AM_RANGE( 0xfd, 0xfd ) AM_WRITE( primo_FD_w )
122
 
ADDRESS_MAP_END
123
 
 
124
 
static ADDRESS_MAP_START( primob_port, AS_IO, 8 )
125
 
        ADDRESS_MAP_GLOBAL_MASK(0xff)
126
 
        AM_RANGE( 0x00, 0x3f ) AM_READWRITE( primo_be_1_r, primo_ki_1_w )
127
 
        AM_RANGE( 0x40, 0x7f ) AM_READWRITE( primo_be_2_r, primo_ki_2_w )
128
 
        AM_RANGE( 0xfd, 0xfd ) AM_WRITE( primo_FD_w )
129
 
ADDRESS_MAP_END
130
 
 
131
 
static ADDRESS_MAP_START( primo32_mem, AS_PROGRAM, 8 )
132
 
        AM_RANGE( 0x0000, 0x3fff ) AM_RAMBANK("bank1")
133
 
        AM_RANGE( 0x4000, 0x7fff ) AM_RAM AM_MIRROR ( 0x8000 )
134
 
ADDRESS_MAP_END
135
 
 
136
 
static ADDRESS_MAP_START( primo48_mem, AS_PROGRAM, 8 )
137
 
        AM_RANGE( 0x0000, 0x3fff ) AM_RAMBANK("bank1")
138
 
        AM_RANGE( 0x4000, 0x7fff ) AM_RAM
139
 
        AM_RANGE( 0x8000, 0xbfff ) AM_RAM AM_MIRROR ( 0x4000 )
140
 
ADDRESS_MAP_END
141
 
 
142
 
static ADDRESS_MAP_START( primo64_mem, AS_PROGRAM, 8 )
143
 
        AM_RANGE( 0x0000, 0x3fff ) AM_RAMBANK("bank1")
144
 
        AM_RANGE( 0x4000, 0xffff ) AM_RAM
145
 
ADDRESS_MAP_END
146
 
 
147
 
static INPUT_PORTS_START( primo )
148
 
        PORT_START( "IN0" )
149
 
                PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)           PORT_CHAR('y') PORT_CHAR('Y')
150
 
                PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)          PORT_CHAR(UCHAR_MAMEKEY(UP))
151
 
                PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S)           PORT_CHAR('s') PORT_CHAR('S')
152
 
                PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHIFT")     PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT)     PORT_CHAR(UCHAR_SHIFT_1)
153
 
                PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)           PORT_CHAR('e') PORT_CHAR('E')
154
 
                PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("UPPER")     PORT_CODE(KEYCODE_LALT)         PORT_CHAR(UCHAR_MAMEKEY(LALT))
155
 
                PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)           PORT_CHAR('w') PORT_CHAR('W')
156
 
                PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CTR")       PORT_CODE(KEYCODE_LCONTROL)     PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
157
 
                PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D)           PORT_CHAR('d') PORT_CHAR('D')
158
 
                PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3)           PORT_CHAR('3') PORT_CHAR('#')
159
 
                PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X)           PORT_CHAR('x') PORT_CHAR('X')
160
 
                PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2)           PORT_CHAR('2') PORT_CHAR('\"')
161
 
                PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)           PORT_CHAR('q') PORT_CHAR('Q')
162
 
                PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1)           PORT_CHAR('1') PORT_CHAR('!')
163
 
                PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A)           PORT_CHAR('a') PORT_CHAR('A')
164
 
                PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN)        PORT_CHAR(UCHAR_MAMEKEY(DOWN))
165
 
 
166
 
        PORT_START( "IN1" )
167
 
                PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C)           PORT_CHAR('c') PORT_CHAR('C')
168
 
                PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED )
169
 
                PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F)           PORT_CHAR('f') PORT_CHAR('F')
170
 
                PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED )
171
 
                PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)           PORT_CHAR('r') PORT_CHAR('R')
172
 
                PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED )
173
 
                PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)           PORT_CHAR('t') PORT_CHAR('T')
174
 
                PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7)           PORT_CHAR('7') PORT_CHAR('/')
175
 
                PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H)           PORT_CHAR('h') PORT_CHAR('H')
176
 
                PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)       PORT_CHAR(' ')
177
 
                PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B)           PORT_CHAR('b') PORT_CHAR('B')
178
 
                PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6)           PORT_CHAR('6') PORT_CHAR('&')
179
 
                PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G)           PORT_CHAR('g') PORT_CHAR('G')
180
 
                PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5)           PORT_CHAR('5') PORT_CHAR('%')
181
 
                PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V)           PORT_CHAR('v') PORT_CHAR('V')
182
 
                PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4)           PORT_CHAR('4') PORT_CHAR('$')
183
 
 
184
 
        PORT_START( "IN2" )
185
 
                PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N)           PORT_CHAR('n') PORT_CHAR('N')
186
 
                PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8)           PORT_CHAR('8') PORT_CHAR('(')
187
 
                PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z)           PORT_CHAR('z') PORT_CHAR('Z')
188
 
                PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)       PORT_CHAR('+') PORT_CHAR('?')
189
 
                PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)           PORT_CHAR('u') PORT_CHAR('U')
190
 
                PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0)           PORT_CHAR('0') PORT_CHAR('=')
191
 
                PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J)           PORT_CHAR('j') PORT_CHAR('J')
192
 
                PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME)        PORT_CHAR('>') PORT_CHAR('<')
193
 
                PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L)           PORT_CHAR('l') PORT_CHAR('L')
194
 
                PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH)       PORT_CHAR('-') PORT_CHAR('|')
195
 
                PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K)           PORT_CHAR('k') PORT_CHAR('K')
196
 
                PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)        PORT_CHAR('.') PORT_CHAR(':')
197
 
                PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M)           PORT_CHAR('m') PORT_CHAR('M')
198
 
                PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9)           PORT_CHAR('9') PORT_CHAR(')')
199
 
                PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)           PORT_CHAR('i') PORT_CHAR('I')
200
 
                PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA)       PORT_CHAR(',') PORT_CHAR(';')
201
 
 
202
 
        PORT_START( "IN3" )
203
 
                PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("?") PORT_CODE(KEYCODE_EQUALS)               PORT_CHAR(UCHAR_MAMEKEY(F2))
204
 
                PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH)                                   PORT_CHAR('*') PORT_CHAR('\'')
205
 
                PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)                                                   PORT_CHAR('p') PORT_CHAR('P')
206
 
                PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xC2\xA3") PORT_CODE(KEYCODE_END)   PORT_CHAR(UCHAR_MAMEKEY(F3))
207
 
                PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O)                                                   PORT_CHAR('o') PORT_CHAR('O')
208
 
                PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CLS") PORT_CODE(KEYCODE_BACKSPACE)  PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
209
 
                PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNUSED )
210
 
                PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER)   PORT_CHAR(UCHAR_MAMEKEY(ENTER))
211
 
                PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNUSED )
212
 
                PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT)                                                PORT_CHAR(UCHAR_MAMEKEY(LEFT))
213
 
                PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x80\x9A") PORT_CODE(KEYCODE_COLON) PORT_CHAR(UCHAR_MAMEKEY(F4))
214
 
                PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xC2\xA2") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(UCHAR_MAMEKEY(F5))
215
 
                PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xC2\xA0") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(UCHAR_MAMEKEY(F6))
216
 
                PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT)                                               PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
217
 
                PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x80\x9D") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(UCHAR_MAMEKEY(F7))
218
 
                PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BRK")       PORT_CODE(KEYCODE_ESC)          PORT_CHAR(UCHAR_MAMEKEY(ESC))
219
 
 
220
 
        PORT_START( "RESET" )   /* IN4 */
221
 
                PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)                 PORT_CHAR(UCHAR_MAMEKEY(F1))
222
 
                PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
223
 
 
224
 
        PORT_START( "CPU_CLOCK" )       /* IN5 */
225
 
                PORT_CONFNAME(0x01, 0x00, "CPU clock" )
226
 
                PORT_CONFSETTING(       0x00, "2.50 MHz" )
227
 
                PORT_CONFSETTING(       0x01, "3.75 MHz" )
228
 
 
229
 
        PORT_START( "MEMORY_EXPANSION" )        /* IN6 */
230
 
                PORT_CONFNAME(0x01, 0x00, "EPROM+RAM Expansion" )
231
 
                PORT_CONFSETTING(       0x00, DEF_STR( On ) )
232
 
                PORT_CONFSETTING(       0x01, DEF_STR( Off ) )
233
 
INPUT_PORTS_END
234
 
 
235
 
static const struct CassetteOptions primo_cassette_options = {
236
 
        1,              /* channels */
237
 
        16,             /* bits per sample */
238
 
        22050   /* sample frequency */
239
 
};
240
 
 
241
 
static const cassette_interface primo_cassette_interface =
242
 
{
243
 
        primo_ptp_format,
244
 
        &primo_cassette_options,
245
 
        (cassette_state)(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED),
246
 
        NULL,
247
 
        NULL
248
 
};
249
 
 
250
 
static CBM_IEC_DAISY( cbm_iec_daisy )
251
 
{
252
 
        { NULL}
253
 
};
254
 
 
255
 
static MACHINE_CONFIG_START( primoa32, primo_state )
256
 
        /* basic machine hardware */
257
 
        MCFG_CPU_ADD( "maincpu", Z80, 2500000 )
258
 
        MCFG_CPU_PROGRAM_MAP( primo32_mem)
259
 
        MCFG_CPU_IO_MAP( primoa_port)
260
 
        MCFG_CPU_VBLANK_INT("screen", primo_vblank_interrupt)
261
 
 
262
 
        MCFG_MACHINE_RESET( primoa )
263
 
 
264
 
        /* video hardware */
265
 
        MCFG_SCREEN_ADD("screen", RASTER)
266
 
        MCFG_SCREEN_REFRESH_RATE( 50 )
267
 
        MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
268
 
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
269
 
        MCFG_SCREEN_SIZE( 256, 192 )
270
 
        MCFG_SCREEN_VISIBLE_AREA( 0, 256-1, 0, 192-1 )
271
 
        MCFG_SCREEN_UPDATE( primo )
272
 
 
273
 
        MCFG_PALETTE_LENGTH(2)
274
 
        MCFG_PALETTE_INIT(black_and_white)
275
 
 
276
 
        /* sound hardware */
277
 
        MCFG_SPEAKER_STANDARD_MONO("mono")
278
 
        MCFG_SOUND_WAVE_ADD(WAVE_TAG, CASSETTE_TAG)
279
 
        MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
280
 
        MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
281
 
        MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
282
 
 
283
 
        /* snapshot/quickload */
284
 
        MCFG_SNAPSHOT_ADD("snapshot", primo, "pss", 0)
285
 
        MCFG_QUICKLOAD_ADD("quickload", primo, "pp", 0)
286
 
 
287
 
        MCFG_CASSETTE_ADD( CASSETTE_TAG, primo_cassette_interface )
288
 
 
289
 
        /* floppy from serial bus */
290
 
        /* for some reason machine/primo.c sets up the serial bus
291
 
    but no floppy drive has been apparently added... incomplete driver? */
292
 
        MCFG_CBM_IEC_ADD(cbm_iec_daisy)
293
 
 
294
 
        /* cartridge */
295
 
        MCFG_CARTSLOT_ADD("cart1")
296
 
        MCFG_CARTSLOT_EXTENSION_LIST("rom")
297
 
        MCFG_CARTSLOT_NOT_MANDATORY
298
 
        MCFG_CARTSLOT_ADD("cart2")
299
 
        MCFG_CARTSLOT_EXTENSION_LIST("rom")
300
 
        MCFG_CARTSLOT_NOT_MANDATORY
301
 
MACHINE_CONFIG_END
302
 
 
303
 
static MACHINE_CONFIG_DERIVED( primoa48, primoa32 )
304
 
        MCFG_CPU_MODIFY( "maincpu" )
305
 
        MCFG_CPU_PROGRAM_MAP( primo48_mem)
306
 
MACHINE_CONFIG_END
307
 
 
308
 
static MACHINE_CONFIG_DERIVED( primoa64, primoa32 )
309
 
        MCFG_CPU_MODIFY( "maincpu" )
310
 
        MCFG_CPU_PROGRAM_MAP( primo64_mem)
311
 
MACHINE_CONFIG_END
312
 
 
313
 
static MACHINE_CONFIG_DERIVED( primob32, primoa32 )
314
 
        MCFG_CPU_MODIFY( "maincpu" )
315
 
        MCFG_CPU_IO_MAP( primob_port)
316
 
 
317
 
        MCFG_MACHINE_RESET( primob )
318
 
MACHINE_CONFIG_END
319
 
 
320
 
static MACHINE_CONFIG_DERIVED( primob48, primoa48 )
321
 
        MCFG_CPU_MODIFY( "maincpu" )
322
 
        MCFG_CPU_IO_MAP( primob_port)
323
 
 
324
 
        MCFG_MACHINE_RESET( primob )
325
 
MACHINE_CONFIG_END
326
 
 
327
 
static MACHINE_CONFIG_DERIVED( primob64, primoa64 )
328
 
        MCFG_CPU_MODIFY( "maincpu" )
329
 
        MCFG_CPU_IO_MAP( primob_port)
330
 
 
331
 
        MCFG_MACHINE_RESET( primob )
332
 
MACHINE_CONFIG_END
333
 
 
334
 
static MACHINE_CONFIG_DERIVED( primoc64, primoa64 )
335
 
        MCFG_CPU_MODIFY( "maincpu" )
336
 
        MCFG_CPU_IO_MAP( primob_port)
337
 
 
338
 
        MCFG_MACHINE_RESET( primob )
339
 
MACHINE_CONFIG_END
340
 
 
341
 
ROM_START( primoa32 )
342
 
        ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
343
 
        ROM_LOAD( "a32_1.rom", 0x10000, 0x1000, CRC(4e91c1a4) SHA1(bf6e41b6b36a2556a50065e9acfd8cd57968f039) )
344
 
        ROM_LOAD( "a32_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) )
345
 
        ROM_LOAD( "a32_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) )
346
 
        ROM_LOAD( "a32_4.rom", 0x13000, 0x1000, CRC(70f84bc8) SHA1(9ae1c06531edf20c14ba47e78c0747dd2a92612a) )
347
 
        ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
348
 
        ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
349
 
ROM_END
350
 
 
351
 
ROM_START( primoa48 )
352
 
        ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
353
 
        ROM_LOAD( "a48_1.rom", 0x10000, 0x1000, CRC(7de6ad6f) SHA1(f2fd6fac4f9bc57c646efe40281758bb7c3f56e1) )
354
 
        ROM_LOAD( "a48_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) )
355
 
        ROM_LOAD( "a48_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) )
356
 
        ROM_LOAD( "a48_4.rom", 0x13000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) )
357
 
        ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
358
 
        ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
359
 
ROM_END
360
 
 
361
 
ROM_START( primoa64 )
362
 
        ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
363
 
        ROM_SYSTEM_BIOS(0, "ver1", "ver 1")
364
 
        ROM_LOAD( "a64_1.rom", 0x10000, 0x1000, CRC(6a7a9b9b) SHA1(e9ce16f90d9a799a26a9cef09d9ee6a6d7749484) )
365
 
        ROM_LOAD( "a64_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) )
366
 
        ROM_LOAD( "a64_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) )
367
 
        ROM_LOAD( "a64_4.rom", 0x13000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) )
368
 
        ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
369
 
        ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
370
 
ROM_END
371
 
 
372
 
ROM_START( primob32 )
373
 
        ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
374
 
        ROM_LOAD( "b32.rom",   0x10000, 0x4000, CRC(f594d2bb) SHA1(b74961dba008a1a6f15a22ddbd1b89acd7e286c2) )
375
 
        ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
376
 
        ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
377
 
ROM_END
378
 
 
379
 
ROM_START( primob48 )
380
 
        ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
381
 
        ROM_LOAD( "b48.rom",   0x10000, 0x4000, CRC(df3d2a57) SHA1(ab9413aa9d7749d30a486da00bc8c6d178a2172c) )
382
 
        ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
383
 
        ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
384
 
ROM_END
385
 
 
386
 
ROM_START( primob64 )
387
 
        ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
388
 
        ROM_SYSTEM_BIOS(0, "standart", "Standart")
389
 
        ROMX_LOAD( "b64.rom",     0x10000, 0x4000, CRC(cea28188) SHA1(a77e42e97402e601b78ab3751eac1e85d0bbb4a0), ROM_BIOS(1) )
390
 
        ROM_SYSTEM_BIOS(1, "cdos", "CDOS")
391
 
        ROMX_LOAD( "b64cdos.rom", 0x10000, 0x4000, CRC(73305e4d) SHA1(c090c3430cdf19eed8363377b981e1c21a4ed169), ROM_BIOS(2) )
392
 
        ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
393
 
        ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
394
 
ROM_END
395
 
 
396
 
ROM_START( primoc64 )
397
 
        ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
398
 
        ROM_LOAD( "c64_1.rom", 0x10000, 0x1000, CRC(c22290ea) SHA1(af5c73f6d0f7a987c4f082a5cb69e3f016127d57) )
399
 
        ROM_LOAD( "c64_2.rom", 0x11000, 0x1000, CRC(0756b56e) SHA1(589dbdb7c43ca7ca29ed1e56e080adf8c069e407) )
400
 
        ROM_LOAD( "c64_3.rom", 0x12000, 0x1000, CRC(fc56e0af) SHA1(b547fd270d3413400bc800f5b7ea9153b7a59bff) )
401
 
        ROM_LOAD( "c64_4.rom", 0x13000, 0x1000, CRC(3770e3e6) SHA1(792cc71d8f89eb447f94aded5afc70d626a26030) )
402
 
        ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
403
 
        ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
404
 
ROM_END
405
 
 
406
 
/*     YEAR  NAME      PARENT    COMPAT MACHINE   INPUT  INIT     COMPANY  FULLNAME */
407
 
COMP ( 1984, primoa32, 0,        0,     primoa32, primo, primo32, "Microkey", "Primo A-32" , 0)
408
 
COMP ( 1984, primoa48, primoa32, 0,     primoa48, primo, primo48, "Microkey", "Primo A-48" , 0)
409
 
COMP ( 1984, primoa64, primoa32, 0,     primoa64, primo, primo64, "Microkey", "Primo A-64" , 0)
410
 
COMP ( 1984, primob32, primoa32, 0,     primob32, primo, primo32, "Microkey", "Primo B-32" , 0)
411
 
COMP ( 1984, primob48, primoa32, 0,     primob48, primo, primo48, "Microkey", "Primo B-48" , 0)
412
 
COMP ( 1984, primob64, primoa32, 0,     primob64, primo, primo64, "Microkey", "Primo B-64" , 0)
413
 
COMP ( 1984, primoc64, primoa32, 0,     primoc64, primo, primo64, "Microkey", "Primo C-64" , GAME_NOT_WORKING)