mirror of
https://github.com/PDP-10/its.git
synced 2026-01-11 23:53:12 +00:00
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.
349 lines
16 KiB
Plaintext
Executable File
349 lines
16 KiB
Plaintext
Executable File
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.
|