<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Good morning Jörg (morning in California at least),<br>
    </p>
    <p>The context is really helpful for me. Having missed the original
      Oberon/Oberon Systems boat back when I was a college student I've
      been busy playing catch up. I have struggled with SYSTEM and its
      appropriate application. I am focusing on understanding it better.
      With regular modules is I can go read the source to understand how
      they work but SYSTEM is different. Slowly wrapping my head around
      that. <br>
    </p>
    <p>I really like your revised DisplayIEEE754 example. SET feels so
      correct and is your version is more readable. I've come to
      appreciate languages that were at least in part designed to be
      read. I guess that is the perhaps one of the important legacies of
      ALGO.</p>
    <p>On to reading Input and Kernel.<br>
    </p>
    All the best,
    <p>Robert<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 6/5/21 3:47 AM, Joerg wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:1A13B474-73BA-4502-94D3-96FB8B887569@iaeth.ch">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      Robert
      <div><br>
      </div>
      <div>Of course you can use SYSTEM.BIT the way you used it.
        However, SYSTEM.BIT is typically used to check HW registers like
        <div>- was a key pressed on the keyboard or</div>
        <div>- did we receive a frame from network or</div>
        <div>- is the bus ready to send data</div>
        <div>- etc</div>
        <div><br>
          <div dir="ltr">Look at Input.Peek or Kernel.SPI</div>
          <div dir="ltr"><br>
          </div>
          <div dir="ltr">br<br>
            <div>Jörg</div>
          </div>
          <div dir="ltr"><br>
            <blockquote type="cite">Am 05.06.2021 um 08:40 schrieb Jörg
              <a class="moz-txt-link-rfc2396E" href="mailto:joerg.straube@iaeth.ch"><joerg.straube@iaeth.ch></a>:<br>
              <br>
            </blockquote>
          </div>
          <blockquote type="cite">
            <div dir="ltr">
              <meta http-equiv="content-type" content="text/html;
                charset=UTF-8">
              Robert
              <div><br>
              </div>
              <div>In Oberon-7 your procedure could look as follows</div>
              <div><br>
              </div>
              <div>PROCEDURE DisplayIEEE754(x: REAL);</div>
              <div>  VAR s: SET;</div>
              <div>  PROCEDURE Bits(str: ARRAY OF CHAR; s: SET; left,
                right: INTEGER);</div>
              <div>    BEGIN</div>
              <div>      Out.String(str);</div>
              <div>      FOR i := left TO right BY -1 DO</div>
              <div>        IF i IN s THEN Out.Char(“1“) ELSE
                Out.Char(“0“) END</div>
              <div>      END</div>
              <div>    END Bits;</div>
              <div>  BEGIN</div>
              <div>    s := SYSTEM.VAL(SET, x);</div>
              <div>    Out.String(“sign is “); IF 31 IN s THEN
                Out.Ch(“-“) ELSE Out.Ch(“+“) END;</div>
              <div>    Bits(“, expo (binary): “, s, 30, 23)</div>
              <div>    Bits(“ frac (binary): “, s, 22, 0);</div>
              <div>    Out.Ln</div>
              <div>  END DisplayIEEE754;</div>
              <div><br>
                <div dir="ltr">Gruss, Jörg</div>
                <div dir="ltr"><br>
                  <blockquote type="cite">Am 05.06.2021 um 01:10 schrieb
                    R. S. Doiel <a class="moz-txt-link-rfc2396E" href="mailto:rsdoiel@gmail.com"><rsdoiel@gmail.com></a>:<br>
                    <br>
                  </blockquote>
                </div>
                <blockquote type="cite">
                  <div dir="ltr">
                    <meta http-equiv="Content-Type" content="text/html;
                      charset=UTF-8">
                    <p>That's cool. So what I was thinking of doing is
                      to read the address contents of my REAL variable
                      into an INTEGER then use SYSTEM.BIT() to report
                      out the sign, the exponent and the fraction. 
                      Reading Reals.IntL gave that idea.</p>
                    <p><br>
                    </p>
                    <blockquote>
                      <p>(** Convert LONGREAL to hexadecimal. h and l
                        are the high and low parts. *)<br>
                        PROCEDURE IntL* (x: LONGREAL; VAR h, l:
                        LONGINT);<br>
                        BEGIN SYSTEM.GET(SYSTEM.ADR(x) + H, h);
                        SYSTEM.GET(SYSTEM.ADR(x) + L, l)<br>
                        END IntL;</p>
                    </blockquote>
                    <p>In the Native Oberon case (Oberon-2) H and L are
                      initialized based on system expectation (my
                      interpretation). To better understand the SYSTEM
                      module and how it is expected to work I was
                      wondering if this made sense in Oberon-7?</p>
                    <blockquote>PROCEDURE DisplayIeee754(x : REAL);<br>
                        VAR raw : INTEGER;<br>
                      BEGIN<br>
                        SYSTEM.GET(SYSTEM.ADR(r), raw);<br>
                      <br>
                        IF SYSTEM.BIT(raw, 31) THEN<br>
                          Out.String("sign is -, "); <br>
                        ELSE<br>
                          Out.String("sign is +, "<br>
                        END;<br>
                        Out.String(" expo (binary): "); <br>
                        FOR i := 31 TO 23 BY -1 DO<br>
                          IF SYSTEM.BIT(raw, i) THEN<br>
                            Out.Char("1"); <br>
                          ELSE<br>
                            Out.Char("0"); <br>
                          END;<br>
                        END;<br>
                        Out.String(" frac (binary): "); <br>
                        FOR i := 23 TO 0 BY -1 DO<br>
                          IF SYSTEM.BIT(raw, i) THEN<br>
                            Out.Char("1"); <br>
                          ELSE<br>
                            Out.Char("0"); <br>
                          END;<br>
                        END;<br>
                        Out.Ln;<br>
                      END DisplayIeee754;<br>
                    </blockquote>
                    <p>Is my understanding correct? If so then I have
                      some compiler debugging issues to sort out and
                      that's OK. It's helping me better understand
                      language and approach.</p>
                    <p>Thanks for the help!<br>
                    </p>
                    <p>Robert<br>
                    </p>
                    <div class="moz-cite-prefix">On 6/4/21 3:45 PM,
                      Joerg wrote:<br>
                    </div>
                    <blockquote type="cite"
                      cite="mid:3837EB67-6EB7-44DF-B799-305FC0AE9B3B@iaeth.ch">
                      <pre class="moz-quote-pre" wrap="">Robert

You‘re absolutely right:
SYSTEM.BIT(a, 0) checks the LSB of the word at address a.

I guess for Reals.IntL you don‘t need SYSTEM.BIT.

br
Jörg

</pre>
                      <blockquote type="cite">
                        <pre class="moz-quote-pre" wrap="">Am 04.06.2021 um 23:55 schrieb R. S. Doiel <a class="moz-txt-link-rfc2396E" href="mailto:rsdoiel@gmail.com" moz-do-not-send="true"><rsdoiel@gmail.com></a>:


Hello everyone,

This is probably a bit of a novice question and I apologize but
it has me puzzled.  In the Oberon-7 language report's
SYSTEM.BIT() is described as using "n" to address a specific bit.
On first reading I assumed "n" zero would be the LSB and "n"
thirty one would be MSB where the compiler deals with the local
implementation of bit ordering. Is that the correct reading
of the report?

I was planning on implementing a procedure like Native Oberon's
Reals.IntL() but then started having doubts about my reading of the
Oberon-7 report. Have I made too simple a set of assumptions about
how I should expect SYSTEM.BIT() to work under Oberon-7
implementations?

All the best,

Robert Doiel


--
<a class="moz-txt-link-abbreviated" href="mailto:Oberon@lists.inf.ethz.ch" moz-do-not-send="true">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems
<a class="moz-txt-link-freetext" href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" moz-do-not-send="true">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a>
</pre>
                      </blockquote>
                      <pre class="moz-quote-pre" wrap="">--
<a class="moz-txt-link-abbreviated" href="mailto:Oberon@lists.inf.ethz.ch" moz-do-not-send="true">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems
<a class="moz-txt-link-freetext" href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" moz-do-not-send="true">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a>
</pre>
                    </blockquote>
                    <span>--</span><br>
                    <span><a class="moz-txt-link-abbreviated" href="mailto:Oberon@lists.inf.ethz.ch">Oberon@lists.inf.ethz.ch</a> mailing list for ETH
                      Oberon and related systems</span><br>
                    <span><a class="moz-txt-link-freetext" href="https://lists.inf.ethz.ch/mailman/listinfo/oberon">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a></span><br>
                  </div>
                </blockquote>
              </div>
            </div>
          </blockquote>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">--
<a class="moz-txt-link-abbreviated" href="mailto:Oberon@lists.inf.ethz.ch">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems
<a class="moz-txt-link-freetext" href="https://lists.inf.ethz.ch/mailman/listinfo/oberon">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a>
</pre>
    </blockquote>
  </body>
</html>