Re: A83: Re: Clearing & xoring rectangles


[Prev][Next][Index][Thread]

Re: A83: Re: Clearing & xoring rectangles




Perhaps a cheap-ass version of David routine...let me see:

ld hl,(10<<8)+10       ; p1 = 10,10
ld de,(30<<8)+30       ; p2 = 30,30
ld d,STYLE             ; 0 = off, 1 = on, 2 = xor

ld   bc,hl		; Don't know whether these are valid, but you get my meaning.
ld   l,e
Loop:
	call _iline
	dec  d
	dec  b
	ld     a,b
	cp    h-1
	jr      done
	jp     loop
done:
	
Something like that should help.

Later,

James Matthews (matthews@tkb.att.ne.jp)

ICQ: 7413754
http://home.att.ne.jp/gold/tomcat21/index.html
http://library.advanced.org/18242/

----------
> From: Jkhum98@aol.com
> To: assembly-83@lists.ticalc.org
> Subject: Re: A83: Re: Clearing & xoring rectangles
> Date: Monday, October 26, 1998 7:34 AM
> 
> 
> 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:
> >
> >
> >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