CAC 2015-12-05

ABSI notes

PRPH cards

imp_dcm_data.incl.pl1:dcl  channel_name (1:2) char (4) aligned static options (constant) init ("impr", "impw");

imp_dcm_init.pl1:        call find_peripheral ((channel_name (chindex)), giocno, channo, temp_PRPH_data, code);
/* For use with channel connect word */

dcl  (
     imp_request_status_op_code init ("000000"b),
     imp_read_op_code init ("000001"b),
     imp_write_op_code init ("001001"b),
     host_switch_up_op_code init ("110000"b),
     imp_reset_status_op_code init ("100000"b),
     host_switch_down_op_code init ("010000"b)
     ) bit (6) internal static;
dcl  1 io_manager_arg aligned based (io_manager_arg_ptr),
       2 chx fixed bin (35),                                /* channel index from io_manager$assign */
       2 bound fixed bin (19),                              /* workspace size */
       2 pcw bit (36) aligned,                              /* or IDCW */
       2 listx fixed bin (18),                              /* DCW list offset */
       2 ptp ptr,                                           /* page table pointer */
       2 listp ptr,                                         /* DCW list pointer */
       2 dcw_pair_ptr ptr;                                  /* DCW pair pointer */

dcl  1 ima aligned like io_manager_arg;

dcl  1 read_list based aligned,
       2 idcw aligned like idcw,
       2 ddcw aligned like dcw,
       2 length fixed bin,
       2 message bit (8100) aligned;

dcl  1 write_list based aligned,
       2 idcw aligned like idcw,
       2 ddcw aligned like dcw,
       2 length fixed bin,
       2 message bit (8100) aligned;

          ima.chx = dcmp -> dcm.channel (chindex).devx;
          ima.pcw = ""b;
          ima.ptp = null ();
          ima.listp = listp;
          call io_manager$connect_abs (ima);

Initiate_read:
          dcmp -> dcm.read_buffer_full = "0"b;

          string (listp -> read_list.ddcw) = ""b;           /* Set up DATA DCW */
          listp -> read_list.ddcw.address =
               bit (fixed (dcmp -> dcm.channel (read_channel).buffer_absolute_address + rincur + message_offset, 18));
          listp -> read_list.ddcw.tally = bit (fixed (max_words_in_read_message, 12));

          string (listp -> read_list.idcw) = ""b;
          listp -> read_list.idcw.code = "111"b;
          listp -> read_list.idcw.command = imp_read_op_code;
          listp -> read_list.idcw.chan_cmd = data_transfer_channel_instruction;
          listp -> read_list.idcw.count = bit (binary (1, 6));
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License