CAC 2017-12-13

analysis of Multics 3270 code

source/library_dir_dir/system_library_tools/source/bound_as_mpx_.s.archive/as_ibm3270_mpx_.pl1 -- believed not used
source/library_dir_dir/system_library_tools/source/bound_ibm3270_.s.archive/ibm3270_io_call_.pl1
source/library_dir_dir/system_library_tools/source/bound_ibm3270_.s.archive/ibm3270_.pl1
source/library_dir_dir/system_library_tools/source/bound_ibm3270_.s.archive/ibm3270_control_.pl1
source/library_dir_dir/system_library_1/source/bound_priv_mpx.s.archive/priv_ibm3270_mpx.pl1
source/library_dir_dir/system_library_1/source/ibm3270_mpx.pl1

source/library_dir_dir/include/ibm3270_mpx_data.incl.pl1
source/library_dir_dir/include/ibm3270_attach_data.incl.pl1
source/library_dir_dir/include/ibm3270_mpx_load_data.incl.pl1
source/library_dir_dir/include/ibm3270_io_info.incl.pl1
bound_priv_mpx                    137  (0, 0, 0) read execute encacheable
     sty_mpx                                      paged length: 7 pages;
     priv_ibm3270_mpx                 priv_x25_mpx                     priv_hasp_mpx                    priv_polled_vip_mpx

ibm3270_mpx                       165  (0, 0, 0) read execute encacheable
                                                  paged length: 4 pages;

ibm3270_.pl1

/* IBM3270_: An I/O module for controling multi-station 3270 controllers */

/* Attach entry point */

ibm3270_attach: entry (arg_iocbp, arg_option, arg_sw, arg_code);

/* Detach entry point */

ibm3270_detach: entry (arg_iocbp, arg_code);

/* Open entry point */

ibm3270_open: entry (arg_iocbp, arg_mode, arg_sw, arg_code);
'
/* Initialize attach data variables */

          unspec (ad.stx) = "002"b3;
          unspec (ad.etx) = "003"b3;
          unspec (ad.soh) = "001"b3;
          unspec (ad.sf) = "035"b3;
          unspec (ad.sba) = "021"b3;
          unspec (ad.ic) = "023"b3;
          unspec (ad.eua) = "022"b3;
          if ad.ascii then do;
               unspec (ad.etb) = "027"b3;
               unspec (ad.eot) = "004"b3;
               unspec (ad.pt) = "011"b3;
               unspec (ad.ra) = "024"b3;
               unspec (ad.esc) = "033"b3;
          end;
          else do;
               unspec (ad.etb) = "046"b3;
               unspec (ad.eot) = "067"b3;
               unspec (ad.pt) = "005"b3;
               unspec (ad.ra) = "074"b3;
               unspec (ad.esc) = "047"b3;
          end;

          call line_control (SET_3270_MODE, 0);
          if code ^= 0 then go to report_open_code;
          call line_control (SET_BID_LIMIT, 3);
          if code ^= 0 then go to report_open_code;
          call line_control (CONFIGURE, 1);
          if code ^= 0 then go to report_open_code;
          call line_control2 (SET_TTD_PARAMS, 2, 2);
          if code ^= 0 then go to report_open_code;

/* Close entry point */

ibm3270_close: entry (arg_iocbp, arg_code);

ibm3270_control_.pl1

/* The control entry point */

control:  entry (arg_iocbp, arg_order, arg_info_ptr, arg_code);
          if order = "event_info" then do;
          if order = "io_call" then do;
               call ibm3270_io_call_ (iocbp, info_ptr, code);
          if order = "general_poll" then do;
          else if order = "stop_general_poll" then do;
          else if order = "poll" then do;
          else if order = "read" then do;                   /* Get next data block */
          else if order = "write" then do;
          else do;
           call hcs_$tty_order (ad.tty_index, order, info_ptr, state, code);

/* Procedure to do as much I/O as can be done right now */

worker:   proc;

               call ipc_$mask_ev_calls (code);
               on cleanup call ipc_$unmask_ev_calls (code);
