Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Apricot PCP/M-86

198 views
Skip to first unread message

John Elliott

unread,
Jan 1, 2005, 2:16:05 PM1/1/05
to
One for collectors of Personal CP/M-86 versions:

At <http://www.actapricot.org/disks/aprid5ks.htm#apr00301.dsk> is an image
of DR Logo for the Apricot F1e. It also contains a CPM3.SYS file for
"Personal CP/M-86 Version 3.1 (10/18/83)" which has the BDOS version number
of 1033h (ie, BDOS version 3.3).

The disc (as it stands) is formatted in Apricot MS-DOS format rather than
CP/M. It won't boot on my Xi, so all I've been able to do so far is copy off
the CPM3.SYS file and have a look at it.

--
------------- http://www.seasip.demon.co.uk/index.html --------------------
John Elliott |BLOODNOK: "But why have you got such a long face?"
|SEAGOON: "Heavy dentures, Sir!" - The Goon Show
:-------------------------------------------------------------------------)

s_dub...@yahoo.com

unread,
Jan 1, 2005, 8:03:27 PM1/1/05
to

John Elliott wrote:
> One for collectors of Personal CP/M-86 versions:
>
> At <http://www.actapricot.org/disks/aprid5ks.htm#apr00301.dsk> is
an image
> of DR Logo for the Apricot F1e. It also contains a CPM3.SYS file for
> "Personal CP/M-86 Version 3.1 (10/18/83)" which has the BDOS version
number
> of 1033h (ie, BDOS version 3.3).
>
> The disc (as it stands) is formatted in Apricot MS-DOS format
rather than
> CP/M. It won't boot on my Xi, so all I've been able to do so far is
copy off
> the CPM3.SYS file and have a look at it.
>
Hello John, is this a copyQM image, what's the procedure for
extraction?

Thxs.

John Elliott

unread,
Jan 2, 2005, 11:36:03 AM1/2/05
to
s_dub...@yahoo.com wrote:
: Hello John, is this a copyQM image, what's the procedure for
: extraction?

It's in Apridisk format. You either need the original Apridisk (from
<http://www.actapricot.org/apricot_apridisk.html> or (if you're on a Unix
or MacOS X box) LibDsk <http://www.seasip.demon.co.uk/Unix/LibDsk/>.

Having done that, you'll then find that Apricot disks have a different
boot sector than the normal sort. I got round this by hacking a utility
together that rewrites the Apricot boot sector as a normal one.
Alternatively, you could use a sector editor to extract the files.

French Luser

unread,
Jan 10, 2005, 9:51:50 AM1/10/05
to
DENNIS.TXT
----------

Now that John Elliott has discovered a version of Dr. Logo for
CP/M-86, the following could interest you, too:

-----------

- "Meet the Drawing Board Doctor"
by Katie Seger
"PCjr World", May 1984, p.14

Will the Mitchell family ever be the same now that Dennis the
Menace has a computer? Once Dennis learns about the version of
Dr. Logo for PCjr, there will be no stopping him.

It's not surprising that Henry, Alice, and Dennis have been
grouped around a computer in several strips; Dennis's real
father, cartoonist Hank Ketcham, acquired his first computer
last year. "I now understand why there are computer widows," the
64-year-old Ketcham said as he talked about the IBM PC in his
life.

Ketcham was given his PC by Digital Research last spring to help
him create the character of Dr. Logo for the firm's language
software. Dr. Logo, a red-bearded, bespectacled professor, can
be seen with Dennis and his parents in Digital Research's
magazine advertisements for the new product. The fatherly
academic will also be featured in the upcoming book, "Dennis the
Menace Meets Dr. Logo", a 64-page tutorial that will be
available in mid-1984 with the PCjr version of Dr. Logo. Ketcham
is writer and illustrator for the book, which is designed for
both children and adults.

"Since Dennis doesn't know a floppy disk from a Frisbee, he is a
perfect Logo student," Ketcham said. The cartoonist thinks that
his lack of a computer background was an asset rather than a
hindrance for this project because he looked at Logo with
beginner's eyes. "It was just me and Dennis learning the
language," he said.

Ketcham got the job after he met Gary Kildall, chairman of the
board and chief executive officer of Digital Research, at a
company software demonstration. "My daughter has a girlfriend
whose mother is a programmer at Digital Research," Ketcham
explained, "so I knew a little bit about the company. But I was
curious to know more." Ketcham and Kildall were surprised to
discover that they had both attended the same high school in
Seattle. "Of course, it was at different times in the century."

To prepare for writing the primer, Ketcham read about the
version of Logo for Apple computers and studied Digital
Research's Dr. Logo documentation. Digital Research supplied
experts to help whenever Ketcham "hollered loud and clear." The
company also had a Logo expert serve as technical editor.
Ketcham tried to keep the book free of Computerspeak, a language
he says is emerging in other books.

One of Ketcham's favorite Logo features is the turtle graphics.
"I spent far too much time designing pictures of Dennis and Dr.
Logo on screen when I should have been doing other work," he
confessed. Ketcham works on his comic strip and freelance
projects in his Carmel, California, studio from 8:30 a.m. to 5
p.m. every weekday.

He has been drawing a daily Dennis cartoon since March 1951. The
strip, inspired by Ketcham's then three-year-old son, Dennis, is
translated into 14 languages and appears in more than 850
newspapers in 48 countries.

The Seattle native is fond of saying he "graduated from the
University of Walt Disney." Ketcham attended the University of
Washington in 1938 but left after a year because "I wanted to be
part of the parade, not just watch it go by." He headed for
Hollywood and got a job at Universal Studios working with
animator Walter Lantz on Oswald the Rabbit cartoons. He then
joined Walt Disney Productions and worked on Donald Duck
cartoons and the feature-length films "Pinocchio" and
"Fantasia".

During World War II, Ketcham, a chief petty officer, served as a
photographer specialist for the United States Naval Reserve
working on Navy war bond and training films. During this period
Ketcham created his first comic strip, "Half Hitch," for the
"Saturday Evening Post." The strip was discontinued after the
war.

Ketcham later settled in Connecticut and began freelancing
cartoons and illustrations to advertising agencies and magazines
such as the New Yorker and Collier's. "I was fascinated by the
Walt Disney process; I still am. But I had climbed that
mountain, and I felt the lure of the freelance world." The
freedom allowed him the time to develop the character of Dennis
and begin 33 years of daily cartooning.

---------

Now for the question: Is anybody out there
who has this 64-page tutorial?

(Post-Scriptum: Dennis the Menace is called "Denis la Malice" in
French (Dennis the Mischief).)

Yours Sincerely,
"French Luser"


EOF


French Luser

unread,
Jan 10, 2005, 9:52:43 AM1/10/05
to
LOGOHELP.TXT (Edited by Emmanuel ROCHE.)
------------

It's easy to read this HELP file in resolution 0 or 1.


You can use HELP to:

1. Get information about a particular primitive and its format
with a brief example. Enter HELP followed by a quoted primitive
name or a quoted primitive abbreviation and then press ENTER.
For example:

HELP "TURTLETEXT


2. See the next portion and any following portions of the list
of Dr. Logo primitives, press any key. To stop the display of
the list, use Ctrl-G.


For detailed information about any primitive or its format, look
in the Dr. Logo Dictionary.


ABS ALLOPEN AND
ARCTAN ASCII BACK
BURY BUTFIRST BK
BUTLAST BF BUTTONP
BL BYE CATCH
CHANGEF CHAR CLEAN
CLEARSCREEN CLEARTEXT CLOSE
CS CT CLOSEALL
CO COPYDEF COPYOFF
COPYON COS COUNT
CURSOR DEFAULTD DEFINE
DEFINEDP DEGREES DIR
DIRPIC DOT DOTC
EDALL EDF EDIT
EDNS EDPS ED
EFORM EMPTYP END
EQUALP ERALL ERASE
ERASEFILE ERASEPIC ER
ERN ERNS ERPS
ERROR EXP FENCE
FILL FIRST FOLLOW
FORM FORWARD FPUT
FULLSCREEN FD GLIST
FS GO GPROP
HELP HIDETURTLE HOME
IF HT IFFALSE
IFTRUE INT IFF
IFT ITEM KEYP
LABEL LAST LEFT
LIST LISTP LT
LOAD LOADPIC LOCAL
LOG LOG10 LOWERCASE
LPEN LPENP LC
LPUT MAKE MEMBERP
NAME NAMEP NODES
NOFORMAT NOT NOTRACE
NOWATCH NUMBERP OPEN
OR OUTPUT PACKAGE
PADDLE OP PAUSE
PENDOWN PENERASE PENREVERSE
PD PE PX
PENUP PI PIECE
PU PKGALL PLIST
PO POALL POCALL
PONS POPKG POPS
POREF POTL POTS
PPROP PPS PREC
PRIMITIVEP PRINT PROCLIST
PRODUCT PR QUOTIENT
RADIANS RANDOM READCHAR
READEOFP READER RC
READLIST READQUOTE RECYCLE
RL RQ REMAINDER
REMPROP REPEAT RERANDOM
RIGHT ROUND RUN
RT SAVE SAVEPIC
SCREENFACTS SENTENCE SETBG
SF SE SETCURSOR
SETD SETHEADING SETPAN
SETPC SETH SETPEN
SETPOS SETPREC SETREAD
SETRES SETSCRUNCH SETSPLIT
SETWRITE SETX SETY
SETZOOM SHOW SHOWTURTLE
SHUFFLE SIN ST
SORT SPLITSCREEN SQRT
STOP SS SUM
TAN TEST TEXT
TEXTSCREEN THING THROW
TS TO TONES
TOWARDS TRACE TURTLEFACTS
TURTLETEXT TYPE TF
TT UNBURY UPPERCASE
WAIT WATCH UC
WHERE WINDOW WORD
WORDP WRAP WRITER
* + -
/ < <=
<> = =<
=> > >=
>< .COLOROFF .COLORON
.CONTENTS .DEPOSIT .EXAMINE
.IN .OUT .REPLACE
.REPTAIL .SETSEG


ABS
---

ABS n

Outputs the absolute value of the input number.

?ABS -3
3


ALLOPEN
-------

ALLOPEN

Outputs a list of all data files currently open.

?ALLOPEN


AND
---

AND pred_exp (...)

Outputs TRUE if all input predicate expressions output true;
otherwise outputs FALSE.

?AND (3<4) (7>4)
TRUE


ARCTAN
------

ARCTAN n

Outputs the arc tangent (inverse tangent) of the input number.

?ARCTAN 2
63.434948822922


ASCII
-----

ASCII word

Outputs the ASCII value of the first character in the input
word.

?ASCII "G
71


BK
--

BK distance_n

Moves the turtle the input number of steps in the opposite
direction of its heading.

?BK 50


BURY
----

BURY pkgname | pkgname_list

Hides the specified package(s) from subsequent work space
management commands: EDALL, EDNS, EDPS, ERALL, ERNS, ERPS,
GLIST, POALL, PONS, POPS, POTS, PPS, SAVE

?BURY LTRPACK


BF
--

BF object

Outputs all but the first element in the input object.

?BF "SMILES
MILES


BL
--

BL object

Outputs all but the last element in the input object.

?BL [1 2 3 4]
[1 2 3]


BUTTONP
-------

BUTTONP paddle_n

Outputs TRUE if the button on the specified paddle or joystick
is down; otherwise outputs FALSE. Paddle buttons are specified
by numbers 0, 1, 2, or 3.

0 = button 1, paddle 1
1 = button 2, paddle 1

2 = button 1, paddle 2
3 = button 2, paddle 2

?BUTTONP 0


BYE
---

BYE

Exits current session of Dr. Logo.

?BYE


CATCH
-----

CATCH name instr_list

Runs instr_list until THROW identifies an error or special
condition; control returns to CATCH and executes the line
following it. TRUE and ERROR are two special names to use with
CATCH.

?CATCH "ERROR [+ [] []]
PR [ I AM HERE ]
I AM HERE


CHANGEF
-------

CHANGEF new_fname old_fname

Changes the name of a file in the disk directory.

?CHANGEF "NEWFILE "OLDFILE


CHAR
----

CHAR n

Outputs the character whose ASCII value is the input number.

?CHAR 83
S


CLEAN
-----

CLEAN

Erases the viewport without affecting the turtle.

?CLEAN


CS
--

CS

Erases the viewport and puts the turtle at [0 0] heading 0
(north) with the pen down.

?CS


CT
--

CT

Erases all text in the text window and positions the cursor in
the upper-left corner of the window.

?CT


CLOSE
-----

CLOSE fname

Closes the named data file.

?CLOSE "LETTERS


CLOSEALL
--------

CLOSEALL

Closes all the data files currently open.

?CLOSEALL


CO
--

CO <object>

Ends a pause caused by PAUSE, a Ctrl-Z keystroke, or ERRACT.

?CO


COPYDEF
-------

COPYDEF new_procname old_procname

Makes a copy of a procedure definition with another name.

?COPYDEF "square "box


COPYOFF
-------

COPYOFF

Stops echoing text at the printer.

?COPYOFF


COPYON
------

COPYON

Starts echoing text at the printer.

?COPYON


COS
---

COS degrees_n

Outputs the cosine of the input number of degrees.

?COS 60
0.5


COUNT
-----

COUNT object

Outputs the number of elements in the input object.

?COUNT "six
3


CURSOR
------

CURSOR

Outputs a coordinate list, [x y], that contains the column and
line numbers of the cursor's position within the text window.

?CURSOR


DEFAULTD
--------

DEFAULTD

Outputs the name of the current default drive.

?DEFAULTD
A:


DEFINE
------

DEFINE procname defin_list

Makes the input definition list the definition of the specified
procedure name.

?DEFINE "SAY.Hi [[] [PR [Hi!]]
?SAY.Hi
Hi!


DEFINEDP
--------

DEFINEDP object

Outputs TRUE if the input name identifies a defined procedure;
otherwise outputs FALSE.

?DEFINEDP "SAY.Hi
TRUE


DEGREES
-------

DEGREES radians_n

Outputs the number of degrees in the input number of radians.

?DEGREES 25
1432.39448782706


DIR
---

DIR <fname>

Outputs a list of Dr. Logo file names on the default or
specified disk; accepts an ambiguous file name.

?DIR
[KETCHAM.LOG]


DIRPIC
------

DIRPIC <fname>

Outputs a list of picture files on the default or specified
disk; accepts an ambiguous file name.

?DIRPIC
[FLOWER.PIC FACE.PIC SQUARE.PIC]


DOT
---

DOT coord_list

Plots a dot at the position specified by the input coordinate
list using the current pencolor and penstate.

?DOT [50 10]


DOTC
----

DOTC coord_list

Outputs the color number of the dot at the coordinates
specified, or -1 if the location is not on the graphic viewport.

?DOTC [50 10]
2


ED
--

ED <name | name_list>

Loads the specified procedure(s) and/or variable(s) into the
text editor's buffer.

?ED "BOX


EDALL
-----

EDALL <pkgname | pkgname_list>

Loads all the procedures and variables in the workspace or the
specified package(s) into the text editor's buffer.

