CAC 2017-12-17

watching buffer addresses in RTX

cwd >site
cd cac
cwd cac

lf  ibm3270_mpx.pl1

<edit>

cpa  >ldd>sl1>s>ibm3270_mpx.pl1 ibm3270_mpx.pl1

Inserted in B:
B54       dcl abs_textp fixed bin (26);
Preceding:
A54       dcl  textl fixed bin;

Inserted in B:
B149      dcl    absadr          entry (ptr, fixed bin (35)) returns (fixed bin
\c (26));
Preceding:
A148
A149      /* External */

Inserted in B:
B323                          abs_textp = absadr (textp, code);
B324                          call syserr (ANNOUNCE, "textp ^o", abs_textp);
Preceding:
A321                          textl = buffer.tally;

Comparison finished: 3 differences, 4 lines.

pl1 -ot ibm3270_mpx

lf dn355.pl1                
qedx
r dn355.pl1
981
a
                    call syserr (0, "input_sub_mbx.dcw ^o", input_sub_mbx.dcw (k).abs_addr);
\f
w
q

cpa >ldd>sl1>s>bound_355_wired.s.archive::dn355.pl1 dn355.pl1

Inserted in B:
B982                          call syserr (0, "input_sub_mbx.dcw ^o", input_sub
\c_mbx.dcw (k).abs_addr);
Preceding:
A982                          prev_blockp = blockp;

Comparison finished: 1 difference, 1 line.

pl1 dn355.pl1 -ot

cp >ldd>system_library_1>object>bound_355_wired.archive

ac ud bound_355_wired dn355
bind bound_355_wired

qedx
i

>ldd>hardcore>execution
\f
w hardcore.search
q

sa >sc1>rcp>tapa_**.acs rw Repair.SysAdmin

gm >ldd>sl1>info>hardcore cac  -dr
M-> x auth tapa_01 ***

shutdown and boot the new tape:

Hangs after 
bootload_0: Booting system hardcore generated 12/18/17 0757.1 pst Mon.  

Try again, generating boot tape with no changes. (Remove blank line from hardcore.search)
No go.

Missing fw?

Mounting tape cac for writing
Mounted Multics volume "cac" (recorded at 800 BPI), on device tapa_01
begin generation
generate_mst: Entry not found. Missing segment.
Last segment name encountered in header was fw.mtp610.m610
current line is
data:     fw.mtp610.m610, fwid.t610;
data:     fw.mtc500.m500, fwid.t500;
data:               fw.dsc500.d500;
data:               fw.msp800.msp8;
data:               fw.mtc500.m500;
data:               fw.mtp610.m610;
data:               fw.urcmpc.ucmn;

add >library_dir_dir>firmware> to search

qedx
r hardcore.search
p
>ldd>hardcore>execution
i

>library_dir_dir>firmware
\f
w
q

gm >ldd>sl1>info>hardcore cac  -dr
compare_mst 12.6eMULTICS cac
Mounting tape 12.6eMULTICS for reading
Mounted Multics volume "12.6eMULTICS" (recorded at 800 BPI), on device tapa_02
Mounting tape cac for reading
Mounted Multics volume "cac" (recorded at 800 BPI), on device tapa_01

Begin comparison.
System MR12.6e to hardcore

Segment bound_bootload_0 contains differences from word 12737.
          last difference found at word 12757.

Segment active_all_rings_data contains differences from word 0.
          last difference found at word 11.

Segment bound_355_wired:
          Bit count has changed from 800712 to 801792.
          Segment length has changed from 53342 to 53400.

Segment bound_355_wired.link contains differences from word 1.
          last difference found at word 1.

Segment bound_355_wired.defs contains differences from word 30.
          last difference found at word 3207.

Segment ibm3270_mpx:
          Bit count has changed from 132840 to 134136.
          Segment length has changed from 7152 to 7216.

Segment ibm3270_mpx.link:
          Bit count has changed from 1584 to 1656.
          Segment length has changed from 54 to 56.

Segment ibm3270_mpx.defs:
          Bit count has changed from 7056 to 7236.
          Segment length has changed from 304 to 311.
End of comparison.

shutdown and reboot

Mucked up ibm3270_mpx.pl1; trying again:

cpa  >ldd>sl1>s>ibm3270_mpx.pl1 ibm3270_mpx.pl1

Inserted in B:
B54       dcl abs_textp fixed bin (26);
Preceding:
A54       dcl  textl fixed bin;

