~ubuntu-branches/ubuntu/raring/mame/raring-proposed

« back to all changes in this revision

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

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

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

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**********************************************************************
2
 
 
3
 
  Copyright (C) Antoine Mine' 2006
4
 
 
5
 
  Thomson 8-bit micro-computers.
6
 
 
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.
12
 
 
13
 
  Drivers
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)
26
 
 
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
29
 
   8088-based PC).
30
 
 
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).
38
 
 
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)
45
 
 
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.
49
 
 
50
 
  Thomson stopped producing micro-computers in jan 1990.
51
 
 
52
 
**********************************************************************/
53
 
 
54
 
/* TODO (roughly in decreasing priority order):
55
 
   ----
56
 
 
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?)
62
 
   - IEEE extension
63
 
   - TV overlay (IN 57-001) (@)
64
 
   - digitisation extension (DI 90-011) (@)
65
 
   - barcode reader (@)
66
 
 
67
 
   (@) means MESS is lacking support for this kind of device / feature anyway
68
 
 
69
 
*/
70
 
 
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"
79
 
 
80
 
 
81
 
/**************************** common *******************************/
82
 
 
83
 
/* layout */
84
 
static const char layout_thomson[] = "thomson";
85
 
 
86
 
#define KEY(pos,name,key)                                       \
87
 
        PORT_BIT  ( 1<<(pos), IP_ACTIVE_LOW, IPT_KEYBOARD )     \
88
 
        PORT_NAME ( name )                                      \
89
 
        PORT_CODE ( KEYCODE_##key )
90
 
 
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 )
96
 
 
97
 
 
98
 
/* ------------- game port ------------- */
99
 
 
100
 
/*
101
 
  Two generations of game port extensions were developped
102
 
 
103
 
  - CM 90-112 (model 1)
104
 
    connect up to two 8-position 1-button game pads
105
 
 
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!)
109
 
 
110
 
  We emulate the SX 90-018 as it is fully compatible with the CM 90-112.
111
 
 
112
 
  Notes:
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.
128
 
*/
129
 
 
130
 
static INPUT_PORTS_START( thom_game_port )
131
 
 
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 )
142
 
 
143
 
     PORT_START ( "game_port_buttons" )
144
 
     PAD ( 0x40, 1, "Action A", BUTTON1, BUTTON1, LCONTROL )
145
 
     PAD ( 0x80, 2, "Action A", BUTTON1, BUTTON1, RCONTROL )
146
 
 
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 ) /* ? */
152
 
 
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 )
158
 
     PORT_PLAYER (1)
159
 
 
160
 
     PORT_START ( "mouse_y" )
161
 
     PORT_BIT ( 0xffff, 0x00, IPT_MOUSE_Y )
162
 
     PORT_NAME ( "Mouse Y" )
163
 
     PORT_SENSITIVITY ( 150 )
164
 
     PORT_PLAYER (1)
165
 
 
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" )
172
 
 
173
 
INPUT_PORTS_END
174
 
 
175
 
 
176
 
/* ------------ lightpen ------------ */
177
 
 
178
 
static INPUT_PORTS_START( thom_lightpen )
179
 
 
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)
186
 
 
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)
193
 
 
194
 
     PORT_START ( "lightpen_button" )
195
 
     PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
196
 
     PORT_NAME ( "Lightpen Button" )
197
 
     PORT_CODE( MOUSECODE_BUTTON1 )
198
 
 
199
 
INPUT_PORTS_END
200
 
 
201
 
/* ------------ serial ------------ */
202
 
 
203
 
DECLARE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_CC90323, thom_serial_cc90323);
204
 
DEFINE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_CC90323, thom_serial_cc90323);
205
 
 
206
 
#define MCFG_THOM_SERIAL_CC90323_ADD(_tag) \
207
 
        MCFG_DEVICE_ADD(_tag, THOM_SERIAL_CC90323, 0)
208
 
 
209
 
DECLARE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_RF57232, thom_serial_rf57232);
210
 
DEFINE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_RF57232, thom_serial_rf57232);
211
 
 
212
 
#define MCFG_THOM_SERIAL_RF57232_ADD(_tag) \
213
 
        MCFG_DEVICE_ADD(_tag, THOM_SERIAL_RF57232, 0)
214
 
 
215
 
DECLARE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_MODEM, thom_serial_modem);
216
 
DEFINE_LEGACY_IMAGE_DEVICE(THOM_SERIAL_MODEM, thom_serial_modem);
217
 
 
218
 
#define MCFG_THOM_SERIAL_MODEM_ADD(_tag) \
219
 
        MCFG_DEVICE_ADD(_tag, THOM_SERIAL_MODEM, 0)
220
 
 
221
 
/************************** T9000 / TO7 *******************************
222
 
 
223
 
TO7 (1982)
224
 
---
225
 
 
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
233
 
boot floppy.
234
 
 
235
 
* chips:
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
239
 
 
240
 
* memory:
241
 
  - 8 KB base user RAM
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)
244
 
  - 6 KB BIOS ROM
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
247
 
 
248
 
* video:
249
 
    320x200 pixels with color constraints (2 colors per horizontal
250
 
    8-pixel span), 8-color pixel palette,
251
 
    50 Hz (tweaked SECAM)
252
 
 
253
 
* devices:
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
262
 
    . 6-bit DAC sound
263
 
    . two 8-position 2-button game pads
264
 
    . 2-button mouse
265
 
    . based on a Motorola 6821 PIA
266
 
  - CC 90-232 I/O extension:
267
 
    . CENTRONICS (printer)
268
 
    . RS232 (unemulated)
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
283
 
       sides)
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)
301
 
 
302
 
 
303
 
T9000 (1980)
304
 
-----
305
 
 
306
 
Early TO7 prototype.
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.
312
 
 
313
 
 
314
 
**********************************************************************/
315
 
 
316
 
 
317
 
/* ------------ address maps ------------ */
318
 
 
319
 
static ADDRESS_MAP_START ( to7, AS_PROGRAM, 8 )
320
 
 
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  */
338
 
 
339
 
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
340
 
/* 0x20000 - 0x247ff: 18 KB floppy / network ROM controllers */
341
 
 
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
347
 
 */
348
 
ADDRESS_MAP_END
349
 
 
350
 
 
351
 
 
352
 
/* ------------ ROMS ------------ */
353
 
 
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,                      \
360
 
                CRC(821d34c1)                                           \
361
 
                SHA1(31a6bb81baaeec5fc8de457c97264f9dfa92c18b) )        \
362
 
     /* CD 90-640 (5"1/4) */                                            \
363
 
     ROM_LOAD ( "cd90-640.rom", base+0x1000, 0x7c0,                     \
364
 
                CRC(5114c0a5)                                           \
365
 
                SHA1(5c72566c22d8160ef0c75959e1863a1309bbbe49) )        \
366
 
     /* CD 90-351 (3"1/2) */                                            \
367
 
     ROM_LOAD ( "cd-351-0.rom", base+0x1800, 0x7c0,                     \
368
 
                CRC(2c0159fd)                                           \
369
 
                SHA1(bab5395ed8bc7c06f9897897f836054e6546e8e8) )        \
370
 
     ROM_LOAD ( "cd-351-1.rom", base+0x2000, 0x7c0,                     \
371
 
                CRC(8e58d159)                                           \
372
 
                SHA1(dcf992c96e7556b2faee6bacd3f744e56998e6ea) )        \