?EDALL "DRAW.PACK


EDF
---

EDF fname

Loads the specified disk file into the text editor's buffer or
creates a new file and enters the text editor with an empty
buffer.

?EDF "STARTUP


EDNS
----

EDNS <pkgname | pkgname_list>

Loads all the variables in the workspace or the specified
package(s) into the text editor's buffer.

?EDNS "PRACTICE


EDPS
----

EDPS <pkgname | pkgname_list>

Loads all the procedures in the workspace or specified
package(s) into the text editor's buffer.

?EDPS "PLAYPACK


EFORM
-----

EFORM n1 n2

Outputs n1 in scientific notation, using n2 digits. n2 must be a
positive, real number from 1 through 15.

?EFORM 1.2 1
1.E+000


EMPTYP
------

EMPTYP object

Outputs TRUE if the input object is an empty word or an empty
list; otherwise outputs FALSE.

?EMPTYP "
TRUE


END
---

END

Signals the end of a procedure definition.

?TO SQUARE
>REPEAT 4 [FD 50 RT 90]
>END


EQUALP
------

EQUALP object object

Outputs TRUE if input objects are equal numbers, identical words
or identical lists; otherwise outputs FALSE.

?EQUALP "POP "POP
TRUE


ER
--

ER procname | procname_list

Erases the specified unburied procedure(s) from the workspace.

?ER "BOX


ERALL
-----

ERALL <pkgname | pkgname_list>

Erases all the unburied procedures and variables from the
workspace or the specified unburied package(s).

?ERALL


ERASEFILE
---------

ERASEFILE fname

Erases the specified disk file; accepts an ambiguous file name.

?ERASEFILE "BEAR.


ERASEPIC
--------

ERASEPIC fname

Erases the specified picture file(s); accepts an ambiguous file
name.

?ERASEPIC "D???????


ERN
---

ERN varname | varname_list

Erases the specified unburied variable(s) from the workspace.

?ERN [SIDE ANGLE]


ERNS
----

ERNS <pkgname | pkgname_list>

Erases all unburied variables from the workspace or the
specified unburied package(s).

?ERNS "MEDIUM


ERPS
----

ERPS <pkgname | pkgname_list>

Erases all unburied procedures from the workspace or the
specified unburied package(s).

?ERPS [DRAW.PACK MOVE.PACK]


ERROR
-----

ERROR

Outputs a list whose elements describe the most recent error.

?ERROR


EXP
---

EXP n

Outputs the natural exponent of the input number.

?EXP 1
2.7182818284545


FD
--

FD distance_n

Moves turtle the input number of steps in the direction of its
current heading.

?FD 100


FENCE
-----

FENCE

Establishes a boundary that limits the turtle to plotting within
the viewport.

?FENCE


FILL
----

FILL

Fills an area with the current pencolor by changing the dot
under the turtle (and all horizontally and vertically contiguous
dots of the same color) to the current pencolor, using the
current penstate.

?FILL


FIRST
-----

FIRST object

Outputs the first element of the input object.

?FIRST "ZEBRA
Z


FOLLOW
------

FOLLOW procname procname

Reorganizes the workspace so the first input-named procedure is
followed by the second. It changes the order in which the
procedures are displayed.

?FOLLOW "BUZZ "ZOOM


FORM
----

FORM n1 n2 <n3>

Outputs a number, n1, with n2 digits before the decimal and n3
after it. n1 must be a positive, real number from 1 through 15.
If n1 is not an integer, it is rounded to the nearest integer.
If n3 is omitted, it is assumed to be zero and the decimal point
and any digits after it are not printed.

?FORM 1.234 2
1


FPUT
----

FPUT object object

Outputs a new object formed by making the first input object the
first element in the second input object.

?FPUT "S "MILES
SMILES


FS
--

FS

Changes the viewport mode from SPLITSCREEN or TEXTSCREEN and
dedicates the monitor to graphics.

?FS


GLIST
-----

GLIST prop <pkgname | pkgname_list>

Outputs a list of all objects in the workspace or specified
package(s) that have the input property in their property lists.

?GLIST ".DEF


GO
--

GO word

Executes the line within the current procedure following a LABEL
expression with the same input word.

?GO "LOOP


GPROP
-----

GPROP name prop

Outputs the value of the named property of the named object.

?GPROP "HEIGHT ".APV
72


HEADING
-------

HEADING

Outputs the turtle's current heading as a real number from 0
through 359 that is a compass heading.

?HEADING
126


HELP
----

HELP <primname>

Without an input displays the instructions on how to use the
HELP facility and a list of the primitives. Specify a primitive
name and you get a display of the primitive definition, a
description of the primitive, and a short example.

?HELP


HOME
----

HOME

Returns the turtle to position [0 0] heading 0 (north).

?HOME


HT
--

HT

Makes the turtle invisible, which speeds and clarifies the drawing.

?HT


IF
--

IF pred_exp instr_list <instr_list>

Executes one of two literal instruction lists depending on the
value of the input predicate expression.

?IF (A > B)
[PR [A IS BIGGER]]
[PR [B IS BIGGER]]


IFF
---

IFF instr_list

Executes the input instruction list if the most recent TEST
expression was FALSE.

?IFF [PR [TAILS YOU LOSE!] STOP]


IFT
---

IFT instr_list

Executes the input instruction list if the most recent TEST
expression was TRUE.