worker_loop:
               call scan_more_input;

               call send_more_output;

               if ad.input_line_status ^= 0 then go to worker_loop; /* In case read error reported during output */

               call poll_more_devices;

               if ad.input_line_status ^= 0 | ad.output_line_status ^= 0 then go to worker_loop;

               call ipc_$unmask_ev_calls (code);

               return;

          end worker;

/* Procedure that parses the input data stream at the bisync level */

scan_more_input: proc;

               go to get_data (ad.input_state);

get_data (1):                                               /* Looking for stx in non_transparent mode */
               if substr (unscanned_data, 1, 1) = ad.stx then do; /* Found data */
               if substr (unscanned_data, 1, 1) = ad.soh then do; /* Found header */
               if substr (unscanned_data, 1, 1) = ad.eot then call process_eot;

get_data (2):                                               /* In middle of block, looking for etb or etx */

get_data (3):                                               /* Skip over lrc character after etx or etb */

get_data (4):                                               /* Scanning data in header */

/* Routine to process input data once it is found */

process_input: proc;

                    if header_data = "%R" then do;          /* Status information */
                    else if header_data = "%/" then do;     /* Test request */

/* Procedure to set up polling address and initiate a poll operation */

poll:     proc (device);

/* This procedure is responsible for keeping output moving */

send_more_output: proc;
               if ad.output_line_status ^= 0 then do;       /* Error to handle first */

expand_ibm3270_mde_msg_.pl1

/* *      EXPAND_IBM3270_MDE_MSG_
   *
   *      Expander for message from ibm3270_mpx when a queue operation is attempted
   *      on a channel which already has a write operation queued.

priv_ibm3270_mpx.pl1

/* PRIV_IBM3270_MPX - Contains the portions of the ibm3270 multiplexer that need nt be wired */

/* Entry called at multiplexer creation time to build data bases */

init_multiplexer:

/* Entry to free the multiplexer data base */

terminate_multiplexer:

/* Entry to allow dialups on the sub-channels */

start:
               then call ibm3270_mpx$dialup (mdp, i);

/* Entry to dis-allow dialups on the sub-channels */

stop:

/* Entry to do a forced shutdown (or crash) of the multiplexer */

shutdown:
          then call channel_manager$control (md.devx, "hangup", null (), code);

/* Control orders */

priv_control:

          if order = "copy_meters"
          else if order = "get_meters"

hpriv_control:
          if order = "load_mpx"

                    if md.ascii
                    then do;
                         unspec (md.nl) = "012"b3;
                         unspec (md.sba) = "021"b3;
                         unspec (md.stx) = "002"b3;
                         unspec (md.esc) = "033"b3;
                         unspec (md.write) = "061"b3;
                         unspec (md.erase_write) = "065"b3;
                         unspec (md.ic) = "023"b3;
                         unspec (md.etx) = "003"b3;
                         unspec (md.soh) = "001"b3;
                         unspec (md.eot) = "004"b3;
                         unspec (md.percent) = "045"b3;
                         unspec (md.slash) = "057"b3;
                         unspec (md.letter_R) = "122"b3;
                         unspec (md.etb) = "027"b3;
                         unspec (md.enter) = "047"b3;
                         unspec (md.clear) = "137"b3;
                         unspec (md.pa1) = "045"b3;
                         unspec (md.pa2) = "076"b3;
                         unspec (md.pa3) = "054"b3;
                         unspec (md.bs) = "010"b3;
                         unspec (md.cr) = "015"b3;
                         unspec (md.em) = "031"b3;
                         unspec (md.copy) = "067"b3;
                    end;
                    else do;
                         unspec (md.nl) = "025"b3;
                         unspec (md.sba) = "021"b3;
                         unspec (md.stx) = "002"b3;
                         unspec (md.esc) = "047"b3;
                         unspec (md.write) = "361"b3;
                         unspec (md.erase_write) = "365"b3;
                         unspec (md.ic) = "023"b3;
                         unspec (md.etx) = "003"b3;
                         unspec (md.soh) = "001"b3;
                         unspec (md.eot) = "067"b3;
                         unspec (md.percent) = "154"b3;
                         unspec (md.slash) = "141"b3;
                         unspec (md.letter_R) = "331"b3;
                         unspec (md.etb) = "046"b3;
                         unspec (md.enter) = "175"b3;
                         unspec (md.clear) = "155"b3;
                         unspec (md.pa1) = "154"b3;
                         unspec (md.pa2) = "156"b3;
                         unspec (md.pa3) = "054"b3;
                         unspec (md.bs) = "026"b3;
                         unspec (md.cr) = "015"b3;
                         unspec (md.em) = "031"b3;
                         unspec (md.copy) = "367"b3;
                    end;

          else if order = "start_mpx"
               call line_control (SET_3270_MODE);           /* Tell bisync I want the 3270 option */
               call line_control (SET_BID_LIMIT);
               call line_control (CONFIGURE);               /* Non-transparent ebcdic */
               call line_control (SET_TTD_PARAMS);
               call channel_manager$control (md.devx, "set_input_message_size", addr (i), code);
               call ibm3270_mpx$start_general_poll (mdp);

