Re: A83: Re: Clearing & xoring rectangles
[Prev][Next][Index][Thread]
Re: A83: Re: Clearing & xoring rectangles
That was put very nicely, but I think he was wanting to know how to alter the
pixels inside of a rectangle, Every pixel, not just the rim of it... Hmm,
could you still port that optimized routine you had, to the 83...? That would
be very helpful... =)
--Jason K.
In a message dated 10/25/98 4:52:05 PM, electrum@tfs.net writes:
>The easiest, smallest, and of course, slowest way is to use the _iLine
>rom call. STYLE is the type of line you want to draw (0 = off, 1 = on,
>2 = XOR/reverse). I am assuming here that _iLine doesn't destroy any
>important registers (meaning anything other than AF). If it does, add
>a few pushes and pops:
>
> ld bc,(10<<8)+10 ; p1 = 10,10
> ld de,(30<<8)+30 ; p2 = 30,30
> ld h,STYLE ; 0 = off, 1 = on, 2 = xor
>
>Box: ; IN: p1 = b,c p2 = d,e h = style
> ld l,d ; save p2x
> ld d,b ; left side
> call _iLine ; *draw line
> ld d,l ; restore p2x
> ld l,e ; save p2y
> ld e,c ; top side
> call _iLine ; *draw line
> ld e,l ; restore p2y
> ld l,b ; save p1x
> ld b,d ; right side
> call _iLine ; *draw line
> ld b,l ; restore p1x
> ld c,e ; bottom side
> call _iLine ; *draw line
>; if you call this as a routine, add a RET here
>
>What this does is simple. It uses the rom's line drawing routine four
>times to draw the four sides of the box. The L register is used to save
>the coord that is changed for each line.
>
>This will work fine if you only need to draw a few boxes at a time,
>like for a title screen or something. But this is way too slow to be
>used in the middle of a game as a general purpose box drawing routine.
>The reason for this is the use of _iLine. First, it's a rom call. Rom
>calls are slow, because the correct rom page must be loaded before
>the actual routine is called. The second reason is that the routine can
>set, reset, or xor pixels. Being a rom routine, it does not do self-
>modifying code to change the actual pixel setting instruction (between
>OR, AND, XOR), and I would doubt that they have a separate routine for
>each type of line. The next is that _iLine is a general purpose line
>drawing routine, and it is not specifically designed to just draw hori-
>zontal or vertical lines which a fast box drawing routine needs. These
>types of lines can >usually be drawn at least an order of magnitude faster
>than a normal line, depending the algorithm used for drawing it. Jimmy
>Mardell's has an excellent implementation of Bresenham's algorith, and he
>worked the inner loop down to between 98.5 and 106.75 t's. I would doubt
>that the rom routine is that well coded, making it even more important to
>use a special horizontal and vertical algorithm.
>
>I wrote a fairly decent box drawing routine a while back. If someone wants
>it, email me (not the list) and I'll port it to the 83. Sorry about the
>rant, but I'm kind of a fanatic when it comes to fast graphics code. ;-)
>
>TANSTATFC!
>
>-----Original Message-----
>From: Henry Davidowich <rdaneelolivaw@hotmail.com>
>To: assembly-83@lists.ticalc.org <assembly-83@lists.ticalc.org>
>Date: Saturday, October 24, 1998 11:38 PM
>Subject: A83: Clearing & xoring rectangles
>
>>
>>OK, lets say I have the top left and bottom right coordinates of a
>>rectangle. I want to reset every pixel in that rectangle; how? I want
>>to xor every pixel in that rectangle; how? Thanks!
>>
>>______________________________________________________
>>Get Your Private, Free Email at http://www.hotmail.com