Inserted in B:
B149      dcl    absadr          entry (ptr, fixed bin (35)) returns (fixed bin
\c (26));
Preceding:
A148
A149      /* External */

Inserted in B:
B643                          abs_textp = absadr (textp, code);
B644                          call syserr (ANNOUNCE, "textp ^o", abs_textp);
Preceding:
A641                textl = buffer.tally;                             /* Set up
\c to look at start */

Comparison finished: 3 differences, 4 lines.

pl1 -ot ibm3270_mpx
gm >ldd>sl1>info>hardcore cac  -dr

shutdown and reboot....

0956.6  input_sub_mbx.dcw 202257
n_buffers 1
long  in; tally0 144 addr0 00202257
long  in; tally1 724 addr1 00713e0c
00202257:002100100175
00202260:303370324244
00202261:223243211203
00202262:242100210201
00202263:231204203226
00202264:231205172100
00202265:311225242243
00202266:201223223201
00202267:243211226225
00202270:100201225204
00202271:100223226203
00202272:201243211226
00202273:225100115303
00202274:210201225225
00202275:205223100201
00202276:113210360361
00202277:362113204360
00202300:360135323226
00202301:201204100176
00202302:100365113360
00202303:100226244243
00202304:100226206100
00202305:371360113360
00202306:100244225211
00202307:243242172100
00202310:244242205231
00202311:242100176100
00202312:365153100361
00202313:362141361370
00202314:141361367100
00202315:100360371365
00202316:366113364100
00202317:227242243100
00202320:324226225223
00202321:100331205227
00202322:201211231003
0956.6  textp 1004257
0956.6  ibm3270_mpx: Unrecognized input for a.h012: 000 000 000 000 000 000 000 000

watch process_input_in_mbx

cpa >ldd>sl1>s>bound_355_wired.s.archive::dn355.pl1 dn355.pl1

Inserted in B:
B982                          call syserr (0, "input_sub_mbx.dcw ^o", input_sub
\c_mbx.dcw (k).abs_addr);
Preceding:
A982                          prev_blockp = blockp;

Inserted in B:
B1042     dcl  code fixed bin (35);
B1043     dcl abs_source_ptr, abs_target_ptr fixed bin (26);
B1044     dcl    absadr          entry (ptr, fixed bin (35)) returns (fixed bin
\c (26));
Preceding:
A1041
A1042     /* we will copy input directly from mailbox into one buffer (if possi
\cble) */