?IFT [TYPE "HEADS]


INT
---

INT n

Outputs the integer portion of the input number.

?INT 3.33
3


ITEM
----

ITEM n object

Outputs the specified element of the input object.


?ITEM 4 "DWARF
R


KEYP
----

KEYP

Outputs TRUE if a character has been typed at the keyboard and
is waiting to be read.

?KEYP


LABEL
-----

LABEL word

Identifies the line to be executed after a GO expression with
the input word.

?LABEL "LOOP


LAST
----

LAST object

Outputs the last element of the input object.

?LAST [0 2 4]
4


LC
--

LC word

Outputs the input word with all alphabetic characters in lower
case.

?LC "SOUTH
south


LT
--

LT degrees_n

Rotates the turtle the input number of degrees to the left.

?LT 90


LIST
----

LIST object object (...)

Outputs a list made up of the input objects, retains the lists'
outer brackets.

?LIST "BIG [FEET]
[BIG [FEET]]


LISTP
-----

LISTP object

Outputs TRUE if the input object is a list; otherwise outputs
FALSE.

?LISTP "WORD
FALSE


LOAD
----

LOAD fname <pkgname>

Reads the input-named Dr. Logo file (file type LOG) from the
disk into the workspace; optionally packages the file into the
input named package.

?LOAD "SIMPLE


LOADPIC
-------

LOADPIC fname

Paints the graphic design saved in the input-named picture file
onto the graphic viewport.

?LOADPIC "B:DESIGNS


LOCAL
-----

LOCAL varname (...)

Makes the input-named variable(s) accessible only to the current
procedure and the procedures it calls.

?LOCAL "X "Y


LOG
---

LOG n

Outputs the natural logarithm of the input number.

?LOG 2
0.693147180559945


LOG10
-----

LOG10 n

Outputs the base 10 common logarithm of the input number.

?LOG10 100
2


LPEN
----

LPEN

Outputs a coordinate list, [x y], that indicates the position of
the light pen. LPEN is only valid after LPENP returns TRUE.

?LPEN


LPENP
-----

LPENP

Outputs TRUE if lightpen input is waiting to be read.

?LPENP


LPUT
----

LPUT object object

Outputs a new object formed by making the first input object the
last element in the second input object.

?LPUT 4 [1 2 3]
[1 2 3 4]


MAKE
----

MAKE varname object

Makes the input-named variable the value of the input object.

?MAKE "SIDE 50


MEMBERP
-------

MEMBERP object object

Outputs TRUE if the first input object is an element of the
second input object; otherwise outputs FALSE.

?MEMBERP "Y "ONLY
TRUE


NAME
----

NAME object varname

Makes the input object the value of the input-named variable.

?NAME 50 "SIDE


NAMEP
-----

NAMEP word

Outputs TRUE if the input word identifies a defined variable;
otherwise outputs FALSE.

?NAMEP "FLAVOR
TRUE


NODES
-----

NODES

Outputs the number of free nodes in the workspace; 1 node = 4
bytes.

?NODES
2684


NOFORMAT
--------

NOFORMAT

Removes procedure formatting, including comments, from the
workspace.

?NOFORMAT


NOT
---

NOT pred_exp

Outputs TRUE if the input predicate expression is FALSE; FALSE
if the input predicate is TRUE.

?NOT (3 = 4)
TRUE


NOTRACE
-------

NOTRACE

Turns off trace monitoring of procedure execution.

?NOTRACE


NOWATCH
-------

NOWATCH <procname | procname_list>

Turns off watch monitoring of all or specified procedure(s).

?NOWATCH


NUMBERP
-------

NUMBERP object

Outputs TRUE if the input object is a number; otherwise outputs
FALSE.

?NUMBERP "TWO
FALSE


OP
--

OP object

Makes input object the output of the procedure and exits the
procedure at that point. The following example outputs from
within a procedure.

IF 24 = 4 * 6 [OP "TRUE]
TRUE


OPEN
----

OPEN fname | device

Open the file or device to send or receive characters. OPEN must
be used before accessing data in a file.

?OPEN "LETTERS


OR
--

OR pred_exp pred_exp (...)

Outputs FALSE if all input predicate expressions output FALSE;
otherwise outputs TRUE.

?OR "TRUE (1+3)
TRUE


PACKAGE
-------

PACKAGE pkgname name | name_list

Puts the name(s) into the input named package.

?PACKAGE "SIZES [BIG MEDIUM SMALL]


PADDLE
------

PADDLE n

Outputs a number that represents a paddle or joystick input
coordinate. The number returns:

0 = x coordinate of paddle 1
1 = y coordinate of paddle 1

2 = x coordinate of paddle 2
3 = y coordinate of paddle 2

?PADDLE 2


PAUSE
-----

PAUSE

Suspends the execution of the current procedure to allow
interaction with the interpreter or editor.

?PAUSE


PD
--

PD

Puts the turtle's pen down; the turtle resumes drawing.

?PD


PE
--

PE

Makes the turtle draw in the background color; the turtle erases
drawn lines.

?PE


PU
--

PU

Picks the turtle's pen up; the turtle stops drawing.

?PU


PI
--

PI

Outputs the value of pi.

?PI
3.14159265358979


PIECE
-----

PIECE n n object

Outputs an object that contains the specified elements of the
input object.

?PIECE 3 6 "INDUSTRY
DUST


PKGALL
------

PKGALL pkgname

Puts all procedures and variables not already in packages into
the specified package.

?PKGALL "OTHER


PLIST
-----

PLIST name

Outputs the property list of the input-named object.


?PLIST "BIRD
[.APV BLUE]


PO
--

PO name | name_list

Displays the definition(s) of the specified procedure(s) or
variable(s).

?PO "SQUARE
TO SQUARE :SIZE
REPEAT 4 [FD :SIZE RT 90]
END


POALL
-----

POALL <pkgname | pkgname_list>

Displays the definitions of all procedures and variables in the
workspace or in the specified package(s).

?POALL


POCALL
------

POCALL procname

Displays the names of the procedures called by the input-named
procedure.

?POCALL


PONS
----

PONS <pkgname | pkgname_list>

Displays the names and values of all variables in the workspace
or the specified package(s).

?PONS


POPKG
-----

POPKG <pkgname | pkgname_list>

Displays the name and contents of each or the specified
package(s).

?POPKG


POPS
----

POPS <pkgname | pkgname_list>

Displays the names and definitions of all procedures in the
workspace or the specified package(s).

?POPS


POREF
-----

POREF procname | procname_list

Displays the names of the procedures that call the input-named
procedure(s).

?POREF "TRIANGLE
TO FLAG


POTL
----

POTL

Displays the names of the TOPLEVEL procedures, procedures not
called by any other procedure in the workspace.

?POTL


POS
---

POS

Outputs a coordinate list of the turtle's current position.

?POS


POTS
----

POTS <pkgname | pkgname_list>

Displays the names and inputs of all procedures in the workspace
or the specified package(s).

?POTS


PPROP
-----

PPROP name propname prop.val

Puts the input property pair into the name's property list.

?PPROP "DUNGEONMASTER ".APV "SCOTT


PPS
---

PPS <pkgname | pkgname_list>

Displays the non-system property pairs of all objects in the
workspace or the specified package(s).

?PPS
KATHY'S EXTENSION is 82


PR
--

PR object (...)

Outputs the input object(s) on the text window, file or device.
PRINT removes lists' outer brackets and follows last input with
a carriage return.

?PRINT [A B C]
A B C


PREC
----

PREC

Outputs the number of significant digits displayed in an output
number.

?PREC
6


PRIMITIVEP
----------

PRIMITIVEP object

Outputs TRUE if the input object is a primitive name; otherwise
outputs FALSE.

?PRIMITIVEP "TEST
TRUE


PROCLIST
--------

PROCLIST

Outputs a list that contains the names of all defined
procedures.

?PROCLIST


PRODUCT
-------

PRODUCT n n (...)

Outputs the product of the input numbers.

?PRODUCT 7 6
42


PX
--

PX

Makes the turtle change the color of any previously colored
pixel in its trail to the reverse or logical color complement.

?PX


QUOTIENT
--------

QUOTIENT n n

Outputs the integer quotient of the two input numbers and
truncates the input numbers to integers before dividing.

?QUOTIENT 10 4
2


RADIANS
-------

RADIANS degrees_n

Outputs the number of radians in the input number of degrees.

?RADIANS 90
1.5707963267949


RANDOM
------

RANDOM n

Outputs a random non-negative integer less than the input
number.

?RANDOM 20
9


RC
--

RC

Outputs the first character typed at the keyboard or input from
a file or device.

?RC
Z


READEOFP
--------

READEOFP

Outputs TRUE if the current data file is at the end; otherwise
outputs FALSE. You must use OPEN and SETREAD before you use
READEOFP.

?OPEN "TELNOS
?SETREAD "TELNOS
?READEOFP
FALSE


READER
------

READER

Outputs the current file name that is open for reading.

?READER
[A:BOOKLIST.DAT]


RECYCLE
-------

RECYCLE

Frees as many nodes as possible and reorganizes the
workspace.

?RECYCLE


REMAINDER
---------

REMAINDER n n

Outputs the integer remainder obtained when the first input
number is divided by the second.

?REMAINDER 7 3
1


REMPROP
-------

REMPROP name prop

Removes the specified property from the name's property list.

?REMPROP "PACK "COLOR


REPEAT
------

REPEAT n instr_list

Executes the input instruction list the input
number of times.

?REPEAT 4 [FD 50 RT 90]


RERANDOM
--------

RERANDOM

Makes a subsequent RANDOM or SHUFFLE expression reproduce the
same random sequence.

?RERANDOM


RL
--

RL

Outputs a list that contains a line typed at the keyboard (input
must be followed by a carriage return) or input from a file.

?RL 1 2 3
[1 2 3]


RQ
--

RQ

Outputs a word that contains a line typed at the keyboard (input
must be followed by a carriage return) or input from a file.

?RQ
1 2 3
1 2 3


RT
--

RT degrees_n

Rotates the turtle the input number of degrees to the right.

?RT 45


ROUND
-----

ROUND n

Outputs the input number rounded off to the nearest integer.

?ROUND 3.333
3


RUN
---

RUN instr_list

Executes the input instruction list.

?RUN [PR 1]
1


SAVE
----

SAVE fname <pkgname | pkgname_list>

Writes the contents of the workspace or specified package(s) to
the input named disk file. With just fname specified, SAVE
writes all procedures and variables except those in buried
packages. With two inputs, SAVE copies all procedure definitions
as well as MAKE, PPROP, and PACKAGE command assignments.

?SAVE "ABC


SAVEPIC
-------

SAVEPIC fname

Writes the contents of the viewport to the input-named picture
file.

?SAVEPIC "DESIGN3


SE
--

SE object object (...)

Outputs a list made up of the input objects, removes lists'
outer brackets.

?SE "HARE [RABBIT BUNNY]
[HARE RABBIT BUNNY]


SETBG
-----

SETBG color_n

Sets the viewport background to the color represented by the
input number.

?SETBG 1


SETCURSOR
---------

SETCURSOR coord_list

Positions the cursor at the location specified by the input text
window coordinate list.

?SETCURSOR [50 10]


SETD
----

SETD d:

Makes the specified drive the default drive.

?SETD "B:


SETH
----

SETH degrees_n

Turns the turtle to the absolute heading specified by the input
number of degrees; positive numbers turn the turtle clockwise;
negative numbers counter-clockwise.

?SETH 90


SETPAN
------

SETPAN coord_list

Establishes the center point of the viewport.

?SETPAN [50 50]


SETPC
-----

SETPC color_n

Sets the turtle's pen to the color specified by the input color
number.

?SETPC 2


SETPEN
------

SETPEN list

Sets the turtle's pen to the state and color specified in the
input list.

?SETPEN [PD 2]


SETPOS
------

SETPOS coord_list

Moves the turtle to the position specified in the input
coordinate list.

?SETPOS [0 0]


SETPREC
-------

SETPREC n

Sets the number of significant digits displayed in an output
number.

?SETPREC 10


SETREAD
-------

SETREAD fname

Sets the data file from which to receive input. After this
command you use READLIST, READCHAR, and READQUOTE to read the
data from the file or device.

?OPEN "TELNOS
?SETREAD "TELNOS
?READLIST
[TERRY CLOTH]


SETRES
------

SETRES n

Sets the resolution of the viewport. Available resolutions are 0
(high), 1 (medium), and 2 (low - only on the PCjr). Changes the
default and maximum values for many of the parameters that
effect the appearance of your text and graphic displays.

?SETRES 1


SETSCRUNCH
----------

SETSCRUNCH n

Sets the viewport vertical aspect ratio to the input number that
can be from 1 through 5.

?SETSCRUNCH 5


SETSPLIT
--------

SETSPLIT n

Sets the number of lines in the splitscreen's text window; the
input number must be from 1 through 5.

?SETSPLIT 3


SETWRITE
--------

SETWRITE fname | device

Sets the destination of outputs from PRINT, TYPE, and SHOW to
the data file or system device. The file or device must already
be open. SETWRITE sets the file position at top of the file.

?OPEN "PHONES
?SETWRITE "PHONES


SETX
----

SETX n

Moves the turtle horizontally to the x coordinate specified by
the input number.

?SETX -50


SETY
----

SETY n

Moves the turtle vertically to the y coordinate specified by the
input number.

?SETY 90


SETZOOM
-------

SETZOOM n

Causes the viewport to show a greater or lesser portion of the
graphic plane, thereby expanding or contracting subsequent
turtle motion. Doesn't clear the viewport nor alter anything
previously drawn.

?SETZOOM 2


SF
--

SF

Outputs a list that contains: Background color number of the
viewport; Screen state; Split size; Window state; Scrunch ratio;
Zoom factor; X-coordinate and y-coordinate of viewport center;
Current resolution setting.

?SF
[2 SS 25 WRAP 2 2 100 100 2]


SHOW
----

SHOW object

Outputs the input object on the text window or to a file or
device. SHOW retains the list's outer brackets, follows the
input with a carriage return.

?SHOW [A B C]
[A B C]


SHUFFLE
-------

SHUFFLE list

Outputs a list that contains the elements of the input list in
random order.

?SHUFFLE [1 2 3 4]
[3 2 4 1]


SIN
---

SIN degrees_n

Outputs the sine of the input number of degrees.

?SIN 30
0.5


SORT
----

SORT list

Outputs a list of input words sorted into ascending order.

?SORT [Z 2 T * A 4]
[* 2 4 A T Z]


SQRT
----

SQRT n

Outputs the square root of the input number.

?SQRT 25
5


SS
--

SS

Displays a window of text on the graphic viewport.

?SS


ST
--

ST

Makes the turtle visible if hidden.

?ST


STOP
----

STOP

Stops the execution of the current procedure and returns to
TOPLEVEL.

?STOP


SUM
---

SUM n n (...)

Outputs the sum of the input numbers.

?SUM 5 9
14


TAN
---

TAN degrees_n

Outputs the tangent of the input angle.

?TAN 45
1


TEST
----

TEST pred_exp

Remembers whether the input predicate is TRUE or FALSE for
subsequent IFF or IFT expressions.

?TEST 2 = 2


TEXT
----

TEXT procname

Outputs the definition list of the specified procedure.

?TEXT "SQUARE


TF
--

TF

Outputs a list that contains: Turtle's x coordinate; Turtle's y
coordinate; Turtle's heading; Penstate; Pen's color number; TRUE
if the turtle is visible, FALSE if not.

?TF
[15 30 60 PE 3 FALSE]


THING
-----

THING varname

Outputs the value of the input-named variable.

?THING "FLAVOR
CHOCOLATE


THROW
-----

THROW name

Executes the line identified by the input name in a previous
CATCH expression.

?THROW "CUSTOM.ERROR


TO
--

TO procname <inputs>

Indicates the beginning of a procedure definition.

?TO SQUARE
>REPEAT 4 [FD 50 RT 90]
>END


TONES
-----

TONES note_list

Outputs a note of the frequency and duration specified in the
input note_list.

?TONES [440 440]


TOWARDS
-------

TOWARDS coord_list

Outputs a heading that would make the turtle face the position
specified in the input coordinate list.

?TOWARDS [20 10]


TRACE
-----

TRACE

Turns on trace monitoring of procedure execution and variable
assignment; displays the name of each procedure as it is called
and the name and value of each variable as it is defined.

?TRACE


TS
--

TS

Selects a full text window.

?TS


TT
--

TT object (...)

Displays the input object(s) on the graphic viewport at the
character position closest to the turtle's position using the
current pen color and state. TT removes the outer brackets from
any input list and does not move the turtle.

?TT "HOME FORWARD 10


TYPE
----

TYPE object (...)

Outputs the input object(s) on the text window to a data file or
system device. TYPE removes lists' outer brackets; does not
follow last input with a carriage return.

?TYPE [a b c]
a b c


UNBURY
------

UNBURY pkgname | pkgname_list

Restores the specified package(s) to workspace management
commands.

?UNBURY "TITLES


UC
--

UC word

Outputs the input word with all alphabetic characters in
uppercase.

?UC "Shawn
SHAWN


WAIT
----

WAIT n

Delays procedure execution for the amount of time specified by
the input number.

?WAIT 50


WATCH
-----

WATCH <procname | procname_list>

Turns on the expression-by-expression procedure execution
monitor that pauses before the execution of each statement, to
allow interaction with the interpreter or editor.

?WATCH


WHERE
-----

WHERE

Outputs the item number of the most recent successful MEMBERP
expression.

?MEMBERP "R [Q R S]
TRUE
?WHERE
2


WINDOW
------

WINDOW

Allows the turtle to plot outside the viewport after a WRAP or
FENCE expression.

?WINDOW


WORD
----

WORD word word (...)

Outputs a word made up of the input words.

?WORD "SUN "SHINE
SUNSHINE


WORDP
-----

WORDP object

Outputs TRUE if the input object is a word or a number;
otherwise outputs FALSE.

?WORDP "Narnia
TRUE


WRAP
----

WRAP

Makes the turtle reappear on the opposite side of the viewport
when it exceeds the boundary.

?WRAP


WRITER
------

WRITER

Outputs the current data file that is open for writing.

?WRITER
[A:ADDRESS.DAT]


XCOR
----

XCOR

Outputs the x coordinate of the turtle's current position.

?XCOR
19


YCOR
----

YCOR

Outputs the y coordinate of the turtle's current position.

?YCOR
-19


* (Multiply)
------------

* a b (...) or a * b

This prefix or infix primitive and delimiter outputs the product
of the input numbers.

?4 * 6
24


+ (Plus)
--------

+ a b (...) or a + b

This prefix or infix primitive and delimiter outputs the sum of
the input numbers.

?2 + 2
4


- (Minus)
---------

- a b or a - b

This prefix or infix primitive and delimiter outputs the
difference of the two input numbers.

?10 - 5
5


/ (Divide)
----------

/ a b or a / b

This prefix or infix primitive and delimiter outputs the decimal
quotient of the two input numbers.

?25/5
5


< (Less than)
-------------

< a b or a < b

This prefix or infix primitive and delimiter outputs TRUE if the
first input word is less than the second, otherwise outputs
FALSE.

?13 < 27
TRUE


<= (Less or equal)
------------------

<= a b or a <= b

This prefix or infix primitive and delimiter outputs TRUE if the
first input word is less than or equal to the second, otherwise
outputs FALSE and is a synonym for =<.

?13 <= 27
TRUE


=< (Equal or less)
------------------

=< a b or a =< b

This prefix or infix primitive and delimiter outputs TRUE if the
first input word is less than or equal to the second, otherwise
outputs FALSE and is a synonym for <=.

?13 =< 27
TRUE


<> (Not equal)
--------------

<> a b or a <> b

This prefix or infix primitive and delimiter outputs TRUE if the
two objects are not equal, otherwise outputs FALSE and is a
synonym for ><.

?<>1 2
TRUE


= (Equal)
---------

= a b or a = b

This prefix or infix primitive and delimiter outputs TRUE if the
two input objects are equal, otherwise outputs FALSE.

?1 = 2

FALSE


> (Greater than)
----------------

> a b or a > b

This prefix or infix primitive and delimiter outputs TRUE if the
first input word is greater than the second, otherwise outputs
FALSE.

?20 > 19
TRUE


=> (Equal or greater)
---------------------

=> a b or a => b

This prefix or infix primitive and delimiter outputs TRUE if the
first input word is greater-than or equal to the second,
otherwise outputs FALSE and is a synonym for >=.

?3 => 1
TRUE


>= (Greater or equal)
---------------------

>= a b or a >= b

This prefix or infix primitive outputs TRUE if the first input
word is greater-than or equal to the second, otherwise outputs
FALSE and is a synonym for =>.

?>=3 4
FALSE


>< (Not equal)
--------------

>< a b or a >< b

This prefix or infix primitive and delimiter outputs TRUE if the
two objects are not equal, otherwise outputs FALSE and is a
synonym for <>.

<>1 2
TRUE


BACK
----

BACK distance_n

Moves the turtle the input number of steps in the opposite
direction of its heading.

?BACK 50


BUTFIRST
--------

BUTFIRST object

Outputs all but the first element in the input object.

?BUTFIRST "SMILES
MILES


BUTLAST
-------

BUTLAST object

Outputs all but the last element in the input object.

?BUTLAST [1 2 3 4]
[1 2 3]


CLEARSCREEN
-----------

CLEARSCREEN

Erases the viewport and puts the turtle at [0 0] heading 0
(north) with the pen down.

?CLEARSCREEN


CLEARTEXT
---------

CLEARTEXT

Erases all text in the window that currently contains the cursor
then positions the cursor in the upper-left corner of the
window.

?CLEARTEXT


EDIT
----

EDIT <name | name_list>

Loads the specified procedure(s) and/or variable(s) into the
text editor's buffer.

?EDIT "BOX


ERASE
-----

ERASE procname | procname_list

Erases the specified unburied procedure(s) from the workspace.

?ERASE "BOX


FORWARD
-------

FORWARD distance_n

Moves turtle the input number of steps in the direction of its
current heading.

?FORWARD 100


FULLSCREEN
----------

FULLSCREEN

Changes the viewport mode from SPLITSCREEN or TEXTSCREEN and
dedicates the monitor to graphics.

?FULLSCREEN


HIDETURTLE
----------

HIDETURTLE

Makes the turtle invisible; also speeds and clarifies the
drawing.

?HIDETURTLE


IFFALSE
-------

IFFALSE instr_list

Executes the input instruction list if the most recent test
expression was FALSE.

?IFFALSE [PR [TAILS YOU LOSE!] STOP]


IFTRUE
------

IFTRUE instr_list

Executes the input instruction list if the most recent test
expression was TRUE.

?IFTRUE [TYPE "HEADS]


LEFT
----

LEFT degrees_n

Rotates the turtle the input number of degrees to the left.

?LEFT 90


LOWERCASE
---------

LOWERCASE word

Outputs the input word with all alphabetic characters in lower
case.

?LOWERCASE "SOUTH
south


OUTPUT
------

OUTPUT object

Makes input object the output of the procedure and exits the
procedure at that point. The following example outputs from
within a procedure.

IF 24 = 4 * 6 [OUTPUT "TRUE]
TRUE


PENDOWN
-------

PENDOWN

Puts the turtle's pen down; the turtle resumes drawing.

?PENDOWN


PENERASE
--------

PENERASE

Makes the turtle draw in the background color; the turtle erases
drawn lines.

?PENERASE


PENREVERSE
----------

PENREVERSE

Makes the turtle change the color of any previously colored
pixel in its trail to the reverse or logical color complement.

?PENREVERSE


PENUP
-----

PENUP

Picks the turtle's pen up; the turtle stops drawing.

?PENUP


PRINT
-----

PRINT object (...)

Outputs the input object(s) on the text window, file or device.
PRINT removes lists' outer brackets and follows last input with
a carriage return.

?PRINT [A B C]
A B C


READCHAR
--------

READCHAR

Outputs the first character typed at the keyboard or input from
a file or device.

?READCHAR
Z


READLIST
--------

READLIST

Outputs a list that contains a line typed at the keyboard (input
must be followed by a carriage return) or input from a file or
device.

?READLIST
1 2 3
[1 2 3]


READQUOTE
---------

READQUOTE

Outputs a word that contains a line typed at the keyboard (input
must be followed by a carriage return) or input from a file or
device.

?READQUOTE
1 2 3
1 2 3


RIGHT
-----

RIGHT degrees_n

Rotates the turtle the input number of degrees to the right.

?RIGHT 45


SCREENFACTS
-----------

SCREENFACTS

Outputs a list that contains: Background color number of the
viewport; Screen state; Split size; Window state; Scrunch ratio;
Zoom factor; X-coordinate and y-coordinate of viewport center;
Current resolution setting.

?SCREENFACTS
[2 SS 25 WRAP 2 2 100 100 2]


SENTENCE
--------

SENTENCE object object (...)

Outputs a list made up of the input objects, removes lists'
outer brackets.

?SENTENCE "HARE [RABBIT BUNNY]
[HARE RABBIT BUNNY]


SETHEADING
----------

SETHEADING degrees_n

Turns the turtle to the absolute heading specified by the input
number of degrees; positive numbers turn the turtle clockwise;
negative numbers counter-clockwise.

?SETHEADING 90


SHOWTURTLE
----------

SHOWTURTLE

Makes the turtle visible if hidden.

?SHOWTURTLE


SPLITSCREEN
-----------

SPLITSCREEN

Displays a window of text on the viewport.

?SPLITSCREEN


TEXTSCREEN
----------

TEXTSCREEN

Selects a full text window.

?TEXTSCREEN


TURTLEFACTS
-----------

TURTLEFACTS

Outputs a list that contains: Turtle's x coordinate; Turtle's y
coordinate; Turtle's heading; Penstate; Pen's color number; TRUE
if the turtle is visible, FALSE if not.

?TURTLEFACTS
[15 30 60 PE 3 FALSE]


TURTLETEXT
----------

TURTLETEXT object (...)

Displays the input object(s) on the graphic viewport at the
character position closest to the turtle's position using the
current pen color and state. TURTLETEXT removes the outer
brackets from any input list and does not move the turtle.

?TURTLETEXT "HOME FORWARD 10


UPPERCASE
---------

UPPERCASE word

Outputs the input word with all alphabetic characters in
uppercase.

?UPPERCASE "Shawn
SHAWN


.COLOROFF
---------

.COLOROFF

Turns off the color burst signal when in medium resolution
(SETRES 1).

?.COLOROFF


.COLORON
--------

.COLORON

Turns on the color burst signal when in medium resolution
(SETRES 1).

?.COLORON


.CONTENTS
---------

.CONTENTS

Displays the contents of the Dr. Logo symbol space.

?.CONTENTS


.DEPOSIT
--------

.DEPOSIT n n

Puts the second input number into the memory location specified
by the first input number. This location is relative to the
absolute location established by .SETSEG. THIS PRIMITIVE SHOULD
BE USED WITH CAUTION!

?.DEPOSIT 22 7


.EXAMINE
--------

.EXAMINE n

Displays the contents (a byte value) of the memory location
specified by the input number. This location is relative to the
absolute location established by .SETSEG.

?.EXAMINE 22
0


.IN
---

.IN port_n

Displays the contents (a byte value) of the specified port. Port
numbers range from 0 through 65535.

?.IN 397
50


.OUT
----

.OUT port_n n

Assigns the input number (a byte value) to the specified port.
Port numbers range from 0 through 65535. THIS PRIMITIVE SHOULD
BE USED WITH CAUTION!

?.OUT 10 33


.REPLACE
--------

.REPLACE item_n varlist object

Replaces the specified item of the list with the object. The
list MUST be the value of a variable. THIS PRIMITIVE SHOULD BE
USED WITH CAUTION!

?MAKE "VARLIST [A B C D E F]
?.REPLACE 4 :VARLIST [1 2 3]
?:VARLIST
[A B C [1 2 3] E F]


.REPTAIL
--------

.REPTAIL item_n varlist object

Replaces all items following the specified item in the list with
the object. The list MUST be the value of a variable. THIS
PRIMITIVE SHOULD BE USED WITH CAUTION!

?MAKE "VARLIST [A B C D E F]
?.REPTAIL 4 :VARLIST [1 2 3]
?:VARLIST
[A B C D [1 2 3]]


.SETSEG
-------

.SETSEG segment_n

Sets segment value to be used by subsequent .DEPOSIT and
.EXAMINE expressions; does not change the segment register.

?.SETSEG 23


xyzzy
-----

June 29th 1984

The Wizards:

Steve Schmitt
Tim Oren
Joe Power

Gary Kildall

SHIP IT!!!


EOF


French Luser

unread,
Jan 10, 2005, 9:52:13 AM1/10/05
to
DRLOGO.TXT
----------

Ok. Now that John Elliott has discovered a version of Dr. Logo
for CP/M-86, it is time to see what must be done, so we need
first to review anything related to it.

Dr. Logo is Digital Research's Logo programming language.

I could write pages and pages about the various Programming
Languages developed by DRI, and why some were successful, and
others total flop.

I happen to have done quite a lot of work with Dr. Logo.

Believe me: it is a very good and powerful implementation of
Logo. For instance, I used to draw 3-Dimensional graphics with
it...

(Of course, at 4-MHz it was much slower than BASIC, but BASIC
had no imbedded graphics... Now that I have a custom 400-MHz
IBM Clown computer build only to run CP/M-86 Plus, this
limitation should be a thing of the past.)

I discovered Dr. Logo on the Amstrad PCW8256. It was supplied
with a 20-pages manual. The problem was that, when I was dumping
the interpreter, I could see much more "commands" in it than
documented in the manual: only about 1/4 of the commands!

For an 8-bit computer, it was quite powerful, but taking 40 Kb
on disk, and leaving only about 3000 "nodes" in the TPA. (Dr.
Logo counts its memory space not in bytes (4321 bytes left), but
in "nodes" which are 4-bytes long.)

So, I tried to learn more about it. The first thing that I
discovered was that the "Atari ST Logo" was the same
interpreter, but for the Atari 520ST. However, the Atari used
GEM, so its "interface" was totally different to the Good Old
command-line interface of CP/M and its "A>" prompt. And, in my
opinion, this 16-24 bits computer was barely faster than a good
8-bit CP/M system. (I could make circles around an Atari 520ST
with my color Epson QX-10.) So, exit the Atari 520ST.

During one of my trips to the headquarters of Digital Research
in Reading, England, I finally found the original Dr. Logo
binder. Mine, version 1.0, contains the following:

- "Read This First (+ "Dr. Logo Release Notes", First Edition:
September 1983)
- 2 copy-protected system disks
- "Meet Dr. Logo", First Edition: August 1983
- "Dr. Logo Reference Manual for the IBM PC", First Edition:
August 1983
- "Dr. Logo Command Summary", First Edition: August 1983

Now, I had a 16-bit documentation for an 8-bit program... and
there were many, many new commands! (This Dr. Logo binger is the
most packed binder in my collection of DRI binders. The Ref
Manual is very, very thick. Dr. Logo is a very big and powerful
implementation of Logo. It is not just "turtle-graphics"! You
can feel that Gary Kildall (who knew quite a lot about LISP) did
his best to provide (as he said) a better programming
environment than MBASIC, with just TRON and TROFF!

Unfortunately, there were 2 very, very big problems:

1) the disks were copy-protected. You booted from them and could
save your programs on floppies formatted by Dr. Logo, but I had
no idea of how to transfer programs, back then, except print and
retype them. (I had no CP/M-86 system, back then, only my North
Star Horizon, with its "hard-sectored" floppies...)

2) the IBM Clown was running at 4-MHz, back then. So, yes, Dr.
Logo could handle much bigger programs, and was much more
powerful to debug programs, but it was about the same speed as a
good 8-bit CP/M system (On the Epson QX-10, I finally found the
"Epson Mighty Logo" which used to the full the wonderful NEC uPD
7220 GDC chip, and could fill the screen with graphics almost
instantly, while they were drawn lines by lines on the IBM
Clown..., yet they were both running at 4-MHz!!! If you have
never experienced a better graphics chip than the one selected
by IBM for its Clown, you simply cannot understand how bad the
hardware of the IBM Clown is, and the influence it has had,
since then. I have never understood why people are buying IBM
Clowns.) and was so different from the 8-bit version that, with
no file transfer utility, it was a great bore to retype and
re-debug programs when transferring them from computer to
computer. So, after a while, I stopped using the IBM Clown
version, despite its power. It was simply too much "closed" by
its copy-protection.

So, you can imagine my surprise when John Elliott announced that
he has found a version of Dr. Logo for CP/M-86 on a little-known
English computer!

Now that I have a 400-MHz system, the speed penalty of using Dr.
Logo is gone. And CP/M-86 has many utilities enabling the
transfer of files to/from the IBM Clown (and then to you, via
the Internet). Long live open systems like CP/M-86 (Plus)!

Conclusion: If there is someone out there interested in CP/M-86,
the ressurrection of this powerful Programming Language, having
an in-built graphics capability, should generate a flurry of
graphics programs!... (And, if you are clever, most will run on
the Atari 520ST and Amstrad PCW8256... Portable graphics
programs!)

References:

- "Digital Research's DR Logo"
Gary Kidall & David Thornburg
BYTE, June 1983, p.208

- "Four Logos for the IBM PC"
Mark Bridger
BYTE, August 1983, p.287

- "Two Logos for the IBM PC"
Morton Goldberg
BYTE, Fall 1984, "BYTE Guide to the IBM PC", p.91

Over the years, I found 2 Americans fans of the Amstrad PCW8256
which had developed quite a lot of Dr. Logo programs:

- Jorma (Ray) Keto
Greencastle, MD 17225
(He was born in Finnland in 1918... I am afraid that he is
dead, now.)

- George Stephan
Plattsmouth, NE 68048
(Had lots of Logo books.)

Could one American checks their whereabouts? Their work would be
very valuable to anybody setting up a Web site dealing with Dr.
Logo. (Keto was spending his retirement programming incredible
graphics on his PCW. He was sending me a "PrintScreen" version
of his programs. Some of his letters contained dozens of feet of
screen dumping! Incredible! And his graphics were very varied,
too: he rarely repeated a pattern. But he rarely sent me his
source code... only the printouts. Let us hope that all his work
is not lost forever.) (If he managed to do so much with the
8-bit version, you can imagine what CP/M-86 (Plus) would gain by
getting a standard 16-bit graphics programming language...)

Before writing this message, I had a look to my stuff. I have 30
books about the Logo programming language. (BASIC is the only
other PL stack where I have more books.) Of course, most are of
the "entry-level turtle-graphics" kind, but some are real books
dealing with serious programming. (Logo is a general-purpose
high-level PL, not just limited to "turtle-graphics".) The
example that springs to mind is the 3 volumes by the MIT Press,
titled "Computer Science Logo Style". (If you have another
favorite book, like writing a compiler in Logo, let us know.)

I also have a stack of listings, with lists and lists (this is
funny, since Logo is an improvement on LISP, and its
"primitives" are specialized in dealing with lists, and I did
all my work by hand!) of the various commands available in the
various versions. Also, some screen dumps of 3-D graphics,
followed by their listings (my only complaint is that Logo does
not generate a blank line after each END). Finally, some
articles, or photocopies of articles, taken from computer
magazines of the time. Can you imagine an article explaining a
programming language in the so-called "computer magazines" of
now?

Finally, at the bottom of the stack, I found a rarity: a one
inch thick dump of Dr. Logo for the PCW. Not the standard dump
of the interpreter file, but a dump of the inners of Dr. Logo
made by one Logo program interpreted by it. The full 64K
addressable by the Z-80. Towards the top, you can see something
named "JOYLIOS"... (Ha! Those Old Time Hackers!...)

Logo was quite special in the history of computers. Me, I
discovered BASIC interpreters after working on IBM Mainframes
using COBOL compilers. I remember very well "Is Pascal the next
BASIC?" But Pascal was a compiler, and I never liked it. It was
strong on Mathematics, and weak on files. When I finally could
try Dr. Logo on the Amstrad PCW8256, I discovered a totally
different way of programming, something very similar to the
stack of Forth (in fact, most Logo "primitives" can be had
either "infix" or "prefix": this make a nice change from Forth's
"postfix"!). What Forth does on the stack, Logo does with
lists. Contrary to what most people thinked at the time (I
doubt that people continue to think, today), it is possible to
write unreadable Logo programs, that defy debugging. It is not
the answer to all questions. But, for some use, it is very
powerful and worth learning, if you want to increase your
knowledge and skills. (Unless, like Unix freaks, you think that
you can solve all problems with only one tool -- a
sledgehammer! They have never used Forth or APL! It is a
characteristics of ignorant people to believe that only one
solution can solve all problems. The biggest problem is, of
course, that those ignorant people REFUSE to learn another way
of thinking!)

Don't be afraid! Try (Dr.) Logo!

John Elliott

unread,
Jan 10, 2005, 5:02:34 PM1/10/05
to
French Luser <Bill....@microsoft.com> wrote:
: Finally, at the bottom of the stack, I found a rarity: a one

: inch thick dump of Dr. Logo for the PCW. Not the standard dump
: of the interpreter file, but a dump of the inners of Dr. Logo
: made by one Logo program interpreted by it. The full 64K
: addressable by the Z-80. Towards the top, you can see something
: named "JOYLIOS"... (Ha! Those Old Time Hackers!...)

JOYLIOS is an RSX which contains the PCW-specific graphics functions for
DR Logo. JOYLIOS, of course, stands for Joyce Logo Input/Output System. To
port the 8-bit version of Logo to another platform, you create a new LIOS
and attach it with GENCOM. My PCW emulator (JOYCE) includes one I wrote
called EMULIOS, which does 800x600x256 colour.
One odd thing about JOYLIOS is that after it's initialised, it jumps back
to the start of Logo rather than returning in the normal way. I think this
is because JOYLIOS dynamically works out the screen size, but Logo has
already started using the screen size before it called JOYLIOS. So once
JOYLIOS has calculated the size correctly, it jumps back to the start of
Logo.
There doesn't appear to be any LIOS-equivalent in Apricot F1 Logo, which
suggests that it was compiled specifically for the F1.

: (Unless, like Unix freaks, you think that


: you can solve all problems with only one tool -- a
: sledgehammer! They have never used Forth or APL! It is a
: characteristics of ignorant people to believe that only one
: solution can solve all problems. The biggest problem is, of
: course, that those ignorant people REFUSE to learn another way
: of thinking!)

Dear me, how unlike certain newsgroup posters who think they can solve all
problems by randomly insulting those from whom they want favours. Despite
the cluestick being applied on numerous occasions they refuse to learn
another way of thinking. And if you think Unix has only one tool, then
perhaps you'll explain...

% ls -1 /bin /usr/bin | wc -l
2619

... why I seem to have 2619 copies of this one tool?

--
John Elliott

French Luser

unread,
Jan 12, 2005, 8:59:40 AM1/12/05
to
Searching for "Dr. Logo", I found the following
on the Internet:

>Hello all,

>I just received a large lot of NEC APC III software and docs... (...)

>For the list, I'm willing to make copies of manuals or software. Disks I
>can mail no problem, manuals will require you to pay my copying costs (all
>manuals are a significant number of pages). Also, I'd need ZIP codes or
>country to estimate shipping. (...)

>The software is as follows:

>- Digital Research Logo ((c) 1984, "REV 00")

>- Digital Research DR Draw (1983)
>- Digital research DR Draw Fonts (1983)

>- GSX System Diskette (1984) rev 01
>- GSX Drivers Diskette (1984) rev 00
>- GSX System Diskette (1984) rev 03
>- GSX Drivers Diskette (1984) rev 01

>Manuals are (I have multiple copies of most of these):

>- DR Logo User's Reference Guide
>- Beginner's Guide to DR Logo

>- DR Draw User's Guide
>- GSX-86 User's Guide
>
>Thanks,
>Rich B.

Well...

Is anybody out there
who knows who this "Rich B." could be?

Besides Dr. Logo for CP/M-86, he seems
to have a rarity: DR Draw for CP/M-86...

Let us hope that we will hear more from him,
"before the harvest" (as they say in Suffolk).

Yours Sincerely,
"French Luser"

Rich

unread,
Jan 12, 2005, 8:51:28 PM1/12/05
to
French Luser wrote:
> Searching for "Dr. Logo", I found the following
> on the Internet:
>

<snippity...>

> Is anybody out there
> who knows who this "Rich B." could be?

He's me ... I think :-)

> Besides Dr. Logo for CP/M-86, he seems
> to have a rarity: DR Draw for CP/M-86...

BZZZTT! Thanks for playing anyway...

Both of these are for an NEC APC III, which is a not-quite IBM
compatible. The disks are readable in DOS, so I assume they are for
the weird version of DOS that runs on these beasts. Of course, I have
the docs and disks, but no computer! :-)

I also have DR Graph for the IBM PC, and a nice original copy of GEM/3
(with applications).

> Let us hope that we will hear more from him,
> "before the harvest" (as they say in Suffolk).

You have officially heard from me ... for what it is worth...

Rich B.

French Luser

unread,
Jan 14, 2005, 7:03:25 AM1/14/05
to
Hello, Rich!

> Both of these are for an NEC APC III, which is a not-quite IBM
> compatible. The disks are readable in DOS, so I assume they are for
> the weird version of DOS that runs on these beasts. Of course, I have
> the docs and disks, but no computer! :-)

