diff options
| author | 2012-10-27 12:32:44 +0000 | |
|---|---|---|
| committer | 2012-10-27 12:32:44 +0000 | |
| commit | 274bab4ac810bb5f8be3d4be3a50299fad7edaf4 (patch) | |
| tree | 90e3dfd5a5145faf42fa76bca928709c47149606 /src | |
| parent | 4dc8836c7d2e8e3ca2609991586f660d924d54b2 (diff) | |
spectrum and amiga changes from Haze (no whatsnew)
Diffstat (limited to 'src')
| -rw-r--r-- | src/mess/drivers/ami1200.c | 414 | ||||
| -rw-r--r-- | src/mess/drivers/amiga.c | 396 | ||||
| -rw-r--r-- | src/mess/drivers/pentagon.c | 4 | ||||
| -rw-r--r-- | src/mess/mess.lst | 5 | ||||
| -rw-r--r-- | src/mess/mess.mak | 1 |
5 files changed, 378 insertions, 442 deletions
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 \ |
