mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
spectrum and amiga changes from Haze (no whatsnew)
This commit is contained in:
parent
4dc8836c7d
commit
274bab4ac8
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -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
|
||||
|
58
hash/amiga1200_flop.xml
Normal file
58
hash/amiga1200_flop.xml
Normal file
@ -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>
|
||||
|
152
hash/amigaaga_flop.xml
Normal file
152
hash/amigaaga_flop.xml
Normal file
@ -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>
|
||||
|
||||
|
32
hash/pentagon_cass.xml
Normal file
32
hash/pentagon_cass.xml
Normal file
@ -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>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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'
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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 )
|
@ -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,35 +1000,7 @@ DRIVER_INIT_MEMBER(amiga_state,amiga)
|
||||
amiga_cart_init(machine());
|
||||
}
|
||||
|
||||
#ifdef UNUSED_FUNCTION
|
||||
DRIVER_INIT_MEMBER(apollo_state,amiga_ecs)
|
||||
{
|
||||
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 */
|
||||
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());
|
||||
}
|
||||
#endif
|
||||
|
||||
DRIVER_INIT_MEMBER(amiga_state,cdtv)
|
||||
{
|
||||
@ -726,6 +1023,28 @@ DRIVER_INIT_MEMBER(amiga_state,cdtv)
|
||||
membank("bank1")->configure_entry(1, machine().root_device().memregion("user1")->base());
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(ami1200_state,a1200)
|
||||
{
|
||||
static const amiga_machine_interface cd32_intf =
|
||||
{
|
||||
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 */
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
ROM DEFINITIONS
|
||||
@ -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 */
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user