trunk/src/emu/cpu/e132xs/e132xs.c
| r242361 | r242362 | |
| 583 | 583 | UINT32 hyperstone_device::compute_tr() |
| 584 | 584 | { |
| 585 | 585 | UINT64 cycles_since_base = total_cycles() - m_tr_base_cycles; |
| 586 | | UINT64 clocks_since_base = cycles_since_base >> m_clock_scale; |
| 586 | UINT64 clocks_since_base = cycles_since_base >> m_clck_scale; |
| 587 | 587 | return m_tr_base_value + (clocks_since_base / m_tr_clocks_per_tick); |
| 588 | 588 | } |
| 589 | 589 | |
| r242361 | r242362 | |
| 591 | 591 | { |
| 592 | 592 | UINT32 prevtr = compute_tr(); |
| 593 | 593 | TPR &= ~0x80000000; |
| 594 | | m_clock_scale = (TPR >> 26) & m_clock_scale_mask; |
| 595 | | m_clock_cycles_1 = 1 << m_clock_scale; |
| 596 | | m_clock_cycles_2 = 2 << m_clock_scale; |
| 597 | | m_clock_cycles_4 = 4 << m_clock_scale; |
| 598 | | m_clock_cycles_6 = 6 << m_clock_scale; |
| 594 | m_clck_scale = (TPR >> 26) & m_clock_scale_mask; |
| 595 | m_clock_cycles_1 = 1 << m_clck_scale; |
| 596 | m_clock_cycles_2 = 2 << m_clck_scale; |
| 597 | m_clock_cycles_4 = 4 << m_clck_scale; |
| 598 | m_clock_cycles_6 = 6 << m_clck_scale; |
| 599 | 599 | m_tr_clocks_per_tick = ((TPR >> 16) & 0xff) + 2; |
| 600 | 600 | m_tr_base_value = prevtr; |
| 601 | 601 | m_tr_base_cycles = total_cycles(); |
| r242361 | r242362 | |
| 604 | 604 | void hyperstone_device::adjust_timer_interrupt() |
| 605 | 605 | { |
| 606 | 606 | UINT64 cycles_since_base = total_cycles() - m_tr_base_cycles; |
| 607 | | UINT64 clocks_since_base = cycles_since_base >> m_clock_scale; |
| 608 | | UINT64 cycles_until_next_clock = cycles_since_base - (clocks_since_base << m_clock_scale); |
| 607 | UINT64 clocks_since_base = cycles_since_base >> m_clck_scale; |
| 608 | UINT64 cycles_until_next_clock = cycles_since_base - (clocks_since_base << m_clck_scale); |
| 609 | 609 | |
| 610 | 610 | if (cycles_until_next_clock == 0) |
| 611 | | cycles_until_next_clock = (UINT64)(1 << m_clock_scale); |
| 611 | cycles_until_next_clock = (UINT64)(1 << m_clck_scale); |
| 612 | 612 | |
| 613 | 613 | /* special case: if we have a change pending, set a timer to fire then */ |
| 614 | 614 | if (TPR & 0x80000000) |
| 615 | 615 | { |
| 616 | 616 | UINT64 clocks_until_int = m_tr_clocks_per_tick - (clocks_since_base % m_tr_clocks_per_tick); |
| 617 | | UINT64 cycles_until_int = (clocks_until_int << m_clock_scale) + cycles_until_next_clock; |
| 617 | UINT64 cycles_until_int = (clocks_until_int << m_clck_scale) + cycles_until_next_clock; |
| 618 | 618 | m_timer->adjust(cycles_to_attotime(cycles_until_int + 1), 1); |
| 619 | 619 | } |
| 620 | 620 | |
| r242361 | r242362 | |
| 631 | 631 | else |
| 632 | 632 | { |
| 633 | 633 | UINT64 clocks_until_int = mulu_32x32(delta, m_tr_clocks_per_tick); |
| 634 | | UINT64 cycles_until_int = (clocks_until_int << m_clock_scale) + cycles_until_next_clock; |
| 634 | UINT64 cycles_until_int = (clocks_until_int << m_clck_scale) + cycles_until_next_clock; |
| 635 | 635 | m_timer->adjust(cycles_to_attotime(cycles_until_int)); |
| 636 | 636 | } |
| 637 | 637 | } |
| r242361 | r242362 | |
| 1536 | 1536 | m_op = 0; |
| 1537 | 1537 | m_trap_entry = 0; |
| 1538 | 1538 | m_clock_scale_mask = 0; |
| 1539 | | m_clock_scale = 0; |
| 1539 | m_clck_scale = 0; |
| 1540 | 1540 | m_clock_cycles_1 = 0; |
| 1541 | 1541 | m_clock_cycles_2 = 0; |
| 1542 | 1542 | m_clock_cycles_4 = 0; |
| r242361 | r242362 | |
| 1685 | 1685 | save_item(NAME(m_intblock)); |
| 1686 | 1686 | save_item(NAME(m_delay.delay_cmd)); |
| 1687 | 1687 | save_item(NAME(m_tr_clocks_per_tick)); |
| 1688 | save_item(NAME(m_tr_base_value)); |
| 1689 | save_item(NAME(m_tr_base_cycles)); |
| 1690 | save_item(NAME(m_timer_int_pending)); |
| 1691 | save_item(NAME(m_clck_scale)); |
| 1692 | save_item(NAME(m_clock_scale_mask)); |
| 1693 | save_item(NAME(m_clock_cycles_1)); |
| 1694 | save_item(NAME(m_clock_cycles_2)); |
| 1695 | save_item(NAME(m_clock_cycles_4)); |
| 1696 | save_item(NAME(m_clock_cycles_6)); |
| 1688 | 1697 | |
| 1689 | 1698 | // set our instruction counter |
| 1690 | 1699 | m_icountptr = &m_icount; |
| r242361 | r242362 | |
| 2052 | 2061 | } |
| 2053 | 2062 | } |
| 2054 | 2063 | |
| 2055 | | m_icount -= 36 << m_clock_scale; |
| 2064 | m_icount -= 36 << m_clck_scale; |
| 2056 | 2065 | } |
| 2057 | 2066 | |
| 2058 | 2067 | void hyperstone_device::hyperstone_divs(struct hyperstone_device::regs_decode *decode) |
| r242361 | r242362 | |
| 2101 | 2110 | } |
| 2102 | 2111 | } |
| 2103 | 2112 | |
| 2104 | | m_icount -= 36 << m_clock_scale; |
| 2113 | m_icount -= 36 << m_clck_scale; |
| 2105 | 2114 | } |
| 2106 | 2115 | |
| 2107 | 2116 | void hyperstone_device::hyperstone_xm(struct hyperstone_device::regs_decode *decode) |
| r242361 | r242362 | |
| 4109 | 4118 | } |
| 4110 | 4119 | |
| 4111 | 4120 | if((SREG >= 0xffff8000 && SREG <= 0x7fff) && (DREG >= 0xffff8000 && DREG <= 0x7fff)) |
| 4112 | | m_icount -= 3 << m_clock_scale; |
| 4121 | m_icount -= 3 << m_clck_scale; |
| 4113 | 4122 | else |
| 4114 | | m_icount -= 5 << m_clock_scale; |
| 4123 | m_icount -= 5 << m_clck_scale; |
| 4115 | 4124 | } |
| 4116 | 4125 | |
| 4117 | 4126 | void hyperstone_device::hyperstone_fadd(struct hyperstone_device::regs_decode *decode) |
trunk/src/mame/drivers/f-32.c
| r242361 | r242362 | |
| 22 | 22 | public: |
| 23 | 23 | mosaicf2_state(const machine_config &mconfig, device_type type, const char *tag) |
| 24 | 24 | : driver_device(mconfig, type, tag), |
| 25 | | m_maincpu(*this, "maincpu") , |
| 25 | m_maincpu(*this, "maincpu") , |
| 26 | 26 | m_videoram(*this, "videoram"){ } |
| 27 | 27 | |
| 28 | /* devices */ |
| 29 | required_device<e132xn_device> m_maincpu; |
| 30 | |
| 28 | 31 | /* memory pointers */ |
| 29 | | required_device<e132xn_device> m_maincpu; |
| 30 | 32 | required_shared_ptr<UINT32> m_videoram; |
| 33 | |
| 31 | 34 | DECLARE_READ32_MEMBER(f32_input_port_1_r); |
| 32 | 35 | UINT32 screen_update_mosaicf2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 33 | 36 | }; |