trunk/src/mame/machine/asic65.c
| r26043 | r26044 | |
| 7 | 7 | *************************************/ |
| 8 | 8 | |
| 9 | 9 | #include "emu.h" |
| 10 | | #include "cpu/tms32010/tms32010.h" |
| 11 | 10 | #include "asic65.h" |
| 12 | 11 | |
| 13 | 12 | |
| 14 | 13 | #define LOG_ASIC 0 |
| 15 | 14 | |
| 16 | 15 | |
| 17 | | /************************************* |
| 18 | | * |
| 19 | | * !$#@$ asic |
| 20 | | * |
| 21 | | *************************************/ |
| 22 | | |
| 23 | | static struct _asic65_t |
| 24 | | { |
| 25 | | UINT8 type; |
| 26 | | int command; |
| 27 | | UINT16 param[32]; |
| 28 | | UINT16 yorigin; |
| 29 | | UINT8 param_index; |
| 30 | | UINT8 result_index; |
| 31 | | UINT8 reset_state; |
| 32 | | UINT8 last_bank; |
| 33 | | |
| 34 | | /* ROM-based interface states */ |
| 35 | | device_t *cpu; |
| 36 | | UINT8 tfull; |
| 37 | | UINT8 _68full; |
| 38 | | UINT8 cmd; |
| 39 | | UINT8 xflg; |
| 40 | | UINT16 _68data; |
| 41 | | UINT16 tdata; |
| 42 | | |
| 43 | | FILE * log; |
| 44 | | } asic65; |
| 45 | | |
| 46 | | |
| 47 | 16 | #define PARAM_WRITE 0 |
| 48 | 17 | #define COMMAND_WRITE 1 |
| 49 | 18 | #define DATA_READ 2 |
| r26043 | r26044 | |
| 113 | 82 | } |
| 114 | 83 | }; |
| 115 | 84 | |
| 85 | const device_type ASIC65 = &device_creator<asic65_device>; |
| 116 | 86 | |
| 87 | asic65_device::asic65_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 88 | : device_t(mconfig, ASIC65, "ASIC65", tag, owner, clock, "asic65", __FILE__), |
| 89 | m_asic65_type(0), |
| 90 | m_command(0), |
| 91 | m_yorigin(0x1800), |
| 92 | m_param_index(0), |
| 93 | m_result_index(0), |
| 94 | m_reset_state(0), |
| 95 | m_last_bank(0), |
| 96 | m_ourcpu(*this, "asic65cpu"), |
| 97 | m_tfull(0), |
| 98 | m_68full(0), |
| 99 | m_cmd(0), |
| 100 | m_xflg(0), |
| 101 | m_68data(0), |
| 102 | m_tdata(0), |
| 103 | m_log(NULL) |
| 104 | { |
| 105 | for (int i = 0; i < 32; i++) |
| 106 | { |
| 107 | m_param[i] = 0; |
| 108 | } |
| 109 | } |
| 117 | 110 | |
| 118 | | /************************************* |
| 119 | | * |
| 120 | | * Configure the chip |
| 121 | | * |
| 122 | | *************************************/ |
| 111 | //------------------------------------------------- |
| 112 | // device_config_complete - perform any |
| 113 | // operations now that the configuration is |
| 114 | // complete |
| 115 | //------------------------------------------------- |
| 123 | 116 | |
| 124 | | void asic65_config(running_machine &machine, int asictype) |
| 117 | void asic65_device::device_config_complete() |
| 125 | 118 | { |
| 126 | | memset(&asic65, 0, sizeof(asic65)); |
| 127 | | asic65.type = asictype; |
| 128 | | asic65.yorigin = 0x1800; |
| 129 | | if (asic65.type == ASIC65_ROMBASED) |
| 130 | | asic65.cpu = machine.device("asic65"); |
| 131 | 119 | } |
| 132 | 120 | |
| 121 | //------------------------------------------------- |
| 122 | // device_start - device-specific startup |
| 123 | //------------------------------------------------- |
| 133 | 124 | |
| 125 | void asic65_device::device_start() |
| 126 | { |
| 127 | save_item(NAME(m_asic65_type)); |
| 128 | save_item(NAME(m_command)); |
| 129 | save_item(NAME(m_yorigin)); |
| 130 | save_item(NAME(m_param_index)); |
| 131 | save_item(NAME(m_result_index)); |
| 132 | save_item(NAME(m_reset_state)); |
| 133 | save_item(NAME(m_last_bank)); |
| 134 | save_item(NAME(m_tfull)); |
| 135 | save_item(NAME(m_68full)); |
| 136 | save_item(NAME(m_cmd)); |
| 137 | save_item(NAME(m_xflg)); |
| 138 | save_item(NAME(m_68data)); |
| 139 | save_item(NAME(m_tdata)); |
| 140 | save_item(NAME(m_param)); |
| 141 | } |
| 134 | 142 | |
| 135 | | /************************************* |
| 136 | | * |
| 137 | | * Reset the chip |
| 138 | | * |
| 139 | | *************************************/ |
| 143 | //------------------------------------------------- |
| 144 | // device_reset - device-specific startup |
| 145 | //------------------------------------------------- |
| 140 | 146 | |
| 141 | | void asic65_reset(running_machine &machine, int state) |
| 147 | void asic65_device::device_reset() |
| 142 | 148 | { |
| 143 | | address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); |
| 149 | } |
| 144 | 150 | |
| 151 | void asic65_device::reset_line(int state) |
| 152 | { |
| 153 | address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); |
| 154 | |
| 145 | 155 | /* rom-based means reset and clear states */ |
| 146 | | if (asic65.cpu != NULL) |
| 147 | | asic65.cpu->execute().set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); |
| 156 | if (m_asic65_type == ASIC65_ROMBASED) |
| 157 | m_ourcpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); |
| 148 | 158 | |
| 149 | 159 | /* otherwise, do it manually */ |
| 150 | 160 | else |
| 151 | 161 | { |
| 152 | | machine.device<cpu_device>("asic65")->suspend(SUSPEND_REASON_DISABLE, 1); |
| 162 | m_ourcpu->suspend(SUSPEND_REASON_DISABLE, 1); |
| 153 | 163 | |
| 154 | 164 | /* if reset is being signalled, clear everything */ |
| 155 | | if (state && !asic65.reset_state) |
| 156 | | asic65.command = -1; |
| 165 | if (state && !m_reset_state) |
| 166 | m_command = -1; |
| 157 | 167 | |
| 158 | 168 | /* if reset is going high, latch the command */ |
| 159 | | else if (!state && asic65.reset_state) |
| 169 | else if (!state && m_reset_state) |
| 160 | 170 | { |
| 161 | | if (asic65.command != -1) |
| 162 | | asic65_data_w(space, 1, asic65.command, 0xffff); |
| 171 | if (m_command != -1) |
| 172 | data_w(space, 1, m_command, 0xffff); |
| 163 | 173 | } |
| 164 | 174 | |
| 165 | 175 | /* update the state */ |
| 166 | | asic65.reset_state = state; |
| 176 | m_reset_state = state; |
| 167 | 177 | } |
| 168 | 178 | } |
| 169 | 179 | |
| 170 | | |
| 171 | | |
| 172 | 180 | /************************************* |
| 173 | 181 | * |
| 174 | 182 | * Handle writes to the chip |
| 175 | 183 | * |
| 176 | 184 | *************************************/ |
| 177 | 185 | |
| 178 | | static TIMER_CALLBACK( m68k_asic65_deferred_w ) |
| 186 | void asic65_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 179 | 187 | { |
| 180 | | asic65.tfull = 1; |
| 181 | | asic65.cmd = param >> 16; |
| 182 | | asic65.tdata = param; |
| 183 | | if (asic65.cpu != NULL) |
| 184 | | asic65.cpu->execute().set_input_line(0, ASSERT_LINE); |
| 188 | switch (id) |
| 189 | { |
| 190 | case TIMER_M68K_ASIC65_DEFERRED_W: |
| 191 | m_tfull = 1; |
| 192 | m_cmd = param >> 16; |
| 193 | m_tdata = param; |
| 194 | if (m_asic65_type == ASIC65_ROMBASED) |
| 195 | m_ourcpu->set_input_line(0, ASSERT_LINE); |
| 196 | break; |
| 197 | default: |
| 198 | assert_always(FALSE, "Unknown id in asic65_device::device_timer"); |
| 199 | } |
| 185 | 200 | } |
| 186 | 201 | |
| 187 | 202 | |
| 188 | | WRITE16_HANDLER( asic65_data_w ) |
| 203 | WRITE16_MEMBER( asic65_device::data_w ) |
| 189 | 204 | { |
| 190 | 205 | /* logging */ |
| 191 | | if (LOG_ASIC && !asic65.log) asic65.log = fopen("asic65.log", "w"); |
| 206 | if (LOG_ASIC && !m_log) m_log = fopen("m_log", "w"); |
| 192 | 207 | |
| 193 | 208 | /* rom-based use a deferred write mechanism */ |
| 194 | | if (asic65.type == ASIC65_ROMBASED) |
| 209 | if (m_asic65_type == ASIC65_ROMBASED) |
| 195 | 210 | { |
| 196 | | space.machine().scheduler().synchronize(FUNC(m68k_asic65_deferred_w), data | (offset << 16)); |
| 197 | | space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); |
| 211 | synchronize(TIMER_M68K_ASIC65_DEFERRED_W, data | (offset << 16)); |
| 212 | machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); |
| 198 | 213 | return; |
| 199 | 214 | } |
| 200 | 215 | |
| 201 | 216 | /* parameters go to offset 0 */ |
| 202 | 217 | if (!(offset & 1)) |
| 203 | 218 | { |
| 204 | | if (asic65.log) fprintf(asic65.log, " W=%04X", data); |
| 219 | if (m_log) fprintf(m_log, " W=%04X", data); |
| 205 | 220 | |
| 206 | 221 | /* add to the parameter list, but don't overflow */ |
| 207 | | asic65.param[asic65.param_index++] = data; |
| 208 | | if (asic65.param_index >= 32) |
| 209 | | asic65.param_index = 32; |
| 222 | m_param[m_param_index++] = data; |
| 223 | if (m_param_index >= 32) |
| 224 | m_param_index = 32; |
| 210 | 225 | } |
| 211 | 226 | |
| 212 | 227 | /* commands go to offset 2 */ |
| 213 | 228 | else |
| 214 | 229 | { |
| 215 | | int command = (data < MAX_COMMANDS) ? command_map[asic65.type][data] : OP_UNKNOWN; |
| 216 | | if (asic65.log) fprintf(asic65.log, "\n(%06X)%c%04X:", space.device().safe_pcbase(), (command == OP_UNKNOWN) ? '*' : ' ', data); |
| 230 | int command = (data < MAX_COMMANDS) ? command_map[m_asic65_type][data] : OP_UNKNOWN; |
| 231 | if (m_log) fprintf(m_log, "\n(%06X)%c%04X:", safe_pcbase(), (command == OP_UNKNOWN) ? '*' : ' ', data); |
| 217 | 232 | |
| 218 | 233 | /* set the command number and reset the parameter/result indices */ |
| 219 | | asic65.command = data; |
| 220 | | asic65.result_index = asic65.param_index = 0; |
| 234 | m_command = data; |
| 235 | m_result_index = m_param_index = 0; |
| 221 | 236 | } |
| 222 | 237 | } |
| 223 | 238 | |
| 224 | 239 | |
| 225 | | READ16_HANDLER( asic65_r ) |
| 240 | READ16_MEMBER( asic65_device::read ) |
| 226 | 241 | { |
| 227 | | int command = (asic65.command < MAX_COMMANDS) ? command_map[asic65.type][asic65.command] : OP_UNKNOWN; |
| 242 | int command = (m_command < MAX_COMMANDS) ? command_map[m_asic65_type][m_command] : OP_UNKNOWN; |
| 228 | 243 | INT64 element, result64 = 0; |
| 229 | 244 | UINT16 result = 0; |
| 230 | 245 | |
| 231 | 246 | /* rom-based just returns latched data */ |
| 232 | | if (asic65.type == ASIC65_ROMBASED) |
| 247 | if (m_asic65_type == ASIC65_ROMBASED) |
| 233 | 248 | { |
| 234 | | asic65._68full = 0; |
| 235 | | space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); |
| 236 | | return asic65._68data; |
| 249 | m_68full = 0; |
| 250 | machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); |
| 251 | return m_68data; |
| 237 | 252 | } |
| 238 | 253 | |
| 239 | 254 | /* update results */ |
| 240 | 255 | switch (command) |
| 241 | 256 | { |
| 242 | 257 | case OP_UNKNOWN: /* return bogus data */ |
| 243 | | popmessage("ASIC65: Unknown cmd %02X", asic65.command); |
| 258 | popmessage("ASIC65: Unknown cmd %02X", m_command); |
| 244 | 259 | break; |
| 245 | 260 | |
| 246 | 261 | case OP_REFLECT: /* reflect data */ |
| 247 | | if (asic65.param_index >= 1) |
| 248 | | result = asic65.param[--asic65.param_index]; |
| 262 | if (m_param_index >= 1) |
| 263 | result = m_param[--m_param_index]; |
| 249 | 264 | break; |
| 250 | 265 | |
| 251 | 266 | case OP_CHECKSUM: /* compute checksum (should be XX27) */ |
| r26043 | r26044 | |
| 261 | 276 | break; |
| 262 | 277 | |
| 263 | 278 | case OP_RESET: /* reset */ |
| 264 | | asic65.result_index = asic65.param_index = 0; |
| 279 | m_result_index = m_param_index = 0; |
| 265 | 280 | break; |
| 266 | 281 | |
| 267 | 282 | case OP_SIN: /* sin */ |
| 268 | | if (asic65.param_index >= 1) |
| 269 | | result = (int)(16384. * sin(M_PI * (double)(INT16)asic65.param[0] / 32768.)); |
| 283 | if (m_param_index >= 1) |
| 284 | result = (int)(16384. * sin(M_PI * (double)(INT16)m_param[0] / 32768.)); |
| 270 | 285 | break; |
| 271 | 286 | |
| 272 | 287 | case OP_COS: /* cos */ |
| 273 | | if (asic65.param_index >= 1) |
| 274 | | result = (int)(16384. * cos(M_PI * (double)(INT16)asic65.param[0] / 32768.)); |
| 288 | if (m_param_index >= 1) |
| 289 | result = (int)(16384. * cos(M_PI * (double)(INT16)m_param[0] / 32768.)); |
| 275 | 290 | break; |
| 276 | 291 | |
| 277 | 292 | case OP_ATAN: /* vector angle */ |
| 278 | | if (asic65.param_index >= 4) |
| 293 | if (m_param_index >= 4) |
| 279 | 294 | { |
| 280 | | INT32 xint = (INT32)((asic65.param[0] << 16) | asic65.param[1]); |
| 281 | | INT32 yint = (INT32)((asic65.param[2] << 16) | asic65.param[3]); |
| 295 | INT32 xint = (INT32)((m_param[0] << 16) | m_param[1]); |
| 296 | INT32 yint = (INT32)((m_param[2] << 16) | m_param[3]); |
| 282 | 297 | double a = atan2((double)yint, (double)xint); |
| 283 | 298 | result = (INT16)(a * 32768. / M_PI); |
| 284 | 299 | } |
| r26043 | r26044 | |
| 287 | 302 | case OP_TMATRIXMULT: /* matrix multiply by transpose */ |
| 288 | 303 | /* if this is wrong, the labels on the car selection screen */ |
| 289 | 304 | /* in Race Drivin' will be off */ |
| 290 | | if (asic65.param_index >= 9+6) |
| 305 | if (m_param_index >= 9+6) |
| 291 | 306 | { |
| 292 | | INT32 v0 = (INT32)((asic65.param[9] << 16) | asic65.param[10]); |
| 293 | | INT32 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]); |
| 294 | | INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]); |
| 307 | INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]); |
| 308 | INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]); |
| 309 | INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]); |
| 295 | 310 | |
| 296 | 311 | /* 2 results per element */ |
| 297 | | switch (asic65.result_index / 2) |
| 312 | switch (m_result_index / 2) |
| 298 | 313 | { |
| 299 | 314 | case 0: |
| 300 | | result64 = (INT64)v0 * (INT16)asic65.param[0] + |
| 301 | | (INT64)v1 * (INT16)asic65.param[3] + |
| 302 | | (INT64)v2 * (INT16)asic65.param[6]; |
| 315 | result64 = (INT64)v0 * (INT16)m_param[0] + |
| 316 | (INT64)v1 * (INT16)m_param[3] + |
| 317 | (INT64)v2 * (INT16)m_param[6]; |
| 303 | 318 | break; |
| 304 | 319 | |
| 305 | 320 | case 1: |
| 306 | | result64 = (INT64)v0 * (INT16)asic65.param[1] + |
| 307 | | (INT64)v1 * (INT16)asic65.param[4] + |
| 308 | | (INT64)v2 * (INT16)asic65.param[7]; |
| 321 | result64 = (INT64)v0 * (INT16)m_param[1] + |
| 322 | (INT64)v1 * (INT16)m_param[4] + |
| 323 | (INT64)v2 * (INT16)m_param[7]; |
| 309 | 324 | break; |
| 310 | 325 | |
| 311 | 326 | case 2: |
| 312 | | result64 = (INT64)v0 * (INT16)asic65.param[2] + |
| 313 | | (INT64)v1 * (INT16)asic65.param[5] + |
| 314 | | (INT64)v2 * (INT16)asic65.param[8]; |
| 327 | result64 = (INT64)v0 * (INT16)m_param[2] + |
| 328 | (INT64)v1 * (INT16)m_param[5] + |
| 329 | (INT64)v2 * (INT16)m_param[8]; |
| 315 | 330 | break; |
| 316 | 331 | } |
| 317 | 332 | |
| 318 | 333 | /* remove lower 14 bits and pass back either upper or lower words */ |
| 319 | 334 | result64 >>= 14; |
| 320 | | result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); |
| 321 | | asic65.result_index++; |
| 335 | result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); |
| 336 | m_result_index++; |
| 322 | 337 | } |
| 323 | 338 | break; |
| 324 | 339 | |
| 325 | 340 | case OP_MATRIXMULT: /* matrix multiply???? */ |
| 326 | | if (asic65.param_index >= 9+6) |
| 341 | if (m_param_index >= 9+6) |
| 327 | 342 | { |
| 328 | | INT32 v0 = (INT32)((asic65.param[9] << 16) | asic65.param[10]); |
| 329 | | INT32 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]); |
| 330 | | INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]); |
| 343 | INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]); |
| 344 | INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]); |
| 345 | INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]); |
| 331 | 346 | |
| 332 | 347 | /* 2 results per element */ |
| 333 | | switch (asic65.result_index / 2) |
| 348 | switch (m_result_index / 2) |
| 334 | 349 | { |
| 335 | 350 | case 0: |
| 336 | | result64 = (INT64)v0 * (INT16)asic65.param[0] + |
| 337 | | (INT64)v1 * (INT16)asic65.param[1] + |
| 338 | | (INT64)v2 * (INT16)asic65.param[2]; |
| 351 | result64 = (INT64)v0 * (INT16)m_param[0] + |
| 352 | (INT64)v1 * (INT16)m_param[1] + |
| 353 | (INT64)v2 * (INT16)m_param[2]; |
| 339 | 354 | break; |
| 340 | 355 | |
| 341 | 356 | case 1: |
| 342 | | result64 = (INT64)v0 * (INT16)asic65.param[3] + |
| 343 | | (INT64)v1 * (INT16)asic65.param[4] + |
| 344 | | (INT64)v2 * (INT16)asic65.param[5]; |
| 357 | result64 = (INT64)v0 * (INT16)m_param[3] + |
| 358 | (INT64)v1 * (INT16)m_param[4] + |
| 359 | (INT64)v2 * (INT16)m_param[5]; |
| 345 | 360 | break; |
| 346 | 361 | |
| 347 | 362 | case 2: |
| 348 | | result64 = (INT64)v0 * (INT16)asic65.param[6] + |
| 349 | | (INT64)v1 * (INT16)asic65.param[7] + |
| 350 | | (INT64)v2 * (INT16)asic65.param[8]; |
| 363 | result64 = (INT64)v0 * (INT16)m_param[6] + |
| 364 | (INT64)v1 * (INT16)m_param[7] + |
| 365 | (INT64)v2 * (INT16)m_param[8]; |
| 351 | 366 | break; |
| 352 | 367 | } |
| 353 | 368 | |
| 354 | 369 | /* remove lower 14 bits and pass back either upper or lower words */ |
| 355 | 370 | result64 >>= 14; |
| 356 | | result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); |
| 357 | | asic65.result_index++; |
| 371 | result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); |
| 372 | m_result_index++; |
| 358 | 373 | } |
| 359 | 374 | break; |
| 360 | 375 | |
| 361 | 376 | case OP_YORIGIN: |
| 362 | | if (asic65.param_index >= 1) |
| 363 | | asic65.yorigin = asic65.param[asic65.param_index - 1]; |
| 377 | if (m_param_index >= 1) |
| 378 | m_yorigin = m_param[m_param_index - 1]; |
| 364 | 379 | break; |
| 365 | 380 | |
| 366 | 381 | case OP_TRANSFORM: /* 3d transform */ |
| 367 | | if (asic65.param_index >= 2) |
| 382 | if (m_param_index >= 2) |
| 368 | 383 | { |
| 369 | 384 | /* param 0 == 1/z */ |
| 370 | 385 | /* param 1 == height */ |
| r26043 | r26044 | |
| 373 | 388 | /* return 0 == scale factor for 1/z */ |
| 374 | 389 | /* return 1 == transformed X */ |
| 375 | 390 | /* return 2 == transformed Y, taking height into account */ |
| 376 | | element = (INT16)asic65.param[0]; |
| 377 | | if (asic65.param_index == 2) |
| 391 | element = (INT16)m_param[0]; |
| 392 | if (m_param_index == 2) |
| 378 | 393 | { |
| 379 | | result64 = (element * (INT16)asic65.param[1]) >> 8; |
| 394 | result64 = (element * (INT16)m_param[1]) >> 8; |
| 380 | 395 | result64 -= 1; |
| 381 | 396 | if (result64 > 0x3fff) result64 = 0; |
| 382 | 397 | } |
| 383 | | else if (asic65.param_index == 3) |
| 398 | else if (m_param_index == 3) |
| 384 | 399 | { |
| 385 | | result64 = (element * (INT16)asic65.param[2]) >> 15; |
| 400 | result64 = (element * (INT16)m_param[2]) >> 15; |
| 386 | 401 | result64 += 0xa8; |
| 387 | 402 | } |
| 388 | | else if (asic65.param_index == 4) |
| 403 | else if (m_param_index == 4) |
| 389 | 404 | { |
| 390 | | result64 = (INT16)((element * (INT16)asic65.param[3]) >> 10); |
| 391 | | result64 = (INT16)asic65.yorigin - result64 - (result64 << 1); |
| 405 | result64 = (INT16)((element * (INT16)m_param[3]) >> 10); |
| 406 | result64 = (INT16)m_yorigin - result64 - (result64 << 1); |
| 392 | 407 | } |
| 393 | 408 | result = result64 & 0xffff; |
| 394 | 409 | } |
| 395 | 410 | break; |
| 396 | 411 | |
| 397 | 412 | case OP_INITBANKS: /* initialize banking */ |
| 398 | | asic65.last_bank = 0; |
| 413 | m_last_bank = 0; |
| 399 | 414 | break; |
| 400 | 415 | |
| 401 | 416 | case OP_SETBANK: /* set a bank */ |
| r26043 | r26044 | |
| 414 | 429 | { 0x77f0,0x77fe,0x77f2,0x77fc,0x77f4,0x77fa,0x77f6,0x77f8 }, |
| 415 | 430 | { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 }, |
| 416 | 431 | }; |
| 417 | | if (asic65.param_index >= 1) |
| 432 | if (m_param_index >= 1) |
| 418 | 433 | { |
| 419 | | if (asic65.param_index < sizeof(banklist) && banklist[asic65.param[0]] < 4) |
| 420 | | asic65.last_bank = banklist[asic65.param[0]]; |
| 421 | | result = bankaddr[asic65.last_bank][(asic65.result_index < 8) ? asic65.result_index : 7]; |
| 422 | | asic65.result_index++; |
| 434 | if (m_param_index < sizeof(banklist) && banklist[m_param[0]] < 4) |
| 435 | m_last_bank = banklist[m_param[0]]; |
| 436 | result = bankaddr[m_last_bank][(m_result_index < 8) ? m_result_index : 7]; |
| 437 | m_result_index++; |
| 423 | 438 | } |
| 424 | 439 | break; |
| 425 | 440 | } |
| r26043 | r26044 | |
| 430 | 445 | { |
| 431 | 446 | 0x0eb2,0x1000,0x171b,0x3d28 |
| 432 | 447 | }; |
| 433 | | result = bankverify[asic65.last_bank]; |
| 448 | result = bankverify[m_last_bank]; |
| 434 | 449 | break; |
| 435 | 450 | } |
| 436 | 451 | } |
| 437 | 452 | |
| 438 | | if (LOG_ASIC && !asic65.log) asic65.log = fopen("asic65.log", "w"); |
| 439 | | if (asic65.log) fprintf(asic65.log, " (R=%04X)", result); |
| 453 | if (LOG_ASIC && !m_log) m_log = fopen("m_log", "w"); |
| 454 | if (m_log) fprintf(m_log, " (R=%04X)", result); |
| 440 | 455 | |
| 441 | 456 | return result; |
| 442 | 457 | } |
| 443 | 458 | |
| 444 | 459 | |
| 445 | | READ16_HANDLER( asic65_io_r ) |
| 460 | READ16_MEMBER( asic65_device::io_r ) |
| 446 | 461 | { |
| 447 | | if (asic65.type == ASIC65_ROMBASED) |
| 462 | if (m_asic65_type == ASIC65_ROMBASED) |
| 448 | 463 | { |
| 449 | 464 | /* bit 15 = TFULL */ |
| 450 | 465 | /* bit 14 = 68FULL */ |
| 451 | 466 | /* bit 13 = XFLG */ |
| 452 | 467 | /* bit 12 = controlled by jumper */ |
| 453 | | space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); |
| 454 | | return (asic65.tfull << 15) | (asic65._68full << 14) | (asic65.xflg << 13) | 0x0000; |
| 468 | machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); |
| 469 | return (m_tfull << 15) | (m_68full << 14) | (m_xflg << 13) | 0x0000; |
| 455 | 470 | } |
| 456 | 471 | else |
| 457 | 472 | { |
| r26043 | r26044 | |
| 468 | 483 | * |
| 469 | 484 | *************************************/ |
| 470 | 485 | |
| 471 | | static WRITE16_HANDLER( asic65_68k_w ) |
| 486 | WRITE16_MEMBER( asic65_device::m68k_w ) |
| 472 | 487 | { |
| 473 | | asic65._68full = 1; |
| 474 | | asic65._68data = data; |
| 488 | m_68full = 1; |
| 489 | m_68data = data; |
| 475 | 490 | } |
| 476 | 491 | |
| 477 | 492 | |
| 478 | | static READ16_HANDLER( asic65_68k_r ) |
| 493 | READ16_MEMBER( asic65_device::m68k_r ) |
| 479 | 494 | { |
| 480 | | asic65.tfull = 0; |
| 481 | | if (asic65.cpu != NULL) |
| 482 | | asic65.cpu->execute().set_input_line(0, CLEAR_LINE); |
| 483 | | return asic65.tdata; |
| 495 | m_tfull = 0; |
| 496 | if (m_asic65_type == ASIC65_ROMBASED) |
| 497 | m_ourcpu->set_input_line(0, CLEAR_LINE); |
| 498 | return m_tdata; |
| 484 | 499 | } |
| 485 | 500 | |
| 486 | 501 | |
| 487 | | static WRITE16_HANDLER( asic65_stat_w ) |
| 502 | WRITE16_MEMBER( asic65_device::stat_w ) |
| 488 | 503 | { |
| 489 | | asic65.xflg = data & 1; |
| 504 | m_xflg = data & 1; |
| 490 | 505 | } |
| 491 | 506 | |
| 492 | 507 | |
| 493 | | static READ16_HANDLER( asic65_stat_r ) |
| 508 | READ16_MEMBER( asic65_device::stat_r ) |
| 494 | 509 | { |
| 495 | 510 | /* bit 15 = 68FULL */ |
| 496 | 511 | /* bit 14 = TFULL */ |
| 497 | 512 | /* bit 13 = CMD */ |
| 498 | 513 | /* bit 12 = controlled by jumper (0 = test?) */ |
| 499 | | return (asic65._68full << 15) | (asic65.tfull << 14) | (asic65.cmd << 13) | 0x1000; |
| 514 | return (m_68full << 15) | (m_tfull << 14) | (m_cmd << 13) | 0x1000; |
| 500 | 515 | } |
| 501 | 516 | |
| 502 | 517 | |
| 503 | | static READ16_HANDLER( asci65_get_bio ) |
| 518 | READ16_MEMBER( asic65_device::get_bio ) |
| 504 | 519 | { |
| 505 | | if (!asic65.tfull) |
| 520 | if (!m_tfull) |
| 506 | 521 | space.device().execute().spin_until_interrupt(); |
| 507 | | return asic65.tfull ? CLEAR_LINE : ASSERT_LINE; |
| 522 | return m_tfull ? CLEAR_LINE : ASSERT_LINE; |
| 508 | 523 | } |
| 509 | 524 | |
| 510 | 525 | |
| r26043 | r26044 | |
| 515 | 530 | * |
| 516 | 531 | *************************************/ |
| 517 | 532 | |
| 518 | | static ADDRESS_MAP_START( asic65_program_map, AS_PROGRAM, 16, driver_device ) |
| 533 | static ADDRESS_MAP_START( asic65_program_map, AS_PROGRAM, 16, asic65_device ) |
| 519 | 534 | ADDRESS_MAP_UNMAP_HIGH |
| 520 | 535 | AM_RANGE(0x000, 0xfff) AM_ROM |
| 521 | 536 | ADDRESS_MAP_END |
| 522 | 537 | |
| 523 | | static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, driver_device ) |
| 524 | | AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_68k_r, asic65_68k_w) |
| 525 | | AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_stat_r, asic65_stat_w) |
| 526 | | AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ_LEGACY(asci65_get_bio) |
| 538 | static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, asic65_device ) |
| 539 | AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE(m68k_r, m68k_w) |
| 540 | AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE(stat_r, stat_w) |
| 541 | AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(get_bio) |
| 527 | 542 | ADDRESS_MAP_END |
| 528 | 543 | |
| 529 | 544 | |
| r26043 | r26044 | |
| 537 | 552 | MACHINE_CONFIG_FRAGMENT( asic65 ) |
| 538 | 553 | |
| 539 | 554 | /* ASIC65 */ |
| 540 | | MCFG_CPU_ADD("asic65", TMS32010, 20000000) |
| 555 | MCFG_CPU_ADD("asic65cpu", TMS32010, 20000000) |
| 541 | 556 | MCFG_CPU_PROGRAM_MAP(asic65_program_map) |
| 542 | 557 | MCFG_CPU_IO_MAP(asic65_io_map) |
| 543 | | MACHINE_CONFIG_END |
| 558 | MACHINE_CONFIG_END |
| 544 | 559 | |
| 560 | //------------------------------------------------- |
| 561 | // machine_config_additions - device-specific |
| 562 | // machine configurations |
| 563 | //------------------------------------------------- |
| 545 | 564 | |
| 565 | machine_config_constructor asic65_device::device_mconfig_additions() const |
| 566 | { |
| 567 | return MACHINE_CONFIG_NAME( asic65 ); |
| 568 | } |
| 546 | 569 | |
| 570 | |
| 571 | |
| 547 | 572 | /*********************************************************************** |
| 548 | 573 | |
| 549 | 574 | Information about various versions: |
trunk/src/mame/drivers/atarig42.c
| r26043 | r26044 | |
| 20 | 20 | ***************************************************************************/ |
| 21 | 21 | |
| 22 | 22 | #include "emu.h" |
| 23 | | #include "machine/asic65.h" |
| 24 | 23 | #include "video/atarirle.h" |
| 25 | 24 | #include "includes/atarig42.h" |
| 26 | 25 | |
| r26043 | r26044 | |
| 92 | 91 | if (ACCESSING_BITS_8_15) |
| 93 | 92 | { |
| 94 | 93 | /* bit 14 controls the ASIC65 reset line */ |
| 95 | | asic65_reset(machine(), (~data >> 14) & 1); |
| 94 | m_asic65->reset_line((~data >> 14) & 1); |
| 96 | 95 | |
| 97 | 96 | /* bits 13-11 are the MO control bits */ |
| 98 | 97 | m_rle->control_write(space, 0, (data >> 11) & 7); |
| r26043 | r26044 | |
| 344 | 343 | AM_RANGE(0xe03000, 0xe03001) AM_WRITE(video_int_ack_w) |
| 345 | 344 | AM_RANGE(0xe03800, 0xe03801) AM_WRITE(watchdog_reset16_w) |
| 346 | 345 | AM_RANGE(0xe80000, 0xe80fff) AM_RAM |
| 347 | | AM_RANGE(0xf40000, 0xf40001) AM_READ_LEGACY(asic65_io_r) |
| 348 | | AM_RANGE(0xf60000, 0xf60001) AM_READ_LEGACY(asic65_r) |
| 349 | | AM_RANGE(0xf80000, 0xf80003) AM_WRITE_LEGACY(asic65_data_w) |
| 346 | AM_RANGE(0xf40000, 0xf40001) AM_DEVREAD("asic65", asic65_device, io_r) |
| 347 | AM_RANGE(0xf60000, 0xf60001) AM_DEVREAD("asic65", asic65_device, read) |
| 348 | AM_RANGE(0xf80000, 0xf80003) AM_DEVWRITE("asic65", asic65_device, data_w) |
| 350 | 349 | AM_RANGE(0xfa0000, 0xfa0fff) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) |
| 351 | 350 | AM_RANGE(0xfc0000, 0xfc0fff) AM_RAM_WRITE(paletteram_666_w) AM_SHARE("paletteram") |
| 352 | 351 | AM_RANGE(0xff0000, 0xff0fff) AM_RAM AM_SHARE("rle") |
| r26043 | r26044 | |
| 539 | 538 | MCFG_CPU_PROGRAM_MAP(main_map) |
| 540 | 539 | MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen) |
| 541 | 540 | |
| 542 | | /* ASIC65 */ |
| 543 | | MCFG_FRAGMENT_ADD(asic65) |
| 544 | | |
| 545 | 541 | MCFG_MACHINE_START_OVERRIDE(atarig42_state,atarig42) |
| 546 | 542 | MCFG_MACHINE_RESET_OVERRIDE(atarig42_state,atarig42) |
| 547 | 543 | |
| r26043 | r26044 | |
| 573 | 569 | |
| 574 | 570 | static MACHINE_CONFIG_DERIVED( atarig42_0x200, atarig42 ) |
| 575 | 571 | MCFG_ATARIRLE_ADD("rle", modesc_0x200) |
| 572 | |
| 573 | /* ASIC65 */ |
| 574 | MCFG_ASIC65_ADD("asic65", ASIC65_ROMBASED) |
| 576 | 575 | MACHINE_CONFIG_END |
| 577 | 576 | |
| 578 | 577 | static MACHINE_CONFIG_DERIVED( atarig42_0x400, atarig42 ) |
| 579 | 578 | MCFG_ATARIRLE_ADD("rle", modesc_0x400) |
| 579 | |
| 580 | /* ASIC65 */ |
| 581 | MCFG_ASIC65_ADD("asic65", ASIC65_GUARDIANS) |
| 580 | 582 | MACHINE_CONFIG_END |
| 581 | 583 | |
| 582 | 584 | |
| r26043 | r26044 | |
| 595 | 597 | ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) ) |
| 596 | 598 | ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) ) |
| 597 | 599 | |
| 598 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 600 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 599 | 601 | ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) ) |
| 600 | 602 | |
| 601 | 603 | ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */ |
| r26043 | r26044 | |
| 653 | 655 | ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) ) /* PALs & BPROMs in White labels */ |
| 654 | 656 | ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) ) |
| 655 | 657 | |
| 656 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 658 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 657 | 659 | ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) ) |
| 658 | 660 | |
| 659 | 661 | ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */ |
| r26043 | r26044 | |
| 712 | 714 | ROM_LOAD16_BYTE( "136092-2023.9e", 0x40000, 0x20000, CRC(cfa29316) SHA1(4e0e76304e29ee59bc2ce9a704e3f651dc9d473c) ) |
| 713 | 715 | ROM_LOAD16_BYTE( "136092-2022.9cd", 0x40001, 0x20000, CRC(ed2abc91) SHA1(81531040d5663f6ab82e924210056e3737e17a8d) ) |
| 714 | 716 | |
| 715 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 717 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 716 | 718 | ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, NO_DUMP ) |
| 717 | 719 | |
| 718 | 720 | ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */ |
| r26043 | r26044 | |
| 780 | 782 | m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::roadriot_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::roadriot_sloop_data_w),this)); |
| 781 | 783 | main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this)); |
| 782 | 784 | |
| 783 | | asic65_config(machine(), ASIC65_ROMBASED); |
| 784 | | /* |
| 785 | /* |
| 785 | 786 | Road Riot color MUX |
| 786 | 787 | |
| 787 | 788 | CRA10=!MGEP*!AN.VID7*AN.0 -- if (mopri < pfpri) && (!alpha) |
| r26043 | r26044 | |
| 816 | 817 | m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::guardians_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::guardians_sloop_data_w),this)); |
| 817 | 818 | main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this)); |
| 818 | 819 | |
| 819 | | asic65_config(machine(), ASIC65_GUARDIANS); |
| 820 | | /* |
| 820 | /* |
| 821 | 821 | Guardians color MUX |
| 822 | 822 | |
| 823 | 823 | CRA10=MGEP*!AN.VID7*AN.0*!MO.0 -- if (mopri >= pfpri) && (!alpha) && (mopix != 0) |
trunk/src/mame/drivers/harddriv.c
| r26043 | r26044 | |
| 326 | 326 | |
| 327 | 327 | |
| 328 | 328 | #include "emu.h" |
| 329 | | #include "machine/atarigen.h" |
| 330 | | #include "machine/asic65.h" |
| 331 | 329 | #include "sound/dac.h" |
| 332 | 330 | #include "includes/slapstic.h" |
| 333 | 331 | #include "includes/harddriv.h" |
| r26043 | r26044 | |
| 1482 | 1480 | MCFG_CPU_PROGRAM_MAP(dsk_dsp32_map) |
| 1483 | 1481 | |
| 1484 | 1482 | /* ASIC65 */ |
| 1485 | | MCFG_FRAGMENT_ADD( asic65 ) |
| 1483 | MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD) |
| 1486 | 1484 | MACHINE_CONFIG_END |
| 1487 | 1485 | |
| 1488 | 1486 | |
| r26043 | r26044 | |
| 1495 | 1493 | MCFG_CPU_PROGRAM_MAP(dsk2_dsp32_map) |
| 1496 | 1494 | |
| 1497 | 1495 | /* ASIC65 */ |
| 1498 | | MCFG_FRAGMENT_ADD( asic65 ) |
| 1496 | MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD) |
| 1499 | 1497 | MACHINE_CONFIG_END |
| 1500 | 1498 | |
| 1501 | 1499 | |
| r26043 | r26044 | |
| 1597 | 1595 | MCFG_DEVICE_REMOVE("lspeaker") |
| 1598 | 1596 | MCFG_DEVICE_REMOVE("rspeaker") |
| 1599 | 1597 | |
| 1600 | | MCFG_FRAGMENT_ADD( asic65 ) /* ASIC65 on DSPCOM board */ |
| 1601 | | |
| 1598 | MCFG_ASIC65_ADD("asic65", ASIC65_STEELTAL) /* ASIC65 on DSPCOM board */ |
| 1599 | |
| 1602 | 1600 | /* sund hardware */ |
| 1603 | 1601 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 1604 | 1602 | |
| r26043 | r26044 | |
| 2562 | 2560 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2563 | 2561 | ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) |
| 2564 | 2562 | |
| 2565 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2563 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2566 | 2564 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2567 | 2565 | |
| 2568 | 2566 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2610 | 2608 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2611 | 2609 | ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) |
| 2612 | 2610 | |
| 2613 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2611 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2614 | 2612 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2615 | 2613 | |
| 2616 | 2614 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2658 | 2656 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2659 | 2657 | ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) |
| 2660 | 2658 | |
| 2661 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2659 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2662 | 2660 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2663 | 2661 | |
| 2664 | 2662 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2706 | 2704 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2707 | 2705 | ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) |
| 2708 | 2706 | |
| 2709 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2707 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2710 | 2708 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2711 | 2709 | |
| 2712 | 2710 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2754 | 2752 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2755 | 2753 | ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) |
| 2756 | 2754 | |
| 2757 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2755 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2758 | 2756 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2759 | 2757 | |
| 2760 | 2758 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2802 | 2800 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2803 | 2801 | ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) |
| 2804 | 2802 | |
| 2805 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2803 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2806 | 2804 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2807 | 2805 | |
| 2808 | 2806 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2850 | 2848 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2851 | 2849 | ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) |
| 2852 | 2850 | |
| 2853 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2851 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2854 | 2852 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2855 | 2853 | |
| 2856 | 2854 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2898 | 2896 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2899 | 2897 | ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) |
| 2900 | 2898 | |
| 2901 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2899 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2902 | 2900 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2903 | 2901 | |
| 2904 | 2902 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2946 | 2944 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2947 | 2945 | ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) |
| 2948 | 2946 | |
| 2949 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2947 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2950 | 2948 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2951 | 2949 | |
| 2952 | 2950 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 2994 | 2992 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 2995 | 2993 | ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) |
| 2996 | 2994 | |
| 2997 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 2995 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 2998 | 2996 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 2999 | 2997 | |
| 3000 | 2998 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3042 | 3040 | ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) |
| 3043 | 3041 | ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) |
| 3044 | 3042 | |
| 3045 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3043 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3046 | 3044 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3047 | 3045 | |
| 3048 | 3046 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3090 | 3088 | ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) |
| 3091 | 3089 | ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) |
| 3092 | 3090 | |
| 3093 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3091 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3094 | 3092 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3095 | 3093 | |
| 3096 | 3094 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3138 | 3136 | ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) |
| 3139 | 3137 | ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) |
| 3140 | 3138 | |
| 3141 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3139 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3142 | 3140 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3143 | 3141 | |
| 3144 | 3142 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3186 | 3184 | ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) |
| 3187 | 3185 | ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) |
| 3188 | 3186 | |
| 3189 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3187 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3190 | 3188 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3191 | 3189 | |
| 3192 | 3190 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3234 | 3232 | ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) |
| 3235 | 3233 | ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) |
| 3236 | 3234 | |
| 3237 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3235 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3238 | 3236 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3239 | 3237 | |
| 3240 | 3238 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3282 | 3280 | ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) |
| 3283 | 3281 | ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) |
| 3284 | 3282 | |
| 3285 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3283 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3286 | 3284 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3287 | 3285 | |
| 3288 | 3286 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3330 | 3328 | ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) |
| 3331 | 3329 | ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) |
| 3332 | 3330 | |
| 3333 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3331 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3334 | 3332 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3335 | 3333 | |
| 3336 | 3334 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3378 | 3376 | ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) ) |
| 3379 | 3377 | ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) ) |
| 3380 | 3378 | |
| 3381 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3379 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3382 | 3380 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3383 | 3381 | |
| 3384 | 3382 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3426 | 3424 | ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) ) |
| 3427 | 3425 | ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) ) |
| 3428 | 3426 | |
| 3429 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3427 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3430 | 3428 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3431 | 3429 | |
| 3432 | 3430 | ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ |
| r26043 | r26044 | |
| 3578 | 3576 | |
| 3579 | 3577 | /* ----------------------- */ |
| 3580 | 3578 | |
| 3581 | | ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ |
| 3579 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */ |
| 3582 | 3580 | ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) |
| 3583 | 3581 | |
| 3584 | 3582 | /* ADSP board */ |
| r26043 | r26044 | |
| 3627 | 3625 | ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) |
| 3628 | 3626 | ROM_CONTINUE( 0x004000, 0x00c000 ) |
| 3629 | 3627 | |
| 3630 | | ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ |
| 3628 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */ |
| 3631 | 3629 | ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) |
| 3632 | 3630 | |
| 3633 | 3631 | ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ |
| r26043 | r26044 | |
| 3688 | 3686 | ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) |
| 3689 | 3687 | ROM_CONTINUE( 0x004000, 0x00c000 ) |
| 3690 | 3688 | |
| 3691 | | ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ |
| 3689 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */ |
| 3692 | 3690 | ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) |
| 3693 | 3691 | |
| 3694 | 3692 | ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ |
| r26043 | r26044 | |
| 3749 | 3747 | ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) |
| 3750 | 3748 | ROM_CONTINUE( 0x004000, 0x00c000 ) |
| 3751 | 3749 | |
| 3752 | | ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ |
| 3750 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */ |
| 3753 | 3751 | ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) |
| 3754 | 3752 | |
| 3755 | 3753 | ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ |
| r26043 | r26044 | |
| 3810 | 3808 | ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) |
| 3811 | 3809 | ROM_CONTINUE( 0x004000, 0x00c000 ) |
| 3812 | 3810 | |
| 3813 | | ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ |
| 3811 | ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */ |
| 3814 | 3812 | ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) |
| 3815 | 3813 | |
| 3816 | 3814 | ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ |
| r26043 | r26044 | |
| 3867 | 3865 | ROM_LOAD16_BYTE( "136091-0016.200y", 0x0e0000, 0x010000, CRC(f85ad532) SHA1(f9d2480104a7487c23d33b05aa044b7f4ca08c67) ) |
| 3868 | 3866 | ROM_LOAD16_BYTE( "136091-0015.210y", 0x0e0001, 0x010000, CRC(a2e406f3) SHA1(a7266508011c892cb1032fa4d77ccbafedc844e8) ) |
| 3869 | 3867 | |
| 3870 | | ROM_REGION( 0x10000 + 0x10000, "asic65", 0 ) /* dummy region for ADSP 2105 */ |
| 3868 | ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */ |
| 3871 | 3869 | ROM_LOAD( "136091-0033.10j", 0x000000, 0x010000, CRC(57504ab6) SHA1(ec8361b7da964c07ca0da48a87537badc3986fe0) ) |
| 3872 | 3870 | |
| 3873 | 3871 | ROM_REGION( 0x60000, "user1", 0 ) /* 384k for object ROM */ |
| r26043 | r26044 | |
| 3920 | 3918 | ROM_LOAD16_BYTE( "coprochi.bin",0x1c0000, 0x20000, CRC(5d2ca109) SHA1(e1a94d3fbfd5d542732555bf60268e73d66b3a06) ) |
| 3921 | 3919 | ROM_LOAD16_BYTE( "coproclo.bin",0x1c0001, 0x20000, CRC(5f98b04d) SHA1(9c4fa4092fd85f1d67be44f2ff91a907a87db51a) ) |
| 3922 | 3920 | |
| 3923 | | ROM_REGION( 0x10000 + 0x10000, "asic65", 0 ) /* dummy region for ADSP 2105 */ |
| 3921 | ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */ |
| 3924 | 3922 | ROM_LOAD( "sboot.bin", 0x000000, 0x010000, CRC(cde4d010) SHA1(853f4b813ff70fe74cd87e92131c46fca045610d) ) |
| 3925 | 3923 | |
| 3926 | 3924 | ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */ |
| r26043 | r26044 | |
| 3980 | 3978 | ROM_REGION( 0x10000 + 0x10000, "dsp32", 0 ) /* dummy region for ADSP 2105 */ |
| 3981 | 3979 | ROM_LOAD( "sboota.bin", 0x10000 + 0x00000, 0x10000, CRC(3ef819cd) SHA1(c547b869a3a37a82fb46584fe0ef0cfe21a4f882) ) |
| 3982 | 3980 | |
| 3983 | | ROM_REGION( 0x10000 + 0x10000, "asic65", 0 ) /* dummy region for ADSP 2105 */ |
| 3981 | ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */ |
| 3984 | 3982 | ROM_LOAD( "xboota.bin", 0x10000 + 0x00000, 0x10000, CRC(d9c49901) SHA1(9f90ae3a47eb1ef00c3ec3661f60402c2eae2108) ) |
| 3985 | 3983 | |
| 3986 | 3984 | ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */ |
| r26043 | r26044 | |
| 4191 | 4189 | m_dsk_zram = (UINT16 *)(usr3 + 0x50000); |
| 4192 | 4190 | |
| 4193 | 4191 | /* install ASIC65 */ |
| 4194 | | m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x914000, 0x917fff, FUNC(asic65_data_w)); |
| 4195 | | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x914000, 0x917fff, FUNC(asic65_r)); |
| 4196 | | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x918000, 0x91bfff, FUNC(asic65_io_r)); |
| 4192 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x914000, 0x917fff, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65)); |
| 4193 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x914000, 0x917fff, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65)); |
| 4194 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x918000, 0x91bfff, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65)); |
| 4197 | 4195 | |
| 4198 | 4196 | /* install extra ROM */ |
| 4199 | 4197 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x940000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_small_rom_r), this)); |
| 4200 | 4198 | m_dsk_rom = (UINT16 *)(usr3 + 0x00000); |
| 4201 | | |
| 4202 | | /* set up the ASIC65 */ |
| 4203 | | asic65_config(machine(), ASIC65_STANDARD); |
| 4204 | 4199 | } |
| 4205 | 4200 | |
| 4206 | 4201 | |
| r26043 | r26044 | |
| 4210 | 4205 | UINT8 *usr3 = memregion("user3")->base(); |
| 4211 | 4206 | |
| 4212 | 4207 | /* install ASIC65 */ |
| 4213 | | m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x824000, 0x824003, FUNC(asic65_data_w)); |
| 4214 | | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x824000, 0x824003, FUNC(asic65_r)); |
| 4215 | | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x825000, 0x825001, FUNC(asic65_io_r)); |
| 4208 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x824000, 0x824003, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65)); |
| 4209 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x824000, 0x824003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65)); |
| 4210 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x825000, 0x825001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65)); |
| 4216 | 4211 | |
| 4217 | 4212 | /* install ASIC61 */ |
| 4218 | 4213 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x827000, 0x8277ff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_r), this), write16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_w), this)); |
| r26043 | r26044 | |
| 4227 | 4222 | /* install extra ROM */ |
| 4228 | 4223 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x900000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_rom_r), this)); |
| 4229 | 4224 | m_dsk_rom = (UINT16 *)(usr3 + 0x000000); |
| 4230 | | |
| 4231 | | /* set up the ASIC65 */ |
| 4232 | | asic65_config(machine(), ASIC65_STANDARD); |
| 4233 | 4225 | } |
| 4234 | 4226 | |
| 4235 | 4227 | |
| r26043 | r26044 | |
| 4237 | 4229 | void harddriv_state::init_dspcom() |
| 4238 | 4230 | { |
| 4239 | 4231 | /* install ASIC65 */ |
| 4240 | | m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x900000, 0x900003, FUNC(asic65_data_w)); |
| 4241 | | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x900000, 0x900003, FUNC(asic65_r)); |
| 4242 | | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x901000, 0x910001, FUNC(asic65_io_r)); |
| 4232 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x900000, 0x900003, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65)); |
| 4233 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x900000, 0x900003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65)); |
| 4234 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x901000, 0x910001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65)); |
| 4243 | 4235 | |
| 4244 | | /* set up the ASIC65 */ |
| 4245 | | asic65_config(machine(), ASIC65_STEELTAL); |
| 4246 | | |
| 4247 | 4236 | /* install DSPCOM control */ |
| 4248 | 4237 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x904000, 0x90401f, write16_delegate(FUNC(harddriv_state::hddspcom_control_w), this)); |
| 4249 | 4238 | } |