[Coco] GIME Scrolling Questions
Robert Gault
robert.gault at worldnet.att.net
Tue Jan 27 09:25:57 EST 2004
Chris Spry wrote:
> Nevermind I think. Something hit me in the afternoon to give a try with the
> two GIME registers, so I reprogrammed my test program and low and behold the
> idea worked. Now I got scrolling. Now I just need to figure out a way to
> program it from shifting up a line with the scroll (the 2 registers do reset
> after a full screen has scrolled by, but at the reset the screen goes back
> to the normal area and then jumps up a line again....maybe if I start the
> FF9D really high and lower it along with FF9E bit by bit when needed it'll
> adjust and won't happen.....something to try). I would love to get less
> than 4 pixels per scroll movement if possible, but this does work for now
> and if I can't it won't kill me. :)
>
> -Chris
><snip>
Chris,
You are starting with a wrong premise and that is going to prevent you
from reaching the desired conclusion.
1) The "registers" from $FF9C-$FF9F are, in my opinion, mislabeled in
the Tandy service manual.
2) $FF9D & $FF9E are a 16-bit register which should not be thought of as
a vertical offset but rather as a pointer to the start of the high
resolution screens. The value stored in this byte pair is the screen
start divided by 8. Standard Coco3 high res graphics at $60000 is set
with $60000/8=$C000.
Conversely the high res screen, text or graphics, starts at 8 times the
register value. Store $3000 and the screen starts at $3000*8=$18000.
3) $FF9C is labeled a vertical scroll register but it really extends the
$FF9D-$FF9E pair to a 20-bit register. The maximum value for this byte
is 8 which is the missing resolution of the $FF9D-$FF9E pair.
When you combine these three bytes in the order $FF9D, $FF9E, $FF9C you
can point the high res screen to any byte in memory.
4) Now we come to $FF9F. Since we have byte resolution in 3) what more
can $FF9F do. Unfortunately it is not a pixel offset but is a different
type of byte offset. Increase $FF9F and the high res screen start increases.
Set the highest bit and the video screen is fixed in text mode to a
multiple of 64 characters or 128 bytes. You get 64 characters at WIDTH40
and 128 characters at WIDTH80. Remember that high res text takes two
bytes per character.
In HSCREEN graphics mode high byte set, the screen width is 256 bytes
with the number of pixels set by the graphics mode. The offset is by
byte pairs as for the text screen and this may be a bug in the GIME.
The minimum pixel offset will be in 16 color mode and at 2 pixels per
byte, a two byte offset will be 4 pixels.
If the highest byte of $FF9F is not set, the screen width is derived
from HSCREEN or WIDTH but the screen will offset as above.
More information about the Coco
mailing list