Previous 199869 Revisions Next

r26181 Friday 15th November, 2013 at 19:34:53 UTC by Jürgen Buchmüller
Display DISK status registers in the debugger state. Hunting bugs.
[/branches/alto2/src/emu/cpu/alto2]a2disk.c alto2.c alto2.h
[/branches/alto2/src/emu/machine]diablo_hd.c

branches/alto2/src/emu/cpu/alto2/a2disk.c
r26180r26181
14381438   m_dsk.ff_21a = update_jkff(s0, s1);
14391439
14401440   // If the KSEC FF 21a Q goes 1, pulse the SECLATE signal for some time.
1441   if ((m_dsk.ff_21a_old & JKFF_Q0) && (m_dsk.ff_21a & JKFF_Q)) {
1441   if (!(m_dsk.ff_21a_old & JKFF_Q) && (m_dsk.ff_21a & JKFF_Q)) {
14421442      m_dsk.seclate_timer->adjust(attotime::from_nsec(TW_SECLATE), 1);
14431443      if (m_dsk.seclate) {
14441444         m_dsk.seclate = 0;
r26180r26181
22562256   } else {
22572257      /* if XFEROFF is set, keep the bit at 1 (RDGATE' is high) */
22582258      if (GET_KCOM_XFEROFF(m_dsk.kcom)) {
2259         clk = dhd->rd_clock(arg);
22602259         bit = 1;
22612260      } else {
2261         clk = dhd->rd_clock(arg);
22622262         bit = dhd->rd_data(arg);
22632263         LOG((LOG_DISK,7,"   BITCLK#%d bit:%d (read, driveclk) @%lldns\n", arg, bit, ntime()));
22642264      }
r26180r26181
22742274         m_dsk.bitclk_time = static_cast<int>(dhd->bit_time().as_double() * ATTOSECONDS_PER_NANOSECOND);
22752275      m_bitclk_time += m_dsk.bitclk_time;
22762276#endif
2277   } else {
2278      // stop the bitclock timer
2279      m_bitclk_time = -1;
22772280   }
22782281}
22792282
r26180r26181
22952298   if (m_bitclk_time >= 0) {
22962299      LOG((LOG_DISK,0,"   unit #%d stop bitclk\n", unit));
22972300      m_bitclk_time = -1;
2301      m_bitclk_index = -1;
22982302   }
22992303#endif
23002304
23012305   /* KSTAT[0-3] update the current sector in the kstat field */
2302   PUT_KSTAT_SECTOR(m_dsk.kstat, dhd->get_sector() ^ 017);
2306   PUT_KSTAT_SECTOR(m_dsk.kstat, dhd->get_sector());
23032307
23042308   /* clear input and output shift registers (?) */
23052309   m_dsk.shiftin = 0;
r26180r26181
23162320#else
23172321   // TODO: verify current sector == requested sector and only then run the bitclk?
23182322   // HACK: no command, no bit clock
2319   if (debug_read_mem(0521)) {
2323//   if (debug_read_mem(0521))
2324   {
23202325      // Make the CPU execution loop call disk_bitclk
23212326      m_bitclk_time = 0;
23222327      m_bitclk_index = 0;
r26180r26181
23702375#endif
23712376
23722377   m_dsk.strobon_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::disk_strobon),this));
2373   m_dsk.strobon_timer->adjust(attotime::from_nsec(TW_STROBON));
2378   m_dsk.strobon_timer->adjust(attotime::from_nsec(TW_STROBON), (1<<1));
23742379
23752380   m_dsk.seclate_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::disk_seclate),this));
23762381   m_dsk.seclate_timer->adjust(attotime::from_nsec(TW_SECLATE), 1);
branches/alto2/src/emu/cpu/alto2/alto2.c
r26180r26181
4545   cpu_device(mconfig, ALTO2, "Xerox Alto-II", tag, owner, clock, "alto2", __FILE__),
4646#if   ALTO2_DEBUG
4747   m_log_types(LOG_DISK|LOG_KSEC|LOG_KWD),
48   m_log_level(7),
48   m_log_level(6),
4949   m_log_newline(true),
5050#endif
5151   m_ucode_config("ucode", ENDIANNESS_BIG, 32, 12, -2 ),
r26180r26181
10621062   save_item(NAME(m_eth.tx_count));
10631063   save_item(NAME(m_eth.duckbreath));
10641064
1065   state_add( A2_DRIVE,   "DRIVE",   m_dsk.drive).formatstr("%1u");
1066   state_add( A2_KADDR,   "KADDR",   m_dsk.kaddr).formatstr("%06O");
1067   state_add( A2_KADR,    "KADR",    m_dsk.kadr).formatstr("%06O");
1068   state_add( A2_KSTAT,   "KSTAT",   m_dsk.kstat).formatstr("%06O");
1069   state_add( A2_KCOM,    "KCOM",    m_dsk.kcom).formatstr("%06O");
1070   state_add( A2_KRECNO,  "KRECNO",  m_dsk.krecno).formatstr("%02O");
1071   state_add( A2_SHIFTIN, "SHIFTIN", m_dsk.shiftin).formatstr("%07O");
1072   state_add( A2_SHIFTOUT,"SHIFTOUT",m_dsk.shiftout).formatstr("%07O");
1073   state_add( A2_DATAIN,  "DATAIN",  m_dsk.datain).formatstr("%06O");
1074   state_add( A2_DATAOUT, "DATAOUT", m_dsk.dataout).formatstr("%06O");
1075   state_add( A2_KRWC,    "KRWC",    m_dsk.krwc).formatstr("%1u");
1076   state_add( A2_KFER,    "KFER",    m_dsk.kfer).formatstr("%1u");
1077   state_add( A2_WDTSKENA,"WDTSKENA",m_dsk.wdtskena).formatstr("%1u");
1078   state_add( A2_WDINIT0, "WDINIT0", m_dsk.wdinit0).formatstr("%1u");
1079   state_add( A2_WDINIT,  "WDINIT",  m_dsk.wdinit).formatstr("%1u");
1080   state_add( A2_STROBE,  "STROBE",  m_dsk.strobe).formatstr("%1u");
1081   state_add( A2_BITCLK,  "BITCLK",  m_dsk.bitclk).formatstr("%1u");
1082   state_add( A2_DATIN,   "DATIN",   m_dsk.datin).formatstr("%06O");
1083   state_add( A2_BITCNT,  "BITCNT",  m_dsk.bitcount).formatstr("%02O");
1084   state_add( A2_CARRY,   "CARRY",   m_dsk.carry).formatstr("%1u");
1085   state_add( A2_SECLATE, "SECLATE", m_dsk.seclate).formatstr("%1u");
1086   state_add( A2_SEEKOK,  "SEEKOK",  m_dsk.seekok).formatstr("%1u");
1087   state_add( A2_OKTORUN, "OKTORUN", m_dsk.ok_to_run).formatstr("%1u");
1088   state_add( A2_READY,   "READY",   m_dsk.kstat).formatstr("%1u");
1089   state_add_divider(-1);
10651090   state_add( A2_TASK,    "TASK",    m_task).formatstr("%03O");
10661091   state_add( A2_MPC,     "MPC",     m_mpc).formatstr("%06O");
10671092   state_add( A2_NEXT,    "NEXT",    m_next).formatstr("%06O");
r26180r26181
10741099   state_add( A2_SHIFTER, "SHIFTER", m_shifter).formatstr("%06O");
10751100   state_add( A2_LALUC0,  "LALUC0",  m_laluc0).formatstr("%1u");
10761101   state_add( A2_M,       "M",       m_m).formatstr("%06O");
1077
1102   state_add_divider(-1);
10781103   state_add( A2_AC3,     "AC(3)",   m_r[000]).formatstr("%06O");
10791104   state_add( A2_AC2,     "AC(2)",   m_r[001]).formatstr("%06O");
10801105   state_add( A2_AC1,     "AC(1)",   m_r[002]).formatstr("%06O");
r26180r26181
11071132   state_add( A2_R35,     "R35",     m_r[035]).formatstr("%06O");
11081133   state_add( A2_R36,     "R36",     m_r[036]).formatstr("%06O");
11091134   state_add( A2_R37,     "R37",     m_r[037]).formatstr("%06O");
1110
1135   state_add_divider(-1);
11111136   state_add( A2_S00,     "S00",     m_s[0][000]).formatstr("%06O");
11121137   state_add( A2_S01,     "S01",     m_s[0][001]).formatstr("%06O");
11131138   state_add( A2_S02,     "S02",     m_s[0][002]).formatstr("%06O");
branches/alto2/src/emu/cpu/alto2/alto2.h
r26180r26181
160160   A2_TASK, A2_MPC, A2_NEXT, A2_NEXT2,
161161   // BUS, ALU, temp, latch, memory latch and carry flags
162162   A2_BUS, A2_T, A2_ALU, A2_ALUC0,   A2_L, A2_SHIFTER, A2_LALUC0, A2_M,
163   // DISK controller registers
164   A2_DRIVE, A2_KADDR, A2_KADR, A2_KSTAT, A2_KCOM, A2_KRECNO,
165   A2_SHIFTIN, A2_SHIFTOUT, A2_DATAIN, A2_DATAOUT, A2_KRWC,
166   A2_KFER, A2_WDTSKENA, A2_WDINIT0, A2_WDINIT, A2_STROBE,
167   A2_BITCLK, A2_DATIN, A2_BITCNT, A2_CARRY, A2_SECLATE,
168   A2_SEEKOK, A2_OKTORUN, A2_READY,
163169   A2_R,   // 32 R registers
164170   A2_AC3 = A2_R, A2_AC2, A2_AC1, A2_AC0, A2_R04, A2_R05, A2_PC,  A2_R07,
165171   A2_R10, A2_R11, A2_R12, A2_R13, A2_R14, A2_R15, A2_R16, A2_R17,
branches/alto2/src/emu/machine/diablo_hd.c
r26180r26181
11551155
11561156   if (m_rdgate_0) {
11571157      LOG_DRIVE((8,"[DHD]   %s: unit #%d rdgate not asserted\n", __FUNCTION__, m_unit));
1158      return 1;   // read gate is not asserted (active 0)
1158      return 0;   // read gate is not asserted (active 0)
11591159   }
11601160
11611161   if (index < 0 || index >= bits_per_sector()) {
r26180r26181
12181218   if (index & 1) {
12191219      // clock bits are on even bit positions only
12201220      clk = 0;
1221   } else if (bits) {
1222      RDBIT(bits,index,clk);
12211223   } else {
1222      RDBIT(bits,index,clk);
1224      clk = 0;
12231225   }
12241226   LOG_DRIVE((7,"[DHD]   %s: read #%d %d/%d/%d clk #%d:%d\n", __FUNCTION__, m_unit, m_cylinder, m_head, m_sector, index, clk));
12251227   m_rdlast = index;
r26180r26181
13301332   m_rdlast = -1;
13311333
13321334   // for units with a CHD assigned to them start the timer
1333   if (m_handle)
1335   if (m_handle) {
13341336      timer_set(m_sector_time - m_sector_mark_0_time, 1, 0);
1337      read_sector();
1338   }
13351339}
13361340
13371341/**
r26180r26181
13521356   switch (param) {
13531357   case 0:
13541358      timer.adjust(m_sector_mark_0_time, 1);
1355      /* deassert sector mark */
1356      sector_mark_1();
1357      break;
1358   case 1:
1359      timer.adjust(m_sector_mark_1_time, 2);
13601359      /* assert sector mark */
13611360      sector_mark_0();
13621361      break;
1363   case 2:
1362   case 1:
13641363      /* next sector starting soon now */
1365      timer.adjust(m_sector_time - m_sector_mark_0_time, 0);
1364      timer.adjust(m_sector_mark_1_time, 2);
13661365      /* call the sector_callback, if any */
13671366      if (m_sector_callback)
13681367         (void)(*m_sector_callback)(m_sector_callback_cookie, m_unit);
1368      break;
1369   case 2:
1370      timer.adjust(m_sector_time - m_sector_mark_0_time, 0);
1371      /* deassert sector mark */
1372      sector_mark_1();
1373      break;
13691374   }
13701375}
13711376

Previous 199869 Revisions Next


© 1997-2024 The MAME Team