373
 
     ROM_LOAD ( "cd-351-2.rom", base+0x2800, 0x7c0,                     \
374
 
                CRC(c9228b60)                                           \
375
 
                SHA1(179e10107d5be91e684069dee80f94847b83201f) )        \
376
 
     ROM_LOAD ( "cd-351-3.rom", base+0x3000, 0x7c0,                     \
377
 
                CRC(3ca8e5dc)                                           \
378
 
                SHA1(7118636fb5c597c78c2fce17b02aed5e4ba38635) )        \
379
 
     /* CQ 90-028 (2"8, aka QDD) */                                     \
380
 
     ROM_LOAD ( "cq90-028.rom", base+0x3800, 0x7c0,                     \
381
 
                CRC(ca4dba3d)                                           \
382
 
                SHA1(949c1f777c892da62c242215d79757d61e71e62b) )
383
 
 
384
 
/* external floppy / network controller: 9 banks */
385
 
#define ROM_FLOPPY5( base )                             \
386
 
  ROM_FLOPPY( base )                                    \
387
 
  ROM_LOAD ( "nano5.rom", base+0x4000, 0x7c0,   \
388
 
             CRC(2f756868)                              \
389
 
             SHA1(b5b7cb6d12493d849330b6b5628efd1a83a4bbf5) )
390
 
 
391
 
#define ROM_FLOPPY7( base )                             \
392
 
  ROM_FLOPPY( base )                                    \
393
 
  ROM_LOAD ( "nano7.rom", base+0x4000, 0x7c0,   \
394
 
             CRC(42a1d1a6)                              \
395
 
             SHA1(973209f4baa5e81bf7885c0602949e064bac7862) )
396
 
 
397
 
 
398
 
ROM_START ( to7 )
399
 
     ROM_REGION ( 0x24800, "maincpu", 0 )
400
 
     ROM_LOAD ( "to7.rom", 0xe800, 0x1800,
401
 
                CRC(0e7826da)
402
 
                SHA1(23a2f84b03c01d385cc1923c8ece95c43756297a) )
403
 
     ROM_FILL ( 0x10000, 0x10000, 0x39 )
404
 
     ROM_FLOPPY7 ( 0x20000 )
405
 
ROM_END
406
 
 
407
 
ROM_START ( t9000 )
408
 
     ROM_REGION ( 0x24800, "maincpu", 0 )
409
 
     ROM_LOAD ( "t9000.rom", 0xe800, 0x1800,
410
 
                CRC(daa8cfbf)
411
 
                SHA1(a5735db1ad4e529804fc46603f838d3f4ccaf5cf) )
412
 
     ROM_FILL ( 0x10000, 0x10000, 0x39 )
413
 
     ROM_FLOPPY7 ( 0x20000 )
414
 
ROM_END
415
 
 
416
 
 
417
 
/* ------------ inputs   ------------ */
418
 
 
419
 
static INPUT_PORTS_START ( to7_config )
420
 
     PORT_START ( "config" )
421
 
 
422
 
     PORT_CONFNAME ( 0x01, 0x00, "Game Port" )
423
 
     PORT_CONFSETTING ( 0x00, DEF_STR( Joystick ) )
424
 
     PORT_CONFSETTING ( 0x01, "Mouse" )
425
 
 
426
 
INPUT_PORTS_END
427
 
 
428
 
static INPUT_PORTS_START ( to7_vconfig )
429
 
     PORT_START ( "vconfig" )
430
 
 
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 ) )
435
 
 
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"  )
440
 
 
441
 
INPUT_PORTS_END
442
 
 
443
 
static INPUT_PORTS_START ( to7_mconfig )
444
 
     PORT_START ( "mconfig" )
445
 
 
446
 
     PORT_CONFNAME ( 0x01, 0x01, "E7FE-F port" )
447
 
     PORT_CONFSETTING ( 0x00, "Modem (unemulated)" )
448
 
     PORT_CONFSETTING ( 0x01, "Speech" )
449
 
 
450
 
INPUT_PORTS_END
451
 
 
452
 
static INPUT_PORTS_START ( to7_fconfig )
453
 
     PORT_START ( "fconfig" )
454
 
 
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" )
462
 
 
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" )
496
 
 
497
 
INPUT_PORTS_END
498
 
 
499
 
 
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('&')
567
 
 
568
 
     /* unused */
569
 
     PORT_START ( "keyboard_8" )
570
 
     PORT_START ( "keyboard_9" )
571
 
 
572
 
INPUT_PORTS_END
573
 
 
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 )
582
 
INPUT_PORTS_END
583
 
 
584
 
static INPUT_PORTS_START ( t9000 )
585
 
     PORT_INCLUDE ( to7 )
586
 
INPUT_PORTS_END
587
 
 
588
 
static const floppy_interface thomson_floppy_interface =
589
 
{
590
 
        DEVCB_LINE(thomson_index_callback),
591
 
        DEVCB_NULL,
592
 
        DEVCB_NULL,
593
 
        DEVCB_NULL,
594
 
        DEVCB_NULL,
595
 
        FLOPPY_STANDARD_5_25_DSHD,
596
 
        FLOPPY_OPTIONS_NAME(thomson),
597
 
        NULL,
598
 
        NULL
599
 
};
600
 
 
601
 
 
602
 
/********************* devices ************************/
603
 
const cassette_interface to7_cassette_interface =
604
 
{
605
 
        to7_cassette_formats,
606
 
        NULL,
607
 
        (cassette_state)(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED),
608
 
        NULL,
609
 
        NULL
610
 
};
611
 
 
612
 
const cassette_interface mo5_cassette_interface =
613
 
{
614
 
        mo5_cassette_formats,
615
 
        NULL,
616
 
        (cassette_state)(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED),
617
 
        NULL,
618
 
        NULL
619
 
};
620
 
 
621
 
/* ------------ driver ------------ */
622
 
 
623
 
static MACHINE_CONFIG_START( to7, driver_device )
624
 
 
625
 
     MCFG_MACHINE_START ( to7 )
626
 
     MCFG_MACHINE_RESET ( to7 )
627
 
 
628
 
/* cpu */
629
 
     MCFG_CPU_ADD ( "maincpu", M6809, 1000000 )
630
 
     MCFG_CPU_PROGRAM_MAP ( to7)
631
 
 
632
 
/* video */
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 )
641
 
 
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 )
646
 
 
647
 
/* sound */
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 */
655
 
 
656
 
/* printer */
657
 
     MCFG_CENTRONICS_ADD("centronics", to7_centronics_config)
658
 
 
659
 
/* cassette */
660
 
     MCFG_CASSETTE_ADD( CASSETTE_TAG, to7_cassette_interface )
661
 
 
662
 
/* timer */
663
 
     MCFG_MC6846_ADD( "mc6846", to7_timer )
664
 
 
665
 
/* speech synthesis */
666
 
     MCFG_MEA8000_ADD( "mea8000", to7_speech )
667
 
 
668
 
/* floppy */
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)
672
 
 
673
 
/* network */
674
 
     MCFG_MC6854_ADD( "mc6854", to7_network_iface )
675
 
 
676
 
/* pia */
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 )
681
 
 
682
 
/* acia */
683
 
     MCFG_ACIA6551_ADD("acia")
684
 
 
685
 