Inserted in B:
B1050               call syserr (0, "process_input_in_mbx: numchars ^d break_ch
\car ^d", numchars, rtx_info.break_char);
Preceding:
A1046               call check_ff ("1"b);

Inserted in B:
B1055                    call syserr (0, "n_words ^d", n_words);
Preceding:
A1050                    if enough_input_space (n_words)

Inserted in B:
B1067                    abs_source_ptr = absadr (source_ptr, code);
B1068                    abs_target_ptr = absadr (target_ptr, code);
B1069                    call syserr (0, "source_ptr ^o target_ptr ^o", abs_sou
\crce_ptr, abs_target_ptr);
Preceding:
A1061                         buffer.tally = numchars;

Comparison finished: 5 differences, 9 lines.

process_input_in_mbx:
     entry;
dcl  code fixed bin (35);
dcl abs_source_ptr, abs_target_ptr fixed bin (26);
dcl    absadr          entry (ptr, fixed bin (35)) returns (fixed bin (26));

/* we will copy input directly from mailbox into one buffer (if possible) */

          numchars = fnp_sub_mbx.n_chars;
          rtx_info.break_char = substr (fnp_sub_mbx.command_data, 18, 1);
          call syserr (0, "process_input_in_mbx: numchars ^d break_char ^d", numchars, rtx_info.break_char);
          call check_ff ("1"b);
          if numchars > 0
          then do;
               n_words = divide (numchars + 3, 4, 17, 0);
               call syserr (0, "n_words ^d", n_words);
               if enough_input_space (n_words)
               then do;
                    buf_size = 16 * (divide (n_words + 17, 16, 17, 0));
                                                            /* get next multiple of 16 words */
                    call tty_space_man$get_buffer (devx, buf_size, INPUT, blockp);
                    if blockp = null
                    then go to not_enough_space;

                    source_ptr = addr (fnp_sub_mbx.input_data);
                    target_ptr = addr (buffer.chars);
                    target_ptr -> chars = source_ptr -> chars;
               abs_source_ptr = absadr (source_ptr, code);
               abs_target_ptr = absadr (target_ptr, code);
               call syserr (0, "source_ptr ^o target_ptr ^o", abs_source_ptr, abs_target_ptr);
                    buffer.tally = numchars;

pl1 dn355.pl1 -ot
ac ud bound_355_wired dn355
bind bound_355_wired
gm >ldd>sl1>info>hardcore cac  -dr
Shutdown and reboot

 1740  as   sc_signal_handler_: error: linkage_error
 1740  as   as_dump_: Answering service dump created in segment asdump.-.12/18/17-1740
     1039 process_input_in_mbx:
     1040      entry;
     1041
     1042 /* we will copy input directly from mailbox into one buffer (if possible) */
     1043
     1044           numchars = fnp_sub_mbx.n_chars;
     1045           rtx_info.break_char = substr (fnp_sub_mbx.command_data, 18, 1);
     1046           call check_ff ("1"b);
     1047           if numchars > 0
     1048           then do;
     1049                n_words = divide (numchars + 3, 4, 17, 0);
     1050                if enough_input_space (n_words)
     1051                then do;
     1052                     buf_size = 16 * (divide (n_words + 17, 16, 17, 0));
     1053                                                             /* get next multiple of 16 words */
     1054                     call tty_space_man$get_buffer (devx, buf_size, INPUT, blockp);
     1055                     if blockp = null
     1056                     then go to not_enough_space;
     1057
     1058                     source_ptr = addr (fnp_sub_mbx.input_data);
     1059                     target_ptr = addr (buffer.chars);
     1060                     target_ptr -> chars = source_ptr -> chars;

          numchars = fnp_sub_mbx.n_chars;

005341  aa  6 00242 3735 20   epp7      pr6|162,*           subp
005342  aa  7 00001 2351 00   lda       pr7|1               fnp_sub_mbx.n_chars
005343  aa   000011 7350 00   als       9
005344  aa   000077 7730 00   lrl       63
005345  aa  6 00130 7561 00   stq       pr6|88              numchars

DBG(195579238)> CPU TRACE: 00122:005345 0 600130756100 (STQ PR6|130) 000130 756(0) 0 0 0 00^M
DBG(195579238)> CPU REGDUMPAQI: A=000000000000 Q=000000000066 IR:~BAR ^M
process_input_in_mbx:
                                                            STATEMENT 1 ON LINE 1044
          numchars = fnp_sub_mbx.n_chars;

005341  aa  6 00242 3735 20   epp7      pr6|162,*           subp

$ grep 00122:005345 trace.log | wc -l
14

7 Hits.

process_int:
ENTRY TO process_int                                        STATEMENT 1 ON LINE 336  
process_int:
     proc (a_level);

002007  aa  6 00330 6501 00   spri4     pr6|216

$ grep 00122:002007 trace.log | wc -l
192

96 hits

/* level must be 3, a normal everyday 355 interrupt */

          if fnp_info.bootloading                           /* if this is bootload status */
002364  aa  6 00240 3715 20   epp5      pr6|160,*           fnpp
$ grep 00122:002364 trace.log | wc -l
192

96 hits

425          no_response = "0"b;                               /* initially */
                                                            STATEMENT 1 ON LINE 425
          no_response = "0"b;

002416  aa  6 00140 4501 00   stz       pr6|96              no_response

$ grep 00122:002416 trace.log | wc -l
186

93 hits

          do i = 8 to 11;                                   /* now look at FNP-initiated mailboxes */
               if timwb (i) & ^no_response
               then do;
                    subp = addr (datanet_mbx.fnp_sub_mbxes (i - 8));

                                                            STATEMENT 1 ON LINE 511
                    subp = addr (datanet_mbx.fnp_sub_mbxes (i - 8));

002733  aa   000034 4020 07   mpy       28,dl

$ grep 00122:002733 trace.log | wc -l
52

26 hits

                         if (sub_mbx.op_code = accept_direct_input) | (sub_mbx.op_code = send_output)
                              | (sub_mbx.op_code = input_in_mailbox)
                         then do;
                              fnp_info.bleft_355 = fnp_sub_mbx.n_free_buffers - 4;
                                                            /* get the buffer count from 355 */

                                                            STATEMENT 1 ON LINE 520
                              fnp_info.bleft_355 = fnp_sub_mbx.n_free_buffers - 4;

002766  aa  7 00000 2351 00   lda       pr7|0               fnp_sub_mbx.n_free_buffers  

                                                            STATEMENT 1 ON LINE 542
                         if sub_mbx.op_code = accept_new_terminal
                         then do;

003030  aa  6 00667 2361 00   ldq       pr6|439             sub_mbx.op_code

$ grep 00122:003030 trace.log | grep -v ReadTraOp | wc -l
50

25 hits

[One was not an rcd.]

                                                            STATEMENT 1 ON LINE 546
                              pcb.line_type, dialup_info.line_type = bin (sub_mbx.command_data (1), 17); 

003033  aa  7 00002 2351 00   lda       pr7|2               sub_mbx.command_data

$ grep 00122:003033 trace.log | grep -v ReadTraOp | wc -l
2

1 was an accept_new_terminal

                         else if sub_mbx.op_code = disconnected_line
                         then do;                           /* see if line just hung up */
                              pcb.dialed = "0"b;
                                                            STATEMENT 1 ON LINE 590
                              pcb.dialed = "0"b;

003221  aa   004131 2350 04   lda       2137,ic             007352 = 577777777777
003222  aa  6 00270 3535 20   epp3      pr6|184,*           pcbp
003223  aa  3 00004 3551 00   ansa      pr3|4               pcb.dialed

$ grep 00122:003221 trace.log | grep -v ReadTraOp | wc -l
0

                                                            STATEMENT 1 ON LINE 597
                         else if sub_mbx.op_code = wru_timeout
                         then do;

003245  aa   000114 1160 07   cmpq      76,dl
003246  aa   000025 6010 04   tnz       21,ic               003273
                                                            STATEMENT 1 ON LINE 599
                              if pcb.dialed
                              then call channel_manager$interrupt (devx, WRU_TIMEOUT, ""b);
003247  aa  6 00270 3535 20   epp3      pr6|184,*           pcbp

$ grep 00122:003247 trace.log | grep -v ReadTraOp | wc -l
0

                         else if sub_mbx.op_code = break_condition
                         then do;

003273  aa   000113 1160 07   cmpq      75,dl
003274  aa   000031 6010 04   tnz       25,ic               003325
                                                            STATEMENT 1 ON LINE 607
                              if pcb.dialed
                              then do;

003275  aa  6 00270 3535 20   epp3      pr6|184,*           pcbp

$ grep 00122:003275 trace.log | grep -v ReadTraOp | wc -l
0

                                                            STATEMENT 1 ON LINE 617
                         else if sub_mbx.op_code = send_output
                         then do;

003325  aa   000105 1160 07   cmpq      69,dl
003326  aa   000016 6010 04   tnz       14,ic               003344
                                                            STATEMENT 1 ON LINE 620
                              call free_mbx (i);

003327  aa   004025 3520 04   epp2      2069,ic             007354 = 000002000000

$ grep 00122:003327 trace.log | grep -v ReadTraOp | wc -l
16

8 send_outputs

                         else if sub_mbx.op_code = accept_direct_input
                         then do;

003344  aa   000112 1160 07   cmpq      74,dl
003345  aa   000016 6010 04   tnz       14,ic               003363
                                                            STATEMENT 1 ON LINE 630
                              if pcb.dialed
                              then call process_accept_input;

003346  aa  6 00270 3535 20   epp3      pr6|184,*           pcbp

$ grep 00122:003346 trace.log | grep -v ReadTraOp | wc -l
2

1 accept_direct_input

                                                            STATEMENT 1 ON LINE 726
                    else if sub_mbx.io_cmd = rtx
                    then call process_rtx;

004003  aa   000002 1160 07   cmpq      2,dl
004004  aa   000003 6010 04   tnz       3,ic                004007
004005  aa   001177 6700 04   tsp4      639,ic              005204
004006  aa   000046 7100 04   tra       38,ic               004054

$ grep 00122:004005 trace.log | grep -v ReadTraOp | wc -l
2

One RTX

          real_word_cnt = input_sub_mbx.n_chars;

005212  aa  6 00242 3715 20   epp5      pr6|162,*           subp
005213  aa  5 00001 2351 00   lda       pr5|1               input_sub_mbx.n_chars
005214  aa   000066 7330 00   lrs       54
005215  aa  6 00410 7561 00   stq       pr6|264             real_word_cnt

DBG(200616234)> CPU REGDUMPAQI: A=000000000000 Q=000000000217 IR:~BAR ^M

0217 = 143. 

                                                            STATEMENT 1 ON LINE 1028
               call channel_manager$interrupt (devx, ACCEPT_INPUT, interrupt_info);

005273  aa  6 00134 3521 00   epp2      pr6|92              devx

I hit.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License