/* Internal procedure to perform a line control operation */

line_control:
          call channel_manager$control (md.devx, "line_control", addr (line_ctl), code);

ibm3270_mpx.pl1

/* Control entry point */

control: entry (arg_mdp, arg_subchan, arg_order, arg_infop, arg_code);
          if order = "enter_receive" then do;
          else if order = "abort" then do;
          else if order = "listen" then do;
          else if order = "hangup" then do;
          else if order = "wru" then do;
          else if order = "printer_off" then code = 0;
          else if order = "printer_on" then code = 0;

/* Read entry. We have no data. */

read: entry (arg_mdp, arg_subchan, arg_chain_ptr, arg_more_input, arg_code);

/* Entries that dial with modes. We only watch the setting of hndlquit */

check_modes: entry (arg_mdp, arg_subchan, arg_mclp, arg_code);
set_modes: entry (arg_mdp, arg_subchan, arg_mclp, arg_code);
get_modes: entry (arg_mdp, arg_subchan, arg_modes, arg_code);
/* Write entry point */

write: entry (arg_mdp, arg_subchan, arg_chain_ptr, arg_code);
/* Check for trailing ETX. */
/* The output chain should have been formatted by tty_write so that each new_line is followed by two nulls.
   Loop thru the chain replacing each such sequence by a cursor addressing sequence */
/* Format the header block with STX-ESC-WRITE-WCC-SBA-POS-POS */
/* Two characters must be added to end of last buffer, IC (insert cursor) and ETX */

/* Interrupt entry point */

interrupt: entry (arg_mdp, arg_int_type, arg_int_data);
/* DIALUP interrupt - This means that the major channel has dialed up and the multiplexer is now loaded */

INTERRUPT (1):

/* HANGUP interrupt - This means that we have lost the phone and the multiplexer is considered crashed */

INTERRUPT (2):

/* CRASH interrupt - Parent multiplexer has crashed. We must propagate the information */

INTERRUPT (3):

/* SEND_OUTPUT interrupt - We are allowed to send more output */

INTERRUPT (4):

/* INPUT_AVAILABLE Interrupt - Not used */

INTERRUPT (5):

/* ACCEPT_INPUT - Real data to processes */

INTERRUPT (6):

          if substr (text, 1, 1) = md.soh then do;          /* Status or test_req */

/* INPUT REJECTED interrupt - Ignore */

INTERRUPT (7):

/* QUIT interrupt - Ignore */

INTERRUPT (8):

/* DIAL STATUS interrupt - Ignore */

INTERRUPT (10):

/* WRU TIMEOUT interrupt - Ignore */

INTERRUPT (11):

/* SPACE AVAILABLE interrupt - Retry suspended write operation. */

INTERRUPT (12):

                                                            /* various others - ignore */

INTERRUPT (13):
INTERRUPT (14):
INTERRUPT (15):
INTERRUPT (16):

/* MASKED interrupt - Treat like hangup but use different wakeup message */

INTERRUPT (17):

/* LINE STATUS interrupt - Decode and act upon in */

INTERRUPT (9):