Ok. We started talking about Dr. Logo. Could you make available
the files, and tell us what paper doc you have for it (I listed what
I have in my Dr. Logo binder)?

The same for DR Draw. Remember that we have only a copy
of the work disk of a German: all the font files (which were
not issued with the Amstrad 8-bit version, since the floppies
were too small to contain them...) are missing... (And tell us
what paper doc you have for DR Draw, to see if I need to retype
anything.)

> I also have DR Graph for the IBM PC, and a nice original copy of GEM/3
> (with applications).

Aaarrrggghhh!!! You have DR Graph!?!?!?

Come on, man, what are you waiting?...

I need it as soon as possible!!! DR Graph is THE
best example of what can be done with GSX!

Anybody interested in still using CP/M-86 (Plus)
needs it! (If only just to amaze Wintel Newbies!)

(As usual, tell us what paper doc, you have,
beside the files.)

Yours Sincerely,
"French Luser"

Rich

unread,
Jan 19, 2005, 9:49:44 PM1/19/05
to
French Luser wrote:
> Hello, Rich!
Hi...

> Ok. We started talking about Dr. Logo. Could you make available
> the files, and tell us what paper doc you have for it (I listed what
> I have in my Dr. Logo binder)?

<snip...>

> The same for DR Draw.

> (And tell us
> what paper doc you have for DR Draw, to see if I need to retype
> anything.)