/* modem */
686
 
     MCFG_ACIA6850_ADD( "acia6850", to7_modem )
687
 
 
688
 
/* cartridge */
689
 
     MCFG_CARTSLOT_ADD("cart")
690
 
     MCFG_CARTSLOT_EXTENSION_LIST("m7,rom")
691
 
     MCFG_CARTSLOT_NOT_MANDATORY
692
 
     MCFG_CARTSLOT_LOAD(to7_cartridge)
693
 
 
694
 
/* internal ram */
695
 
        MCFG_RAM_ADD(RAM_TAG)
696
 
        MCFG_RAM_DEFAULT_SIZE("40K")
697
 
        MCFG_RAM_EXTRA_OPTIONS("24K,48K")
698
 
 
699
 
        MCFG_THOM_SERIAL_CC90323_ADD("cc90232")
700
 
        MCFG_THOM_SERIAL_RF57232_ADD("rf57932")
701
 
        MCFG_THOM_SERIAL_MODEM_ADD("modem")
702
 
MACHINE_CONFIG_END
703
 
 
704
 
static MACHINE_CONFIG_DERIVED( t9000, to7 )
705
 
MACHINE_CONFIG_END
706
 
 
707
 
 
708
 
COMP ( 1982, to7, 0, 0, to7, to7, 0,  "Thomson", "TO7", 0 )
709
 
 
710
 
COMP ( 1980, t9000, to7, 0, t9000, t9000,  0, "Thomson", "T9000", 0 )
711
 
 
712
 
 
713
 
/***************************** TO7/70 *********************************
714
 
 
715
 
TO7/70 ( 1984)
716
 
------
717
 
 
718
 
Enhanced TO7.
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
726
 
with all games.
727
 
 
728
 
It has the following modifications:
729
 
 
730
 
* chips:
731
 
  - custom logics for video, lightpen, address map has been replaced with an
732
 
    integrated Gate-Array (Motorola MC 1300 ALS)
733
 
 
734
 
* memory:
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)
739
 
 
740
 
* video:
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)
744
 
 
745
 
* devices:
746
 
  - lightpen management has changed, it now has 1-pixel horizontal resolution
747
 
  - keyboard management has changed (but the keys are the same)
748
 
 
749
 
 
750
 
TO7/70 arabic (198?)
751
 
-------------
752
 
 
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.
759
 
 
760
 
**********************************************************************/
761
 
 
762
 
static ADDRESS_MAP_START ( to770, AS_PROGRAM, 8 )
763
 
 
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,
775
 
                                                to770_gatearray_w )
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  */
782
 
 
783
 
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
784
 
/* 0x20000 - 0x247ff: 18 KB floppy / network ROM controllers */
785
 
 
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
790
 
 */
791
 
 
792
 
ADDRESS_MAP_END
793
 
 
794
 
 
795
 
 
796
 
/* ------------ ROMS ------------ */
797
 
 
798
 
ROM_START ( to770 )
799
 
     ROM_REGION ( 0x24800, "maincpu", 0 )
800
 
     ROM_LOAD ( "to770.rom", 0xe800, 0x1800, /* BIOS */
801
 
                CRC(89518862)
802
 
                SHA1(cd34474c0bcc758f6d71c90fbd40cef379d61374) )
803
 
     ROM_FLOPPY7 ( 0x20000 )
804
 
     ROM_FILL ( 0x10000, 0x10000, 0x39 )
805
 
ROM_END
806
 
 
807
 
ROM_START ( to770a )
808
 
     ROM_REGION ( 0x24800, "maincpu", 0 )
809
 
     ROM_LOAD ( "to770a.rom", 0xe800, 0x1800,
810
 
                CRC(378ea808)
811
 
                SHA1(f4575b537dfdb46ff2a0e7cbe8dfe4ba63161b8e) )
812
 
     ROM_FLOPPY7 ( 0x20000 )
813
 
     ROM_FILL ( 0x10000, 0x10000, 0x39 )
814
 
ROM_END
815
 
 
816
 
 
817
 
/* ------------ inputs   ------------ */
818
 
 
819
 
static INPUT_PORTS_START ( to770 )
820
 
     PORT_INCLUDE ( to7 )
821
 
 
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('&')
833
 
 
834
 
INPUT_PORTS_END
835
 
 
836
 
/* arabic version (QWERTY keyboard) */
837
 
static INPUT_PORTS_START ( to770a )
838
 
     PORT_INCLUDE ( to770 )
839
 
 
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('&')
862
 
 
863
 
INPUT_PORTS_END
864
 
 
865
 
 
866
 
/* ------------ driver ------------ */
867
 
 
868
 
static MACHINE_CONFIG_DERIVED( to770, to7 )
869
 
    MCFG_MACHINE_START ( to770 )
870
 
    MCFG_MACHINE_RESET ( to770 )
871
 
 
872
 
    MCFG_CPU_MODIFY( "maincpu" )
873
 
    MCFG_CPU_PROGRAM_MAP ( to770)
874
 
 
875
 
        MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to770_pia6821_sys )
876
 
 
877
 
    MCFG_MC6846_MODIFY( "mc6846", to770_timer )
878
 
 
879
 
        /* internal ram */
880
 
        MCFG_RAM_MODIFY(RAM_TAG)
881
 
        MCFG_RAM_DEFAULT_SIZE("128K")
882
 
        MCFG_RAM_EXTRA_OPTIONS("64K")
883
 
MACHINE_CONFIG_END
884
 
 
885
 
static MACHINE_CONFIG_DERIVED( to770a, to770 )
886
 
MACHINE_CONFIG_END
887
 
 
888
 
COMP ( 1984, to770, 0, 0, to770, to770, 0, "Thomson", "TO7/70", 0 )
889
 
 
890
 
COMP ( 1984, to770a, to770, 0, to770a, to770a, 0, "Thomson", "TO7/70 (Arabic)", 0 )
891
 
 
892
 
 
893
 
/************************* MO5 / MO5E *********************************
894
 
 
895
 
MO5 (1984)
896
 
---
897
 
 
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".
906
 
 
907
 
* chips:
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
911
 
 
912
 
* memory:
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
919
 
 
920
 
* video:
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)
924
 
 
925
 
* devices:
926
 
  - AZERTY keyboard, 58-keys, slightlty different from the TO7
927
 
    . the right SHIFT key has been replaced with a BASIC key
928
 
    . no caps-lock led
929
 
  - the famous lightpen is optional
930
 
  - cassette 1200 bauds (frequency signals: 0=4.5kHz, 1=6.3kHz),
931
 
    TO7-incompatible
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
937
 
 
938
 
MO5E (1986)
939
 
----
940
 
 
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.
944
 
Differences include:
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
948
 
 
949
 
 
950
 
**********************************************************************/
951
 
 
952
 
static ADDRESS_MAP_START ( mo5, AS_PROGRAM, 8 )
953
 
 
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,
963
 
                                                mo5_gatearray_w )
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 */
969
 
 
970
 
/* 0x10000 - 0x1ffff: 16 KB integrated BASIC / 64 KB external cartridge */
971
 
/* 0x20000 - 0x247ff: 18 KB floppy / network ROM controllers */
972
 
 
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
977
 
 */
978
 
 
979
 
ADDRESS_MAP_END
980
 
 
981
 
 
982
 
 
983
 
/* ------------ ROMS ------------ */
984
 
 
985
 
