|
4 | 4 | #include "i960.h"
|
5 | 5 | #include "i960dis.h"
|
6 | 6 |
|
| 7 | +#include <algorithm> |
| 8 | + |
7 | 9 | #ifdef _MSC_VER
|
8 | 10 | /* logb prototype is different for MS Visual C */
|
9 | 11 | #include <cfloat>
|
@@ -2218,6 +2220,11 @@ void i960_cpu_device::execute_run()
|
2218 | 2220 |
|
2219 | 2221 | void i960_cpu_device::execute_set_input(int irqline, int state)
|
2220 | 2222 | {
|
| 2223 | + if (m_irq_line_state[irqline] == state) |
| 2224 | + return; |
| 2225 | + |
| 2226 | + m_irq_line_state[irqline] = state; |
| 2227 | + |
2221 | 2228 | int int_tab = m_program.read_dword(m_PRCB+20); // interrupt table
|
2222 | 2229 | int cpu_pri = (m_PC>>16)&0x1f;
|
2223 | 2230 | int vector =0;
|
@@ -2311,55 +2318,56 @@ void i960_cpu_device::device_start()
|
2311 | 2318 | save_item(NAME(m_stall_state.t1));
|
2312 | 2319 | save_item(NAME(m_stall_state.t2));
|
2313 | 2320 | save_item(NAME(m_stall_state.burst_mode));
|
2314 |
| - |
2315 |
| - |
2316 |
| - state_add( I960_SAT, "sat", m_SAT).formatstr("%08X"); |
2317 |
| - state_add( I960_PRCB, "prcb", m_PRCB).formatstr("%08X"); |
2318 |
| - state_add( I960_PC, "pc", m_PC).formatstr("%08X"); |
2319 |
| - state_add( I960_AC, "ac", m_AC).formatstr("%08X"); |
2320 |
| - state_add( I960_IP, "ip", m_IP).formatstr("%08X"); |
2321 |
| - state_add( I960_PIP, "pip", m_PIP).formatstr("%08X"); |
2322 |
| - state_add( I960_R0, "pfp", m_r[ 0]).formatstr("%08X"); |
2323 |
| - state_add( I960_R1, "sp", m_r[ 1]).formatstr("%08X"); |
2324 |
| - state_add( I960_R2, "rip", m_r[ 2]).formatstr("%08X"); |
2325 |
| - state_add( I960_R3, "r3", m_r[ 3]).formatstr("%08X"); |
2326 |
| - state_add( I960_R4, "r4", m_r[ 4]).formatstr("%08X"); |
2327 |
| - state_add( I960_R5, "r5", m_r[ 5]).formatstr("%08X"); |
2328 |
| - state_add( I960_R6, "r6", m_r[ 6]).formatstr("%08X"); |
2329 |
| - state_add( I960_R7, "r7", m_r[ 7]).formatstr("%08X"); |
2330 |
| - state_add( I960_R8, "r8", m_r[ 8]).formatstr("%08X"); |
2331 |
| - state_add( I960_R9, "r9", m_r[ 9]).formatstr("%08X"); |
2332 |
| - state_add( I960_R10, "r10", m_r[10]).formatstr("%08X"); |
2333 |
| - state_add( I960_R11, "r11", m_r[11]).formatstr("%08X"); |
2334 |
| - state_add( I960_R12, "r12", m_r[12]).formatstr("%08X"); |
2335 |
| - state_add( I960_R13, "r13", m_r[13]).formatstr("%08X"); |
2336 |
| - state_add( I960_R14, "r14", m_r[14]).formatstr("%08X"); |
2337 |
| - state_add( I960_R15, "r15", m_r[15]).formatstr("%08X"); |
2338 |
| - state_add( I960_G0, "g0", m_r[16]).formatstr("%08X"); |
2339 |
| - state_add( I960_G1, "g1", m_r[17]).formatstr("%08X"); |
2340 |
| - state_add( I960_G2, "g2", m_r[18]).formatstr("%08X"); |
2341 |
| - state_add( I960_G3, "g3", m_r[19]).formatstr("%08X"); |
2342 |
| - state_add( I960_G4, "g4", m_r[20]).formatstr("%08X"); |
2343 |
| - state_add( I960_G5, "g5", m_r[21]).formatstr("%08X"); |
2344 |
| - state_add( I960_G6, "g6", m_r[22]).formatstr("%08X"); |
2345 |
| - state_add( I960_G7, "g7", m_r[23]).formatstr("%08X"); |
2346 |
| - state_add( I960_G8, "g8", m_r[24]).formatstr("%08X"); |
2347 |
| - state_add( I960_G9, "g9", m_r[25]).formatstr("%08X"); |
2348 |
| - state_add( I960_G10, "g10", m_r[26]).formatstr("%08X"); |
2349 |
| - state_add( I960_G11, "g11", m_r[27]).formatstr("%08X"); |
2350 |
| - state_add( I960_G12, "g12", m_r[28]).formatstr("%08X"); |
2351 |
| - state_add( I960_G13, "g13", m_r[29]).formatstr("%08X"); |
2352 |
| - state_add( I960_G14, "g14", m_r[30]).formatstr("%08X"); |
2353 |
| - state_add( I960_G15, "fp", m_r[31]).formatstr("%08X"); |
2354 |
| - |
2355 |
| - state_add( STATE_GENPC, "GENPC", m_IP).noshow(); |
2356 |
| - state_add( STATE_GENPCBASE, "CURPC", m_IP).noshow(); |
2357 |
| - state_add( STATE_GENFLAGS, "GENFLAGS", m_AC).noshow().formatstr("%2s"); |
| 2321 | + save_item(NAME(m_irq_line_state)); |
| 2322 | + |
| 2323 | + state_add(I960_SAT, "sat", m_SAT).formatstr("%08X"); |
| 2324 | + state_add(I960_PRCB, "prcb", m_PRCB).formatstr("%08X"); |
| 2325 | + state_add(I960_PC, "pc", m_PC).formatstr("%08X"); |
| 2326 | + state_add(I960_AC, "ac", m_AC).formatstr("%08X"); |
| 2327 | + state_add(I960_IP, "ip", m_IP).formatstr("%08X"); |
| 2328 | + state_add(I960_PIP, "pip", m_PIP).formatstr("%08X"); |
| 2329 | + state_add(I960_R0, "pfp", m_r[ 0]).formatstr("%08X"); |
| 2330 | + state_add(I960_R1, "sp", m_r[ 1]).formatstr("%08X"); |
| 2331 | + state_add(I960_R2, "rip", m_r[ 2]).formatstr("%08X"); |
| 2332 | + state_add(I960_R3, "r3", m_r[ 3]).formatstr("%08X"); |
| 2333 | + state_add(I960_R4, "r4", m_r[ 4]).formatstr("%08X"); |
| 2334 | + state_add(I960_R5, "r5", m_r[ 5]).formatstr("%08X"); |
| 2335 | + state_add(I960_R6, "r6", m_r[ 6]).formatstr("%08X"); |
| 2336 | + state_add(I960_R7, "r7", m_r[ 7]).formatstr("%08X"); |
| 2337 | + state_add(I960_R8, "r8", m_r[ 8]).formatstr("%08X"); |
| 2338 | + state_add(I960_R9, "r9", m_r[ 9]).formatstr("%08X"); |
| 2339 | + state_add(I960_R10, "r10", m_r[10]).formatstr("%08X"); |
| 2340 | + state_add(I960_R11, "r11", m_r[11]).formatstr("%08X"); |
| 2341 | + state_add(I960_R12, "r12", m_r[12]).formatstr("%08X"); |
| 2342 | + state_add(I960_R13, "r13", m_r[13]).formatstr("%08X"); |
| 2343 | + state_add(I960_R14, "r14", m_r[14]).formatstr("%08X"); |
| 2344 | + state_add(I960_R15, "r15", m_r[15]).formatstr("%08X"); |
| 2345 | + state_add(I960_G0, "g0", m_r[16]).formatstr("%08X"); |
| 2346 | + state_add(I960_G1, "g1", m_r[17]).formatstr("%08X"); |
| 2347 | + state_add(I960_G2, "g2", m_r[18]).formatstr("%08X"); |
| 2348 | + state_add(I960_G3, "g3", m_r[19]).formatstr("%08X"); |
| 2349 | + state_add(I960_G4, "g4", m_r[20]).formatstr("%08X"); |
| 2350 | + state_add(I960_G5, "g5", m_r[21]).formatstr("%08X"); |
| 2351 | + state_add(I960_G6, "g6", m_r[22]).formatstr("%08X"); |
| 2352 | + state_add(I960_G7, "g7", m_r[23]).formatstr("%08X"); |
| 2353 | + state_add(I960_G8, "g8", m_r[24]).formatstr("%08X"); |
| 2354 | + state_add(I960_G9, "g9", m_r[25]).formatstr("%08X"); |
| 2355 | + state_add(I960_G10, "g10", m_r[26]).formatstr("%08X"); |
| 2356 | + state_add(I960_G11, "g11", m_r[27]).formatstr("%08X"); |
| 2357 | + state_add(I960_G12, "g12", m_r[28]).formatstr("%08X"); |
| 2358 | + state_add(I960_G13, "g13", m_r[29]).formatstr("%08X"); |
| 2359 | + state_add(I960_G14, "g14", m_r[30]).formatstr("%08X"); |
| 2360 | + state_add(I960_G15, "fp", m_r[31]).formatstr("%08X"); |
| 2361 | + |
| 2362 | + state_add(STATE_GENPC, "GENPC", m_IP).noshow(); |
| 2363 | + state_add(STATE_GENPCBASE, "CURPC", m_IP).noshow(); |
| 2364 | + state_add(STATE_GENFLAGS, "GENFLAGS", m_AC).noshow().formatstr("%2s"); |
2358 | 2365 |
|
2359 | 2366 | m_immediate_vector = 0;
|
2360 | 2367 | m_immediate_pri = 0;
|
2361 |
| - memset(m_rcache_frame_addr, 0, sizeof(m_rcache_frame_addr)); |
2362 |
| - memset(m_fp, 0, sizeof(m_fp)); |
| 2368 | + std::fill(std::begin(m_rcache_frame_addr), std::end(m_rcache_frame_addr), 0); |
| 2369 | + std::fill(std::begin(m_fp), std::end(m_fp), 0.0); |
| 2370 | + std::fill(std::begin(m_irq_line_state), std::end(m_irq_line_state), CLEAR_LINE); |
2363 | 2371 | m_PIP = 0;
|
2364 | 2372 |
|
2365 | 2373 | set_icountptr(m_icount);
|
|
0 commit comments