Scrolls



* T A Bratley * Grimsby, South Humberside



Here is a set of eight versatile, easily used and interes-

ting scroll routines which can bve added to your Basic

programs to clear all or part of a screen in one of 8

directions.

  The routines scroll one character square at a time in the

following compass directions: N, S, E, W, NE, NW, SE, SW.

  The old character square is blanked out and its attribute

is replaced with one of your choice.

  The difference between these and previously published

routines is that any section of the screen can be scrolled

in any direction and leave any colour attribute behind.

This includes the bottom two lines.

  There are only five parameters you have to supply in

order to define the section of the screen to be scrolled,

and below are the addresses you need to poke for both 16K

and 48K machines (16 in brackets).

    POKE 64000 (31232), h (1 to 24)

    POKE 64001 (31233), w (1 to 32)

    POKE 64002 (31234), r (0 to 23)

    POKE 64003 (31235), c (0 to 31)

    POKE 64004 (31236), a (attribute)

  This defines a box of height h, width w, with a top left-

hand corner at r,c (where r and c are the normal PRINT AT

coordinates), to be replaced with a new attribute a.

  Height and width must always be at least one because a

box must have two dimensions, and care must be taken to see

that the box does not exceed the screen limits.

  The attribute is calculated in the usual way by multi-

plying the paper colour by eight and then adding the ink

value. If bright is required, add a further 64 to the total

so far, and finally if flash is required add a further 128.

  After poking the values for machine code routines to use

you will then have to select whichever scroll direction you

require.

  The table below gives you the addresses for both

machines:

  DIRECTION  16K    48K

      N      31241  64009

      S      31253  64021

      E      31265  64033

      W      31277  64045

      NE     31289  64057

      SE     31303  64071

      SW     31317  64085

      NW     31331  64099

These routines use the values r,c (row, column) to calcu-

late the actual memory address of the top left-hand corner

of the box and its corresponding attribute address. They

then take the width and height of the box and use the lower

of these two values as a loop counter within the machine

code to repeatedly call the appropriate routines until the

box is cleared. This saves using a For Next loop in Basic

and therefore speeds up the scrolling. However, this has a

slight disadvantage in that very small boxes are scrolled

off so fast that the effect is lost.

  Because the machine code is not relocatable I have given

two decimal dumps

[ ...and this is where it goes wrong. The dumps given in

  the article were hexdumps. The loader described was

  absent; in its place was the usual Your Computer hex-

  loader. There is talk of a demonstration program, which

  is also missing. I've provided one of my own on the TZX,

  which works on both 16K and 48K - it checks RAMTOP to

  decide which code to load and which addresses to poke

  and call.

  Only a few of the sentences after this actually apply to

  the code as published in the article; they are: ]

To load the code CLEAR 31231 for a 16K or 63999 for a 48K,

then LOAD ""CODE. [...] A good idea is to set up the

parameters of the box first, then load a screen$ from a

commercial game and finally run a routine to clear part of

the screen. This gives you a very interesting effect,

especially the diagonal scrolls.