trunk/src/emu/sound/l7a1045_l6028_dsp_a.c
| r245392 | r245393 | |
| 131 | 131 | { |
| 132 | 132 | l7a1045_voice *vptr = &m_voice[i]; |
| 133 | 133 | |
| 134 | | UINT32 start = 0x000000; |
| 135 | | UINT32 end = 0x002000; |
| 136 | | UINT32 step = 0x0800; |
| 134 | UINT32 start = vptr->start; |
| 135 | UINT32 end = vptr->start+0x002000; |
| 136 | UINT32 step = 0x0400; |
| 137 | 137 | |
| 138 | 138 | UINT32 pos = vptr->pos; |
| 139 | 139 | UINT32 frac = vptr->frac; |
| r245392 | r245393 | |
| 151 | 151 | |
| 152 | 152 | } |
| 153 | 153 | |
| 154 | | sample = (INT8)m_rom[start + pos]; |
| 154 | sample = (INT8)m_rom[(start + pos) & (m_rom_size-1)]; |
| 155 | 155 | frac += step; |
| 156 | 156 | |
| 157 | 157 | outputs[0][j] += ((sample * 0x8000) >> 8); |
| r245392 | r245393 | |
| 258 | 258 | |
| 259 | 259 | m_voice[m_audioregister].frac = 0; |
| 260 | 260 | m_voice[m_audioregister].pos = 0; |
| 261 | | break; |
| 262 | 261 | } |
| 263 | | |
| 262 | l7a1045_voice *vptr = &m_voice[m_audioregister]; |
| 264 | 263 | |
| 264 | vptr->start = (m_audiodat[0][m_audiochannel].dat[0] & 0x000f) << (16 + 4); |
| 265 | vptr->start |= (m_audiodat[0][m_audiochannel].dat[1] & 0xffff) << (4); |
| 266 | vptr->start |= (m_audiodat[0][m_audiochannel].dat[2] & 0xf000) >> (12); |
| 267 | |
| 268 | vptr->start &= m_rom_size - 1; |
| 269 | |
| 270 | //printf("%08x: REGISTER 00 write port 0x0002 chansel %02x data %04x (%04x%04x%04x)\n", space.device().safe_pc(), m_audiochannel, data, m_audiodat[m_audioregister][m_audiochannel].dat[0], m_audiodat[m_audioregister][m_audiochannel].dat[1], m_audiodat[m_audioregister][m_audiochannel].dat[2]); |
| 271 | break; |
| 265 | 272 | } |
| 266 | 273 | |
| 267 | 274 | } |
| r245392 | r245393 | |
| 284 | 291 | printf("%08x: unexpected write port 0x0004 register %02x chansel %02x data %04x (%04x%04x%04x)\n", space.device().safe_pc(), m_audioregister, m_audiochannel, data, m_audiodat[m_audioregister][m_audiochannel].dat[0], m_audiodat[m_audioregister][m_audiochannel].dat[1], m_audiodat[m_audioregister][m_audiochannel].dat[2]); |
| 285 | 292 | break; |
| 286 | 293 | |
| 287 | | case 0x00: |
| 294 | // case 0x00: |
| 288 | 295 | case 0x04: |
| 289 | 296 | case 0x06: |
| 290 | 297 | case 0x05: |
| r245392 | r245393 | |
| 296 | 303 | case 0x0a: |
| 297 | 304 | //printf("%08x: write port 0x0004 register %02x chansel %02x data %04x (%04x%04x%04x)\n", space.device().safe_pc(), m_audioregister, m_audiochannel, data, m_audiodat[m_audioregister][m_audiochannel].dat[0], m_audiodat[m_audioregister][m_audiochannel].dat[1], m_audiodat[m_audioregister][m_audiochannel].dat[2]); |
| 298 | 305 | break; |
| 306 | |
| 307 | case 0x00: |
| 308 | //printf("%08x: REGISTER 00 write port 0x0004 chansel %02x data %04x (%04x%04x%04x)\n", space.device().safe_pc(), m_audiochannel, data, m_audiodat[m_audioregister][m_audiochannel].dat[0], m_audiodat[m_audioregister][m_audiochannel].dat[1], m_audiodat[m_audioregister][m_audiochannel].dat[2]); |
| 309 | break; |
| 299 | 310 | } |
| 300 | 311 | |
| 301 | 312 | } |
| r245392 | r245393 | |
| 321 | 332 | printf("%08x: unexpected write port 0x0006 register %02x chansel %02x data %04x (%04x%04x%04x)\n", space.device().safe_pc(), m_audioregister, m_audiochannel, data, m_audiodat[m_audioregister][m_audiochannel].dat[0], m_audiodat[m_audioregister][m_audiochannel].dat[1], m_audiodat[m_audioregister][m_audiochannel].dat[2]); |
| 322 | 333 | break; |
| 323 | 334 | |
| 324 | | case 0x00: |
| 335 | // case 0x00: |
| 325 | 336 | case 0x01: |
| 326 | 337 | //printf("%08x: unexpected write port 0x0006 register %02x chansel %02x data %04x (%04x%04x%04x)\n", space.device().safe_pc(), m_audioregister, m_audiochannel, data, m_audiodat[m_audioregister][m_audiochannel].dat[0], m_audiodat[m_audioregister][m_audiochannel].dat[1], m_audiodat[m_audioregister][m_audiochannel].dat[2]); |
| 327 | 338 | break; |
| 328 | 339 | |
| 340 | case 0x00: |
| 341 | |
| 342 | // it writes 2 values here for each sample |
| 343 | // the 2nd one seems to contain the upper 4 bits of the sample address |
| 344 | // so why does it write different data first? |
| 345 | //printf("%08x: REGISTER 00 write port 0x0006 chansel %02x data %04x (%04x%04x%04x)\n", space.device().safe_pc(), m_audiochannel, data, m_audiodat[m_audioregister][m_audiochannel].dat[0], m_audiodat[m_audioregister][m_audiochannel].dat[1], m_audiodat[m_audioregister][m_audiochannel].dat[2]); |
| 346 | break; |
| 347 | |
| 329 | 348 | } |
| 330 | 349 | } |
| 331 | 350 | |
trunk/src/mess/drivers/hh_hmcs40.c
| r245392 | r245393 | |
| 81 | 81 | // display common |
| 82 | 82 | int m_display_wait; // led/lamp off-delay in microseconds (default 33ms) |
| 83 | 83 | int m_display_maxy; // display matrix number of rows |
| 84 | | int m_display_maxx; // display matrix number of columns |
| 84 | int m_display_maxx; // display matrix number of columns (max 47 for now) |
| 85 | 85 | |
| 86 | 86 | UINT32 m_grid; // VFD current row data |
| 87 | 87 | UINT64 m_plate; // VFD current column data |
| r245392 | r245393 | |
| 223 | 223 | m_display_decay[y][x] = m_display_wait; |
| 224 | 224 | |
| 225 | 225 | // determine active state |
| 226 | | int ds = (m_display_decay[y][x] != 0) ? 1 : 0; |
| 226 | UINT64 ds = (m_display_decay[y][x] != 0) ? 1 : 0; |
| 227 | 227 | active_state[y] |= (ds << x); |
| 228 | 228 | } |
| 229 | 229 | } |
| r245392 | r245393 | |
| 283 | 283 | set_display_size(maxx, maxy); |
| 284 | 284 | |
| 285 | 285 | // update current state |
| 286 | | UINT64 mask = (1 << maxx) - 1; |
| 286 | UINT64 mask = (U64(1) << maxx) - 1; |
| 287 | 287 | for (int y = 0; y < maxy; y++) |
| 288 | | m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; |
| 288 | m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (U64(1) << maxx)) : 0; |
| 289 | 289 | |
| 290 | 290 | display_update(); |
| 291 | 291 | } |