<snip...>

> I need it as soon as possible!!! DR Graph is THE
> best example of what can be done with GSX!

> (As usual, tell us what paper doc, you have,
> beside the files.)

I will have to dig out the disks and docs to get a full list compiled.
Also, I'm not sure how this may help, since these files are for DOS,
and NOT for CP/M-86. I'll list them anyway, but I'm just warning you
they may be useless to you.

Also, this will take me several weeks to get to. I am in the middle of
a major home remodeling (kitchen, dining room, family room -- ARG!),
and have all of the fatherly duties for a 5-year old son and an 8-year
old son. This is somewhat low on the priority list, I'm afraid ...

I'll post the results in comp.os.cpm when I have them ... Please be
patient ....

Rich B.

French Luser

unread,
Jan 21, 2005, 6:28:02 AM1/21/05
to
Hello, Rich!

> I will have to dig out the disks and docs to get a full list compiled.
> Also, I'm not sure how this may help, since these files are for DOS,
> and NOT for CP/M-86. I'll list them anyway, but I'm just warning you
> they may be useless to you.

The big advantage with Digital Research was that they wrote
PORTABLE programming languages and applications.
So, even if the executable are for cough, cough MeSsy-DOS,
it will enable us to use those programs under one more OS.
As for the fonts of DR Draw, I am pretty sure that they are
the same for all versions.

Finally, there are some OSes from DRI that can run some
MeSsy-DOS programs: if DR Graph was found, it would
make DOS Plus a really useful system, a little bit
specialized in graphics: I have found WS4 and Mallard-86
BASIC for MeSys-DOS, GSX-86, DR Draw and DR Graph
have been waiting for one year in your pile of stuff...

Now, if only I could find their CP/M-86 versions!

> I'll post the results in comp.os.cpm when I have them ...

Ok. You are the only person in the world who has them...

Yours Sincerely,
"French Luser"

John Elliott

unread,
Jan 22, 2005, 8:28:43 AM1/22/05
to
John Elliott <j...@seasip.demon.co.uk> wrote:
: JOYLIOS is an RSX which contains the PCW-specific graphics functions for

: DR Logo. JOYLIOS, of course, stands for Joyce Logo Input/Output System. To
: port the 8-bit version of Logo to another platform, you create a new LIOS
: and attach it with GENCOM.

Actually, I'm no longer sure this is always the case. The version of DR Logo
for the CPC6128 does not have a LIOS RSX; it does everything as firmware
calls. This suggests that each version of DR Logo must have been compiled
for its target computer - either by Digital Research or by the OEM in
question. In which case, the reason the PCW version is written as an RSX is
so that it can be at the top of the TPA, and hence in common memory.

: There doesn't appear to be any LIOS-equivalent in Apricot F1 Logo, which


: suggests that it was compiled specifically for the F1.

The machine-specific bits of LOGO.CMD for the F1 are at the start of the
code segment; they run from CS:01E8 to CS:0DD4. They're roughly the same
functions as in 8-bit DR Logo, and in theory it would be possible to patch
IBM-compatible I/O over them. Arguments are passed on the stack, C-style.

CS:01E8 Initialise graphics
CS:0237 Terminate graphics
CS:0276 Select text screen
CS:027D Select split screen. One argument - the split line.
CS:0291 Read keyboard
CS:02AD Check if key pressed
CS:02C0 Output character to screen. One argument - the character.
CS:0308 Unknown
CS:0315 Clear text. Two arguments (first & last row to clear?)
CS:0342 Move text cursor. Two arguments.
CS:0364 Scroll text window. One argument.
CS:03A8 Plot a point. Three arguments (x,y,colour).
CS:03EF Draw a line. Five arguments (x1,y1,x2,y2,colour).
CS:042C Set background colour. One argument.
CS:0495 Clear graphics screen.
CS:0502 Get colour of pixel. Two arguments.
etc.

John Elliott

unread,
Feb 19, 2005, 2:05:13 PM2/19/05
to
John Elliott <j...@seasip.demon.co.uk> wrote:
: The machine-specific bits of LOGO.CMD for the F1 are at the start of the

: code segment; they run from CS:01E8 to CS:0DD4. They're roughly the same
: functions as in 8-bit DR Logo, and in theory it would be possible to patch
: IBM-compatible I/O over them.

I have now had a go at this; the result can be downloaded at
<http://www.seasip.demon.co.uk/Cpm/software/cpm86.html> (bottom of the
page).
The current patches are nothing to be proud of. They have the following
features:

* Tested on various PC emulators, under DOS Plus.
* Two VGA modes supported: 320x200 (SETRES 0) and 640x480 (SETRES 1).
* The following commands have not been adapted. Some retain their Apricot
functions and some have been commented out:
FILL, WAIT, TONES, SAVEPIC, LOADPIC.
Some of these do nothing. Others crash the PC.
* Nearly all functionality uses BIOS calls rather than direct hardware
programming. This can have a pretty poor effect on performance. As an
example, switch to 640x480 mode with SETRES 1. Wait for ages until the
"?" prompt appears. Type SETBG 2 and watch the background change colour,
with two BIOS calls per pixel.

The zipfile not only includes the patched version of Logo, it includes
source code for the patches and the program (LIOSMERG.EXE) which applies
them. So if anyone thinks they can do a better job, feel free.

French Luser

unread,
Feb 25, 2005, 6:44:05 AM2/25/05
to
VGALOGO.WS4 by Emmanuel ROCHE
-----------

Recently, John Elliott released VGALOGO.CMD, a version of Dr.
Logo for the (English) ACT Apricot F1e under Personal CP/M-86,
patched to use a VGA screen under CP/M-86.

Many years ago, as explained in the "Apricot PCP/M-86" thread of
the comp.os.cpm Newsgroup, I used the original copy-protected
Dr. Logo.

I was curious how different was the freely copiable version, so
downloaded and tried it.

A>vgalogo

Welcome to
Logo for the F1 19/04/85 (=19 April 1985)

Copyright (c) 1984, Digital Research
Pacific Grove, California

Dr. Logo is a trademark of
Digital Research

Serial No. XXXX-0000-654321

Please wait

?

First thing to do: check that we can exit properly.

?bye

It did not work! What is going on? This is how it worked on the
copy-protected IBM PC version (and the Amstrad PCW8256). Let us
try it in uppercase, just in case.

?BYE
A>

It worked! Amazing! By the way, let us have a look to the sample
Logo programs provided. This is what I suspected: all of them
are in uppercase. A quick look to my old Logo listings showed
that they were all in lowercase... So, VGALOGO seems to have a
"feature" which will have to be investigated further in the
future.

Back to VGALOGO.

A>vgalogo
(Don't forget to toggle this SHIFT key!)
?NODES
61066

Whaow! If we take a node to be 4 bytes, that means a workspace
of more than 238 KB! (Almost four 8-bit TPAs... or 4 times the
capacity of MBASIC-86) When was the last time you wrote a 238 KB
program with an interpreter under CP/M-86? The less that can be
said is that this is quite an improvement over the 15 KB of the
8-bit version of Dr. Logo...

I then had a look to the sample Logo programs. Since they all
display graphics, I will give their name and a short
explanation, rather than explain step-by-step how they work one
after another.

By the way, to load one Logo program into the workspace, you type

?LOAD "FILENAME

(?DIR gives you a list containing the Logo files present on the
default drive.)

STRING.LOG
Careful! When you load it, it displays the names of 2
procedures: STRING and PIC but, contrary to the filename under
which they were saved, you need to type PIC to run STRING...
(Contrary to BASIC, you don't save only one program, but a
collection of procedures, one of them being the "program".) As
for its display, it draw one big circle, then abother circle
with 2 hubs?

PATTERN.LOG
Rotates a polygon.

DMOUSE.LOG
A mouse demo.

FILLDEMO.LOG
Obviously, some demo showing the FILL primitive. Under SETRES 0
(the default), draws some lines, then fills 4 squares with
green. Under SETRES 1, draws some lines. The less that can be
said is that there is a problem, somewhere.

CASCADE.LOG
Displays a stack of multi-colored cubes in a corner (pseudo 3D).
Curiously, this time the FILL primitive works perfectly.

DEMO.LOG
The real gem. Divides the screen in 4, then run one demo overlay
in each of the 4 areas. Then displays all the background colors,
creating a procedure on the fly, then try to load a picture from
disk. (Normally, Logo picture files are filenamed PIC, but the
one provided was filenamed PC0?) Fails, since LOADPIC is not
implemented. One slight error: the "turtle" remains visible when
the 4 overlays are run. Normally, the first thing that you learn
is to remove the turtle from the screen ("HIDETURTLE" or "HT")
once a program is debugged. This speeds the drawing, and don't
corrupt the screen (this is important because of the small
resolution). This one must be seen in SETRES 1 mode.

One thing that was painful was the slowness of floppy disk drive
accesses (especially HELP, that I used to understand the
parameters used in some programs). If VGALOGO was run from a
RAMdisk, it would be perfectly usable.

As far as I know, this is the first time that a Programming
Language with graphics is available under CP/M-86 since its
revival... John Elliott has done a world premiere! Of course, as
explained above, some bugs remain but this is only the
beginning.

Since I had some experience of the original copy-protected
version, I present the following closing 3 remarks:

1) John Elliott found a copy of Dr. Logo customized for the
(English) ACT Apricot F1e. However, at the beginning, Dr. Logo
was available for the IBM PC and XT... That means that the
missing subroutines are present on the original copy-protected
disk... So, all that remains is to find a competent-enough
"locksmith" knowledgeable about CP/M-86, who would like to be
known worldwide as the man who "cracked" the copy protection
used by Digital Research...

2) Dr. Logo is a powerful version of this interpreted language.
With its ability to manage such a big workspace, there is quite
a lot of things that can be programmed without the need to use a
turtle. In fact, historically, the first Logo interpreters had
no turtle, since they had no screen! Some versions of Logo
existed, too, that had no turtle graphics. So, since we lack
some of the graphics subroutines needed to implement a full
Logo, and since most programs involve characters, words, lists,
and files, a character-only version of Dr. Logo could be
interesting to have, and would be the ultimate in portability,
since CP/M-86 itself has no graphics... (Advantage: the
subroutines are easy: RET!)

3) Curiously, today, there is not one single Web site (even
those dealing with CP/M) dealing with Dr. Logo. For the record,
Dr. Logo was first available for the IBM PC, then the Atari
520ST, then the ACT Apricot F1e, then the NEC APC-III, then the
Amstrad 8-bit CP/M Plus computers: CPC6128 and PCW8256, which
were best-sellers (more than 1,250,000 PCWs sold!) I am always
surprised how few Englishmen participate in the comp.os.cpm
Newsgroup. For all of them who discovered computing on those
Amstrads, maybe they could notice that CP/M Plus is now
available for the 8086? GSX too, DR Draw too, DR Graph too,
dBase II too, CBASIC Compiler too, MBASIC too, and now Dr. Logo!
Curiously, the only thing missing is Mallard BASIC, an English
product produced a few miles away from John's home...

Anonymous Guy

unread,
Feb 25, 2005, 7:14:31 PM2/25/05
to

On 2005-02-25 Emmanuel Roche said:

> [ ... snip ... ]


>
> As far as I know, this is the first time that a Programming
> Language with graphics is available under CP/M-86 since its
> revival... John Elliott has done a world premiere!
>

> ...
>
> ...CP/M-86 itself has no graphics...

Emmanuel, if you would become a bit more familiar with the
IBM hardware platform -- and with a programming language other
than MBASIC -- you'd discover that 'graphics' for 'CP/M-86 For
The IBM' have -always- been possible.

The CP/M-86 Software Repository web site...

http://www.seanet.com/~klaw/

..has numerous CP/M-86 'graphical' programs available for
download, as well as graphics-viewing software for many of
the mainstream graphics formats.

And a large percentage of these programs include source code.

Go take a look, and download some files. You might learn some-
thing.

While DR LOGO may be interesting as history or nostalgia, it's
not really all that useful today.

