There is one last popular option for scrolling the screen and covering it gives us an opportunity to introduce the special AMOS animation language, AMAL …
AMOS AMAL
AMAL is an animation language embedded in the main AMOS language.
The idea is that you can code the animations for various elements, and have that taken care off automatically in the background while you take care of other things your program needs to do.
First you assign an animation channel.
You can control the animation of sprites, bobs, rainbows, and even a screen:
' Set up an AMAL channel
' This sets the channel 1 to control
' the Screen 0 Offset
Channel 1 To Screen Offset 0
' Sets up channel 2 to Bob 1
Channel 2 To Bob 1
Next you assign the AMAL code to that channel. The code is provided as a string, and can be abbreviated (eg. A or Anim)
As mentioned, the main use of AMAL is animation and movement, which is implemented like this:
' Anim or A provides a sequence of animation frames
' - times to repeat (0 means forever)
' - image number
' - delay (in 50th/sec)
A1$="Anim 0,(1,20)(2,20)(3,20)(4,20)(3,20)(2,20)"
A2$="Label:"
A3$="Move 80,0,50;Move -80,0,50;"
A4$="Jump Label"
A$=A1$+A2$+A3$+A4$
Amal 2,A$
Label or L: is a label so we can loop back to this point
J or Jump means jump to label, like a goto
M or Move moves the assigned object in pixels, horizontal and/or vertical. In our example we are going to move the screen 100 pixels horizontal, 0 vertical, and do it over 8 frames:
Amal 1,"L:M 100,0,8;J L;"
Once you have code assigned to a channel, you can start and stop the AMAL and animations with on or off:
Amal On
Anim On
Animating a Space Invader
Here is a simple example of moving and animating a bob.

The invader moves left and right 80 pixels while doing a basic 4 frame of animation dance.
Screen Open 0,320,200,32,Lowres
Flash Off : Curs Off : Hide
Paper 0
Pen 4
Cls
Load "invaders2.abk"
Get Bob Palette
Cls
Bob 1,100,100,1
Channel 2 To Bob 1
' AMAL code to animate and move our invader
A1$="Anim 0,(1,20)(2,20)(3,20)(4,20)(3,20)(2,20)"
A2$="Label:"
A3$="Move 80,0,50;Move -80,0,50;"
A4$="Jump Label"
A$=A1$+A2$+A3$+A4$
Amal 2,A$
Anim On
Amal On
Wait Key
AMAL Scroller Code

The following code will scroll the screen left and right at various speeds, while bouncing some space invaders.
I will leave combining the sprite animation with the scrolling as an exercise for the reader!
Rem **************************************
Rem
Rem AMAL scrolling demo
Rem
Rem by Maker Hacks
Rem
Rem 2020
Rem
Rem ***************************************
' Fresh screen
Screen Open 0,320,200,32,Lowres
Flash Off : Curs Off : Hide
Paper 0
Pen 4
Cls
' Set up our variables
Dim X(10)
Dim Y(10)
Dim XDIRECTION(10)
Dim YDIRECTION(10)
' Randomize the space invaders
' Start positions and directions
For B=0 To 9
X(B)=Rnd(320)
Y(B)=Rnd(200)
XDIRECTION(B)=Rnd(16)-16
If XDIRECTION(B)=0 Then XDIRECTION(B)=-8
YDIRECTION(B)=-XDIRECTION(B)
Next B
' Get our invader graphic
Load "invader.abk"
Get Bob Palette
Cls
' Put some background text up
Locate 0,2
For X=1 To 60
Print "Hello World! ";
Next X
' Using double buffer and auto back
' should automatically make things less flickery
Double Buffer
Autoback 0
' This is our AMAL code
' Moves ? pixels in ? frames then loops
Channel 1 To Screen Offset 0
Amal 1,"L:M 100,0,8;M 100,0,16;M 100,0,32;M -100,0,32;M -100,0,16;M -100,0,8;J L;"
Amal On
' Keep bouncing until a key is pressed
While Inkey$=""
For B=0 To 9
Bob B,X(B),Y(B),1
If X(B)<=0 Then XDIRECTION(B)=-XDIRECTION(B)
If X(B)>=320-32 Then XDIRECTION(B)=-XDIRECTION(B)
If Y(B)<=0 Then YDIRECTION(B)=-YDIRECTION(B)
If Y(B)>=200-32 Then YDIRECTION(B)=-YDIRECTION(B)
X(B)=X(B)+XDIRECTION(B)
Y(B)=Y(B)+YDIRECTION(B)
Next B
' wait for vertical blank
Wait Vbl
Wend