ROM_START ( mo5 )
986
 
     ROM_REGION ( 0x24800, "maincpu", 0 )
987
 
     ROM_LOAD ( "mo5.rom", 0xf000, 0x1000,
988
 
                CRC(f0ea9140)
989
 
                SHA1(36ce2d3df1866ec2fe368c1c28757e2f5401cf44) )
990
 
     ROM_LOAD ( "basic5.rom", 0x11000, 0x3000,
991
 
                CRC(c2c11b9d)
992
 
                SHA1(512dd40fb45bc2b51a24c84b3723a32bc8e80c06) )
993
 
     ROM_FLOPPY5 ( 0x20000 )
994
 
ROM_END
995
 
 
996
 
ROM_START ( mo5e )
997
 
     ROM_REGION ( 0x24800, "maincpu", 0 )
998
 
     ROM_LOAD ( "mo5e.rom", 0xf000, 0x1000,
999
 
                CRC(6520213a)
1000
 
                SHA1(f17a7a59baf2819ec80991b34b204795536a5e01) )
1001
 
     ROM_LOAD ( "basic5e.rom", 0x11000, 0x3000,
1002
 
                CRC(934a72b2)
1003
 
                SHA1(b37e2b1afbfba368c19be87b3bf61dfe6ad8b0bb) )
1004
 
     ROM_FLOPPY5 ( 0x20000 )
1005
 
ROM_END
1006
 
 
1007
 
 
1008
 
/* ------------ inputs  ------------ */
1009
 
 
1010
 
static INPUT_PORTS_START ( mo5 )
1011
 
     PORT_INCLUDE ( to770 )
1012
 
 
1013
 
     PORT_MODIFY ( "keyboard_0" )
1014
 
     KEY ( 1, "BASIC", RCONTROL)   PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
1015
 
     PORT_BIT  ( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
1016
 
 
1017
 
INPUT_PORTS_END
1018
 
 
1019
 
/* QWERTY version */
1020
 
static INPUT_PORTS_START ( mo5e )
1021
 
     PORT_INCLUDE ( mo5 )
1022
 
 
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('&')
1043
 
 
1044
 
INPUT_PORTS_END
1045
 
 
1046
 
/* ------------ driver ------------ */
1047
 
 
1048
 
static MACHINE_CONFIG_DERIVED( mo5, to7 )
1049
 
     MCFG_MACHINE_START ( mo5 )
1050
 
     MCFG_MACHINE_RESET ( mo5 )
1051
 
 
1052
 
     MCFG_CPU_MODIFY( "maincpu" )
1053
 
     MCFG_CPU_PROGRAM_MAP ( mo5)
1054
 
 
1055
 
     MCFG_CASSETTE_MODIFY( CASSETTE_TAG, mo5_cassette_interface )
1056
 
 
1057
 
     MCFG_DEVICE_REMOVE( "mc6846" )
1058
 
 
1059
 
        MCFG_PIA6821_MODIFY( THOM_PIA_SYS, mo5_pia6821_sys )
1060
 
 
1061
 
        MCFG_CARTSLOT_MODIFY("cart")
1062
 
        MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
1063
 
        MCFG_CARTSLOT_LOAD(mo5_cartridge)
1064
 
 
1065
 
        /* internal ram */
1066
 
        MCFG_RAM_MODIFY(RAM_TAG)
1067
 
        MCFG_RAM_DEFAULT_SIZE("112K")
1068
 
MACHINE_CONFIG_END
1069
 
 
1070
 
static MACHINE_CONFIG_DERIVED( mo5e, mo5 )
1071
 
MACHINE_CONFIG_END
1072
 
 
1073
 
 
1074
 
COMP ( 1984, mo5, 0, 0, mo5, mo5, 0, "Thomson", "MO5", 0 )
1075
 
 
1076
 
COMP ( 1986, mo5e, mo5, 0, mo5e, mo5e, 0, "Thomson", "MO5E", 0 )
1077
 
 
1078
 
 
1079
 
/********************************* TO9 *******************************
1080
 
 
1081
 
TO9 (1985)
1082
 
---
1083
 
 
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
1091
 
optional mouse.
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+.
1098
 
 
1099
 
* chips:
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)
1106
 
 
1107
 
* memory:
1108
 
  - 112 KB base RAM
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")
1114
 
  - 16 KB video RAM
1115
 
 
1116
 
* video:
1117
 
  - 8 video modes:
1118
 
    o 320x200, 16 colors with constraints (TO7/70 compatible)
1119
 
    o 320x200, 4 colors without constraints
1120
 
    o 160x200, 16 colors without constraints
1121
 
    o 640x200, 2 colors
1122
 
    o 320x200, 2 colors, two pages
1123
 
       . page one
1124
 
       . page two
1125
 
       . pages overlaid
1126
 
    o 160x200, 2 colors, four pages overlaid
1127
 
  - palette: 16 colors can be chosen among 4096
1128
 
 
1129
 
* devices:
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)
1141
 
  - floppy:
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
1148
 
 
1149
 
**********************************************************************/
1150
 
 
1151
 
static ADDRESS_MAP_START ( to9, AS_PROGRAM, 8 )
1152
 
 
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,
1165
 
                                                to9_gatearray_w )
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  */
1173
 
 
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 */
1177
 
 
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
1182
 
 */
1183
 
 
1184
 
ADDRESS_MAP_END
1185
 
 
1186
 
 
1187
 
 
1188
 
/* ------------ ROMS ------------ */
1189
 
 
1190
 
/* NOT WORKING
1191
 
   these bios seem heavily patched (probably to work with specific emulators
1192
 
   that trap some bios calls)
1193
 
 */
1194
 
 
1195
 
ROM_START ( to9 )
1196
 
     ROM_REGION ( 0x44800, "maincpu", 0 )
1197
 
     ROM_LOAD ( "to9.rom", 0xe000, 0x2000, /* BIOS & floppy controller */
1198
 
                CRC(f9278bf7)
1199
 
                SHA1(9e99e6ae0285950f007b19161de642a4031fe46e) )
1200
 
 
1201
 
     /* BASIC & software */
1202
 
     ROM_LOAD ( "basic9-0.rom", 0x20000, 0x4000,
1203
 
                CRC(c7bac620)
1204
 
                SHA1(4b2a8b30cf437858ce978ba7b0dfa2bbd57eb38a) )
1205
 
     ROM_LOAD ( "basic9-1.rom", 0x24000, 0x4000,
1206
 
                CRC(ea5f3e43)
1207
 
                SHA1(5e58a29c2d117fcdb1f5e7ca31dbfffa0f9218f2) )