CP/M-86 itself, however, CAN be quite useful. And it has the
potential of being much MORE useful if more contemporary soft-
ware were written for it.

I'd encourage you to spend your time and programming talents on
developing some current software -- rather than futzing around
with DR LOGO.

In the meantime, here's a very simple program which demonstrates
graphics usage under CP/M-86:

;
; BETH.A86
; Animated Pink and Blue Vertical Bars
; Original DOS code by Beth Stone
; Adapted to 'CP/M-86 For The IBM' by 'Anonymous Guy'
;
; Requires VGA video.
;
; To assemble: ASM86 BETH $ SZ PZ
; GENCMD BETH
;
cseg ;start of code segment
org 100h ;leave room for base page
;
; Check for VGA video. Error out if not found.
;
mov ah,01Ah ;function 1Ah - display combination code
mov al,0 ;sub-function 0 - read the combination code
int 10h ;call ROM BIOS video services
cmp al,1Ah ;'1Ah' returned in AL?
je okay ;yes, so we have VGA -- continue
;
; VGA not detected, so print the 'no VGA' message, and exit.
;
mov dx,offset err ;point DX to 'no VGA' message
mov cl,9 ;function 9 - print string
int 224 ;call CP/M-86 BDOS services
jmp exit ;quit
;
; Turn off the CP/M-86 status line.
;
okay:
mov cl,9 ;function 9 - print string
mov dx,offset off ;point DX to the control sequence
int 224 ;call CP/M-86 BDOS services
;
; Set video mode 13h.
;
mov ax,0013h ;funct. 0, sub-funct. 13h - set mode 13h
int 10h ;call ROM BIOS video services
;
; Set up some pretty colours, and animate.
;
xor cx,cx
xor bx,bx
NextColour:
mov dx,968
mov al,cl
out dx,al
mov dx,969
mov al,cl
out dx,al
mov al,bh
out dx,al
mov al,bl
out dx,al
add bx,2
inc cx
cmp cx,256
jne NextColour
;
push ds
mov cx,0A000h
mov ds,cx
;
xor cx, cx
NextFrame2:
mov ax,cx
xor si,si
NextPixel:
mov [si],al
inc al
inc si
cmp si,63999
jne NextPixel
;
inc cx
;
; Check for user keypress. If keypress is detected,
; end the program; otherwise, keep going.
;
mov ah,01h ;function 1 - check for keypress
int 16h ;call ROM BIOS keyboard services
jz NextFrame2 ;no keypress, so continue with program
mov ah,0 ;function 0 - get keypress
int 16h ;call ROM BIOS keyboard services
pop ds ;restore our Data Segment
;
; Restore text mode 3 (80x25).
;
mov ax,0003h ;funct. 0, sub-funct. 3 - set mode 3
int 10h ;call ROM BIOS video services
;
; Turn on the CP/M-86 status line, clear the screen,
; and home the cursor.
;
mov cl,9 ;function 9 - print string
mov dx,offset onn ;point DX to the control sequence
int 224 ;call CP/M-86 BDOS services
;
; Exit to CP/M-86.
;
exit:
xor cx,cx ;function 0 - reset system
int 224 ;call CP/M-86 BDOS services
;
err db 13,10,'Sorry, VGA video is required.',13,10,07,'$'
off db 27,'0$'
onn db 27,'1',27,'E$'
;
end

French Luser

unread,
Feb 26, 2005, 8:26:57 AM2/26/05
to
Hello, "Anonymous Gui"!

> Emmanuel, if you would become a bit more familiar with the
> IBM hardware platform -- and with a programming language other
> than MBASIC -- you'd discover that 'graphics' for 'CP/M-86 For
> The IBM' have -always- been possible.

But why would I want to "become more familiar with the
IBM Clown hardware platform"? Its hardware is rotten,
as exemplified by its graphics. Why do you think that
most GSX screen drivers written by Digital Research
were for the NEC uPD 7220 GDC? If you want to see
a real nice exemple of a graphics controller (rather than
the freak selected by IBM), have a look to this GDC
(On my Epson QX-10, I was able to program high-resolution
graphics with just BASIC: not even need of a assembly
language interface! Did I mention "portable programs?"
The same BASIC graphics program can run under
CP/M 2.2, CP/M-86, and MS-DOS...) (That is to say:
as long as BASIC and this GDC are present.).

As for being too much "familiar with MBASIC", may I
remind you that it is me who spent more than one year
trying to ressurrect COMAL for CP/M-86? (Unfortunately,
no Swedes answered my request for help. To this day,
COMAL remains available under CP/M-86 for the
(Swedish) COMPIS (=COMPuter In School). But do
you know a CP/M-86 fan who would want to collect
one more programming language for CP/M-86?)

> While Dr. Logo may be interesting as history or nostalgia, it's


> not really all that useful today.

If we REALLY want to ressurrect CP/M-86 (Plus), that means
that most people who will discover it on the Internet will have
no previous use of it. They will be total beginners. So, any
"easy" Programming Language will be beneficial, so that
they can do something (anything) easily under CP/M-86 (Plus).
(In addition, as explained by Gary Kildall, Dr. Logo is probably
the most powerful version of Logo ever made for the IBM Clown.
So, it is a real bonus to the software library of CP/M-86 (Plus).
(Unless you want it to be restricted to assembly language
programmers. Anyway, who program still in 16-bit 8086?))

> CP/M-86 itself, however, CAN be quite useful. And it has the
> potential of being much MORE useful if more contemporary soft-
> ware were written for it.

Tell me what "more contemporary software" would be more
useful? Should I remind you that you can do only 6 things
with a computer, be it a Sinclair ZX-80 or a Connection Machine:
1) word processing
2) programming
3) spread-sheet
4) database
5) communications
6) graphics
As long as those 6 needs are satisfied, the computer is a
useful tool. And there are/were standards for those 6 needs
under CP/M: WordStar is obviously the standard for word
processors; BASIC is obviously the standard for programming,
MultiPlan is obviously the standard for spread-sheet, dBase II
is obviously the standard for database; XMODEM is obviously
the (lowest common denominator) standard for communications;
and finally GSX is obviously the standard graphics system for CP/M.

> I'd encourage you to spend your time and programming talents on
> developing some current software -- rather than futzing around

> with Dr. Logo.

No need to encourage me. During 15 years, I was totally alone
with CP/M Plus on my Epson QX-10, with WordStar 4 and
Mallard BASIC. All I need is more time and money.

> In the meantime, here's a very simple program which demonstrates
> graphics usage under CP/M-86:

You program is totally tied to the hardware of the IBM Clown:
it uses the ROM BIOS, not even the BIOS of CP/M-86!
(Should I remind you that this is the comp.os.cpm Newsgroup?)

(Since I write in a foreign language, please not that the above
was meant as a CONSTRUCTIVE criticism, not a negative one.
I have nothing against you. You simply seem to have less
programming experience than me.)

Yours Sincerely,
"French Luser"

nos...@nouce.bellatlantic.net

unread,
Feb 26, 2005, 2:16:01 PM2/26/05
to
On Sat, 26 Feb 2005 14:26:57 +0100, "French Luser"
<Bill....@microsoft.com> wrote:

>most GSX screen drivers written by Digital Research
>were for the NEC uPD 7220 GDC? If you want to see

Slow, first generation and I have three different implementations
that are totally incompatable but, they use the same chip. It was
"ok" in its day.

>Tell me what "more contemporary software" would be more
>useful? Should I remind you that you can do only 6 things
>with a computer, be it a Sinclair ZX-80 or a Connection Machine:
>1) word processing
>2) programming
>3) spread-sheet
>4) database
>5) communications
>6) graphics

What about modeling and simulation????

>As long as those 6 needs are satisfied, the computer is a
>useful tool. And there are/were standards for those 6 needs
>under CP/M: WordStar is obviously the standard for word
>processors; BASIC is obviously the standard for programming,

Basic is cute and suffers from the greater amount of sufficiently
different flavors to make it the official language of babble.

Allison

Lee Hart

unread,
Feb 26, 2005, 4:14:34 PM2/26/05
to
Anonymous Guy wrote:
> Emmanuel, if you would become a bit more familiar with the
> IBM hardware platform -- and with a programming language other
> than MBASIC -- you'd discover that 'graphics' for 'CP/M-86 For
> The IBM' have -always- been possible.

For example, didn't DR sell Personal BASIC for CP/M-86, which included
graphics? And of course there was BASICA and GWBASIC. Zenith modified
these to become ZBASIC for the Z-100, which was certainly not a PC
clone.

And these are just the BASICs. There was graphics support for many other
languages as well under CP/M-86.
--
Ring the bells that you can ring
Forget your perfect offering
There is a crack in everything
That's how the light gets in
-- Leonard Cohen, from "Anthem"
--
Lee A. Hart 814 8th Ave N Sartell MN 56377 leeahart_at_earthlink.net

Anonymous Guy

unread,
Feb 26, 2005, 7:23:07 PM2/26/05
to

On 2005-02-26 Emmanuel Roche said:

> [ ... snip ... ]
>


> But why would I want to "become more familiar with the
> IBM Clown hardware platform"?

Because it's -HERE,- it -IS- the prevailing hardware platform,
and even -YOU- use it.

If we want to 'resurrect' interest in CP/M-86, then CP/M-86
-MUST- run on currently-available hardware.

Like it or not, that means the 'IBM Clown.'

> If you want to see a real nice exemple of a graphics controller
> (rather than the freak selected by IBM), have a look to this GDC
> (On my Epson QX-10, I was able to program high-resolution graphics
> with just BASIC: not even need of a assembly language interface!

Wonderful -- but the Epson QX-10 is an obsolete machine.

The 1952 Citroen might have been a beautiful automobile,
but I wouldn't want to drive it today.

> Did I mention "portable programs?"

'Portability,' in this day and age, is mostly a red herring.
It's simply not an issue anymore.

Although CP/M-86, at one time, was available for a variety
of different and proprietary hardware platforms, only the
'IBM Clown' has survived. The rest have died.

So from a practical standpoint today, we can consider CP/M-86
as being specific to the 'IBM Clown,' and proceed accordingly.

'Portability' to less-capable, non-X86-based hardware platforms
isn't even worth considering, IMHO.

> If we REALLY want to ressurrect CP/M-86 (Plus), that means
> that most people who will discover it on the Internet will have
> no previous use of it. They will be total beginners. So, any
> "easy" Programming Language will be beneficial, so that
> they can do something (anything) easily under CP/M-86 (Plus).

DR Logo is not "easy." And, since it uses a rather complicated
interpreted command language, it is orders of magnitude slower
than other programmatic methods of generating graphics.

In any case, the vast majority of computer users are not pro-
grammers, and have little interest in programming.

> Anyway, who program still in 16-bit 8086?

Who still programs in MBASIC? Or DR Logo? :)

> Tell me what "more contemporary software" would be more
> useful?

Two words: Internet access.

> Should I remind you that you can do only 6 things with a computer,
> be it a Sinclair ZX-80 or a Connection Machine:
>
> 1) word processing
> 2) programming
> 3) spread-sheet
> 4) database
> 5) communications
> 6) graphics
>
> As long as those 6 needs are satisfied, the computer is a
> useful tool.

I don't necessarily agree with this analysis, but proceed.

> And there are/were standards for those 6 needs
> under CP/M: WordStar is obviously the standard for word
> processors;

Disagree. WorstStar is a TERRIBLE word processor. Its arcane
and non-intuitive keyboard commands have a steep learning curve
-- and in use, those CTRL+ keypress combinations are real
productivity-stoppers.

WorstStar was acceptable in the earlier days of CP/M; it was one
of the better word processors available, given the state of the
hardware and the software at the time. But today, on modern IBM-
compatible hardware, it's death.

Since the DOS-style TED editor became available for CP/M-86 (thanks,
Richard B!), I literally never use WorstStar anymore.

Admittedly, TED is a simple text editor, and lacks some of the
more sophisticated 'features' of WS. But frankly, I never used
any of those WS 'features.'

> BASIC is obviously the standard for programming,

Disagree. ASM was available for CP/M-86 right from the beginning;
so your contention that "BASIC is obviously the standard for
programming" is unsupported.

BASIC for CP/M-86 is cumbersome and very limited. BASIC can
occasionally be convenient for quick 'proof-of-concept' implemen-
tation of an idea for a program, but it remains essentially a toy.

The various utilities you've written in MBASIC, while useful
in some cases, would be much better if written in a compilable
language, and implemented as stand-alone executables.

> MultiPlan is obviously the standard for spread-sheet,

Disagree. MultiPlan may be -ONE- of the formerly available
spreadsheets, but I'd hesitate to call it a 'standard.'

> dBase II is obviously the standard for database;

Disagree. dBase is a convoluted mess. It might have been the
best we had in the early '80s, but the '80s are over.

If dBase is a 'standard,' then the 'standard' needs severe
revision.

> XMODEM is obviously the (lowest common denominator) standard for
> communications;

VERY low. So low, that it's relatively useless now.

'Communication' on the computer today essentially means Internet
access.

So if communication is one of "...only 6 things that you can do
with a computer," we'd better get busy and develop some 'Net
access software for CP/M-86!

> and finally GSX is obviously the standard graphics system for CP/M.

In 1983, perhaps. Now, no.

Most people today, when speaking of 'graphics,' are referring to
'picture' files in commonly-used, standardized formats: JPG, PNG,
GIF, PCX, TIFF, etc.

If CP/M-86 is to survive, it needs to have software which directly
supports these mainstream standards. GSX is fairly useless in this
regard.

> AG> here's a very simple program which demonstrates graphics usage
> AG> under CP/M-86:
>
> You[r] program is totally tied to the hardware of the IBM Clown:


> it uses the ROM BIOS, not even the BIOS of CP/M-86!

YES! That's the point!

As you correctly stated in an earlier post, CP/M-86 and its various
programming tools have no inherent graphics capability.

But the IBM hardware platform -DOES- have graphics capability...and
this capability can be directly accessed by the programmer.

To NOT use the IBM hardware's graphics capabilities -- or to access
them through an additional layer of proprietary software -- would
be totally nutty. C'est fou, mon ami!

By the way: did you assemble the source code, and run the program?

Oh...it probably won't run under 'Personal CP/M-86.' PCP/M-86 is
rather restrictive about ROM BIOS and direct hardware accesses.

That's why I prefer 'CP/M-86 For The IBM.' It mostly stays out
of one's way, and allows the programmer to 'do his thing.'

> (Since I write in a foreign language, please not[e] that the above


> was meant as a CONSTRUCTIVE criticism, not a negative one.

Oui; je comprende cela. Ce n'est pas un problem, Emmanuel.
Et votre Anglais est bon.

> I have nothing against you. You simply seem to have less
> programming experience than me.)

Heh. Maybe. But then, MBASIC is not really my preferred choice
of languages in which to gain 'programming experience.' ;)

Experience aside, we both have an interest in CP/M-86. Our diff-
erences are mostly philosophical.

You are attempting, apparently, to restore CP/M-86 to 'the way it
was' in the 1980s.