LINE_STAT (1):                                              /* No response to poll */
LINE_STAT (2):                                              /* Badly formated output block */
LINE_STAT (3):                                              /* Rvi - device has status */
LINE_STAT (4):                                              /* Too many naks */
LINE_STAT (5):                                              /* Write status - can't happen */
LINE_STAT (6):                                              /* 3270 write complete */
LINE_STAT (7):                                              /* 3270 wack msg - printer going busy */
LINE_STAT (8):                                              /* Ibm3270 write eot */
LINE_STAT (9):
LINE_STAT (10):
LINE_STAT (11):
LINE_STAT (12):

/* Procedure to process input once it has arrived in its entirity */

process_input: proc;

/* Queue a poll request */

queue_poll: proc;

process_polls: proc;

/* Handle control function queue */

queue_control: proc;

tracing again

      613 /* SEND_OUTPUT interrupt - We are allowed to send more output */
      614
      615 INTERRUPT (4):
      616           if ^md.loaded then return;
      617           md.send_output = "1"b;                            /* Will save for later */
      618           if md.message_in_progress then do;                /* Complete partially written msg */
      619                call send_more_message;
      620                return;
      621           end;
      622           if ^md.output_in_progress then call process_write;/* Just in case */
      623           return;

                                                            STATEMENT 1 ON LINE 615
INTERRUPT (4):
          if ^md.loaded then return;

002731  aa  6 00172 3735 20   epp7      pr6|122,*           mdp
002732  aa  7 00102 2351 00   lda       pr7|66              md.loaded
002733  aa   040000 3150 03   cana      16384,du
002734  aa  0 00631 6001 00   tze       pr0|409             return_mac

DBG(184277206)> CPU TRACE: 002731  aa  6 00172 3735 20      epp7      pr6|122,*           mdp^M
DBG(184277208)> CPU TRACE: 002732  aa  7 00102 2351 00      lda       pr7|66              md.loaded^M
DBG(184277208)> CPU REGDUMPAQI: A=267200000000 Q=000000000004 IR:~BAR ^M
DBG(184277210)> CPU TRACE: 002733  aa   040000 3150 03      cana      16384,du^M
DBG(184277212)> CPU TRACE: 002734  aa  0 00631 6001 00      tze       pr0|409             return_mac^M
                                                            STATEMENT 1 ON LINE 617
          md.send_output = "1"b;

002735  aa   000400 2350 03   lda       256,du
002736  aa  7 00102 2551 00   orsa      pr7|66              md.send_output

DBG(184277214)> CPU TRACE: 002735  aa   000400 2350 03      lda       256,du^M
DBG(184277216)> CPU TRACE: 002736  aa  7 00102 2551 00      orsa      pr7|66              md.send_output^M
                                                            STATEMENT 1 ON LINE 618
          if md.message_in_progress then do;

002737  aa  7 00102 2351 00   lda       pr7|66              md.message_in_progress
002740  aa   002000 3150 03   cana      1024,du
002741  aa   000003 6000 04   tze       3,ic                002744

DBG(184277218)> CPU TRACE: 002737  aa  7 00102 2351 00      lda       pr7|66              md.message_in_progress^M
DBG(184277218)> CPU REGDUMPAQI: A=267600000000 Q=000000000004 IR:~BAR ^M
DBG(184277220)> CPU TRACE: 002740  aa   002000 3150 03      cana      1024,du^M
DBG(184277222)> CPU TRACE: 002741  aa   000003 6000 04      tze       3,ic                002744^M
                                                            STATEMENT 1 ON LINE 619
               call send_more_message;

002742  aa   001654 6700 04   tsp4      940,ic              004616
DBG(184277224)> CPU TRACE: 002742  aa   001654 6700 04      tsp4      940,ic              004616^M

ENTRY TO send_more_message                                  STATEMENT 1 ON LINE 1006
send_more_message: proc;

004616  aa  6 00270 6501 00   spri4     pr6|184

DBG(184277226)> CPU TRACE: 004616  aa  6 00270 6501 00      spri4     pr6|184^M

                                                            STATEMENT 1 ON LINE 1010
          if ^md.send_output then return;

