Previous 199869 Revisions Next

r26408 Monday 25th November, 2013 at 01:30:19 UTC by Jürgen Buchmüller
Try to fix disk write errors. There's something missing so that the right status is returned after data CRC is written.
[/branches/alto2/src/emu/cpu/alto2]a2disk.c alto2cpu.c
[/branches/alto2/src/emu/machine]diablo_hd.c

branches/alto2/src/emu/machine/diablo_hd.c
r26407r26408
13061306   LOG_DRIVE((9,"[DHD%u]   CHS:%03d/%d/%02d sector_mark_0=0\n", m_unit, m_cylinder, m_head, m_sector));
13071307
13081308   // HACK: deassert wrgate
1309   m_wrgate_0 = 1;
1309   //   m_wrgate_0 = 1;
13101310
13111311   squeeze_sector();      // squeeze previous sector bits, if it was written to
13121312   m_sector_mark_0 = 0;   // assert sector mark (set to 0)
branches/alto2/src/emu/cpu/alto2/a2disk.c
r26407r26408
9090/** @brief record numbers per sector in INCRECNO order */
9191enum {
9292   RECNO_HEADER,
93   RECNO_PAGENO,
93   RECNO_NOTHING,
9494   RECNO_LABEL,
9595   RECNO_DATA
9696};
r26407r26408
11641164      m_dsk.krwc = GET_KADR_LABEL(m_dsk.kadr);
11651165      LOG((LOG_DISK,2,"   INCRECNO; HEADER → LABEL (%o, rwc:%o)\n", m_dsk.krecno, m_dsk.krwc));
11661166      break;
1167   case RECNO_PAGENO:
1167   case RECNO_NOTHING:
11681168      m_dsk.krecno = RECNO_HEADER;
11691169      m_dsk.krwc = GET_KADR_HEADER(m_dsk.kadr);
1170      LOG((LOG_DISK,2,"   INCRECNO; PAGENO → HEADER (%o, rwc:%o)\n", m_dsk.krecno, m_dsk.krwc));
1170      LOG((LOG_DISK,2,"   INCRECNO; NOTHING → HEADER (%o, rwc:%o)\n", m_dsk.krecno, m_dsk.krwc));
11711171      break;
11721172   case RECNO_LABEL:
11731173      m_dsk.krecno = RECNO_DATA;
r26407r26408
11751175      LOG((LOG_DISK,2,"   INCRECNO; LABEL → DATA (%o, rwc:%o)\n", m_dsk.krecno, m_dsk.krwc));
11761176      break;
11771177   case RECNO_DATA:
1178      m_dsk.krecno = RECNO_PAGENO;
1178      m_dsk.krecno = RECNO_NOTHING;
11791179      m_dsk.krwc = 0;   /* read (?) */
1180      LOG((LOG_DISK,2,"   INCRECNO; DATA → PAGENO (%o, rwc:%o)\n", m_dsk.krecno, m_dsk.krwc));
1180      LOG((LOG_DISK,2,"   INCRECNO; DATA → NOTHING (%o, rwc:%o)\n", m_dsk.krecno, m_dsk.krwc));
11811181      break;
11821182   }
11831183   // TODO: show disk indicator
r26407r26408
12961296 */
12971297void alto2_cpu_device::f1_late_load_kcom()
12981298{
1299   UINT16 change = m_dsk.kcom ^ m_bus;
12991300   m_dsk.kcom = m_bus;
13001301   LOG((LOG_DISK,2,"   KCOM←; BUS %06o\n", m_dsk.kcom));
13011302   LOG((LOG_DISK,2,"      XFEROFF    : %d\n", GET_KCOM_XFEROFF(m_dsk.kcom)));
r26407r26408
13031304   LOG((LOG_DISK,2,"      BCLKSRC    : %d\n", GET_KCOM_BCLKSRC(m_dsk.kcom)));
13041305   LOG((LOG_DISK,2,"      WFFO       : %d\n", GET_KCOM_WFFO(m_dsk.kcom)));
13051306   LOG((LOG_DISK,2,"      SENDADR    : %d\n", GET_KCOM_SENDADR(m_dsk.kcom)));
1307   if (GET_KCOM_WDINHIB(change)) {
1308      // WDALLOW going 0: should asynchronously reset 43a and 53a and set 53b
1309      if (m_task == task_kwd) {
1310         UINT8 s0, s1;
1311         /**
1312          * JK flip-flop 53b (word task)
1313          * <PRE>
1314          * CLK   SYSCLKB'
1315          * J   0
1316          * K'   (BLOCK & WDTSKACT)'
1317          * S'   WDALLOW
1318          * C'   1
1319          * Q   WDINIT
1320          * </PRE>
1321          */
1322         s0 = m_dsk.ff_53b;
1323         s1 = JKFF_0;
1324         if (WDALLOW)
1325            s1 |= JKFF_S;
1326         s1 |= JKFF_C;
1327         m_dsk.ff_53b = update_jkff(s0, s1, "53b KWD   ");
1328
1329         /**
1330          * JK flip-flop 53a (word task)
1331          * <PRE>
1332          * CLK   SYSCLKB'
1333          * J   from 43b Q
1334          * K'   (BLOCK & WDTSKACT)'
1335          * S'   1
1336          * C'   WDALLOW
1337          * Q   to 43a J and K'
1338          * </PRE>
1339          */
1340         s0 = m_dsk.ff_53a;
1341         s1 = JKFF_0;
1342         if (m_dsk.ff_43b & JKFF_Q)
1343            s1 |= JKFF_J;
1344         s1 |= JKFF_S;
1345         if (WDALLOW)
1346            s1 |= JKFF_C;
1347         m_dsk.ff_53a = update_jkff(s0, s1, "53a KWD   ");
1348
1349         /**
1350          * JK flip-flop 43a (word task)
1351          * <PRE>
1352          * CLK   SYSCLKA'
1353          * J   from 53a Q
1354          * K'   from 53a Q
1355          * S'   1
1356          * C'   WDALLOW
1357          * Q   WDTSKENA', Q' WDTSKENA
1358          * </PRE>
1359          */
1360         s0 = m_dsk.ff_43a;
1361         s1 = JKFF_0;
1362         if (m_dsk.ff_53a & JKFF_Q)
1363            s1 |= JKFF_J;
1364         if (m_dsk.ff_53a & JKFF_Q)
1365            s1 |= JKFF_K;
1366         s1 |= JKFF_S;
1367         if (WDALLOW)
1368            s1 |= JKFF_C;
1369         m_dsk.ff_43a = update_jkff(s0, s1, "43a KWD   ");
1370
1371         if (m_dsk.ff_43a & JKFF_Q) {
1372            m_dsk.wdtskena = 1;
1373            m_task_wakeup &= ~(1 << task_kwd);
1374         }
1375      }
1376   }
13061377   // TODO: show disk indicator in the GUI?
13071378}
13081379
r26407r26408
13881459 */
13891460void alto2_cpu_device::f2_late_rwc()
13901461{
1391   static UINT16 branch_map[4] = {0,2,3,3};
1392   UINT16 r = branch_map[m_dsk.krwc];;
1462   UINT16 r;
13931463   UINT16 init = (m_task == task_kwd && m_dsk.wdinit0) ? 037 : 0;
13941464
1465   switch (m_dsk.krwc & 3) {
1466   case 0:
1467      r = 0;
1468      break;
1469   case 1:
1470      r = 2;
1471      break;
1472   default:
1473      r = 3;
1474   }
1475
13951476   switch (m_dsk.krecno) {
13961477   case RECNO_HEADER:
13971478      LOG((LOG_DISK,1,"   RWC; %sbranch header(%d):%s (%#o|%#o|%#o)\n",
13981479         (r | init) ? "" : "no ", m_dsk.krecno,
13991480         rwc_name[m_dsk.krwc], m_next2, r, init));
14001481      break;
1401   case RECNO_PAGENO:
1482   case RECNO_NOTHING:
14021483      LOG((LOG_DISK,1,"   RWC; %sbranch pageno(%d):%s (%#o|%#o|%#o)\n",
14031484         (r | init) ? "" : "no ", m_dsk.krecno,
14041485         rwc_name[m_dsk.krwc], m_next2, r, init));
branches/alto2/src/emu/cpu/alto2/alto2cpu.c
r26407r26408
2222//  LOGGING AND DEBUGGING
2323//**************************************************************************
2424#if   ALTO2_DEBUG
25int g_log_types = LOG_ETH;
25int g_log_types = LOG_DISK | LOG_ETH;
2626int g_log_level = 8;
2727bool g_log_newline = true;
2828

Previous 199869 Revisions Next


© 1997-2024 The MAME Team