My interest is in adding additional capabilities, functionality
and software, so that CP/M-86 becomes semi-viable as a present-day
O.S.

If you've ever visited The CP/M-86 Software Repository web site

http://www.seanet.com/~klaw/

I think you'll agree that a respectable start has been made.
But it's only a beginning.

When I'm able to dial in to my ISP from CP/M-86, and fetch and
send e-mail using my PPP (not SLIP) account, THAT will be real
progress. :)

A' bientot.

Tom Lake

unread,
Feb 26, 2005, 8:25:03 PM2/26/05
to
> The various utilities you've written in MBASIC, while useful
> in some cases, would be much better if written in a compilable
> language, and implemented as stand-alone executables.
>

There was a Microsoft BASIC compiler for CP/M and CP/M 86
that generated a standalone executable and it compiled most
MBASIC programs unchanged, and the others with trivial changes.
Don't confuse a poor implementation of a language for the language
itself being bad.

> If dBase is a 'standard,' then the 'standard' needs severe
> revision.

Do you do much database programming for large companies?
Yes, dBase IS a standard although SQL and MS Access are
beginning to supplant it.

> > and finally GSX is obviously the standard graphics system for CP/M.
>
> In 1983, perhaps. Now, no.
> Most people today, when speaking of 'graphics,' are referring to
> 'picture' files in commonly-used, standardized formats: JPG, PNG,
> GIF, PCX, TIFF, etc.

Like it or not, GSX IS the CP/M standard for graphics.

>
> If CP/M-86 is to survive, it needs to have software which directly
> supports these mainstream standards. GSX is fairly useless in this
> regard.

CP/M-86 is frozen in time, like Latin. Why try to update it? Use it
for what it is. If you want all the modern bells and whistles, use a modern
OS.

> You are attempting, apparently, to restore CP/M-86 to 'the way it
> was' in the 1980s.

No need to restore it. It never changed.


>
> My interest is in adding additional capabilities, functionality
> and software, so that CP/M-86 becomes semi-viable as a present-day
> O.S.

Why? What advantage does it have over any other OS on the market today?

With Linux, Windows and Cherry OS (runs MAC X OS on x86 hardware)
what could CP/M-86 bring to the table? (Not a rhetorical question. I
really
want to know!) Gary Kildall is dead. Long live Gary!

Tom Lake

Richard Brady

unread,
Feb 26, 2005, 9:12:35 PM2/26/05
to
Alright Mr. Guy,

Outline the project to create the software we need. Define the
parameters as best you understand them and solicit folks to create the
software. Surely we have enough firepower out here to create what we
need if we divide it up. Let's set up some realistic requirements that
we can all agree on (I hope)(TCP/IP? SLIP?), see about creating modules
to handle the specific tasks and the write the glue to bind the pieces
together. First we create the primitives. We have choices of language
- glue in Aztec C? critical routines in assembler?

But let us be specific: where to find examples of each routine and so on.

Richard B

P.S. It's good to hear from the good gentleman Kirk every now and then! :)

nos...@nouce.bellatlantic.net

unread,
Feb 26, 2005, 11:53:34 PM2/26/05
to
On Sun, 27 Feb 2005 00:23:07 +0000 (UTC), "Anonymous Guy"
<m...@privacy.net> wrote:

> > Tell me what "more contemporary software" would be more
> > useful?
>
>Two words: Internet access.

I list that as communications myself, but a very special case of it.

>Disagree. WorstStar is a TERRIBLE word processor. Its arcane
>and non-intuitive keyboard commands have a steep learning curve
>-- and in use, those CTRL+ keypress combinations are real
>productivity-stoppers.

I also agree WS is terrible, to the point that I have copies and never
used it. My favorite editor is VEDIT on CP/M and LSE on VAX. and
Teco is still the most useful next to Vteco.

When I see HTML, whats so different from runoff? Both are text
markup languages. The only thing I can think of limiting my use
of a z80 to process .html is any graphics includes.

>Admittedly, TED is a simple text editor, and lacks some of the
>more sophisticated 'features' of WS. But frankly, I never used
>any of those WS 'features.'

Never used TED, I have used TED under RT-11, nice screen
oriented editor with a command line mode that takes teco scripts.
Is the PC x86version similar?

The only thing worse than WS is msWord.

> > dBase II is obviously the standard for database;
>
>Disagree. dBase is a convoluted mess. It might have been the
>best we had in the early '80s, but the '80s are over.
>
>If dBase is a 'standard,' then the 'standard' needs severe
>revision.

My knowledge of dbaseII was helpful in modern systems but the more
current versions of dbase are barely similar.

>'Communication' on the computer today essentially means Internet
>access.

I agree, only to the point of when it's required very little else can
replace it. However, there are many things I've done with computers
where that was a clear non goal. That's not to say communications
is not important. thre are whole classes of applications where
commications do not include "internet access" but do require some
kind of network.

>Most people today, when speaking of 'graphics,' are referring to
>'picture' files in commonly-used, standardized formats: JPG, PNG,
>GIF, PCX, TIFF, etc.

Yes and they even require an underlying support structure.

> > You[r] program is totally tied to the hardware of the IBM Clown:
> > it uses the ROM BIOS, not even the BIOS of CP/M-86!
>
>YES! That's the point!

And the x86 the worst bag on the side of a cpu.

>If you've ever visited The CP/M-86 Software Repository web site
>
> http://www.seanet.com/~klaw/
>
>I think you'll agree that a respectable start has been made.
>But it's only a beginning.

It s a start.

When I think of "internet access" PCs are not foremost in my mind.
The reason for that is I prefer some system security, even CP/M-86
offers nothing there. That is not a applications issue. Generally
the x86 is a junkpile to me, and while it sorta works it's not
designed in a robust or secure way. I'd sooner something else and
a real OS on it. With that said, in the non-internet access
world of computing thre are a realm of things where less is more.
For that CP/M-86 has more to offer like it's smaller cousin CP/M-80
it doesn't stop you form doing anything. There are things one can
argue it does not do, that is not a direct limitation. CP/M-86 like
CP/M-80 is useful for those things where everything inside needs to be
known. We can read the sources to see that. We can fix the sources
if there is a problem. We can leave out parts that don't fit or are
useful to us. There are few other solutions like that. Unlike the
MS world that abounds on PCs, the spec is static and knowable
where the other is poorly understood and changing. The worst part of
programming is bugs that are not in code you control but, in the code
you depend on.


Allison

Anonymous Guy

unread,
Feb 27, 2005, 12:08:52 AM2/27/05
to

On 2005-02-27 Richard B said:

> Alright Mr. Guy,
>
> Outline the project to create the software we need.

We could start with an e-mail program for CP/M-86 -- one that's
usable with a dial-up PPP 'Net connection, and that's capable of
sending and receiving e-mail via SMTP/POP protocols.

An integrated off-line reader would be nice, but isn't necessary
in the initial stages.

> Define the parameters as best you understand them...

We'll need a dialer, a TCP/IP layer, handling for PPP packets,
support for SMTP and POP protocols, and disk I/O routines to
handle the incoming/outgoing e-mail messages. Plus miscellaneous
other smaller details.

> ...and solicit folks to create the software.

All right. Who's interested? Reply to the newsgroup.

> Surely we have enough firepower out here to create what we
> need if we divide it up.

We do. Cranking up the interest level is another story.

> Let's set up some realistic requirements that we can all agree
> on (I hope)(TCP/IP? SLIP?)

With a PPP connection, I'd say definitely TCP/IP.

> see about creating modules to handle the specific tasks and the
> write the glue to bind the pieces together.

Right. Not a trivial undertaking.

> First we create the primitives. We have choices of language -
> glue in Aztec C? critical routines in assembler?

Personally, I'm most comfortable with assembly. But from a prac-
tical standpoint, a high-level language would probably be required
for a project of this magnitude.

Much of the existing GPL/PD x86 source code that we'd need to tap
is written in C (of one flavor or another).

> But let us be specific: where to find examples of each routine and
> so on.

An example of what I envision the finished product to be like
is here:

http://www.nettamer.net/netmail.zip

This is Net-Mail Pro (78k, zipped) -- a stand-alone, self-contained
e-mail program for DOS. Not ultra-fancy, but it does the job very
well...and isn't nearly as convoluted as, say, PegasusMail for DOS.
Net-Mail Pro is a proprietary program. Source code is not available.

For source code that might be useful in the project, here are links
for two of the 'biggies:'

TCP/IP: http://www.wattcp.com/
(16-bit DOS source in C)

PPP: http://members.tripod.com/~ladsoft/lsppp/
(16-bit DOS source in ASM. Includes a dialer.)

There's other TCP/IP and PPP source code out there, as well.
These two links just seemed to be among the best-of-the-best.

> Richard B
>
> P.S. It's good to hear from <...snip...>

Heh. Outted! :) Good to see that you're still with us, R.B.

Anonymous Guy

unread,
Feb 27, 2005, 1:31:41 AM2/27/05
to

On 2005-02-27 nos...@nouce.bellatlantic.net (Allison P.) said:

> [ ... snips ... ]


>
> Never used TED, I have used TED under RT-11, nice screen
> oriented editor with a command line mode that takes teco
> scripts. Is the PC x86version similar?

Nope; same name, but totally different animal. The CP/M-86 'TED'
is a port of the 'TED' editor for DOS that originally appeared
in PC Magazine. A nice minimalist, fully-functional and intuitive
ASCII text editor.

> The only thing worse than WS is msWord.

Agreed.

> > > You[r] program is totally tied to the hardware of the IBM
> > > Clown: it uses the ROM BIOS, not even the BIOS of CP/M-86!
> >
> > YES! That's the point!
>
> And the x86 the worst bag on the side of a cpu.

Could be...but it's what we've got. The x86-based IBM clone is the
prevailing hardware platform, and we're stuck with it for awhile.

> When I think of "internet access" PCs are not foremost in my mind.
> The reason for that is I prefer some system security, even CP/M-86
> offers nothing there. That is not a applications issue. Generally
> the x86 is a junkpile to me, and while it sorta works it's not
> designed in a robust or secure way. I'd sooner something else and
> a real OS on it.

I understand the emotion. From a practical standpoint, though,
accessing the 'Net under CP/M-86 would be pretty d**n secure.

With a stand-alone CP/M-86 'Net access program, we'd dial up,
get on-line, do what we do, and then disconnect. There wouldn't
be the vulnerability of a permanent connection.

Even if someone DID succeed in breaching the system, there'd be
little or nothing of interest to be found.

And, of course, we'd be immune to all the viruses, Trojans and
other malware that's floating around out there.

An obscure O.S. is one of the best security measures. :)

> With that said, in the non-internet access
> world of computing thre are a realm of things where less is more.
> For that CP/M-86 has more to offer like it's smaller cousin CP/M-80

> it doesn't stop you from doing anything...
>
> Allison

Well, that's certainly true of 'CP/M-86 For The IBM,' although
it's less true of some other CP/M-86 permutations.

While 'Personal CP/M-86' is 'newer,' and therefore supposedly
more sophisticated, it comes with a price. 'Personal CP/M-86'
interdicts certain direct accesses to the ROM BIOS and other
system hardware. That's a little too 'managerial' for my tastes.

'CP/M-86 For The IBM' doesn't do that. Oh, it has a couple of
niggly little eccentricities -- but overall, the programmer
is pretty much free to wreak all kinds of bit-banging havoc.

Now THAT'S programming freedom. :)

Moll

unread,
Feb 27, 2005, 7:08:21 AM2/27/05
to
Richard Brady wrote:
> Alright Mr. Guy,
>
> Outline the project to create the software we need. Define the
> parameters as best you understand them and solicit folks to create the
> software. Surely we have enough firepower out here to create what we
> need if we divide it up. Let's set up some realistic requirements that
> we can all agree on (I hope)(TCP/IP? SLIP?), see about creating modules
> to handle the specific tasks and the write the glue to bind the pieces
> together. First we create the primitives. We have choices of language
> - glue in Aztec C? critical routines in assembler?
>
> But let us be specific: where to find examples of each routine and so on.
>
> Richard B
>
> P.S. It's good to hear from the good gentleman Kirk every now and then! :)

I've written CP/M-86 CMD files in Turbo C - that might be an even easier
solution if you can roll your own C runtimes...

Moll.

nos...@nouce.bellatlantic.net

unread,
Feb 27, 2005, 9:24:19 AM2/27/05
to
On Sun, 27 Feb 2005 06:31:41 +0000 (UTC), "Anonymous Guy"
<m...@privacy.net> wrote:

>Nope; same name, but totally different animal. The CP/M-86 'TED'
>is a port of the 'TED' editor for DOS that originally appeared
>in PC Magazine. A nice minimalist, fully-functional and intuitive
>ASCII text editor.

I have to look at it. TED on RT-11 using a DEC terminal is intuitive
as the keypad to the right is cursor/edit command actions.

> > And the x86 the worst bag on the side of a cpu.
>
>Could be...but it's what we've got. The x86-based IBM clone is the
>prevailing hardware platform, and we're stuck with it for awhile.

Maybe, I'm not fond of it and it earns my keep.

>I understand the emotion. From a practical standpoint, though,
>accessing the 'Net under CP/M-86 would be pretty d**n secure.

From anything that requires OS help, a standalone x86 executable
is still bad.

>Even if someone DID succeed in breaching the system, there'd be
>little or nothing of interest to be found.

If it were useable it would aquire "stuff" and therefor be vunerable.

>An obscure O.S. is one of the best security measures. :)

For that I have VMS on VAX hardware obscure to crackers
and C2 or better basic security.

>Well, that's certainly true of 'CP/M-86 For The IBM,' although
>it's less true of some other CP/M-86 permutations.

For Multibus and S100 systems I've experienced not so, but
maybe for later implementations. then again writing a CP/M-86
bios is something I've done.

Allison

Axel Berger

unread,
Feb 27, 2005, 6:09:00 AM2/27/05
to
*Anonymous Guy* wrote on Sun, 05-02-27 01:23:

>The 1952 Citroen might have been a beautiful automobile, but I wouldn't
>want to drive it today.

That's beside the point, your real argument is:
You might want to drive nothing but it, but it'd be useless to
recommend it to others, as they'd be unable to find one.

In computer terms I have the same problem. I always use my old Atari
editor and my old Atari database under an Atari emulator on my current
hardware, because they have never been ported and are head and
shoulders above anything else I ever saw.
But I could not recommend anyone, my daughter say, to install an
emulator and learn all the quirks of another OS that has been obsolete
for a decade just to use two standard applications.

So you Emmanuel are in the same situation. You may consider your
machine superior and you may well be right, but if you want any hope of
convincing any newcomer to the beauties of CP/M you have to offer it in
a setting available to him.
Otherwise you'd better just shut up, sit down with a bottle of good
French wine and muse about the computing world going to the dogs, as
old men like me and you have been used to doing for millennia.

Anonymous Guy

unread,
Feb 28, 2005, 5:47:29 AM2/28/05
to

On 2005-02-27 Axel_...@b.maus.de (Axel Berger) said:

> [ ... snip ... ]


