mirror of
https://github.com/PDP-10/its.git
synced 2026-01-28 04:57:43 +00:00
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.
This commit is contained in:
2
doc/nlogo/-read-.-this-
Executable file
2
doc/nlogo/-read-.-this-
Executable file
@@ -0,0 +1,2 @@
|
||||
This currently contains the sources for LOGO.
|
||||
Other versions of LOGO are contained on the 11LOGO; directory
|
||||
348
doc/nlogo/logoch.497
Executable file
348
doc/nlogo/logoch.497
Executable file
@@ -0,0 +1,348 @@
|
||||
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.
|
||||
@@ -317,6 +317,7 @@
|
||||
- SHELL, Unix-like command line processor.
|
||||
- SHUTDN, shut down ITS.
|
||||
- SITS, Small ITS for the Logo PDP-11/45.
|
||||
- SLOGO, PDP-11 Logo for SITS.
|
||||
- SN, snoop terminal.
|
||||
- SPCWAR, Spacewar game.
|
||||
- SPEEDY, instruction timing test.
|
||||
|
||||
Reference in New Issue
Block a user