Автор: Ian M. Collier
Год: 1985
Издатели: Your Computer
Производитель: Your Computer
Языки:
Английский
Формат:
TZX лента
Требования:
ZX Spectrum 16K
Ссылки:
Страница на ZXArt
Страница на World Of Spectrum
Страница на Spectrum Computing
Скриншоты:
Год: 1985
Издатели: Your Computer
Производитель: Your Computer
Языки:
Формат:
Требования:
Ссылки:
Скриншоты:
Turtle
Ian Collier with a Logo graphics
program for the Spectrum.
This is an implementation of the turtle graphics part of
Logo, adapted into about 15 commands.
To set up the machine code the listing of data must be
entered and run. The data will be read and Poked in by the
Basic program.
After creating the graphics code it should be ready for
use at 30000. It may, however, need to be moved, for
example to a higher address in a 48K Spectrum. Having saved
the code with
SAVE "logo"CODE 30000,1600
the relocate program will move the code, first by loading
it in at the new address, if this has not already be done,
then changing the absolute addresses. A copy of the code at
30000 should be retained for the demonstration program.
Program 1 [which also expects the code to be at 30000]
allows you to use the turtle graphics without writing a
prgoram. It incorporates one loop using the control varia-
ble a, which can be set up. Commands are as follows:
DIR x - Points turtle in a direction x degrees
anticlockwise from horizontal right.
CIR x - Draws a circle around the turtle,
radius x pixels.
BOX x,y - Draws a box with two diagonally opposite
corners at the turtle and (x,y).
FOR x - Moves the turtle forward, leaving a trail.
BOR x - =BORDER x
FIL x,y,z - Fills in any enclosed area in ink z, starting
at (x,y). If filling starts at the edge of the
area, then it is possible that only half will
be filled, so aim for the middle.
POL x,y,z - Draws a polygon with x sides, moving first to
(x,y) and going anticlockwise.
INK x - Any further drawing will be in ink x; this only
lasts to the end of the line of instructions.
JUM x - Moves the turtle forward x pixels without
changing the screen (Jump).
ROT x - Rotates the turtle x degrees anticlockwise.
MOV x,y - Moves the turtle to (x,y).
PLO x,y - Moves the turtle to (x,y) and plots a pixel.
SCR x,y - Changes the screen colours to paper x and ink y
without erasing the patterns.
REP x - Marks the start of a set of instructions to be
repeated x times. Also sets up the Basic
variable Rep which is equal to the counter of
the innermost loop. Note Rep starts at x and
goes down to 1.
END - Marks the end of the repeated instructions.
The instructions can be in upper or lower case.
The prompt Instructions will appear and the instructions
must be typed in (I have printed out some examples [which
seem to have gone missing somewhere between author and
printer]). Then the prompt For a= will appear and you must
set up the loop as in Basic by typing three numbers fol-
lowed by Enter, e.g.
FOR a=1 TO 50 STEP 1
If a loop is not required, three 1s can be entered.
If a mistake has been entered in the instructions, the
program will stop with a report. Otherwise, the instruc-
tions will be carried out and you may then enter some more.
Each time a set of instructions is entered, the screen is
cleared and the turtle is moved to the centre of the screen
and pointed horizontally right.
To use the commands in a program they must be initia-
lised. If the code is still in its original position, this
is done by:
RANDOMIZE USR 30000
The syntax checker will now accept the new commands, but to
use the commands, they must be re-initialised if the pro-
gram has been altered. This is so that the new position of
the variables is recognised, and the new defined procedures
are found. The commands need to be initialised after Clear
and Run, as these reset the machine stack. If Interface 1
is connected, this adds complications. [He's not joking;
with the Interface 1 attached, the Demo won't even work
when loaded normally. One solution I've found is to _first_
use a Microdrive command, such as CAT 1 - there does not
have to be a Microdrive loaded, getting the error message
is OK - and only then to load the program.]
The new commands are regarded by the program as syntax
errors unless followed by a turtle graphics command, but
they work within a program. Also, when one of the new error
reports - e.g. Microdrive not present - is caused, this
resets the machine stack and the graphics commands need to
be re-initialised.
To enter the new commands, they must be placed inside
quotes, but at the end of a line, the final quotes may be
omitted. For use in a program, there is one more command -
Cal.
It calls instructions at the address given. If these in-
structions are in a string, the address of the instructions
needs to be found and the string needs to be prepared by
inserting the hidden floating point forms after the numbers
- these will not be hidden in a string and will appear as
question marks and other characters. This is done by the
routine at 31500 and is demonstrated in program one in
lines 145,9510.
New commands are like definable procedures. For an exam-
ple see the command .sta in the demo program. To define a
procedure, open quotes as usual and type a full stop fol-
lowed by the three-letter name, then a colon. The commands
following this will be executed every time the new command
is encountered. The end of the defined command is at the
first close quotes encountered in the definition, or at the
end of the line.
[ And now a bit about the TZX. This starts with the machine
code loader, followed by the code relocator. A note about
this last one: it does not check for overlaps, so you
can't relocate the code to anywhere between 30001 and
31599. This should not be a major limitation.
After these come first the Demo program, and then the one
which the article only ever refers to as "Program 1".
I've decided to call it "Shell", as it is, in essence, a
command shell for this system. These both auto-run to
load the machine code at 30000, which follows them on the
TZX, at that address. All these programs, by the way,
will run on the 16K Spectrum as well.
Finally, let's repair a lacuna in the article. The author
promised some samples for the shell program, but they got
lost along the way. Therefore, here are a few I've
adapted (i.e., nicked) from some other Logo implementa-
tions for the Spectrum. Where the values for FOR a are
relevant, I've given them; otherwise, just enter 1,1,1.
The basic (NPI) Logo demonstration: a square.
rep4:for40:rot90:end
mov80,60:rep8:for40:rot45:end:rot45:rep8:for96:rot135:end
This one demonstrates that loops can be nested. Even if
the value of the variable "rep" for the outer loop is
not available within the inner loop, the system does
remember correctly where it left off.
rep12:rot30:rep8:rot45:for20:end:end
A few spirals, using the loop facility:
fora:rot70 for a=3 to 100 step 1
An odd one, but still a spiral:
fora:rot177 for a=1 to 177 step 1
Another spiral, demonstrating that you can use expres-
sions as well as plain variables:
fora*2:rot123 for a=3 to 76 step 1
Note that these could just as well have been written to
use rep, in which case the loop is inside the string
rather than outside it. This does require a bit of
adaptation. For example:
rep177:for178-rep:rot177:end
mov100,0
ola,150,0 for a=3 to 11 step 1
Don't forget that it is also instructive to check how
the Demo program uses the various commands.
Richard Bos, april 2012 ]
Ian Collier with a Logo graphics
program for the Spectrum.
This is an implementation of the turtle graphics part of
Logo, adapted into about 15 commands.
To set up the machine code the listing of data must be
entered and run. The data will be read and Poked in by the
Basic program.
After creating the graphics code it should be ready for
use at 30000. It may, however, need to be moved, for
example to a higher address in a 48K Spectrum. Having saved
the code with
SAVE "logo"CODE 30000,1600
the relocate program will move the code, first by loading
it in at the new address, if this has not already be done,
then changing the absolute addresses. A copy of the code at
30000 should be retained for the demonstration program.
Program 1 [which also expects the code to be at 30000]
allows you to use the turtle graphics without writing a
prgoram. It incorporates one loop using the control varia-
ble a, which can be set up. Commands are as follows:
DIR x - Points turtle in a direction x degrees
anticlockwise from horizontal right.
CIR x - Draws a circle around the turtle,
radius x pixels.
BOX x,y - Draws a box with two diagonally opposite
corners at the turtle and (x,y).
FOR x - Moves the turtle forward, leaving a trail.
BOR x - =BORDER x
FIL x,y,z - Fills in any enclosed area in ink z, starting
at (x,y). If filling starts at the edge of the
area, then it is possible that only half will
be filled, so aim for the middle.
POL x,y,z - Draws a polygon with x sides, moving first to
(x,y) and going anticlockwise.
INK x - Any further drawing will be in ink x; this only
lasts to the end of the line of instructions.
JUM x - Moves the turtle forward x pixels without
changing the screen (Jump).
ROT x - Rotates the turtle x degrees anticlockwise.
MOV x,y - Moves the turtle to (x,y).
PLO x,y - Moves the turtle to (x,y) and plots a pixel.
SCR x,y - Changes the screen colours to paper x and ink y
without erasing the patterns.
REP x - Marks the start of a set of instructions to be
repeated x times. Also sets up the Basic
variable Rep which is equal to the counter of
the innermost loop. Note Rep starts at x and
goes down to 1.
END - Marks the end of the repeated instructions.
The instructions can be in upper or lower case.
The prompt Instructions will appear and the instructions
must be typed in (I have printed out some examples [which
seem to have gone missing somewhere between author and
printer]). Then the prompt For a= will appear and you must
set up the loop as in Basic by typing three numbers fol-
lowed by Enter, e.g.
FOR a=1 TO 50 STEP 1
If a loop is not required, three 1s can be entered.
If a mistake has been entered in the instructions, the
program will stop with a report. Otherwise, the instruc-
tions will be carried out and you may then enter some more.
Each time a set of instructions is entered, the screen is
cleared and the turtle is moved to the centre of the screen
and pointed horizontally right.
To use the commands in a program they must be initia-
lised. If the code is still in its original position, this
is done by:
RANDOMIZE USR 30000
The syntax checker will now accept the new commands, but to
use the commands, they must be re-initialised if the pro-
gram has been altered. This is so that the new position of
the variables is recognised, and the new defined procedures
are found. The commands need to be initialised after Clear
and Run, as these reset the machine stack. If Interface 1
is connected, this adds complications. [He's not joking;
with the Interface 1 attached, the Demo won't even work
when loaded normally. One solution I've found is to _first_
use a Microdrive command, such as CAT 1 - there does not
have to be a Microdrive loaded, getting the error message
is OK - and only then to load the program.]
The new commands are regarded by the program as syntax
errors unless followed by a turtle graphics command, but
they work within a program. Also, when one of the new error
reports - e.g. Microdrive not present - is caused, this
resets the machine stack and the graphics commands need to
be re-initialised.
To enter the new commands, they must be placed inside
quotes, but at the end of a line, the final quotes may be
omitted. For use in a program, there is one more command -
Cal.
It calls instructions at the address given. If these in-
structions are in a string, the address of the instructions
needs to be found and the string needs to be prepared by
inserting the hidden floating point forms after the numbers
- these will not be hidden in a string and will appear as
question marks and other characters. This is done by the
routine at 31500 and is demonstrated in program one in
lines 145,9510.
New commands are like definable procedures. For an exam-
ple see the command .sta in the demo program. To define a
procedure, open quotes as usual and type a full stop fol-
lowed by the three-letter name, then a colon. The commands
following this will be executed every time the new command
is encountered. The end of the defined command is at the
first close quotes encountered in the definition, or at the
end of the line.
[ And now a bit about the TZX. This starts with the machine
code loader, followed by the code relocator. A note about
this last one: it does not check for overlaps, so you
can't relocate the code to anywhere between 30001 and
31599. This should not be a major limitation.
After these come first the Demo program, and then the one
which the article only ever refers to as "Program 1".
I've decided to call it "Shell", as it is, in essence, a
command shell for this system. These both auto-run to
load the machine code at 30000, which follows them on the
TZX, at that address. All these programs, by the way,
will run on the 16K Spectrum as well.
Finally, let's repair a lacuna in the article. The author
promised some samples for the shell program, but they got
lost along the way. Therefore, here are a few I've
adapted (i.e., nicked) from some other Logo implementa-
tions for the Spectrum. Where the values for FOR a are
relevant, I've given them; otherwise, just enter 1,1,1.
The basic (NPI) Logo demonstration: a square.
rep4:for40:rot90:end
mov80,60:rep8:for40:rot45:end:rot45:rep8:for96:rot135:end
This one demonstrates that loops can be nested. Even if
the value of the variable "rep" for the outer loop is
not available within the inner loop, the system does
remember correctly where it left off.
rep12:rot30:rep8:rot45:for20:end:end
A few spirals, using the loop facility:
fora:rot70 for a=3 to 100 step 1
An odd one, but still a spiral:
fora:rot177 for a=1 to 177 step 1
Another spiral, demonstrating that you can use expres-
sions as well as plain variables:
fora*2:rot123 for a=3 to 76 step 1
Note that these could just as well have been written to
use rep, in which case the loop is inside the string
rather than outside it. This does require a bit of
adaptation. For example:
rep177:for178-rep:rot177:end
mov100,0
Don't forget that it is also instructive to check how
the Demo program uses the various commands.
Richard Bos, april 2012 ]