1208
 
     ROM_LOAD ( "basic9-2.rom", 0x28000, 0x4000,
1209
 
                CRC(0f5581b3)
1210
 
                SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1211
 
     ROM_LOAD ( "basic9-3.rom", 0x2c000, 0x4000,
1212
 
                CRC(6b5b19e3)
1213
 
                SHA1(0e832670c185694d9abbcebcc3ad90e94eed585d) )
1214
 
     ROM_LOAD ( "soft9-0a.rom", 0x30000, 0x4000,
1215
 
                CRC(8cee157e)
1216
 
                SHA1(f32fc39b95890c00571e9f3fbcc2d8e0596fc4a1) )
1217
 
     ROM_LOAD ( "soft9-1a.rom", 0x34000, 0x4000,
1218
 
                CRC(cf39ac93)
1219
 
                SHA1(b97e6b7389398e5706624973c11ee7ddba323ce1) )
1220
 
     ROM_LOAD ( "soft9-0b.rom", 0x38000, 0x4000,
1221
 
                CRC(033aee3f)
1222
 
                SHA1(f3604e500329ec0489b05dbab05530322e9463c5) )
1223
 
     ROM_LOAD ( "soft9-1b.rom", 0x3c000, 0x4000,
1224
 
                CRC(214fe527)
1225
 
                SHA1(0d8e3f1ca347026e906c3d00a0371e8238c44a60) )
1226
 
 
1227
 
     ROM_FLOPPY7( 0x40000 )
1228
 
 
1229
 
     ROM_FILL( 0x10000, 0x10000, 0x39 )
1230
 
ROM_END
1231
 
 
1232
 
 
1233
 
/* ------------ inputs   ------------ */
1234
 
 
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('<')
1326
 
INPUT_PORTS_END
1327
 
 
1328
 
static INPUT_PORTS_START ( to9_fconfig )
1329
 
     PORT_START ( "fconfig" )
1330
 
 
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" )
1338
 
 
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" )
1372
 
 
1373
 
INPUT_PORTS_END
1374
 
 
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 )
1383
 
INPUT_PORTS_END
1384
 
 
1385
 
/* ------------ driver ------------ */
1386
 
 
1387
 
static MACHINE_CONFIG_DERIVED( to9, to7 )
1388
 
     MCFG_MACHINE_START ( to9 )
1389
 
     MCFG_MACHINE_RESET ( to9 )
1390
 
 
1391
 
     MCFG_CPU_MODIFY( "maincpu" )
1392
 
     MCFG_CPU_PROGRAM_MAP ( to9)
1393
 
 
1394
 
        MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to9_pia6821_sys )
1395
 
        MCFG_DEVICE_REMOVE( THOM_PIA_IO )
1396
 
 
1397
 
        MCFG_DEVICE_REMOVE("centronics")
1398
 
        MCFG_CENTRONICS_ADD("centronics", standard_centronics)
1399
 
 
1400
 
     MCFG_MC6846_MODIFY( "mc6846", to9_timer )
1401
 
 
1402
 
         /* internal ram */
1403
 
        MCFG_RAM_MODIFY(RAM_TAG)
1404
 
        MCFG_RAM_DEFAULT_SIZE("192K")
1405
 
        MCFG_RAM_EXTRA_OPTIONS("128K")
1406
 
MACHINE_CONFIG_END
1407
 
 
1408
 
 
1409
 
COMP ( 1985, to9, 0, 0, to9, to9, 0, "Thomson", "TO9", GAME_IMPERFECT_COLORS )
1410
 
 
1411
 
 
1412
 
/******************************** TO8 ********************************
1413
 
 
1414
 
TO8 (1986)
1415
 
---
1416
 
 
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
1424
 
extent.
1425
 
The TO8 was quite popular and became the de-facto gamming computer in the
1426
 
Thomson family.
1427
 
 
1428
 
* chips:
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)
1434
 
 
1435
 
* memory:
1436
 
  - 256 KB base RAM
1437
 
    + 256 KB extended RAM (EM 88-256) = 512 KB total RAM emulated
1438
 
  - 16 KB BIOS ROM
1439
 
  - 64 KB software ROM (BASIC 1, BASIC 512, extended BIOS)
1440
 
  - unified memory view via improved bank switching
1441
 
 
1442
 
* video:
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
1445
 
 
1446
 
* devices:
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?)
1458
 
  - IEEE extension ?
1459
 
  - floppy:
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
1466
 
 
1467
 
TO8D (1987)
1468
 
----
1469
 
 
1470
 
The TO8D is simply a TO8 with an integrated 3"1/2 floppy drive.
1471
 
 
1472
 
**********************************************************************/
1473
 
 
1474
 
 
1475
 
static ADDRESS_MAP_START ( to8, AS_PROGRAM, 8 )
1476
 
 
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,
1490
 
                                                to8_gatearray_w )
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 */
1498
 
 
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 */
1503
 
 
1504
 
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 512 KB flat (including video) */
1505
 
 
1506
 
ADDRESS_MAP_END
1507
 
 
1508
 
 
1509
 
/* ------------ ROMS ------------ */
1510
 
 
1511
 
ROM_START ( to8 )
1512
 
     ROM_REGION ( 0x38800, "maincpu", 0 )
1513
 
 
1514
 
     /* BIOS & floppy */
1515
 
     ROM_LOAD ( "to8-0.rom", 0x30000, 0x2000,
1516
 
                CRC(3c4a640a)
1517
 
                SHA1(0a4952f0ca002d82ac83755e1f694d56399413b2) )
1518
 
     ROM_LOAD ( "to8-1.rom", 0x32000, 0x2000,
1519
 
                CRC(cb9bae2d)
1520
 
                SHA1(a4a55a6e2c74bca15951158c5164970e922fc1c1) )
1521
 
 
1522
 
     /* BASIC */
