1
/*******************************************************************************
3
Primo driver by Krzysztof Strzecha
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.
13
2005.05.12 - Memory fixed for A-48 model what make it fully working.
14
Fixed address of second video memory area.
18
2. V.24 / tape control
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
33
U880D (DDR clone of Z80), 2.5 MHz
60
bit 6 - joystick register shift
61
bit 5 - V.24 (2) / tape control
66
bit 2 - V.24 (1) / tape control
67
bit 1 - cassette output
73
40h-ffh (B models only)
89
bit 2 - cassette input
91
bit 0 - keyboard input
92
40h-ffh (B models only)
103
NMI - 20ms (50HZ), can be disbled/enabled by I/O write
105
*******************************************************************************/
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"
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 )
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 )
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 )
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 )
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
147
static INPUT_PORTS_START( primo )
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))
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('$')
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(';')
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))
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 )
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" )
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 ) )
235
static const struct CassetteOptions primo_cassette_options = {
237
16, /* bits per sample */
238
22050 /* sample frequency */
241
static const cassette_interface primo_cassette_interface =
244
&primo_cassette_options,
245
(cassette_state)(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED),
250
static CBM_IEC_DAISY( cbm_iec_daisy )
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)
262
MCFG_MACHINE_RESET( primoa )
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 )
273
MCFG_PALETTE_LENGTH(2)
274
MCFG_PALETTE_INIT(black_and_white)
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)
283
/* snapshot/quickload */
284
MCFG_SNAPSHOT_ADD("snapshot", primo, "pss", 0)
285
MCFG_QUICKLOAD_ADD("quickload", primo, "pp", 0)
287
MCFG_CASSETTE_ADD( CASSETTE_TAG, primo_cassette_interface )
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)
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
303
static MACHINE_CONFIG_DERIVED( primoa48, primoa32 )
304
MCFG_CPU_MODIFY( "maincpu" )
305
MCFG_CPU_PROGRAM_MAP( primo48_mem)
308
static MACHINE_CONFIG_DERIVED( primoa64, primoa32 )
309
MCFG_CPU_MODIFY( "maincpu" )
310
MCFG_CPU_PROGRAM_MAP( primo64_mem)
313
static MACHINE_CONFIG_DERIVED( primob32, primoa32 )
314
MCFG_CPU_MODIFY( "maincpu" )
315
MCFG_CPU_IO_MAP( primob_port)
317
MCFG_MACHINE_RESET( primob )
320
static MACHINE_CONFIG_DERIVED( primob48, primoa48 )
321
MCFG_CPU_MODIFY( "maincpu" )
322
MCFG_CPU_IO_MAP( primob_port)
324
MCFG_MACHINE_RESET( primob )
327
static MACHINE_CONFIG_DERIVED( primob64, primoa64 )
328
MCFG_CPU_MODIFY( "maincpu" )
329
MCFG_CPU_IO_MAP( primob_port)
331
MCFG_MACHINE_RESET( primob )
334
static MACHINE_CONFIG_DERIVED( primoc64, primoa64 )
335
MCFG_CPU_MODIFY( "maincpu" )
336
MCFG_CPU_IO_MAP( primob_port)
338
MCFG_MACHINE_RESET( primob )
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)
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)
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)
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)
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)
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)
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)
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)