Previous 199869 Revisions Next

r19629 Monday 17th December, 2012 at 22:19:54 UTC by R. Belmont
(MESS) New System Drivers Supported:
------------------------------------
Ensoniq SQ-Rack [R. Belmont]

esq5505: More documentation and other fixes from schematics [R. Belmont]
[src/mess/drivers]esq5505.c

trunk/src/mess/drivers/esq5505.c
r19628r19629
1111
1212    Memory map:
1313
14    0x000000-0x00ffff   work RAM low
15    0x200000-0x20001f   OTTO(5505) regs
14    0x000000-0x007fff   work RAM low (64k for SQ-1 and later)
15    0x200000-0x20001f   OTIS (5505) regs
1616    0x240000-0x2400ff   DMAC (68450) regs (EPS/EPS-16)
1717    0x260000-0x2601ff   ESP (5510) regs
1818    0x280000-0x28001f   DUART (68681) regs
1919    0x2C0000-0x2C0003   Floppy (WD1772) regs (VFX-SD, SD-1, and EPS/EPS-16)
20    0x2E0000-0x2FFFFF   Expansion cartridge (VFX, unknown other models)
20    0x2e0000-0x2fffff   Expansion cartridge (VFX, VFX-SD, SD-1, SD-1 32 voice)
2121    0x300000-0x300003   EPS/EPS-16 SCSI (WD33C93, register at 300001, data at 300003)
22    0x330000-0x37ffff   VFX-SD / SD-1 sequencer RAM
2223    0x340000-0x3bffff   EPS/EPS-16 sample RAM
2324    0xc00000-0xc3ffff   OS ROM
24    0xff0000-0xffffff   work RAM hi (may or may not be mirrored with work RAM low)
25
25    0xff8000-0xffffff   work RAM hi (64k for SQ-1 and later)
26 
27    Note from es5700.pdf PLA equations:
28   RAM if (A23/22/21 = 000 and FC is not 6) or (A23/22/21 = 111 and FC is not 7)
29   ROM if (A23/22/21 = 110) or (A23/22/21 = 000 & FC is 6)
30 
2631    Interrupts:
27    68681 uses custom vector 0x40 (address 0x100)
2832    5505 interrupts are on normal autovector IRQ 1
33    DMAC interrupts (EPS only) are on autovector IRQ 2
34    68681 uses custom vector 0x40 (address 0x100) level 3
2935
3036    VFX / VFX-SD / SD-1 / SD-1 32 panel button codes:
3137    2 = PROGRAM CONTROL
r19628r19629
4551    16 = ENV3
4652    17 = OUTPUT
4753    18 = ERROR 20 (VFX) / SEQ. CONTROL
48    19 = ?
54    19 = RECORD
4955    20 = MASTER
5056    21 = STORAGE
51    22 = ERROR 129 (VFX-SD w/Seq. loaded)
52    23 = ERROR 129 (VFX-SD w/Seq. loaded)
57    22 = STOP/CONT
58    23 = PLAY
5359    24 = MIDI
5460    25 = BUTTON 9
5561    26 = PSEL
r19628r19629
295301
296302   if (offset < 0x4000)
297303   {
298      if (m68k_get_fc(m_maincpu) == 0x6)   // supervisor mode, ROM
304      if (m68k_get_fc(m_maincpu) == 0x6)   // supervisor mode = ROM
299305      {
300306         return m_rom[offset];
301307      }
r19628r19629
320326      {
321327         COMBINE_DATA(&m_ram[offset]);
322328      }
329      else
330      {
331         logerror("Write to ROM: %x @ %x (fc=%x)\n", data, offset, m68k_get_fc(m_maincpu));
332      }
323333   }
324334   else
325335   {
r19628r19629
328338}
329339
330340static ADDRESS_MAP_START( vfx_map, AS_PROGRAM, 16, esq5505_state )
331   AM_RANGE(0x000000, 0x03ffff) AM_READWRITE(lower_r, lower_w)
341   AM_RANGE(0x000000, 0x007fff) AM_READWRITE(lower_r, lower_w)
332342   AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w)
333343   AM_RANGE(0x260000, 0x2601ff) AM_READWRITE(es5510_dsp_r, es5510_dsp_w)
334344    AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff)
r19628r19629
337347ADDRESS_MAP_END
338348
339349static ADDRESS_MAP_START( vfxsd_map, AS_PROGRAM, 16, esq5505_state )
340   AM_RANGE(0x000000, 0x03ffff) AM_READWRITE(lower_r, lower_w)
350   AM_RANGE(0x000000, 0x007fff) AM_READWRITE(lower_r, lower_w)
341351   AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w)
342352   AM_RANGE(0x260000, 0x2601ff) AM_READWRITE(es5510_dsp_r, es5510_dsp_w)
343353    AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff)
r19628r19629
348358ADDRESS_MAP_END
349359
350360static ADDRESS_MAP_START( eps_map, AS_PROGRAM, 16, esq5505_state )
351   AM_RANGE(0x000000, 0x03ffff) AM_READWRITE(lower_r, lower_w)
361   AM_RANGE(0x000000, 0x007fff) AM_READWRITE(lower_r, lower_w)
352362   AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w)
353363    AM_RANGE(0x240000, 0x2400ff) AM_DEVREADWRITE_LEGACY("mc68450", hd63450_r, hd63450_w)
354364    AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff)
r19628r19629
358368    AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("osram")
359369ADDRESS_MAP_END
360370
371static ADDRESS_MAP_START( sq1_map, AS_PROGRAM, 16, esq5505_state )
372   AM_RANGE(0x000000, 0x03ffff) AM_READWRITE(lower_r, lower_w)
373   AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w)
374   AM_RANGE(0x260000, 0x2601ff) AM_READWRITE(es5510_dsp_r, es5510_dsp_w)
375    AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff)
376    AM_RANGE(0x2c0000, 0x2c0007) AM_DEVREADWRITE8("wd1772", wd1772_t, read, write, 0x00ff)
377    AM_RANGE(0x330000, 0x3bffff) AM_RAM // sequencer memory?
378    AM_RANGE(0xc00000, 0xc3ffff) AM_ROM AM_REGION("osrom", 0)
379    AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("osram")
380ADDRESS_MAP_END
381
361382static void esq5505_otis_irq(device_t *device, int state)
362383{
363384   #if 0   // 5505/06 IRQ generation needs (more) work
r19628r19629
421442//    printf("\nDUART IRQ: state %d vector %d\n", state, vector);
422443    if (state == ASSERT_LINE)
423444    {
424        esq5505->m_maincpu->set_input_line_vector(2, vector);
425        esq5505->m_maincpu->set_input_line(2, ASSERT_LINE);
445        esq5505->m_maincpu->set_input_line_vector(M68K_IRQ_3, vector);
446        esq5505->m_maincpu->set_input_line(M68K_IRQ_3, ASSERT_LINE);
426447    }
427448    else
428449    {
429        esq5505->m_maincpu->set_input_line(2, CLEAR_LINE);
450        esq5505->m_maincpu->set_input_line(M68K_IRQ_3, CLEAR_LINE);
430451    }
431452};
432453
r19628r19629
503524
504525    if (channel == 1)
505526    {
506//        printf("ch %d: [%02x] (PC=%x)\n", channel, data, state->m_maincpu->pc());
527        printf("ch %d: [%02x] (PC=%x)\n", channel, data, state->m_maincpu->pc());
507528
508529        switch (state->m_system_type)
509530        {
r19628r19629
534555        }
535556        else
536557        {
537            // EPS-16+ wants a throwaway reply byte for each byte sent to the KPC
558            // EPS wants a throwaway reply byte for each byte sent to the KPC
538559            // VFX-SD and SD-1 definitely don't :)
539560            if (state->m_system_type == EPS)
540561            {
541                // 0xe7 must respond with any byte that isn't 0xc8 or the ROM dies.
542                // 0x71 must respond with anything (return not checked)
543                duart68681_rx_data(state->m_duart, 1, (UINT8)(FPTR)0x00);   // actual value of response is never checked
562            if (data == 0xe7)
563            {
564               duart68681_rx_data(state->m_duart, 1, (UINT8)(FPTR)0x00);   // actual value of response is never checked
565            }
566            else if (data == 0x71)
567            {
568               duart68681_rx_data(state->m_duart, 1, (UINT8)(FPTR)0x00);   // actual value of response is never checked
569            }
570            else
571            {
572               duart68681_rx_data(state->m_duart, 1, data);   // actual value of response is never checked
573            }
544574            }
545575        }
546576    }
r19628r19629
553583   duart_input,
554584   duart_output,
555585
556   500000, 500000,   // IP3, IP4
557   1000000, 1000000, // IP5, IP6
586   1000000, 500000,   // IP3, IP4
587   500000, 1000000, // IP5, IP6
558588};
559589
560590static void esq_dma_end(running_machine &machine, int channel, int irq)
r19628r19629
752782MACHINE_CONFIG_END
753783
754784static MACHINE_CONFIG_DERIVED(sq1, vfx32)
755    MCFG_ESQ2x40_REMOVE("vfd")
785   MCFG_CPU_MODIFY( "maincpu" )
786   MCFG_CPU_PROGRAM_MAP(sq1_map)
787
788   MCFG_ESQ2x40_REMOVE("vfd")
756789    MCFG_ESQ2x40_SQ1_ADD("sq1vfd")
757790MACHINE_CONFIG_END
758791
r19628r19629
889922
890923ROM_START( sq1 )
891924    ROM_REGION(0x40000, "osrom", 0)
892    ROM_LOAD16_BYTE( "esq5505lo.bin",    0x000000, 0x010000, CRC(b004cf05) SHA1(567b0dae2e35b06e39da108f9c041fd9bc38fa35) )
893    ROM_LOAD16_BYTE( "esq5505up.bin",    0x000001, 0x010000, CRC(2e927873) SHA1(06a948cb71fa254b23f4b9236f29035d10778da1) )
925    ROM_LOAD16_BYTE( "sq1lo.bin",    0x000000, 0x010000, CRC(b004cf05) SHA1(567b0dae2e35b06e39da108f9c041fd9bc38fa35) )
926    ROM_LOAD16_BYTE( "sq1up.bin",    0x000001, 0x010000, CRC(2e927873) SHA1(06a948cb71fa254b23f4b9236f29035d10778da1) )
894927
895928    ROM_REGION(0x200000, "waverom", 0)
896929    ROM_LOAD16_BYTE( "sq1-u25.bin",  0x000001, 0x080000, CRC(26312451) SHA1(9f947a11592fd8420fc581914bf16e7ade75390c) )
r19628r19629
899932    ROM_REGION(0x80000, "nibbles", ROMREGION_ERASE00)
900933ROM_END
901934
935ROM_START( sqrack )
936   ROM_REGION(0x40000, "osrom", 0)
937   ROM_LOAD16_BYTE( "sqr-102-lower.bin", 0x000000, 0x010000, CRC(186c85ad) SHA1(801c5cf82823ce31a88688fbee4c11ea5ffdbc10) )
938   ROM_LOAD16_BYTE( "sqr-102-upper.bin", 0x000001, 0x010000, CRC(088c9d31) SHA1(30627f21d893888b6159c481bea08e3eedd21902) )
939
940   ROM_REGION(0x200000, "waverom", 0)
941   ROM_LOAD16_BYTE( "sq1-u25.bin",  0x000001, 0x080000, CRC(26312451) SHA1(9f947a11592fd8420fc581914bf16e7ade75390c) )
942   ROM_LOAD16_BYTE( "sq1-u26.bin",  0x100001, 0x080000, CRC(2edaa9dc) SHA1(72fead505c4f44e5736ff7d545d72dfa37d613e2) )
943
944   ROM_REGION(0x80000, "nibbles", ROMREGION_ERASE00)
945ROM_END
946
902947ROM_START( eps )
903948    ROM_REGION(0x10000, "osrom", 0)
904949    ROM_LOAD16_BYTE( "eps-l.bin",    0x000000, 0x008000, CRC(382beac1) SHA1(110e31edb03fcf7bbde3e17423b21929e5b32db2) )
r19628r19629
9631008CONS( 1990, sd1,   0, 0,   vfxsd, vfx, esq5505_state, denib,  "Ensoniq", "SD-1", GAME_NOT_WORKING )      // 2x40 VFD
9641009CONS( 1990, sd132, sd1, 0, vfx32, vfx, esq5505_state, denib,  "Ensoniq", "SD-1 32", GAME_NOT_WORKING )   // 2x40 VFD
9651010CONS( 1990, sq1,   0, 0,   sq1,   vfx, esq5505_state, sq1,    "Ensoniq", "SQ-1", GAME_NOT_WORKING )      // LCD of some sort
1011CONS( 1990, sqrack,sq1, 0, sq1,   vfx, esq5505_state, sq1,    "Ensoniq", "SQ-Rack", GAME_NOT_WORKING )   // LCD of some sort

Previous 199869 Revisions Next


© 1997-2024 The MAME Team