1523
 
     ROM_LOAD ( "basic8-0.rom", 0x20000, 0x4000,
1524
 
                CRC(e5a00fb3)
1525
 
                SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
1526
 
     ROM_LOAD ( "basic8-1.rom", 0x24000, 0x4000,
1527
 
                CRC(4b241e63)
1528
 
                SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
1529
 
     ROM_LOAD ( "basic8-2.rom", 0x28000, 0x4000,
1530
 
                CRC(0f5581b3)
1531
 
                SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1532
 
     ROM_LOAD ( "basic8-3.rom", 0x2c000, 0x4000,
1533
 
                CRC(f552e7e3)
1534
 
                SHA1(3208e0d7d90241a327ed24e4921303f16e167bd5) )
1535
 
 
1536
 
     ROM_FLOPPY7( 0x34000 )
1537
 
 
1538
 
     ROM_FILL( 0x10000, 0x10000, 0x39 )
1539
 
ROM_END
1540
 
 
1541
 
ROM_START ( to8d )
1542
 
     ROM_REGION ( 0x38800, "maincpu", 0 )
1543
 
 
1544
 
     /* BIOS & floppy */
1545
 
     ROM_LOAD ( "to8d-0.rom", 0x30000, 0x2000,
1546
 
                CRC(30ea4950)
1547
 
                SHA1(6705100cd337fffb26ce999302b55fb71557b128) )
1548
 
     ROM_LOAD ( "to8d-1.rom", 0x32000, 0x2000,
1549
 
                CRC(926cf0ca)
1550
 
                SHA1(8521613ac00e04dd94b69e771aeaefbf4fe97bf7) )
1551
 
 
1552
 
     /* BASIC */
1553
 
     ROM_LOAD ( "basic8-0.rom", 0x20000, 0x4000,
1554
 
                CRC(e5a00fb3)
1555
 
                SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
1556
 
     ROM_LOAD ( "basic8-1.rom", 0x24000, 0x4000,
1557
 
                CRC(4b241e63)
1558
 
                SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
1559
 
     ROM_LOAD ( "basic8-2.rom", 0x28000, 0x4000,
1560
 
                CRC(0f5581b3)
1561
 
                SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1562
 
     ROM_LOAD ( "basic8-3.rom", 0x2c000, 0x4000,
1563
 
                CRC(f552e7e3)
1564
 
                SHA1(3208e0d7d90241a327ed24e4921303f16e167bd5) )
1565
 
 
1566
 
     ROM_FLOPPY7( 0x34000 )
1567
 
 
1568
 
     ROM_FILL( 0x10000, 0x10000, 0x39 )
1569
 
ROM_END
1570
 
 
1571
 
 
1572
 
/* ------------ inputs   ------------ */
1573
 
 
1574
 
static INPUT_PORTS_START ( to8_config )
1575
 
     PORT_START ( "config" )
1576
 
 
1577
 
     PORT_CONFNAME ( 0x01, 0x00, "Game Port" )
1578
 
     PORT_CONFSETTING ( 0x00, DEF_STR( Joystick ) )
1579
 
     PORT_CONFSETTING ( 0x01, "Mouse" )
1580
 
 
1581
 
     PORT_CONFNAME ( 0x02, 0x00, "Keyboard" )
1582
 
     PORT_CONFSETTING ( 0x00, "Enabled" )
1583
 
     PORT_CONFSETTING ( 0x02, "Disabled" )
1584
 
 
1585
 
INPUT_PORTS_END
1586
 
 
1587
 
 
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 )
1596
 
INPUT_PORTS_END
1597
 
 
1598
 
 
1599
 
static INPUT_PORTS_START ( to8d )
1600
 
     PORT_INCLUDE ( to8 )
1601
 
INPUT_PORTS_END
1602
 
 
1603
 
/* ------------ driver ------------ */
1604
 
 
1605
 
static MACHINE_CONFIG_DERIVED( to8, to7 )
1606
 
     MCFG_MACHINE_START ( to8 )
1607
 
     MCFG_MACHINE_RESET ( to8 )
1608
 
 
1609
 
     MCFG_CPU_MODIFY( "maincpu" )
1610
 
     MCFG_CPU_PROGRAM_MAP ( to8)
1611
 
 
1612
 
        MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to8_pia6821_sys )
1613
 
        MCFG_DEVICE_REMOVE( THOM_PIA_IO )
1614
 
 
1615
 
        MCFG_DEVICE_REMOVE("centronics")
1616
 
        MCFG_CENTRONICS_ADD("centronics", standard_centronics)
1617
 
 
1618
 
     MCFG_MC6846_MODIFY( "mc6846", to8_timer )
1619
 
 
1620
 
         /* internal ram */
1621
 
        MCFG_RAM_MODIFY(RAM_TAG)
1622
 
        MCFG_RAM_DEFAULT_SIZE("512K")
1623
 
        MCFG_RAM_EXTRA_OPTIONS("256K")
1624
 
MACHINE_CONFIG_END
1625
 
 
1626
 
static MACHINE_CONFIG_DERIVED( to8d, to8 )
1627
 
MACHINE_CONFIG_END
1628
 
 
1629
 
 
1630
 
COMP ( 1986, to8, 0, 0, to8, to8, 0, "Thomson", "TO8", 0 )
1631
 
 
1632
 
COMP ( 1987, to8d, to8, 0, to8d, to8d, 0, "Thomson", "TO8D", 0 )
1633
 
 
1634
 
 
1635
 
/******************************** TO9+ *******************************
1636
 
 
1637
 
TO9+ (1986)
1638
 
----
1639
 
 
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
1643
 
floppies.
1644
 
Internally, the TO9+ is based more on TO8 technology than T09
1645
 
(same gate-arrays).
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
1649
 
and TO8.
1650
 
It uses the same video gate-array and floppy controller.
1651
 
 
1652
 
The differences with the TO8 are:
1653
 
 
1654
 
* chips:
1655
 
  - 1 Motorola 6805 + 1 Motorola 6850 (keyboard)
1656
 
  - 3 Motorola 6821 PIAs (system, game, modem)
1657
 
 
1658
 
* memory:
1659
 
  - 512 KB RAM (not extendable)
1660
 
 
1661
 
* devices:
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
1665
 
  - IEEE extension ?
1666
 
  - floppy: one two-sided double-density 3''1/2 floppy drive is integrated
1667
 
  - RS 52-932 RS232 extension ?
1668
 
  - digitisation extension
1669
 
 
1670
 
**********************************************************************/
1671
 
 
1672
 
static ADDRESS_MAP_START ( to9p, AS_PROGRAM, 8 )
1673
 
 
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,
1688
 
                                                to8_gatearray_w )
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 */
1696
 
 
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 */
1701
 
 
1702
 
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 512 KB flat (including video) */
1703
 
 
1704
 
ADDRESS_MAP_END
1705
 
 
1706
 
 
1707
 
/* ------------ ROMS ------------ */
1708
 
 
1709
 
ROM_START ( to9p )
1710
 
     ROM_REGION ( 0x38800, "maincpu", 0 )
1711
 
 
1712
 
     /* BIOS & floppy */
1713
 
     ROM_LOAD ( "to9p-0.rom", 0x30000, 0x2000,
1714
 
                CRC(a2731296)
1715
 
                SHA1(b30e06127d6e99d4ac5a5bb67881df27bbd9a7e5) )
1716
 
     ROM_LOAD ( "to9p-1.rom", 0x32000, 0x2000,
1717
 
                CRC(c52ce315)
1718
 
                SHA1(7eacbd796e76bc72b872f9700c9b90414899ea0f) )
1719
 
 
1720
 
     /* BASIC */
1721
 
     ROM_LOAD ( "basicp-0.rom", 0x20000, 0x4000,
1722
 
                CRC(e5a00fb3)
1723
 
                SHA1(281e535ed9b0f76e620253e9103292b8ff623d02) )
1724
 
     ROM_LOAD ( "basicp-1.rom", 0x24000, 0x4000,
1725
 
                CRC(4b241e63)
1726
 
                SHA1(ca8941a10db6cc069bf84c773f5e7d7d2c18449e) )
1727
 
     ROM_LOAD ( "basicp-2.rom", 0x28000, 0x4000,
1728
 
                CRC(0f5581b3)
1729
 
                SHA1(93815ca78d3532192aaa56cbf65b68b0f10f1b8a) )
1730
 
     ROM_LOAD ( "basicp-3.rom", 0x2c000, 0x4000,
1731
 
                CRC(ebe9c8d9)
1732
 
                SHA1(b667ad09a1181f65059a2cbb4c95421bc544a334) )
1733
 
 
1734
 
     ROM_FLOPPY7( 0x34000 )
1735
 
 
1736
 
     ROM_FILL( 0x10000, 0x10000, 0x39 )
1737
 
ROM_END
1738
 
 
1739
 
 
1740
 
/* ------------ inputs   ------------ */
1741
 
 
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 )
1750
 
INPUT_PORTS_END
1751
 
 
1752
 
/* ------------ driver ------------ */
1753
 
 
1754
 
static MACHINE_CONFIG_DERIVED( to9p, to7 )
1755
 
     MCFG_MACHINE_START ( to9p )
1756
 
     MCFG_MACHINE_RESET ( to9p )
1757
 
 
1758
 
     MCFG_CPU_MODIFY( "maincpu" )
1759
 
     MCFG_CPU_PROGRAM_MAP ( to9p)
1760
 
 
1761
 
        MCFG_PIA6821_MODIFY( THOM_PIA_SYS, to9p_pia6821_sys )
1762
 
        MCFG_DEVICE_REMOVE( THOM_PIA_IO )
1763
 
 
1764
 
        MCFG_DEVICE_REMOVE("centronics")
1765
 
        MCFG_CENTRONICS_ADD("centronics", standard_centronics)
1766
 
 
1767
 
     MCFG_MC6846_MODIFY( "mc6846", to9p_timer )
1768
 
 
1769
 
        /* internal ram */
1770
 
        MCFG_RAM_MODIFY(RAM_TAG)
1771
 
        MCFG_RAM_DEFAULT_SIZE("512K")
1772
 
MACHINE_CONFIG_END
1773
 
 
1774
 
COMP ( 1986, to9p, 0, 0, to9p, to9p, 0, "Thomson", "TO9+", 0 )
1775
 
 
1776
 
 
1777
 
 
1778
 
/******************************** MO6 ********************************
1779
 
 
1780
 
MO6 (1986)
1781
 
---
1782
 
 
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.
1788
 
 
1789
 
* chips:
1790
 
  - 1 MHz Motorola 6809E CPU
1791
 
  - 2 Motorola 6821 PIAs (system, game)
1792
 
  - 1 gate-array (system & video, identical to the TO8)
1793
 
 
1794
 
* memory:
1795
 
  - 128 KB RAM (not extendable)
1796
 
  - 8 KB BIOS ROM
1797
 
  - 24 KB BASIC 1 ROM
1798
 
  - 32 KB BASIC 128 & extended BIOS ROM
1799
 
 
1800
 
* video:
1801
 
  all modes from the TO8, but the TO7/70-compatible mode is replaced with
1802
 
  an MO5-compatible one
1803
 
 
1804
 
* devices:
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)
1809
 
  - optional lightpen
1810
 
  - integrated game port (similar to SX 90-018)
1811
 
    . 6-bit DAC sound
1812
 
    . two 8-position 2-button game pads
1813
 
    . two-button mouse
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 (???)
1817
 
  - IEEE extension ?
1818
 
  - no integrated controller, but external TO7 floppy controllers & drives
1819
 
    are possible
1820
 
  - speech synthesis extension: identical to TO7 ?
1821
 
  - MIDIPAK MIDI extension: identical to TO7 ?
1822
 
 
1823
 
 
1824
 
Olivetti Prodest PC 128 (1986)
1825
 
-----------------------
1826
 
 
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
1831
 
a PC XT.
1832
 
 
1833
 
 
1834
 
**********************************************************************/
1835
 
 
1836
 
static ADDRESS_MAP_START ( mo6, AS_PROGRAM, 8 )
1837
 
 
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,
1850
 
                                                mo6_gatearray_w )
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 )
1858
 
 
1859
 
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
1860
 
