Previous 199869 Revisions Next

r26154 Thursday 14th November, 2013 at 01:50:20 UTC by Jürgen Buchmüller
Line up JKFF logprintf. Use the JKFF_FUNCTION for a try. TODO: align with Salto again.
[/branches/alto2/src/emu/cpu/alto2]a2disk.c

branches/alto2/src/emu/cpu/alto2/a2disk.c
r26153r26154
99 *****************************************************************************/
1010#include "alto2.h"
1111
12/** @brief 1 to debug the JK flip-flops, 0 to use a lookup table */
13#define   JKFF_FUNCTION   0
1412
13#define   JKFF_FUNCTION   1   //!< define 1 to debug the JK flip-flops, 0 to use a lookup table
14
1515#define   GET_KADDR_SECTOR(kaddr)         A2_GET16(kaddr,16, 0, 3)         //!< get sector number from address register
1616#define   PUT_KADDR_SECTOR(kaddr,val)      A2_PUT16(kaddr,16, 0, 3,val)      //!< put sector number into address register
1717#define   GET_KADDR_CYLINDER(kaddr)      A2_GET16(kaddr,16, 4,12)         //!< get cylinder number from address register
r26153r26154
9797#endif
9898
9999#if   ALTO2_DEBUG
100static const char *jkff_name;
100static const char* raise_lower[2] = {"↗","↘"};
101static const char* jkff_name;
101102/** @brief macro to set the name of a FF in DEBUG=1 builds only */
102103#define   DEBUG_NAME(x)   jkff_name = x
103104#else
r26153r26154
182183      LOG((LOG_DISK,5,"%s C':0 S':0 → Q:1 and Q':1 <unstable>\n", jkff_name));
183184      break;
184185   }
185   return s1;
186   return static_cast<jkff_t>(s1);
186187}
187188
188189#else
r26153r26154
767768      0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f
768769   }
769770};
770#endif
771771
772772jkff_t alto2_cpu_device::update_jkff(UINT8 s0, UINT8 s1)
773773{
774   static const char* raise_lower[2] = {"↗","↘"};
775774   UINT8 result = jkff_lookup[s1 & 63][ s0 & 63];
776775#if   ALTO2_DEBUG
777   LOG((LOG_DISK,8,"%s\t: ", jkff_name));
776   LOG((LOG_DISK,8,"%s : ", jkff_name));
778777   if ((s0 ^ result) & JKFF_CLK)
779778      LOG((LOG_DISK,8," CLK%s", raise_lower[result & 1]));
780779   if ((s0 ^ result) & JKFF_J)
r26153r26154
793792#endif
794793   return static_cast<jkff_t>(result);
795794}
795#endif
796796
797797/**
798798 * <PRE>
r26153r26154
11481148    * Q   to 53a J
11491149    * </PRE>
11501150    */
1151   DEBUG_NAME("      KWD 43b");
1152   m_dsk.ff_43b = update_jkff(m_dsk.ff_43b,
1153      (wddone1 ? JKFF_CLK : 0) |
1154      JKFF_J |
1155      JKFF_K |
1156      (m_dsk.ok_to_run ? JKFF_S : 0) |
1157      ((m_dsk.ff_43a & JKFF_Q) ? 0 : JKFF_C));
1151   DEBUG_NAME("\t\t43b KWD   ");
1152   s0 = m_dsk.ff_43b;
1153   s1 = wddone1 ? JKFF_CLK : 0;
1154   s1 |= JKFF_J;
1155   s1 |= JKFF_K;
1156   if (m_dsk.ok_to_run)
1157      s1 |= JKFF_S;
1158   if (m_dsk.ff_43a & JKFF_Q0)
1159      s1 |= JKFF_C;
1160   m_dsk.ff_43b = update_jkff(s0, s1);
11581161
11591162   /* count for the 4 stages of sysclka and sysclkb transitions */
11601163   for (i = 0; i < 4; i++) {
11611164
11621165      if (m_sysclka0[i] != m_sysclka1[i]) {
1163         LOG((LOG_DISK,7,"   SYSCLKA'   : %d→%d\n", m_sysclka0[i], m_sysclka1[i]));
1166         LOG((LOG_DISK,7,"   SYSCLKA' %s\n", raise_lower[m_sysclka1[i]]));
11641167      }
11651168      if (m_sysclkb0[i] != m_sysclkb1[i]) {
1166         LOG((LOG_DISK,7,"   SYSCLKB'   : %d→%d\n", m_sysclkb0[i], m_sysclkb1[i]));
1169         LOG((LOG_DISK,7,"   SYSCLKB' %s\n", raise_lower[m_sysclkb1[i]]));
11671170      }
11681171
11691172      /**
r26153r26154
11771180       * Q   WDINIT
11781181       * </PRE>
11791182       */
1180      DEBUG_NAME("      KWD 53b");
1183      DEBUG_NAME("\t\t53b KWD   ");
11811184      s0 = m_dsk.ff_53b;
1182      s1 = m_sysclkb1[i];
1185      s1 = m_sysclkb1[i] ? JKFF_CLK : JKFF_0;
11831186      if (block != task_kwd)
11841187         s1 |= JKFF_K;         // (BLOCK & WDTSKACT)'
11851188      if (WDALLOW)
r26153r26154
11981201       * Q   to 43a J and K'
11991202       * </PRE>
12001203       */
1201      DEBUG_NAME("      KWD 53a");
1204      DEBUG_NAME("\t\t53a KWD   ");
12021205      s0 = m_dsk.ff_53a;
1203      s1 = m_sysclkb1[i];
1206      s1 = m_sysclkb1[i] ? JKFF_CLK : JKFF_0;
12041207      if (m_dsk.ff_43b & JKFF_Q)
12051208         s1 |= JKFF_J;
12061209      if (block != task_kwd)
r26153r26154
12211224       * Q   WDTSKENA', Q' WDTSKENA
12221225       * </PRE>
12231226       */
1224      DEBUG_NAME("      KWD 43a");
1227      DEBUG_NAME("\t\t43a KWD   ");
12251228      s0 = m_dsk.ff_43a;
1226      s1 = m_sysclka1[i];
1229      s1 = m_sysclka1[i] ? JKFF_CLK : JKFF_0;
12271230      if (m_dsk.ff_53a & JKFF_Q)
12281231         s1 |= JKFF_J;
12291232      if (m_dsk.ff_53a & JKFF_Q)
r26153r26154
12441247       * Q   RDYLAT'
12451248       * </PRE>
12461249       */
1247      DEBUG_NAME("      RDYLAT 45a");
1250      DEBUG_NAME("\t\t45a RDYLAT");
12481251      s0 = m_dsk.ff_45a;
1249      s1 = m_sysclka1[i];
1250      if (dhd->get_ready_0())
1252      s1 = m_sysclka1[i] ? JKFF_CLK : JKFF_0;
1253      if (0 == dhd->get_ready_0())
12511254         s1 |= JKFF_J;
12521255      s1 |= JKFF_K;
12531256      s1 |= JKFF_S;
r26153r26154
12661269       * Q   to KSTAT[11] DATALATE
12671270       * </PRE>
12681271       */
1269      DEBUG_NAME("      SEQERR 45b");
1272      DEBUG_NAME("\t\t45b SEQERR");
12701273      s0 = m_dsk.ff_45b;
1271      s1 = m_sysclka1[i];
1274      s1 = m_sysclka1[i] ? JKFF_CLK : JKFF_0;
12721275      s1 |= JKFF_J;
12731276      if (SEQERR)
12741277         s1 |= JKFF_K;
r26153r26154
12871290       * Q   STSKENA; Q' WAKEKST'
12881291       * </PRE>
12891292       */
1290      DEBUG_NAME("      KSEC 22b");
1293      DEBUG_NAME("\t\t22b KSEC ");
12911294      s0 = m_dsk.ff_22b;
1292      s1 = m_sysclkb1[i];
1295      s1 = m_sysclkb1[i] ? JKFF_CLK : JKFF_0;
12931296      if (m_dsk.ff_22a & JKFF_Q)
12941297         s1 |= JKFF_J;
12951298      if (block != task_ksec)
r26153r26154
13091312       * Q   to 22b J
13101313       * </PRE>
13111314       */
1312      DEBUG_NAME("      KSEC 22a");
1315      DEBUG_NAME("\t\t22a KSEC ");
13131316      s0 = m_dsk.ff_22a;
1314      s1 = m_sysclkb1[i];
1317      s1 = m_sysclkb1[i] ? JKFF_CLK : JKFF_0;
13151318      if (m_dsk.ff_21b & JKFF_Q)
13161319         s1 |= JKFF_J;
13171320      s1 |= JKFF_K;
13181321      s1 |= JKFF_S;
1319      if (!(m_dsk.ff_22b & JKFF_Q))
1322      if (m_dsk.ff_22b & JKFF_Q0)
13201323         s1 |= JKFF_C;
13211324      m_dsk.ff_22a = update_jkff(s0, s1);
13221325
r26153r26154
13311334       * Q   to 22a J
13321335       * </PRE>
13331336       */
1334      DEBUG_NAME("      KSEC 21b");
1337      DEBUG_NAME("\t\t21b KSEC ");
13351338      s0 = m_dsk.ff_21b;
1336      s1 = m_sysclkb1[i];
1339      s1 = m_sysclkb1[i] ? JKFF_CLK : JKFF_0;
13371340      if (m_dsk.ff_21a & JKFF_Q)
13381341         s1 |= JKFF_J;
13391342      s1 |= JKFF_K;
r26153r26154
14201423    * Q   to seclate monoflop
14211424    * </PRE>
14221425    */
1423   DEBUG_NAME("      KSEC 21a");
1426   DEBUG_NAME("\t\t21a KSEC ");
14241427   s0 = m_dsk.ff_21a;
1425   s1 = dhd->get_sector_mark_0() ? 0 : JKFF_CLK;
1426   if (!(m_dsk.ff_22b & JKFF_Q))
1428   s1 = dhd->get_sector_mark_0() ? JKFF_0 : JKFF_CLK;
1429   if (m_dsk.ff_22b & JKFF_Q0)
14271430      s1 |= JKFF_J;
14281431   s1 |= JKFF_K;
14291432   if (!ERRWAKE)
14301433      s1 |= JKFF_S;
1431   if (!(m_dsk.ff_22b & JKFF_Q))
1434   if (m_dsk.ff_22b & JKFF_Q0)
14321435      s1 |= JKFF_C;
14331436   m_dsk.ff_21a = update_jkff(s0, s1);
14341437
r26153r26154
14361439    * If the KSEC FF 21a Q goes 1, pulse the SECLATE signal for
14371440    * some time.
14381441    */
1439   if (!(m_dsk.ff_21a_old & JKFF_Q) && (m_dsk.ff_21a & JKFF_Q)) {
1442   if ((m_dsk.ff_21a_old & JKFF_Q0) && (m_dsk.ff_21a & JKFF_Q)) {
14401443      if (!m_dsk.seclate_timer)
14411444         m_dsk.seclate_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::disk_seclate),this));;
14421445      m_dsk.seclate_timer->adjust(attotime::from_nsec(TW_SECLATE), 1, attotime::never);
r26153r26154
15481551       * Q   to seekok
15491552       * </PRE>
15501553       */
1551      DEBUG_NAME("      LAI 44a");
1554      DEBUG_NAME("\t\t44a LAI   ");
15521555      s0 = m_dsk.ff_44a;
15531556      s1 = lai ? JKFF_CLK : JKFF_0;
15541557      s1 |= JKFF_J;
r26153r26154
17381741    */
17391742   for (i = 0; i < 2; i++) {
17401743      UINT8 s0, s1;
1741      DEBUG_NAME("      CKSUM 44b");
1744      DEBUG_NAME("\t\t44b CKSUM ");
17421745      s0 = m_dsk.ff_44b;
17431746      s1 = i ? JKFF_CLK : 0;
17441747      if (!A2_GET16(m_bus,16,13,13))
r26153r26154
18781881    * C'   CLRSTAT'
18791882    * Q   to seekok
18801883    */
1881   DEBUG_NAME("      LAI 44a");
1884   DEBUG_NAME("\t\t44a LAI   ");
18821885   s0 = m_dsk.ff_44a;
18831886   s1 = m_dsk.ff_44a & JKFF_CLK;
18841887   s1 |= JKFF_J;
r26153r26154
18951898    * C'   CLRSTAT'
18961899    * Q   to seekok
18971900    */
1898   DEBUG_NAME("      CKSUM 44b");
1901   DEBUG_NAME("\t\t44b CKSUM ");
18991902   s0 = m_dsk.ff_44b;
19001903   s1 = m_dsk.ff_44b & JKFF_CLK;
19011904   s1 |= m_dsk.ff_44b & JKFF_J;
r26153r26154
19121915    * C'   CLRSTAT'
19131916    * Q   RDYLAT'
19141917    */
1915   DEBUG_NAME("      RDYLAT 45a");
1918   DEBUG_NAME("\t\t45a RDYLAT");
19161919   s0 = m_dsk.ff_45a;
19171920   s1 = m_dsk.ff_45a & JKFF_CLK;
19181921   if (dhd)
r26153r26154
19321935    * C'   1
19331936    * Q   to KSTAT[11] DATALATE
19341937    */
1935   DEBUG_NAME("      SEQERR 45b");
1938   DEBUG_NAME("\t\t45b SEQERR");
19361939   s0 = m_dsk.ff_45b;
19371940   s1 = m_dsk.ff_45b & JKFF_CLK;
19381941   s1 |= JKFF_J;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team