1
/**********************************************************************
3
Copyright (C) Antoine Mine' 2006
5
Thomson 8-bit micro-computers.
7
A 6809E-based French family of personal computers developed in the 80's.
8
Despite their rather high price and poor design , they were quite popular
9
in France, probably due to the government plan "Informatique pour tous"
10
(Computer Science for Everyone) to put a network of MO5 computers in every
11
school during 1984-1986. And maybe their very popular light-pen.
14
- t9000 Thomson T9000 (early TO7 prototype, oct 1980)
15
- to7 Thomson TO7 (nov 1982)
16
- to770 Thomson TO7/70 (scarcely enhanced TO7, 1984)
17
- mo5 Thomson MO5 (entry-game, TO7-incompatible, jun 1984)
18
- to9 Thomson TO9 (high-end TO7/70 successor, sep 1985)
19
- mo5e Thomson MO5E (export MO5 version, 1986)
20
- to8 Thomson TO8 (next generation of TO7/70, sep 1986)
21
- to9p Thomson TO9+ (improved TO9 with TO8 technology, sep 1986)
22
- mo6 Thomson MO6 (improved MO5 with TO8 technology, sep 1986)
23
- mo5nr Thomson MO5NR (network-enhanced MO6, 1986)
24
- to8d Thomson TO8D (TO8 with integrated floppy, dec 1987)
25
- pro128 Olivetti Prodest PC 128 (Italian MO6, built by Thomson, 1986)
27
We do not consider here the few 16-bit computers built by Thomson
28
(68000-based Micromega 32, 8088-based Micromega 16 or the TO16: Thomson's own
31
You may distinguish three families:
32
* TO7,TO7/70,TO8,TO8D (family computers)
33
* TO9,TO9+ (professional desktop look with separate keyboard and monitor)
34
* MO5,MO5E,MO5NR,MO6 (cheaper, less extensible family)
35
Computers in both TO families are compatible. Computers in the MO family are
36
compatible. However, the TO and MO families are incompatible
37
(different memory-mapping).
39
Note that the TO8, TO9+ and MO6 were produced at the same time, using very
40
similar technologies, but with different cost/feature trade-offs and
41
different compatibility (MO6 is MO5-compatible, TO9+ is TO9-compatible and
42
TO8 and TO9+ are TO7-compatible).
43
Also note that the MO5NR is actually based on MO6 design, not MO5
44
(although both MO5NR and MO6 are MO5-compatible)
46
Also of interest are the Platini and Hinault versions of the MO5
47
(plain MO5 inside, but with custom, signed box-case).
48
There were several versions of TO7/70 and MO5 with alternate keyboards.
50
Thomson stopped producing micro-computers in jan 1990.
52
**********************************************************************/
54
/* TODO (roughly in decreasing priority order):
57
- internal, keyboard-attached TO9 mouse port (untested)
58
- floppy: 2-sided or 4-sided .fd images
59
- printer post-processing => postscript
60
- RS232 serial port extensions: CC 90-232, RF 57-932
61
- modem, teltel extension: MD 90-120 / MD 90-333 (need controller ROM?)
63
- TV overlay (IN 57-001) (@)
64
- digitisation extension (DI 90-011) (@)
67
(@) means MESS is lacking support for this kind of device / feature anyway
71
#include "includes/thomson.h"
72
#include "machine/6821pia.h"
73
#include "machine/wd17xx.h"
74
#include "machine/ctronics.h"
75
#include "imagedev/flopdrv.h"
76
#include "formats/basicdsk.h"
77
#include "machine/ram.h"
78
#include "machine/serial.h"
81
/**************************** common *******************************/
84
static const char layout_thomson[] = "thomson";
86
#define KEY(pos,name,key) \
87
PORT_BIT ( 1<<(pos), IP_ACTIVE_LOW, IPT_KEYBOARD ) \
89
PORT_CODE ( KEYCODE_##key )
91
#define PAD(mask,player,name,port,dir,key) \
92
PORT_BIT ( mask, IP_ACTIVE_LOW, IPT_##port ) \
93
PORT_NAME ( "P" #player " " name ) \
94
PORT_CODE( KEYCODE_##key ) \
95
PORT_PLAYER ( player )
98
/* ------------- game port ------------- */
101
Two generations of game port extensions were developped
103
- CM 90-112 (model 1)
104
connect up to two 8-position 1-button game pads
106
- SX 90-018 (model 2)
107
connect either two 8-position 2-button game pads
108
or a 2-button mouse (not both at the same time!)
110
We emulate the SX 90-018 as it is fully compatible with the CM 90-112.
113
* all extensions are compatible with all Thomson computers.
114
* the SX 90-018 extension is integrated within the TO8(D)
115
* the TO9 has its own, different mouse port
116
* all extensions are based on a Motorola 6821 PIA
117
* all extensions include a 6-bit sound DAC
118
* most pre-TO8 software (including TO9) do not recognise the mouse nor the
119
second button of each pad
120
* the mouse cannot be used at the same time as the pads: they use the same
121
6821 input ports & physical port; we use a config switch to tell MESS
122
whether pads or a mouse is connected
123
* the mouse should not be used at the same time as the sound DAC: they use
124
the same 6821 ports, either as input or output; starting from the TO8,
125
there is a 'mute' signal to cut the DAC output and avoid producing an
126
audible buzz whenever the mouse is moved; unfortunately, mute is not
127
available on the TO7(/70), TO9 and MO5.
130
static INPUT_PORTS_START( thom_game_port )
132
/* joysticks, common to CM 90-112 & SX 90-018 */
133
PORT_START ( "game_port_directions" )
134
PAD ( 0x01, 1, UTF8_UP, JOYSTICK_UP, UP, UP)
135
PAD ( 0x02, 1, UTF8_DOWN, JOYSTICK_DOWN, DOWN, DOWN )
136
PAD ( 0x04, 1, UTF8_LEFT, JOYSTICK_LEFT, LEFT, LEFT )
137
PAD ( 0x08, 1, UTF8_RIGHT, JOYSTICK_RIGHT, RIGHT, RIGHT )
138
PAD ( 0x10, 2, UTF8_UP, JOYSTICK_UP, UP, 8_PAD )
139
PAD ( 0x20, 2, UTF8_DOWN, JOYSTICK_DOWN, DOWN, 2_PAD )
140
PAD ( 0x40, 2, UTF8_LEFT, JOYSTICK_LEFT, LEFT, 4_PAD )
141
PAD ( 0x80, 2, UTF8_RIGHT, JOYSTICK_RIGHT, RIGHT, 6_PAD )
143
PORT_START ( "game_port_buttons" )
144
PAD ( 0x40, 1, "Action A", BUTTON1, BUTTON1, LCONTROL )
145
PAD ( 0x80, 2, "Action A", BUTTON1, BUTTON1, RCONTROL )
147
/* joysticks, SX 90-018 specific */
148
PAD ( 0x04, 1, "Action B", BUTTON2, BUTTON2, LALT )
149
PAD ( 0x08, 2, "Action B", BUTTON2, BUTTON2, RALT )
150
PORT_BIT ( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
151
PORT_BIT ( 0x03, IP_ACTIVE_LOW, IPT_UNUSED ) /* ? */
153
/* mouse, SX 90-018 specific */
154
PORT_START ( "mouse_x" )
155
PORT_BIT ( 0xffff, 0x00, IPT_MOUSE_X )
156
PORT_NAME ( "Mouse X" )
157
PORT_SENSITIVITY ( 150 )
160
PORT_START ( "mouse_y" )
161
PORT_BIT ( 0xffff, 0x00, IPT_MOUSE_Y )
162
PORT_NAME ( "Mouse Y" )
163
PORT_SENSITIVITY ( 150 )
166
PORT_START ( "mouse_button" )
167
PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
168
PORT_NAME ( "Left Mouse Button" )
169
PORT_CODE( MOUSECODE_BUTTON1 )
170
PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
171
PORT_NAME ( "Right Mouse Button" )
176
/* ------------ lightpen ------------ */
178
static INPUT_PORTS_START( thom_lightpen )
180
PORT_START ( "lightpen_x" )
181
PORT_BIT ( 0xffff, THOM_TOTAL_WIDTH/2, IPT_LIGHTGUN_X )
182
PORT_NAME ( "Lightpen X" )
183
PORT_MINMAX( 0, THOM_TOTAL_WIDTH )
184
PORT_SENSITIVITY( 50 )
185
PORT_CROSSHAIR(X, 1.0, 0.0, 0)
187
PORT_START ( "lightpen_y" )
188
PORT_BIT ( 0xffff, THOM_TOTAL_HEIGHT/2, IPT_LIGHTGUN_Y )
189
PORT_NAME ( "Lightpen Y" )
190
PORT_MINMAX ( 0, THOM_TOTAL_HEIGHT )
191
PORT_SENSITIVITY( 50 )
192
PORT_CROSSHAIR(Y, 1.0, 0.0, 0)
194
PORT_START ( "lightpen_button" )
195
PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
196
PORT_NAME ( "Lightpen Button" )
197
PORT_CODE( MOUSECODE_BUTTON1 )
201
/* ------------ serial ------------ */
203
DECLARE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_CC90323, thom_serial_cc90323);
204
DEFINE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_CC90323, thom_serial_cc90323);
206
#define MCFG_THOM_SERIAL_CC90323_ADD(_tag) \
207
MCFG_DEVICE_ADD(_tag, THOM_SERIAL_CC90323, 0)
209
DECLARE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_RF57232, thom_serial_rf57232);
210
DEFINE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_RF57232, thom_serial_rf57232);
212
#define MCFG_THOM_SERIAL_RF57232_ADD(_tag) \
213
MCFG_DEVICE_ADD(_tag, THOM_SERIAL_RF57232, 0)
215
DECLARE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_MODEM, thom_serial_modem);
216
DEFINE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_MODEM, thom_serial_modem);
218
#define MCFG_THOM_SERIAL_MODEM_ADD(_tag) \
219
MCFG_DEVICE_ADD(_tag, THOM_SERIAL_MODEM, 0)
221
/************************** T9000 / TO7 *******************************
226
First computer by Thomson.
227
Note that the computer comes with only a minimal BIOS and requires an
228
external cartridge to be usable.
229
Most software are distributed on cassette and require the BASIC 1.0 cartridge
230
to be present (-cart basic.m7), as only it provides the necessary OS
231
capabilities (e.g., a cassette loader).
232
To use disks, you will need both a BASIC 1.0 cartridge and a BASIC DOS
236
- 1 MHz Motorola 6809E CPU
237
- 1 Motorola 6821 PIA (+3 for I/O, game, and modem extensions)
238
- 1 Motorola 6846 timer, I/O, ROM
242
+ 16 KB extended user RAM (EM 90-016) = 24 KB total user RAM emulated
243
+ homebrew 8 KB RAM extension (Theophile magazine 6, sept 1984)
245
- 6-bit x 8 K color RAM + 8-bit x 8 K point RAM, bank switched
246
- 2 to 8 KB ROM comes with the floppy drive / network controller
249
320x200 pixels with color constraints (2 colors per horizontal
250
8-pixel span), 8-color pixel palette,
251
50 Hz (tweaked SECAM)
254
- AZERTY keyboard, 58-keys, French with accents
255
- cartridge 16 KB (up to 64 KB using bank-switching),
256
the MESS cartridge device is named -cart
257
- cassette 900 bauds (frequency signals: 0=4.5 kHz, 1=6.3 kHz)
258
the MESS cassette device is named -cass
259
- 1-bit internal buzzer
260
- lightpen, with 8-pixel horizontal resolution, 1-pixel vertical
261
- SX 90-018 game & music extension
263
. two 8-position 2-button game pads
265
. based on a Motorola 6821 PIA
266
- CC 90-232 I/O extension:
267
. CENTRONICS (printer)
269
. based on a Motorola 6821 PIA
270
. NOTE: you cannot use the CENTRONICS and RS232 at the same time
271
- RF 57-932: RS232 extension, based on a SY 6551 ACIA (unemulated)
272
- MD 90-120: MODEM, TELETEL extension (unemulated)
273
. 1 Motorola 6850 ACIA
274
. 1 Motorola 6821 PIA
275
. 1 EFB 7513 MODEM FSK V13, full duplex
276
. PTT-, VELI7Y-, and V23-compatible MODEM (up to 1200 bauds)
277
. seems to come with an extra ROM
278
- 5"1/2 floppy drive extension
279
. CD 90-640 floppy controller, based on a Western Digital 2793
280
. DD 90-320 double-density double-sided 5"1/4 floppy
281
(2 drives considered as 4 simple-face drives: 0/1 for the first drive,
282
2/3 for the second drive, 1 and 3 for upper sides, 0 and 2 for lower
284
. floppies are 40 tracks/side, 16 sectors/track, 128 or 256 bytes/sector
285
= from 80 KB one-sided single-density, to 320 KB two-sided double-density
286
. MESS floppy devices are named -flop0 to -flop3
287
- alternate 5"1/2 floppy drive extension
288
. CD 90-015 floppy controller, based on a HD 46503 S
289
. UD 90-070 5"1/4 single-sided single density floppy drive
290
- alternate 3"1/2 floppy drive extension
291
. CD 90-351 floppy controller, based on a custom Thomson gate-array
292
. DD 90-352 3"1/2 floppy drives
293
- alternate QDD floppy drive extension
294
. CQ 90-028 floppy controller, based on a Motorola 6852 SSDA
295
. QD 90-028 quickdrive 2"8 (QDD), only one drive, signe side
296
- speech synthesis extension: based on a Philips / Signetics MEA 8000
297
(cannot be used with the MODEM)
298
- MIDIPAK MIDI extension, uses a EF 6850 ACIA
299
- NR 07-005: network extension, MC 6854 based, 2 KB ROM & 64 KB RAM
300
(build by the French Leanord company)
307
The hardware seems to be the exactly same. Only the BIOS is different.
308
It has some bug that were corrected later for the TO7.
309
Actually, the two computers are undistinguishable, except for the different
310
startup screen, and a couple BIOS addresses.
311
They can run the same software and accept the same devices and extensions.
314
**********************************************************************/
317
/* ------------ address maps ------------ */
319
static ADDRESS_MAP_START ( to7, AS_PROGRAM, 8 )
321
AM_RANGE ( 0x0000, 0x3fff ) AM_READ_BANK ( THOM_CART_BANK ) AM_WRITE(to7_cartridge_w ) /* 4 * 16 KB */
322
AM_RANGE ( 0x4000, 0x5fff ) AM_READ_BANK ( THOM_VRAM_BANK ) AM_WRITE(to7_vram_w )
323
AM_RANGE ( 0x6000, 0x7fff ) AM_RAMBANK ( THOM_BASE_BANK ) /* 1 * 8 KB */
324
AM_RANGE ( 0x8000, 0xbfff ) AM_NOP /* 16 KB (for extension) */
325
AM_RANGE ( 0xc000, 0xdfff ) AM_NOP /* 8 KB (for extension) */
326
AM_RANGE ( 0xe000, 0xe7bf ) AM_ROMBANK ( THOM_FLOP_BANK )
327
AM_RANGE ( 0xe7c0, 0xe7c7 ) AM_DEVREADWRITE("mc6846", mc6846_r, mc6846_w)
328
AM_RANGE ( 0xe7c8, 0xe7cb ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt )
329
AM_RANGE ( 0xe7cc, 0xe7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt )
330
AM_RANGE ( 0xe7d0, 0xe7df ) AM_READWRITE ( to7_floppy_r, to7_floppy_w )
331
AM_RANGE ( 0xe7e0, 0xe7e3 ) AM_DEVREADWRITE_MODERN( "pia_2", pia6821_device, read_alt, write_alt )
332
AM_RANGE ( 0xe7e8, 0xe7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
333
AM_RANGE ( 0xe7f2, 0xe7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
334
AM_RANGE ( 0xe7f8, 0xe7fb ) AM_DEVREADWRITE_MODERN( "pia_3", pia6821_device, read_alt, write_alt )
335
AM_RANGE ( 0xe7fe, 0xe7ff ) AM_READWRITE ( to7_modem_mea8000_r,
336
to7_modem_mea8000_w )
337
AM_RANGE ( 0xe800, 0xffff ) AM_ROM /* system bios */
339
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
340
/* 0x20000 - 0x247ff: 18 KB floppy / network ROM controllers */
342
/* ram_get_ptr(machine.device(RAM_TAG)) mapping:
343
0x0000 - 0x3fff: 16 KB video RAM (actually 8 K x 8 bits + 8 K x 6 bits)
344
0x4000 - 0x5fff: 8 KB base RAM
345
0x6000 - 0x9fff: 16 KB extended RAM
346
0xa000 - 0xbfff: 8 KB more extended RAM
352
/* ------------ ROMS ------------ */
354
/* external floppy controllers */
355
#define ROM_FLOPPY( base ) \
356
/* no controller */ \
357
ROM_FILL( base, 0x800, 0x39 ) \
358
/* CD 90-015 (5"1/4) */ \
359
ROM_LOAD ( "cd90-015.rom", base+0x800, 0x7c0, \
361
SHA1(31a6bb81baaeec5fc8de457c97264f9dfa92c18b) ) \
362
/* CD 90-640 (5"1/4) */ \
363
ROM_LOAD ( "cd90-640.rom", base+0x1000, 0x7c0, \
365
SHA1(5c72566c22d8160ef0c75959e1863a1309bbbe49) ) \
366
/* CD 90-351 (3"1/2) */ \
367
ROM_LOAD ( "cd-351-0.rom", base+0x1800, 0x7c0, \
369
SHA1(bab5395ed8bc7c06f9897897f836054e6546e8e8) ) \
370
ROM_LOAD ( "cd-351-1.rom", base+0x2000, 0x7c0, \
372
SHA1(dcf992c96e7556b2faee6bacd3f744e56998e6ea) ) \
373
ROM_LOAD ( "cd-351-2.rom", base+0x2800, 0x7c0, \
375
SHA1(179e10107d5be91e684069dee80f94847b83201f) ) \
376
ROM_LOAD ( "cd-351-3.rom", base+0x3000, 0x7c0, \
378
SHA1(7118636fb5c597c78c2fce17b02aed5e4ba38635) ) \
379
/* CQ 90-028 (2"8, aka QDD) */ \
380
ROM_LOAD ( "cq90-028.rom", base+0x3800, 0x7c0, \
382
SHA1(949c1f777c892da62c242215d79757d61e71e62b) )
384
/* external floppy / network controller: 9 banks */
385
#define ROM_FLOPPY5( base ) \
387
ROM_LOAD ( "nano5.rom", base+0x4000, 0x7c0, \
389
SHA1(b5b7cb6d12493d849330b6b5628efd1a83a4bbf5) )
391
#define ROM_FLOPPY7( base ) \
393
ROM_LOAD ( "nano7.rom", base+0x4000, 0x7c0, \
395
SHA1(973209f4baa5e81bf7885c0602949e064bac7862) )
399
ROM_REGION ( 0x24800, "maincpu", 0 )
400
ROM_LOAD ( "to7.rom", 0xe800, 0x1800,
402
SHA1(23a2f84b03c01d385cc1923c8ece95c43756297a) )
403
ROM_FILL ( 0x10000, 0x10000, 0x39 )
404
ROM_FLOPPY7 ( 0x20000 )
408
ROM_REGION ( 0x24800, "maincpu", 0 )
409
ROM_LOAD ( "t9000.rom", 0xe800, 0x1800,
411
SHA1(a5735db1ad4e529804fc46603f838d3f4ccaf5cf) )
412
ROM_FILL ( 0x10000, 0x10000, 0x39 )
413
ROM_FLOPPY7 ( 0x20000 )
417
/* ------------ inputs ------------ */
419
static INPUT_PORTS_START ( to7_config )
420
PORT_START ( "config" )
422
PORT_CONFNAME ( 0x01, 0x00, "Game Port" )
423
PORT_CONFSETTING ( 0x00, DEF_STR( Joystick ) )
424
PORT_CONFSETTING ( 0x01, "Mouse" )
428
static INPUT_PORTS_START ( to7_vconfig )
429
PORT_START ( "vconfig" )
431
PORT_CONFNAME ( 0x03, 0x00, "Border" )
432
PORT_CONFSETTING ( 0x00, "Normal (56x47)" )
433
PORT_CONFSETTING ( 0x01, "Small (16x16)" )
434
PORT_CONFSETTING ( 0x02, DEF_STR ( None ) )
436
PORT_CONFNAME ( 0x0c, 0x08, "Resolution" )
437
PORT_CONFSETTING ( 0x00, DEF_STR ( Low ) )
438
PORT_CONFSETTING ( 0x04, DEF_STR ( High ) )
439
PORT_CONFSETTING ( 0x08, "Auto" )
443
static INPUT_PORTS_START ( to7_mconfig )
444
PORT_START ( "mconfig" )
446
PORT_CONFNAME ( 0x01, 0x01, "E7FE-F port" )
447
PORT_CONFSETTING ( 0x00, "Modem (unemulated)" )
448
PORT_CONFSETTING ( 0x01, "Speech" )
452
static INPUT_PORTS_START ( to7_fconfig )
453
PORT_START ( "fconfig" )
455
PORT_CONFNAME ( 0x07, 0x03, "Floppy (reset)" )
456
PORT_CONFSETTING ( 0x00, DEF_STR ( None ) )
457
PORT_CONFSETTING ( 0x01, "CD 90-015 (5\"1/4 SD)" )
458
PORT_CONFSETTING ( 0x02, "CD 90-640 (5\"1/4 DD)" )
459
PORT_CONFSETTING ( 0x03, "CD 90-351 (3\"1/2)" )
460
PORT_CONFSETTING ( 0x04, "CQ 90-028 (2\"8 QDD)" )
461
PORT_CONFSETTING ( 0x05, "Network" )
463
PORT_CONFNAME ( 0xf8, 0x08, "Network ID" )
464
PORT_CONFSETTING ( 0x00, "0 (Master)" )
465
PORT_CONFSETTING ( 0x08, "1" )
466
PORT_CONFSETTING ( 0x10, "2" )
467
PORT_CONFSETTING ( 0x18, "3" )
468
PORT_CONFSETTING ( 0x20, "4" )
469
PORT_CONFSETTING ( 0x28, "5" )
470
PORT_CONFSETTING ( 0x30, "6" )
471
PORT_CONFSETTING ( 0x38, "7" )
472
PORT_CONFSETTING ( 0x40, "8" )
473
PORT_CONFSETTING ( 0x48, "9" )
474
PORT_CONFSETTING ( 0x50, "10" )
475
PORT_CONFSETTING ( 0x58, "11" )
476
PORT_CONFSETTING ( 0x60, "12" )
477
PORT_CONFSETTING ( 0x68, "13" )
478
PORT_CONFSETTING ( 0x70, "14" )
479
PORT_CONFSETTING ( 0x78, "15" )
480
PORT_CONFSETTING ( 0x80, "16" )
481
PORT_CONFSETTING ( 0x88, "17" )
482
PORT_CONFSETTING ( 0x90, "18" )
483
PORT_CONFSETTING ( 0x98, "19" )
484
PORT_CONFSETTING ( 0xa0, "20" )
485
PORT_CONFSETTING ( 0xa8, "21" )
486
PORT_CONFSETTING ( 0xb0, "22" )
487
PORT_CONFSETTING ( 0xb8, "23" )
488
PORT_CONFSETTING ( 0xc0, "24" )
489
PORT_CONFSETTING ( 0xc8, "25" )
490
PORT_CONFSETTING ( 0xd0, "26" )
491
PORT_CONFSETTING ( 0xd8, "27" )
492
PORT_CONFSETTING ( 0xe0, "28" )
493
PORT_CONFSETTING ( 0xe8, "29" )
494
PORT_CONFSETTING ( 0xf0, "30" )
495
PORT_CONFSETTING ( 0xf8, "31" )
500
static INPUT_PORTS_START ( to7_keyboard )
501
PORT_START ( "keyboard_0" )
502
KEY ( 0, "Shift", LSHIFT ) PORT_CODE ( KEYCODE_RSHIFT ) PORT_CHAR(UCHAR_SHIFT_1)
503
PORT_BIT ( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
504
PORT_START ( "keyboard_1" )
505
KEY ( 0, "W", W ) PORT_CHAR('W')
506
KEY ( 1, UTF8_UP, UP ) PORT_CHAR(UCHAR_MAMEKEY(UP))
507
KEY ( 2, "C \303\247", C ) PORT_CHAR('C')
508
KEY ( 3, "Clear", ESC ) PORT_CHAR(UCHAR_MAMEKEY(ESC))
509
KEY ( 4, "Enter", ENTER ) PORT_CHAR(13)
510
KEY ( 5, "Control", LCONTROL ) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
511
KEY ( 6, "Accent", END ) PORT_CHAR(UCHAR_MAMEKEY(END))
512
KEY ( 7, "Stop", TAB ) PORT_CHAR(27)
513
PORT_START ( "keyboard_2" )
514
KEY ( 0, "X", X ) PORT_CHAR('X')
515
KEY ( 1, UTF8_LEFT, LEFT ) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
516
KEY ( 2, "V", V ) PORT_CHAR('V')
517
KEY ( 3, "Q", Q ) PORT_CHAR('Q')
518
KEY ( 4, "* :", QUOTE ) PORT_CHAR('*') PORT_CHAR(':')
519
KEY ( 5, "A", A ) PORT_CHAR('A')
520
KEY ( 6, "+ ;", EQUALS ) PORT_CHAR('+') PORT_CHAR(';')
521
KEY ( 7, "1 !", 1 ) PORT_CHAR('1') PORT_CHAR('!')
522
PORT_START ( "keyboard_3" )
523
KEY ( 0, "Space Caps-Lock", SPACE ) PORT_CHAR(' ') PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
524
KEY ( 1, UTF8_DOWN, DOWN ) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
525
KEY ( 2, "B", B ) PORT_CHAR('B')
526
KEY ( 3, "S", S ) PORT_CHAR('S')
527
KEY ( 4, "/ ?", SLASH ) PORT_CHAR('/') PORT_CHAR('?')
528
KEY ( 5, "Z \305\223", Z) PORT_CHAR('Z')
529
KEY ( 6, "- =", MINUS ) PORT_CHAR('-') PORT_CHAR('=')
530
KEY ( 7, "2 \" \302\250", 2 ) PORT_CHAR('2') PORT_CHAR('"')
531
PORT_START ( "keyboard_4" )
532
KEY ( 0, "@ \342\206\221", TILDE ) PORT_CHAR('@')
533
KEY ( 1, UTF8_RIGHT, RIGHT ) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
534
KEY ( 2, "M", M ) PORT_CHAR('M')
535
KEY ( 3, "D", D ) PORT_CHAR('D')
536
KEY ( 4, "P", P ) PORT_CHAR('P')
537
KEY ( 5, "E", E ) PORT_CHAR('E')
538
KEY ( 6, "0 \140", 0 ) PORT_CHAR('0') PORT_CHAR( 0140 )
539
KEY ( 7, "3 #", 3 ) PORT_CHAR('3') PORT_CHAR('#')
540
PORT_START ( "keyboard_5" )
541
KEY ( 0, ". >", STOP ) PORT_CHAR('.') PORT_CHAR('>')
542
KEY ( 1, "Home", HOME ) PORT_CHAR(UCHAR_MAMEKEY(HOME))
543
KEY ( 2, "L", L ) PORT_CHAR('L')
544
KEY ( 3, "F", F ) PORT_CHAR('F')
545
KEY ( 4, "O", O ) PORT_CHAR('O')
546
KEY ( 5, "R", R ) PORT_CHAR('R')
547
KEY ( 6, "9 )", 9 ) PORT_CHAR('9') PORT_CHAR(')')
548
KEY ( 7, "4 $", 4 ) PORT_CHAR('4') PORT_CHAR('$')
549
PORT_START ( "keyboard_6" )
550
KEY ( 0, ", <", COMMA ) PORT_CHAR(',') PORT_CHAR('<')
551
KEY ( 1, "Insert", INSERT ) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
552
KEY ( 2, "K", K ) PORT_CHAR('K')
553
KEY ( 3, "G", G ) PORT_CHAR('G')
554
KEY ( 4, "I", I ) PORT_CHAR('I')
555
KEY ( 5, "T", T ) PORT_CHAR('T')
556
KEY ( 6, "8 (", 8 ) PORT_CHAR('8') PORT_CHAR('(')
557
KEY ( 7, "5 %", 5 ) PORT_CHAR('5') PORT_CHAR('%')
558
PORT_START ( "keyboard_7" )
559
KEY ( 0, "N", N ) PORT_CHAR('N')
560
KEY ( 1, "Delete", DEL ) PORT_CHAR(8)
561
KEY ( 2, "J \305\222", J ) PORT_CHAR('J')
562
KEY ( 3, "H \302\250", H ) PORT_CHAR('H')
563
KEY ( 4, "U", U ) PORT_CHAR('U')
564
KEY ( 5, "Y", Y ) PORT_CHAR('Y')
565
KEY ( 6, "7 ' \302\264", 7 ) PORT_CHAR('7') PORT_CHAR('\'')
566
KEY ( 7, "6 &", 6 ) PORT_CHAR('6') PORT_CHAR('&')
569
PORT_START ( "keyboard_8" )
570
PORT_START ( "keyboard_9" )
574
static INPUT_PORTS_START ( to7 )
575
PORT_INCLUDE ( thom_lightpen )
576
PORT_INCLUDE ( thom_game_port )
577
PORT_INCLUDE ( to7_keyboard )
578
PORT_INCLUDE ( to7_config )
579
PORT_INCLUDE ( to7_fconfig )
580
PORT_INCLUDE ( to7_vconfig )
581
PORT_INCLUDE ( to7_mconfig )
584
static INPUT_PORTS_START ( t9000 )
588
static const floppy_interface thomson_floppy_interface =
590
DEVCB_LINE(thomson_index_callback),
595
FLOPPY_STANDARD_5_25_DSHD,
596
FLOPPY_OPTIONS_NAME(thomson),
602
/********************* devices ************************/
603
const cassette_interface to7_cassette_interface =
605
to7_cassette_formats,
607
(cassette_state)(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED),
612
const cassette_interface mo5_cassette_interface =
614
mo5_cassette_formats,
616
(cassette_state)(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED),
621
/* ------------ driver ------------ */
623
static MACHINE_CONFIG_START( to7, driver_device )
625
MCFG_MACHINE_START ( to7 )
626
MCFG_MACHINE_RESET ( to7 )
629
MCFG_CPU_ADD ( "maincpu", M6809, 1000000 )
630
MCFG_CPU_PROGRAM_MAP ( to7)
633
MCFG_SCREEN_ADD("screen", RASTER)
634
MCFG_SCREEN_REFRESH_RATE ( /*50*/ 1./0.019968 )
635
MCFG_SCREEN_FORMAT( BITMAP_FORMAT_INDEXED16 )
636
MCFG_SCREEN_SIZE ( THOM_TOTAL_WIDTH * 2, THOM_TOTAL_HEIGHT )
637
MCFG_SCREEN_VISIBLE_AREA ( 0, THOM_TOTAL_WIDTH * 2 - 1,
638
0, THOM_TOTAL_HEIGHT - 1 )
639
MCFG_SCREEN_UPDATE ( thom )
640
MCFG_SCREEN_EOF ( thom )
642
MCFG_PALETTE_LENGTH ( 4097 ) /* 12-bit color + transparency */
643
MCFG_PALETTE_INIT ( thom )
644
MCFG_VIDEO_START ( thom )
645
MCFG_DEFAULT_LAYOUT( layout_thomson )
648
MCFG_SPEAKER_STANDARD_MONO("mono")
649
MCFG_SOUND_ADD ( "buzzer", DAC, 0 )
650
MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.) /* 1-bit buzzer */
651
MCFG_SOUND_ADD ( "dac", DAC, 0 )
652
MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.) /* 6-bit game extention DAC */
653
MCFG_SOUND_ADD ( "speech", DAC, 0 )
654
MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.) /* speech synthesis */
657
MCFG_CENTRONICS_ADD("centronics", to7_centronics_config)
660
MCFG_CASSETTE_ADD( CASSETTE_TAG, to7_cassette_interface )
663
MCFG_MC6846_ADD( "mc6846", to7_timer )
665
/* speech synthesis */
666
MCFG_MEA8000_ADD( "mea8000", to7_speech )
669
MCFG_MC6843_ADD( "mc6843", to7_6843_itf )
670
MCFG_WD2793_ADD( "wd2793", default_wd17xx_interface )
671
MCFG_FLOPPY_4_DRIVES_ADD(thomson_floppy_interface)
674
MCFG_MC6854_ADD( "mc6854", to7_network_iface )
677
MCFG_PIA6821_ADD( THOM_PIA_SYS, to7_pia6821_sys )
678
MCFG_PIA6821_ADD( THOM_PIA_IO, to7_pia6821_io )
679
MCFG_PIA6821_ADD( THOM_PIA_GAME, to7_pia6821_game )
680
MCFG_PIA6821_ADD( THOM_PIA_MODEM, to7_pia6821_modem )
683
MCFG_ACIA6551_ADD("acia")
686
MCFG_ACIA6850_ADD( "acia6850", to7_modem )
689
MCFG_CARTSLOT_ADD("cart")
690
MCFG_CARTSLOT_EXTENSION_LIST("m7,rom")
691
MCFG_CARTSLOT_NOT_MANDATORY
692
MCFG_CARTSLOT_LOAD(to7_cartridge)
695
MCFG_RAM_ADD(RAM_TAG)
696
MCFG_RAM_DEFAULT_SIZE("40K")
697
MCFG_RAM_EXTRA_OPTIONS("24K,48K")
699
MCFG_THOM_SERIAL_CC90323_ADD("cc90232")
700
MCFG_THOM_SERIAL_RF57232_ADD("rf57932")
701
MCFG_THOM_SERIAL_MODEM_ADD("modem")
704
static MACHINE_CONFIG_DERIVED( t9000, to7 )
708
COMP ( 1982, to7, 0, 0, to7, to7, 0, "Thomson", "TO7", 0 )
710
COMP ( 1980, t9000, to7, 0, t9000, t9000, 0, "Thomson", "T9000", 0 )
713
/***************************** TO7/70 *********************************
719
The TO7/70 supports virtually all TO7 software and most TO7 devices and
720
extensions (floppy, game, communucation, etc.).
721
As the TO7, it is only usable with a cartridge, and most software require
722
the BASIC 1.0 cartridge to be present.
723
Though, you may also use the more advanced BASIC 128 (-cart basic128.m7):
724
it allows BASIC programs to access all the memory and the video capabilities,
725
includes its own DOS (no need for a boot disk), but may not be compatible
728
It has the following modifications:
731
- custom logics for video, lightpen, address map has been replaced with an
732
integrated Gate-Array (Motorola MC 1300 ALS)
735
- 48 KB user base RAM (16 KB unswitchable + 2 switchable banks of 16 KB)
736
+ 64 KB user extended RAM (EM 97-064, as 4 extra 16 KB banks)
737
= 112 KB total user RAM emulated
738
- now 8-bit x 8 K color RAM (instead of 6-bit x 8 K)
741
- 16-color fixed palette instead of 8-color (but same constraints)
742
- IN 57-001: TV overlay extension, not implemented
743
(black becomes transparent and shows the TV image)
746
- lightpen management has changed, it now has 1-pixel horizontal resolution
747
- keyboard management has changed (but the keys are the same)
753
TO7/70 with an alternate ROM.
754
Together with a special (64 KB) BASIC 128 cartridge (-cart basic128a.m7),
755
it allows typing in arabic.
756
Use Ctrl+W to switch to arabic, and Ctrl+F to switch back to latin.
757
In latin mode, Ctrl+U / Ctrl+X to start / stop typing in-line arabic.
758
In arabic mode, Ctrl+E / Ctrl+X to start / stop typing in-line latin.
760
**********************************************************************/
762
static ADDRESS_MAP_START ( to770, AS_PROGRAM, 8 )
764
AM_RANGE ( 0x0000, 0x3fff ) AM_READ_BANK ( THOM_CART_BANK) AM_WRITE( to7_cartridge_w ) /* 4 * 16 KB */
765
AM_RANGE ( 0x4000, 0x5fff ) AM_READ_BANK ( THOM_VRAM_BANK) AM_WRITE( to770_vram_w )
766
AM_RANGE ( 0x6000, 0x9fff ) AM_RAMBANK ( THOM_BASE_BANK ) /* 16 KB */
767
AM_RANGE ( 0xa000, 0xdfff ) AM_RAMBANK ( THOM_RAM_BANK ) /* 6 * 16 KB */
768
AM_RANGE ( 0xe000, 0xe7bf ) AM_ROMBANK ( THOM_FLOP_BANK )
769
AM_RANGE ( 0xe7c0, 0xe7c7 ) AM_DEVREADWRITE("mc6846", mc6846_r, mc6846_w)
770
AM_RANGE ( 0xe7c8, 0xe7cb ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt )
771
AM_RANGE ( 0xe7cc, 0xe7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt )
772
AM_RANGE ( 0xe7d0, 0xe7df ) AM_READWRITE ( to7_floppy_r, to7_floppy_w )
773
AM_RANGE ( 0xe7e0, 0xe7e3 ) AM_DEVREADWRITE_MODERN( "pia_2", pia6821_device, read_alt, write_alt )
774
AM_RANGE ( 0xe7e4, 0xe7e7 ) AM_READWRITE ( to770_gatearray_r,
776
AM_RANGE ( 0xe7e8, 0xe7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
777
AM_RANGE ( 0xe7f2, 0xe7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
778
AM_RANGE ( 0xe7f8, 0xe7fb ) AM_DEVREADWRITE_MODERN( "pia_3", pia6821_device, read_alt, write_alt )
779
AM_RANGE ( 0xe7fe, 0xe7ff ) AM_READWRITE ( to7_modem_mea8000_r,
780
to7_modem_mea8000_w )
781
AM_RANGE ( 0xe800, 0xffff ) AM_ROM /* system bios */
783
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
784
/* 0x20000 - 0x247ff: 18 KB floppy / network ROM controllers */
786
/* ram_get_ptr(machine.device(RAM_TAG)) mapping:
787
0x00000 - 0x03fff: 16 KB video RAM
788
0x04000 - 0x07fff: 16 KB unbanked base RAM
789
0x08000 - 0x1ffff: 6 * 16 KB banked extended RAM
796
/* ------------ ROMS ------------ */
799
ROM_REGION ( 0x24800, "maincpu", 0 )
800
ROM_LOAD ( "to770.rom", 0xe800, 0x1800, /* BIOS */
802
SHA1(cd34474c0bcc758f6d71c90fbd40cef379d61374) )
803
ROM_FLOPPY7 ( 0x20000 )
804
ROM_FILL ( 0x10000, 0x10000, 0x39 )
808
ROM_REGION ( 0x24800, "maincpu", 0 )
809
ROM_LOAD ( "to770a.rom", 0xe800, 0x1800,
811
SHA1(f4575b537dfdb46ff2a0e7cbe8dfe4ba63161b8e) )
812
ROM_FLOPPY7 ( 0x20000 )
813
ROM_FILL ( 0x10000, 0x10000, 0x39 )
817
/* ------------ inputs ------------ */
819
static INPUT_PORTS_START ( to770 )
822
PORT_MODIFY ( "keyboard_1" )
823
KEY ( 2, "C \302\250 \303\247", C ) PORT_CHAR('C')
824
PORT_MODIFY ( "keyboard_4" )
825
KEY ( 6, "0 \140 \303\240", 0 ) PORT_CHAR('0') PORT_CHAR( 0140 )
826
PORT_MODIFY ( "keyboard_5" )
827
KEY ( 6, "9 ) \303\247", 9 ) PORT_CHAR('9') PORT_CHAR(')')
828
PORT_MODIFY ( "keyboard_6" )
829
KEY ( 6, "8 ( \303\271", 8 ) PORT_CHAR('8') PORT_CHAR('(')
830
PORT_MODIFY ( "keyboard_7" )
831
KEY ( 6, "7 ' \303\250 \302\264", 7 ) PORT_CHAR('7') PORT_CHAR('\'')
832
KEY ( 7, "6 & \303\251", 6 ) PORT_CHAR('6') PORT_CHAR('&')
836
/* arabic version (QWERTY keyboard) */
837
static INPUT_PORTS_START ( to770a )
838
PORT_INCLUDE ( to770 )
840
PORT_MODIFY ( "keyboard_1" )
841
KEY ( 0, "Z", Z ) PORT_CHAR('Z')
842
PORT_MODIFY ( "keyboard_2" )
843
KEY ( 3, "A", A ) PORT_CHAR('A')
844
KEY ( 4, "/ ?", QUOTE ) PORT_CHAR('/') PORT_CHAR('?')
845
KEY ( 5, "Q", Q ) PORT_CHAR('Q')
846
PORT_MODIFY ( "keyboard_3" )
847
KEY ( 4, "* :", SLASH ) PORT_CHAR('*') PORT_CHAR(':')
848
KEY ( 5, "W", W) PORT_CHAR('W')
849
PORT_MODIFY ( "keyboard_4" )
850
KEY ( 0, ". >", STOP ) PORT_CHAR('.') PORT_CHAR('>')
851
KEY ( 2, "@ \342\206\221", TILDE ) PORT_CHAR('@') PORT_CHAR('^')
852
KEY ( 6, "0 \302\243 \302\260 \140", 0 ) PORT_CHAR('0') PORT_CHAR( 0140 )
853
PORT_MODIFY ( "keyboard_5" )
854
KEY ( 0, ", <", COMMA ) PORT_CHAR(',') PORT_CHAR('<')
855
KEY ( 6, "9 ) \303\261", 9 ) PORT_CHAR('9') PORT_CHAR(')')
856
PORT_MODIFY ( "keyboard_6" )
857
KEY ( 0, "M", M ) PORT_CHAR('M')
858
KEY ( 6, "8 ( \303\274", 8 ) PORT_CHAR('8') PORT_CHAR('(')
859
PORT_MODIFY ( "keyboard_7" )
860
KEY ( 6, "7 ' \303\266 \302\264", 7 ) PORT_CHAR('7') PORT_CHAR('\'')
861
KEY ( 7, "6 & \303\244", 6 ) PORT_CHAR('6') PORT_CHAR('&')
866
/* ------------ driver ------------ */
868
static MACHINE_CONFIG_DERIVED( to770, to7 )
869
MCFG_MACHINE_START ( to770 )
870
MCFG_MACHINE_RESET ( to770 )
872
MCFG_CPU_MODIFY( "maincpu" )
873
MCFG_CPU_PROGRAM_MAP ( to770)
875
MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to770_pia6821_sys )
877
MCFG_MC6846_MODIFY( "mc6846", to770_timer )
880
MCFG_RAM_MODIFY(RAM_TAG)
881
MCFG_RAM_DEFAULT_SIZE("128K")
882
MCFG_RAM_EXTRA_OPTIONS("64K")
885
static MACHINE_CONFIG_DERIVED( to770a, to770 )
888
COMP ( 1984, to770, 0, 0, to770, to770, 0, "Thomson", "TO7/70", 0 )
890
COMP ( 1984, to770a, to770, 0, to770a, to770a, 0, "Thomson", "TO7/70 (Arabic)", 0 )
893
/************************* MO5 / MO5E *********************************
898
The MO5 is Thomson's attempt to provide a less costly micro-computer, using
899
the same technology as the TO7/70.
900
It has less memory and is less expandable. The MC6846 timer has disapeared.
901
The BIOS has been throughly rewritten and uses a more compact call scheme.
902
This, and the fact that the address map has changed, makes the MO5 completely
903
TO7 software incompatible (except for pure BASIC programs).
904
Moreover, the MO5 has incompatible cassette and cartridge formats.
905
Unlike the TO7, the BASIC 1.0 is integrated and the MO5 can be used "as-is".
908
- 1 MHz Motorola 6809E CPU
909
- 1 Motorola 6821 PIA (+3 for I/O, game, and modem extensions)
910
- Motorola 1300 ALS Gate-Array
913
- 32 KB base user RAM
914
- 64 KB extended user RAM (4 x 16 KB banks) with the network extension
915
(no available to BASIC programs)
916
- 16 KB combined BASIC and BIOS ROM
917
- 8 KB color RAM + 8 KB point RAM, bank switched
918
- 2 to 8 KB floppy ROM comes with the floppy drive / network extension
921
- as the TO7/70 but with different color encoding,
922
320x200 pixels with color constraints, 16-color fixed palette
923
- IN 57-001: TV overlay extension (not implemented)
926
- AZERTY keyboard, 58-keys, slightlty different from the TO7
927
. the right SHIFT key has been replaced with a BASIC key
929
- the famous lightpen is optional
930
- cassette 1200 bauds (frequency signals: 0=4.5kHz, 1=6.3kHz),
932
- optional cartridge, up to 64 KB, incompatible with TO7,
933
masks the integrated BASIC ROM
934
- game & music, I/O, floppy, network extensions: identical to TO7
935
- speech synthesis extension: identical to TO7
936
- MIDIPAK MIDI extension: identical to TO7
941
This is a special MO5 version for the export market (mainly Germany).
942
Although coming in a different (nicer) case, it is internally similar to
943
the MO5 and is fully compatible.
945
- much better keyboard; some are QWERTY instead of AZERTY (we emulate QWERTY)
946
- a different BIOS and integrated BASIC
947
- the game extension is integrated
950
**********************************************************************/
952
static ADDRESS_MAP_START ( mo5, AS_PROGRAM, 8 )
954
AM_RANGE ( 0x0000, 0x1fff ) AM_READ_BANK ( THOM_VRAM_BANK ) AM_WRITE( to770_vram_w )
955
AM_RANGE ( 0x2000, 0x9fff ) AM_RAMBANK ( THOM_BASE_BANK )
956
AM_RANGE ( 0xa000, 0xa7bf ) AM_ROMBANK ( THOM_FLOP_BANK )
957
AM_RANGE ( 0xa7c0, 0xa7c3 ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt )
958
AM_RANGE ( 0xa7cb, 0xa7cb ) AM_WRITE ( mo5_ext_w )
959
AM_RANGE ( 0xa7cc, 0xa7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt )
960
AM_RANGE ( 0xa7d0, 0xa7df ) AM_READWRITE ( to7_floppy_r, to7_floppy_w )
961
AM_RANGE ( 0xa7e0, 0xa7e3 ) AM_DEVREADWRITE_MODERN( "pia_2", pia6821_device, read_alt, write_alt )
962
AM_RANGE ( 0xa7e4, 0xa7e7 ) AM_READWRITE ( mo5_gatearray_r,
964
AM_RANGE ( 0xa7e8, 0xa7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
965
AM_RANGE ( 0xa7f2, 0xa7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
966
AM_RANGE ( 0xa7fe, 0xa7ff ) AM_DEVREADWRITE("mea8000", mea8000_r, mea8000_w)
967
AM_RANGE ( 0xb000, 0xefff ) AM_READ_BANK ( THOM_CART_BANK) AM_WRITE( mo5_cartridge_w )
968
AM_RANGE ( 0xf000, 0xffff ) AM_ROM /* system bios */
970
/* 0x10000 - 0x1ffff: 16 KB integrated BASIC / 64 KB external cartridge */
971
/* 0x20000 - 0x247ff: 18 KB floppy / network ROM controllers */
973
/* ram_get_ptr(machine.device(RAM_TAG)) mapping:
974
0x00000 - 0x03fff: 16 KB video RAM
975
0x04000 - 0x0bfff: 32 KB unbanked base RAM
976
0x0c000 - 0x1bfff: 4 * 16 KB bank extended RAM
983
/* ------------ ROMS ------------ */
986
ROM_REGION ( 0x24800, "maincpu", 0 )
987
ROM_LOAD ( "mo5.rom", 0xf000, 0x1000,
989
SHA1(36ce2d3df1866ec2fe368c1c28757e2f5401cf44) )
990
ROM_LOAD ( "basic5.rom", 0x11000, 0x3000,
992
SHA1(512dd40fb45bc2b51a24c84b3723a32bc8e80c06) )
993
ROM_FLOPPY5 ( 0x20000 )
997
ROM_REGION ( 0x24800, "maincpu", 0 )
998
ROM_LOAD ( "mo5e.rom", 0xf000, 0x1000,
1000
SHA1(f17a7a59baf2819ec80991b34b204795536a5e01) )
1001
ROM_LOAD ( "basic5e.rom", 0x11000, 0x3000,
1003
SHA1(b37e2b1afbfba368c19be87b3bf61dfe6ad8b0bb) )
1004
ROM_FLOPPY5 ( 0x20000 )
1008
/* ------------ inputs ------------ */
1010
static INPUT_PORTS_START ( mo5 )
1011
PORT_INCLUDE ( to770 )
1013
PORT_MODIFY ( "keyboard_0" )
1014
KEY ( 1, "BASIC", RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
1015
PORT_BIT ( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
1019
/* QWERTY version */
1020
static INPUT_PORTS_START ( mo5e )
1021
PORT_INCLUDE ( mo5 )
1023
PORT_MODIFY ( "keyboard_1" )
1024
KEY ( 0, "Z", Z ) PORT_CHAR('Z')
1025
PORT_MODIFY ( "keyboard_2" )
1026
KEY ( 3, "A", A ) PORT_CHAR('A')
1027
KEY ( 5, "Q", Q ) PORT_CHAR('Q')
1028
PORT_MODIFY ( "keyboard_3" )
1029
KEY ( 5, "W", W) PORT_CHAR('W')
1030
PORT_MODIFY ( "keyboard_4" )
1031
KEY ( 0, ". >", STOP ) PORT_CHAR('.') PORT_CHAR('>')
1032
KEY ( 2, "@ \342\206\221", TILDE ) PORT_CHAR('@') PORT_CHAR('^')
1033
KEY ( 6, "0 \302\243 \302\260 \140", 0 ) PORT_CHAR('0') PORT_CHAR( 0140 )
1034
PORT_MODIFY ( "keyboard_5" )
1035
KEY ( 0, ", <", COMMA ) PORT_CHAR(',') PORT_CHAR('<')
1036
KEY ( 6, "9 ) \303\261", 9 ) PORT_CHAR('9') PORT_CHAR(')')
1037
PORT_MODIFY ( "keyboard_6" )
1038
KEY ( 0, "M", M ) PORT_CHAR('M')
1039
KEY ( 6, "8 ( \303\274", 8 ) PORT_CHAR('8') PORT_CHAR('(')
1040
PORT_MODIFY ( "keyboard_7" )
1041
KEY ( 6, "7 ' \303\266 \302\264", 7 ) PORT_CHAR('7') PORT_CHAR('\'')
1042
KEY ( 7, "6 & \303\244", 6 ) PORT_CHAR('6') PORT_CHAR('&')
1046
/* ------------ driver ------------ */
1048
static MACHINE_CONFIG_DERIVED( mo5, to7 )
1049
MCFG_MACHINE_START ( mo5 )
1050
MCFG_MACHINE_RESET ( mo5 )
1052
MCFG_CPU_MODIFY( "maincpu" )
1053
MCFG_CPU_PROGRAM_MAP ( mo5)
1055
MCFG_CASSETTE_MODIFY( CASSETTE_TAG, mo5_cassette_interface )
1057
MCFG_DEVICE_REMOVE( "mc6846" )
1059
MCFG_PIA6821_MODIFY( THOM_PIA_SYS, mo5_pia6821_sys )
1061
MCFG_CARTSLOT_MODIFY("cart")
1062
MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
1063
MCFG_CARTSLOT_LOAD(mo5_cartridge)
1066
MCFG_RAM_MODIFY(RAM_TAG)
1067
MCFG_RAM_DEFAULT_SIZE("112K")
1070
static MACHINE_CONFIG_DERIVED( mo5e, mo5 )
1074
COMP ( 1984, mo5, 0, 0, mo5, mo5, 0, "Thomson", "MO5", 0 )
1076
COMP ( 1986, mo5e, mo5, 0, mo5e, mo5e, 0, "Thomson", "MO5E", 0 )
1079
/********************************* TO9 *******************************
1084
The TO9 is the successor of the TO7/70.
1085
It is a high-end product: it integrates 96 KB of base RAM, 128 KB of
1086
software in ROM, a floppy drive. It has improved graphics capabilities
1087
(several video modes, a palette of 4096 colors, thanks to the use of
1088
a dedicated video gate-array).
1089
The ROM contains the old BASIC 1.0 for compatibility and the newer BASIC 128.
1090
It has a more professional, desktop look, with a separate keyboard, and an
1092
It is also quite compatible with the TO7 and TO7/70 (but not the MO5).
1093
However, it also has many problems. The integrated BASIC 128 can only access
1094
128 KB of memory, which forces the 64 KB extension to be managed as a virtual
1095
disk. The early versions of the software ROM has many bugs. The integrated
1096
floppy drive is one-sided.
1097
It was replaced quickly with the improved TO9+.
1100
- 1 MHz Motorola 6809E CPU
1101
- 1 Motorola 6821 PIA (+2 for game, modem extensions)
1102
- 1 Motorola 6846 timer, PIA
1103
- 1 Motorola 6805 + 1 Motorola 6850 (keyboard & mouse control)
1104
- 1 Western Digital 2793 (disk controller)
1105
- 3 gate-arrays (address decoding, system, video)
1109
- 64 KB extension RAM (as virtual disk)
1110
- 6 KB BIOS ROM + 2 KB floppy BIOS
1111
- 128 KB software ROM (BASIC 1, BASIC 128, extended BIOS,
1112
DOS and configuration GUI, two software: "Paragraphe" and
1113
"Fiches et dossiers")
1118
o 320x200, 16 colors with constraints (TO7/70 compatible)
1119
o 320x200, 4 colors without constraints
1120
o 160x200, 16 colors without constraints
1122
o 320x200, 2 colors, two pages
1126
o 160x200, 2 colors, four pages overlaid
1127
- palette: 16 colors can be chosen among 4096
1130
- AZERTY keyboard, 81-keys, French with accents, keypad & function keys
1131
- cartridge, up to 64 KB, TO7 compatible
1132
- two-button mouse connected to the keyboard (not working yet)
1133
- lightpen, with 1-pixel vertical and horizontal resolution
1134
- 1-bit internal buzzer
1135
- cassette 900 bauds, TO7 compatible
1136
- integrated parallel CENTRONICS (printer emulated)
1137
- SX 90-018: game extension (identical to the TO7)
1138
- RF 57-932: RS232 extension (identical to the TO7)
1139
- MD 90-120: MODEM extension (identical to the TO7)
1140
- IEEE extension ? (unemulated)
1142
. integrated floppy controller, based on WD2793
1143
. integrated one-sided double-density 3''1/2
1144
. external two-sided double-density 3''1/2, 5''1/4 or QDD (extension)
1145
. floppies are TO7 and MO5 compatible
1146
- speech synthesis extension: identical to TO7
1147
- MIDIPAK MIDI extension: identical to TO7
1149
**********************************************************************/
1151
static ADDRESS_MAP_START ( to9, AS_PROGRAM, 8 )
1153
AM_RANGE ( 0x0000, 0x3fff ) AM_READ_BANK ( THOM_CART_BANK ) AM_WRITE( to9_cartridge_w )/* 4 * 16 KB */
1154
AM_RANGE ( 0x4000, 0x5fff ) AM_READ_BANK ( THOM_VRAM_BANK ) AM_WRITE( to770_vram_w )
1155
AM_RANGE ( 0x6000, 0x9fff ) AM_RAMBANK ( THOM_BASE_BANK ) /* 16 KB */
1156
AM_RANGE ( 0xa000, 0xdfff ) AM_RAMBANK ( THOM_RAM_BANK ) /* 10 * 16 KB */
1157
AM_RANGE ( 0xe000, 0xe7bf ) AM_ROMBANK ( THOM_FLOP_BANK )
1158
AM_RANGE ( 0xe7c0, 0xe7c7 ) AM_DEVREADWRITE("mc6846", mc6846_r, mc6846_w)
1159
AM_RANGE ( 0xe7c8, 0xe7cb ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt)
1160
AM_RANGE ( 0xe7cc, 0xe7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt)
1161
AM_RANGE ( 0xe7d0, 0xe7d9 ) AM_READWRITE ( to9_floppy_r, to9_floppy_w )
1162
AM_RANGE ( 0xe7da, 0xe7dd ) AM_READWRITE ( to9_vreg_r, to9_vreg_w )
1163
AM_RANGE ( 0xe7de, 0xe7df ) AM_READWRITE ( to9_kbd_r, to9_kbd_w )
1164
AM_RANGE ( 0xe7e4, 0xe7e7 ) AM_READWRITE ( to9_gatearray_r,
1166
AM_RANGE ( 0xe7e8, 0xe7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
1167
/* AM_RANGE ( 0xe7f0, 0xe7f7 ) AM_READWRITE ( to9_ieee_r, to9_ieee_w ) */
1168
AM_RANGE ( 0xe7f2, 0xe7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
1169
AM_RANGE ( 0xe7f8, 0xe7fb ) AM_DEVREADWRITE_MODERN( "pia_3", pia6821_device, read_alt, write_alt)
1170
AM_RANGE ( 0xe7fe, 0xe7ff ) AM_READWRITE ( to7_modem_mea8000_r,
1171
to7_modem_mea8000_w )
1172
AM_RANGE ( 0xe800, 0xffff ) AM_ROM /* system bios */
1174
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
1175
/* 0x20000 - 0x3ffff: 128 KB internal software ROM */
1176
/* 0x40000 - 0x447ff: 18 KB external floppy / network ROM controllers */
1178
/* ram_get_ptr(machine.device(RAM_TAG)) mapping:
1179
0x00000 - 0x03fff: 16 KB video RAM
1180
0x04000 - 0x07fff: 16 KB unbanked base RAM
1181
0x08000 - 0x2ffff: 10 * 16 KB banked extended RAM
1188
/* ------------ ROMS ------------ */
1191
these bios seem heavily patched (probably to work with specific emulators
1192
that trap some bios calls)
1196
ROM_REGION ( 0x44800, "maincpu", 0 )
1197
ROM_LOAD ( "to9.rom", 0xe000, 0x2000, /* BIOS & floppy controller */
1199
SHA1(9e99e6ae0285950f007b19161de642a4031fe46e) )
1201
/* BASIC & software */
1202
ROM_LOAD ( "basic9-0.rom", 0x20000, 0x4000,
1204
SHA1(4b2a8b30cf437858ce978ba7b0dfa2bbd57eb38a) )
1205
ROM_LOAD ( "basic9-1.rom", 0x24000, 0x4000,
1207
SHA1(5e58a29c2d117fcdb1f5e7ca31dbfffa0f9218f2) )
1208
ROM_LOAD ( "basic9-2.rom", 0x28000, 0x4000,
1210
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1211
ROM_LOAD ( "basic9-3.rom", 0x2c000, 0x4000,
1213
SHA1(0e832670c185694d9abbcebcc3ad90e94eed585d) )
1214
ROM_LOAD ( "soft9-0a.rom", 0x30000, 0x4000,
1216
SHA1(f32fc39b95890c00571e9f3fbcc2d8e0596fc4a1) )
1217
ROM_LOAD ( "soft9-1a.rom", 0x34000, 0x4000,
1219
SHA1(b97e6b7389398e5706624973c11ee7ddba323ce1) )
1220
ROM_LOAD ( "soft9-0b.rom", 0x38000, 0x4000,
1222
SHA1(f3604e500329ec0489b05dbab05530322e9463c5) )
1223
ROM_LOAD ( "soft9-1b.rom", 0x3c000, 0x4000,
1225
SHA1(0d8e3f1ca347026e906c3d00a0371e8238c44a60) )
1227
ROM_FLOPPY7( 0x40000 )
1229
ROM_FILL( 0x10000, 0x10000, 0x39 )
1233
/* ------------ inputs ------------ */
1235
static INPUT_PORTS_START ( to9_keyboard )
1236
PORT_START ( "keyboard_0" )
1237
KEY ( 0, "F2 F7", F2 ) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F7))
1238
KEY ( 1, "_ 6", 6 ) PORT_CHAR('_') PORT_CHAR('6')
1239
KEY ( 2, "Y", Y ) PORT_CHAR('Y')
1240
KEY ( 3, "H \302\250", H ) PORT_CHAR('H')
1241
KEY ( 4, UTF8_UP, UP ) PORT_CHAR(UCHAR_MAMEKEY(UP))
1242
KEY ( 5, UTF8_RIGHT, RIGHT ) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
1243
KEY ( 6, "Home Clear", HOME ) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CHAR(UCHAR_MAMEKEY(ESC))
1244
KEY ( 7, "N", N ) PORT_CHAR('N')
1245
PORT_START ( "keyboard_1" )
1246
KEY ( 0, "F3 F8", F3 ) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F8))
1247
KEY ( 1, "( 5", 5 ) PORT_CHAR('(') PORT_CHAR('5')
1248
KEY ( 2, "T", T ) PORT_CHAR('T')
1249
KEY ( 3, "G", G ) PORT_CHAR('G')
1250
KEY ( 4, "= +", EQUALS ) PORT_CHAR('=') PORT_CHAR('+')
1251
KEY ( 5, UTF8_LEFT, LEFT ) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
1252
KEY ( 6, "Insert", INSERT ) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
1253
KEY ( 7, "B \302\264", B ) PORT_CHAR('B')
1254
PORT_START ( "keyboard_2" )
1255
KEY ( 0, "F4 F9", F4 ) PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_CHAR(UCHAR_MAMEKEY(F9))
1256
KEY ( 1, "' 4", 4 ) PORT_CHAR('\'') PORT_CHAR('4')
1257
KEY ( 2, "R", R ) PORT_CHAR('R')
1258
KEY ( 3, "F", F ) PORT_CHAR('F')
1259
KEY ( 4, "Accent", END ) PORT_CHAR(UCHAR_MAMEKEY(END))
1260
KEY ( 5, "Keypad 1", 1_PAD ) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
1261
KEY ( 6, "Delete Backspace", DEL ) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
1262
KEY ( 7, "V", V ) PORT_CHAR('V')
1263
PORT_START ( "keyboard_3" )
1264
KEY ( 0, "F5 F10", F5 ) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHAR(UCHAR_MAMEKEY(F10))
1265
KEY ( 1, "\" 3", 3 ) PORT_CHAR('"') PORT_CHAR('3')
1266
KEY ( 2, "E", E ) PORT_CHAR('E')
1267
KEY ( 3, "D", D ) PORT_CHAR('D')
1268
KEY ( 4, "Keypad 7", 7_PAD ) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
1269
KEY ( 5, "Keypad 4", 4_PAD ) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
1270
KEY ( 6, "Keypad 0", 0_PAD ) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
1271
KEY ( 7, "C \136", C ) PORT_CHAR('C')
1272
PORT_START ( "keyboard_4" )
1273
KEY ( 0, "F1 F6", F1 ) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F6))
1274
KEY ( 1, "\303\251 2", 2 ) PORT_CHAR( 0xe9 ) PORT_CHAR('2')
1275
KEY ( 2, "Z", Z ) PORT_CHAR('Z')
1276
KEY ( 3, "S", S ) PORT_CHAR('S')
1277
KEY ( 4, "Keypad 8", 8_PAD ) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
1278
KEY ( 5, "Keypad 2", 2_PAD ) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
1279
KEY ( 6, "Keypad .", DEL_PAD ) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
1280
KEY ( 7, "X", X ) PORT_CHAR('X')
1281
PORT_START ( "keyboard_5" )
1282
KEY ( 0, "# @", TILDE ) PORT_CHAR('#') PORT_CHAR('@')
1283
KEY ( 1, "* 1", 1 ) PORT_CHAR('*') PORT_CHAR('1')
1284
KEY ( 2, "A \140", A ) PORT_CHAR('A')
1285
KEY ( 3, "Q", Q ) PORT_CHAR('Q')
1286
KEY ( 4, "[ {", QUOTE ) PORT_CHAR('[') PORT_CHAR('{')
1287
KEY ( 5, "Keypad 5", 5_PAD ) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
1288
KEY ( 6, "Keypad 6", 6_PAD ) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
1289
KEY ( 7, "W", W ) PORT_CHAR('W')
1290
PORT_START ( "keyboard_6" )
1291
KEY ( 0, "Stop", TAB ) PORT_CHAR(27)
1292
KEY ( 1, "\303\250 7", 7 ) PORT_CHAR( 0xe8 ) PORT_CHAR('7')
1293
KEY ( 2, "U", U ) PORT_CHAR('U')
1294
KEY ( 3, "J", J ) PORT_CHAR('J')
1295
KEY ( 4, "Space", SPACE ) PORT_CHAR(' ')
1296
KEY ( 5, "Keypad 9", 9_PAD ) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
1297
KEY ( 6, "Keypad Enter", ENTER_PAD ) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
1298
KEY ( 7, ", ?", COMMA ) PORT_CHAR(',') PORT_CHAR('?')
1299
PORT_START ( "keyboard_7" )
1300
KEY ( 0, "Control", LCONTROL ) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
1301
KEY ( 1, "! 8", 8 ) PORT_CHAR('!') PORT_CHAR('8')
1302
KEY ( 2, "I", I ) PORT_CHAR('I')
1303
KEY ( 3, "K", K ) PORT_CHAR('K')
1304
KEY ( 4, "$ &", CLOSEBRACE ) PORT_CHAR('$') PORT_CHAR('&')
1305
KEY ( 5, UTF8_DOWN, DOWN ) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
1306
KEY ( 6, "] }", BACKSLASH ) PORT_CHAR(']') PORT_CHAR('}')
1307
KEY ( 7, "; .", STOP ) PORT_CHAR(';') PORT_CHAR('.')
1308
PORT_START ( "keyboard_8" )
1309
KEY ( 0, "Caps-Lock", CAPSLOCK ) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
1310
KEY ( 1, "\303\247 9", 9 ) PORT_CHAR( 0xe7 ) PORT_CHAR('9')
1311
KEY ( 2, "O", O ) PORT_CHAR('O')
1312
KEY ( 3, "L", L ) PORT_CHAR('L')
1313
KEY ( 4, "- \\", BACKSPACE ) PORT_CHAR('-') PORT_CHAR('\\')
1314
KEY ( 5, "\303\271 %", COLON ) PORT_CHAR( 0xf9 ) PORT_CHAR('%')
1315
KEY ( 6, "Enter", ENTER ) PORT_CHAR(13)
1316
KEY ( 7, ": /", SLASH ) PORT_CHAR(':') PORT_CHAR('/')
1317
PORT_START ( "keyboard_9" )
1318
KEY ( 0, "Shift", LSHIFT ) PORT_CODE ( KEYCODE_RSHIFT ) PORT_CHAR(UCHAR_SHIFT_1)
1319
KEY ( 1, "\303\240 0", 0 ) PORT_CHAR( 0xe0 ) PORT_CHAR('0')
1320
KEY ( 2, "P", P ) PORT_CHAR('P')
1321
KEY ( 3, "M", M ) PORT_CHAR('M')
1322
KEY ( 4, ") \302\260", MINUS ) PORT_CHAR(')') PORT_CHAR( 0xb0 )
1323
KEY ( 5, "\342\206\221 \302\250", OPENBRACE ) PORT_CHAR('^') PORT_CHAR( 0xa8 )
1324
KEY ( 6, "Keypad 3", 3_PAD ) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
1325
KEY ( 7, "> <", BACKSLASH2 ) PORT_CHAR('>') PORT_CHAR('<')
1328
static INPUT_PORTS_START ( to9_fconfig )
1329
PORT_START ( "fconfig" )
1331
PORT_CONFNAME ( 0x07, 0x00, "External floppy (reset)" )
1332
PORT_CONFSETTING ( 0x00, "No external" )
1333
PORT_CONFSETTING ( 0x01, "CD 90-015 (5\"1/4 SD)" )
1334
PORT_CONFSETTING ( 0x02, "CD 90-640 (5\"1/4 DD)" )
1335
PORT_CONFSETTING ( 0x03, "CD 90-351 (3\"1/2)" )
1336
PORT_CONFSETTING ( 0x04, "CQ 90-028 (2\"8 QDD)" )
1337
PORT_CONFSETTING ( 0x05, "Network" )
1339
PORT_CONFNAME ( 0xf8, 0x08, "Network ID" )
1340
PORT_CONFSETTING ( 0x00, "0 (Master)" )
1341
PORT_CONFSETTING ( 0x08, "1" )
1342
PORT_CONFSETTING ( 0x10, "2" )
1343
PORT_CONFSETTING ( 0x18, "3" )
1344
PORT_CONFSETTING ( 0x20, "4" )
1345
PORT_CONFSETTING ( 0x28, "5" )
1346
PORT_CONFSETTING ( 0x30, "6" )
1347
PORT_CONFSETTING ( 0x38, "7" )
1348
PORT_CONFSETTING ( 0x40, "8" )
1349
PORT_CONFSETTING ( 0x48, "9" )
1350
PORT_CONFSETTING ( 0x50, "10" )
1351
PORT_CONFSETTING ( 0x58, "11" )
1352
PORT_CONFSETTING ( 0x60, "12" )
1353
PORT_CONFSETTING ( 0x68, "13" )
1354
PORT_CONFSETTING ( 0x70, "14" )
1355
PORT_CONFSETTING ( 0x78, "15" )
1356
PORT_CONFSETTING ( 0x80, "16" )
1357
PORT_CONFSETTING ( 0x88, "17" )
1358
PORT_CONFSETTING ( 0x90, "18" )
1359
PORT_CONFSETTING ( 0x98, "19" )
1360
PORT_CONFSETTING ( 0xa0, "20" )
1361
PORT_CONFSETTING ( 0xa8, "21" )
1362
PORT_CONFSETTING ( 0xb0, "22" )
1363
PORT_CONFSETTING ( 0xb8, "23" )
1364
PORT_CONFSETTING ( 0xc0, "24" )
1365
PORT_CONFSETTING ( 0xc8, "25" )
1366
PORT_CONFSETTING ( 0xd0, "26" )
1367
PORT_CONFSETTING ( 0xd8, "27" )
1368
PORT_CONFSETTING ( 0xe0, "28" )
1369
PORT_CONFSETTING ( 0xe8, "29" )
1370
PORT_CONFSETTING ( 0xf0, "30" )
1371
PORT_CONFSETTING ( 0xf8, "31" )
1375
static INPUT_PORTS_START ( to9 )
1376
PORT_INCLUDE ( thom_lightpen )
1377
PORT_INCLUDE ( thom_game_port )
1378
PORT_INCLUDE ( to9_keyboard )
1379
PORT_INCLUDE ( to7_config )
1380
PORT_INCLUDE ( to9_fconfig )
1381
PORT_INCLUDE ( to7_vconfig )
1382
PORT_INCLUDE ( to7_mconfig )
1385
/* ------------ driver ------------ */
1387
static MACHINE_CONFIG_DERIVED( to9, to7 )
1388
MCFG_MACHINE_START ( to9 )
1389
MCFG_MACHINE_RESET ( to9 )
1391
MCFG_CPU_MODIFY( "maincpu" )
1392
MCFG_CPU_PROGRAM_MAP ( to9)
1394
MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to9_pia6821_sys )
1395
MCFG_DEVICE_REMOVE( THOM_PIA_IO )
1397
MCFG_DEVICE_REMOVE("centronics")
1398
MCFG_CENTRONICS_ADD("centronics", standard_centronics)
1400
MCFG_MC6846_MODIFY( "mc6846", to9_timer )
1403
MCFG_RAM_MODIFY(RAM_TAG)
1404
MCFG_RAM_DEFAULT_SIZE("192K")
1405
MCFG_RAM_EXTRA_OPTIONS("128K")
1409
COMP ( 1985, to9, 0, 0, to9, to9, 0, "Thomson", "TO9", GAME_IMPERFECT_COLORS )
1412
/******************************** TO8 ********************************
1417
The TO8 was meant to replace the TO7/70 as a home-computer.
1418
It includes and improves on the technology from the TO9 (improved video,
1419
256 KB of RAM fully managed by the new BASIC 512, more integrated gate-array).
1420
It has a more compact Amiga-like look, no separate keyboard, no integrated
1421
floppy drive (although the controller is integrated), no software in ROM,
1422
less extension slots. Also, the game & music extension is now integrated.
1423
It is quite compatible with the TO7 and TO7/70, and with the TO9 to some
1425
The TO8 was quite popular and became the de-facto gamming computer in the
1429
- 1 MHz Motorola 6809E CPU
1430
- 2 Motorola 6821 PIAs (system, game, +1 in modem extension)
1431
- 1 Motorola 6846 timer, PIA
1432
- 1 Motorola 6804 (keyboard)
1433
- 2 gate-arrays (system & video, floppy controller)
1437
+ 256 KB extended RAM (EM 88-256) = 512 KB total RAM emulated
1439
- 64 KB software ROM (BASIC 1, BASIC 512, extended BIOS)
1440
- unified memory view via improved bank switching
1443
improved wrt TO9: a 9-th video mode, 4 video pages (shared with main RAM)
1444
border color has its 4-th index bit inverted
1447
- same keyboard as T09: AZERTY 81-keys
1448
(but no 6850 controller, the 6804 is directly connected to the 6821 & 6846)
1449
- cartridge, up to 64 KB, TO7 compatible
1450
- two-button serial mouse (TO9-incompatible)
1451
- lightpen, with 1-pixel vertical and horizontal resolution
1452
- two 8-position 2-button game pads (SX 90-018 extension integrated)
1453
- 6-bit DAC sound (NOTE: 1-bit buzzer is gone)
1454
- cassette 900 bauds, TO7 compatible
1455
- integrated parallel CENTRONICS (printer emulated)
1456
- RF 57-932: RS232 extension (identical to the TO7)
1457
- MD 90-120: MODEM extension (identical to the TO7?)
1460
. integrated floppy controller, based on custom Thomson gate-array
1461
. no integrated drive
1462
. up to two external two-sided double-density 3"1/2, 5"1/4 or QDD drives
1463
. floppies are TO7 and MO5 compatible
1464
- speech synthesis extension: identical to TO7
1465
- MIDIPAK MIDI extension: identical to TO7
1470
The TO8D is simply a TO8 with an integrated 3"1/2 floppy drive.
1472
**********************************************************************/
1475
static ADDRESS_MAP_START ( to8, AS_PROGRAM, 8 )
1477
AM_RANGE ( 0x0000, 0x3fff ) AM_READ_BANK ( THOM_CART_BANK) AM_WRITE( to8_cartridge_w ) /* 4 * 16 KB */
1478
AM_RANGE ( 0x4000, 0x5fff ) AM_READ_BANK ( THOM_VRAM_BANK) AM_WRITE( to770_vram_w )
1479
AM_RANGE ( 0x6000, 0x7fff ) AM_READ_BANK ( TO8_SYS_LO) AM_WRITE( to8_sys_lo_w )
1480
AM_RANGE ( 0x8000, 0x9fff ) AM_READ_BANK ( TO8_SYS_HI) AM_WRITE( to8_sys_hi_w )
1481
AM_RANGE ( 0xa000, 0xbfff ) AM_READ_BANK ( TO8_DATA_LO) AM_WRITE( to8_data_lo_w )
1482
AM_RANGE ( 0xc000, 0xdfff ) AM_READ_BANK ( TO8_DATA_HI) AM_WRITE( to8_data_hi_w )
1483
AM_RANGE ( 0xe000, 0xe7bf ) AM_ROMBANK ( THOM_FLOP_BANK ) /* 2 * 2 KB */
1484
AM_RANGE ( 0xe7c0, 0xe7c7 ) AM_DEVREADWRITE("mc6846", mc6846_r, mc6846_w)
1485
AM_RANGE ( 0xe7c8, 0xe7cb ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt)
1486
AM_RANGE ( 0xe7cc, 0xe7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt)
1487
AM_RANGE ( 0xe7d0, 0xe7d9 ) AM_READWRITE ( to8_floppy_r, to8_floppy_w )
1488
AM_RANGE ( 0xe7da, 0xe7dd ) AM_READWRITE ( to8_vreg_r, to8_vreg_w )
1489
AM_RANGE ( 0xe7e4, 0xe7e7 ) AM_READWRITE ( to8_gatearray_r,
1491
AM_RANGE ( 0xe7e8, 0xe7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
1492
/* AM_RANGE ( 0xe7f0, 0xe7f7 ) AM_READWRITE ( to9_ieee_r, to9_ieee_w ) */
1493
AM_RANGE ( 0xe7f2, 0xe7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
1494
AM_RANGE ( 0xe7f8, 0xe7fb ) AM_DEVREADWRITE_MODERN( "pia_3", pia6821_device, read_alt, write_alt)
1495
AM_RANGE ( 0xe7fe, 0xe7ff ) AM_READWRITE ( to7_modem_mea8000_r,
1496
to7_modem_mea8000_w )
1497
AM_RANGE ( 0xe800, 0xffff ) AM_ROMBANK ( TO8_BIOS_BANK ) /* 2 * 6 KB */
1499
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
1500
/* 0x20000 - 0x2ffff: 64 KB internal software ROM */
1501
/* 0x30000 - 0x33fff: 16 KB BIOS ROM */
1502
/* 0x34000 - 0x387ff: 18 KB external floppy / network ROM controllers */
1504
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 512 KB flat (including video) */
1509
/* ------------ ROMS ------------ */
1512
ROM_REGION ( 0x38800, "maincpu", 0 )
1515
ROM_LOAD ( "to8-0.rom", 0x30000, 0x2000,
1517
SHA1(0a4952f0ca002d82ac83755e1f694d56399413b2) )
1518
ROM_LOAD ( "to8-1.rom", 0x32000, 0x2000,
1520
SHA1(a4a55a6e2c74bca15951158c5164970e922fc1c1) )
1523
ROM_LOAD ( "basic8-0.rom", 0x20000, 0x4000,
1525
SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
1526
ROM_LOAD ( "basic8-1.rom", 0x24000, 0x4000,
1528
SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
1529
ROM_LOAD ( "basic8-2.rom", 0x28000, 0x4000,
1531
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1532
ROM_LOAD ( "basic8-3.rom", 0x2c000, 0x4000,
1534
SHA1(3208e0d7d90241a327ed24e4921303f16e167bd5) )
1536
ROM_FLOPPY7( 0x34000 )
1538
ROM_FILL( 0x10000, 0x10000, 0x39 )
1542
ROM_REGION ( 0x38800, "maincpu", 0 )
1545
ROM_LOAD ( "to8d-0.rom", 0x30000, 0x2000,
1547
SHA1(6705100cd337fffb26ce999302b55fb71557b128) )
1548
ROM_LOAD ( "to8d-1.rom", 0x32000, 0x2000,
1550
SHA1(8521613ac00e04dd94b69e771aeaefbf4fe97bf7) )
1553
ROM_LOAD ( "basic8-0.rom", 0x20000, 0x4000,
1555
SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
1556
ROM_LOAD ( "basic8-1.rom", 0x24000, 0x4000,
1558
SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
1559
ROM_LOAD ( "basic8-2.rom", 0x28000, 0x4000,
1561
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1562
ROM_LOAD ( "basic8-3.rom", 0x2c000, 0x4000,
1564
SHA1(3208e0d7d90241a327ed24e4921303f16e167bd5) )
1566
ROM_FLOPPY7( 0x34000 )
1568
ROM_FILL( 0x10000, 0x10000, 0x39 )
1572
/* ------------ inputs ------------ */
1574
static INPUT_PORTS_START ( to8_config )
1575
PORT_START ( "config" )
1577
PORT_CONFNAME ( 0x01, 0x00, "Game Port" )
1578
PORT_CONFSETTING ( 0x00, DEF_STR( Joystick ) )
1579
PORT_CONFSETTING ( 0x01, "Mouse" )
1581
PORT_CONFNAME ( 0x02, 0x00, "Keyboard" )
1582
PORT_CONFSETTING ( 0x00, "Enabled" )
1583
PORT_CONFSETTING ( 0x02, "Disabled" )
1588
static INPUT_PORTS_START ( to8 )
1589
PORT_INCLUDE ( thom_lightpen )
1590
PORT_INCLUDE ( thom_game_port )
1591
PORT_INCLUDE ( to9_keyboard )
1592
PORT_INCLUDE ( to8_config )
1593
PORT_INCLUDE ( to9_fconfig )
1594
PORT_INCLUDE ( to7_vconfig )
1595
PORT_INCLUDE ( to7_mconfig )
1599
static INPUT_PORTS_START ( to8d )
1600
PORT_INCLUDE ( to8 )
1603
/* ------------ driver ------------ */
1605
static MACHINE_CONFIG_DERIVED( to8, to7 )
1606
MCFG_MACHINE_START ( to8 )
1607
MCFG_MACHINE_RESET ( to8 )
1609
MCFG_CPU_MODIFY( "maincpu" )
1610
MCFG_CPU_PROGRAM_MAP ( to8)
1612
MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to8_pia6821_sys )
1613
MCFG_DEVICE_REMOVE( THOM_PIA_IO )
1615
MCFG_DEVICE_REMOVE("centronics")
1616
MCFG_CENTRONICS_ADD("centronics", standard_centronics)
1618
MCFG_MC6846_MODIFY( "mc6846", to8_timer )
1621
MCFG_RAM_MODIFY(RAM_TAG)
1622
MCFG_RAM_DEFAULT_SIZE("512K")
1623
MCFG_RAM_EXTRA_OPTIONS("256K")
1626
static MACHINE_CONFIG_DERIVED( to8d, to8 )
1630
COMP ( 1986, to8, 0, 0, to8, to8, 0, "Thomson", "TO8", 0 )
1632
COMP ( 1987, to8d, to8, 0, to8d, to8d, 0, "Thomson", "TO8D", 0 )
1635
/******************************** TO9+ *******************************
1640
The TO9+ is the direct successor of the T09 as Thomson's high-end
1641
product: desktop look, 512 KB of RAM, integrated floppy drive and
1642
modem. Some software integrated in ROM on the TO9 are now supplied on
1644
Internally, the TO9+ is based more on TO8 technology than T09
1646
It has enhanced communication capabilities by integrating either the
1647
MODEM or the RS232 extension.
1648
It should be compatible with the TO9 and, to some extent, with the TO7, TO7/70
1650
It uses the same video gate-array and floppy controller.
1652
The differences with the TO8 are:
1655
- 1 Motorola 6805 + 1 Motorola 6850 (keyboard)
1656
- 3 Motorola 6821 PIAs (system, game, modem)
1659
- 512 KB RAM (not extendable)
1662
- same keyboard as T08/TO9 (AZERTY 81-keys) but different controller
1663
- RF 57-932: RS232 (identical to the TO7) sometimes integrated
1664
- MD 90-120: MODEM (identical to the TO7?) sometimes integrated
1666
- floppy: one two-sided double-density 3''1/2 floppy drive is integrated
1667
- RS 52-932 RS232 extension ?
1668
- digitisation extension
1670
**********************************************************************/
1672
static ADDRESS_MAP_START ( to9p, AS_PROGRAM, 8 )
1674
AM_RANGE ( 0x0000, 0x3fff ) AM_READ_BANK ( THOM_CART_BANK) AM_WRITE( to8_cartridge_w ) /* 4 * 16 KB */
1675
AM_RANGE ( 0x4000, 0x5fff ) AM_READ_BANK ( THOM_VRAM_BANK) AM_WRITE( to770_vram_w )
1676
AM_RANGE ( 0x6000, 0x7fff ) AM_READ_BANK ( TO8_SYS_LO) AM_WRITE( to8_sys_lo_w )
1677
AM_RANGE ( 0x8000, 0x9fff ) AM_READ_BANK ( TO8_SYS_HI) AM_WRITE( to8_sys_hi_w )
1678
AM_RANGE ( 0xa000, 0xbfff ) AM_READ_BANK ( TO8_DATA_LO) AM_WRITE( to8_data_lo_w )
1679
AM_RANGE ( 0xc000, 0xdfff ) AM_READ_BANK ( TO8_DATA_HI) AM_WRITE( to8_data_hi_w )
1680
AM_RANGE ( 0xe000, 0xe7bf ) AM_ROMBANK ( THOM_FLOP_BANK ) /* 2 * 2 KB */
1681
AM_RANGE ( 0xe7c0, 0xe7c7 ) AM_DEVREADWRITE("mc6846", mc6846_r, mc6846_w)
1682
AM_RANGE ( 0xe7c8, 0xe7cb ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt)
1683
AM_RANGE ( 0xe7cc, 0xe7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt)
1684
AM_RANGE ( 0xe7d0, 0xe7d9 ) AM_READWRITE ( to8_floppy_r, to8_floppy_w )
1685
AM_RANGE ( 0xe7da, 0xe7dd ) AM_READWRITE ( to8_vreg_r, to8_vreg_w )
1686
AM_RANGE ( 0xe7de, 0xe7df ) AM_READWRITE ( to9_kbd_r, to9_kbd_w )
1687
AM_RANGE ( 0xe7e4, 0xe7e7 ) AM_READWRITE ( to8_gatearray_r,
1689
AM_RANGE ( 0xe7e8, 0xe7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
1690
/* AM_RANGE ( 0xe7f0, 0xe7f7 ) AM_READWRITE ( to9_ieee_r, to9_ieee_w ) */
1691
AM_RANGE ( 0xe7f2, 0xe7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
1692
AM_RANGE ( 0xe7f8, 0xe7fb ) AM_DEVREADWRITE_MODERN( "pia_3", pia6821_device, read_alt, write_alt)
1693
AM_RANGE ( 0xe7fe, 0xe7ff ) AM_READWRITE ( to7_modem_mea8000_r,
1694
to7_modem_mea8000_w )
1695
AM_RANGE ( 0xe800, 0xffff ) AM_ROMBANK ( TO8_BIOS_BANK ) /* 2 * 6 KB */
1697
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
1698
/* 0x20000 - 0x2ffff: 64 KB internal software ROM */
1699
/* 0x30000 - 0x33fff: 16 KB BIOS ROM */
1700
/* 0x34000 - 0x387ff: 18 KB external floppy / network ROM controllers */
1702
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 512 KB flat (including video) */
1707
/* ------------ ROMS ------------ */
1710
ROM_REGION ( 0x38800, "maincpu", 0 )
1713
ROM_LOAD ( "to9p-0.rom", 0x30000, 0x2000,
1715
SHA1(b30e06127d6e99d4ac5a5bb67881df27bbd9a7e5) )
1716
ROM_LOAD ( "to9p-1.rom", 0x32000, 0x2000,
1718
SHA1(7eacbd796e76bc72b872f9700c9b90414899ea0f) )
1721
ROM_LOAD ( "basicp-0.rom", 0x20000, 0x4000,
1723
SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
1724
ROM_LOAD ( "basicp-1.rom", 0x24000, 0x4000,
1726
SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
1727
ROM_LOAD ( "basicp-2.rom", 0x28000, 0x4000,
1729
SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1730
ROM_LOAD ( "basicp-3.rom", 0x2c000, 0x4000,
1732
SHA1(b667ad09a1181f65059a2cbb4c95421bc544a334) )
1734
ROM_FLOPPY7( 0x34000 )
1736
ROM_FILL( 0x10000, 0x10000, 0x39 )
1740
/* ------------ inputs ------------ */
1742
static INPUT_PORTS_START ( to9p )
1743
PORT_INCLUDE ( thom_lightpen )
1744
PORT_INCLUDE ( thom_game_port )
1745
PORT_INCLUDE ( to9_keyboard )
1746
PORT_INCLUDE ( to7_config )
1747
PORT_INCLUDE ( to9_fconfig )
1748
PORT_INCLUDE ( to7_vconfig )
1749
PORT_INCLUDE ( to7_mconfig )
1752
/* ------------ driver ------------ */
1754
static MACHINE_CONFIG_DERIVED( to9p, to7 )
1755
MCFG_MACHINE_START ( to9p )
1756
MCFG_MACHINE_RESET ( to9p )
1758
MCFG_CPU_MODIFY( "maincpu" )
1759
MCFG_CPU_PROGRAM_MAP ( to9p)
1761
MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to9p_pia6821_sys )
1762
MCFG_DEVICE_REMOVE( THOM_PIA_IO )
1764
MCFG_DEVICE_REMOVE("centronics")
1765
MCFG_CENTRONICS_ADD("centronics", standard_centronics)
1767
MCFG_MC6846_MODIFY( "mc6846", to9p_timer )
1770
MCFG_RAM_MODIFY(RAM_TAG)
1771
MCFG_RAM_DEFAULT_SIZE("512K")
1774
COMP ( 1986, to9p, 0, 0, to9p, to9p, 0, "Thomson", "TO9+", 0 )
1778
/******************************** MO6 ********************************
1783
The MO6 is the (long awaited) successor to the MO5.
1784
It is based on TO8 technology (same system & video gate-array).
1785
However, it is lower-end and cheaper: less memory (128 KB RAM, not
1786
extensible), no floppy controller but an integrated cassette recorder.
1787
The MO6 is MO5 compatible, but not compatible with the TO family.
1790
- 1 MHz Motorola 6809E CPU
1791
- 2 Motorola 6821 PIAs (system, game)
1792
- 1 gate-array (system & video, identical to the TO8)
1795
- 128 KB RAM (not extendable)
1798
- 32 KB BASIC 128 & extended BIOS ROM
1801
all modes from the TO8, but the TO7/70-compatible mode is replaced with
1802
an MO5-compatible one
1805
- AZERTY keyboard, 69 keys, no keyboard controller (scanning is done
1806
periodically by the 6809)
1807
- MO5-compatible cartridge
1808
- two-button mouse (TO8-like)
1810
- integrated game port (similar to SX 90-018)
1812
. two 8-position 2-button game pads
1814
- integrated cassette reader 1200 bauds (MO5 compatible) and 2400 bauds
1815
- parallel CENTRONICS (printer emulated)
1816
- RF 57-932: RS232 extension (identical to the TO7), or RF 90-932 (???)
1818
- no integrated controller, but external TO7 floppy controllers & drives
1820
- speech synthesis extension: identical to TO7 ?
1821
- MIDIPAK MIDI extension: identical to TO7 ?
1824
Olivetti Prodest PC 128 (1986)
1825
-----------------------
1827
Italian version of the MO6, built by Thomson and sold by Olivetti.
1828
Except from the ROM, it is very similar to the MO6.
1829
Do not confuse with the Olivetti Prodest PC 128 Systema (or 128s) which is
1830
based on the Acorn BBC Master Compact. Or with the Olivetti PC 1, which is
1834
**********************************************************************/
1836
static ADDRESS_MAP_START ( mo6, AS_PROGRAM, 8 )
1838
AM_RANGE ( 0x0000, 0x1fff ) AM_READ_BANK ( THOM_VRAM_BANK) AM_WRITE( to770_vram_w )
1839
AM_RANGE ( 0x2000, 0x3fff ) AM_READ_BANK ( TO8_SYS_LO) AM_WRITE( to8_sys_lo_w )
1840
AM_RANGE ( 0x4000, 0x5fff ) AM_READ_BANK ( TO8_SYS_HI) AM_WRITE( to8_sys_hi_w )
1841
AM_RANGE ( 0x6000, 0x7fff ) AM_READ_BANK ( TO8_DATA_LO) AM_WRITE( to8_data_lo_w )
1842
AM_RANGE ( 0x8000, 0x9fff ) AM_READ_BANK ( TO8_DATA_HI) AM_WRITE( to8_data_hi_w )
1843
AM_RANGE ( 0xa000, 0xa7bf ) AM_ROMBANK ( THOM_FLOP_BANK )
1844
AM_RANGE ( 0xa7c0, 0xa7c3 ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt)
1845
AM_RANGE ( 0xa7cb, 0xa7cb ) AM_WRITE ( mo6_ext_w )
1846
AM_RANGE ( 0xa7cc, 0xa7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt)
1847
AM_RANGE ( 0xa7d0, 0xa7d9 ) AM_READWRITE ( to7_floppy_r, to7_floppy_w )
1848
AM_RANGE ( 0xa7da, 0xa7dd ) AM_READWRITE ( mo6_vreg_r, mo6_vreg_w )
1849
AM_RANGE ( 0xa7e4, 0xa7e7 ) AM_READWRITE ( mo6_gatearray_r,
1851
AM_RANGE ( 0xa7e8, 0xa7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
1852
/* AM_RANGE ( 0xa7f0, 0xa7f7 ) AM_READWRITE ( to9_ieee_r, to9_ieee_w )*/
1853
AM_RANGE ( 0xa7f2, 0xa7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
1854
AM_RANGE ( 0xa7fe, 0xa7ff ) AM_DEVREADWRITE("mea8000", mea8000_r, mea8000_w)
1855
AM_RANGE ( 0xb000, 0xefff ) AM_ROMBANK ( THOM_CART_BANK )
1856
AM_WRITE ( mo6_cartridge_w )
1857
AM_RANGE ( 0xf000, 0xffff ) AM_ROMBANK ( TO8_BIOS_BANK )
1859
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
1860
/* 0x20000 - 0x2ffff: 64 KB BIOS ROM */
1861
/* 0x30000 - 0x347ff: 16 KB floppy / network ROM controllers */
1863
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 128 KB flat (including video) */
1868
/* ------------ ROMS ------------ */
1871
ROM_REGION ( 0x34800, "maincpu", 0 )
1874
ROM_LOAD ( "mo6-0.rom", 0x23000, 0x1000,
1876
SHA1(b57fcda69c95f0c97c5cb0605d17c49a0c630300) )
1877
ROM_LOAD ( "mo6-1.rom", 0x27000, 0x1000,
1879
SHA1(24e2232f582ce04f260acd8e9ec710468a81505c) )
1882
ROM_LOAD ( "basic6-0.rom", 0x20000, 0x3000,
1884
SHA1(fccbf69cbc6deba45a767a26cd6454cf0eedfc2b) )
1885
ROM_LOAD ( "basic6-1.rom", 0x24000, 0x3000,
1887
SHA1(47487d2bc4c9a9c09c733bd89c49693c52e262de) )
1888
ROM_LOAD ( "basic6-2.rom", 0x28000, 0x4000,
1890
SHA1(c0231fdb3bcccbbb10c1f93cc529fc3b96dd3f4d) )
1891
ROM_LOAD ( "basic6-3.rom", 0x2c000, 0x4000,
1893
SHA1(301b6366269181b74cb5d7ccdf5455b7290ae99b) )
1895
ROM_FLOPPY5 ( 0x30000 )
1896
ROM_FILL ( 0x10000, 0x10000, 0x39 )
1899
ROM_START ( pro128 )
1900
ROM_REGION ( 0x34800, "maincpu", 0 )
1903
ROM_LOAD ( "pro128-0.rom", 0x23000, 0x1000,
1905
SHA1(2685cca841f405a37ef48b0115f90c865ce79d0f) )
1906
ROM_LOAD ( "pro128-1.rom", 0x27000, 0x1000,
1908
SHA1(269f2eb3e3452014b8d1f0f9e1c63fe56375a863) )
1911
ROM_LOAD ( "basico-0.rom", 0x20000, 0x3000,
1913
SHA1(d6b77e694fa85e1114293448e5a64f6e2cf46c22) )
1914
ROM_LOAD ( "basico-1.rom", 0x24000, 0x3000,
1916
SHA1(51db1cd03b3891e212a24aa6563b09968930d897) )
1917
ROM_LOAD ( "basico-2.rom", 0x28000, 0x4000,
1919
SHA1(617d4e4979842bea2c21ef7f8c50f3b08b15239a) )
1920
ROM_LOAD ( "basico-3.rom", 0x2c000, 0x4000,
1922
SHA1(3e94e182bacbb55bb07be2af4c76c0b0df47b3bf) )
1924
ROM_FLOPPY5 ( 0x30000 )
1925
ROM_FILL ( 0x10000, 0x10000, 0x39 )
1929
/* ------------ inputs ------------ */
1931
static INPUT_PORTS_START ( mo6_keyboard )
1933
PORT_START ( "keyboard_0" )
1934
KEY ( 0, "N", N ) PORT_CHAR('N')
1935
KEY ( 1, ", ?", COMMA ) PORT_CHAR(',') PORT_CHAR('?')
1936
KEY ( 2, "; .", STOP ) PORT_CHAR(';') PORT_CHAR('.')
1937
KEY ( 3, "# @", TILDE ) PORT_CHAR('#') PORT_CHAR('@')
1938
KEY ( 4, "Space", SPACE ) PORT_CHAR(' ')
1939
KEY ( 5, "X", X ) PORT_CHAR('X')
1940
KEY ( 6, "W", W ) PORT_CHAR('W')
1941
KEY ( 7, "Shift", LSHIFT ) PORT_CODE ( KEYCODE_RSHIFT ) PORT_CHAR(UCHAR_SHIFT_1)
1942
PORT_START ( "keyboard_1" )
1943
KEY ( 0, "Delete Backspace", DEL ) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
1944
KEY ( 1, "Insert", INSERT ) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
1945
KEY ( 2, "> <", BACKSLASH2 ) PORT_CHAR('>') PORT_CHAR('<')
1946
KEY ( 3, UTF8_RIGHT, RIGHT ) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
1947
KEY ( 4, UTF8_DOWN, DOWN ) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
1948
KEY ( 5, UTF8_LEFT, LEFT ) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
1949
KEY ( 6, UTF8_UP, UP ) PORT_CHAR(UCHAR_MAMEKEY(UP))
1950
KEY ( 7, "BASIC", RCONTROL ) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
1951
PORT_START ( "keyboard_2" )
1952
KEY ( 0, "J", J ) PORT_CHAR('J')
1953
KEY ( 1, "K", K ) PORT_CHAR('K')
1954
KEY ( 2, "L", L ) PORT_CHAR('L')
1955
KEY ( 3, "M", M ) PORT_CHAR('M')
1956
KEY ( 4, "B \302\264", B ) PORT_CHAR('B')
1957
KEY ( 5, "V", V ) PORT_CHAR('V')
1958
KEY ( 6, "C \136", C ) PORT_CHAR('C')
1959
KEY ( 7, "Caps-Lock", CAPSLOCK ) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
1960
PORT_START ( "keyboard_3" )
1961
KEY ( 0, "H \302\250", H ) PORT_CHAR('H')
1962
KEY ( 1, "G", G ) PORT_CHAR('G')
1963
KEY ( 2, "F", F ) PORT_CHAR('F')
1964
KEY ( 3, "D", D ) PORT_CHAR('D')
1965
KEY ( 4, "S", S ) PORT_CHAR('S')
1966
KEY ( 5, "Q", Q ) PORT_CHAR('Q')
1967
KEY ( 6, "Home Clear", HOME ) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CHAR(UCHAR_MAMEKEY(ESC))
1968
KEY ( 7, "F1 F6", F1 ) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR(UCHAR_MAMEKEY(F6))
1969
PORT_START ( "keyboard_4" )
1970
KEY ( 0, "U", U ) PORT_CHAR('U')
1971
KEY ( 1, "I", I ) PORT_CHAR('I')
1972
KEY ( 2, "O", O ) PORT_CHAR('O')
1973
KEY ( 3, "P", P ) PORT_CHAR('P')
1974
KEY ( 4, ": /", SLASH ) PORT_CHAR(':') PORT_CHAR('/')
1975
KEY ( 5, "$ &", CLOSEBRACE ) PORT_CHAR('$') PORT_CHAR('&')
1976
KEY ( 6, "Enter", ENTER ) PORT_CHAR(13)
1977
KEY ( 7, "F2 F7", F2 ) PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(F7))
1978
PORT_START ( "keyboard_5" )
1979
KEY ( 0, "Y", Y ) PORT_CHAR('Y')
1980
KEY ( 1, "T", T ) PORT_CHAR('T')
1981
KEY ( 2, "R", R ) PORT_CHAR('R')
1982
KEY ( 3, "E", E ) PORT_CHAR('E')
1983
KEY ( 4, "Z", Z ) PORT_CHAR('Z')
1984
KEY ( 5, "A \140", A ) PORT_CHAR('A')
1985
KEY ( 6, "Control", LCONTROL ) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
1986
KEY ( 7, "F3 F8", F3 ) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHAR(UCHAR_MAMEKEY(F8))
1987
PORT_START ( "keyboard_6" )
1988
KEY ( 0, "7 \303\250", 7 ) PORT_CHAR('7') PORT_CHAR( 0xe8 )
1989
KEY ( 1, "8 !", 8 ) PORT_CHAR('8') PORT_CHAR('!')
1990
KEY ( 2, "9 \303\247", 9 ) PORT_CHAR('9') PORT_CHAR( 0xe7 )
1991
KEY ( 3, "0 \303\240", 0 ) PORT_CHAR('0') PORT_CHAR( 0xe0 )
1992
KEY ( 4, "- \\", BACKSPACE ) PORT_CHAR('-') PORT_CHAR('\\')
1993
KEY ( 5, "= +", EQUALS ) PORT_CHAR('=') PORT_CHAR('+')
1994
KEY ( 6, "Accent", END ) PORT_CHAR(UCHAR_MAMEKEY(END))
1995
KEY ( 7, "F4 F9", F4 ) PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_CHAR(UCHAR_MAMEKEY(F9))
1996
PORT_START ( "keyboard_7" )
1997
KEY ( 0, "6 _", 6 ) PORT_CHAR('6') PORT_CHAR('_')
1998
KEY ( 1, "5 (", 5 ) PORT_CHAR('5') PORT_CHAR('(')
1999
KEY ( 2, "4 '", 4 ) PORT_CHAR('4') PORT_CHAR('\'')
2000
KEY ( 3, "3 \"", 3 ) PORT_CHAR('3') PORT_CHAR('"')
2001
KEY ( 4, "2 \303\251", 2 ) PORT_CHAR('2') PORT_CHAR( 0xe9 )
2002
KEY ( 5, "1 *", 1 ) PORT_CHAR('1') PORT_CHAR('*')
2003
KEY ( 6, "Stop", TAB ) PORT_CHAR(27)
2004
KEY ( 7, "F5 F10", F5 ) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHAR(UCHAR_MAMEKEY(F10))
2005
PORT_START ( "keyboard_8" )
2006
KEY ( 0, "[ {", QUOTE ) PORT_CHAR('[') PORT_CHAR('{')
2007
KEY ( 1, "] }", BACKSLASH ) PORT_CHAR(']') PORT_CHAR('}')
2008
KEY ( 2, ") \302\260", MINUS ) PORT_CHAR(')') PORT_CHAR( 0xb0 )
2009
KEY ( 3, "\342\206\221 \302\250", OPENBRACE ) PORT_CHAR('^') PORT_CHAR( 0xa8 )
2010
KEY ( 4, "\303\271 %", COLON ) PORT_CHAR( 0xf9 ) PORT_CHAR('%')
2011
PORT_BIT ( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
2014
PORT_START ( "keyboard_9" )
2018
/* QWERTY version */
2019
static INPUT_PORTS_START ( pro128_keyboard )
2020
PORT_INCLUDE ( mo6_keyboard )
2022
PORT_MODIFY ( "keyboard_0" )
2023
KEY ( 1, "M", M ) PORT_CHAR('M')
2024
KEY ( 2, ", ;", COMMA ) PORT_CHAR(',') PORT_CHAR(';')
2025
KEY ( 3, "[ {", QUOTE ) PORT_CHAR('[') PORT_CHAR('{')
2026
KEY ( 6, "Z", Z ) PORT_CHAR('Z')
2027
KEY ( 7, "Shift", LSHIFT ) PORT_CODE ( KEYCODE_RSHIFT ) PORT_CHAR(UCHAR_SHIFT_1)
2028
PORT_MODIFY ( "keyboard_1" )
2029
KEY ( 2, "- _", MINUS ) PORT_CHAR('-') PORT_CHAR('_')
2030
PORT_MODIFY ( "keyboard_2" )
2031
KEY ( 3, "\303\221", TILDE ) PORT_CHAR( 0xd1 )
2032
PORT_MODIFY ( "keyboard_3" )
2033
KEY ( 5, "A \140", A ) PORT_CHAR('A')
2034
PORT_MODIFY ( "keyboard_4" )
2035
KEY ( 4, ". :", STOP ) PORT_CHAR('.') PORT_CHAR(':')
2036
KEY ( 5, "+ *", BACKSPACE ) PORT_CHAR('+') PORT_CHAR('*')
2037
PORT_MODIFY ( "keyboard_5" )
2038
KEY ( 4, "W", W ) PORT_CHAR('W')
2039
KEY ( 5, "Q", Q ) PORT_CHAR('Q')
2040
PORT_MODIFY ( "keyboard_6" )
2041
KEY ( 0, "7 /", 7 ) PORT_CHAR('7') PORT_CHAR('/')
2042
KEY ( 1, "8 (", 8 ) PORT_CHAR('8') PORT_CHAR('(')
2043
KEY ( 2, "9 )", 9 ) PORT_CHAR('9') PORT_CHAR(')')
2044
KEY ( 3, "0 =", 0 ) PORT_CHAR('0') PORT_CHAR('=')
2045
KEY ( 4, "' \302\243", CLOSEBRACE ) PORT_CHAR('\'') PORT_CHAR( 0xa3 )
2046
KEY ( 5, "] }", BACKSLASH ) PORT_CHAR(']') PORT_CHAR('}')
2047
PORT_MODIFY ( "keyboard_7" )
2048
KEY ( 0, "6 &", 6 ) PORT_CHAR('6') PORT_CHAR('&')
2049
KEY ( 1, "5 %", 5 ) PORT_CHAR('5') PORT_CHAR('%')
2050
KEY ( 2, "4 $", 4 ) PORT_CHAR('4') PORT_CHAR('$')
2051
KEY ( 3, "3 \302\247", 3 ) PORT_CHAR('3') PORT_CHAR( 0xa7 )
2052
KEY ( 4, "2 \"", 2 ) PORT_CHAR('2') PORT_CHAR('"')
2053
KEY ( 5, "1 !", 1 ) PORT_CHAR('1') PORT_CHAR('!')
2054
PORT_MODIFY ( "keyboard_8" )
2055
KEY ( 0, "> <", BACKSLASH2 ) PORT_CHAR('>') PORT_CHAR('<')
2056
KEY ( 1, "# \342\206\221", EQUALS ) PORT_CHAR('#') PORT_CHAR('^')
2057
KEY ( 2, "\303\247 ?", COLON ) PORT_CHAR( 0xe7 ) PORT_CHAR('?')
2058
KEY ( 3, "\302\277 @", SLASH ) PORT_CHAR( 0xbf ) PORT_CHAR('@')
2059
KEY ( 4, "\302\241 \302\250", OPENBRACE ) PORT_CHAR( 0xa1 ) PORT_CHAR( 0xa8 )
2064
static INPUT_PORTS_START ( mo6 )
2065
PORT_INCLUDE ( thom_lightpen )
2066
PORT_INCLUDE ( thom_game_port )
2067
PORT_INCLUDE ( mo6_keyboard )
2068
PORT_INCLUDE ( to7_config )
2069
PORT_INCLUDE ( to7_fconfig )
2070
PORT_INCLUDE ( to7_vconfig )
2073
static INPUT_PORTS_START ( pro128 )
2074
PORT_INCLUDE ( thom_lightpen )
2075
PORT_INCLUDE ( thom_game_port )
2076
PORT_INCLUDE ( pro128_keyboard )
2077
PORT_INCLUDE ( to7_config )
2078
PORT_INCLUDE ( to7_fconfig )
2079
PORT_INCLUDE ( to7_vconfig )
2083
/* ------------ driver ------------ */
2085
static MACHINE_CONFIG_DERIVED( mo6, to7 )
2086
MCFG_MACHINE_START ( mo6 )
2087
MCFG_MACHINE_RESET ( mo6 )
2089
MCFG_CPU_MODIFY( "maincpu" )
2090
MCFG_CPU_PROGRAM_MAP ( mo6)
2092
MCFG_DEVICE_REMOVE( "mc6846" )
2094
MCFG_PIA6821_MODIFY( THOM_PIA_SYS, mo6_pia6821_sys )
2095
MCFG_DEVICE_REMOVE( THOM_PIA_IO )
2096
MCFG_PIA6821_MODIFY( THOM_PIA_GAME, mo6_pia6821_game )
2098
MCFG_DEVICE_REMOVE("centronics")
2099
MCFG_CENTRONICS_ADD("centronics", mo6_centronics_config)
2101
MCFG_CARTSLOT_MODIFY("cart")
2102
MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
2103
MCFG_CARTSLOT_LOAD(mo5_cartridge)
2106
MCFG_RAM_MODIFY(RAM_TAG)
2107
MCFG_RAM_DEFAULT_SIZE("128K")
2110
static MACHINE_CONFIG_DERIVED( pro128, mo6 )
2113
COMP ( 1986, mo6, 0, 0, mo6, mo6, 0, "Thomson", "MO6", 0 )
2115
COMP ( 1986, pro128, mo6, 0, pro128, pro128, 0, "Olivetti / Thomson", "Prodest PC 128", 0 )
2120
/****************************** MO5NR ********************************
2125
Despite its name, the MO5 NR is much more related to the MO6 than to the MO5.
2126
It can be though as the network-enhanced version of the MO6.
2127
It is both MO5 and MO6 compatible (but not TO-compatible).
2129
Here are the differences between the MO6 and MO5NR:
2132
- integrated MC 6854 network controller
2135
- extra 2 KB ROM for the integrated network controller,
2136
can be masked by the ROM from the external floppy controller
2141
- AZERTY keyboard has only 58 keys, and no caps-lock led
2142
- CENTRONICS printer handled differently
2143
- MO5-compatible network (probably identical to NR 07-005 extension)
2144
- extern floppy controller & drive possible, masks the network
2146
**********************************************************************/
2148
static ADDRESS_MAP_START ( mo5nr, AS_PROGRAM, 8 )
2150
AM_RANGE ( 0x0000, 0x1fff ) AM_READ_BANK ( THOM_VRAM_BANK) AM_WRITE( to770_vram_w )
2151
AM_RANGE ( 0x2000, 0x3fff ) AM_READ_BANK ( TO8_SYS_LO) AM_WRITE( to8_sys_lo_w )
2152
AM_RANGE ( 0x4000, 0x5fff ) AM_READ_BANK ( TO8_SYS_HI) AM_WRITE( to8_sys_hi_w )
2153
AM_RANGE ( 0x6000, 0x7fff ) AM_READ_BANK ( TO8_DATA_LO) AM_WRITE( to8_data_lo_w )
2154
AM_RANGE ( 0x8000, 0x9fff ) AM_READ_BANK ( TO8_DATA_HI) AM_WRITE( to8_data_hi_w )
2155
AM_RANGE ( 0xa000, 0xa7bf ) AM_ROMBANK ( THOM_FLOP_BANK )
2156
AM_RANGE ( 0xa7c0, 0xa7c3 ) AM_DEVREADWRITE_MODERN( "pia_0", pia6821_device, read_alt, write_alt)
2157
AM_RANGE ( 0xa7cb, 0xa7cb ) AM_WRITE ( mo6_ext_w )
2158
AM_RANGE ( 0xa7cc, 0xa7cf ) AM_DEVREADWRITE_MODERN( "pia_1", pia6821_device, read_alt, write_alt)
2159
AM_RANGE ( 0xa7d0, 0xa7d9 ) AM_READWRITE ( mo5nr_net_r, mo5nr_net_w )
2160
AM_RANGE ( 0xa7da, 0xa7dd ) AM_READWRITE ( mo6_vreg_r, mo6_vreg_w )
2161
AM_RANGE ( 0xa7e1, 0xa7e1 ) AM_DEVREADWRITE("centronics", centronics_data_r, centronics_data_w)
2162
AM_RANGE ( 0xa7e3, 0xa7e3 ) AM_READWRITE ( mo5nr_prn_r, mo5nr_prn_w )
2163
AM_RANGE ( 0xa7e4, 0xa7e7 ) AM_READWRITE ( mo6_gatearray_r,
2165
AM_RANGE ( 0xa7e8, 0xa7eb ) AM_DEVREADWRITE("acia", acia_6551_r, acia_6551_w )
2166
/* AM_RANGE ( 0xa7f0, 0xa7f7 ) AM_READWRITE ( to9_ieee_r, to9_ieee_w ) */
2167
AM_RANGE ( 0xa7f2, 0xa7f3 ) AM_READWRITE ( to7_midi_r, to7_midi_w )
2168
AM_RANGE ( 0xa7f8, 0xa7fb ) AM_DEVREADWRITE_MODERN( "pia_3", pia6821_device, read_alt, write_alt)
2169
AM_RANGE ( 0xa7fe, 0xa7ff ) AM_DEVREADWRITE("mea8000", mea8000_r, mea8000_w)
2170
AM_RANGE ( 0xb000, 0xefff ) AM_READ_BANK ( THOM_CART_BANK) AM_WRITE( mo6_cartridge_w ) /* 4 * 16 KB */
2171
AM_RANGE ( 0xf000, 0xffff ) AM_ROMBANK ( TO8_BIOS_BANK )
2173
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
2174
/* 0x20000 - 0x2ffff: 64 KB BIOS ROM */
2175
/* 0x30000 - 0x347ff: 16 KB floppy / network ROM controllers */
2177
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 128 KB flat (including video) */
2182
/* ------------ ROMS ------------ */
2185
ROM_REGION ( 0x34800, "maincpu", 0 )
2188
ROM_LOAD ( "mo5nr-0.rom", 0x23000, 0x1000,
2190
SHA1(7429cc0c15475398b5ab514cb3d3efdc71cf082f) )
2191
ROM_LOAD ( "mo5nr-1.rom", 0x27000, 0x1000,
2193
SHA1(2ff6480ce9e30acc4c89b6113d7c8ea6095d90a5) )
2196
ROM_LOAD ( "basicn-0.rom", 0x20000, 0x3000,
2198
SHA1(62fbfd6d4ca837f6cb8ed37f828eca97f80e6200) )
2199
ROM_LOAD ( "basicn-1.rom", 0x24000, 0x3000,
2201
SHA1(1bd961314e16e460d37a65f5e7f4acf5604fbb17) )
2202
ROM_LOAD ( "basicn-2.rom", 0x28000, 0x4000,
2204
SHA1(ea3220bbae991e08259d38a7ea24533b2bb86418) )
2205
ROM_LOAD ( "basicn-3.rom", 0x2c000, 0x4000,
2207
SHA1(c38b0be404d8af6f409a1b52cb79a4e10fc33177) )
2209
ROM_FLOPPY5 ( 0x30000 )
2210
ROM_FILL ( 0x10000, 0x10000, 0x39 ) /* TODO: network ROM */
2216
/* ------------ inputs ------------ */
2218
static INPUT_PORTS_START ( mo5nr_keyboard )
2220
PORT_START ( "keyboard_0" )
2221
KEY ( 0, "N", N ) PORT_CHAR('N')
2222
KEY ( 1, ", <", COMMA ) PORT_CHAR(',') PORT_CHAR('<')
2223
KEY ( 2, ". >", STOP ) PORT_CHAR('.') PORT_CHAR('>')
2224
KEY ( 3, "@ \342\206\221", TILDE ) PORT_CHAR('@') PORT_CHAR('^')
2225
KEY ( 4, "Space Caps-Lock", SPACE ) PORT_CHAR(' ') PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
2226
KEY ( 5, "X", X ) PORT_CHAR('X')
2227
KEY ( 6, "W", W ) PORT_CHAR('W')
2228
KEY ( 7, "Shift", LSHIFT ) PORT_CODE ( KEYCODE_RSHIFT ) PORT_CHAR(UCHAR_SHIFT_1)
2229
PORT_START ( "keyboard_1" )
2230
KEY ( 0, "Delete Backspace", DEL ) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
2231
KEY ( 1, "Insert", INSERT ) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
2232
KEY ( 2, "Home", HOME ) PORT_CHAR(UCHAR_MAMEKEY(HOME))
2233
KEY ( 3, UTF8_RIGHT, RIGHT ) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
2234
KEY ( 4, UTF8_DOWN, DOWN ) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
2235
KEY ( 5, UTF8_LEFT, LEFT ) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
2236
KEY ( 6, UTF8_UP, UP ) PORT_CHAR(UCHAR_MAMEKEY(UP))
2237
KEY ( 7, "BASIC", RCONTROL )
2238
PORT_START ( "keyboard_2" )
2239
KEY ( 0, "J", J ) PORT_CHAR('J')
2240
KEY ( 1, "K", K ) PORT_CHAR('K')
2241
KEY ( 2, "L", L ) PORT_CHAR('L')
2242
KEY ( 3, "M", M ) PORT_CHAR('M')
2243
KEY ( 4, "B \140", B ) PORT_CHAR('B')
2244
KEY ( 5, "V", V ) PORT_CHAR('V')
2245
KEY ( 6, "C \136", C ) PORT_CHAR('C')
2246
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2247
PORT_START ( "keyboard_3" )
2248
KEY ( 0, "H \302\250", H ) PORT_CHAR('H')
2249
KEY ( 1, "G", G ) PORT_CHAR('G')
2250
KEY ( 2, "F", F ) PORT_CHAR('F')
2251
KEY ( 3, "D", D ) PORT_CHAR('D')
2252
KEY ( 4, "S", S ) PORT_CHAR('S')
2253
KEY ( 5, "Q", Q ) PORT_CHAR('Q')
2254
KEY ( 6, "Clear", ESC ) PORT_CHAR(UCHAR_MAMEKEY(ESC))
2255
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2256
PORT_START ( "keyboard_4" )
2257
KEY ( 0, "U", U ) PORT_CHAR('U')
2258
KEY ( 1, "I", I ) PORT_CHAR('I')
2259
KEY ( 2, "O", O ) PORT_CHAR('O')
2260
KEY ( 3, "P", P ) PORT_CHAR('P')
2261
KEY ( 4, "/ ?", SLASH ) PORT_CHAR('/') PORT_CHAR('?')
2262
KEY ( 5, "* :", QUOTE ) PORT_CHAR('*') PORT_CHAR(':')
2263
KEY ( 6, "Enter", ENTER ) PORT_CHAR(13)
2264
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2265
PORT_START ( "keyboard_5" )
2266
KEY ( 0, "Y", Y ) PORT_CHAR('Y')
2267
KEY ( 1, "T", T ) PORT_CHAR('T')
2268
KEY ( 2, "R", R ) PORT_CHAR('R')
2269
KEY ( 3, "E", E ) PORT_CHAR('E')
2270
KEY ( 4, "Z", Z ) PORT_CHAR('Z')
2271
KEY ( 5, "A \140", A ) PORT_CHAR('A')
2272
KEY ( 6, "Control", LCONTROL ) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
2273
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2274
PORT_START ( "keyboard_6" )
2275
KEY ( 0, "7 ' \303\250", 7 ) PORT_CHAR('7') PORT_CHAR('\'' )
2276
KEY ( 1, "8 ( \303\271", 8 ) PORT_CHAR('8') PORT_CHAR('(')
2277
KEY ( 2, "9 ) \303\247", 9 ) PORT_CHAR('9') PORT_CHAR(')')
2278
KEY ( 3, "0 \303\240", 0 ) PORT_CHAR('0') PORT_CHAR( 0xe0 )
2279
KEY ( 4, "- =", MINUS ) PORT_CHAR('-') PORT_CHAR('=')
2280
KEY ( 5, "+ ;", EQUALS ) PORT_CHAR('+') PORT_CHAR(';')
2281
KEY ( 6, "Accent", END ) PORT_CHAR(UCHAR_MAMEKEY(END))
2282
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2283
PORT_START ( "keyboard_7" )
2284
KEY ( 0, "6 & \303\251", 6 ) PORT_CHAR('6') PORT_CHAR('&')
2285
KEY ( 1, "5 %", 5 ) PORT_CHAR('5') PORT_CHAR('%')
2286
KEY ( 2, "4 $", 4 ) PORT_CHAR('4') PORT_CHAR('$')
2287
KEY ( 3, "3 #", 3 ) PORT_CHAR('3') PORT_CHAR('#')
2288
KEY ( 4, "2 \"", 2 ) PORT_CHAR('2') PORT_CHAR('"')
2289
KEY ( 5, "1 !", 1 ) PORT_CHAR('1') PORT_CHAR('!')
2290
KEY ( 6, "Stop", TAB ) PORT_CHAR(27)
2291
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
2294
PORT_START ( "keyboard_8" )
2295
PORT_START ( "keyboard_9" )
2299
static INPUT_PORTS_START ( mo5nr )
2300
PORT_INCLUDE ( thom_lightpen )
2301
PORT_INCLUDE ( thom_game_port )
2302
PORT_INCLUDE ( mo5nr_keyboard )
2303
PORT_INCLUDE ( to7_config )
2304
PORT_INCLUDE ( to7_fconfig )
2305
PORT_INCLUDE ( to7_vconfig )
2309
/* ------------ driver ------------ */
2311
static MACHINE_CONFIG_DERIVED( mo5nr, to7 )
2312
MCFG_MACHINE_START ( mo5nr )
2313
MCFG_MACHINE_RESET ( mo5nr )
2315
MCFG_CPU_MODIFY( "maincpu" )
2316
MCFG_CPU_PROGRAM_MAP ( mo5nr)
2318
MCFG_DEVICE_REMOVE( "mc6846" )
2320
MCFG_PIA6821_MODIFY( THOM_PIA_SYS, mo5nr_pia6821_sys )
2321
MCFG_DEVICE_REMOVE( THOM_PIA_IO )
2322
MCFG_PIA6821_MODIFY( THOM_PIA_GAME, mo5nr_pia6821_game )
2324
MCFG_DEVICE_REMOVE("centronics")
2325
MCFG_CENTRONICS_ADD("centronics", standard_centronics)
2327
MCFG_CARTSLOT_MODIFY("cart")
2328
MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
2329
MCFG_CARTSLOT_LOAD(mo5_cartridge)
2332
MCFG_RAM_MODIFY(RAM_TAG)
2333
MCFG_RAM_DEFAULT_SIZE("128K")
2336
COMP ( 1986, mo5nr, 0, 0, mo5nr, mo5nr, 0, "Thomson", "MO5 NR", 0 )