[Oberon] FPGA - SET initialisation

Tomas Kral thomas.kral at email.cz
Sun Apr 30 16:33:46 CEST 2017


Chris, Joerg,

Learning, not doing much useful bitmap examples.

I was surprised to realise, Bitmaps are easy to be copied/displayed,
by lines, after each line destination address is incremented by 128
bytes per display line, source address by bitmap width DIV 8, lines h
decremented by 1.

This works nicely on any bitmap of widths multiple of
32 bits accross. 32xN, 64xN, etc, and must be aligned horizontally also
on 32 bit as well, for x=0,32,64,.. coordinate (x,y = top left).
Bitmaps are drawn upwards. 

(* paints horizontal bitmap line, for x,w=32,64,... *)
PROCEDURE PaintHLine(src, dst, w: INTEGER);
  VAR s,t: SET;
BEGIN
  w := (w+7) DIV 8; (* bytes per bitmap line *)
  WHILE w > 0 DO
    SYSTEM.GET(src, t);  SYSTEM.GET(dst, s);
    SYSTEM.PUT(dst, s + t);
    INC(dst, 4);  INC(src, 4);  DEC(w, 4)
  END
END PaintHLine;

I am looking into a solution where x can spill over byte boundary,
also width of finer bitwise granularity.  

I did a similar exercise in assembly many, many years ago on 8-bit
computers.

Tomas


On Sun, 30 Apr 2017 21:26:09 +0930
Chris Burrows <chris at cfbsoftware.com> wrote:

> > -----Original Message-----
> > From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of
> > Tomas Kral
> > Sent: Sunday, 30 April 2017 8:05 PM
> > To: oberon at lists.inf.ethz.ch
> > Subject: Re: [Oberon] FPGA - SET initialisation
> > 
> > Ah yes, sily me.
> > 
> > But how to best initialise a SET variable with an arbitrary byte /
> > integer?
> > 
> > TYPE ii = POINTER TO iidsc;
> > iidsc = STRUCT i: INTEGER END;
> > 
> > i := b; SYSTEM.PUT(ii,i); SYSTEM.GET(ii,s); (* initialise a set with
> > a byte *) SYSTEM.PUT(ii,i); SYSTEM.GET(ii,s); (* initialise a set
> > with an integer
> > *)
> > 
> 
> Do you mean how do you typecast an INTEGER / BYTE variable to a SET
> variable?
> 
> If so then:
> 
>   VAR
>     s: SET;
>     i: INTEGER;
>     b: BYTE;
>   
>   BEGIN
>     s := SYSTEM.VAL(SET, i); 
>     s := SYSTEM.VAL(SET, ORD(b))
> 
> I'm curious. What is it that you are trying to do that makes you ask
> this question?
> 
> Regards,
> Chris Burrows
> CFB Software
> http://www.astrobe.com/RISC5
> 
> --
> 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