[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