trunk/src/mess/drivers/esq5505.c
| r19226 | r19227 | |
| 33 | 33 | 4 = WAVE |
| 34 | 34 | 5 = SELECT VOICE |
| 35 | 35 | 6 = MIXER/SHAPER |
| 36 | | 7 & 8 = EFFECT |
| 36 | 7 = EFFECT |
| 37 | 8 = COMPARE |
| 37 | 38 | 9 = COPY EFFECTS PARAMETERS |
| 38 | 39 | 10 = LFO |
| 39 | 40 | 11 = PITCH |
| r19226 | r19227 | |
| 43 | 44 | 15 = FILTER |
| 44 | 45 | 16 = ENV3 |
| 45 | 46 | 17 = OUTPUT |
| 46 | | 18 = ERROR 20 (VFX) / SEQUENCER MUST BE LOADED (VFX-SD/SD-1) |
| 47 | 18 = ERROR 20 (VFX) / SEQ. CONTROL |
| 47 | 48 | 19 = ? |
| 48 | 49 | 20 = MASTER |
| 49 | 50 | 21 = STORAGE |
| r19226 | r19227 | |
| 54 | 55 | 26 = PSEL |
| 55 | 56 | 27 = STAT |
| 56 | 57 | 28 = EFFECT |
| 57 | | 29 = ? |
| 58 | | 30 = TRAX |
| 59 | | 31 = TRAX (page 2) |
| 58 | 29 = SEQ? (toggles INT0 / TRAX display) |
| 59 | 30 = TRACKS 1-6 |
| 60 | 31 = TRACKS 7-12 |
| 60 | 61 | 32 = ERROR 20 (VFX) / CLICK-REC |
| 61 | 62 | 33 = ERROR 20 (VFX) / LOCATE |
| 62 | 63 | 34 = BUTTON 8 |
| r19226 | r19227 | |
| 76 | 77 | 48 = BUTTON 5 |
| 77 | 78 | 49 = BUTTON 6 |
| 78 | 79 | 50 = SOFT BOTTOM LEFT |
| 79 | | 51 = ERROR 202 (VFX) / SEQ0 $SONG-00 |
| 80 | 51 = ERROR 202 (VFX) / SEQ. |
| 80 | 81 | 52 = CART |
| 81 | 82 | 53 = SOUNDS |
| 82 | 83 | 54 = PRESETS |
| r19226 | r19227 | |
| 110 | 111 | #define SQ1 (2) |
| 111 | 112 | |
| 112 | 113 | #define KEYBOARD_HACK (1) // turn on to play the SQ-1, SD-1, and SD-1 32-voice: Z and X are program up/down, A/S/D/F/G/H/J/K/L and Q/W/E/R/T/Y/U play notes |
| 113 | | #define HACK_VIA_MIDI (0) |
| 114 | #define HACK_VIA_MIDI (1) |
| 114 | 115 | |
| 115 | 116 | #if KEYBOARD_HACK |
| 116 | 117 | #if HACK_VIA_MIDI |
| r19226 | r19227 | |
| 148 | 149 | DECLARE_WRITE16_MEMBER(es5510_dsp_w); |
| 149 | 150 | DECLARE_READ16_MEMBER(mc68681_r); |
| 150 | 151 | DECLARE_WRITE16_MEMBER(mc68681_w); |
| 152 | DECLARE_READ16_MEMBER(lower_r); |
| 153 | DECLARE_WRITE16_MEMBER(lower_w); |
| 151 | 154 | |
| 152 | 155 | int m_system_type; |
| 153 | 156 | UINT8 m_duart_io; |
| r19226 | r19227 | |
| 164 | 167 | UINT32 es5510_dadr_latch; |
| 165 | 168 | UINT32 es5510_gpr_latch; |
| 166 | 169 | UINT8 es5510_ram_sel; |
| 170 | |
| 171 | UINT16 *m_rom, *m_ram; |
| 172 | |
| 167 | 173 | public: |
| 168 | 174 | DECLARE_DRIVER_INIT(eps); |
| 169 | 175 | DECLARE_DRIVER_INIT(common); |
| r19226 | r19227 | |
| 182 | 188 | |
| 183 | 189 | void esq5505_state::machine_reset() |
| 184 | 190 | { |
| 185 | | UINT8 *ROM = machine().root_device().memregion("osrom")->base(); |
| 186 | | UINT8 *RAM = (UINT8 *)machine().root_device().memshare("osram")->ptr(); |
| 191 | m_rom = (UINT16 *)machine().root_device().memregion("osrom")->base(); |
| 192 | m_ram = (UINT16 *)machine().root_device().memshare("osram")->ptr(); |
| 187 | 193 | |
| 188 | | memcpy(RAM, ROM, 256); |
| 189 | | |
| 190 | | // pick up the new vectors |
| 191 | | m_maincpu->reset(); |
| 192 | | |
| 193 | | m_bCalibSecondByte = false; |
| 194 | m_bCalibSecondByte = false; |
| 194 | 195 | } |
| 195 | 196 | |
| 196 | 197 | READ16_MEMBER(esq5505_state::es5510_dsp_r) |
| r19226 | r19227 | |
| 284 | 285 | } |
| 285 | 286 | } |
| 286 | 287 | |
| 288 | READ16_MEMBER(esq5505_state::lower_r) |
| 289 | { |
| 290 | offset &= 0x7fff; |
| 291 | |
| 292 | // get pointers when 68k resets |
| 293 | if (!m_rom) |
| 294 | { |
| 295 | m_rom = (UINT16 *)machine().root_device().memregion("osrom")->base(); |
| 296 | m_ram = (UINT16 *)machine().root_device().memshare("osram")->ptr(); |
| 297 | } |
| 298 | |
| 299 | if (offset < 0x4000) |
| 300 | { |
| 301 | if (m68k_get_fc(m_maincpu) == 0x6) // supervisor mode, ROM |
| 302 | { |
| 303 | return m_rom[offset]; |
| 304 | } |
| 305 | else |
| 306 | { |
| 307 | return m_ram[offset]; |
| 308 | } |
| 309 | } |
| 310 | else |
| 311 | { |
| 312 | return m_ram[offset]; |
| 313 | } |
| 314 | } |
| 315 | |
| 316 | WRITE16_MEMBER(esq5505_state::lower_w) |
| 317 | { |
| 318 | offset &= 0x7fff; |
| 319 | |
| 320 | if (offset < 0x4000) |
| 321 | { |
| 322 | if (m68k_get_fc(m_maincpu) != 0x6) // if not supervisor mode, RAM |
| 323 | { |
| 324 | COMBINE_DATA(&m_ram[offset]); |
| 325 | } |
| 326 | } |
| 327 | else |
| 328 | { |
| 329 | COMBINE_DATA(&m_ram[offset]); |
| 330 | } |
| 331 | } |
| 332 | |
| 287 | 333 | static ADDRESS_MAP_START( vfx_map, AS_PROGRAM, 16, esq5505_state ) |
| 288 | | AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_MIRROR(0x30000) AM_SHARE("osram") |
| 334 | AM_RANGE(0x000000, 0x03ffff) AM_READWRITE(lower_r, lower_w) |
| 289 | 335 | AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w) |
| 290 | 336 | AM_RANGE(0x260000, 0x2601ff) AM_READWRITE(es5510_dsp_r, es5510_dsp_w) |
| 291 | 337 | AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff) |
| r19226 | r19227 | |
| 294 | 340 | ADDRESS_MAP_END |
| 295 | 341 | |
| 296 | 342 | static ADDRESS_MAP_START( vfxsd_map, AS_PROGRAM, 16, esq5505_state ) |
| 297 | | AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_SHARE("osram") AM_MIRROR(0x30000) |
| 343 | AM_RANGE(0x000000, 0x03ffff) AM_READWRITE(lower_r, lower_w) |
| 298 | 344 | AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w) |
| 299 | 345 | AM_RANGE(0x260000, 0x2601ff) AM_READWRITE(es5510_dsp_r, es5510_dsp_w) |
| 300 | 346 | AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff) |
| r19226 | r19227 | |
| 305 | 351 | ADDRESS_MAP_END |
| 306 | 352 | |
| 307 | 353 | static ADDRESS_MAP_START( eps_map, AS_PROGRAM, 16, esq5505_state ) |
| 308 | | AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_MIRROR(0x30000) AM_SHARE("osram") |
| 354 | AM_RANGE(0x000000, 0x03ffff) AM_READWRITE(lower_r, lower_w) |
| 309 | 355 | AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w) |
| 310 | 356 | AM_RANGE(0x240000, 0x2400ff) AM_DEVREADWRITE_LEGACY("mc68450", hd63450_r, hd63450_w) |
| 311 | 357 | AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff) |
| r19226 | r19227 | |
| 461 | 507 | if (channel == 1) |
| 462 | 508 | { |
| 463 | 509 | // printf("ch %d: [%02x] (PC=%x)\n", channel, data, state->m_maincpu->pc()); |
| 510 | |
| 464 | 511 | switch (state->m_system_type) |
| 465 | 512 | { |
| 466 | 513 | case GENERIC: |
| r19226 | r19227 | |
| 818 | 865 | ROM_LOAD16_BYTE( "u35.bin", 0x100001, 0x080000, CRC(c0055975) SHA1(5a22f1d5e437c6277eb0cfb1ff1b3f8dcdea1cc6) ) |
| 819 | 866 | |
| 820 | 867 | ROM_REGION(0x200000, "waverom2", ROMREGION_ERASE00) // BS=1 region (16-bit) |
| 868 | ROM_LOAD16_WORD_SWAP( "u38.bin", 0x000000, 0x100000, CRC(a904190e) SHA1(e4fd4e1130906086fb4182dcb8b51269969e2836) ) |
| 869 | ROM_LOAD16_WORD_SWAP( "u37.bin", 0x100000, 0x100000, CRC(d706cef3) SHA1(24ba35248509e9ca45110e2402b8085006ea0cfc) ) |
| 821 | 870 | |
| 822 | 871 | ROM_REGION(0x80000, "nibbles", 0) |
| 823 | 872 | ROM_LOAD( "u36.bin", 0x000000, 0x080000, CRC(c3ddaf95) SHA1(44a7bd89cd7e82952cc5100479e110c385246559) ) |
| r19226 | r19227 | |
| 833 | 882 | ROM_LOAD16_BYTE( "u35.bin", 0x100001, 0x080000, CRC(c0055975) SHA1(5a22f1d5e437c6277eb0cfb1ff1b3f8dcdea1cc6) ) |
| 834 | 883 | |
| 835 | 884 | ROM_REGION(0x200000, "waverom2", ROMREGION_ERASE00) // BS=1 region (16-bit) |
| 885 | ROM_LOAD16_WORD_SWAP( "u38.bin", 0x000000, 0x100000, CRC(a904190e) SHA1(e4fd4e1130906086fb4182dcb8b51269969e2836) ) |
| 886 | ROM_LOAD16_WORD_SWAP( "u37.bin", 0x100000, 0x100000, CRC(d706cef3) SHA1(24ba35248509e9ca45110e2402b8085006ea0cfc) ) |
| 836 | 887 | |
| 837 | 888 | ROM_REGION(0x80000, "nibbles", ROMREGION_ERASE00) |
| 838 | 889 | ROM_LOAD( "u36.bin", 0x000000, 0x080000, CRC(c3ddaf95) SHA1(44a7bd89cd7e82952cc5100479e110c385246559) ) |