trunk/src/emu/video/ef9340_1.c
| r21470 | r21471 | |
| 66 | 66 | m_ef9340.Y0 = 0; |
| 67 | 67 | m_ef9340.R = 0; |
| 68 | 68 | m_ef9340.M = 0; |
| 69 | m_ef9340.max_vpos = 210; |
| 69 | 70 | m_ef9341.TA = 0; |
| 70 | 71 | m_ef9341.TB = 0; |
| 71 | 72 | m_ef9341.busy = 0; |
| r21470 | r21471 | |
| 139 | 140 | switch( m_ef9341.TB & 0xE0 ) |
| 140 | 141 | { |
| 141 | 142 | case 0x00: /* Begin row */ |
| 142 | | logerror("begin row\n"); |
| 143 | 143 | m_ef9340.X = 0; |
| 144 | 144 | m_ef9340.Y = m_ef9341.TA & 0x1F; |
| 145 | 145 | break; |
| 146 | 146 | case 0x20: /* Load Y */ |
| 147 | | logerror("load y\n"); |
| 148 | 147 | m_ef9340.Y = m_ef9341.TA & 0x1F; |
| 149 | 148 | break; |
| 150 | 149 | case 0x40: /* Load X */ |
| 151 | | logerror("load x\n"); |
| 152 | 150 | m_ef9340.X = m_ef9341.TA & 0x3F; |
| 153 | 151 | break; |
| 154 | 152 | case 0x60: /* INC C */ |
| 155 | | logerror("inc c\n"); |
| 156 | 153 | ef9340_inc_c(); |
| 157 | 154 | break; |
| 158 | 155 | case 0x80: /* Load M */ |
| 159 | | logerror("load m\n"); |
| 160 | 156 | m_ef9340.M = m_ef9341.TA; |
| 161 | 157 | break; |
| 162 | 158 | case 0xA0: /* Load R */ |
| 163 | | logerror("load r\n"); |
| 164 | 159 | m_ef9340.R = m_ef9341.TA; |
| 160 | m_ef9340.max_vpos = ( m_ef9340.R & 0x40 ) ? 250 : 210; |
| 165 | 161 | break; |
| 166 | 162 | case 0xC0: /* Load Y0 */ |
| 167 | | logerror("load y0\n"); |
| 168 | 163 | m_ef9340.Y0 = m_ef9341.TA & 0x3F; |
| 169 | 164 | break; |
| 170 | 165 | } |
| r21470 | r21471 | |
| 186 | 181 | switch ( m_ef9340.M & 0xE0 ) |
| 187 | 182 | { |
| 188 | 183 | case 0x00: /* Write */ |
| 189 | | logerror("%d,%d = %02x, %02x\n", m_ef9340.X, m_ef9340.Y, m_ef9341.TB, m_ef9341.TA); |
| 190 | 184 | m_ef934x_ram_a[addr] = m_ef9341.TA; |
| 191 | 185 | m_ef934x_ram_b[addr] = m_ef9341.TB; |
| 192 | 186 | ef9340_inc_c(); |
| r21470 | r21471 | |
| 214 | 208 | UINT8 b = m_ef934x_ram_b[addr]; |
| 215 | 209 | UINT8 slice = ( m_ef9340.M & 0x0f ) % 10; |
| 216 | 210 | |
| 217 | | logerror("write slice addr=%04x, b=%02x\n", addr, b); |
| 218 | 211 | if ( b >= 0xa0 ) |
| 219 | 212 | { |
| 220 | | logerror("write slice external ram %04x\n", external_chargen_address(b,slice)); |
| 221 | 213 | m_ef934x_ext_char_ram[ ( ( a & 0x80 ) << 3 ) | external_chargen_address( b, slice ) ] = BITSWAP8(m_ef9341.TA,0,1,2,3,4,5,6,7); |
| 222 | 214 | } |
| 223 | 215 | |
| r21470 | r21471 | |
| 274 | 266 | |
| 275 | 267 | void ef9340_1_device::ef9340_scanline(int vpos) |
| 276 | 268 | { |
| 277 | | if ( vpos < 250 ) |
| 269 | if ( vpos < m_ef9340.max_vpos ) |
| 278 | 270 | { |
| 279 | 271 | int y = vpos - 0; |
| 280 | 272 | int y_row, slice; |