>
> So you Emmanuel are in the same situation. You may consider your
> machine superior and you may well be right, but if you want any
> hope of convincing any newcomer to the beauties of CP/M you have
> to offer it in a setting available to him.
> Otherwise you'd better just shut up, sit down with a bottle of good
> French wine and muse about the computing world going to the dogs,
> as old men like me and you have been used to doing for millennia.

Heh! JA! Das ist richtig. Danke, Axel. :)

s_dub...@yahoo.com

unread,
Feb 28, 2005, 5:27:56 PM2/28/05
to

Moll wrote:
> I've written CP/M-86 CMD files in Turbo C - that might be an even
easier
> solution if you can roll your own C runtimes...
>
> Moll.

Care to elaborate about this? I was looking at linkcmd.exe for .obj
files this weekend, but it seems to build .cmd files for the later
loader which supports fixups, not cp/m-86 v1.1, AFAICT.

What do mean by "if you can roll your own C runtimes..."? Had you ever
replaced stdio.h with DRI-C's stdio.h?

Steve

Moll

unread,
Feb 28, 2005, 6:10:20 PM2/28/05
to
s_dub...@yahoo.com wrote:
> Moll wrote:
>
>>I've written CP/M-86 CMD files in Turbo C - that might be an even
>
> easier
>
>>solution if you can roll your own C runtimes...
>>
>>Moll.
>
>
> Care to elaborate about this? I was looking at linkcmd.exe for .obj
> files this weekend, but it seems to build .cmd files for the later
> loader which supports fixups, not cp/m-86 v1.1, AFAICT.

That would explain why I couldn't get them to work on 1.1. They do work
on the Lopushinsky emulator and on 4.1.

> What do mean by "if you can roll your own C runtimes..."? Had you ever
> replaced stdio.h with DRI-C's stdio.h?

No, but all the C code I've written for CP/M-86 was self-contained and
didn't use anything but macros defined in dos.h.

Moll.

s_dub...@yahoo.com

unread,
Feb 28, 2005, 6:16:37 PM2/28/05
to

Anonymous Guy wrote:
> On 2005-02-26 Emmanuel Roche said:
>
> > [ ... snip ... ]
> >
> > But why would I want to "become more familiar with the
> > IBM Clown hardware platform"?
>
> Because it's -HERE,- it -IS- the prevailing hardware platform,
> and even -YOU- use it.
>
> If we want to 'resurrect' interest in CP/M-86, then CP/M-86
> -MUST- run on currently-available hardware.
>
[snip]

I had to order a floppy drive as an option for my latest black box, so
modern media is also a pertinent issue for storage, and an eventual
rework of cp/m-86's file system to support larger volumes and logical
block addressing is an issue. The current file structures aren't
scalable, less useful than msDos Fat16.

> Two words: Internet access.
>
[snip]


> 'Communication' on the computer today essentially means Internet
> access.

I agree.

Steve

s_dub...@yahoo.com

unread,
Feb 28, 2005, 6:41:02 PM2/28/05
to

Tom Lake wrote:

>
> Why? What advantage does it have over any other OS on the market
today?
>

It is more accessible for fiddling.

> With Linux, Windows and Cherry OS (runs MAC X OS on x86 hardware)
> what could CP/M-86 bring to the table? (Not a rhetorical question.
I
> really
> want to know!) Gary Kildall is dead. Long live Gary!
>

My view it is, it is a pretty good learning tool for learning about
Control Programs, it could be an even greater tool, a teaching tool.
Kinda like Pascal was the high level language teaching tool for
programming in the 80's, a standard.

Some open source & fully source accessible derivative, CP/X, could be a
great teaching/learning tool. CP/M is a pretty good learning tool
considering its commercial proprietary origins, the current standard
for fiddling/experimenting.

> Tom Lake

Steve

nos...@nouce.bellatlantic.net

unread,
Feb 28, 2005, 7:06:59 PM2/28/05
to
On 28 Feb 2005 15:16:37 -0800, s_dub...@yahoo.com wrote:

>
>I had to order a floppy drive as an option for my latest black box, so
>modern media is also a pertinent issue for storage, and an eventual
>rework of cp/m-86's file system to support larger volumes and logical
>block addressing is an issue. The current file structures aren't
>scalable, less useful than msDos Fat16.

Forget FAT please. CP/M-86 file system is the same file system as
CP/M-80. If you look at Some of the BDOS replacements for the DRI
product (P2dos, Novados, Zrdos) they all took the 8mb limit of
CP/M-80 to some 2gb! CP/M-86 base was 32mb to start and the same
fixes/changes can be applied to the BDOS to extend the file size.


Allison

s_dub...@yahoo.com

unread,
Feb 28, 2005, 8:07:10 PM2/28/05
to

Ooh, I didn't mean to infer the _use_ of Fat16 as a replacement! But
of the BDOS replacements you've mentioned, how would you rate them |
prefer them??

Steve

Moll

unread,
Feb 28, 2005, 8:34:06 PM2/28/05
to
s_dub...@yahoo.com wrote:
> Anonymous Guy wrote:
>
>>On 2005-02-26 Emmanuel Roche said:
>>
>> > [ ... snip ... ]
>> >
>> > But why would I want to "become more familiar with the
>> > IBM Clown hardware platform"?
>>
>>Because it's -HERE,- it -IS- the prevailing hardware platform,
>>and even -YOU- use it.
>>
>>If we want to 'resurrect' interest in CP/M-86, then CP/M-86
>>-MUST- run on currently-available hardware.
>>
>
> [snip]
>
> I had to order a floppy drive as an option for my latest black box, so
> modern media is also a pertinent issue for storage, and an eventual
> rework of cp/m-86's file system to support larger volumes and logical
> block addressing is an issue. The current file structures aren't
> scalable, less useful than msDos Fat16.

DOSPLUS used FAT as its main filesystem. That could be an option.

Moll.

s_dub...@yahoo.com

unread,
Feb 28, 2005, 9:01:34 PM2/28/05
to

Moll wrote:
> s_dub...@yahoo.com wrote:
> > Moll wrote:
> >
> >>I've written CP/M-86 CMD files in Turbo C - that might be an even
> >
> > easier
> >
> >>solution if you can roll your own C runtimes...
> >>
> >>Moll.
> >
> >
> > Care to elaborate about this? I was looking at linkcmd.exe for
.obj
> > files this weekend, but it seems to build .cmd files for the later
> > loader which supports fixups, not cp/m-86 v1.1, AFAICT.
>
> That would explain why I couldn't get them to work on 1.1. They do
work
> on the Lopushinsky emulator and on 4.1.
>
Supposedly there is a RUN.CMD to load these for v1.1, I think John
Elliot is the one to ask about this.

> > What do mean by "if you can roll your own C runtimes..."? Had you
ever
> > replaced stdio.h with DRI-C's stdio.h?
>
> No, but all the C code I've written for CP/M-86 was self-contained
and
> didn't use anything but macros defined in dos.h.
>

I see.

> Moll.

nos...@nouce.bellatlantic.net

unread,
Feb 28, 2005, 11:57:38 PM2/28/05
to
On 28 Feb 2005 17:07:10 -0800, s_dub...@yahoo.com wrote:


>> product (P2dos, Novados, Zrdos) they all took the 8mb limit of

>


>Ooh, I didn't mean to infer the _use_ of Fat16 as a replacement! But
>of the BDOS replacements you've mentioned, how would you rate them |
>prefer them??

Essenually as a bdos they are nearly transparent replacements until
you utilize their features. Zrdos seems the most refined of the three
and I did present them from oldest to newest. There are many others
as well but those are certainly representitive and the sources are
available to look at and modify. I might add most of the replaements
utilize the Z80s instruction set extensions over the 8080 as a tool to
fit improved functionality in the exact 3.5k footprint.

Allison

s_dub...@yahoo.com

unread,
Mar 1, 2005, 5:52:34 PM3/1/05
to

At http://www.retroarchive.org/cpm/os/os.htm I've found:

================ ZSDOS/ZDDOS GPL Release ===============
ZSDOS (Z-System DOS) and the Companion ZDDOS (Z-System DOS with
Embedded
DateStamper) are enhanced replacements for the CP/M 2.2 Basic Disk
Operating System.

I'll have alook at this first.

Steve

nos...@nouce.bellatlantic.net

unread,
Mar 1, 2005, 6:05:34 PM3/1/05
to
On 1 Mar 2005 14:52:34 -0800, s_dub...@yahoo.com wrote:

>
>At http://www.retroarchive.org/cpm/os/os.htm I've found:
>
>================ ZSDOS/ZDDOS GPL Release ===============
>ZSDOS (Z-System DOS) and the Companion ZDDOS (Z-System DOS with
>Embedded
>DateStamper) are enhanced replacements for the CP/M 2.2 Basic Disk
>Operating System.
>
>I'll have alook at this first.

oops, overlooked that one and I use it too.

Allison

s_dub...@yahoo.com

unread,
Mar 1, 2005, 8:11:43 PM3/1/05
to
1.2 What is ZSDOS?

ZSDOS is completely replaces the Basic Disk Operating System
portion of CP/M
2.2 or ZRDOS 1.x systems. The following explanation is
included in case you
are unfamiliar with the functions of an Operating System.
"

Seems like the later of the derivatives. Since you've used it, any
commentary about it?

Steve

nos...@nouce.bellatlantic.net

unread,
Mar 1, 2005, 10:56:59 PM3/1/05
to
On 1 Mar 2005 17:11:43 -0800, s_dub...@yahoo.com wrote:

>Seems like the later of the derivatives. Since you've used it, any
>commentary about it?

Its adds facilities and features to fully support ZCPR3. A little
regression.

CP/M is thre major componenets; CCP, BDOS, BIOS. the CCP is the user
interface, BDOS is an programtic interface and contains the heart of
the file system, BIOS is the hardware to stardard interface
abstraction. The first componeent that was replaced with an upgraded
one was the CCP. ZCPR is an improved CCP and was designed to add
functionality while remaining in the 2k footprint. The next was the
BDOS and ZRdos[ P2dos, Suprbdos, Novados, others] is one of the
many developed to enhance that module. The BIOS is system
specific code but even there improved methods have been published
as a framework for other systems.

ZRdos/Zsdos is a packaged CCP and Bdos replacement with supporting
utilities added to extend the basic CP/M system while being fully
compatable.

Like I said I use it but forgot to list it. I ahve it on the amprolb+
and the SB180 and find many of the added features very handy for a
development environment.

Allison

CBFalconer

unread,
Mar 1, 2005, 11:43:04 PM3/1/05
to
s_dub...@yahoo.com wrote:
> nos...@nouce.bellatlantic.net wrote:
>> On 28 Feb 2005 17:07:10 -0800, s_dub...@yahoo.com wrote:
>>
>>>> product (P2dos, Novados, Zrdos) they all took the 8mb limit of
>>
>>> Ooh, I didn't mean to infer the _use_ of Fat16 as a replacement!
>>> But of the BDOS replacements you've mentioned, how would you rate
>>> them | prefer them??
>>
>> Essenually as a bdos they are nearly transparent replacements
>> until you utilize their features. Zrdos seems the most refined of
>> the three and I did present them from oldest to newest. There are
>> many others as well but those are certainly representitive and the
>> sources are available to look at and modify. I might add most of
>> the replaements utilize the Z80s instruction set extensions over
>> the 8080 as a tool to fit improved functionality in the exact 3.5k
>> footprint.
>
> At http://www.retroarchive.org/cpm/os/os.htm I've found:
>
> ================ ZSDOS/ZDDOS GPL Release ===============
> ZSDOS (Z-System DOS) and the Companion ZDDOS (Z-System DOS with
> Embedded DateStamper) are enhanced replacements for the CP/M 2.2
> Basic Disk Operating System.
>
> I'll have alook at this first.

Take a look at DOSPLUS 2.5, which I think is much simpler to
install and operate. It is all available at:

<http://cbfalconer.home.att.net/download/cpm/>

It was written to provide the features of ZCPM without the
complexity. It is configured at run time, not assembly time. Some
features (such as paths) require that the bios initialize things.
You can work your way into it, as the simplest use is virtually
identical to that of CP/M 2.2 with some bugs fixed.

--
Chuck F (cbfal...@yahoo.com) (cbfal...@worldnet.att.net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home.att.net> USE worldnet address!

s_dub...@yahoo.com

unread,
Mar 2, 2005, 6:45:32 AM3/2/05
to

Thanks! [to all], I'll check it out.

s_dub...@yahoo.com

unread,
Mar 2, 2005, 7:34:37 PM3/2/05
to

You should probably start a new thread, were you looking to support the
8086 on up? I got a rotate error for TSR.asm re LSPPP:

1290 ;
1291 ; main routine
1292 ;
1293 03C1 go PROC
1294 ifdef EXE
1295 03C1 8C D3 mov bx,ss
1296 03C3 8C C0 mov ax,es
1297 03C5 2B D8 sub bx,ax
1298 03C7 8B C4 mov ax,sp
1299 03C9 05 000F add ax,0fh
1300 shr ax,4
**Error** tsr.ASM(1028) Rotate count out of range
1301 03CC 03 D8 add bx,ax

-so this code is for x186 or later, which allows an immediate value
other than 1.

Steve

Anonymous Guy

unread,
Mar 3, 2005, 5:55:02 AM3/3/05
to

On 2005-03-02 Steve Dubrovich said:

> You should probably start a new thread, were you looking to
> support the 8086 on up?

Might be best to keep the code 8086 compatible whenever possible,
since that's what the available CP/M-86 tools support.

Although personally, I have no problem using the occasional 'db'
statement to encode 186+ 16-bit instructions, or a 66h / 67h prefix
to enable 32-bit instructions.

The chance of anyone running a CP/M-86 'Net access program on a
PC or XT are pretty slim, I'm guessing.

But if we find that we NEED to use 186 or higher instructions, we
can simply include a routine at the beginning of the program to check
the processor type -- and error out if an 8086/8088 is detected.

> I got a rotate error for TSR.asm re LSPPP:
>
> 1290 ;
> 1291 ; main routine
> 1292 ;
> 1293 03C1 go PROC
> 1294 ifdef EXE
> 1295 03C1 8C D3 mov bx,ss
> 1296 03C3 8C C0 mov ax,es
> 1297 03C5 2B D8 sub bx,ax
> 1298 03C7 8B C4 mov ax,sp
> 1299 03C9 05 000F add ax,0fh
> 1300 shr ax,4
> **Error** tsr.ASM(1028) Rotate count out of range
> 1301 03CC 03 D8 add bx,ax
>
> -so this code is for x186 or later, which allows an immediate value
> other than 1.
>
> Steve

As you undoubtedly know, Steve, this SHR problem is trivial, and
easily solved. In this case, we just replace the

SHR AX,4

with

MOV CL,4
SHR AX,CL

Or, in a pinch, even

SHR AX,1
SHR AX,1
SHR AX,1
SHR AX,1

We run into a lot of this sorta stuff when porting DOS code to
CP/M-86. But it's all handle-able.

It's a minor annoyance, fersher, but it's usually no big deal
to fix (he said, with fingers crossed). :)

0 new messages