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
page revision: 1, last edited: 14 Dec 2017 03:34