[Oberon] Keyboard input in ETH Oberon.

Jörg joerg.straube at iaeth.ch
Wed Aug 4 12:33:55 CEST 2021


Hi

The 80X and 83X are the Oberon coding of Auml and auml. Has nothing to do with ASCII or Latin-1 or Unicode.
It's Oberon coding used by the Oberon font engine.

So, when Oberon reads Unicode or Latin-1 characters form a file or keyboard strokes this has to be translated into the internal Oberon representation of this character. The internal representation is the index into the fontfile: Glyph at index 80X is Auml, glyph at index 83X is auml and so on.

To display text on the screen there are three ways:
- transform a character ONCE from external coding to internal Oberon coding and index the font with the internal coding to get the glyph
  That’s the way it is done, as the translation from external to internal is only done once.
- let the character code in its external coding (eg Latin-1) and translate it whenever you access the font to get the glyph.
  Could be done. The translation from Latin-1 to index into the font file has to be done over and over again. It's not complex but needs an indirection more
- Change the Oberon font structure
  This must be done anyways if you want Unicode support, as the Oberon fonts only support a very limited set of Unicode glyphs.

br
Jörg

Am 04.08.21, 11:57 schrieb "Oberon im Auftrag von Hellwig Geisse" <oberon-bounces at lists.inf.ethz.ch im Auftrag von hellwig.geisse at mni.thm.de>:

    Hi Peter,

    On Sa, 2021-07-31 at 21:25 -0700, peter at easthope.ca wrote:
    > 
    > ETH Oberon Input.Mod of is visible in the screenshot at 
    > http://easthope.ca/ETHO.Input.Mod.png . The Oberon is running on QEMU 
    > on Linux Debian.
    > 
    [..]
    > 
    > Questions
    > 
    > (1) What is achieved by "POP EAX ... RET"?

    this is a small function with a nasty little trick in it.
    CALL L1 (with the label L1 directly following the call) pushes
    the return address onto the stack, in this case the numerical
    value of L1. POP EAX gets this address back into register EAX.
    ADD EAX,8 computes the address 8 bytes ahead, i.e. the address
    of the translation table, which is returned in register EAX.

    > (2) What is DB?

    The assembler directive to deposit the following bytes into
    memory.

    > (3) The syntax is explained as,   table = { scancode unshifted-code 
    > shifted-code flags } 0FFX .
    > 
    > Therefore scan code 1EX represents "a"; 1EX + shift represents "A"?

    Yes.

    > (4) 4X represents bit 04, flag 2?  Caps Lock effect?

    Yes.

    > (5) The first two characters under "Oberon accents" appear to be auml 
    > and Auml. Hex shows 83 and 80 whereas the ASCII Latin-1 Supplement 
    > encodes auml and Auml as E4 and C4. How does that work?

    I don't know.

    > (6) Why is 0FFX necessary?

    This is the typical end-of-table marker, used by the
    translation program.

    Hellwig
    --
    Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
    https://lists.inf.ethz.ch/mailman/listinfo/oberon




More information about the Oberon mailing list