Previous 199869 Revisions Next

r26175 Friday 15th November, 2013 at 17:09:46 UTC by Jürgen Buchmüller
Rever to the exact flow of Salto in kwd_timing(), as it's very fragile.
[/branches/alto2/src/emu/cpu/alto2]a2disk.c

branches/alto2/src/emu/cpu/alto2/a2disk.c
r26174r26175
10591059   int i;
10601060   UINT8 s0, s1;
10611061
1062   LOG((LOG_DISK,8,"   >>> KWD timing bitclk:%d datin:%d block:%d SECT[4]:%d\n", bitclk, datin, block, m_dsk.sect4));
1063
1064   if (m_dsk.sect4 != dhd->get_sector_mark_0()) {
1065      // SECT[4] transition
1066      m_dsk.sect4 = dhd->get_sector_mark_0();
1067      LOG((LOG_DISK,7,"   SECT[4]:%d changed\n", m_dsk.sect4));
1068   }
1069
1062   LOG((LOG_DISK,8,"   >>> KWD timing bitclk:%d datin:%d block:%d SECT[4]:%d\n", bitclk, datin, block, dhd->get_sector_mark_0()));
10701063   if (0 == m_dsk.seclate) {
10711064      // if SECLATE is 0, WDDONE' never goes low (counter's clear has precedence).
10721065      if (m_dsk.bitcount || m_dsk.carry) {
r26174r26175
10741067         m_dsk.bitcount = 0;
10751068         m_dsk.carry = 0;
10761069      }
1077   }
1078   if (0 != m_dsk.seclate && m_dsk.bitclk && !bitclk) {
1070   } else if (m_dsk.bitclk && !bitclk) {
10791071      // if SECLATE is 1, the counter will count or be loaded
10801072      if ((m_dsk.shiftin & (1 << 16)) && !GET_KCOM_WFFO(m_dsk.kcom)) {
10811073         /*
r26174r26175
11631155   s1 |= JKFF_K;
11641156   if (m_dsk.ok_to_run)
11651157      s1 |= JKFF_S;
1166   if (m_dsk.ff_43a & JKFF_Q0)
1158   if (!(m_dsk.ff_43a & JKFF_Q))
11671159      s1 |= JKFF_C;
11681160   m_dsk.ff_43b = update_jkff(s0, s1);
11691161
r26174r26175
13271319         s1 |= JKFF_J;
13281320      s1 |= JKFF_K;
13291321      s1 |= JKFF_S;
1330      if (m_dsk.ff_22b & JKFF_Q0)
1322      if (!(m_dsk.ff_22b & JKFF_Q))
13311323         s1 |= JKFF_C;
13321324      m_dsk.ff_22a = update_jkff(s0, s1);
13331325
r26174r26175
13491341         s1 |= JKFF_J;
13501342      s1 |= JKFF_K;
13511343      s1 |= JKFF_S;
1352      if (m_dsk.ff_22b & JKFF_Q0)
1344      if (!(m_dsk.ff_22b & JKFF_Q))
13531345         s1 |= JKFF_C;
13541346      m_dsk.ff_21b = update_jkff(s0, s1);
13551347   }
r26174r26175
13901382         LOG((LOG_DISK,6,"   reset KFER\n"));
13911383         m_dsk.kfer = 0;
13921384      }
1393   }
1394   if (0 == m_dsk.kfer) {
1385   } else {
13951386      // fatal error: not ready OR seqerr OR not seekok
13961387      if (RDYLAT) {
13971388         LOG((LOG_DISK,6,"   RDYLAT sets KFER\n"));
r26174r26175
14161407         LOG((LOG_DISK,6,"   STSKENA:1; WAKEST':0 wake KSEC\n"));
14171408         m_task_wakeup |= 1 << task_ksec;
14181409      }
1419   }
1420   if (m_dsk.ff_22b & JKFF_Q0) {
1410   } else {
14211411      if (0 != (m_task_wakeup & (1 << task_ksec))) {
14221412         LOG((LOG_DISK,6,"   STSKENA:0; WAKEST':1\n"));
14231413         m_task_wakeup &= ~(1 << task_ksec);
r26174r26175
14371427    */
14381428   DEBUG_NAME("\t\t21a KSEC  ");
14391429   s0 = m_dsk.ff_21a;
1440   s1 = 0 == m_dsk.sect4 ? JKFF_CLK : JKFF_0;
1441   if (m_dsk.ff_22b & JKFF_Q0)
1430   s1 = dhd->get_sector_mark_0() ? JKFF_0 : JKFF_CLK;
1431   if (!(m_dsk.ff_22b & JKFF_Q))
14421432      s1 |= JKFF_J;
14431433   s1 |= JKFF_K;
14441434   if (!ERRWAKE)
14451435      s1 |= JKFF_S;
1446   if (m_dsk.ff_22b & JKFF_Q0)
1436   if (!(m_dsk.ff_22b & JKFF_Q))
14471437      s1 |= JKFF_C;
14481438   m_dsk.ff_21a = update_jkff(s0, s1);
14491439
r26174r26175
16271617   /* if the strobe is still set, restart the timer */
16281618   if (m_dsk.strobe) {
16291619      m_dsk.strobon_timer->adjust(attotime::from_nsec(TW_STROBON), arg);
1630      m_dsk.strobon_timer->enable();
16311620   } else {
1632      m_dsk.strobon_timer->enable(false);
1621      m_dsk.strobon_timer->reset();
16331622   }
16341623}
16351624
r26174r26175
16371626void alto2_cpu_device::disk_ready_mf31a(void* ptr, INT32 arg)
16381627{
16391628   diablo_hd_device* dhd = m_drive[m_dsk.drive];
1640   if (dhd)
1641      m_dsk.ready_mf31a = arg & dhd->get_ready_0();
1642   else
1643      m_dsk.ready_mf31a = arg;
1629   m_dsk.ready_mf31a = arg & dhd->get_ready_0();
16441630   /* log the not ready result with level 0, else 2 */
16451631   LOG((LOG_DISK,m_dsk.ready_mf31a ? 0 : 2,"   ready mf31a:%d\n", m_dsk.ready_mf31a));
16461632}
r26174r26175
19801966   s0 = m_dsk.ff_45b;
19811967   s1 = m_dsk.ff_45b & JKFF_CLK;
19821968   s1 |= JKFF_J;
1983   s1 |= m_dsk.ff_45b & JKFF_K;
1969   if (!SEQERR)
1970      s1 |= JKFF_K;
19841971   s1 |= JKFF_C;
19851972   m_dsk.ff_45b = update_jkff(s0, s1);
19861973
r26174r26175
19891976
19901977   /* start monoflop 31a, which resets ready_mf31a */
19911978   m_dsk.ready_timer->adjust(attotime::from_nsec(TW_READY), 1);
1992   m_dsk.ready_timer->enable();
19931979}
19941980
19951981/**

Previous 199869 Revisions Next


© 1997-2024 The MAME Team