[Oberon] FPGA - Simple Graph Fill

Jörg joerg.straube at iaeth.ch
Fri Nov 9 14:17:15 CET 2018


Tomas

I guess you should correct the following statement...
   c := ASR(c, -(x MOD ppw * 4)) MOD 10H;

br
Jörg

Am 09.11.18, 09:33 schrieb "Oberon im Auftrag von Tomas Kral" <oberon-bounces at lists.inf.ethz.ch im Auftrag von thomas.kral at email.cz>:

    > In short, from a given (x, y), evaluate F(x+1, y-1/2) which dictates
    > wether to go East or South-East for the next pixel.
    
    Hi,
    
    I have this simple example, drawing a circle, and attempting to fill
    it, starting off the centre.
    
    Fill goes well east and north, and fills exactly one quadrant.
    Uncommenting west south then the recursive does not stop.
    
    GraphTest.DoCircle 11 300 200 4 ~ colour x y radius
    GraphTest.DoFill 0 8 300 200 ~ target replacement x y
    
     col x   y
       0 300 200  east start
       0 301 200  
       0 302 200
       0 303 200
      11 304 200  east stop col # target col
       0 303 201  north start
      11 304 201  east resume
      11 303 202  north resume
       0 302 201
       0 303 201
      11 304 201
      11 303 202
    .... never terminates
    
    CONST ppw = 8; dpt = 4; bpl = dpt*128; (*pixels per word, depth, bytes
    per line*)
    
      PROCEDURE Fill*(tgc, rpc, x, y: INTEGER);
        VAR c, a: INTEGER; (*tgc, rpc - target replacement colour*)
      BEGIN
        a := D.Base + (x DIV ppw)*4 + y*bpl;
        S.GET(a, c); c := ASR(c, -(x MOD ppw * 4)) MOD 10H;
        O.Int(c, 4); O.Int(x, 4); O.Int(y, 4); O.Ln;
        IF c = tgc THEN
          D.Dot(rpc, x, y, D.replace);
          Fill(tgc, rpc, x+1, y); (*east*)
          Fill(tgc, rpc, x, y+1); (*north*)
          (*Fill(tgc, rpc, x-1, y); (*west*)
          Fill(tgc, rpc, x, y-1); (*south*)*)
        END
      END Fill;
    
    -- 
    Tomas Kral <thomas.kral at email.cz>
    --
    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