004617  aa  6 00172 3735 20   epp7      pr6|122,*           mdp
004620  aa  7 00102 2351 00   lda       pr7|66              md.send_output
004621  aa   000400 3150 03   cana      256,du
004622  aa   000002 6010 04   tnz       2,ic                004624
004623  aa  6 00270 6101 00   rtcd      pr6|184

DBG(184277228)> CPU TRACE: 004617  aa  6 00172 3735 20      epp7      pr6|122,*           mdp^M
DBG(184277230)> CPU TRACE: 004620  aa  7 00102 2351 00      lda       pr7|66              md.send_output^M
DBG(184277230)> CPU REGDUMPAQI: A=267600000000 Q=000000000004 IR:~BAR ^M
DBG(184277232)> CPU TRACE: 004621  aa   000400 3150 03      cana      256,du^M
DBG(184277234)> CPU TRACE: 004622  aa   000002 6010 04      tnz       2,ic                004624^M

                                                            STATEMENT 1 ON LINE 1011
          if md.write_chain_ptr ^= null () then do;

004624  aa  7 00055 2361 00   ldq       pr7|45              md.write_chain_ptr
004625  aa   002313 1160 04   cmpq      1227,ic             007140 = 007777000001
004626  aa   000046 6000 04   tze       38,ic               004674

DBG(184277236)> CPU TRACE: 004624  aa  7 00055 2361 00      ldq       pr7|45              md.write_chain_ptr^M
DBG(184277236)> CPU REGDUMPAQI: A=267600000000 Q=007777000001 IR:~BAR ^M
DBG(184277238)> CPU TRACE: 004625  aa   002313 1160 04      cmpq      1227,ic             007140 = 007777000001^M
DBG(184277238)> CPU CORE: core_read  75073140 007777000001 (OPERAND_READ)^M
DBG(184277240)> CPU TRACE: 004626  aa   000046 6000 04      tze       38,ic               004674^M

                                                            STATEMENT 1 ON LINE 1025
          if ^md.eot_sent then do;

004674  aa  7 00102 2351 00   lda       pr7|66              md.eot_sent
004675  aa   001000 3150 03   cana      512,du
004676  aa   000055 6010 04   tnz       45,ic               004753

DBG(184277242)> CPU TRACE: 004674  aa  7 00102 2351 00      lda       pr7|66              md.eot_sent^M
DBG(184277242)> CPU REGDUMPAQI: A=267600000000 Q=007777000001 IR:~BAR Carry ^M
DBG(184277244)> CPU TRACE: 00165:004675 0 001000315003 (CANA 001000,DU) 001000 315(0) 0 0 0 03^M
DBG(184277246)> CPU TRACE: 004676  aa   000055 6010 04      tnz       45,ic               004753^M

                                                            STATEMENT 1 ON LINE 1039
          md.message_in_progress = "0"b;

004753  aa   002131 2350 04   lda       1113,ic             007104 = 775777777777
004754  aa  7 00102 3551 00   ansa      pr7|66              md.message_in_progress

DBG(184277248)> CPU TRACE: 004753  aa   002131 2350 04      lda       1113,ic             007104 = 775777777777^M
DBG(184277250)> CPU TRACE: 004754  aa  7 00102 3551 00      ansa      pr7|66              md.message_in_progress^M

                                                            STATEMENT 1 ON LINE 1040
          return;

004755  aa  6 00270 6101 00   rtcd      pr6|184

DBG(184277252)> CPU TRACE: 004755  aa  6 00270 6101 00      rtcd      pr6|184^M

                                                            STATEMENT 1 ON LINE 620
               return;

002743  aa  0 00631 7101 00   tra       pr0|409             return_mac
DBG(184277254)> CPU TRACE: 002743  aa  0 00631 7101 00      tra       pr0|409             return_mac^M

