1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-11 23:53:12 +00:00
PDP-10.its/doc/nlogo/logoch.497
Lars Brinkhoff b267d9ff34 SLOGO - PDP-11 Logo for SITS.
This is the very latest version of 11LOGO.  Included in this commit is
a subset of files necessary to assemble 11LOGO for running under SITS.
2022-11-13 15:21:43 -05:00

349 lines
16 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

New things in LOGO versions greater than 350:
The disk error system has been revamped. The new format of
error messages from disk functions is:
<function name>: <error message>
In the case of the general file-not-found type of error message:
<function name>: <file name that failed> <error message>
Note that the file-not-found type of error message is generally
generated whenever the failing operation involved a file
name; the reson for failure might be something other than
file not found. The function name given is that of the LOGO
function that caused the error. On the floppy disk system, most
types of hardware disk errors now trap back properly to
the LOGO user. There are two types of hardware disk errors: the
type which simply causes an abort of the current function and
clobbers the channel, and the type that indicates that the diskette
file structure might have been clobbered and the disk should
be checked with SALV. The english text for the first is
"DISK ERROR" the second is "BAD DISK ERROR, CHECK DISK".
The french text for the new errors is not yet complete; some
of them just give the english text. The new error system is
not yet complete in another sense: while disk errors always
(I think) give a reasonable error message back to the user,
hardware disk errors can cause the file system to become
wedged in strange ways. I intend to debug this when I have a
machine to debug it on.
More MFI (master file item) blocks have been allocated, to reduce
the chance that a file can't be opened due to a lack of them.
There is now a proper error message ("too many files open")
given if you do run out of these.
READ can now be done while defining a procedure. If the procedure
being defined is also defined in the file, the file definition
will be SKIPPED in the usual way. When the file has finished
being read, the user will be still defining the procdure he
was defining when the READ was executed.
POI (and PO TREE) are now much faster. Also, they now print on
the last line, in addition to the free blocks and disk number,
the number of blocks used by the directory just printed. Note
that at the moment directories count as taking no blocks, while
in fact they take one.
The entire 2500 display system LOGO driver has been revamped.
LOGO now tries to keep track of snap space and display space,
as well as x and y coordinates. Thus, the commands XCOR, YCOR,
HEADING and HERE now work for the 2500 (sometimes). The (sometimes)
is due to the fact that, because of insufficient 2500/LOGO communication,
LOGO sometimes loses track of the turtle on the 2500. This
condition is known as the turtle being dizzy. The turtle becomes
dizzy due to MOVET or SPIN commands; also RUBDIS will make the turtle
dizzy. DISPLAY does NOT make the turtle dizzy, by virtue of the
fact that the displayed snap has no effect on the x, y, heading
or pen state. In order to implement this, the DISPLAY command
now represnets 6 2500 words if the pen is up and 7 if it is
down when the DISPLAY command is issued. Once the turtle is dizzy,
it remains dizzy until the next CLEARSCREEN command. Once the
turtle is dizzy LOGO no longer makes any attempt to figure
out where it is; this is equivelant to the old mode of
running the 2500, and is much faster than the new mode. The
turtle can be made permanently dizzy (to enter "old mode")
by doing DIZZY 1; DIZZY 0 will clear that state. Also note that
when the turtle is dizzy, DISPLAY is a 2 word command again,
just like old times. SNAP has also changed drastically; the old
effect of snap can be had with the command OSNAP. New SNAP does not
take an argument; rather, it returns a value. LOGO now keeps track
of the lenght of the current display list and snap area. When SNAP
is executed LOGO attemts to assign the new snap room under all of
the old snaps; if there is enough room it issues the proper SNAP
command to the 2500 and returns the address of the bottom of the area
it assigned. Note that old snaps never go away, unless the WIPECLEAN
command is issued (the name of this command may be changed). Internal
to LOGO 2500 snaps are just numbers; LOGO does not keep track which
snaps are contained in other snaps, or are displayed on the screen.
There is a new command .LPCNT which takes 0 or 1 arguments. Given 0
arguments it returns a number which is current line printer line
count; given 1 argument it sets the line count to the given value.
Thus a LOGO program can attmpt to maintain page boundaries by
checking .LPCNT often enough, and when it exceeds a set value,
space the printer over the perforations and set .LPCNT back to zero.
The system trace functions (.STF and .CTF) and the explicit call
to the LSI-11 memory checker (.SYSCHK) have been removed.
POF will now always work, if there is at least one free channel,
as will SETI and USE. POF will normally use channel zero, as before,
but if channel zero is in use POF will choose a free channel.
Note that if you are dribbling at the same time as POFing,
and POF can't get the buffered channel (channel zero), in the
LSI version two disk transfers will happen for every character
printed. POF now quits immediately on <cntl>G rather than
just inhibiting printing until the file is all "printed".
An important internal change: the number of arguments passed to
a variable number of arguments procedure is now passed in D rather than
on the top of the stack. Also, the standard number of args range
is now 0 to 7 rather than 0 to 3.
The comment character has been changed from ! to ;. For the momment !
will still be acepted, but LOGO will change it to ;. Presumably
at some later date the meaning of ! will go away completely.
It is no longer nessesary to put : in front of the names of
argument variables on the title line; however, atempting to
use a variable name that cooresponds to a system abbreviation
in this way will expand the abreviation. Thus:
TO FOO :A :B :FIRST
is the same as
TO FOO A B F
because the F gets expanded to FIRST. Also, the magic word USING
(AVEC in french) or LOCAL will specify the following variables
as being local to the procedure:
TO FOO A B USING C D
FOO has two arguments and two local variables.
String addition and subtraction are now supported. The maximum length
of the numbers is subject to change, but at the moment is 20 digits
(I think). SPLUS and SMINUS are the two defined operations on string numbers.
The functions CATCH and THROW have been implemented. CATCH is similar to RUN,
if the procedure(s) executed by the CATCH do a THROW, control will return
immediately to the CATCH. For example:
CATCH [PRINT 69 THROW PRINT 105]
will only print 69; the PRINT 105 will never be executed.
CATCH takes an optional second argument, called the tag. If CATCH
is given a tag, only THROWs which specify that tag (as their
optional second argument) will "match" the CATCH. Thus:
(CATCH [CATCH [(THROW "FOOTAG )] PRINT 69] "FOOTAG )
will never print 69, because the inermost CATCH will not trap
the THROW which has specified FOOTAG. A tag can be any
LOGO object that can be used as an input to EQUAL.
THROW also can take an
optional second argument which is the value to be returned by
the CATCH. Since specifing the second argument requires specifing
the first there is a special case check for the empty word as
a tag. If the given tag is the empty word THROW acts as if there
were no tag. So:
PRINT CATCH [(THROW " "FOO )]
will print FOO. Of course, the use of tags can be combined with the
use of returned values.
When the system starts up it asks for the date and time; the forma is:
YY MM DD HH MM SS
any seperator can be used between the numbers, e.g. 77/12/31 7:32:21 works.
The input is terminated by a carriage return and can be terminated
at any point, e.g. after typing just the date or after typing nothing.
Rubout will cause the question to be asked again.
Currently time and date are not kept on files, but I am
considering putting that in.
31 Jan 77
In version 364 and greater:
A bug is fixed in PO TREE; it used to skip the printing of certain
files in certain directories; also both POI and PO TREE now count
directories as one block, so that if you SETI to the root and do
a PO TREE and add the number of used and free blocks you will
get exactly the number of blocks available for files (that is,
not including reserved or swap areas) on the disk.
In the LSI version, a bit table counting bug is fixed.
8 May 78
In version 450 and greater:
Amazingly enough, no great changes have happened since version 364.
Many INTERNAL changes have happened, however.
The display stuff has been changed to accomade the new 2500 code. Since
certain things about the new 2500 are different LOGO actually has to interogate
the 2500 to find out if it is a new one or not. There is code to control
the turtle and plotter which can be connected to the 2500.
The file EVAL (the main "core" of LOGO) knwo only uses the english and french
assembly flags; it also has many of its global symbols so declared, in
preparation for assembling under RT11 and/or UNIX. Also, all storage management
functions have been moved to a new file, STORAG.
Some things have been swapped around to take advantage of the LSI11 memory
map. The error messages, garbage collection bit table and LSITS disk buffer
are now all kept in high core. "High core" means the top of whatever memory
is accessible; if there is a map that's 48K (or whatever) downward. If there is
no map, 30K downward. In the case of a machine with a map, these things
normally occupy no virtual address space. When they are needed they are mapped
in to the page just above 30K, so in fact they never interfere with the
normal 30K virtual space.
Things which are on the list for implementation "soon":
push down list in mapped memory
double density disks (all support software done, so this is trivial)
flushing the "quote" meaning of the 200 bit (needed for french characters)
SAFEDISK, a mode where the diskettes are always unmounted when possible
finishing the graceful recovery on disk error stuff
multiple disk buffers
Meters have been implemented in the LSI version for monitoring
the time spent doing various things. There are two related primitives:
METER and METERGO, both of which take one argument. METER n returns the value
of the nth meter; except for the zeroth meter and the eighth meter, all of the
meters are times in 60ths of a second since the meters were last reset.
METERGO of -1 clears the meters and starts metering. METERGO 1 stops metering
and METERGO 0 starts metering without clearing the meters. Here is the list of
meters:
0 MTGCCN: .BLKW 2 ;GC COUNT
1 MTCLK: .BLKW 2 ;TIME SINCE METERS ZEROED
2 MTEVAL: .BLKW 2 ;TIME RANDOMLY IN EVAL (NOT IN PRIMITIVES, OR GC)
3 MTPRIM: .BLKW 2 ;TIME SPENT IN PRIMITIVES (BUT NOT IN LSITS OR GC)
4 MTGCOL: .BLKW 2 ;TIME SPENT IN GC
5 MTLSIT: .BLKW 2 ;TIME SPENT IN LSITS (NOT IN TYI OR DISK XFER)
6 MTTYI: .BLKW 2 ;TIME SPENT HANGING AROUND FOR TYPEIN
7 MTDISK: .BLKW 2 ;TIME SPENT DOING REAL DISK TRANSFERS
8 MTDSKC: .BLKW 2 ;COUNT OF DISK XFERS
9 MTSPR1: .BLKW 2 ;SPARE #1
10 MTSPR2: .BLKW 2 ;SPARE #2
11 MTFLAG: .BLKW 2 ;IF ZERO, RUN THE METERS
12 to 43 PCMETR: .BLKW 2*32. ;TIME SPENT AT PC, INDEX ON 5 HIGH BITS
Note that meters 2 through 7 inclusive should add up to meter 1; similarly
meters 12 through 43 inclusive should add to meter 1.
The way the meters work is that several sections of logo set flags
to indicate what logo is doing at that instant. When the clock ticks (once
each 60th of a second) it increments (if the meters are on) the MTCLK meter,
one of the meters 2 through 7 and one of the meters 12 thorugh 43. Note that
this technique results in statistical metering: the meters are rather useless
in figureing out how a short program, run once, spends its time. Probably
a minimum run of 5 minutes or so should be used to get reasonably accurate
numbers from the meters. The meters 2 through 7 indicate how much time
is spent on specific tasks. E.g. if the meters are started and then no
program is run, meter 6 will accumulate all of the time. If the program
TO COLLECT
1 .GCOLL GO 1
is run, we would expect that meter 4 would accumulate almost all of the
time. Also, each time around the loop meter 0 will be incremented. The program
TO GOTO
1 GO 1
would cause all the time to be accumulated in meters 2 and 3.
Meters 9 through 41 will give a histogram of where the time is
spent in relation to the high order bits of the program counter.
A note on changes to the 2500 (new PROM code):
Bug fixes:
The problem where CLEARSCREEN sometimes clear commands sent after it
has been fixed.
Old things changed:
The character under the cursor is displayed when the cursor blinks off.
snap, rubdis incompat
New features:
The character control-R (ascii 18) is similar to control-Q (ascii 17)
except that control-R adds 128 to the value of the next character. This
has the effect of displaying characters in the high font memory
(e.g. accented characters).
Turtles and plotters are now supported. There is a command to select which
device to send turtle commands to. Octal 52000 selects the display; 52001
selects the turtle and 52002 selects the plotter. In addition to the normal
turtle commands, when the (real) turtle is selected the command 4004 will
cause the 2500 to send back a character indicating the touch sensor state;
4001 will turn on its lamps; 4002 will turn them off and 4003 will cause
a toot. The snap command is not useful when running either the turtle or
the plotter.
18 July 1978
In version 490 and greater: a bug has been fixed in .OPENM that caused it to
affect channel zero when .OPENMing on other than channel zero.
The primitive .ENDFILE has been added; it returns the address of the end of
the file open on the specified channel.
In an attmpt to keep better track of all the software that is flying around,
I have instituted a system of "release numbers". Basically, whenever there
is a version of something that both has a number of new features or bug
fixes and seems to be stable enough it will be assigned a release number
and distributed. The "number" actually can have a letter appended to it
if the only change is minor features/bug fixes. I have arbitrarly decided that
the current release number of LOGO is 2 and all utility software is 3.
When LOGO gets the ability to handle double density diskettes it will
become release number 3 also. (Everything else can handle them now.)
NLOGO directory for release 10 (version 490)
All software will still retain the normal version number also;
eventually released software will type out the release nubmer as
well as the version number.
Release 2 of LOGO is version 490, comprised of the following files:
AI NLOGO
FREE BLOCKS #1=252 #2=252 #3=252 #4=261 #13=132 #5=250
1 COMMON 21 1 6/4/78 14:22:16
3 CONTRO 45 7 7/10/78 07:45:11
3 DISPLA 18 24 6/4/78 17:30:42
4 EVAL 107 34 7/12/78 20:48:13
4 FILING 71 8 7/12/78 20:48:10
L FLOPDF 1 RJL FLOPDF >
3 GTFUN 74 2 6/4/78 17:38:26
4 IMPURE 58 5 6/5/78 19:38:54
2 INIT 42 2 5/18/78 16:12:06
4 LSFLEM 31 5 11/13/77 11:18:25
1 LSFLVR 4 1 11/12/77 16:19:36
5 LSITS 94 15 7/10/78 07:45:17
1 LSITVR 62 2 6/15/78 12:16:21
4 PURE 72 9 7/12/78 20:50:42
4 STORAG 13 4 5/29/78 22:35:08
The versions of the utility (release 3) software are:
AI SITS
FREE BLOCKS #1=149 #2=151 #3=99 #4=135 #13=240 #5=152
2 SALV 213 16 !7/17/78 21:44:47
AI RJL
FREE BLOCKS #1=149 #2=149 #3=99 #4=135 #13=240 #5=152
4 BLOADR 101 4 !7/17/78 22:08:06
1 BOOT 24 1 5/14/78 00:05:51
2 FLOPDF 13 1 4/28/78 20:32:10
4 FLOPTS 87 5 !7/17/78 22:07:10
4 MAPTST 19 3 5/1/78 23:40:20
3 MAPTST BIN 4 5/1/78 21:32:30
5 TAPE 101 7 !7/17/78 21:45:54
Fixed a bug in the root creation stuff so that if the creation fails the world
recovers gracefully rather than screwing up. This applies both if the BITS file
isn't found and if an attempt is made to mount more than the maximum number
of disks.
BLOADR 102, R3A will do a reset after writing all (unmapped) memory. This
has the effect of clearing any existing parity errors and turning off the
parity errors indications (provided the memory is good and doesn't cause
any more errors).
The error numbers, which magically got broken in a previous version, have
been fixed again.
It is now possible to assemble a version with the abiltity to handle
more than one serial interface; this is useful e.g. for the PROM
programmer or the multiwriter.