branches/alto2/src/emu/cpu/alto2/a2mouse.c
| r26265 | r26266 | |
| 95 | 95 | * Advance the mouse x and y coordinates to the dx and dy |
| 96 | 96 | * coordinates by either toggling MX2 or MX1 first for a |
| 97 | 97 | * y movement, or MY2 or MY1 for x movement. |
| 98 | * There are four read phases counted by m_mouse.phase |
| 98 | 99 | * |
| 99 | | * @result lookup value from madr_a32 |
| 100 | * @return lookup value from madr_a32 |
| 100 | 101 | */ |
| 101 | 102 | UINT16 alto2_cpu_device::mouse_read() |
| 102 | 103 | { |
| 103 | | static int arg; |
| 104 | 104 | UINT16 data; |
| 105 | 105 | |
| 106 | 106 | m_mouse.latch = (m_mouse.latch << 1) & MLATCH; |
| 107 | 107 | data = m_madr_a32[m_mouse.latch]; |
| 108 | 108 | |
| 109 | | switch (arg & 3) { |
| 109 | switch (m_mouse.phase) { |
| 110 | 110 | case 0: |
| 111 | 111 | m_mouse.latch |= MOVEX(m_mouse.dx - m_mouse.x); |
| 112 | 112 | m_mouse.latch |= MOVEY(m_mouse.dy - m_mouse.y); |
| r26265 | r26266 | |
| 137 | 137 | if (m_mouse.y > m_mouse.dy) |
| 138 | 138 | m_mouse.y--; |
| 139 | 139 | } |
| 140 | | arg++; |
| 140 | m_mouse.phase = (m_mouse.phase + 1) % 4; |
| 141 | 141 | return data; |
| 142 | 142 | } |
| 143 | 143 | |
| r26265 | r26266 | |
| 151 | 151 | INPUT_CHANGED_MEMBER( alto2_cpu_device::mouse_motion_x ) |
| 152 | 152 | { |
| 153 | 153 | // set new destination (absolute) mouse x coordinate |
| 154 | | m_mouse.dx += newval - oldval; |
| 154 | m_mouse.dx = newval; |
| 155 | 155 | #if MOUSE_DIRTY_HACK |
| 156 | 156 | /* XXX: dirty, dirty, hack */ |
| 157 | 157 | #if ALTO2_HAMMING_CHECK |
| r26265 | r26266 | |
| 172 | 172 | INPUT_CHANGED_MEMBER( alto2_cpu_device::mouse_motion_y ) |
| 173 | 173 | { |
| 174 | 174 | // set new destination (absolute) mouse y coordinate |
| 175 | | m_mouse.dy += newval - oldval; |
| 175 | m_mouse.dy = newval; |
| 176 | 176 | #if MOUSE_DIRTY_HACK |
| 177 | 177 | /* XXX: dirty, dirty, hack */ |
| 178 | 178 | #if ALTO2_HAMMING_CHECK |
branches/alto2/src/emu/cpu/alto2/alto2.c
| r26265 | r26266 | |
| 2195 | 2195 | UINT32 bank = GET_CRAM_BANKSEL(m_cram_addr) % ALTO2_UCODE_RAM_PAGES; |
| 2196 | 2196 | UINT32 wordaddr = GET_CRAM_WORDADDR(m_cram_addr); |
| 2197 | 2197 | |
| 2198 | | m_rdram_flag = 0; |
| 2198 | m_rdram_flag = false; |
| 2199 | 2199 | if (GET_CRAM_RAMROM(m_cram_addr)) { |
| 2200 | 2200 | /* read ROM 0 at current mpc */ |
| 2201 | 2201 | addr = m_mpc & 01777; |
| r26265 | r26266 | |
| 2238 | 2238 | UINT32 bank = GET_CRAM_BANKSEL(m_cram_addr) % ALTO2_UCODE_RAM_PAGES; |
| 2239 | 2239 | UINT32 wordaddr = GET_CRAM_WORDADDR(m_cram_addr); |
| 2240 | 2240 | |
| 2241 | | m_wrtram_flag = 0; |
| 2241 | m_wrtram_flag = false; |
| 2242 | 2242 | |
| 2243 | 2243 | /* write RAM 0,1,2 */ |
| 2244 | 2244 | addr = bank * ALTO2_UCODE_PAGE_SIZE + wordaddr; |
| r26265 | r26266 | |
| 2731 | 2731 | // The PROM output lines are |
| 2732 | 2732 | // B0: unused B1: TSELECT B2: ALUCI' B3: ALUM' |
| 2733 | 2733 | // B4: ALUS0' B5: ALUS1' B6: ALUS2' B7: ALUS3' |
| 2734 | | // B3-B7 are inverted on loading the PROM |
| 2734 | // B1 and B3-B7 are inverted on loading the PROM |
| 2735 | 2735 | UINT8 a10 = m_alu_a10[(m_emu.skip << 4) | aluf]; |
| 2736 | 2736 | UINT32 alu = alu_74181(m_bus, m_t, a10); |
| 2737 | 2737 | m_aluc0 = (alu >> 16) & 1; |