ENTRY TO control                                            STATEMENT 1 ON LINE 168
000364  aa   001220 6270 00   eax7      656
DBG(184376773)> CPU TRACE: 000364  aa   001220 6270 00      eax7      656^M
DBG(184376775)> CPU TRACE: 000365  aa  7 00034 3521 20      epp2      pr7|28,*^M
D000371  aa  6 00042 3735 20   epp7      pr6|34,*
DBG(184376777)> CPU TRACE: 000366  aa  2 01046 2721 00      tsp2      pr2|550             ext_entry_desc^M
DBG(184376835)> CPU TRACE: 000371  aa  6 00042 3735 20      epp7      pr6|34,*^M
DBG(184376837)> CPU TRACE: 000372  aa  7 00004 2361 20      ldq       pr7|4,*^M
DBG(184376839)> CPU TRACE: 000373  aa   000002 6040 04      tmi       2,ic                000375^M
DBG(184376841)> CPU TRACE: 000375  aa  0 00250 3761 00      anq       pr0|168             = 000077777777^M
DBG(184376843)> CPU TRACE: 000376  aa  6 00462 7561 00      stq       pr6|306^M
DBG(184376845)> CPU TRACE: 000377  aa  6 00032 3715 20      epp5      pr6|26,*^M
DBG(184376847)> CPU TRACE: 000400  aa  5 00012 3535 20      epp3      pr5|10,*^M
DBG(184376849)> CPU TRACE: 000401  aa  6 00176 2535 00      spri3     pr6|126^M

          mdp = arg_mdp;

000402  aa  6 00032 3735 20   epp7      pr6|26,*
000403  aa  7 00002 3715 20   epp5      pr7|2,*             arg_mdp
000404  aa  5 00000 3715 20   epp5      pr5|0,*             arg_mdp
000405  aa  6 00172 6515 00   spri5     pr6|122             mdp

DBG(184376851)> CPU TRACE: 000402  aa  6 00032 3735 20      epp7      pr6|26,*^M
DBG(184376853)> CPU TRACE: 000403  aa  7 00002 3715 20      epp5      pr7|2,*             arg_mdp^M
DBG(184376855)> CPU TRACE: 000404  aa  5 00000 3715 20      epp5      pr5|0,*             arg_mdp^M
DBG(184376857)> CPU TRACE: 000405  aa  6 00172 6515 00      spri5     pr6|122             mdp^M

                                                            STATEMENT 1 ON LINE 171
          subchan = arg_subchan;

000406  aa  7 00004 2361 20   ldq       pr7|4,*             arg_subchan
000407  aa  6 00127 7561 00   stq       pr6|87              subchan

DBG(184376859)> CPU TRACE: 000406  aa  7 00004 2361 20      ldq       pr7|4,*             arg_subchan^M
DBG(184376859)> CPU REGDUMPAQI: A=000014000010 Q=000000000001 IR:~BAR ^M
DBG(184376861)> CPU TRACE: 000407  aa  6 00127 7561 00      stq       pr6|87              subchan^M

                                                            STATEMENT 1 ON LINE 172
          mdep = addr (md.mde_entry (subchan));

000410  aa   000013 4020 07   mpy       11,dl
000411  aa  5 00070 3535 06   epp3      pr5|56,ql           md.mde_entry
000412  aa  6 00174 2535 00   spri3     pr6|124             mdep

DBG(184376863)> CPU TRACE: 000410  aa   000013 4020 07      mpy       11,dl^M
DBG(184376863)> CPU REGDUMPAQI: A=000000000000 Q=000000000013 IR:~BAR ^M
DBG(184376865)> CPU TRACE: 000411  aa  5 00070 3535 06      epp3      pr5|56,ql           md.mde_entry^M
DBG(184376867)> CPU TRACE: 000412  aa  6 00174 2535 00      spri3     pr6|124             mdep^M

                                                            STATEMENT 1 ON LINE 173
          order = arg_order;

000413  aa  7 00006 3515 20   epp1      pr7|6,*
000414  aa  6 00462 2351 00   lda       pr6|306
000415  aa  040 100 100 540   mlr       (pr,rl),(pr),fill(040)
000416  aa  1 00000 00 0005   desc9a    pr1|0,al            arg_order
000417  aa  6 00102 00 0040   desc9a    pr6|66,32           order

