[A86] Re: Line Off
[Prev][Next][Index][Thread]
[A86] Re: Line Off
Actually, you can only turn the line off by drawing over it if you XOR it to
the screen. If you don't know much about assembly I would suggest leaving
lines alone (other than perfectly horizontal or vertical ones) until you get
to know the language better. The only way to draw lines in assembly is to
create your own routine or to use the ROM routine that is already programmed
into the calculator. Either way, they probably do the same thing: they
calculate each point of the screen that the line passes through and turns
them on. These points can be calculated before-hand or on the fly. I made
my own line routine a little while back and this is how it worked:
1. Calculate "slope" by dividing the change in the vertical from start to end
by the change in horizontal from the start point to the end. This was done
by subracting the smaller of each (x and y) component from the larger one to
find the change and dividing them. I put the change in y into h and the
change in x into a and used the "hl divided by a" routine to divide them.
2. The number that returned was the "slope". That is to say, each time you
add this number to a counter and it carries, you will change your other
component. For a hoizontal line, you turn on pixels to the right until this
number carries and then you move up (or down) one pixel.
3. You continue to turn on pixels until you reach the end of your line.
Ok, that whole thing probably made no sense. There is a lot of checking and
different things you have to do for vertical/horizontal/perfect diagonal
lines, along with what to do if you start out low and go higher or start high
and go lower... The whole thing becomes a jumbled mess unless you reall know
what you are doing. This is why I suggest you use the built-in line routine.
According to Assembly Studio 86's help file, the routine is called "_ILine"
and you give it the starting point in bc (xy) and the ending point in de (xy)
and you put the type of line to draw in h. A value of 0 turns the pixels
off, 1 turns them on, and 2 reverses them (XOR).
I hope you understand at least some of that, If not just look at the help
file in AS86.
Marc McG