trunk/src/emu/bus/nes/bandai.c
| r32215 | r32216 | |
| 129 | 129 | { |
| 130 | 130 | common_start(); |
| 131 | 131 | irq_timer = timer_alloc(TIMER_IRQ); |
| 132 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 132 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 133 | 133 | |
| 134 | 134 | save_item(NAME(m_irq_enable)); |
| 135 | 135 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 150 | 150 | { |
| 151 | 151 | common_start(); |
| 152 | 152 | irq_timer = timer_alloc(TIMER_IRQ); |
| 153 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 153 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 154 | 154 | |
| 155 | 155 | save_item(NAME(m_irq_enable)); |
| 156 | 156 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 173 | 173 | { |
| 174 | 174 | common_start(); |
| 175 | 175 | irq_timer = timer_alloc(TIMER_IRQ); |
| 176 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 176 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 177 | 177 | |
| 178 | 178 | save_item(NAME(m_reg)); |
| 179 | 179 | } |
| r32215 | r32216 | |
| 306 | 306 | |
| 307 | 307 | if (!m_irq_count) |
| 308 | 308 | { |
| 309 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 309 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 310 | 310 | m_irq_enable = 0; |
| 311 | 311 | } |
| 312 | 312 | } |
| r32215 | r32216 | |
| 337 | 337 | break; |
| 338 | 338 | case 0x0a: |
| 339 | 339 | m_irq_enable = data & 0x01; |
| 340 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 340 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 341 | 341 | break; |
| 342 | 342 | case 0x0b: |
| 343 | 343 | m_irq_count = (m_irq_count & 0xff00) | data; |
trunk/src/emu/bus/nes/konami.c
| r32215 | r32216 | |
| 129 | 129 | { |
| 130 | 130 | common_start(); |
| 131 | 131 | irq_timer = timer_alloc(TIMER_IRQ); |
| 132 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 132 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 133 | 133 | |
| 134 | 134 | save_item(NAME(m_irq_mode)); |
| 135 | 135 | save_item(NAME(m_irq_enable)); |
| r32215 | r32216 | |
| 157 | 157 | { |
| 158 | 158 | common_start(); |
| 159 | 159 | irq_timer = timer_alloc(TIMER_IRQ); |
| 160 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 160 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 161 | 161 | |
| 162 | 162 | save_item(NAME(m_irq_mode)); |
| 163 | 163 | save_item(NAME(m_irq_prescale)); |
| r32215 | r32216 | |
| 198 | 198 | { |
| 199 | 199 | common_start(); |
| 200 | 200 | irq_timer = timer_alloc(TIMER_IRQ); |
| 201 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 201 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 202 | 202 | |
| 203 | 203 | save_item(NAME(m_irq_mode)); |
| 204 | 204 | save_item(NAME(m_irq_prescale)); |
| r32215 | r32216 | |
| 369 | 369 | { |
| 370 | 370 | if ((m_irq_count & 0x00ff) == 0xff) |
| 371 | 371 | { |
| 372 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 372 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 373 | 373 | m_irq_count = m_irq_count_latch; |
| 374 | 374 | } |
| 375 | 375 | else |
| r32215 | r32216 | |
| 379 | 379 | { |
| 380 | 380 | if (m_irq_count == 0xffff) |
| 381 | 381 | { |
| 382 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 382 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 383 | 383 | m_irq_count = m_irq_count_latch; |
| 384 | 384 | } |
| 385 | 385 | else |
| r32215 | r32216 | |
| 413 | 413 | m_irq_enable_latch = data & 0x01; |
| 414 | 414 | if (data & 0x02) |
| 415 | 415 | m_irq_count = m_irq_count_latch; |
| 416 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 416 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 417 | 417 | break; |
| 418 | 418 | case 0x5000: |
| 419 | 419 | m_irq_enable = m_irq_enable_latch; |
| 420 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 420 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 421 | 421 | break; |
| 422 | 422 | case 0x7000: |
| 423 | 423 | prg16_89ab(data); |
| r32215 | r32216 | |
| 441 | 441 | if (m_irq_count == 0xff) |
| 442 | 442 | { |
| 443 | 443 | m_irq_count = m_irq_count_latch; |
| 444 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 444 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 445 | 445 | } |
| 446 | 446 | else |
| 447 | 447 | m_irq_count++; |
| r32215 | r32216 | |
| 543 | 543 | m_irq_enable_latch = data & 0x01; |
| 544 | 544 | if (data & 0x02) |
| 545 | 545 | m_irq_count = m_irq_count_latch; |
| 546 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 546 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 547 | 547 | break; |
| 548 | 548 | case 0x300: |
| 549 | 549 | m_irq_enable = m_irq_enable_latch; |
| 550 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 550 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 551 | 551 | break; |
| 552 | 552 | } |
| 553 | 553 | break; |
| r32215 | r32216 | |
| 619 | 619 | m_irq_enable_latch = data & 0x01; |
| 620 | 620 | if (data & 0x02) |
| 621 | 621 | m_irq_count = m_irq_count_latch; |
| 622 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 622 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 623 | 623 | break; |
| 624 | 624 | case 0x200: |
| 625 | 625 | m_irq_enable = m_irq_enable_latch; |
| 626 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 626 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 627 | 627 | break; |
| 628 | 628 | default: |
| 629 | 629 | logerror("VRC-6 write_h uncaught write, addr: %04x value: %02x\n", ((offset & 0x7000) | add_lines) + 0x8000, data); |
| r32215 | r32216 | |
| 734 | 734 | m_irq_enable_latch = data & 0x01; |
| 735 | 735 | if (data & 0x02) |
| 736 | 736 | m_irq_count = m_irq_count_latch; |
| 737 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 737 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 738 | 738 | break; |
| 739 | 739 | case 0x7008: case 0x7010: case 0x7018: |
| 740 | 740 | m_irq_enable = m_irq_enable_latch; |
| 741 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 741 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 742 | 742 | break; |
| 743 | 743 | |
| 744 | 744 | default: |
trunk/src/emu/bus/nes/namcot.c
| r32215 | r32216 | |
| 146 | 146 | { |
| 147 | 147 | common_start(); |
| 148 | 148 | irq_timer = timer_alloc(TIMER_IRQ); |
| 149 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 149 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 150 | 150 | |
| 151 | 151 | save_item(NAME(m_irq_enable)); |
| 152 | 152 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 172 | 172 | { |
| 173 | 173 | common_start(); |
| 174 | 174 | irq_timer = timer_alloc(TIMER_IRQ); |
| 175 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 175 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 176 | 176 | |
| 177 | 177 | save_item(NAME(m_irq_enable)); |
| 178 | 178 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 200 | 200 | { |
| 201 | 201 | common_start(); |
| 202 | 202 | irq_timer = timer_alloc(TIMER_IRQ); |
| 203 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 203 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 204 | 204 | |
| 205 | 205 | save_item(NAME(m_irq_enable)); |
| 206 | 206 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 403 | 403 | if (m_irq_enable) |
| 404 | 404 | { |
| 405 | 405 | if (m_irq_count == 0x7fff) // counter does not wrap to 0! |
| 406 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 406 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 407 | 407 | else |
| 408 | 408 | m_irq_count++; |
| 409 | 409 | } |
| r32215 | r32216 | |
| 419 | 419 | { |
| 420 | 420 | case 0x1000: /* low byte of IRQ */ |
| 421 | 421 | m_irq_count = (m_irq_count & 0x7f00) | data; |
| 422 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 422 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 423 | 423 | break; |
| 424 | 424 | case 0x1800: /* high byte of IRQ, IRQ enable in high bit */ |
| 425 | 425 | m_irq_count = (m_irq_count & 0xff) | ((data & 0x7f) << 8); |
| 426 | 426 | m_irq_enable = data & 0x80; |
| 427 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 427 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 428 | 428 | break; |
| 429 | 429 | } |
| 430 | 430 | } |
| r32215 | r32216 | |
| 438 | 438 | { |
| 439 | 439 | case 0x1000: |
| 440 | 440 | return m_irq_count & 0xff; |
| 441 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 441 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 442 | 442 | case 0x1800: |
| 443 | 443 | return (m_irq_count >> 8) & 0xff; |
| 444 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 444 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 445 | 445 | default: |
| 446 | 446 | return 0x00; |
| 447 | 447 | } |
trunk/src/emu/bus/nes/pirate.c
| r32215 | r32216 | |
| 427 | 427 | { |
| 428 | 428 | common_start(); |
| 429 | 429 | irq_timer = timer_alloc(TIMER_IRQ); |
| 430 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 430 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 431 | 431 | |
| 432 | 432 | save_item(NAME(m_prg_reg)); |
| 433 | 433 | save_item(NAME(m_prg_mode)); |
| r32215 | r32216 | |
| 580 | 580 | { |
| 581 | 581 | m_irq_count--; |
| 582 | 582 | if (!m_irq_count) |
| 583 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 583 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 584 | 584 | } |
| 585 | 585 | } |
| 586 | 586 | } |
| r32215 | r32216 | |
| 904 | 904 | { |
| 905 | 905 | m_irq_count = m_irq_count_latch; |
| 906 | 906 | m_irq_enable = m_irq_enable_latch; |
| 907 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 907 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 908 | 908 | } |
| 909 | 909 | } |
| 910 | 910 | |
| r32215 | r32216 | |
| 985 | 985 | { |
| 986 | 986 | LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline, |
| 987 | 987 | machine().first_screen()->vpos(), machine().first_screen()->hpos())); |
| 988 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 988 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 989 | 989 | } |
| 990 | 990 | } |
| 991 | 991 | m_irq_clear = 0; |
| r32215 | r32216 | |
| 1039 | 1039 | { |
| 1040 | 1040 | m_irq_count = m_irq_count_latch; |
| 1041 | 1041 | m_irq_enable = m_irq_enable_latch; |
| 1042 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1042 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1043 | 1043 | } |
| 1044 | 1044 | } |
| 1045 | 1045 | |
| r32215 | r32216 | |
| 1166 | 1166 | { |
| 1167 | 1167 | m_irq_count++; |
| 1168 | 1168 | if ((m_irq_count & 0xff) == 238) |
| 1169 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1169 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1170 | 1170 | } |
| 1171 | 1171 | } |
| 1172 | 1172 | |
| r32215 | r32216 | |
| 1245 | 1245 | { |
| 1246 | 1246 | if (!m_irq_count) |
| 1247 | 1247 | { |
| 1248 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1248 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1249 | 1249 | m_irq_count = 0xffff; |
| 1250 | 1250 | } |
| 1251 | 1251 | else |
trunk/src/emu/bus/nes/bootleg.c
| r32215 | r32216 | |
| 208 | 208 | common_start(); |
| 209 | 209 | irq_timer = timer_alloc(TIMER_IRQ); |
| 210 | 210 | irq_timer->reset(); |
| 211 | | timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(24576); |
| 211 | timer_freq = m_maincpu->cycles_to_attotime(24576); |
| 212 | 212 | |
| 213 | 213 | save_item(NAME(m_irq_enable)); |
| 214 | 214 | save_item(NAME(m_latch)); |
| r32215 | r32216 | |
| 243 | 243 | { |
| 244 | 244 | common_start(); |
| 245 | 245 | irq_timer = timer_alloc(TIMER_IRQ); |
| 246 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 246 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 247 | 247 | |
| 248 | 248 | save_item(NAME(m_irq_enable)); |
| 249 | 249 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 297 | 297 | { |
| 298 | 298 | common_start(); |
| 299 | 299 | irq_timer = timer_alloc(TIMER_IRQ); |
| 300 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 300 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 301 | 301 | |
| 302 | 302 | save_item(NAME(m_irq_enable)); |
| 303 | 303 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 320 | 320 | { |
| 321 | 321 | common_start(); |
| 322 | 322 | irq_timer = timer_alloc(TIMER_IRQ); |
| 323 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 323 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 324 | 324 | |
| 325 | 325 | save_item(NAME(m_irq_enable)); |
| 326 | 326 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 343 | 343 | { |
| 344 | 344 | common_start(); |
| 345 | 345 | irq_timer = timer_alloc(TIMER_IRQ); |
| 346 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 346 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 347 | 347 | |
| 348 | 348 | save_item(NAME(m_irq_enable)); |
| 349 | 349 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 429 | 429 | { |
| 430 | 430 | common_start(); |
| 431 | 431 | irq_timer = timer_alloc(TIMER_IRQ); |
| 432 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 432 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 433 | 433 | |
| 434 | 434 | save_item(NAME(m_irq_enable)); |
| 435 | 435 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 510 | 510 | common_start(); |
| 511 | 511 | irq_timer = timer_alloc(TIMER_IRQ); |
| 512 | 512 | // always running and checking for IRQ every 114 cycles? or resetting every frame? |
| 513 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(114)); |
| 513 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(114)); |
| 514 | 514 | |
| 515 | 515 | save_item(NAME(m_irq_enable)); |
| 516 | 516 | save_item(NAME(m_irq_count)); |
| r32215 | r32216 | |
| 627 | 627 | { |
| 628 | 628 | LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline, |
| 629 | 629 | machine().first_screen()->vpos(), machine().first_screen()->hpos())); |
| 630 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 630 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 631 | 631 | m_irq_enable = 0; |
| 632 | 632 | } |
| 633 | 633 | } |
| r32215 | r32216 | |
| 691 | 691 | { |
| 692 | 692 | if (id == TIMER_IRQ) |
| 693 | 693 | { |
| 694 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 694 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 695 | 695 | irq_timer->adjust(attotime::never); |
| 696 | 696 | } |
| 697 | 697 | } |
| r32215 | r32216 | |
| 783 | 783 | { |
| 784 | 784 | if (m_irq_count == 0xffff) |
| 785 | 785 | { |
| 786 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 786 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 787 | 787 | m_irq_enable = 0; |
| 788 | 788 | } |
| 789 | 789 | else |
| r32215 | r32216 | |
| 857 | 857 | return; |
| 858 | 858 | |
| 859 | 859 | m_irq_count = 0; |
| 860 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 860 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 861 | 861 | } |
| 862 | 862 | |
| 863 | 863 | WRITE8_MEMBER(nes_btl_dn_device::write_h) |
| r32215 | r32216 | |
| 946 | 946 | { |
| 947 | 947 | if (m_irq_count == 0xfff) |
| 948 | 948 | { |
| 949 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 949 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 950 | 950 | m_irq_enable = 0; |
| 951 | 951 | m_irq_count = 0; |
| 952 | 952 | } |
| r32215 | r32216 | |
| 1028 | 1028 | { |
| 1029 | 1029 | if (m_irq_count == 0xfff) |
| 1030 | 1030 | { |
| 1031 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1031 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1032 | 1032 | m_irq_enable = 0; |
| 1033 | 1033 | m_irq_count = 0; |
| 1034 | 1034 | } |
| r32215 | r32216 | |
| 1085 | 1085 | { |
| 1086 | 1086 | if (m_irq_count == 0xfff) |
| 1087 | 1087 | { |
| 1088 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1088 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1089 | 1089 | m_irq_enable = 0; |
| 1090 | 1090 | m_irq_count = 0; |
| 1091 | 1091 | } |
| r32215 | r32216 | |
| 1330 | 1330 | if (m_irq_count > 7560)//value from FCEUMM... |
| 1331 | 1331 | { |
| 1332 | 1332 | m_irq_count = 0; |
| 1333 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 1333 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 1334 | 1334 | } |
| 1335 | 1335 | } |
| 1336 | 1336 | } |
| r32215 | r32216 | |
| 1367 | 1367 | m_irq_enable = BIT(data, 1); |
| 1368 | 1368 | m_irq_count = 0; |
| 1369 | 1369 | if (!m_irq_enable) |
| 1370 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 1370 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 1371 | 1371 | break; |
| 1372 | 1372 | case 0x7000: |
| 1373 | 1373 | m_reg = data & 0x0f; |
| r32215 | r32216 | |
| 1572 | 1572 | m_irq_count &= 0xff; |
| 1573 | 1573 | |
| 1574 | 1574 | if (m_irq_enable && !m_irq_count) |
| 1575 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1575 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 1576 | 1576 | } |
| 1577 | 1577 | } |
| 1578 | 1578 | |
trunk/src/emu/bus/nes/jaleco.c
| r32215 | r32216 | |
| 209 | 209 | { |
| 210 | 210 | common_start(); |
| 211 | 211 | irq_timer = timer_alloc(TIMER_IRQ); |
| 212 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 212 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 213 | 213 | |
| 214 | 214 | save_item(NAME(m_mmc_prg_bank)); |
| 215 | 215 | save_item(NAME(m_mmc_vrom_bank)); |
| r32215 | r32216 | |
| 434 | 434 | { |
| 435 | 435 | if (!(m_irq_count & 0x000f)) |
| 436 | 436 | { |
| 437 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 437 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 438 | 438 | m_irq_count = (m_irq_count & 0xfff0) | 0x000f; |
| 439 | 439 | } |
| 440 | 440 | else |
| r32215 | r32216 | |
| 444 | 444 | { |
| 445 | 445 | if (!(m_irq_count & 0x00ff)) |
| 446 | 446 | { |
| 447 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 447 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 448 | 448 | m_irq_count = (m_irq_count & 0xff00) | 0x00ff; |
| 449 | 449 | } |
| 450 | 450 | else |
| r32215 | r32216 | |
| 454 | 454 | { |
| 455 | 455 | if (!(m_irq_count & 0x0fff)) |
| 456 | 456 | { |
| 457 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 457 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 458 | 458 | m_irq_count = (m_irq_count & 0xf000) | 0x0fff; |
| 459 | 459 | } |
| 460 | 460 | else |
| r32215 | r32216 | |
| 464 | 464 | { |
| 465 | 465 | if (!m_irq_count) |
| 466 | 466 | { |
| 467 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 467 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 468 | 468 | m_irq_count = 0xffff; |
| 469 | 469 | } |
| 470 | 470 | else |
| r32215 | r32216 | |
| 536 | 536 | break; |
| 537 | 537 | case 0x7000: |
| 538 | 538 | m_irq_count = m_irq_count_latch; |
| 539 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 539 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 540 | 540 | break; |
| 541 | 541 | case 0x7001: |
| 542 | 542 | m_irq_enable = data & 0x01; |
| 543 | 543 | m_irq_mode = data & 0x0e; |
| 544 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 544 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 545 | 545 | break; |
| 546 | 546 | |
| 547 | 547 | case 0x7002: |
trunk/src/emu/bus/nes/kaiser.c
| r32215 | r32216 | |
| 138 | 138 | { |
| 139 | 139 | common_start(); |
| 140 | 140 | irq_timer = timer_alloc(TIMER_IRQ); |
| 141 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 141 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 142 | 142 | |
| 143 | 143 | save_item(NAME(m_latch)); |
| 144 | 144 | save_item(NAME(m_irq_enable)); |
| r32215 | r32216 | |
| 164 | 164 | { |
| 165 | 165 | common_start(); |
| 166 | 166 | irq_timer = timer_alloc(TIMER_IRQ); |
| 167 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 167 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 168 | 168 | |
| 169 | 169 | save_item(NAME(m_latch)); |
| 170 | 170 | save_item(NAME(m_irq_enable)); |
| r32215 | r32216 | |
| 329 | 329 | { |
| 330 | 330 | m_irq_enable = 0; |
| 331 | 331 | m_irq_count = 0; |
| 332 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 332 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 333 | 333 | } |
| 334 | 334 | else |
| 335 | 335 | m_irq_count++; |
| r32215 | r32216 | |
| 445 | 445 | { |
| 446 | 446 | if (!m_irq_count) |
| 447 | 447 | { |
| 448 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 448 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 449 | 449 | m_irq_enable = 0; |
| 450 | 450 | m_irq_status |= 0x01; |
| 451 | 451 | } |
trunk/src/emu/bus/nes/sunsoft.c
| r32215 | r32216 | |
| 123 | 123 | { |
| 124 | 124 | common_start(); |
| 125 | 125 | irq_timer = timer_alloc(TIMER_IRQ); |
| 126 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 126 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 127 | 127 | |
| 128 | 128 | save_item(NAME(m_irq_enable)); |
| 129 | 129 | save_item(NAME(m_irq_toggle)); |
| r32215 | r32216 | |
| 169 | 169 | irq_timer = timer_alloc(TIMER_IRQ); |
| 170 | 170 | // this has to be hardcoded because some some scanline code only suits NTSC... it will be fixed with PPU rewrite |
| 171 | 171 | irq_timer->adjust(attotime::zero, 0, attotime::from_hz((21477272.724 / 12))); |
| 172 | | // irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 172 | // irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 173 | 173 | |
| 174 | 174 | save_item(NAME(m_wram_bank)); |
| 175 | 175 | save_item(NAME(m_latch)); |
| r32215 | r32216 | |
| 272 | 272 | { |
| 273 | 273 | if (!m_irq_count) |
| 274 | 274 | { |
| 275 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 275 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 276 | 276 | m_irq_count = 0xffff; |
| 277 | 277 | m_irq_enable = 0; |
| 278 | 278 | } |
| r32215 | r32216 | |
| 311 | 311 | case 0x5800: |
| 312 | 312 | m_irq_enable = BIT(data, 4); |
| 313 | 313 | m_irq_toggle = 0; |
| 314 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 314 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 315 | 315 | break; |
| 316 | 316 | case 0x6800: |
| 317 | 317 | switch (data & 3) |
| r32215 | r32216 | |
| 467 | 467 | { |
| 468 | 468 | m_irq_count = 0xffff; |
| 469 | 469 | if (m_irq_enable & 0x01) // bit0, trigger enable |
| 470 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 470 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 471 | 471 | } |
| 472 | 472 | else |
| 473 | 473 | m_irq_count--; |
| r32215 | r32216 | |
| 516 | 516 | case 0x0d: |
| 517 | 517 | m_irq_enable = data; |
| 518 | 518 | if (!(m_irq_enable & 1)) |
| 519 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 519 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 520 | 520 | break; |
| 521 | 521 | case 0x0e: |
| 522 | 522 | m_irq_count = (m_irq_count & 0xff00) | data; |
trunk/src/emu/bus/nes/legacy.c
| r32215 | r32216 | |
| 79 | 79 | { |
| 80 | 80 | common_start(); |
| 81 | 81 | irq_timer = timer_alloc(TIMER_IRQ); |
| 82 | | irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1)); |
| 82 | irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1)); |
| 83 | 83 | |
| 84 | 84 | save_item(NAME(m_exram)); |
| 85 | 85 | save_item(NAME(m_exram_enabled)); |
| r32215 | r32216 | |
| 167 | 167 | { |
| 168 | 168 | if (m_irq_count == 0xffff) |
| 169 | 169 | { |
| 170 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 170 | m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); |
| 171 | 171 | m_irq_count = 0; |
| 172 | 172 | m_irq_enable = 0; |
| 173 | 173 | } |
| r32215 | r32216 | |
| 193 | 193 | |
| 194 | 194 | case 0x401: |
| 195 | 195 | m_irq_enable = 0; |
| 196 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 196 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 197 | 197 | break; |
| 198 | 198 | case 0x402: |
| 199 | 199 | m_irq_count = (m_irq_count & 0xff00) | data; |
| r32215 | r32216 | |
| 275 | 275 | |
| 276 | 276 | case 0x401: |
| 277 | 277 | m_irq_enable = 0; |
| 278 | | machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 278 | m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); |
| 279 | 279 | break; |
| 280 | 280 | case 0x402: |
| 281 | 281 | m_irq_count = (m_irq_count & 0xff00) | data; |