/* 0x20000 - 0x2ffff: 64 KB BIOS ROM */
1861
 
/* 0x30000 - 0x347ff: 16 KB floppy / network ROM controllers */
1862
 
 
1863
 
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 128 KB flat (including video) */
1864
 
 
1865
 
ADDRESS_MAP_END
1866
 
 
1867
 
 
1868
 
/* ------------ ROMS ------------ */
1869
 
 
1870
 
ROM_START ( mo6 )
1871
 
     ROM_REGION ( 0x34800, "maincpu", 0 )
1872
 
 
1873
 
     /* BIOS */
1874
 
     ROM_LOAD ( "mo6-0.rom", 0x23000, 0x1000,
1875
 
                CRC(0446eef6)
1876
 
                SHA1(b57fcda69c95f0c97c5cb0605d17c49a0c630300) )
1877
 
     ROM_LOAD ( "mo6-1.rom", 0x27000, 0x1000,
1878
 
                CRC(eb6df8d4)
1879
 
                SHA1(24e2232f582ce04f260acd8e9ec710468a81505c) )
1880
 
 
1881
 
     /* BASIC */
1882
 
     ROM_LOAD ( "basic6-0.rom", 0x20000, 0x3000,
1883
 
                CRC(18789833)
1884
 
                SHA1(fccbf69cbc6deba45a767a26cd6454cf0eedfc2b) )
1885
 
     ROM_LOAD ( "basic6-1.rom", 0x24000, 0x3000,
1886
 
                CRC(c9b4d6f4)
1887
 
                SHA1(47487d2bc4c9a9c09c733bd89c49693c52e262de) )
1888
 
     ROM_LOAD ( "basic6-2.rom", 0x28000, 0x4000,
1889
 
                CRC(08eac9bb)
1890
 
                SHA1(c0231fdb3bcccbbb10c1f93cc529fc3b96dd3f4d) )
1891
 
     ROM_LOAD ( "basic6-3.rom", 0x2c000, 0x4000,
1892
 
                CRC(19d66dc4)
1893
 
                SHA1(301b6366269181b74cb5d7ccdf5455b7290ae99b) )
1894
 
 
1895
 
     ROM_FLOPPY5 ( 0x30000 )
1896
 
     ROM_FILL ( 0x10000, 0x10000, 0x39 )
1897
 
ROM_END
1898
 
 
1899
 
ROM_START ( pro128 )
1900
 
     ROM_REGION ( 0x34800, "maincpu", 0 )
1901
 
 
1902
 
     /* BIOS */
1903
 
     ROM_LOAD ( "pro128-0.rom", 0x23000, 0x1000,
1904
 
                CRC(a8aef291)
1905
 
                SHA1(2685cca841f405a37ef48b0115f90c865ce79d0f) )
1906
 
     ROM_LOAD ( "pro128-1.rom", 0x27000, 0x1000,
1907
 
                CRC(5b3340ec)
1908
 
                SHA1(269f2eb3e3452014b8d1f0f9e1c63fe56375a863) )
1909
 
 
1910
 
     /* BASIC */
1911
 
     ROM_LOAD ( "basico-0.rom", 0x20000, 0x3000,
1912
 
                CRC(98b10d5e)
1913
 
                SHA1(d6b77e694fa85e1114293448e5a64f6e2cf46c22) )
1914
 
     ROM_LOAD ( "basico-1.rom", 0x24000, 0x3000,
1915
 
                CRC(721d2124)
1916
 
                SHA1(51db1cd03b3891e212a24aa6563b09968930d897) )
1917
 
     ROM_LOAD ( "basico-2.rom", 0x28000, 0x4000,
1918
 
                CRC(135438ab)
1919
 
                SHA1(617d4e4979842bea2c21ef7f8c50f3b08b15239a) )
1920
 
     ROM_LOAD ( "basico-3.rom", 0x2c000, 0x4000,
1921
 
                CRC(2c2befa6)
1922
 
                SHA1(3e94e182bacbb55bb07be2af4c76c0b0df47b3bf) )
1923
 
 
1924
 
     ROM_FLOPPY5 ( 0x30000 )
1925
 
     ROM_FILL ( 0x10000, 0x10000, 0x39 )
1926
 
ROM_END
1927
 
 
1928
 
 
1929
 
/* ------------ inputs   ------------ */
1930
 
 
1931
 
static INPUT_PORTS_START ( mo6_keyboard )
1932
 
 
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 )
2012
 
 
2013
 
     /* unused */
2014
 
     PORT_START ( "keyboard_9" )
2015
 
 
2016
 
INPUT_PORTS_END
2017
 
 
2018
 
/* QWERTY version */
2019
 
static INPUT_PORTS_START ( pro128_keyboard )
2020
 
     PORT_INCLUDE ( mo6_keyboard )
