[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