[Oberon] Negative integer literals in Oberon
Joerg
joerg.straube at iaeth.ch
Tue Apr 28 17:08:56 CEST 2020
yes, yes. As replied to Wojtek, addresses are INTEGERs and you might use hex notation if you feel more comfortable.
In your example I see more of an issue with „data“ than with „startAdr“....
your code moves 32 bit entities around and not INTEGERs... The input ReadInput works on might be a text or whatever. So in this case INTEGER is kind of misused as you know from the compiler that it by coincidence can hold 32 bits.
br
Jörg
> Am 28.04.2020 um 13:43 schrieb Chris Burrows <chris at cfbsoftware.com>:
>
> Just one example I can think of is that I've stored a HEX value representing an absolute start address into an INTEGER and then incremented it to initialise a block of memory at that address.
>
> Something like this:
>
> VAR
> startAdr, nWords, data: INTEGER;
>
> ...
> FOR startAdr := 0ABCDEFH TO (startAdr + nWords) BY 4 DO ReadInput(data); SYSTEM.PUT(startAdr, data) END
>
> Regards,
> Chris Burrows
> CFB Software
> https://www.astrobe.com
>
>
>> -----Original Message-----
>> From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of Jörg
>> Sent: Tuesday, 28 April 2020 6:42 PM
>> To: ETH Oberon and related systems
>> Subject: Re: [Oberon] Negative integer literals in Oberon
>>
>> Wojtek
>>
>> There is no question, that hex notation is convenient and needed.
>> But are we really talking about INTEGERs here? Whenever I saw hex
>> notation in my career, it had something to do with HW registers and silly
>> register constants for low level programming.
>> - INTEGERs and REALs are abstractions to do calculations with undefined
>> precision.
>> - POINTER is an abstraction to address memory
>> - SET is an abstraction for bit operations.
>>
>> To what Oberon type should the hex notation apply?
>> In my point of view to INTEGERs the least. SET the most, but this is not
>> foreseen today.
>> And POINTERs have no explicit value at all, as all is abstracted away
>> (hidden) by NEW()
>>
>> br
>> J rg
>>
>> ?Am 28.04.20, 06:51 schrieb "Oberon im Auftrag von Skulski, Wojciech"
>> <oberon-bounces at lists.inf.ethz.ch im Auftrag von
>> skulski at pas.rochester.edu>:
>>
>> Joerg:
>>
>>> It s a good point but a little bit a corner case. Principally,
>>> Oberon does not know addresses, as addresses are abstracted
>>> away by the type construct POINTER TO
>>
>> Yes, POINTER TO needs to be used eventually. But we are facing the
>> question
>> how to assign the hard coded address to the POINTER. The VRAMORG is
>> the case in point. This address is connected to the firmware video
>> controller.
>> The value has to be used as provided below, or there will be no
>> video.
>>
>> VRAMORG does not have to be coded in hex in Oberon. The FW developer
>> can use
>> 0E7F00H, while the Oberon programmer can write 950016 in decimal. But
>> it is
>> much easier and less error prone if both developers can use the same
>> notation.
>> So we need the hex in this case because firmware developers are
>> likely to use hex.
>>
>> Another example is perhaps all these protocols like Ethernet where
>> the documentation
>> will provide hex constants. Imagine the Oberon developer not being
>> able to use these,
>> but rather using a Windows calculator to translate to decimal because
>> hex notation
>> was removed from the language.
>>
>> Wojtek
>>
>> br, J rg
>>
>>> Am 27.04.2020 um 22:40 schrieb Skulski, Wojciech
>> <skulski at pas.rochester.edu>:
>>>
>>> ?Joerg:
>>>
>>>> Could somebody give me a good example, where INTEGERs need a hex
>> notation?
>>>
>>> How about this? These INTEGERS represent addresses. Are addresses
>> integers? I believe they are. The memory is a collection of addresses
>> with consecutive numbers expressed with integers. So it is a relevant
>> example.
>>>
>>> (* Memory map; PO.System page 104 *)
>>> STACKSIZE* = 8000H; (* 32 kB. Was hardwired in Kernel.Init *)
>>> STACKORG* = 80000H; (* stackOrg = 524,288; half a megabyte. *)
>>> HEAPORG* = STACKORG; (* heapOrg = stackOrg *)
>>> FSoffset* = STACKORG; (* Not clear what it is *)
>>> MEMLIM* = 0E7EF0H; (* 1 MB minus 98,575 bytes of VRAM at the
>> end*)
>>> VRAMORG* = 0E7F00H; (* start of memory-mapped display frame*)
>>> VRAMSIZE* = 1024*768 DIV 8; (* 1024 x 768 pixel, monocolor
>> display frame*)
>>> --
>> --
>> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
>> systems
>> https://lists.inf.ethz.ch/mailman/listinfo/oberon
>>
>>
>>
>> --
>> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
>> https://lists.inf.ethz.ch/mailman/listinfo/oberon
>
> --
> 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