2021
 
 
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 )
2060
 
 
2061
 
INPUT_PORTS_END
2062
 
 
2063
 
 
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 )
2071
 
INPUT_PORTS_END
2072
 
 
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 )
2080
 
INPUT_PORTS_END
2081
 
 
2082
 
 
2083
 
/* ------------ driver ------------ */
2084
 
 
2085
 
static MACHINE_CONFIG_DERIVED( mo6, to7 )
2086
 
     MCFG_MACHINE_START ( mo6 )
2087
 
     MCFG_MACHINE_RESET ( mo6 )
2088
 
 
2089
 
     MCFG_CPU_MODIFY( "maincpu" )
2090
 
     MCFG_CPU_PROGRAM_MAP ( mo6)
2091
 
 
2092
 
     MCFG_DEVICE_REMOVE( "mc6846" )
2093
 
 
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 )
2097
 
 
2098
 
        MCFG_DEVICE_REMOVE("centronics")
2099
 
        MCFG_CENTRONICS_ADD("centronics", mo6_centronics_config)
2100
 
 
2101
 
        MCFG_CARTSLOT_MODIFY("cart")
2102
 
        MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
2103
 
        MCFG_CARTSLOT_LOAD(mo5_cartridge)
2104
 
 
2105
 
        /* internal ram */
2106
 
        MCFG_RAM_MODIFY(RAM_TAG)
2107
 
        MCFG_RAM_DEFAULT_SIZE("128K")
2108
 
MACHINE_CONFIG_END
2109
 
 
2110
 
static MACHINE_CONFIG_DERIVED( pro128, mo6 )
2111
 
MACHINE_CONFIG_END
2112
 
 
2113
 
COMP ( 1986, mo6, 0, 0, mo6, mo6, 0, "Thomson", "MO6", 0 )
2114
 
 
2115
 
COMP ( 1986, pro128, mo6, 0, pro128, pro128, 0, "Olivetti / Thomson", "Prodest PC 128", 0 )
2116
 
 
2117
 
 
2118
 
 
2119
 
 
2120
 
/****************************** MO5NR ********************************
2121
 
 
2122
 
MO5 NR (1986)
2123
 
------
2124
 
 
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).
2128
 
 
2129
 
Here are the differences between the MO6 and MO5NR:
2130
 
 
2131
 
* chips:
2132
 
  - integrated MC 6854 network controller
2133
 
 
2134
 
* memory:
2135
 
  - extra 2 KB ROM for the integrated network controller,
2136
 
    can be masked by the ROM from the external floppy controller
2137
 
 
2138
 
* video: identical
2139
 
 
2140
 
* devices:
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
2145
 
 
2146
 
**********************************************************************/
2147
 
 
2148
 
static ADDRESS_MAP_START ( mo5nr, AS_PROGRAM, 8 )
2149
 
 
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,
2164
 
                                                mo6_gatearray_w )
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 )
2172
 
 
2173
 
/* 0x10000 - 0x1ffff: 64 KB external ROM cartridge */
2174
 
/* 0x20000 - 0x2ffff: 64 KB BIOS ROM */
2175
 
/* 0x30000 - 0x347ff: 16 KB floppy / network ROM controllers */
2176
 
 
2177
 
/* ram_get_ptr(machine.device(RAM_TAG)) mapping: 128 KB flat (including video) */
2178
 
 
2179
 
ADDRESS_MAP_END
2180
 
 
2181
 
 
2182
 
/* ------------ ROMS ------------ */
2183
 
 
2184
 
ROM_START ( mo5nr )
2185
 
     ROM_REGION ( 0x34800, "maincpu", 0 )
2186
 
 
2187
 
     /* BIOS */
2188
 
     ROM_LOAD ( "mo5nr-0.rom", 0x23000, 0x1000,
2189
 
                CRC(06e31115)
2190
 
                SHA1(7429cc0c15475398b5ab514cb3d3efdc71cf082f) )
2191
 
     ROM_LOAD ( "mo5nr-1.rom", 0x27000, 0x1000,
2192
 
                CRC(7cda17c9)
2193
 
                SHA1(2ff6480ce9e30acc4c89b6113d7c8ea6095d90a5) )
2194
 
 
2195
 
     /* BASIC */
2196
 
     ROM_LOAD ( "basicn-0.rom", 0x20000, 0x3000,
2197
 
                CRC(fae9e691)
2198
 
                SHA1(62fbfd6d4ca837f6cb8ed37f828eca97f80e6200) )
2199
 
     ROM_LOAD ( "basicn-1.rom", 0x24000, 0x3000,
2200
 
                CRC(cf134dd7)
2201
 
                SHA1(1bd961314e16e460d37a65f5e7f4acf5604fbb17) )
2202
 
     ROM_LOAD ( "basicn-2.rom", 0x28000, 0x4000,
2203
 
                CRC(b69d2e0d)
2204
 
                SHA1(ea3220bbae991e08259d38a7ea24533b2bb86418) )
2205
 
     ROM_LOAD ( "basicn-3.rom", 0x2c000, 0x4000,
2206
 
                CRC(7785610f)
2207
 
                SHA1(c38b0be404d8af6f409a1b52cb79a4e10fc33177) )
2208
 
 
2209
 
     ROM_FLOPPY5 ( 0x30000 )
2210
 
     ROM_FILL ( 0x10000, 0x10000, 0x39 ) /* TODO: network ROM */
2211
 
ROM_END
2212
 
 
2213
 
 
2214
 
 
2215
 
 
2216
 
/* ------------ inputs   ------------ */
2217
 
 
2218
 
static INPUT_PORTS_START ( mo5nr_keyboard )
2219
 
 
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 )
2292
 
 
2293
 
     /* unused */
2294
 
     PORT_START ( "keyboard_8" )
2295
 
     PORT_START ( "keyboard_9" )
2296
 
 
2297
 
INPUT_PORTS_END
2298
 
 
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 )
2306
 
INPUT_PORTS_END
2307
 
 
2308
 
 
2309
 
/* ------------ driver ------------ */
2310
 
 
2311
 
static MACHINE_CONFIG_DERIVED( mo5nr, to7 )
2312
 
     MCFG_MACHINE_START ( mo5nr )
2313
 
     MCFG_MACHINE_RESET ( mo5nr )
2314
 
 
2315
 
     MCFG_CPU_MODIFY( "maincpu" )
2316
 
     MCFG_CPU_PROGRAM_MAP ( mo5nr)
2317
 
 
2318
 
     MCFG_DEVICE_REMOVE( "mc6846" )
2319
 
 
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 )
2323
 
 
2324
 
        MCFG_DEVICE_REMOVE("centronics")
2325
 
        MCFG_CENTRONICS_ADD("centronics", standard_centronics)
2326
 
 
2327
 
        MCFG_CARTSLOT_MODIFY("cart")
2328
 
        MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
2329
 
        MCFG_CARTSLOT_LOAD(mo5_cartridge)
2330
 
 
2331
 
        /* internal ram */
2332
 
        MCFG_RAM_MODIFY(RAM_TAG)
2333
 
        MCFG_RAM_DEFAULT_SIZE("128K")
2334
 
MACHINE_CONFIG_END
2335
 
 
2336
 
COMP ( 1986, mo5nr, 0, 0, mo5nr, mo5nr, 0, "Thomson", "MO5 NR", 0 )