DBG(184376869)> CPU TRACE: 000413  aa  7 00006 3515 20      epp1      pr7|6,*^M
DBG(184376871)> CPU TRACE: 000414  aa  6 00462 2351 00      lda       pr6|306^M
DBG(184376871)> CPU REGDUMPAQI: A=000000000015 Q=000000000013 IR:~BAR ^M
DBG(184376873)> CPU TRACE: 000415  aa  040 100 100 540      mlr       (pr,rl),(pr),fill(040)^M

                                                            STATEMENT 1 ON LINE 174
          infop = arg_infop;

000420  aa  7 00010 3715 20   epp5      pr7|8,*             arg_infop
000421  aa  5 00000 3715 20   epp5      pr5|0,*             arg_infop
000422  aa  6 00112 6515 00   spri5     pr6|74              infop

DBG(184376875)> CPU TRACE: 000420  aa  7 00010 3715 20      epp5      pr7|8,*             arg_infop^M
DBG(184376877)> CPU TRACE: 000421  aa  5 00000 3715 20      epp5      pr5|0,*             arg_infop^M
DBG(184376879)> CPU TRACE: 000422  aa  6 00112 6515 00      spri5     pr6|74              infop^M

                                                            STATEMENT 1 ON LINE 175
          ttybp = addr (tty_buf$);

000423  la  4 00034 3535 20   epp3      pr4|28,*            tty_buf$
000424  aa  6 00150 2535 00   spri3     pr6|104             ttybp

DBG(184376881)> CPU TRACE: 000423  la  4 00034 3535 20      epp3      pr4|28,*            tty_buf$^M
DBG(184376883)> CPU TRACE: 000424  aa  6 00150 2535 00      spri3     pr6|104             ttybp^M

                                                            STATEMENT 1 ON LINE 177
          if order = "enter_receive" then do;

000425  aa  040 004 106 500   cmpc      (pr),(ic),fill(040)
000426  aa  6 00102 00 0040   desc9a    pr6|66,32           order
000427  aa   777572 00 0015   desc9a    -134,13             000217 = 145156164145
000430  aa   000013 6010 04   tnz       11,ic               000443
                                                            STATEMENT 1 ON 

DBG(184376885)> CPU TRACE: 00165:000425 0 040004106500 (CMPC PR0|40004) 040004 106(1) 0 0 0 00^M
DBG(184376887)> CPU TRACE: 000430  aa   000013 6010 04      tnz       11,ic               000443^M

                                                            STATEMENT 1 ON LINE 178
               if ^mde.raw3270_in_effect then do;

000431  aa  6 00174 3515 20   epp1      pr6|124,*           mdep
000432  aa  1 00012 2351 00   lda       pr1|10              mde.raw3270_in_effect
000433  aa   000020 3150 03   cana      16,du
000434  aa   000005 6010 04   tnz       5,ic                000441

DBG(184376889)> CPU TRACE: 000431  aa  6 00174 3515 20      epp1      pr6|124,*           mdep^M
DBG(184376891)> CPU TRACE: 000432  aa  1 00012 2351 00      lda       pr1|10              mde.raw3270_in_effect^M
DBG(184376893)> CPU TRACE: 000433  aa   000020 3150 03      cana      16,du^M
DBG(184376895)> CPU TRACE: 000434  aa   000005 6010 04      tnz       5,ic                000441^M

                                                            STATEMENT 1 ON LINE 179
                    mde.keyboard_restore = "1"b;

000435  aa   000400 2350 03   lda       256,du
000436  aa  1 00012 2551 00   orsa      pr1|10              mde.keyboard_restore

DBG(184376897)> CPU TRACE: 000435  aa   000400 2350 03      lda       256,du^M
DBG(184376899)> CPU TRACE: 000436  aa  1 00012 2551 00      orsa      pr1|10              mde.keyboard_restore^M

                                                            STATEMENT 1 ON LINE 180
                    call queue_control;

000437  aa   005610 6700 04   tsp4      2952,ic             006247
DBG(184376901)> CPU TRACE: 000437  aa   005610 6700 04      tsp4      2952,ic             006247^M

ENTRY TO queue_control                                      STATEMENT 1 ON LINE 1344
DBG(184376903)> CPU TRACE: 006247  aa  6 00400 6501 00      spri4     pr6|256^M

          if mde.control_queued then return;

