src/dps8/dps8_iom.c
// doConnectChan ()
//
// Process the "connect channel".  This is what the IOM does when it
// receives a $CON signal.
//
// Only called by iom_interrupt ()
//
// The connect channel requests one or more "list services" and processes the
// resulting PCW control words.
//
doConnectChan ()
Process the "connect channel".  This is what the IOM does when it
receives a $CON signal.

Only called by iom_interrupt ()

The connect channel requests one or more "list services" and processes the
resulting PCW control words.
doConnectChan () Process the " connect channel " . This is what the IOM does when it receives a $CON signal . Only called by iom_interrupt () The connect channel requests one or more " list services " and processes the resulting PCW control words .
static int doConnectChan (uint iomUnitIdx)
  {
     If the IOM Central does not indicate a PTRO during the list service,
     the connect channel obtains anther list service.
     The connect channel does interrupt or store status.
     The DCW and SCW mailboxes for the connect channel are not used by
     the IOM.
    iomChanData_t * p = & iomChanData [iomUnitIdx] [IOM_CONNECT_CHAN];
    p -> lsFirst = true;
    bool ptro, send, uff;
    do
      {
         Fetch the next PCW
        int rc = iomListService (iomUnitIdx, IOM_CONNECT_CHAN, & ptro, & send, & uff);
        if (rc < 0)
          {
            sim_warn ("connect channel connect failed\n");
            return -1;
          }
        if (uff)
          {
            sim_warn ("connect channel ignoring uff\n");  XXX
          }
        if (! send)
          {
            sim_warn ("connect channel nothing to send\n");
          }
        else
          {
             Copy the PCW's DCW to the payload channel
            iomChanData_t * q = & iomChanData [iomUnitIdx] [p -> PCW_CHAN];
            q -> DCW = p -> DCW;
            unpackDCW (iomUnitIdx, p -> PCW_CHAN);
            doPayloadChan (iomUnitIdx, p -> PCW_CHAN);
          }
      } while (! ptro);
    return 0;  XXX
  }
static int doConnectChan ( uint iomUnitIdx ) { iomChanData_t * p = & iomChanData [ iomUnitIdx ] [ IOM_CONNECT_CHAN ] ; p -> lsFirst = true ; bool ptro , send , uff ; do { int rc = iomListService ( iomUnitIdx , IOM_CONNECT_CHAN , & ptro , & send , & uff ) ; if ( rc < 0 ) { sim_warn ( " \n " ) ; return -1 ; } if ( uff ) { sim_warn ( " \n " ) ; } if ( ! send ) { sim_warn ( " \n " ) ; } else { iomChanData_t * q = & iomChanData [ iomUnitIdx ] [ p -> PCW_CHAN ] ; q -> DCW = p -> DCW ; unpackDCW ( iomUnitIdx , p -> PCW_CHAN ) ; doPayloadChan ( iomUnitIdx , p -> PCW_CHAN ) ; } } while ( ! ptro ) ; return 0 ; }
doConnectChan ()
Process the "connect channel".
doConnectChan () Process the " connect channel " .
// ... the connect channel obtains a list service from the IOM Central. // During this service the IOM Central will do a double precision read // from the core, under the control of the LPW for the connect channel. // // If the IOM Central does not indicate a PTRO during the list service, // the connect channel obtains anther list service. // // The connect channel does interrupt or store status. // // The DCW and SCW mailboxes for the connect channel are not used by // the IOM. // Fetch the next PCW // XXX // Copy the PCW's DCW to the payload channel // XXX