CAC 2015-09-27

Chasing config_deck_data_

>user_dir_dir>SysEng>Anthony>fromSource>work>tmp>config_deck_data_:  (segment 1)
11/11/89  1029.6 pdt Sat    cds

>user_dir_dir>SysEng>Anthony>fromSource>work>config_deck_data_:  (segment 2)
09/26/93  1354.8 pdt Sun    cds

Lengths of the symb section of the 2 segments do not agree.
>user_dir_dir>SysEng>Anthony>fromSource>work>tmp>config_deck_data_ : 217
>user_dir_dir>SysEng>Anthony>fromSource>work>config_deck_data_ : 220
The discrepancy is trivial

**Text discrepancies between the 2 segments have been found.

>user_dir_dir>SysEng>Anthony>fromSource>work>tmp>config_deck_data_:
002614  aa     000003400043
Changed to:
>user_dir_dir>SysEng>Anthony>fromSource>work>config_deck_data_:
002614  aa     000002400043
ds config_deck_data_ -ascii

002410 000000000000 000000000007 055163165142 163171163000 ........-subsys.
002414 000000000000 000000000006 055156143150 141156000000 ........-nchan..
002420 000000000000 000000000006 055144162151 166145000000 ........-drive..
002424 000000000000 000000000007 055156165155 142145162000 ........-number.
002430 000000000000 000000000006 055144162151 166145000000 ........-drive..
002434 000000000000 000000000007 055156165155 142145162000 ........-number.
002440 000000000000 000000000006 055144162151 166145000000 ........-drive..
002444 000000000000 000000000007 055156165155 142145162000 ........-number.
002450 000000000000 000000000006 055144162151 166145000000 ........-drive..
002454 000000000000 000000000007 055156165155 142145162000 ........-number.
002460 000000000000 000000000006 055144162151 166145000000 ........-drive..
002464 000000000000 000000000007 055156165155 142145162000 ........-number.
002470 000000000000 000000000006 055144162151 166145000000 ........-drive..
002474 000000000000 000000000007 055156165155 142145162000 ........-number.
002500 000000000000 000000000000 000000000000 000000000000 ................
======
002570 000000000000 440404040040 000000045004 000044700000 ......  ..%..$..
002574 022000000004 500000002200 000002040404 040000000000 .......... . ...
002600 524000000220 000000110000 000044024000 022000000011 ......H..$......
002604 000000004400 000002200000 001252525252 000000000000 ................
002610 000000000000 000000000000 000000000010 000000000000 ................
002614 000002400043 000000000003 000000000000 000000000000 ...#............               <<<<==== HERE
002620 000000000000 000000000000 000000000000 000000000000 ................
002624 000000000003 000000000000 000000000000 000000000000 ................
002630 000000000002 000000000000 000000000000 000000000000 ................
002634 000000000000 000000000002 000000000002 000000000000 ................
002640 000000000000 000000000000 000000000000 000000000000 ................
002644 000000000002 000000000000 000000000004 000000000002 ................
002650 000000000005 000000000005 000000000004 000000000004 ................
002654 000000000003 000000000005 000000000000 000000000003 ................
002660 000000000004 000000000006 000000000006 000000000005 ................
002664 000000000004 000000000004 000000000006 000000000002 ................
002670 000000000000 000000000004 000000000004 000000000002 ................
002674 000000000002 000000000002 000000000000 143150156154 ............chnl
002700 143154157153 143160165040 160162160150 151160143040 clokcpu prphipc
002704 151157155040 155145155040 155160143040 160141162155 iom mem mpc parm
002710 160141162164 160162160150 160162160150 160162160150 partprphprphprph
002714 160162160150 160162160150 160162160150 160162160150 prphprphprphprph
002720 162157157164 163141154166 163143150144 163163164040 rootsalvschdsst
002724 164142154163 164143144040 165144163153 125123105122 tblstcd udskUSER

from config_deck_cards_.incl.pl1

  2    66 "udsk  emp minimum 2 -subsys STRING -nchan OCTAL repeat 6 -drive OCTAL -number OCTAL",
  2    67 "USER  emp");

