summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2012-10-27 12:32:44 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2012-10-27 12:32:44 +0000
commit274bab4ac810bb5f8be3d4be3a50299fad7edaf4 (patch)
tree90e3dfd5a5145faf42fa76bca928709c47149606
parent4dc8836c7d2e8e3ca2609991586f660d924d54b2 (diff)
spectrum and amiga changes from Haze (no whatsnew)
-rw-r--r--.gitattributes4
-rw-r--r--hash/amiga1200_flop.xml58
-rw-r--r--hash/amigaaga_flop.xml152
-rw-r--r--hash/pentagon_cass.xml32
-rw-r--r--hash/spectrum_cass.xml6
-rw-r--r--src/mess/drivers/ami1200.c414
-rw-r--r--src/mess/drivers/amiga.c396
-rw-r--r--src/mess/drivers/pentagon.c4
-rw-r--r--src/mess/mess.lst5
-rw-r--r--src/mess/mess.mak1
10 files changed, 626 insertions, 446 deletions
diff --git a/.gitattributes b/.gitattributes
index 9098fbc3e33..84e5c50492c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -25,10 +25,12 @@ hash/advision.xml svneol=native#text/xml
hash/alice32.xml svneol=native#text/xml
hash/alice90.xml svneol=native#text/xml
hash/amiga1000_flop.xml svneol=native#text/xml
+hash/amiga1200_flop.xml svneol=native#text/xml
hash/amiga500_flop.xml svneol=native#text/xml
hash/amiga500plus_flop.xml svneol=native#text/xml
hash/amiga600_flop.xml svneol=native#text/xml
hash/amiga_flop.xml svneol=native#text/xml
+hash/amigaaga_flop.xml svneol=native#text/xml
hash/apfm1000.xml svneol=native#text/xml
hash/apple1.xml svneol=native#text/xml
hash/apple2.xml svneol=native#text/xml
@@ -137,6 +139,7 @@ hash/pce.xml svneol=native#text/xml
hash/pcecd.xml svneol=native#text/xml
hash/pcw.xml svneol=native#text/xml
hash/pcw16.xml svneol=native#text/xml
+hash/pentagon_cass.xml svneol=native#text/xml
hash/pico.xml svneol=native#text/xml
hash/pippin.xml svneol=native#text/xml
hash/pippin_flop.xml svneol=native#text/xml
@@ -5614,7 +5617,6 @@ src/mess/drivers/alesis.c svneol=native#text/plain
src/mess/drivers/alphasma.c svneol=native#text/plain
src/mess/drivers/alphatro.c svneol=native#text/plain
src/mess/drivers/altair.c svneol=native#text/plain
-src/mess/drivers/ami1200.c svneol=native#text/plain
src/mess/drivers/amico2k.c svneol=native#text/plain
src/mess/drivers/amiga.c svneol=native#text/plain
src/mess/drivers/amstr_pc.c svneol=native#text/plain
diff --git a/hash/amiga1200_flop.xml b/hash/amiga1200_flop.xml
new file mode 100644
index 00000000000..bc9cac9c8a8
--- /dev/null
+++ b/hash/amiga1200_flop.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!-- This list contains the system floppies distributed with the Amiga 1200, it is not a general purpose Software List -->
+
+<softwarelist name="amiga1200_flop" description="Amiga 1200 System Floppies">
+
+ <software name="wb30">
+ <description>Workbench v3.0 rev 39.29</description>
+ <year>1992</year>
+ <publisher>Commodore</publisher>
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install" />
+ <dataarea name="flop" size="901120">
+ <rom name="workbench v3.0 rev 39.29 (1992)(commodore)(a1200-a4000)(m10)(disk 1 of 6)(install).adf" size="901120" crc="6fa2d2b4" sha1="ba24b4172339b9198e4f724a6804d0c6eb5e394b" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Workbench" />
+ <dataarea name="flop" size="901120">
+ <rom name="workbench v3.0 rev 39.29 (1992)(commodore)(a1200-a4000)(m10)(disk 2 of 6)(workbench)[!].adf" size="901120" crc="a4d9752d" sha1="e663c92a9c88fa38d02bbb299bea8ce70c56b417" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Extras" />
+ <dataarea name="flop" size="901120">
+ <rom name="workbench v3.0 rev 39.29 (1992)(commodore)(a1200-a4000)(m10)(disk 3 of 6)(extras)[!].adf" size="901120" crc="95da642d" sha1="74304711678ebd3287f816ae250b47bd4d8f5195" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Storage" />
+ <dataarea name="flop" size="901120">
+ <rom name="workbench v3.0 rev 39.29 (1992)(commodore)(a1200-a4000)(m10)(disk 4 of 6)(storage)[!].adf" size="901120" crc="0c8c24d5" sha1="93cab7cd05471e8fde63cb1d512b048cd593aebc" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Locale" />
+ <dataarea name="flop" size="901120">
+ <rom name="workbench v3.0 rev 39.29 (1992)(commodore)(a1200-a4000)(m10)(disk 5 of 6)(locale)[!].adf" size="901120" crc="67835fe5" sha1="00d0670a9060ab7805dc2fa7e2e856b33a828043" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Fonts" />
+ <dataarea name="flop" size="901120">
+ <rom name="workbench v3.0 rev 39.29 (1992)(commodore)(a1200-a4000)(m10)(disk 6 of 6)(fonts).adf" size="901120" crc="d7364bb4" sha1="4531651fe34a7f0a2dc1a1523ed4c2507670f5a6" offset="0"/>
+ </dataarea>
+ </part>
+
+ </software>
+
+</softwarelist>
+
diff --git a/hash/amigaaga_flop.xml b/hash/amigaaga_flop.xml
new file mode 100644
index 00000000000..e3ff9af22ad
--- /dev/null
+++ b/hash/amigaaga_flop.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!-- General purpose software list for Amiga software requiring the AGA chipset (A1200 / A4000)
+
+ the software listed here is not designed for use on systems without the AGA chipset and
+ will not function.
+-->
+
+
+
+<softwarelist name="amigaaga_flop" description="Amiga AGA Floppy Disks list">
+
+ <!-- has manual protection -->
+ <software name="pballfna">
+ <description>Pinball Fantasies AGA</description>
+ <year>1993</year>
+ <publisher>21st Century Entertainment</publisher>
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballfantasiesaga_pf1.ipf" size="1049612" crc="60e23065" sha1="0d401004a02c6e8af2532b0180ce42a3725c69ce" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballfantasiesaga_pf2.ipf" size="1049612" crc="64e3b549" sha1="44d59c0660170eba8dee54d710cfec1f598a7a90" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballfantasiesaga_pf3.ipf" size="1049612" crc="2a0d1c66" sha1="df95ae4ed9bda2d0563958c26fc23fdd5fe6f3d7" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballfantasiesaga_pf4.ipf" size="1049612" crc="e5ab9484" sha1="83151b5738844bdc668c80b20dd2d742668063fb" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- unprotected -->
+ <software name="pballfnapdy" cloneof="pballfna">
+ <description>Pinball Fantasies AGA (Cracked, PDY)</description>
+ <year>1993</year>
+ <publisher>21st Century Entertainment</publisher>
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinball fantasies (1993)(21st century)(aga)(disk 1 of 4)[cr pdy].adf" size="901120" crc="708fc612" sha1="99e24713096bcfc90281e8c0ae4d57c395e66069" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinball fantasies (1993)(21st century)(aga)(disk 2 of 4).adf" size="901120" crc="eced3e6c" sha1="2f4669459021e0e756975061bf38d55982975281" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinball fantasies (1993)(21st century)(aga)(disk 3 of 4).adf" size="901120" crc="ff04b00c" sha1="ad12df201dea97987d0455e24fac0459e648da1a" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinball fantasies (1993)(21st century)(aga)(disk 4 of 4).adf" size="901120" crc="912a609f" sha1="0e6818ceabd9e362a9b15bac9a551d4a017fd536" offset="0"/>
+ </dataarea>
+ </part>
+
+ </software>
+
+
+ <!-- severe gfx problems -->
+ <software name="pballill" supported="no">
+ <description>Pinball Illusions</description>
+ <year>1995</year>
+ <publisher>21st Century Entertainment</publisher>
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballillusions_disk1.ipf" size="1049612" crc="0cf8949b" sha1="8970859b71aefdb13d47c9b16b279f52405dae4c" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballillusions_disk2.ipf" size="1049612" crc="93ce1135" sha1="5dad662b278a45e4720043407bbf22c0a9932df5" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballillusions_disk3.ipf" size="1049612" crc="282ea51d" sha1="39f78c077ee27f213ff3f07a991ba165212d780f" offset="0"/>
+ </dataarea>
+ </part>
+
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1049612">
+ <rom name="pinballillusions_disk4.ipf" size="1049612" crc="e551bc40" sha1="05757f0e6289385df204c2ced4fb0348aa4b39ee" offset="0"/>
+ </dataarea>
+ </part>
+
+ </software>
+
+ <!-- simple 1 disk game using AGA mode -->
+ <software name="gigertet">
+ <description>Giger-Tetris</description>
+ <year>1993</year>
+ <publisher>Panic Production</publisher>
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="901120">
+ <rom name="giger-tetris (1993)(panic production)(aga)(sw).adf" size="901120" crc="e58911f4" sha1="90d146454db7317e02f428aa24e01296db0ea2d4" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- various gfx issues, good test case for bugfixing? -->
+ <software name="dxpacaga" supported="partial">
+ <description>Deluxe Pac-Man v1.7 AGA (1997-04-27)</description>
+ <year>1997</year>
+ <publisher>Edgar Vigdal</publisher>
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="901120">
+ <rom name="deluxe pac-man v1.7 (1997-04-27)(vigdal, edgar)(aga)(sw-r).adf" size="901120" crc="0fb6d45d" sha1="378cb7c11d8f57d812469fcc8db1a1a848e8ce63" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
+
+
diff --git a/hash/pentagon_cass.xml b/hash/pentagon_cass.xml
new file mode 100644
index 00000000000..c41d14d098f
--- /dev/null
+++ b/hash/pentagon_cass.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!-- Preliminary list.
+
+ This list contains software for the Russian 'Pentagon 128' systems.
+
+ These systems are Spectrum clones, but offer various extended features.
+
+ The software listed here will not function correctly (if at all) on a regular Spectrum
+-->
+
+<softwarelist name="pentagon_cass" description="Pentagon (ZX Spectrum clone) cassettes">
+
+ <software name="bouldmix">
+ <description>Boulder Mix (Russia)</description>
+ <year>1996</year>
+ <publisher>Firesoft</publisher>
+ <part name="cass" interface="spectrum_cass">
+ <dataarea name="cass" size="45895">
+ <rom name="boulder mix (19xx)(firesoft)(ru)[pentagon 128].tzx" size="45895" crc="dd36b3bf" sha1="26430d66baaf04c2e7757f23169ffb201190d5c6" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
+
+
+
+
+
+
diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml
index 03398a23069..d3339581940 100644
--- a/hash/spectrum_cass.xml
+++ b/hash/spectrum_cass.xml
@@ -18,6 +18,7 @@
<!-- COMPATIBILITY
The MESS emulation at the time of writing isn't very good, the following emulators are used to determine how things should work
+ EmuZWin (v2.7 release 2.8) - Closed Source, runs some images (Gremlin 2 type*) which fail on the emulators below - http://kolmck.net/apps/EmuZWin_Eng.htm
Fuse (Free Unix Spectrum Emulator) - Free, High Compatibility can run some of the trickier images, Windows port available - http://fuse-emulator.sourceforge.net/
Spectaculator - Commercial, a bit more user friendly than above, similar compatibility - http://www.spectaculator.com/
@@ -33,9 +34,8 @@
legacy emulators including Real Spectrum ( http://zxm.speccy.cz/realspec/ ) appear to struggle with some of the more complex tape protections
-
- ToDo: Find an emulator which works with the 'Gremlin 2' protected tapes 'M.A.S.K' and 'Basil The Great Mouse Detective' all TZX images I've found fail in the
- above emulators, although RealSpectrum does load some copies of MASK but fails loading the 2nd part of the game.
+ * Gremlin 2 type images include 'M.A.S.K' and 'Basil The Great Mouse Detective'
+
diff --git a/src/mess/drivers/ami1200.c b/src/mess/drivers/ami1200.c
deleted file mode 100644
index 8415f69b0e3..00000000000
--- a/src/mess/drivers/ami1200.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- Amiga 1200
-
- Preliminary MAME driver by Mariusz Wojcieszek
- CD-ROM controller by Ernesto Corvi
- Borrowed by incog for MESS
-
- 2009-05 Fabio Priuli:
- Amiga 1200 support is just sketched (I basically took cd32 and removed Akiko). I connected
- the floppy drive in the same way as in amiga.c but it seems to be not working, since I
- tried to load WB3.1 with no success. However, this problem may be due to anything: maybe
- the floppy code must be connected elsewhere, or the .adf image is broken, or I made some
- stupid mistake in the CIA interfaces.
- Later, it could be wise to re-factor this source and merge the non-AGA code with
- mess/drivers/amiga.c
-*/
-
-#include "emu.h"
-#include "cpu/m68000/m68000.h"
-#include "machine/6526cia.h"
-#include "machine/i2cmem.h"
-#include "machine/amigafdc.h"
-#include "machine/amigakbd.h"
-
-#include "includes/amiga.h"
-#include "includes/cd32.h"
-
-
-
-class ami1200_state : public amiga_state
-{
-public:
- ami1200_state(const machine_config &mconfig, device_type type, const char *tag)
- : amiga_state(mconfig, type, tag) { }
-
- UINT16 m_potgo_value;
- int m_cd32_shifter[2];
- int m_oldstate[2];
- DECLARE_WRITE32_MEMBER(aga_overlay_w);
- DECLARE_DRIVER_INIT(a1200);
- DECLARE_WRITE8_MEMBER(ami1200_cia_0_porta_w);
- DECLARE_READ8_MEMBER(ami1200_cia_0_portb_r);
- DECLARE_WRITE8_MEMBER(ami1200_cia_0_portb_w);
- DECLARE_READ8_MEMBER(a1200_cia_0_portA_r);
-};
-
-
-
-#define A1200PAL_XTAL_X1 XTAL_28_37516MHz
-#define A1200PAL_XTAL_X2 XTAL_4_433619MHz
-
-
-
-static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra);
-
-WRITE32_MEMBER(ami1200_state::aga_overlay_w)
-{
- if (ACCESSING_BITS_16_23)
- {
- data = (data >> 16) & 1;
-
- /* switch banks as appropriate */
- membank("bank1")->set_entry(data & 1);
-
- /* swap the write handlers between ROM and bank 1 based on the bit */
- if ((data & 1) == 0)
- /* overlay disabled, map RAM on 0x000000 */
- space.install_write_bank(0x000000, 0x1fffff, "bank1");
- else
- /* overlay enabled, map Amiga system ROM on 0x000000 */
- space.unmap_write(0x000000, 0x1fffff);
- }
-}
-
-/*************************************
- *
- * CIA-A port A access:
- *
- * PA7 = game port 1, pin 6 (fire)
- * PA6 = game port 0, pin 6 (fire)
- * PA5 = /RDY (disk ready)
- * PA4 = /TK0 (disk track 00)
- * PA3 = /WPRO (disk write protect)
- * PA2 = /CHNG (disk change)
- * PA1 = /LED (LED, 0=bright / audio filter control)
- * PA0 = MUTE
- *
- *************************************/
-
-WRITE8_MEMBER(ami1200_state::ami1200_cia_0_porta_w)
-{
- device_t *device = machine().device("cia_0");
-
- /* bit 2 = Power Led on Amiga */
- set_led_status(machine(), 0, !BIT(data, 1));
-
- handle_cd32_joystick_cia(this, data, mos6526_r(device, space, 2));
-}
-
-/*************************************
- *
- * CIA-A port B access:
- *
- * PB7 = parallel data 7
- * PB6 = parallel data 6
- * PB5 = parallel data 5
- * PB4 = parallel data 4
- * PB3 = parallel data 3
- * PB2 = parallel data 2
- * PB1 = parallel data 1
- * PB0 = parallel data 0
- *
- *************************************/
-
-READ8_MEMBER(ami1200_state::ami1200_cia_0_portb_r)
-{
- /* parallel port */
- logerror("%s:CIA0_portb_r\n", machine().describe_context());
- return 0xff;
-}
-
-WRITE8_MEMBER(ami1200_state::ami1200_cia_0_portb_w)
-{
- /* parallel port */
- logerror("%s:CIA0_portb_w(%02x)\n", machine().describe_context(), data);
-}
-
-static ADDRESS_MAP_START( a1200_map, AS_PROGRAM, 32, ami1200_state )
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram")
- AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w)
- AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff)
- AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs")
- AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff)
- AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* Kickstart */
-ADDRESS_MAP_END
-
-
-//int cd32_input_port_val = 0;
-//int cd32_input_select = 0;
-
-static void cd32_potgo_w(running_machine &machine, UINT16 data)
-{
- ami1200_state *state = machine.driver_data<ami1200_state>();
- int i;
-
- state->m_potgo_value = state->m_potgo_value & 0x5500;
- state->m_potgo_value |= data & 0xaa00;
-
- for (i = 0; i < 8; i += 2)
- {
- UINT16 dir = 0x0200 << i;
- if (data & dir)
- {
- UINT16 d = 0x0100 << i;
- state->m_potgo_value &= ~d;
- state->m_potgo_value |= data & d;
- }
- }
- for (i = 0; i < 2; i++)
- {
- UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */
- UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */
- if ((state->m_potgo_value & p5dir) && (state->m_potgo_value & p5dat))
- state->m_cd32_shifter[i] = 8;
- }
-}
-
-static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra)
-{
- int i;
-
- for (i = 0; i < 2; i++)
- {
- UINT8 but = 0x40 << i;
- UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */
- UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */
- if (!(state->m_potgo_value & p5dir) || !(state->m_potgo_value & p5dat))
- {
- if ((dra & but) && (pra & but) != state->m_oldstate[i])
- {
- if (!(pra & but))
- {
- state->m_cd32_shifter[i]--;
- if (state->m_cd32_shifter[i] < 0)
- state->m_cd32_shifter[i] = 0;
- }
- }
- }
- state->m_oldstate[i] = pra & but;
- }
-}
-
-
-static INPUT_PORTS_START( a1200 )
- PORT_START("CIA0PORTA")
- PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_SPECIAL )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
-
- PORT_START("CIA0PORTB")
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("JOY0DAT")
- PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, ami1200_state,amiga_joystick_convert, "P1JOY")
- PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("JOY1DAT")
- PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, ami1200_state,amiga_joystick_convert, "P2JOY")
- PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("POTGO")
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0xaaff, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("P1JOY")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
-
- PORT_START("P2JOY")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
-
- PORT_START("P0MOUSEX")
- PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
-
- PORT_START("P0MOUSEY")
- PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
-
- PORT_START("P1MOUSEX")
- PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(2)
-
- PORT_START("P1MOUSEY")
- PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(2)
-INPUT_PORTS_END
-
-
-/*************************************
- *
- * Sound definitions
- *
- *************************************/
-
-READ8_MEMBER(ami1200_state::a1200_cia_0_portA_r)
-{
- UINT8 ret = machine().root_device().ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */
- ret |= machine().device<amiga_fdc>("fdc")->ciaapra_r();
- return ret;
-}
-
-
-static const legacy_mos6526_interface a1200_cia_0_intf =
-{
- DEVCB_DEVICE_LINE("cia_0", amiga_cia_0_irq), /* irq_func */
- DEVCB_NULL, /* pc_func */
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(ami1200_state,a1200_cia_0_portA_r),
- DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_porta_w), /* port A */
- DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_r),
- DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_w) /* port B */
-};
-
-static const legacy_mos6526_interface a1200_cia_1_intf =
-{
- DEVCB_DEVICE_LINE("cia_1", amiga_cia_1_irq), /* irq_func */
- DEVCB_NULL, /* pc_func */
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL, /* port A */
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER("fdc", amiga_fdc, ciaaprb_w) /* port B */
-};
-
-static SLOT_INTERFACE_START( amiga_floppies )
- SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
-SLOT_INTERFACE_END
-
-
-static MACHINE_CONFIG_START( a1200n, ami1200_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M68EC020, AMIGA_68EC020_NTSC_CLOCK) /* 14.3 Mhz */
- MCFG_CPU_PROGRAM_MAP(a1200_map)
-
-// MCFG_CPU_ADD("keyboard_mpu", MC68HC05)
-
- MCFG_MACHINE_RESET_OVERRIDE(ami1200_state,amiga)
-
- /* video hardware */
- MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(59.997)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(512*2, 312)
- MCFG_SCREEN_VISIBLE_AREA((129-8-8)*2, (449+8-1+8)*2, 44-8, 300+8-1)
- MCFG_SCREEN_UPDATE_DRIVER(ami1200_state, screen_update_amiga_aga)
-
- MCFG_VIDEO_START_OVERRIDE(ami1200_state,amiga_aga)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("amiga", AMIGA, XTAL_28_63636MHz/8)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.25)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.25)
- MCFG_SOUND_ROUTE(2, "rspeaker", 0.25)
- MCFG_SOUND_ROUTE(3, "lspeaker", 0.25)
-
- /* cia */
- MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_NTSC_CLOCK / 10, 0, a1200_cia_0_intf)
- MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_NTSC_CLOCK / 10, 0, a1200_cia_1_intf)
-
- /* fdc */
- MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68EC020_NTSC_CLOCK/2)
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", 0, amiga_fdc::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, 0, amiga_fdc::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, 0, amiga_fdc::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fdc:3", amiga_floppies, 0, 0, amiga_fdc::floppy_formats)
-
- MCFG_AMIGA_KEYBOARD_ADD("kbd")
-MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_DERIVED( a1200p, a1200n )
-
- /* adjust for PAL specs */
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_CLOCK(A1200PAL_XTAL_X1/2) /* 14.18758 MHz */
-
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(50)
-
- /* sound hardware */
- MCFG_SOUND_MODIFY("amiga")
- MCFG_SOUND_CLOCK(A1200PAL_XTAL_X1/8) /* 3.546895 MHz */
-
- /* cia */
- MCFG_DEVICE_MODIFY("cia_0")
- MCFG_DEVICE_CLOCK(A1200PAL_XTAL_X1/20)
- MCFG_DEVICE_MODIFY("cia_1")
- MCFG_DEVICE_CLOCK(A1200PAL_XTAL_X1/20)
-
- /* fdc */
- MCFG_DEVICE_MODIFY("fdc")
- MCFG_DEVICE_CLOCK(A1200PAL_XTAL_X1/4)
-MACHINE_CONFIG_END
-
-
-/***************************************************************************
- ROM DEFINITIONS
-***************************************************************************/
-
-ROM_START( a1200n )
- ROM_REGION32_BE(0x080000, "user1", 0)
- ROM_DEFAULT_BIOS("kick31")
- ROM_SYSTEM_BIOS(0, "kick30", "Kickstart 3.0 (39.106)")
- ROMX_LOAD("391523-01.u6a", 0x000000, 0x040000, CRC(c742a412) SHA1(999eb81c65dfd07a71ee19315d99c7eb858ab186), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1))
- ROMX_LOAD("391524-01.u6b", 0x000002, 0x040000, CRC(d55c6ec6) SHA1(3341108d3a402882b5ef9d3b242cbf3c8ab1a3e9), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "kick31", "Kickstart 3.1 (40.068)")
- ROMX_LOAD("391773-01.u6a", 0x000000, 0x040000, CRC(08dbf275) SHA1(b8800f5f909298109ea69690b1b8523fa22ddb37), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(2)) // ROM_LOAD32_WORD_SWAP!
- ROMX_LOAD("391774-01.u6b", 0x000002, 0x040000, CRC(16c07bf8) SHA1(90e331be1970b0e53f53a9b0390b51b59b3869c2), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(2))
-
- // COMMODORE | 391508-01 REV0 | KEYBOARD MPU
- ROM_REGION(0x1040, "keyboard_rev0", 0)
- ROM_LOAD("391508-01.u13", 0x0000, 0x1040, NO_DUMP)
-
- // Amiga Tech REV1 Keyboard MPU
- ROM_REGION(0x2f40, "keyboard_rev1", 0)
- ROM_LOAD("391508-02.u13", 0x0000, 0x2f40, NO_DUMP)
-ROM_END
-
-#define rom_a1200p rom_a1200n
-
-
-/***************************************************************************************************/
-
-DRIVER_INIT_MEMBER(ami1200_state,a1200)
-{
- static const amiga_machine_interface cd32_intf =
- {
- AGA_CHIP_RAM_MASK,
- NULL, NULL, /* joy0dat_r & joy1dat_r */
- cd32_potgo_w, /* potgo_w */
- NULL, /* serdat_w */
- NULL, /* scanline0_callback */
- NULL, /* reset_callback */
- NULL, /* nmi_callback */
- FLAGS_AGA_CHIPSET /* flags */
- };
-
- /* configure our Amiga setup */
- amiga_machine_config(machine(), &cd32_intf);
-
- /* set up memory */
- membank("bank1")->configure_entry(0, m_chip_ram);
- membank("bank1")->configure_entry(1, machine().root_device().memregion("user1")->base());
-}
-
-
-/***************************************************************************************************/
-
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP( 1992, a1200n, 0, 0, a1200n, a1200, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (NTSC)" , GAME_NOT_WORKING )
-COMP( 1992, a1200p, a1200n, 0, a1200p, a1200, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (PAL)" , GAME_NOT_WORKING )
diff --git a/src/mess/drivers/amiga.c b/src/mess/drivers/amiga.c
index 5743c988993..49a3fdc84bc 100644
--- a/src/mess/drivers/amiga.c
+++ b/src/mess/drivers/amiga.c
@@ -15,10 +15,36 @@ If we didn't map any, then we still put a mirror, but where fast-mem
would commence ($C00000).
***************************************************************************/
+/*
+ Amiga 1200
+
+ Preliminary MAME driver by Mariusz Wojcieszek
+ CD-ROM controller by Ernesto Corvi
+ Borrowed by incog for MESS
+
+ 2009-05 Fabio Priuli:
+ Amiga 1200 support is just sketched (I basically took cd32 and removed Akiko). I connected
+ the floppy drive in the same way as in amiga.c but it seems to be not working, since I
+ tried to load WB3.1 with no success. However, this problem may be due to anything: maybe
+ the floppy code must be connected elsewhere, or the .adf image is broken, or I made some
+ stupid mistake in the CIA interfaces.
+ Later, it could be wise to re-factor this source and merge the non-AGA code with
+ mess/drivers/amiga.c
+*/
+
+
+
+
+
+
+
+
+
/* Core includes */
#include "emu.h"
#include "includes/amiga.h"
+#include "includes/cd32.h"
/* Components */
#include "cpu/m68000/m68000.h"
@@ -33,6 +59,7 @@ would commence ($C00000).
#include "machine/ctronics.h"
#include "machine/nvram.h"
#include "sound/cdda.h"
+#include "machine/i2cmem.h"
/* Devices */
#include "imagedev/chd_cd.h"
@@ -48,6 +75,33 @@ public:
DECLARE_MACHINE_RESET(cdtv);
};
+
+
+class ami1200_state : public amiga_state
+{
+public:
+ ami1200_state(const machine_config &mconfig, device_type type, const char *tag)
+ : amiga_state(mconfig, type, tag) { }
+
+ UINT16 m_potgo_value;
+ int m_cd32_shifter[2];
+ int m_oldstate[2];
+ DECLARE_WRITE32_MEMBER(aga_overlay_w);
+ DECLARE_DRIVER_INIT(a1200);
+ DECLARE_WRITE8_MEMBER(ami1200_cia_0_porta_w);
+ DECLARE_READ8_MEMBER(ami1200_cia_0_portb_r);
+ DECLARE_WRITE8_MEMBER(ami1200_cia_0_portb_w);
+ DECLARE_READ8_MEMBER(a1200_cia_0_portA_r);
+};
+
+
+
+#define A1200PAL_XTAL_X1 XTAL_28_37516MHz
+#define A1200PAL_XTAL_X2 XTAL_4_433619MHz
+
+
+
+
static DECLARE_READ8_DEVICE_HANDLER( amiga_cia_0_portA_r );
static DECLARE_READ8_DEVICE_HANDLER( amiga_cia_0_cdtv_portA_r );
static DECLARE_WRITE8_DEVICE_HANDLER( amiga_cia_0_portA_w );
@@ -112,6 +166,17 @@ static ADDRESS_MAP_START(amiga_mem, AS_PROGRAM, 16, amiga_state )
AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM - mirror */
ADDRESS_MAP_END
+static ADDRESS_MAP_START( a1200_map, AS_PROGRAM, 32, ami1200_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram")
+ AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w)
+ AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff)
+ AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs")
+ AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff)
+ AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* Kickstart */
+ADDRESS_MAP_END
+
+
static ADDRESS_MAP_START(keyboard_mem, AS_PROGRAM, 8, amiga_state )
AM_RANGE(0x0000, 0x003f) AM_RAM /* internal user ram */
AM_RANGE(0x0040, 0x007f) AM_NOP /* unassigned */
@@ -269,10 +334,149 @@ static INPUT_PORTS_START( cdtv )
PORT_INCLUDE( amiga_common )
INPUT_PORTS_END
+
/***************************************************************************
Machine drivers
***************************************************************************/
+
+static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra);
+
+WRITE32_MEMBER(ami1200_state::aga_overlay_w)
+{
+ if (ACCESSING_BITS_16_23)
+ {
+ data = (data >> 16) & 1;
+
+ /* switch banks as appropriate */
+ membank("bank1")->set_entry(data & 1);
+
+ /* swap the write handlers between ROM and bank 1 based on the bit */
+ if ((data & 1) == 0)
+ /* overlay disabled, map RAM on 0x000000 */
+ space.install_write_bank(0x000000, 0x1fffff, "bank1");
+ else
+ /* overlay enabled, map Amiga system ROM on 0x000000 */
+ space.unmap_write(0x000000, 0x1fffff);
+ }
+}
+
+/*************************************
+ *
+ * CIA-A port A access:
+ *
+ * PA7 = game port 1, pin 6 (fire)
+ * PA6 = game port 0, pin 6 (fire)
+ * PA5 = /RDY (disk ready)
+ * PA4 = /TK0 (disk track 00)
+ * PA3 = /WPRO (disk write protect)
+ * PA2 = /CHNG (disk change)
+ * PA1 = /LED (LED, 0=bright / audio filter control)
+ * PA0 = MUTE
+ *
+ *************************************/
+
+WRITE8_MEMBER(ami1200_state::ami1200_cia_0_porta_w)
+{
+ device_t *device = machine().device("cia_0");
+
+ /* bit 2 = Power Led on Amiga */
+ set_led_status(machine(), 0, !BIT(data, 1));
+
+ handle_cd32_joystick_cia(this, data, mos6526_r(device, space, 2));
+}
+
+/*************************************
+ *
+ * CIA-A port B access:
+ *
+ * PB7 = parallel data 7
+ * PB6 = parallel data 6
+ * PB5 = parallel data 5
+ * PB4 = parallel data 4
+ * PB3 = parallel data 3
+ * PB2 = parallel data 2
+ * PB1 = parallel data 1
+ * PB0 = parallel data 0
+ *
+ *************************************/
+
+
+
+
+//int cd32_input_port_val = 0;
+//int cd32_input_select = 0;
+#if 0
+static void cd32_potgo_w(running_machine &machine, UINT16 data)
+{
+ ami1200_state *state = machine.driver_data<ami1200_state>();
+ int i;
+
+ state->m_potgo_value = state->m_potgo_value & 0x5500;
+ state->m_potgo_value |= data & 0xaa00;
+
+ for (i = 0; i < 8; i += 2)
+ {
+ UINT16 dir = 0x0200 << i;
+ if (data & dir)
+ {
+ UINT16 d = 0x0100 << i;
+ state->m_potgo_value &= ~d;
+ state->m_potgo_value |= data & d;
+ }
+ }
+ for (i = 0; i < 2; i++)
+ {
+ UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */
+ UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */
+ if ((state->m_potgo_value & p5dir) && (state->m_potgo_value & p5dat))
+ state->m_cd32_shifter[i] = 8;
+ }
+}
+#endif
+
+static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra)
+{
+ int i;
+
+ for (i = 0; i < 2; i++)
+ {
+ UINT8 but = 0x40 << i;
+ UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */
+ UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */
+ if (!(state->m_potgo_value & p5dir) || !(state->m_potgo_value & p5dat))
+ {
+ if ((dra & but) && (pra & but) != state->m_oldstate[i])
+ {
+ if (!(pra & but))
+ {
+ state->m_cd32_shifter[i]--;
+ if (state->m_cd32_shifter[i] < 0)
+ state->m_cd32_shifter[i] = 0;
+ }
+ }
+ }
+ state->m_oldstate[i] = pra & but;
+ }
+}
+
+
+
+READ8_MEMBER(ami1200_state::ami1200_cia_0_portb_r)
+{
+ /* parallel port */
+ logerror("%s:CIA0_portb_r\n", machine().describe_context());
+ return 0xff;
+}
+
+WRITE8_MEMBER(ami1200_state::ami1200_cia_0_portb_w)
+{
+ /* parallel port */
+ logerror("%s:CIA0_portb_w(%02x)\n", machine().describe_context(), data);
+}
+
+
+
MACHINE_START_MEMBER(cdtv_state,cdtv)
{
MACHINE_START_CALL_LEGACY( amigacd );
@@ -360,6 +564,39 @@ static const tpi6525_interface cdtv_tpi_intf =
DEVCB_NULL
};
+READ8_MEMBER(ami1200_state::a1200_cia_0_portA_r)
+{
+ UINT8 ret = machine().root_device().ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */
+ ret |= machine().device<amiga_fdc>("fdc")->ciaapra_r();
+ return ret;
+}
+
+
+static const legacy_mos6526_interface a1200_cia_0_intf =
+{
+ DEVCB_DEVICE_LINE("cia_0", amiga_cia_0_irq), /* irq_func */
+ DEVCB_NULL, /* pc_func */
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_DRIVER_MEMBER(ami1200_state,a1200_cia_0_portA_r),
+ DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_porta_w), /* port A */
+ DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_r),
+ DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_w) /* port B */
+};
+
+static const legacy_mos6526_interface a1200_cia_1_intf =
+{
+ DEVCB_DEVICE_LINE("cia_1", amiga_cia_1_irq), /* irq_func */
+ DEVCB_NULL, /* pc_func */
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL, /* port A */
+ DEVCB_NULL,
+ DEVCB_DEVICE_MEMBER("fdc", amiga_fdc, ciaaprb_w) /* port B */
+};
+
+
static SLOT_INTERFACE_START( amiga_floppies )
SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
SLOT_INTERFACE_END
@@ -559,6 +796,94 @@ static MACHINE_CONFIG_DERIVED( ami600n, a500n )
MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( a1200n, ami1200_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68EC020, AMIGA_68EC020_NTSC_CLOCK) /* 14.3 Mhz */
+ MCFG_CPU_PROGRAM_MAP(a1200_map)
+
+ MCFG_CPU_ADD("keyboard", M6502, XTAL_1MHz) /* 1 MHz? */
+ MCFG_CPU_PROGRAM_MAP(keyboard_mem)
+ MCFG_DEVICE_DISABLE()
+
+ MCFG_MACHINE_RESET_OVERRIDE(amiga_state, amiga )
+
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(59.997)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_SIZE(512*2, 312)
+ MCFG_SCREEN_VISIBLE_AREA((129-8-8)*2, (449+8-1+8)*2, 44-8, 300+8-1)
+ MCFG_SCREEN_UPDATE_DRIVER(ami1200_state, screen_update_amiga_aga)
+
+ MCFG_VIDEO_START_OVERRIDE(ami1200_state,amiga_aga)
+
+
+ MCFG_PALETTE_LENGTH(4096)
+ MCFG_PALETTE_INIT_OVERRIDE(amiga_state, amiga )
+
+ MCFG_VIDEO_START_OVERRIDE(amiga_state,amiga)
+
+ /* devices */
+ MCFG_MSM6242_ADD("rtc",amiga_rtc_intf)
+ MCFG_CENTRONICS_PRINTER_ADD("centronics", amiga_centronics_config)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+
+ MCFG_SOUND_ADD("amiga", AMIGA, 3579545)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
+ MCFG_SOUND_ROUTE(2, "rspeaker", 0.50)
+ MCFG_SOUND_ROUTE(3, "lspeaker", 0.50)
+
+ /* cia */
+ MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_NTSC_CLOCK /2 / 10, 60, cia_0_ntsc_intf)
+ MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_NTSC_CLOCK /2, 0, cia_1_intf)
+
+ /* fdc */
+ MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68EC020_NTSC_CLOCK / 2)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", 0, amiga_fdc::floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, 0, amiga_fdc::floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, 0, amiga_fdc::floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:3", amiga_floppies, 0, 0, amiga_fdc::floppy_formats)
+
+ MCFG_AMIGA_KEYBOARD_ADD("kbd")
+
+ MCFG_SOFTWARE_LIST_ADD("flop_common","amiga_flop")
+ MCFG_SOFTWARE_LIST_ADD("flop_list","amiga1200_flop")
+ MCFG_SOFTWARE_LIST_ADD("flop_aga","amigaaga_flop")
+
+
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( a1200, a1200n )
+
+ /* adjust for PAL specs */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK(AMIGA_68EC020_PAL_CLOCK) /* 14.18758 MHz */
+
+ /* video hardware */
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_REFRESH_RATE(50)
+
+ /* sound hardware */
+ MCFG_SOUND_MODIFY("amiga")
+ MCFG_SOUND_CLOCK(AMIGA_68EC020_PAL_CLOCK/8) /* 3.546895 MHz */
+
+ /* cia */
+ MCFG_DEVICE_MODIFY("cia_0")
+ MCFG_DEVICE_CLOCK(AMIGA_68EC020_PAL_CLOCK/10/2)
+ MCFG_DEVICE_MODIFY("cia_1")
+ MCFG_DEVICE_CLOCK(AMIGA_68EC020_PAL_CLOCK/2)
+
+ /* fdc */
+ MCFG_DEVICE_MODIFY("fdc")
+ MCFG_DEVICE_CLOCK(AMIGA_68EC020_PAL_CLOCK/2)
+MACHINE_CONFIG_END
+
+
/***************************************************************************
Amiga specific stuff
@@ -675,51 +1000,45 @@ DRIVER_INIT_MEMBER(amiga_state,amiga)
amiga_cart_init(machine());
}
-#ifdef UNUSED_FUNCTION
-DRIVER_INIT_MEMBER(apollo_state,amiga_ecs)
+
+
+DRIVER_INIT_MEMBER(amiga_state,cdtv)
{
static const amiga_machine_interface amiga_intf =
{
ECS_CHIP_RAM_MASK,
- amiga_cia_0_portA_r, NULL, /* CIA0 port A & B read */
- amiga_cia_0_portA_w, NULL, /* CIA0 port A & B write */
- NULL, NULL, /* CIA1 port A & B read */
- NULL, amiga_fdc_control_w, /* CIA1 port A & B write */
amiga_read_joy0dat, amiga_read_joy1dat, /* joy0dat_r & joy1dat_r */
NULL, /* potgo_w */
NULL, /* serdat_w */
NULL, /* scanline0_callback */
- amiga_reset, /* reset_callback */
- amiga_cart_nmi, /* nmi_callback */
+ NULL, /* reset_callback */
+ NULL, /* nmi_callback */
0 /* flags */
};
amiga_machine_config(machine(), &amiga_intf);
/* set up memory */
- 1.root_device().membank(0)->configure_entries(1, m_chip_ram, 0);
- 1.root_device().membank(1)->configure_entries(1, machine().root_device().memregion("user1")->base(), 0);
-
- /* initialize Action Replay (if present) */
- amiga_cart_init(machine());
+ membank("bank1")->configure_entry(0, m_chip_ram);
+ membank("bank1")->configure_entry(1, machine().root_device().memregion("user1")->base());
}
-#endif
-DRIVER_INIT_MEMBER(amiga_state,cdtv)
+DRIVER_INIT_MEMBER(ami1200_state,a1200)
{
- static const amiga_machine_interface amiga_intf =
+ static const amiga_machine_interface cd32_intf =
{
- ECS_CHIP_RAM_MASK,
+ AGA_CHIP_RAM_MASK,
amiga_read_joy0dat, amiga_read_joy1dat, /* joy0dat_r & joy1dat_r */
- NULL, /* potgo_w */
- NULL, /* serdat_w */
- NULL, /* scanline0_callback */
- NULL, /* reset_callback */
- NULL, /* nmi_callback */
- 0 /* flags */
+ NULL, /* potgo_w */
+ NULL, /* serdat_w */
+ NULL, /* scanline0_callback */
+ NULL, /* reset_callback */
+ NULL, /* nmi_callback */
+ FLAGS_AGA_CHIPSET /* flags */
};
- amiga_machine_config(machine(), &amiga_intf);
+ /* configure our Amiga setup */
+ amiga_machine_config(machine(), &cd32_intf);
/* set up memory */
membank("bank1")->configure_entry(0, m_chip_ram);
@@ -816,6 +1135,30 @@ ROM_END
#define rom_ami600n rom_ami600
+ROM_START( ami1200 )
+ ROM_REGION32_BE(0x080000, "user1", 0)
+ ROM_DEFAULT_BIOS("kick31")
+ ROM_SYSTEM_BIOS(0, "kick30", "Kickstart 3.0 (39.106)")
+ ROMX_LOAD("391523-01.u6a", 0x000000, 0x040000, CRC(c742a412) SHA1(999eb81c65dfd07a71ee19315d99c7eb858ab186), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1))
+ ROMX_LOAD("391524-01.u6b", 0x000002, 0x040000, CRC(d55c6ec6) SHA1(3341108d3a402882b5ef9d3b242cbf3c8ab1a3e9), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1))
+// ROMX_LOAD("kickstart v3.0 r39.106 (1992)(commodore)(a1200)[!].rom", 0x000000, 0x080000, CRC(6c9b07d2) SHA1(70033828182fffc7ed106e5373a8b89dda76faa5), ROM_BIOS(1))
+
+ ROM_SYSTEM_BIOS(1, "kick31", "Kickstart 3.1 (40.068)")
+ ROMX_LOAD("391773-01.u6a", 0x000000, 0x040000, CRC(08dbf275) SHA1(b8800f5f909298109ea69690b1b8523fa22ddb37), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(2))
+ ROMX_LOAD("391774-01.u6b", 0x000002, 0x040000, CRC(16c07bf8) SHA1(90e331be1970b0e53f53a9b0390b51b59b3869c2), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(2))
+
+ // COMMODORE | 391508-01 REV0 | KEYBOARD MPU
+ ROM_REGION(0x1040, "keyboard", 0)
+ ROM_LOAD("391508-01.u13", 0x0000, 0x1040, NO_DUMP)
+
+ // Amiga Tech REV1 Keyboard MPU
+ ROM_REGION(0x2f40, "keyboard_rev1", 0)
+ ROM_LOAD("391508-02.u13", 0x0000, 0x2f40, NO_DUMP)
+ROM_END
+
+#define rom_ami1200n rom_ami1200
+
+
ROM_START( cdtv )
ROM_REGION16_BE(0x100000, "user1", 0)
@@ -865,9 +1208,12 @@ COMP( 1991, ami500pln, ami500pl, 0, ami500plsn, amiga, amiga_state, amiga
COMP( 1992, ami600, 0, 0, ami600, amiga, amiga_state, amiga, "Commodore Business Machines", "Amiga 600 (PAL, ECS)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS )
COMP( 1992, ami600n, ami600, 0, ami600n, amiga, amiga_state, amiga, "Commodore Business Machines", "Amiga 600 (NTSC, ECS)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS )
-/* Amiga 1200 - see ami1200.c */
+COMP( 1992, ami1200, 0, 0, a1200, amiga, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (PAL, AGA)" , GAME_NOT_WORKING )
+COMP( 1992, ami1200n, ami1200, 0, a1200n, amiga, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (NTSC, AGA)" , GAME_NOT_WORKING )
COMP( 1991, cdtv, 0, 0, cdtv, cdtv, amiga_state, cdtv, "Commodore Business Machines", "CDTV (NTSC)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS )
/* CD32 - see cd32.c */
+
+
diff --git a/src/mess/drivers/pentagon.c b/src/mess/drivers/pentagon.c
index b44d898b93c..df98abe119d 100644
--- a/src/mess/drivers/pentagon.c
+++ b/src/mess/drivers/pentagon.c
@@ -154,6 +154,8 @@ static GFXDECODE_START( pentagon )
GFXDECODE_ENTRY( "maincpu", 0x17d00, spectrum_charlayout, 0, 8 )
GFXDECODE_END
+
+
static MACHINE_CONFIG_DERIVED_CLASS( pentagon, spectrum_128, pentagon_state )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(pentagon_io)
@@ -161,6 +163,8 @@ static MACHINE_CONFIG_DERIVED_CLASS( pentagon, spectrum_128, pentagon_state )
MCFG_BETA_DISK_ADD(BETA_DISK_TAG)
MCFG_GFXDECODE(pentagon)
+
+ MCFG_SOFTWARE_LIST_ADD("cass_list_pen","pentagon_cass")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pent1024, pentagon)
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 2782f520bac..f2fba99ef4d 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -654,11 +654,12 @@ ami500pl // Commodore Amiga 500+
ami500pln //
ami600 // Commodore Amiga 600
ami600n //
+ami1200 // Commodore Amiga 1200
+ami1200n //
cdtv // Commodore CDTV
a3000 // Commodore Amiga 3000
-a1200n // Commodore Amiga 1200 - NTSC
-a1200p // Commodore Amiga 1200 - PAL
+
cd32 // Commodore Amiga CD32
c65 // 1991 C65 / C64DX (Prototype, NTSC)
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index f5df2be50b7..5d743637601 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -613,7 +613,6 @@ $(MESSOBJ)/amiga.a: \
$(MESS_MACHINE)/amigakbd.o \
$(MESS_DRIVERS)/amiga.o \
$(MESS_DRIVERS)/a3000.o \
- $(MESS_DRIVERS)/ami1200.o \
$(MESSOBJ)/amstrad.a: \
$(MESS_DRIVERS)/amstrad.o \