Previous 15994 Revisions Next

r4641 Wednesday 6th May, 2009 at 18:24:45 UTC by Fabio Priuli
Added Amiga 1200 & CD32 [incog & myself]
[docs]messnew.txt
[src/mess]mess.mak messdriv.c
[src/mess/drivers]ami1200.c*

src/mess/messdriv.c
r4640r4641
411411   DRIVER( a500p )      /* Commodore Amiga 500 - PAL                  */
412412   DRIVER( a1000n )   /* Commodore Amiga 1000 - NTSC                  */
413413   DRIVER( a1000p )   /* Commodore Amiga 1000 - PAL                  */
414   DRIVER( cdtv )
414   DRIVER( cdtv )      /* Commodore CDTV                           */
415   DRIVER( a1200n )   /* Commodore Amiga 1200 - NTSC                  */
416   DRIVER( a1200p )   /* Commodore Amiga 1200 - PAL                  */
417   DRIVER( cd32 )      /* Commodore Amiga CD32                        */
415418
416419   DRIVER( c65 )      /* 1991 C65 / C64DX (Prototype, NTSC)            */
417420   DRIVER( c64dx )      /* 1991 C65 / C64DX (Prototype, German PAL)         */
src/mess/mess.mak
r4640r4641
523523   $(MESS_MACHINE)/matsucd.o   \
524524   $(MESS_MACHINE)/amigakbd.o   \
525525   $(MESS_DRIVERS)/amiga.o      \
526   $(MAME_MACHINE)/cubocd32.o   \
527   $(MESS_DRIVERS)/ami1200.o   \
526528
527529$(MESSOBJ)/cbmshare.a: \
528530   $(MESS_FORMATS)/cbm_tap.o    \
src/mess/drivers/ami1200.c
r0r4641
1/*
2    Amiga 1200 / CD32
3
4    Preliminary MAME driver by Mariusz Wojcieszek
5    CD-ROM controller by Ernesto Corvi
6    Borrowed by incog for MESS
7
8
9    Several of the games have Audio tracks, therefore the CRC / SHA1 information you get when
10    reading your own CDs may not match confirmed dumps.  There is currently no 100% accurate
11    way to rip the audio data with full sub-track and offset information.
12
13    CD32 Hardware Specs (from Wikipedia, http://en.wikipedia.org/wiki/Amiga_CD32)
14     * Main Processor: Motorola 68EC020 at 14.3 MHz
15     * System Memory: 2 MB Chip RAM
16     * 1 MB ROM with Kickstart ROM 3.1 and integrated cdfs.filesystem
17     * 1KB of FlashROM for game saves
18     * Graphics/Chipset: AGA Chipset
19     * Akiko chip, which handles CD-ROM and can do Chunky to Planar conversion
20     * Proprietary (MKE) CD-ROM drive at 2x speed
21     * Expansion socket for MPEG cartridge, as well as 3rd party devices such as the SX-1 and SX32 expansion packs.
22     * 4 8-bit audio channels (2 for left, 2 for right)
23     * Gamepad, Serial port, 2 Gameports, Interfaces for keyboard
24
25   2009-05 Fabio Priuli:
26   Amiga 1200 support is just sketched (I basically took cd32 and removed Akiko). I connected
27   the floppy drive in the same way as in amiga.c but it seems to be not working, since I
28   tried to load WB3.1 with no success. However, this problem may be due to anything: maybe
29   the floppy code must be connected elsewhere, or the .adf image is broken, or I made some
30   stupid mistake in the CIA interfaces.
31   Later, it could be wise to re-factor this source and merge the non-AGA code with
32   mess/drivers/amiga.c
33*/
34
35#include "driver.h"
36#include "cpu/m68000/m68000.h"
37#include "machine/6526cia.h"
38
39#include "machine/amigafdc.h"
40#include "machine/amigakbd.h"
41
42#include "sound/cdda.h"
43#include "includes/amiga.h"
44#include "includes/cubocd32.h"
45#include "devices/chd_cd.h"
46
47static void handle_cd32_joystick_cia(UINT8 pra, UINT8 dra);
48
49static WRITE32_HANDLER( aga_overlay_w )
50{
51   if (ACCESSING_BITS_16_23)
52   {
53      data = (data >> 16) & 1;
54
55      /* switch banks as appropriate */
56      memory_set_bank(space->machine, 1, data & 1);
57
58      /* swap the write handlers between ROM and bank 1 based on the bit */
59      if ((data & 1) == 0)
60         /* overlay disabled, map RAM on 0x000000 */
61         memory_install_write32_handler(space, 0x000000, 0x1fffff, 0, 0, SMH_BANK1);
62      else
63         /* overlay enabled, map Amiga system ROM on 0x000000 */
64         memory_install_write32_handler(space, 0x000000, 0x1fffff, 0, 0, SMH_UNMAP);
65   }
66}
67
68/*************************************
69 *
70 *  CIA-A port A access:
71 *
72 *  PA7 = game port 1, pin 6 (fire)
73 *  PA6 = game port 0, pin 6 (fire)
74 *  PA5 = /RDY (disk ready)
75 *  PA4 = /TK0 (disk track 00)
76 *  PA3 = /WPRO (disk write protect)
77 *  PA2 = /CHNG (disk change)
78 *  PA1 = /LED (LED, 0=bright / audio filter control)
79 *  PA0 = MUTE
80 *
81 *************************************/
82
83static WRITE8_DEVICE_HANDLER( cd32_cia_0_porta_w )
84{
85   /* bit 1 = cd audio mute */
86   sound_set_output_gain(devtag_get_device(device->machine, "cdda"), 0, ( data & 1 ) ? 0.0 : 1.0 );
87
88   /* bit 2 = Power Led on Amiga */
89   set_led_status(0, (data & 2) ? 0 : 1);
90
91   handle_cd32_joystick_cia(data, cia_r(device, 2));
92}
93
94/*************************************
95 *
96 *  CIA-A port B access:
97 *
98 *  PB7 = parallel data 7
99 *  PB6 = parallel data 6
100 *  PB5 = parallel data 5
101 *  PB4 = parallel data 4
102 *  PB3 = parallel data 3
103 *  PB2 = parallel data 2
104 *  PB1 = parallel data 1
105 *  PB0 = parallel data 0
106 *
107 *************************************/
108
109static READ8_DEVICE_HANDLER( cd32_cia_0_portb_r )
110{
111   /* parallel port */
112   logerror("%s:CIA0_portb_r\n", cpuexec_describe_context(device->machine));
113   return 0xff;
114}
115
116static WRITE8_DEVICE_HANDLER( cd32_cia_0_portb_w )
117{
118   /* parallel port */
119   logerror("%s:CIA0_portb_w(%02x)\n", cpuexec_describe_context(device->machine), data);
120}
121
122static ADDRESS_MAP_START( a1200_map, ADDRESS_SPACE_PROGRAM, 32 )
123   ADDRESS_MAP_UNMAP_HIGH
124   AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK(1) AM_BASE(&amiga_chip_ram32) AM_SIZE(&amiga_chip_ram_size)
125   AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w)
126   AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16(amiga_cia_r, amiga_cia_w, 0xffffffff)
127   AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_BASE((UINT32**)&amiga_custom_regs)
128   AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff)
129   AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0)   /* Kickstart */
130ADDRESS_MAP_END
131
132static ADDRESS_MAP_START( cd32_map, ADDRESS_SPACE_PROGRAM, 32 )
133   ADDRESS_MAP_UNMAP_HIGH
134   AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK(1) AM_BASE(&amiga_chip_ram32) AM_SIZE(&amiga_chip_ram_size)
135   AM_RANGE(0xb80000, 0xb8003f) AM_READWRITE(amiga_akiko32_r, amiga_akiko32_w)
136   AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w)
137   AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16(amiga_cia_r, amiga_cia_w, 0xffffffff)
138   AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_BASE((UINT32**)&amiga_custom_regs)
139   AM_RANGE(0xe00000, 0xe7ffff) AM_ROM AM_REGION("user1", 0x80000)   /* CD32 Extended ROM */
140   AM_RANGE(0xa00000, 0xf7ffff) AM_NOP
141   AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0x0)      /* Kickstart */
142ADDRESS_MAP_END
143
144int cd32_input_port_val = 0;
145int cd32_input_select = 0;
146UINT16 potgo_value = 0;
147int cd32_shifter[2];
148
149static void cd32_potgo_w(running_machine *machine, UINT16 data)
150{
151   int i;
152
153   potgo_value = potgo_value & 0x5500;
154   potgo_value |= data & 0xaa00;
155
156    for (i = 0; i < 8; i += 2)
157   {
158      UINT16 dir = 0x0200 << i;
159      if (data & dir)
160      {
161         UINT16 d = 0x0100 << i;
162         potgo_value &= ~d;
163         potgo_value |= data & d;
164      }
165    }
166    for (i = 0; i < 2; i++)
167   {
168       UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */
169       UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */
170       if ((potgo_value & p5dir) && (potgo_value & p5dat))
171      cd32_shifter[i] = 8;
172    }
173
174}
175
176static void handle_cd32_joystick_cia(UINT8 pra, UINT8 dra)
177{
178    static int oldstate[2];
179    int i;
180
181    for (i = 0; i < 2; i++)
182   {
183      UINT8 but = 0x40 << i;
184      UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */
185      UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */
186      if (!(potgo_value & p5dir) || !(potgo_value & p5dat))
187      {
188         if ((dra & but) && (pra & but) != oldstate[i])
189         {
190            if (!(pra & but))
191            {
192               cd32_shifter[i]--;
193               if (cd32_shifter[i] < 0)
194                  cd32_shifter[i] = 0;
195            }
196         }
197      }
198      oldstate[i] = pra & but;
199    }
200}
201
202static UINT16 handle_joystick_potgor (running_machine *machine, UINT16 potgor)
203{
204    int i;
205
206    for (i = 0; i < 2; i++)
207   {
208      UINT16 p9dir = 0x0800 << (i * 4); /* output enable P9 */
209      UINT16 p9dat = 0x0400 << (i * 4); /* data P9 */
210      UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */
211      UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */
212
213       /* p5 is floating in input-mode */
214       potgor &= ~p5dat;
215       potgor |= potgo_value & p5dat;
216       if (!(potgo_value & p9dir))
217         potgor |= p9dat;
218       /* P5 output and 1 -> shift register is kept reset (Blue button) */
219       if ((potgo_value & p5dir) && (potgo_value & p5dat))
220         cd32_shifter[i] = 8;
221       /* shift at 1 == return one, >1 = return button states */
222       if (cd32_shifter[i] == 0)
223         potgor &= ~p9dat; /* shift at zero == return zero */
224      if (i == 0)
225         if (cd32_shifter[i] >= 2 && (input_port_read(machine, "IN0") & (1 << (cd32_shifter[i] - 2))))
226            potgor &= ~p9dat;
227    }
228    return potgor;
229}
230
231static CUSTOM_INPUT(cd32_input)
232{
233   return handle_joystick_potgor(field->port->machine, potgo_value) >> 10;
234}
235
236
237static INPUT_PORTS_START( a1200 )
238   PORT_START("CIA0PORTA")
239   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_SPECIAL )
240   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
241   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
242
243   PORT_START("CIA0PORTB")
244   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
245
246   PORT_START("JOY0DAT")
247   PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(amiga_joystick_convert, "P1JOY")
248   PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED )
249
250   PORT_START("JOY1DAT")
251   PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(amiga_joystick_convert, "P2JOY")
252   PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED )
253
254   PORT_START("POTGO")
255   PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED )
256   PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
257   PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED )
258   PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
259   PORT_BIT( 0xaaff, IP_ACTIVE_HIGH, IPT_UNUSED )
260
261   PORT_START("P1JOY")
262   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
263   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
264   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
265   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
266
267   PORT_START("P2JOY")
268   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
269   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
270   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
271   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
272
273   PORT_START("P0MOUSEX")
274   PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
275
276   PORT_START("P0MOUSEY")
277   PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
278
279   PORT_START("P1MOUSEX")
280   PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(2)
281
282   PORT_START("P1MOUSEY")
283   PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(2)
284
285   PORT_INCLUDE( amiga_us_keyboard )
286INPUT_PORTS_END
287
288static INPUT_PORTS_START( cd32 )
289   PORT_START("CIA0PORTA")
290   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_SPECIAL )
291   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
292   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
293
294   PORT_START("CIA0PORTB")
295   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
296   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
297
298   PORT_START("JOY0DAT")
299   PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(amiga_joystick_convert, "P1JOY")
300   PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED )
301
302   PORT_START("JOY1DAT")
303   PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(amiga_joystick_convert, "P2JOY")
304   PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED )
305
306   PORT_START("POTGO")
307   PORT_BIT( 0x4400, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(cd32_input, 0)
308   PORT_BIT( 0xaaff, IP_ACTIVE_LOW, IPT_UNUSED )
309
310   PORT_START("P1JOY")
311   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
312   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
313   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
314   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
315
316   PORT_START("P2JOY")
317   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
318   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
319   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
320   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
321
322   PORT_START("COINS")
323   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
324   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
325
326   PORT_START("DIPSW1")
327   PORT_DIPNAME( 0x01, 0x01, "DSW1 1" )
328   PORT_DIPSETTING(    0x01, "Reset" )
329   PORT_DIPSETTING(    0x00, "Set" )
330   PORT_DIPNAME( 0x02, 0x02, "DSW1 2" )
331   PORT_DIPSETTING(    0x02, "Reset" )
332   PORT_DIPSETTING(    0x00, "Set" )
333   PORT_DIPNAME( 0x04, 0x04, "DSW1 3" )
334   PORT_DIPSETTING(    0x04, "Reset" )
335   PORT_DIPSETTING(    0x00, "Set" )
336   PORT_DIPNAME( 0x08, 0x08, "DSW1 4" )
337   PORT_DIPSETTING(    0x08, "Reset" )
338   PORT_DIPSETTING(    0x00, "Set" )
339   PORT_DIPNAME( 0x10, 0x10, "DSW1 5" )
340   PORT_DIPSETTING(    0x10, "Reset" )
341   PORT_DIPSETTING(    0x00, "Set" )
342   PORT_DIPNAME( 0x20, 0x20, "DSW1 6" )
343   PORT_DIPSETTING(    0x20, "Reset" )
344   PORT_DIPSETTING(    0x00, "Set" )
345   PORT_SERVICE( 0x40, IP_ACTIVE_HIGH )
346   PORT_DIPNAME( 0x80, 0x80, "DSW1 8" )
347   PORT_DIPSETTING(    0x80, "Reset" )
348   PORT_DIPSETTING(    0x00, "Set" )
349
350   PORT_START("IN0")
351   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1 )
352   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2 )
353   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON3 )
354   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON4 )
355   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON5 )
356   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON6 )
357   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON7 )
358   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED )
359   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNUSED )
360
361INPUT_PORTS_END
362
363/*************************************
364 *
365 *  Sound definitions
366 *
367 *************************************/
368
369static READ8_DEVICE_HANDLER( a1200_cia_0_portA_r )
370{
371   UINT8 ret = input_port_read(device->machine, "CIA0PORTA") & 0xc0;   /* Gameport 1 and 0 buttons */
372   ret |= amiga_fdc_status_r();
373   return ret;
374}
375
376
377static const cia6526_interface a1200_cia_0_intf =
378{
379   DEVCB_LINE(amiga_cia_0_irq),                           /* irq_func */
380   DEVCB_NULL,   /* pc_func */
381   0,                                       /* tod_clock */
382   {
383      { DEVCB_HANDLER(a1200_cia_0_portA_r), DEVCB_HANDLER(cd32_cia_0_porta_w) },      /* port A */
384      { DEVCB_HANDLER(cd32_cia_0_portb_r), DEVCB_HANDLER(cd32_cia_0_portb_w) }      /* port B */
385   }
386};
387
388static const cia6526_interface cd32_cia_0_intf =
389{
390   DEVCB_LINE(amiga_cia_0_irq),                           /* irq_func */
391   DEVCB_NULL,   /* pc_func */
392   0,                                       /* tod_clock */
393   {
394      { DEVCB_INPUT_PORT("CIA0PORTA"), DEVCB_HANDLER(cd32_cia_0_porta_w) },      /* port A */
395      { DEVCB_HANDLER(cd32_cia_0_portb_r), DEVCB_HANDLER(cd32_cia_0_portb_w) }      /* port B */
396   }
397};
398
399static const cia6526_interface a1200_cia_1_intf =
400{
401   DEVCB_LINE(amiga_cia_1_irq),                           /* irq_func */
402   DEVCB_NULL,   /* pc_func */
403   0,                                       /* tod_clock */
404   {
405      { DEVCB_NULL, DEVCB_NULL },                           /* port A */
406      { DEVCB_NULL, DEVCB_HANDLER(amiga_fdc_control_w) }         /* port B */
407   }
408};
409
410static const cia6526_interface cd32_cia_1_intf =
411{
412   DEVCB_LINE(amiga_cia_1_irq),                           /* irq_func */
413   DEVCB_NULL,   /* pc_func */
414   0,                                       /* tod_clock */
415   {
416      { DEVCB_NULL, DEVCB_NULL },                           /* port A */
417      { DEVCB_NULL, DEVCB_NULL }                           /* port B */
418   }
419};
420
421static MACHINE_DRIVER_START( a1200n )
422
423   /* basic machine hardware */
424   MDRV_CPU_ADD("maincpu", M68EC020, AMIGA_68EC020_NTSC_CLOCK) /* 14.3 Mhz */
425   MDRV_CPU_PROGRAM_MAP(a1200_map,0)
426
427   MDRV_MACHINE_RESET(amiga)
428
429   /* video hardware */
430   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
431
432   MDRV_SCREEN_ADD("screen", RASTER)
433   MDRV_SCREEN_REFRESH_RATE(59.997)
434   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
435   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
436   MDRV_SCREEN_SIZE(512*2, 312)
437   MDRV_SCREEN_VISIBLE_AREA((129-8)*2, (449+8-1)*2, 44-8, 300+8-1)
438
439   MDRV_PALETTE_LENGTH(4096)
440   MDRV_PALETTE_INIT(amiga_aga)
441
442   MDRV_VIDEO_START(amiga_aga)
443   MDRV_VIDEO_UPDATE(amiga_aga)
444
445   /* sound hardware */
446    MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
447
448    MDRV_SOUND_ADD("amiga", AMIGA, 3579545)
449    MDRV_SOUND_ROUTE(0, "lspeaker", 0.25)
450    MDRV_SOUND_ROUTE(1, "rspeaker", 0.25)
451    MDRV_SOUND_ROUTE(2, "rspeaker", 0.25)
452    MDRV_SOUND_ROUTE(3, "lspeaker", 0.25)
453
454    MDRV_SOUND_ADD( "cdda", CDDA, 0 )
455   MDRV_SOUND_ROUTE( 0, "lspeaker", 0.50 )
456   MDRV_SOUND_ROUTE( 1, "rspeaker", 0.50 )
457
458   /* cia */
459   MDRV_CIA8520_ADD("cia_0", AMIGA_68EC020_NTSC_CLOCK / 10, a1200_cia_0_intf)
460   MDRV_CIA8520_ADD("cia_1", AMIGA_68EC020_NTSC_CLOCK / 10, a1200_cia_1_intf)
461MACHINE_DRIVER_END
462
463static MACHINE_DRIVER_START( a1200p )
464   MDRV_IMPORT_FROM(a1200n)
465
466   /* adjust for PAL specs */
467   MDRV_CPU_REPLACE("maincpu", M68EC020, AMIGA_68EC020_PAL_CLOCK)
468
469   /* video hardware */
470   MDRV_SCREEN_MODIFY("screen")
471   MDRV_SCREEN_REFRESH_RATE(50)
472
473   /* cia */
474   MDRV_CIA8520_REMOVE("cia_0")
475   MDRV_CIA8520_REMOVE("cia_1")
476   MDRV_CIA8520_ADD("cia_0", AMIGA_68EC020_PAL_CLOCK / 10, a1200_cia_0_intf)
477   MDRV_CIA8520_ADD("cia_1", AMIGA_68EC020_PAL_CLOCK / 10, a1200_cia_1_intf)
478MACHINE_DRIVER_END
479
480static MACHINE_DRIVER_START( cd32 )
481
482   /* basic machine hardware */
483   MDRV_CPU_ADD("maincpu", M68EC020, AMIGA_68EC020_PAL_CLOCK) /* 14.3 Mhz */
484   MDRV_CPU_PROGRAM_MAP(cd32_map,0)
485
486   MDRV_MACHINE_RESET(amiga)
487   MDRV_NVRAM_HANDLER(cd32)
488
489   /* video hardware */
490   MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
491
492   MDRV_SCREEN_ADD("screen", RASTER)
493   MDRV_SCREEN_REFRESH_RATE(59.997)
494   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
495   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
496   MDRV_SCREEN_SIZE(512*2, 312)
497   MDRV_SCREEN_VISIBLE_AREA((129-8)*2, (449+8-1)*2, 44-8, 300+8-1)
498
499   MDRV_PALETTE_LENGTH(4096)
500   MDRV_PALETTE_INIT(amiga_aga)
501
502   MDRV_VIDEO_START(amiga_aga)
503   MDRV_VIDEO_UPDATE(amiga_aga)
504
505   /* sound hardware */
506    MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
507
508    MDRV_SOUND_ADD("amiga", AMIGA, 3579545)
509    MDRV_SOUND_ROUTE(0, "lspeaker", 0.25)
510    MDRV_SOUND_ROUTE(1, "rspeaker", 0.25)
511    MDRV_SOUND_ROUTE(2, "rspeaker", 0.25)
512    MDRV_SOUND_ROUTE(3, "lspeaker", 0.25)
513
514    MDRV_SOUND_ADD( "cdda", CDDA, 0 )
515   MDRV_SOUND_ROUTE( 0, "lspeaker", 0.50 )
516   MDRV_SOUND_ROUTE( 1, "rspeaker", 0.50 )
517
518   /* cia */
519   MDRV_CIA8520_ADD("cia_0", AMIGA_68EC020_PAL_CLOCK / 10, cd32_cia_0_intf)
520   MDRV_CIA8520_ADD("cia_1", AMIGA_68EC020_PAL_CLOCK / 10, cd32_cia_1_intf)
521MACHINE_DRIVER_END
522
523ROM_START(a1200n)
524   ROM_REGION32_BE(0x080000, "user1",0)
525   ROMX_LOAD("kick40063.u6", 0x000000, 0x080000, CRC(fc24ae0d) SHA1(3b7f1493b27e212830f989f26ca76c02049f09ca), ROM_GROUPWORD)   /* part number? */
526ROM_END
527
528#define rom_a1200p    rom_a1200n
529
530ROM_START(cd32)
531   ROM_REGION32_BE(0x100000, "user1",0)
532   ROM_LOAD("391640-03.u6a", 0x000000, 0x100000, CRC(d3837ae4) SHA1(06807db3181637455f4d46582d9972afec8956d9) )
533ROM_END
534
535/***************************************************************************************************/
536
537// these come directly from amiga.c
538
539static UINT16 a1200_read_dskbytr(running_machine *machine)
540{
541   return amiga_fdc_get_byte();
542}
543
544static void a1200_write_dsklen(running_machine *machine, UINT16 data)
545{
546   if ( data & 0x8000 )
547   {
548      if ( CUSTOM_REG(REG_DSKLEN) & 0x8000 )
549         amiga_fdc_setup_dma(machine);
550   }
551}
552
553
554static DRIVER_INIT( a1200 )
555{
556   static const amiga_machine_interface cubocd32_intf =
557   {
558      AGA_CHIP_RAM_MASK,
559      NULL, NULL,         /* joy0dat_r & joy1dat_r */
560      cd32_potgo_w,      /* potgo_w */
561      a1200_read_dskbytr, a1200_write_dsklen, /* dskbytr_r & dsklen_w */
562      NULL,            /* serdat_w */
563      NULL,            /* scanline0_callback */
564      NULL,            /* reset_callback */
565      NULL,            /* nmi_callback */
566      FLAGS_AGA_CHIPSET   /* flags */
567   };
568
569   /* configure our Amiga setup */
570   amiga_machine_config(machine, &cubocd32_intf);
571
572   /* set up memory */
573   memory_configure_bank(machine, 1, 0, 1, amiga_chip_ram32, 0);
574   memory_configure_bank(machine, 1, 1, 1, memory_region(machine, "user1"), 0);
575
576   /* initialize keyboard */
577   amigakbd_init(machine);
578}
579
580static DRIVER_INIT( cd32 )
581{
582   static const amiga_machine_interface cubocd32_intf =
583   {
584      AGA_CHIP_RAM_MASK,
585      NULL, NULL,       /* joy0dat_r & joy1dat_r */
586      cd32_potgo_w,      /* potgo_w */
587      NULL, NULL,         /* dskbytr_r & dsklen_w */
588      NULL,            /* serdat_w */
589      NULL,             /* scanline0_callback */
590      NULL,            /* reset_callback */
591      NULL,            /* nmi_callback */
592      FLAGS_AGA_CHIPSET   /* flags */
593   };
594
595   /* configure our Amiga setup */
596   amiga_machine_config(machine, &cubocd32_intf);
597
598   /* set up memory */
599   memory_configure_bank(machine, 1, 0, 1, amiga_chip_ram32, 0);
600   memory_configure_bank(machine, 1, 1, 1, memory_region(machine, "user1"), 0);
601
602   /* intialize akiko */
603   amiga_akiko_init(machine);
604}
605
606/***************************************************************************
607  System config
608***************************************************************************/
609
610static SYSTEM_CONFIG_START(a1200)
611   CONFIG_DEVICE(amiga_floppy_getinfo)
612SYSTEM_CONFIG_END
613
614
615/***************************************************************************************************/
616
617/*     YEAR  NAME     PARENT   COMPAT  MACHINE INPUT   INIT    CONFIG  COMPANY       FULLNAME */
618COMP( 1992, a1200n,  0,       0,      a1200n, a1200,  a1200,  a1200,  "Commodore",  "Amiga 1200 (NTSC)" , GAME_NOT_WORKING )
619COMP( 1992, a1200p,  a1200n,  0,      a1200p, a1200,  a1200,  a1200,  "Commodore",  "Amiga 1200 (PAL)" , GAME_NOT_WORKING )
620CONS( 1993, cd32,    0,       0,      cd32,   cd32,   cd32,   0,      "Commodore",  "Amiga CD32" , GAME_NOT_WORKING )
docs/messnew.txt
r4640r4641
10.131.1
10.131.1
22
33New System Drivers Supported (in no particular order):
44------------------------------------------------------
5- Amiga 1200 NTSC & PAL (not working)  [incog nito, Fabio Priuli]
6- Amiga CD32 (not working)  [incog nito, Fabio Priuli]
57- CD-I (not working)  [incog nito]
68
79

Previous 15994 Revisions Next


© 1998-2018 The MESS Team