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