This gets 'compiled' in at 002410

This is the spot it gets written by create_data_segment.

WATCH [142354828] write  00420:002275 66657770 000002400043 (Write)

DBG(134446012)> CPU TRACE: 00314:050323 bound_library_wired_:any_to_any_+02751
DBG(134446012)> CPU TRACE:     002751  aa  5 00004 7421 00   2765     stx2      work|fix_bin_generic          " save precision
DBG(134446012)> CPU TRACE: 00314:050323 4 500004742100 (STX2 PR5|4) 500004 742(0) 1 0 0 00
DBG(134446012)> CPU APPENDING: Read (Actual) Read:  iefpFinalAddress=66657002  readData=000002400043
DBG(134446012)> CPU APPENDING: Write(Actual) Write: iefpFinalAddress=66657002 writeData=000002400043

                                  2751  "     Char to bit conversion is simple.  We simply determine if varying or
                                  2752  "     simple target, and copy sufficient bits to fill the target.  Return
                                  2753  "     is directly to user since we cannot be complex.  For a varying string
                                  2754  "     we only copy up to the length of the source, for a non-varying string,
                                  2755  "     we fill "0" beyond the length of the source.  We receive generic pointing
                                  2756  "     to the character string, X3 as the length.  We leave generic as base of
                                  2757  "     bit string and X3 as length.  We use fix_bin_generic as the working
                                  2758  "     target length, permitting correct varying target conversion.
                                  2759
    002746                        2760  char_to_bit:
    002746                        2761  char.bit.restart:                                 " enter and restart
    002746  aa  5 00001 7231 00   2762            lxl3      work|source_precision

DBG(134446006)> CPU TRACE:     002746  aa  5 00001 7231 00   2762     lxl3      work|source_precision
DBG(134446006)> CPU TRACE: 00314:050320 4 500001723100 (LXL3 PR5|1) 500001 723(0) 1 0 0 00
DBG(134446006)> CPU APPENDING: Read (Actual) Read:  iefpFinalAddress=66656777  readData=000000000002

    002747  aa  5 00000 7221 00   2763            lxl2      work|target_precision

DBG(134446008)> CPU TRACE:     002747  aa  5 00000 7221 00   2763     lxl2      work|target_precision
DBG(134446008)> CPU TRACE: 00314:050321 4 500000722100 (LXL2 PR5|0) 500000 722(0) 1 0 0 00
DBG(134446008)> CPU APPENDING: Read (Actual) Read:  iefpFinalAddress=66656776  readData=000000000002

    002750  aa   000000 2240 03   2764            ldx4      0,du                          " save length of target
    002751  aa  5 00004 7421 00   2765            stx2      work|fix_bin_generic          " save precision

DBG(134446012)> CPU TRACE:     002751  aa  5 00004 7421 00   2765     stx2      work|fix_bin_generic          " save precision
DBG(134446012)> CPU TRACE: 00314:050323 4 500004742100 (STX2 PR5|4) 500004 742(0) 1 0 0 00
DBG(134446012)> CPU APPENDING: Read (Actual) Read:  iefpFinalAddress=66657002  readData=000002400043
DBG(134446012)> CPU APPENDING: Write(Actual) Write: iefpFinalAddress=66657002 writeData=000002400043

So, X2 is 2, s.b. 3.
lxl2      work|target_precision

Track target_precision back...

DBG(134445970)> CPU TRACE:     000007  aa  5 00000 7571 00    395  xfer:        staq      work|scales                   " Scales in DU, precision DL
DBG(134445970)> CPU TRACE: 00314:045361 4 500000757100 (STAQ PR5|0) 500000 757(0) 1 0 0 00
DBG(134445970)> CPU APPENDING: Write(Actual) Write: iefpFinalAddress=66656776 writeData=000000000002
DBG(134445970)> CPU APPENDING: Write(Actual) Write: iefpFinalAddress=66656777 writeData=000000000002

                                   390  "     Dispatch
                                   391
                                   392  "     Scales and precision share the same word.  Scales are upper (ldxN).
                                   393  "     Precision is lower (lxlN).
                                   394
    000007  aa  5 00000 7571 00    395  xfer:     staq      work|scales                   " Scales in DU, precision DL