006250  aa  6 00174 3735 20   epp7      pr6|124,*           mdep
006251  aa  7 00012 2351 00   lda       pr7|10              mde.control_queued
006252  aa   002000 3150 03   cana      1024,du
006253  aa   000002 6000 04   tze       2,ic                006255
006254  aa  6 00400 6101 00   rtcd      pr6|256

DBG(184376905)> CPU TRACE: 006250  aa  6 00174 3735 20      epp7      pr6|124,*           mdep^M
DBG(184376907)> CPU TRACE: 006251  aa  7 00012 2351 00      lda       pr7|10              mde.control_queued^M
DBG(184376909)> CPU TRACE: 006252  aa   002000 3150 03      cana      1024,du^M
DBG(184376911)> CPU TRACE: 00165:006253 0 000002600004 (TZE 000002,IC) 000002 600(0) 0 0 0 04^M
DBG(184376913)> CPU TRACE: 006254  aa  6 00400 6101 00      rtcd      pr6|256^M

                                                            STATEMENT 1 ON LINE 181
                    call process_write;

000440  aa   004066 6700 04   tsp4      2102,ic             004526

DBG(184376915)> CPU TRACE: 000440  aa   004066 6700 04      tsp4      2102,ic             004526^M

ENTRY TO process_write                                      STATEMENT 1 ON LINE 970
004526  aa  6 00262 6501 00   spri4     pr6|178

                                                            STATEMENT 1 ON LINE 972
          mdep = null ();

004527  aa   773435 2370 04   ldaq      -2275,ic            000164 = 077777000043 000001000000
004530  aa  6 00174 7571 00   staq      pr6|124             mdep

DBG(184376919)> CPU TRACE: 004527  aa   773435 2370 04      ldaq      -2275,ic            000164 = 077777000043 000001000000^M
DBG(184376921)> CPU TRACE: 004530  aa  6 00174 7571 00      staq      pr6|124             mdep^M

                                                            STATEMENT 1 ON LINE 973
          if md.output_in_progress then return;

004531  aa  6 00172 3735 20   epp7      pr6|122,*           mdp
004532  aa  7 00102 2351 00   lda       pr7|66              md.output_in_progress
004533  aa   004000 3150 03   cana      2048,du
004534  aa   000002 6000 04   tze       2,ic                004536
004535  aa  6 00262 6101 00   rtcd      pr6|178

DBG(184376923)> CPU TRACE: 004531  aa  6 00172 3735 20      epp7      pr6|122,*           mdp^M
DBG(184376925)> CPU TRACE: 004532  aa  7 00102 2351 00      lda       pr7|66              md.output_in_progress^M
DBG(184376927)> CPU TRACE: 004533  aa   004000 3150 03      cana      2048,du^M
DBG(184376929)> CPU TRACE: 004534  aa   000002 6000 04      tze       2,ic                004536^M
DBG(184376931)> CPU TRACE: 004535  aa  6 00262 6101 00      rtcd      pr6|178^M

                                                            STATEMENT 1 ON LINE 183
               code = 0;

000441  aa  6 00101 4501 00   stz       pr6|65              code

DBG(184376933)> CPU TRACE: 000441  aa  6 00101 4501 00      stz       pr6|65              code^M

                                                            STATEMENT 1 ON LINE 184
          end;

000442  aa   000135 7100 04   tra       93,ic               000577
DBG(184376935)> CPU TRACE: 000442  aa   000135 7100 04      tra       93,ic               000577^M

                                                            STATEMENT 1 ON LINE 212
          arg_code = code;

000577  aa  6 00101 2361 00   ldq       pr6|65              code
000600  aa  6 00176 7561 20   stq       pr6|126,*           arg_code

DBG(184376937)> CPU TRACE: 000577  aa  6 00101 2361 00      ldq       pr6|65              code^M
DBG(184376939)> CPU TRACE: 000600  aa  6 00176 7561 20      stq       pr6|126,*           arg_code^M

                                                            STATEMENT 1 ON LINE 213
          return;

000601  aa  0 00631 7101 00   tra       pr0|409             return_mac

DBG(184376941)> CPU TRACE: 000601  aa  0 00631 7101 00      tra       pr0|409             return_mac^M
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License