trunk/hash/amigaaga_flop.xml
| r0 | r18734 | |
| 1 | <?xml version="1.0"?> |
| 2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> |
| 3 | |
| 4 | <!-- General purpose software list for Amiga software requiring the AGA chipset (A1200 / A4000) |
| 5 | |
| 6 | the software listed here is not designed for use on systems without the AGA chipset and |
| 7 | will not function. |
| 8 | --> |
| 9 | |
| 10 | |
| 11 | |
| 12 | <softwarelist name="amigaaga_flop" description="Amiga AGA Floppy Disks list"> |
| 13 | |
| 14 | <!-- has manual protection --> |
| 15 | <software name="pballfna"> |
| 16 | <description>Pinball Fantasies AGA</description> |
| 17 | <year>1993</year> |
| 18 | <publisher>21st Century Entertainment</publisher> |
| 19 | |
| 20 | <part name="flop1" interface="floppy_3_5"> |
| 21 | <feature name="part_id" value="Disk 1" /> |
| 22 | <dataarea name="flop" size="1049612"> |
| 23 | <rom name="pinballfantasiesaga_pf1.ipf" size="1049612" crc="60e23065" sha1="0d401004a02c6e8af2532b0180ce42a3725c69ce" offset="0"/> |
| 24 | </dataarea> |
| 25 | </part> |
| 26 | |
| 27 | <part name="flop2" interface="floppy_3_5"> |
| 28 | <feature name="part_id" value="Disk 2" /> |
| 29 | <dataarea name="flop" size="1049612"> |
| 30 | <rom name="pinballfantasiesaga_pf2.ipf" size="1049612" crc="64e3b549" sha1="44d59c0660170eba8dee54d710cfec1f598a7a90" offset="0"/> |
| 31 | </dataarea> |
| 32 | </part> |
| 33 | |
| 34 | <part name="flop3" interface="floppy_3_5"> |
| 35 | <feature name="part_id" value="Disk 3" /> |
| 36 | <dataarea name="flop" size="1049612"> |
| 37 | <rom name="pinballfantasiesaga_pf3.ipf" size="1049612" crc="2a0d1c66" sha1="df95ae4ed9bda2d0563958c26fc23fdd5fe6f3d7" offset="0"/> |
| 38 | </dataarea> |
| 39 | </part> |
| 40 | |
| 41 | <part name="flop4" interface="floppy_3_5"> |
| 42 | <feature name="part_id" value="Disk 4" /> |
| 43 | <dataarea name="flop" size="1049612"> |
| 44 | <rom name="pinballfantasiesaga_pf4.ipf" size="1049612" crc="e5ab9484" sha1="83151b5738844bdc668c80b20dd2d742668063fb" offset="0"/> |
| 45 | </dataarea> |
| 46 | </part> |
| 47 | </software> |
| 48 | |
| 49 | <!-- unprotected --> |
| 50 | <software name="pballfnapdy" cloneof="pballfna"> |
| 51 | <description>Pinball Fantasies AGA (Cracked, PDY)</description> |
| 52 | <year>1993</year> |
| 53 | <publisher>21st Century Entertainment</publisher> |
| 54 | |
| 55 | <part name="flop1" interface="floppy_3_5"> |
| 56 | <feature name="part_id" value="Disk 1" /> |
| 57 | <dataarea name="flop" size="1049612"> |
| 58 | <rom name="pinball fantasies (1993)(21st century)(aga)(disk 1 of 4)[cr pdy].adf" size="901120" crc="708fc612" sha1="99e24713096bcfc90281e8c0ae4d57c395e66069" offset="0"/> |
| 59 | </dataarea> |
| 60 | </part> |
| 61 | |
| 62 | <part name="flop2" interface="floppy_3_5"> |
| 63 | <feature name="part_id" value="Disk 2" /> |
| 64 | <dataarea name="flop" size="1049612"> |
| 65 | <rom name="pinball fantasies (1993)(21st century)(aga)(disk 2 of 4).adf" size="901120" crc="eced3e6c" sha1="2f4669459021e0e756975061bf38d55982975281" offset="0"/> |
| 66 | </dataarea> |
| 67 | </part> |
| 68 | |
| 69 | <part name="flop3" interface="floppy_3_5"> |
| 70 | <feature name="part_id" value="Disk 3" /> |
| 71 | <dataarea name="flop" size="1049612"> |
| 72 | <rom name="pinball fantasies (1993)(21st century)(aga)(disk 3 of 4).adf" size="901120" crc="ff04b00c" sha1="ad12df201dea97987d0455e24fac0459e648da1a" offset="0"/> |
| 73 | </dataarea> |
| 74 | </part> |
| 75 | |
| 76 | <part name="flop4" interface="floppy_3_5"> |
| 77 | <feature name="part_id" value="Disk 4" /> |
| 78 | <dataarea name="flop" size="1049612"> |
| 79 | <rom name="pinball fantasies (1993)(21st century)(aga)(disk 4 of 4).adf" size="901120" crc="912a609f" sha1="0e6818ceabd9e362a9b15bac9a551d4a017fd536" offset="0"/> |
| 80 | </dataarea> |
| 81 | </part> |
| 82 | |
| 83 | </software> |
| 84 | |
| 85 | |
| 86 | <!-- severe gfx problems --> |
| 87 | <software name="pballill" supported="no"> |
| 88 | <description>Pinball Illusions</description> |
| 89 | <year>1995</year> |
| 90 | <publisher>21st Century Entertainment</publisher> |
| 91 | |
| 92 | <part name="flop1" interface="floppy_3_5"> |
| 93 | <feature name="part_id" value="Disk 1" /> |
| 94 | <dataarea name="flop" size="1049612"> |
| 95 | <rom name="pinballillusions_disk1.ipf" size="1049612" crc="0cf8949b" sha1="8970859b71aefdb13d47c9b16b279f52405dae4c" offset="0"/> |
| 96 | </dataarea> |
| 97 | </part> |
| 98 | |
| 99 | <part name="flop2" interface="floppy_3_5"> |
| 100 | <feature name="part_id" value="Disk 2" /> |
| 101 | <dataarea name="flop" size="1049612"> |
| 102 | <rom name="pinballillusions_disk2.ipf" size="1049612" crc="93ce1135" sha1="5dad662b278a45e4720043407bbf22c0a9932df5" offset="0"/> |
| 103 | </dataarea> |
| 104 | </part> |
| 105 | |
| 106 | <part name="flop3" interface="floppy_3_5"> |
| 107 | <feature name="part_id" value="Disk 3" /> |
| 108 | <dataarea name="flop" size="1049612"> |
| 109 | <rom name="pinballillusions_disk3.ipf" size="1049612" crc="282ea51d" sha1="39f78c077ee27f213ff3f07a991ba165212d780f" offset="0"/> |
| 110 | </dataarea> |
| 111 | </part> |
| 112 | |
| 113 | <part name="flop4" interface="floppy_3_5"> |
| 114 | <feature name="part_id" value="Disk 4" /> |
| 115 | <dataarea name="flop" size="1049612"> |
| 116 | <rom name="pinballillusions_disk4.ipf" size="1049612" crc="e551bc40" sha1="05757f0e6289385df204c2ced4fb0348aa4b39ee" offset="0"/> |
| 117 | </dataarea> |
| 118 | </part> |
| 119 | |
| 120 | </software> |
| 121 | |
| 122 | <!-- simple 1 disk game using AGA mode --> |
| 123 | <software name="gigertet"> |
| 124 | <description>Giger-Tetris</description> |
| 125 | <year>1993</year> |
| 126 | <publisher>Panic Production</publisher> |
| 127 | |
| 128 | <part name="flop1" interface="floppy_3_5"> |
| 129 | <feature name="part_id" value="Disk 1" /> |
| 130 | <dataarea name="flop" size="901120"> |
| 131 | <rom name="giger-tetris (1993)(panic production)(aga)(sw).adf" size="901120" crc="e58911f4" sha1="90d146454db7317e02f428aa24e01296db0ea2d4" offset="0"/> |
| 132 | </dataarea> |
| 133 | </part> |
| 134 | </software> |
| 135 | |
| 136 | <!-- various gfx issues, good test case for bugfixing? --> |
| 137 | <software name="dxpacaga" supported="partial"> |
| 138 | <description>Deluxe Pac-Man v1.7 AGA (1997-04-27)</description> |
| 139 | <year>1997</year> |
| 140 | <publisher>Edgar Vigdal</publisher> |
| 141 | |
| 142 | <part name="flop1" interface="floppy_3_5"> |
| 143 | <feature name="part_id" value="Disk 1" /> |
| 144 | <dataarea name="flop" size="901120"> |
| 145 | <rom name="deluxe pac-man v1.7 (1997-04-27)(vigdal, edgar)(aga)(sw-r).adf" size="901120" crc="0fb6d45d" sha1="378cb7c11d8f57d812469fcc8db1a1a848e8ce63" offset="0"/> |
| 146 | </dataarea> |
| 147 | </part> |
| 148 | </software> |
| 149 | |
| 150 | </softwarelist> |
| 151 | |
| 152 | |
trunk/src/mess/drivers/ami1200.c
| r18733 | r18734 | |
| 1 | | /* |
| 2 | | Amiga 1200 |
| 3 | | |
| 4 | | Preliminary MAME driver by Mariusz Wojcieszek |
| 5 | | CD-ROM controller by Ernesto Corvi |
| 6 | | Borrowed by incog for MESS |
| 7 | | |
| 8 | | 2009-05 Fabio Priuli: |
| 9 | | Amiga 1200 support is just sketched (I basically took cd32 and removed Akiko). I connected |
| 10 | | the floppy drive in the same way as in amiga.c but it seems to be not working, since I |
| 11 | | tried to load WB3.1 with no success. However, this problem may be due to anything: maybe |
| 12 | | the floppy code must be connected elsewhere, or the .adf image is broken, or I made some |
| 13 | | stupid mistake in the CIA interfaces. |
| 14 | | Later, it could be wise to re-factor this source and merge the non-AGA code with |
| 15 | | mess/drivers/amiga.c |
| 16 | | */ |
| 17 | | |
| 18 | | #include "emu.h" |
| 19 | | #include "cpu/m68000/m68000.h" |
| 20 | | #include "machine/6526cia.h" |
| 21 | | #include "machine/i2cmem.h" |
| 22 | | #include "machine/amigafdc.h" |
| 23 | | #include "machine/amigakbd.h" |
| 24 | | |
| 25 | | #include "includes/amiga.h" |
| 26 | | #include "includes/cd32.h" |
| 27 | | |
| 28 | | |
| 29 | | |
| 30 | | class ami1200_state : public amiga_state |
| 31 | | { |
| 32 | | public: |
| 33 | | ami1200_state(const machine_config &mconfig, device_type type, const char *tag) |
| 34 | | : amiga_state(mconfig, type, tag) { } |
| 35 | | |
| 36 | | UINT16 m_potgo_value; |
| 37 | | int m_cd32_shifter[2]; |
| 38 | | int m_oldstate[2]; |
| 39 | | DECLARE_WRITE32_MEMBER(aga_overlay_w); |
| 40 | | DECLARE_DRIVER_INIT(a1200); |
| 41 | | DECLARE_WRITE8_MEMBER(ami1200_cia_0_porta_w); |
| 42 | | DECLARE_READ8_MEMBER(ami1200_cia_0_portb_r); |
| 43 | | DECLARE_WRITE8_MEMBER(ami1200_cia_0_portb_w); |
| 44 | | DECLARE_READ8_MEMBER(a1200_cia_0_portA_r); |
| 45 | | }; |
| 46 | | |
| 47 | | |
| 48 | | |
| 49 | | #define A1200PAL_XTAL_X1 XTAL_28_37516MHz |
| 50 | | #define A1200PAL_XTAL_X2 XTAL_4_433619MHz |
| 51 | | |
| 52 | | |
| 53 | | |
| 54 | | static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra); |
| 55 | | |
| 56 | | WRITE32_MEMBER(ami1200_state::aga_overlay_w) |
| 57 | | { |
| 58 | | if (ACCESSING_BITS_16_23) |
| 59 | | { |
| 60 | | data = (data >> 16) & 1; |
| 61 | | |
| 62 | | /* switch banks as appropriate */ |
| 63 | | membank("bank1")->set_entry(data & 1); |
| 64 | | |
| 65 | | /* swap the write handlers between ROM and bank 1 based on the bit */ |
| 66 | | if ((data & 1) == 0) |
| 67 | | /* overlay disabled, map RAM on 0x000000 */ |
| 68 | | space.install_write_bank(0x000000, 0x1fffff, "bank1"); |
| 69 | | else |
| 70 | | /* overlay enabled, map Amiga system ROM on 0x000000 */ |
| 71 | | space.unmap_write(0x000000, 0x1fffff); |
| 72 | | } |
| 73 | | } |
| 74 | | |
| 75 | | /************************************* |
| 76 | | * |
| 77 | | * CIA-A port A access: |
| 78 | | * |
| 79 | | * PA7 = game port 1, pin 6 (fire) |
| 80 | | * PA6 = game port 0, pin 6 (fire) |
| 81 | | * PA5 = /RDY (disk ready) |
| 82 | | * PA4 = /TK0 (disk track 00) |
| 83 | | * PA3 = /WPRO (disk write protect) |
| 84 | | * PA2 = /CHNG (disk change) |
| 85 | | * PA1 = /LED (LED, 0=bright / audio filter control) |
| 86 | | * PA0 = MUTE |
| 87 | | * |
| 88 | | *************************************/ |
| 89 | | |
| 90 | | WRITE8_MEMBER(ami1200_state::ami1200_cia_0_porta_w) |
| 91 | | { |
| 92 | | device_t *device = machine().device("cia_0"); |
| 93 | | |
| 94 | | /* bit 2 = Power Led on Amiga */ |
| 95 | | set_led_status(machine(), 0, !BIT(data, 1)); |
| 96 | | |
| 97 | | handle_cd32_joystick_cia(this, data, mos6526_r(device, space, 2)); |
| 98 | | } |
| 99 | | |
| 100 | | /************************************* |
| 101 | | * |
| 102 | | * CIA-A port B access: |
| 103 | | * |
| 104 | | * PB7 = parallel data 7 |
| 105 | | * PB6 = parallel data 6 |
| 106 | | * PB5 = parallel data 5 |
| 107 | | * PB4 = parallel data 4 |
| 108 | | * PB3 = parallel data 3 |
| 109 | | * PB2 = parallel data 2 |
| 110 | | * PB1 = parallel data 1 |
| 111 | | * PB0 = parallel data 0 |
| 112 | | * |
| 113 | | *************************************/ |
| 114 | | |
| 115 | | READ8_MEMBER(ami1200_state::ami1200_cia_0_portb_r) |
| 116 | | { |
| 117 | | /* parallel port */ |
| 118 | | logerror("%s:CIA0_portb_r\n", machine().describe_context()); |
| 119 | | return 0xff; |
| 120 | | } |
| 121 | | |
| 122 | | WRITE8_MEMBER(ami1200_state::ami1200_cia_0_portb_w) |
| 123 | | { |
| 124 | | /* parallel port */ |
| 125 | | logerror("%s:CIA0_portb_w(%02x)\n", machine().describe_context(), data); |
| 126 | | } |
| 127 | | |
| 128 | | static ADDRESS_MAP_START( a1200_map, AS_PROGRAM, 32, ami1200_state ) |
| 129 | | ADDRESS_MAP_UNMAP_HIGH |
| 130 | | AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") |
| 131 | | AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w) |
| 132 | | AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff) |
| 133 | | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") |
| 134 | | AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff) |
| 135 | | AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* Kickstart */ |
| 136 | | ADDRESS_MAP_END |
| 137 | | |
| 138 | | |
| 139 | | //int cd32_input_port_val = 0; |
| 140 | | //int cd32_input_select = 0; |
| 141 | | |
| 142 | | static void cd32_potgo_w(running_machine &machine, UINT16 data) |
| 143 | | { |
| 144 | | ami1200_state *state = machine.driver_data<ami1200_state>(); |
| 145 | | int i; |
| 146 | | |
| 147 | | state->m_potgo_value = state->m_potgo_value & 0x5500; |
| 148 | | state->m_potgo_value |= data & 0xaa00; |
| 149 | | |
| 150 | | for (i = 0; i < 8; i += 2) |
| 151 | | { |
| 152 | | UINT16 dir = 0x0200 << i; |
| 153 | | if (data & dir) |
| 154 | | { |
| 155 | | UINT16 d = 0x0100 << i; |
| 156 | | state->m_potgo_value &= ~d; |
| 157 | | state->m_potgo_value |= data & d; |
| 158 | | } |
| 159 | | } |
| 160 | | for (i = 0; i < 2; i++) |
| 161 | | { |
| 162 | | UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */ |
| 163 | | UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */ |
| 164 | | if ((state->m_potgo_value & p5dir) && (state->m_potgo_value & p5dat)) |
| 165 | | state->m_cd32_shifter[i] = 8; |
| 166 | | } |
| 167 | | } |
| 168 | | |
| 169 | | static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra) |
| 170 | | { |
| 171 | | int i; |
| 172 | | |
| 173 | | for (i = 0; i < 2; i++) |
| 174 | | { |
| 175 | | UINT8 but = 0x40 << i; |
| 176 | | UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */ |
| 177 | | UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */ |
| 178 | | if (!(state->m_potgo_value & p5dir) || !(state->m_potgo_value & p5dat)) |
| 179 | | { |
| 180 | | if ((dra & but) && (pra & but) != state->m_oldstate[i]) |
| 181 | | { |
| 182 | | if (!(pra & but)) |
| 183 | | { |
| 184 | | state->m_cd32_shifter[i]--; |
| 185 | | if (state->m_cd32_shifter[i] < 0) |
| 186 | | state->m_cd32_shifter[i] = 0; |
| 187 | | } |
| 188 | | } |
| 189 | | } |
| 190 | | state->m_oldstate[i] = pra & but; |
| 191 | | } |
| 192 | | } |
| 193 | | |
| 194 | | |
| 195 | | static INPUT_PORTS_START( a1200 ) |
| 196 | | PORT_START("CIA0PORTA") |
| 197 | | PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_SPECIAL ) |
| 198 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 199 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 200 | | |
| 201 | | PORT_START("CIA0PORTB") |
| 202 | | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 203 | | |
| 204 | | PORT_START("JOY0DAT") |
| 205 | | PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, ami1200_state,amiga_joystick_convert, "P1JOY") |
| 206 | | PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 207 | | |
| 208 | | PORT_START("JOY1DAT") |
| 209 | | PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, ami1200_state,amiga_joystick_convert, "P2JOY") |
| 210 | | PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 211 | | |
| 212 | | PORT_START("POTGO") |
| 213 | | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 214 | | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 215 | | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 216 | | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 217 | | PORT_BIT( 0xaaff, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 218 | | |
| 219 | | PORT_START("P1JOY") |
| 220 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| 221 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) |
| 222 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) |
| 223 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) |
| 224 | | |
| 225 | | PORT_START("P2JOY") |
| 226 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) |
| 227 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) |
| 228 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) |
| 229 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) |
| 230 | | |
| 231 | | PORT_START("P0MOUSEX") |
| 232 | | PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 233 | | |
| 234 | | PORT_START("P0MOUSEY") |
| 235 | | PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 236 | | |
| 237 | | PORT_START("P1MOUSEX") |
| 238 | | PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(2) |
| 239 | | |
| 240 | | PORT_START("P1MOUSEY") |
| 241 | | PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(2) |
| 242 | | INPUT_PORTS_END |
| 243 | | |
| 244 | | |
| 245 | | /************************************* |
| 246 | | * |
| 247 | | * Sound definitions |
| 248 | | * |
| 249 | | *************************************/ |
| 250 | | |
| 251 | | READ8_MEMBER(ami1200_state::a1200_cia_0_portA_r) |
| 252 | | { |
| 253 | | UINT8 ret = machine().root_device().ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */ |
| 254 | | ret |= machine().device<amiga_fdc>("fdc")->ciaapra_r(); |
| 255 | | return ret; |
| 256 | | } |
| 257 | | |
| 258 | | |
| 259 | | static const legacy_mos6526_interface a1200_cia_0_intf = |
| 260 | | { |
| 261 | | DEVCB_DEVICE_LINE("cia_0", amiga_cia_0_irq), /* irq_func */ |
| 262 | | DEVCB_NULL, /* pc_func */ |
| 263 | | DEVCB_NULL, |
| 264 | | DEVCB_NULL, |
| 265 | | DEVCB_DRIVER_MEMBER(ami1200_state,a1200_cia_0_portA_r), |
| 266 | | DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_porta_w), /* port A */ |
| 267 | | DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_r), |
| 268 | | DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_w) /* port B */ |
| 269 | | }; |
| 270 | | |
| 271 | | static const legacy_mos6526_interface a1200_cia_1_intf = |
| 272 | | { |
| 273 | | DEVCB_DEVICE_LINE("cia_1", amiga_cia_1_irq), /* irq_func */ |
| 274 | | DEVCB_NULL, /* pc_func */ |
| 275 | | DEVCB_NULL, |
| 276 | | DEVCB_NULL, |
| 277 | | DEVCB_NULL, |
| 278 | | DEVCB_NULL, /* port A */ |
| 279 | | DEVCB_NULL, |
| 280 | | DEVCB_DEVICE_MEMBER("fdc", amiga_fdc, ciaaprb_w) /* port B */ |
| 281 | | }; |
| 282 | | |
| 283 | | static SLOT_INTERFACE_START( amiga_floppies ) |
| 284 | | SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) |
| 285 | | SLOT_INTERFACE_END |
| 286 | | |
| 287 | | |
| 288 | | static MACHINE_CONFIG_START( a1200n, ami1200_state ) |
| 289 | | |
| 290 | | /* basic machine hardware */ |
| 291 | | MCFG_CPU_ADD("maincpu", M68EC020, AMIGA_68EC020_NTSC_CLOCK) /* 14.3 Mhz */ |
| 292 | | MCFG_CPU_PROGRAM_MAP(a1200_map) |
| 293 | | |
| 294 | | // MCFG_CPU_ADD("keyboard_mpu", MC68HC05) |
| 295 | | |
| 296 | | MCFG_MACHINE_RESET_OVERRIDE(ami1200_state,amiga) |
| 297 | | |
| 298 | | /* video hardware */ |
| 299 | | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) |
| 300 | | |
| 301 | | MCFG_SCREEN_ADD("screen", RASTER) |
| 302 | | MCFG_SCREEN_REFRESH_RATE(59.997) |
| 303 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 304 | | MCFG_SCREEN_SIZE(512*2, 312) |
| 305 | | MCFG_SCREEN_VISIBLE_AREA((129-8-8)*2, (449+8-1+8)*2, 44-8, 300+8-1) |
| 306 | | MCFG_SCREEN_UPDATE_DRIVER(ami1200_state, screen_update_amiga_aga) |
| 307 | | |
| 308 | | MCFG_VIDEO_START_OVERRIDE(ami1200_state,amiga_aga) |
| 309 | | |
| 310 | | /* sound hardware */ |
| 311 | | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 312 | | |
| 313 | | MCFG_SOUND_ADD("amiga", AMIGA, XTAL_28_63636MHz/8) |
| 314 | | MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) |
| 315 | | MCFG_SOUND_ROUTE(1, "rspeaker", 0.25) |
| 316 | | MCFG_SOUND_ROUTE(2, "rspeaker", 0.25) |
| 317 | | MCFG_SOUND_ROUTE(3, "lspeaker", 0.25) |
| 318 | | |
| 319 | | /* cia */ |
| 320 | | MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_NTSC_CLOCK / 10, 0, a1200_cia_0_intf) |
| 321 | | MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_NTSC_CLOCK / 10, 0, a1200_cia_1_intf) |
| 322 | | |
| 323 | | /* fdc */ |
| 324 | | MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68EC020_NTSC_CLOCK/2) |
| 325 | | MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", 0, amiga_fdc::floppy_formats) |
| 326 | | MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, 0, amiga_fdc::floppy_formats) |
| 327 | | MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, 0, amiga_fdc::floppy_formats) |
| 328 | | MCFG_FLOPPY_DRIVE_ADD("fdc:3", amiga_floppies, 0, 0, amiga_fdc::floppy_formats) |
| 329 | | |
| 330 | | MCFG_AMIGA_KEYBOARD_ADD("kbd") |
| 331 | | MACHINE_CONFIG_END |
| 332 | | |
| 333 | | static MACHINE_CONFIG_DERIVED( a1200p, a1200n ) |
| 334 | | |
| 335 | | /* adjust for PAL specs */ |
| 336 | | MCFG_CPU_MODIFY("maincpu") |
| 337 | | MCFG_CPU_CLOCK(A1200PAL_XTAL_X1/2) /* 14.18758 MHz */ |
| 338 | | |
| 339 | | /* video hardware */ |
| 340 | | MCFG_SCREEN_MODIFY("screen") |
| 341 | | MCFG_SCREEN_REFRESH_RATE(50) |
| 342 | | |
| 343 | | /* sound hardware */ |
| 344 | | MCFG_SOUND_MODIFY("amiga") |
| 345 | | MCFG_SOUND_CLOCK(A1200PAL_XTAL_X1/8) /* 3.546895 MHz */ |
| 346 | | |
| 347 | | /* cia */ |
| 348 | | MCFG_DEVICE_MODIFY("cia_0") |
| 349 | | MCFG_DEVICE_CLOCK(A1200PAL_XTAL_X1/20) |
| 350 | | MCFG_DEVICE_MODIFY("cia_1") |
| 351 | | MCFG_DEVICE_CLOCK(A1200PAL_XTAL_X1/20) |
| 352 | | |
| 353 | | /* fdc */ |
| 354 | | MCFG_DEVICE_MODIFY("fdc") |
| 355 | | MCFG_DEVICE_CLOCK(A1200PAL_XTAL_X1/4) |
| 356 | | MACHINE_CONFIG_END |
| 357 | | |
| 358 | | |
| 359 | | /*************************************************************************** |
| 360 | | ROM DEFINITIONS |
| 361 | | ***************************************************************************/ |
| 362 | | |
| 363 | | ROM_START( a1200n ) |
| 364 | | ROM_REGION32_BE(0x080000, "user1", 0) |
| 365 | | ROM_DEFAULT_BIOS("kick31") |
| 366 | | ROM_SYSTEM_BIOS(0, "kick30", "Kickstart 3.0 (39.106)") |
| 367 | | ROMX_LOAD("391523-01.u6a", 0x000000, 0x040000, CRC(c742a412) SHA1(999eb81c65dfd07a71ee19315d99c7eb858ab186), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1)) |
| 368 | | ROMX_LOAD("391524-01.u6b", 0x000002, 0x040000, CRC(d55c6ec6) SHA1(3341108d3a402882b5ef9d3b242cbf3c8ab1a3e9), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1)) |
| 369 | | ROM_SYSTEM_BIOS(1, "kick31", "Kickstart 3.1 (40.068)") |
| 370 | | 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! |
| 371 | | ROMX_LOAD("391774-01.u6b", 0x000002, 0x040000, CRC(16c07bf8) SHA1(90e331be1970b0e53f53a9b0390b51b59b3869c2), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(2)) |
| 372 | | |
| 373 | | // COMMODORE | 391508-01 REV0 | KEYBOARD MPU |
| 374 | | ROM_REGION(0x1040, "keyboard_rev0", 0) |
| 375 | | ROM_LOAD("391508-01.u13", 0x0000, 0x1040, NO_DUMP) |
| 376 | | |
| 377 | | // Amiga Tech REV1 Keyboard MPU |
| 378 | | ROM_REGION(0x2f40, "keyboard_rev1", 0) |
| 379 | | ROM_LOAD("391508-02.u13", 0x0000, 0x2f40, NO_DUMP) |
| 380 | | ROM_END |
| 381 | | |
| 382 | | #define rom_a1200p rom_a1200n |
| 383 | | |
| 384 | | |
| 385 | | /***************************************************************************************************/ |
| 386 | | |
| 387 | | DRIVER_INIT_MEMBER(ami1200_state,a1200) |
| 388 | | { |
| 389 | | static const amiga_machine_interface cd32_intf = |
| 390 | | { |
| 391 | | AGA_CHIP_RAM_MASK, |
| 392 | | NULL, NULL, /* joy0dat_r & joy1dat_r */ |
| 393 | | cd32_potgo_w, /* potgo_w */ |
| 394 | | NULL, /* serdat_w */ |
| 395 | | NULL, /* scanline0_callback */ |
| 396 | | NULL, /* reset_callback */ |
| 397 | | NULL, /* nmi_callback */ |
| 398 | | FLAGS_AGA_CHIPSET /* flags */ |
| 399 | | }; |
| 400 | | |
| 401 | | /* configure our Amiga setup */ |
| 402 | | amiga_machine_config(machine(), &cd32_intf); |
| 403 | | |
| 404 | | /* set up memory */ |
| 405 | | membank("bank1")->configure_entry(0, m_chip_ram); |
| 406 | | membank("bank1")->configure_entry(1, machine().root_device().memregion("user1")->base()); |
| 407 | | } |
| 408 | | |
| 409 | | |
| 410 | | /***************************************************************************************************/ |
| 411 | | |
| 412 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ |
| 413 | | COMP( 1992, a1200n, 0, 0, a1200n, a1200, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (NTSC)" , GAME_NOT_WORKING ) |
| 414 | | COMP( 1992, a1200p, a1200n, 0, a1200p, a1200, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (PAL)" , GAME_NOT_WORKING ) |
trunk/src/mess/drivers/amiga.c
| r18733 | r18734 | |
| 15 | 15 | would commence ($C00000). |
| 16 | 16 | |
| 17 | 17 | ***************************************************************************/ |
| 18 | /* |
| 19 | Amiga 1200 |
| 18 | 20 | |
| 21 | Preliminary MAME driver by Mariusz Wojcieszek |
| 22 | CD-ROM controller by Ernesto Corvi |
| 23 | Borrowed by incog for MESS |
| 24 | |
| 25 | 2009-05 Fabio Priuli: |
| 26 | Amiga 1200 support is just sketched (I basically took cd32 and removed Akiko). I connected |
| 27 | the floppy drive in the same way as in amiga.c but it seems to be not working, since I |
| 28 | tried to load WB3.1 with no success. However, this problem may be due to anything: maybe |
| 29 | the floppy code must be connected elsewhere, or the .adf image is broken, or I made some |
| 30 | stupid mistake in the CIA interfaces. |
| 31 | Later, it could be wise to re-factor this source and merge the non-AGA code with |
| 32 | mess/drivers/amiga.c |
| 33 | */ |
| 34 | |
| 35 | |
| 36 | |
| 37 | |
| 38 | |
| 39 | |
| 40 | |
| 41 | |
| 42 | |
| 43 | |
| 19 | 44 | /* Core includes */ |
| 20 | 45 | #include "emu.h" |
| 21 | 46 | #include "includes/amiga.h" |
| 47 | #include "includes/cd32.h" |
| 22 | 48 | |
| 23 | 49 | /* Components */ |
| 24 | 50 | #include "cpu/m68000/m68000.h" |
| r18733 | r18734 | |
| 33 | 59 | #include "machine/ctronics.h" |
| 34 | 60 | #include "machine/nvram.h" |
| 35 | 61 | #include "sound/cdda.h" |
| 62 | #include "machine/i2cmem.h" |
| 36 | 63 | |
| 37 | 64 | /* Devices */ |
| 38 | 65 | #include "imagedev/chd_cd.h" |
| r18733 | r18734 | |
| 48 | 75 | DECLARE_MACHINE_RESET(cdtv); |
| 49 | 76 | }; |
| 50 | 77 | |
| 78 | |
| 79 | |
| 80 | class ami1200_state : public amiga_state |
| 81 | { |
| 82 | public: |
| 83 | ami1200_state(const machine_config &mconfig, device_type type, const char *tag) |
| 84 | : amiga_state(mconfig, type, tag) { } |
| 85 | |
| 86 | UINT16 m_potgo_value; |
| 87 | int m_cd32_shifter[2]; |
| 88 | int m_oldstate[2]; |
| 89 | DECLARE_WRITE32_MEMBER(aga_overlay_w); |
| 90 | DECLARE_DRIVER_INIT(a1200); |
| 91 | DECLARE_WRITE8_MEMBER(ami1200_cia_0_porta_w); |
| 92 | DECLARE_READ8_MEMBER(ami1200_cia_0_portb_r); |
| 93 | DECLARE_WRITE8_MEMBER(ami1200_cia_0_portb_w); |
| 94 | DECLARE_READ8_MEMBER(a1200_cia_0_portA_r); |
| 95 | }; |
| 96 | |
| 97 | |
| 98 | |
| 99 | #define A1200PAL_XTAL_X1 XTAL_28_37516MHz |
| 100 | #define A1200PAL_XTAL_X2 XTAL_4_433619MHz |
| 101 | |
| 102 | |
| 103 | |
| 104 | |
| 51 | 105 | static DECLARE_READ8_DEVICE_HANDLER( amiga_cia_0_portA_r ); |
| 52 | 106 | static DECLARE_READ8_DEVICE_HANDLER( amiga_cia_0_cdtv_portA_r ); |
| 53 | 107 | static DECLARE_WRITE8_DEVICE_HANDLER( amiga_cia_0_portA_w ); |
| r18733 | r18734 | |
| 112 | 166 | AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM - mirror */ |
| 113 | 167 | ADDRESS_MAP_END |
| 114 | 168 | |
| 169 | static ADDRESS_MAP_START( a1200_map, AS_PROGRAM, 32, ami1200_state ) |
| 170 | ADDRESS_MAP_UNMAP_HIGH |
| 171 | AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") |
| 172 | AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w) |
| 173 | AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff) |
| 174 | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") |
| 175 | AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff) |
| 176 | AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* Kickstart */ |
| 177 | ADDRESS_MAP_END |
| 178 | |
| 179 | |
| 115 | 180 | static ADDRESS_MAP_START(keyboard_mem, AS_PROGRAM, 8, amiga_state ) |
| 116 | 181 | AM_RANGE(0x0000, 0x003f) AM_RAM /* internal user ram */ |
| 117 | 182 | AM_RANGE(0x0040, 0x007f) AM_NOP /* unassigned */ |
| r18733 | r18734 | |
| 269 | 334 | PORT_INCLUDE( amiga_common ) |
| 270 | 335 | INPUT_PORTS_END |
| 271 | 336 | |
| 337 | |
| 272 | 338 | /*************************************************************************** |
| 273 | 339 | Machine drivers |
| 274 | 340 | ***************************************************************************/ |
| 275 | 341 | |
| 342 | |
| 343 | static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra); |
| 344 | |
| 345 | WRITE32_MEMBER(ami1200_state::aga_overlay_w) |
| 346 | { |
| 347 | if (ACCESSING_BITS_16_23) |
| 348 | { |
| 349 | data = (data >> 16) & 1; |
| 350 | |
| 351 | /* switch banks as appropriate */ |
| 352 | membank("bank1")->set_entry(data & 1); |
| 353 | |
| 354 | /* swap the write handlers between ROM and bank 1 based on the bit */ |
| 355 | if ((data & 1) == 0) |
| 356 | /* overlay disabled, map RAM on 0x000000 */ |
| 357 | space.install_write_bank(0x000000, 0x1fffff, "bank1"); |
| 358 | else |
| 359 | /* overlay enabled, map Amiga system ROM on 0x000000 */ |
| 360 | space.unmap_write(0x000000, 0x1fffff); |
| 361 | } |
| 362 | } |
| 363 | |
| 364 | /************************************* |
| 365 | * |
| 366 | * CIA-A port A access: |
| 367 | * |
| 368 | * PA7 = game port 1, pin 6 (fire) |
| 369 | * PA6 = game port 0, pin 6 (fire) |
| 370 | * PA5 = /RDY (disk ready) |
| 371 | * PA4 = /TK0 (disk track 00) |
| 372 | * PA3 = /WPRO (disk write protect) |
| 373 | * PA2 = /CHNG (disk change) |
| 374 | * PA1 = /LED (LED, 0=bright / audio filter control) |
| 375 | * PA0 = MUTE |
| 376 | * |
| 377 | *************************************/ |
| 378 | |
| 379 | WRITE8_MEMBER(ami1200_state::ami1200_cia_0_porta_w) |
| 380 | { |
| 381 | device_t *device = machine().device("cia_0"); |
| 382 | |
| 383 | /* bit 2 = Power Led on Amiga */ |
| 384 | set_led_status(machine(), 0, !BIT(data, 1)); |
| 385 | |
| 386 | handle_cd32_joystick_cia(this, data, mos6526_r(device, space, 2)); |
| 387 | } |
| 388 | |
| 389 | /************************************* |
| 390 | * |
| 391 | * CIA-A port B access: |
| 392 | * |
| 393 | * PB7 = parallel data 7 |
| 394 | * PB6 = parallel data 6 |
| 395 | * PB5 = parallel data 5 |
| 396 | * PB4 = parallel data 4 |
| 397 | * PB3 = parallel data 3 |
| 398 | * PB2 = parallel data 2 |
| 399 | * PB1 = parallel data 1 |
| 400 | * PB0 = parallel data 0 |
| 401 | * |
| 402 | *************************************/ |
| 403 | |
| 404 | |
| 405 | |
| 406 | |
| 407 | //int cd32_input_port_val = 0; |
| 408 | //int cd32_input_select = 0; |
| 409 | #if 0 |
| 410 | static void cd32_potgo_w(running_machine &machine, UINT16 data) |
| 411 | { |
| 412 | ami1200_state *state = machine.driver_data<ami1200_state>(); |
| 413 | int i; |
| 414 | |
| 415 | state->m_potgo_value = state->m_potgo_value & 0x5500; |
| 416 | state->m_potgo_value |= data & 0xaa00; |
| 417 | |
| 418 | for (i = 0; i < 8; i += 2) |
| 419 | { |
| 420 | UINT16 dir = 0x0200 << i; |
| 421 | if (data & dir) |
| 422 | { |
| 423 | UINT16 d = 0x0100 << i; |
| 424 | state->m_potgo_value &= ~d; |
| 425 | state->m_potgo_value |= data & d; |
| 426 | } |
| 427 | } |
| 428 | for (i = 0; i < 2; i++) |
| 429 | { |
| 430 | UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */ |
| 431 | UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */ |
| 432 | if ((state->m_potgo_value & p5dir) && (state->m_potgo_value & p5dat)) |
| 433 | state->m_cd32_shifter[i] = 8; |
| 434 | } |
| 435 | } |
| 436 | #endif |
| 437 | |
| 438 | static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra) |
| 439 | { |
| 440 | int i; |
| 441 | |
| 442 | for (i = 0; i < 2; i++) |
| 443 | { |
| 444 | UINT8 but = 0x40 << i; |
| 445 | UINT16 p5dir = 0x0200 << (i * 4); /* output enable P5 */ |
| 446 | UINT16 p5dat = 0x0100 << (i * 4); /* data P5 */ |
| 447 | if (!(state->m_potgo_value & p5dir) || !(state->m_potgo_value & p5dat)) |
| 448 | { |
| 449 | if ((dra & but) && (pra & but) != state->m_oldstate[i]) |
| 450 | { |
| 451 | if (!(pra & but)) |
| 452 | { |
| 453 | state->m_cd32_shifter[i]--; |
| 454 | if (state->m_cd32_shifter[i] < 0) |
| 455 | state->m_cd32_shifter[i] = 0; |
| 456 | } |
| 457 | } |
| 458 | } |
| 459 | state->m_oldstate[i] = pra & but; |
| 460 | } |
| 461 | } |
| 462 | |
| 463 | |
| 464 | |
| 465 | READ8_MEMBER(ami1200_state::ami1200_cia_0_portb_r) |
| 466 | { |
| 467 | /* parallel port */ |
| 468 | logerror("%s:CIA0_portb_r\n", machine().describe_context()); |
| 469 | return 0xff; |
| 470 | } |
| 471 | |
| 472 | WRITE8_MEMBER(ami1200_state::ami1200_cia_0_portb_w) |
| 473 | { |
| 474 | /* parallel port */ |
| 475 | logerror("%s:CIA0_portb_w(%02x)\n", machine().describe_context(), data); |
| 476 | } |
| 477 | |
| 478 | |
| 479 | |
| 276 | 480 | MACHINE_START_MEMBER(cdtv_state,cdtv) |
| 277 | 481 | { |
| 278 | 482 | MACHINE_START_CALL_LEGACY( amigacd ); |
| r18733 | r18734 | |
| 360 | 564 | DEVCB_NULL |
| 361 | 565 | }; |
| 362 | 566 | |
| 567 | READ8_MEMBER(ami1200_state::a1200_cia_0_portA_r) |
| 568 | { |
| 569 | UINT8 ret = machine().root_device().ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */ |
| 570 | ret |= machine().device<amiga_fdc>("fdc")->ciaapra_r(); |
| 571 | return ret; |
| 572 | } |
| 573 | |
| 574 | |
| 575 | static const legacy_mos6526_interface a1200_cia_0_intf = |
| 576 | { |
| 577 | DEVCB_DEVICE_LINE("cia_0", amiga_cia_0_irq), /* irq_func */ |
| 578 | DEVCB_NULL, /* pc_func */ |
| 579 | DEVCB_NULL, |
| 580 | DEVCB_NULL, |
| 581 | DEVCB_DRIVER_MEMBER(ami1200_state,a1200_cia_0_portA_r), |
| 582 | DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_porta_w), /* port A */ |
| 583 | DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_r), |
| 584 | DEVCB_DRIVER_MEMBER(ami1200_state,ami1200_cia_0_portb_w) /* port B */ |
| 585 | }; |
| 586 | |
| 587 | static const legacy_mos6526_interface a1200_cia_1_intf = |
| 588 | { |
| 589 | DEVCB_DEVICE_LINE("cia_1", amiga_cia_1_irq), /* irq_func */ |
| 590 | DEVCB_NULL, /* pc_func */ |
| 591 | DEVCB_NULL, |
| 592 | DEVCB_NULL, |
| 593 | DEVCB_NULL, |
| 594 | DEVCB_NULL, /* port A */ |
| 595 | DEVCB_NULL, |
| 596 | DEVCB_DEVICE_MEMBER("fdc", amiga_fdc, ciaaprb_w) /* port B */ |
| 597 | }; |
| 598 | |
| 599 | |
| 363 | 600 | static SLOT_INTERFACE_START( amiga_floppies ) |
| 364 | 601 | SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) |
| 365 | 602 | SLOT_INTERFACE_END |
| r18733 | r18734 | |
| 559 | 796 | MACHINE_CONFIG_END |
| 560 | 797 | |
| 561 | 798 | |
| 799 | |
| 800 | static MACHINE_CONFIG_START( a1200n, ami1200_state ) |
| 801 | |
| 802 | /* basic machine hardware */ |
| 803 | MCFG_CPU_ADD("maincpu", M68EC020, AMIGA_68EC020_NTSC_CLOCK) /* 14.3 Mhz */ |
| 804 | MCFG_CPU_PROGRAM_MAP(a1200_map) |
| 805 | |
| 806 | MCFG_CPU_ADD("keyboard", M6502, XTAL_1MHz) /* 1 MHz? */ |
| 807 | MCFG_CPU_PROGRAM_MAP(keyboard_mem) |
| 808 | MCFG_DEVICE_DISABLE() |
| 809 | |
| 810 | MCFG_MACHINE_RESET_OVERRIDE(amiga_state, amiga ) |
| 811 | |
| 812 | MCFG_SCREEN_ADD("screen", RASTER) |
| 813 | MCFG_SCREEN_REFRESH_RATE(59.997) |
| 814 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 815 | MCFG_SCREEN_SIZE(512*2, 312) |
| 816 | MCFG_SCREEN_VISIBLE_AREA((129-8-8)*2, (449+8-1+8)*2, 44-8, 300+8-1) |
| 817 | MCFG_SCREEN_UPDATE_DRIVER(ami1200_state, screen_update_amiga_aga) |
| 818 | |
| 819 | MCFG_VIDEO_START_OVERRIDE(ami1200_state,amiga_aga) |
| 820 | |
| 821 | |
| 822 | MCFG_PALETTE_LENGTH(4096) |
| 823 | MCFG_PALETTE_INIT_OVERRIDE(amiga_state, amiga ) |
| 824 | |
| 825 | MCFG_VIDEO_START_OVERRIDE(amiga_state,amiga) |
| 826 | |
| 827 | /* devices */ |
| 828 | MCFG_MSM6242_ADD("rtc",amiga_rtc_intf) |
| 829 | MCFG_CENTRONICS_PRINTER_ADD("centronics", amiga_centronics_config) |
| 830 | |
| 831 | /* sound hardware */ |
| 832 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 833 | |
| 834 | MCFG_SOUND_ADD("amiga", AMIGA, 3579545) |
| 835 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) |
| 836 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) |
| 837 | MCFG_SOUND_ROUTE(2, "rspeaker", 0.50) |
| 838 | MCFG_SOUND_ROUTE(3, "lspeaker", 0.50) |
| 839 | |
| 840 | /* cia */ |
| 841 | MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_NTSC_CLOCK /2 / 10, 60, cia_0_ntsc_intf) |
| 842 | MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_NTSC_CLOCK /2, 0, cia_1_intf) |
| 843 | |
| 844 | /* fdc */ |
| 845 | MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68EC020_NTSC_CLOCK / 2) |
| 846 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", 0, amiga_fdc::floppy_formats) |
| 847 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, 0, amiga_fdc::floppy_formats) |
| 848 | MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, 0, amiga_fdc::floppy_formats) |
| 849 | MCFG_FLOPPY_DRIVE_ADD("fdc:3", amiga_floppies, 0, 0, amiga_fdc::floppy_formats) |
| 850 | |
| 851 | MCFG_AMIGA_KEYBOARD_ADD("kbd") |
| 852 | |
| 853 | MCFG_SOFTWARE_LIST_ADD("flop_common","amiga_flop") |
| 854 | MCFG_SOFTWARE_LIST_ADD("flop_list","amiga1200_flop") |
| 855 | MCFG_SOFTWARE_LIST_ADD("flop_aga","amigaaga_flop") |
| 856 | |
| 857 | |
| 858 | MACHINE_CONFIG_END |
| 859 | |
| 860 | |
| 861 | static MACHINE_CONFIG_DERIVED( a1200, a1200n ) |
| 862 | |
| 863 | /* adjust for PAL specs */ |
| 864 | MCFG_CPU_MODIFY("maincpu") |
| 865 | MCFG_CPU_CLOCK(AMIGA_68EC020_PAL_CLOCK) /* 14.18758 MHz */ |
| 866 | |
| 867 | /* video hardware */ |
| 868 | MCFG_SCREEN_MODIFY("screen") |
| 869 | MCFG_SCREEN_REFRESH_RATE(50) |
| 870 | |
| 871 | /* sound hardware */ |
| 872 | MCFG_SOUND_MODIFY("amiga") |
| 873 | MCFG_SOUND_CLOCK(AMIGA_68EC020_PAL_CLOCK/8) /* 3.546895 MHz */ |
| 874 | |
| 875 | /* cia */ |
| 876 | MCFG_DEVICE_MODIFY("cia_0") |
| 877 | MCFG_DEVICE_CLOCK(AMIGA_68EC020_PAL_CLOCK/10/2) |
| 878 | MCFG_DEVICE_MODIFY("cia_1") |
| 879 | MCFG_DEVICE_CLOCK(AMIGA_68EC020_PAL_CLOCK/2) |
| 880 | |
| 881 | /* fdc */ |
| 882 | MCFG_DEVICE_MODIFY("fdc") |
| 883 | MCFG_DEVICE_CLOCK(AMIGA_68EC020_PAL_CLOCK/2) |
| 884 | MACHINE_CONFIG_END |
| 885 | |
| 886 | |
| 562 | 887 | /*************************************************************************** |
| 563 | 888 | |
| 564 | 889 | Amiga specific stuff |
| r18733 | r18734 | |
| 675 | 1000 | amiga_cart_init(machine()); |
| 676 | 1001 | } |
| 677 | 1002 | |
| 678 | | #ifdef UNUSED_FUNCTION |
| 679 | | DRIVER_INIT_MEMBER(apollo_state,amiga_ecs) |
| 1003 | |
| 1004 | |
| 1005 | DRIVER_INIT_MEMBER(amiga_state,cdtv) |
| 680 | 1006 | { |
| 681 | 1007 | static const amiga_machine_interface amiga_intf = |
| 682 | 1008 | { |
| 683 | 1009 | ECS_CHIP_RAM_MASK, |
| 684 | | amiga_cia_0_portA_r, NULL, /* CIA0 port A & B read */ |
| 685 | | amiga_cia_0_portA_w, NULL, /* CIA0 port A & B write */ |
| 686 | | NULL, NULL, /* CIA1 port A & B read */ |
| 687 | | NULL, amiga_fdc_control_w, /* CIA1 port A & B write */ |
| 688 | 1010 | amiga_read_joy0dat, amiga_read_joy1dat, /* joy0dat_r & joy1dat_r */ |
| 689 | 1011 | NULL, /* potgo_w */ |
| 690 | 1012 | NULL, /* serdat_w */ |
| 691 | 1013 | NULL, /* scanline0_callback */ |
| 692 | | amiga_reset, /* reset_callback */ |
| 693 | | amiga_cart_nmi, /* nmi_callback */ |
| 1014 | NULL, /* reset_callback */ |
| 1015 | NULL, /* nmi_callback */ |
| 694 | 1016 | 0 /* flags */ |
| 695 | 1017 | }; |
| 696 | 1018 | |
| 697 | 1019 | amiga_machine_config(machine(), &amiga_intf); |
| 698 | 1020 | |
| 699 | 1021 | /* set up memory */ |
| 700 | | 1.root_device().membank(0)->configure_entries(1, m_chip_ram, 0); |
| 701 | | 1.root_device().membank(1)->configure_entries(1, machine().root_device().memregion("user1")->base(), 0); |
| 702 | | |
| 703 | | /* initialize Action Replay (if present) */ |
| 704 | | amiga_cart_init(machine()); |
| 1022 | membank("bank1")->configure_entry(0, m_chip_ram); |
| 1023 | membank("bank1")->configure_entry(1, machine().root_device().memregion("user1")->base()); |
| 705 | 1024 | } |
| 706 | | #endif |
| 707 | 1025 | |
| 708 | | DRIVER_INIT_MEMBER(amiga_state,cdtv) |
| 1026 | DRIVER_INIT_MEMBER(ami1200_state,a1200) |
| 709 | 1027 | { |
| 710 | | static const amiga_machine_interface amiga_intf = |
| 1028 | static const amiga_machine_interface cd32_intf = |
| 711 | 1029 | { |
| 712 | | ECS_CHIP_RAM_MASK, |
| 1030 | AGA_CHIP_RAM_MASK, |
| 713 | 1031 | amiga_read_joy0dat, amiga_read_joy1dat, /* joy0dat_r & joy1dat_r */ |
| 714 | | NULL, /* potgo_w */ |
| 715 | | NULL, /* serdat_w */ |
| 716 | | NULL, /* scanline0_callback */ |
| 717 | | NULL, /* reset_callback */ |
| 718 | | NULL, /* nmi_callback */ |
| 719 | | 0 /* flags */ |
| 1032 | NULL, /* potgo_w */ |
| 1033 | NULL, /* serdat_w */ |
| 1034 | NULL, /* scanline0_callback */ |
| 1035 | NULL, /* reset_callback */ |
| 1036 | NULL, /* nmi_callback */ |
| 1037 | FLAGS_AGA_CHIPSET /* flags */ |
| 720 | 1038 | }; |
| 721 | 1039 | |
| 722 | | amiga_machine_config(machine(), &amiga_intf); |
| 1040 | /* configure our Amiga setup */ |
| 1041 | amiga_machine_config(machine(), &cd32_intf); |
| 723 | 1042 | |
| 724 | 1043 | /* set up memory */ |
| 725 | 1044 | membank("bank1")->configure_entry(0, m_chip_ram); |
| r18733 | r18734 | |
| 816 | 1135 | #define rom_ami600n rom_ami600 |
| 817 | 1136 | |
| 818 | 1137 | |
| 1138 | ROM_START( ami1200 ) |
| 1139 | ROM_REGION32_BE(0x080000, "user1", 0) |
| 1140 | ROM_DEFAULT_BIOS("kick31") |
| 1141 | ROM_SYSTEM_BIOS(0, "kick30", "Kickstart 3.0 (39.106)") |
| 1142 | ROMX_LOAD("391523-01.u6a", 0x000000, 0x040000, CRC(c742a412) SHA1(999eb81c65dfd07a71ee19315d99c7eb858ab186), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1)) |
| 1143 | ROMX_LOAD("391524-01.u6b", 0x000002, 0x040000, CRC(d55c6ec6) SHA1(3341108d3a402882b5ef9d3b242cbf3c8ab1a3e9), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(1)) |
| 1144 | // ROMX_LOAD("kickstart v3.0 r39.106 (1992)(commodore)(a1200)[!].rom", 0x000000, 0x080000, CRC(6c9b07d2) SHA1(70033828182fffc7ed106e5373a8b89dda76faa5), ROM_BIOS(1)) |
| 819 | 1145 | |
| 1146 | ROM_SYSTEM_BIOS(1, "kick31", "Kickstart 3.1 (40.068)") |
| 1147 | ROMX_LOAD("391773-01.u6a", 0x000000, 0x040000, CRC(08dbf275) SHA1(b8800f5f909298109ea69690b1b8523fa22ddb37), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(2)) |
| 1148 | ROMX_LOAD("391774-01.u6b", 0x000002, 0x040000, CRC(16c07bf8) SHA1(90e331be1970b0e53f53a9b0390b51b59b3869c2), ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2) | ROM_BIOS(2)) |
| 1149 | |
| 1150 | // COMMODORE | 391508-01 REV0 | KEYBOARD MPU |
| 1151 | ROM_REGION(0x1040, "keyboard", 0) |
| 1152 | ROM_LOAD("391508-01.u13", 0x0000, 0x1040, NO_DUMP) |
| 1153 | |
| 1154 | // Amiga Tech REV1 Keyboard MPU |
| 1155 | ROM_REGION(0x2f40, "keyboard_rev1", 0) |
| 1156 | ROM_LOAD("391508-02.u13", 0x0000, 0x2f40, NO_DUMP) |
| 1157 | ROM_END |
| 1158 | |
| 1159 | #define rom_ami1200n rom_ami1200 |
| 1160 | |
| 1161 | |
| 1162 | |
| 820 | 1163 | ROM_START( cdtv ) |
| 821 | 1164 | ROM_REGION16_BE(0x100000, "user1", 0) |
| 822 | 1165 | ROM_LOAD16_BYTE("391008-01.u34", 0x000000, 0x020000, CRC(791cb14b) SHA1(277a1778924496353ffe56be68063d2a334360e4)) |
| r18733 | r18734 | |
| 865 | 1208 | COMP( 1992, ami600, 0, 0, ami600, amiga, amiga_state, amiga, "Commodore Business Machines", "Amiga 600 (PAL, ECS)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) |
| 866 | 1209 | COMP( 1992, ami600n, ami600, 0, ami600n, amiga, amiga_state, amiga, "Commodore Business Machines", "Amiga 600 (NTSC, ECS)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) |
| 867 | 1210 | |
| 868 | | /* Amiga 1200 - see ami1200.c */ |
| 1211 | COMP( 1992, ami1200, 0, 0, a1200, amiga, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (PAL, AGA)" , GAME_NOT_WORKING ) |
| 1212 | COMP( 1992, ami1200n, ami1200, 0, a1200n, amiga, ami1200_state, a1200, "Commodore Business Machines", "Amiga 1200 (NTSC, AGA)" , GAME_NOT_WORKING ) |
| 869 | 1213 | |
| 870 | 1214 | |
| 871 | 1215 | COMP( 1991, cdtv, 0, 0, cdtv, cdtv, amiga_state, cdtv, "Commodore Business Machines", "CDTV (NTSC)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) |
| 872 | 1216 | |
| 873 | 1217 | /* CD32 - see cd32.c */ |
| 1218 | |
| 1219 | |