DBG(134445970)> CPU APPENDING: Write(Actual) Write: iefpFinalAddress=66656776 writeData=000000000002
DBG(134445970)> CPU APPENDING: Write(Actual) Write: iefpFinalAddress=66656777 writeData=000000000002

    000010  aa   000256 1070 03    396            cmpx7     source_map_size,du            " See if source convertable
    000011  0a   006273 6030 00    397            trc       error_bad_type
    000012  aa   000256 1060 03    398            cmpx6     target_map_size,du            " See if target convertable
    000013  0a   006273 6030 00    399            trc       error_bad_type

From

    000000                         373  any_to_any_truncate_:
    000000                         374  real_to_real_truncate_:
    000000  aa   000000 6250 00    375            eax5      0                             " no rounding
    000001  0a   000007 7100 00    376            tra       xfer

Here's the pl1 compiler calling:

DBG(134445962)> CPU TRACE: 00400:036540 bound_bootload_0:Length+04734
DBG(134445962)> CPU TRACE: 00400:036540 4 001257700100 (TSX0 PR0|1257) 001257 700(0) 1 0 0 00
DBG(134445962)> CPU APPENDING: Read (Actual) Read:  iefpFinalAddress=77451215  readData=045352710000
WATCH [134446012] read   00314:050323 00234:017002 66657002 000002400043 (Read)
    002751  aa  5 00004 7421 00   2765            stx2      work|fix_bin_generic          " save precision

dcn >sss>bound_pl1_ 036540
 36540    initialize_int_static|2152

                                                            STATEMENT 1 ON LINE 514
(stringsize):
                    bit_target.image = bit (substr (v -> token.string, 1, insize));

002146  aa  0 00552 7001 00   tsx0      pr0|362             alloc_bit_temp
002147  aa  6 00414 2521 00   spri2     pr6|268
002150  aa  5 00004 3535 00   epp3      pr5|4               token.string
002151  aa   000052 7270 07   lxl7      42,dl
002152  aa  2 00000 3515 00   epp1      pr2|0
002153  aa  6 00112 2351 00   lda       pr6|74              insize

DBG(134445956)> CPU TRACE: 00400:036535 bound_bootload_0:Length+04731
DBG(134445956)> CPU TRACE: 00400:036535 4 600112235100 (LDA PR6|112) 600112 235(0) 1 0 0 00
DBG(134445956)> CPU APPENDING: Read (Actual) Read:  iefpFinalAddress=66656452  readData=000000000002
DBG(134445956)> CPU REGDUMPAQI: A=000000000002 Q=000000000002 IR:~BAR

002154  aa   000046 7260 07   lxl6      38,dl
002155  aa  6 00436 3715 00   epp5      pr6|286
002156  aa  0 01257 7001 00   tsx0      pr0|687             any_to_any_truncate_

      512                else if v -> token.type = bit_string then do;
      513                     insize = v -> token.size - 1;           /* used below if varying */
      514 (stringsize):
      515                     bit_target.image = bit (substr (v -> token.string, 1, insize));
      516                end;

                                                            STATEMENT 1 ON LINE 513
                    insize = v -> token.size - 1;

002142  aa  6 00100 3715 20   epp5      pr6|64,*            v
002143  aa  5 00003 2361 00   ldq       pr5|3               token.size

DBG(134445890)> CPU TRACE: 00400:036525 4 500003236100 (LDQ PR5|3) 500003 236(0) 1 0 0 00
DBG(134445890)> CPU APPENDING: Read (Actual) Read:  iefpFinalAddress=66207325  readData=000000000003

002144  aa   000001 1760 07   sbq       1,dl
002145  aa  6 00112 7561 00   stq       pr6|74              insize

I think the problem is here:

dcl Card_data_bit_strings (4) bit (2) static options (constant) init
          ("01"b, "11"b, "00"b, "10"b);

002614  aa     000003400043
Changed to:
002614  aa     000002400043

011 10010
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License