home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
news
/
cpmnet81.may
< prev
next >
Wrap
Text File
|
1994-07-13
|
23KB
|
531 lines
>>>>>>>>>>>>>>>>>>>>> CP/M-Net News <<<<<<<<<<<<<<<<<<<<<<<<
============================================================
Number 4 May, 1981 Volume 1, Issue 5
============================================================
In This Issue
=============
RCPM Midwest Update
by: Ben Bronson
Computer Widows: To the wifes, girlfriends, etc.
by: Jane Smith, Wife of "SYSOP"
MP/M: A User's Comments and Implementation Methods
by: Kelly Smith
CP/M-Net "Tip-of-the-Month"
Seven Byte Program to Discourage TRACE with DDT or SID
by: Kelly Smith, CP/M-Net "SYSOP"
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RCPM Midwest Update
===================
by Ben Bronson
The big news in these parts as far as programs go is (1)
MicroTelnet (MTN21.OBJ, DOC, MSG, & MTNMSGS.OVR), a splendid
new terminal program by one of your California people, Frank
Wancho (Maybe not a Californian, come to think of it); (2)
FINDBD52, Ron Fowler's long-awaited "universal" FINDBAD [he
has used the tricks he invented for DU-V75 to make it work
for just about any controller without bothering about
assembly options]; and (3) RUN80, which came here from
Dick's system and you know about already. Also an assortment
of smaller programs.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Computer Widows: To the wifes, girlfriends, etc.
================================================
by Jane Smith, Wife of "SYSOP"
When Kelly asked me if I would be interested in writing an
article for his "newspaper", my first response was "NO!".
First of all, I have no training in article writing and
secondly being a housewife, hanging around with the kids,
dog, cats, etc., all day doesn't tend to increase ones
vocabulary. Well, I take that back...I've learned lots of
four letter words, mostly in self-defense! But then, after
thinking it over, I thought "What the hell" (there's one of
those four letter words!).
I think this "home computer" thing started when Pertec
(where Kelly works) loaned us a TRS-80 to play with at home.
[Editor Comment: they were having me evaluate it, to see if
we could make one better and cheaper!].
We had lots of fun playing games on it and even kind of
missed it when it went back to Pertec. So Kelly put together
a little system for us at home...It has ballooned from there
to the point of adding a room onto our house for the
computers, complete with it's own air conditioning unit (God
forbid, it should get too hot!).
I probably wouldn't be too far off to say that 85% of the
time that Kelly is home, he is with the computers, another
5% is spent thinking about it (you can always tell by that
blank stare into space), probably 7% devoted to eating,
sleeping, etc., and maybe I get 3%. I get the impression
that the computer doesn't like me...it usually plans on
breaking about the time Kelly and I are going to spend some
time together.
An example of it's dislike for me was the time Kelly went
on a business trip for two weeks and left me in charge of
running the computer. As soon as it figured out that Kelly
had gone (and had not taken it along), it decided to throw a
fit and not talk to anyone when they called! So everytime
the phone would ring, I had to run in "it's room" and re-
boot the system...a good friend of Kelly's kindly came over
to have a look at it. It ran fine for him all day, but as
soon as he was in his car it said "DISK BOOT ERROR". The
last thing I did before going out the door to pick up Kelly,
was to re-boot the system. The minute Kelly stepped in the
door, it straightend right up and never to my knowledge did
it do that again. I beleive its jealous and that was one of
its little plots to make Kelly think that I'm the one with
the loose screw...
I also find it difficult to join in conversations when
Kelly's friends come to visit. They sit around and talk in a
foreign language! I've tried to join in once or twice, and
usually come up with some intelligent phrase (just to get
your foot in the door) like "Boy, something really funny
happened on the way to the grocery store!"...at which point
(if they even heard you), you get a blank stare as if you're
the one talking in a foreign language! Then without even
asking "what was funny?" the conversation goes back to
"SYSGEN" this, or "PIP" that, or "star-dot-doc".
Do you remember when we were teenagers and we'd invent some
language such as "pig-latin" to talk to our friends, so our
parents wouldn't understand what we were saying? Sometimes I
think that's what these guys are doing, and they're planning
a "Stepford" community...what they're really spending so
much time doing is making "Stepford Wives"! I, for one, have
warned my friends to keep a close eye one me for any changes
along those lines...
I'm also watching for the program "star-dot-sex". That'll
mean it's finally programmed for sex, and there goes my 3%!
I'm sure that this isn't what Kelly had in mind when he
asked for an article, but maybe some of the wives,
girlfriends, etc., can identify with this...
To sum up, I must say that I am glad that you're at home
Kelly...even if you are with the computer.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MP/M: A User's Comments and Implementation Methods
==================================================
by Kelly Smith, CP/M-Net "SYSOP"
Up front, let me recommend that MP/M is NOT for someone who
doesn't know the difference between a 'NOP' and an 'XTHL'!
All those that fail this test, please read the next
article...this is definetely not for you. MP/M is NOT for
someone that has NOT PURCHASED CP/M 2.2, and MP/M is NOT for
someone who has purchased CP/M 2.2 but does NOT have a copy
of the ENTIRE BIOS (i.e., that means ANYONE who has taken
the "easy way out" by buying a ready to run CP/M 2.2 from
Lifeboat Associates). Also, I suspect that MP/M is NOT for
someone who has ALREADY purchased a microprocessor system!
"What?" you ask...well since I have your attention this far,
read on.
MP/M is a powerful multi-tasking/multi-user operating
system that in the hands of the skillful user, a system-wise
('wise' meaning darned smart!) implementor, and the PROPER
hardware environment, can be a very useful software tool.
As always, Digital Research provides less than adequate
documentation for explaining "how to get it running" for
anyone with less than a Master's Degree in Computer
Sciences...it can be done, but you better really "dig in",
learn to "read between the lines", and CAREFULLY EXAMINE the
program examples given (the MP/M 1.0 release documentation
had a few "bugs" that if used, would not work!). Digital
Research has done an excellent job on their PL/I-80 and BT-
80, manuals however...but I always wondered why they kept
putting those PL/M examples in their CP/M manuals (as if
everyone programmed in PL/M and had an Intel MDS-800...oh
well).
O.K., so you ARE an expert, and (let's hope) you have NOT
purchased a microcomputer system (Oh yeah, forgot to
mention: it MUST BE a 8080/Z80 based system!). Let's examine
my implementation of MP/M on a typical "semi-roll-your-own"
microcomputer...in this case, an IMSAI 8080 with 56
kilobytes of RAM, two floppies, one "local user" with a
terminal, and one "remote user" (via an auto-answer modem).
The system "boot and signon" will best illustrate WHY you
should NOT purchase a microcomputer system...so here is what
USER 1 (remote) will see at signon:
MP/M-Net (tm), System #1 <--- (autoload under CP/M 2.2)
>> Multi-user Software Access <<
[USER 1] <--- (your user number)
Enter USER 0<cr>, if you require
access to other MP/M facilities.
===============================
MP/M is a registered trademark
of <--- (giving credit!)
Digital Research
===============================
Booting MP/M Version 1.1 now.... <--- (a slight pause)
MP/M 1.1 Loader <--- (MP/M "boot loader", MPMLDR.COM)
===============
Number of consoles = 2 <--- (indicates 2 user configuration)
Breakpoint RST # = 5 <--- (SID or DDT "break-point" vector)
Top of memory = DFFFH <--- (56 Kilo-bytes of memory)
Memory Segment Table:
SYSTEM DAT DF00H 0100H <--- (system configuration data)
CONSOLE DAT DD00H 0200H <--- (system user console data)
USERSYS STK DC00H 0100H <--- (system user stack area)
XIOS SPR D800H 0400H <--- (extended I/O system process's)
BDOS SPR C400H 1400H <--- (basic disk operating system)
XDOS SPR A500H 1F00H <--- (extended disk operating system)
ABORT RSP A400H 0100H <--- (resident system process, abort)
MPMSTAT RSP 9700H 0D00H <--- (resident system process, MP/M status)
Sched RSP 9200H 0500H <--- (resident system process, scheduler)
-------------------------
Memseg Usr 8000H 1200H <--- (memory for user 0, 4 Kilo-bytes)
Memseg Usr 0000H 8000H <--- (memory for user 1, 32 Kilo-bytes)
MP/M 1.1 <--- (MP/M "sign-on")
1A> <--- (MP/M prompt for user 1)
Now examine the signon carefully...EGADS! A 56k system, and
only 36 kilobytes left BETWEEN USER 0 and USER 1...and whats
worse, is that resident system process's for TIME and
SPOOLER can't be included without giving up some meaningful
amount of memory for user application programs! ARGH...here
I sit with $8,000 worth of hardware and I can't run diddely!
So get the picture? Now it's the old "whip-out-the-wallot-
time-again-folks" syndrome..."let's see, just how much bank-
switched memory can I get for...oh heck, got'ta pay Ma'Bell
first, for that three hour modem transfer from Bruce!".
Well, as I said...DO NOT purchase the computer FIRST! Make
some strong considerations as to WHY you think you need MP/M
then start configuring a system (on paper) with what your
requirements will be and, of course the final problem: will
my wife let me buy it? (!). I would suggest that for a
meaningful environment for MP/M to "live in", you want about
128 Kilobytes of bank-switched memory...that's for just two
"hackers" on the system...and maybe, JUST MAYBE, allowing
one of you to be zapping Klingons while the other is going
"Oooh Aaah" with Wordstar. But then, things get worse:
So you've got memory "up-the-kazoo" huh? Great, so we just
rip along (both users hacking away), and you got the TOD
(time of day) set and you "schedule" an assembly for your
wiz-bang newest program...but wait, that means a real-time
clock...ARGH again! Well let's see, maybe if I turn in ALL
the Coke bottles, and...
Now we have a real-time clock board, and it includes a
"tick-toc" interrupt that we had to have anyway for "round-
robin" polling of all the darned hardware...couldn't afford
to go fully interrupt driven (in fact I scrounged a MITS 88-
VI/RTC board from a friend!). Oh yah...change the XIOS to
disable interrupts during floppy disk DMA (we got one of
those (GAG) Tarbell Double Density disk controllers).
So back to scheduling that assembly...Hmmm, we seem to be
running a little late...let's look at the system with
MPMSTAT...no, the suckers on the queue...must be coming up
soon. Well let's see what time it is according to the
system...(we type in TOD<cr>). WHAT THE HECK??? The darned
clock is late! NOW WHAT (mumble, mumble)?
Well SON-OF-A...Oops, won't go to heaven if we keep this
up! Turns out that to run the disk, we had to turn of the
interrupts, and since we did that, the clock lost time, and
we can't run the schedular properly...now comes ARGH #3.
Where do I find a disk controller that doesn't DMA or hog
the buss, or...worst yet, if I find one, HOW will I pay for
it!?! Let's see, could I sell my wife to the mo'cycle gang
down the street?
O.k., got a heck of a deal on her for $3,500...just enough
to pay for a "buffered" (read "grab data at our leisuer, not
at the disk data rate" here) double density disk controller
from Pertec (An OBVIOUS plug: Model FD3812 or single density
FD3712)...but, OH CRAP (and diddely-squat!)! Now I have to
rewrite my MPMLDR and XIOS...(weep, ARGH #4).
Now I've developed the MPMLDR and XIOS (and of course I've
also developed this annoying 'tick' and people wonder why I
keep jamming the fork into my forehead when I eat)...but
this is part of the FUN OF IT ALL...Right? So now we fire
the turkey computer up again...WOW! FAR OUT! Time of day
clicking right along, schedular bashing programs, on time,
keyboard getting overrun...WHAT? KEYBOARD OVERRUN??? Now
WHAT????
We examine the system with MPMSTAT again...Hmmm, that jerk
on USER 1 is still playing Startrek. Well what could be
going on? Let's think about Startrek for a minute...let's
see, setting up arrays, figuring navigation, just plain old
compute bound stuff...Ooops! COMPUTE BOUND! That's IT! One
piddely little 8080 CPU (beating it's heart out) trying to
handle some heavy-weight computations while I sit here
slogging it out with this text editor...ARGH #5. Well this
ones a "tuffy", 'cause now I have to go totally interrupt
driven...and the story goes on, and on and...
So that story summarizes the agony of the potential for
disaster if you DON'T PLAN AHEAD. So what did we learn from
all this? Well I figure that we spent about $7,000, my wife
is living with a bunch of Harley Freaks, and I got canned at
work because of the obscene things I was doing with a fork
in the company cafeteria. I could have had two SEPERATE
computers and REALLY IMPRESSED the guys at the computer
club!
Well in any case, let's see what we can do with MP/M, so
first we'll see whats going on in the system with MPMSTAT:
1A>mpmstat<cr> <--- ( we type this in...)
***** MP/M 1.1 Status Display ****** <--- (MP/M responds)
Top of memory = DFFFH <--- (yah, 56k; it was just a story!)
Number of consoles = 02
Debugger breakpoint restart # = 05
Stack is swapped on BDOS calls
Ready Process(es):
MPMSTAT Idle
Process(es) DQing:
[ABORT ] ABORT
[Sched ] Sched
[CliQ ] cli
[ATTACH ] ATTACH
Process(es) NQing:
Delayed Process(es):
Polling Process(es):
Tmp0
Process(es) Flag Waiting:
01 - Tick
02 - Clock
Flag(s) Set:
03
Queue(s):
ABORT MPMSTAT Sched CliQ ATTACH MXParse MXList
MXDisk
Process(es) Attached to Consoles:
[0] - Tmp0
[1] - MPMSTAT
Process(es) Waiting for Consoles:
[1] - Tmp1
Memory Allocation:
Base = 0000H Size = 8000H * Free * <--- FREE Hell! 56k cost
Base = 8000H Size = 1200H * Free * me almost $1,600!!!
1A> <--- (MP/M waiting to do your bidding)
"Well, what does it all mean?" you ask. So here is a brief
explanation:
Ready Process(es) - process(es) that are ready to execute,
and waiting for the system (CPU) to
relinquish time. In this case MPMSTAT
has the highest priority and
momentarily has control.
Process(es) DQing - processes that are waiting for
'messages' from the queues that are in
brackets, and displayed from highest to
lowest system priority.
Process(es) NQing - processes writing to queues, but none
at this time in progress.
Delayed Process(es) - processes waiting for a specified
amount of clock 'ticks' on the basic
system time unit, but none waiting at
this time.
Polling Process(es) - Terminal Message Process USER 0, is
polling the console device.
Process(es) Flag Waiting - processes that set and alter
"syncronization flags" for task building.
Flag(s) Set - the flag indicating that the "one minute
interval" is set.
Queue(s) - all the present queues on the system;
the queues in upper case letters may
receive messages from the Command Line
interpreter (e.g., ABORT followed by a
filename).
Process(es) Attached to Consoles - processes 'attached' to
the console, listed by console number
(user) and process name...USER 0 has
gone to sleep.
Process(es) Waiting for Consoles - Terminal Mesage Processor
USER 1 is waiting for console 1, from
which it was 'detached'.
Memory Allocation - unallocated user memory segments; will
indicate which programs are activly
executing and to which user it is
assigned. Currently non-active, but
then what can you do in 38k anyway with
two users?
If you care to set the "time of day", then enter the month,
day, year, hour, minute, and second, as follows:
1A>TOD 10/04/81 07:35:00<cr> <--- (you enter this)
Strike key to set time<cr> <--- (MP/M responds, you do <cr>)
Sat 10/04/81 07:35:00 <--- (the current "time of day")
Now you may want to "schedule" a task to be executed at
some later time by MP/M. For example, schedule the "time of
day" to be displayed exactly two minutes from now by
entering the following scheduler command:
1A>SCHED 10/04/81 07:37:00 TOD<cr>
Two minutes "tick" by...
1A>Sun 10/04/81 07:37:01 <--- ("time of day" is executed)
The SCHEDuler works with all file and resident system
process's, and allows the user to "stack" a multitude of
tasks on the system for later (and unattended) execution.
Keeping in mind that you are USER 1, you may display the
directory for the diskette in drive A as follows:
1A>dir<cr> <--- (you type DIR, carriage return)
Directory for User 1:
A: MESSAGE X12 : KILLED : MESSAGE X08 : MESSAGE X06
A: MESSAGE X02 : MESSAGE X04 : MESSAGE X00 : CBBS COM
A: WELCOME : SCANHELP : PASSWORD : LOG
A: MESSAGE X10 : HELP : FIRSTIME : ENTRHELP
A: ENTINTRO : BULLETIN : NEXT : MESSAGE X20
A: NOT-FOR YOU : USER ASM : DUPUSR ASM : FILE-XT2 ASM
A: SYSTEM'S DOC : XMODEM COM : MESSAGE X14 : MESSAGE X16
A: MESSAGE X18 : SUMMARY
Now you may wish to see what's "on file" in other user
areas. For example, all the MP/M "system" files are in the
USER 0 area of the diskette in drive A:
1A>user 0<cr> <--- (you type USER 0, carriage return)
User Number = 0
0A>dir<cr> <--- (...and DIR, carriage return again)
Directory for User 0:
A: MPM SYS : LDRBIOS ASM : ODOS SPR : BDOS SPR
A: BNKBDOS SPR : XIOS ASM : ABORT RSP : SPOOL RSP
A: MPMSTAT RSP : SCHED RSP : CONSOLE PRL : DIR PRL
A: DSKRESET PRL : ERA PRL : ERAQ PRL : MPMSTAT PRL
A: PRLCOM PRL : REN PRL : SUBMIT PRL : TOD PRL
A: TYPE PRL : USER PRL : SPOOL PRL : STOPSPLR PRL
A: SCHED PRL : ABORT PRL : ED PRL : PIP PRL
A: STAT PRL : RDT PRL : ASM PRL : GENMOD COM
A: GENHEX COM : LOAD COM : GENSYS COM : SUBMIT COM
A: XDOS SPR : MAC COM : MPMLDR COM : SYSTEM DAT
A: XIOS SPR : DISKDEF LIB : ASMPRL SUB : ASMSPR SUB
A: MACPRL SUB : MACSPR SUB
0A>
Now, stop and consider this: ALL those "built in" commands
that you used in CP/M 1.4 and 2.2 are now DISK RESIDENT.
That means they take up ROOM on your diskette! And precious
little room there is, 'cause the resident system processes
also have to be on the disk, and in addition it would be
nice to have some applications programs to run when two
users are on the same diskette...I sure hope that was double
density that we bought for the system...a standard 8 inch
floppy can just about hack it with two users.
In conclusion, I would NOT suggest MP/M for the average
"hacker"...the cost-versus-performance on a low budget
system is something of a disappointment if you are not
prepared to empty your checking account (or sell your wife!)
to add the hardware that is essential to make MP/M really
"shine". Your hardware/software dollars would probably be
better spent on a second system, as the "work-horse" for
printing and number crunching while you edit and assemble
programs on the first. In any case, it was a fun experience
and I did learn alot about system planning/design, interrupt
driven software environments, and just how far you can push
one 8080 CPU! I hope that my experience is of some help to
you......now where's that CP/Net manual?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CP/M-Net "Tip-of-the-Month"
===========================
Seven Byte Program to Discourage TRACE with DDT or SID
======================================================
by Kelly Smith, CP/M-Net "SYSOP"
Here's a simple routine to add to any program to discourage
anyone from tracing (and revealing) your program's internal
operation. In it's simplist form:
check$ddt$or$sid: ; check if program is being looked at
;
lda 6 ; get content of address 6
ora a ; set flags
jz banzai ; use what ever means you think fit to
; clobber this guy...
;
... ; continue normal execution of program
This short routine works as follows: Address 6 is the
(normally) least significant byte of the address to be
called for any operations of the CP/M BDOS (the CALL is at
address 5), and as such it's value is 06 Hex. Digital
Research's DDT and SID debugger programs, when present in
the system, always leave a CALLing address on an EVEN page
boundry in memory at address 6...this means that address 6
will have a 00 Hex byte for the least significant byte of
the address...so this routine simply checks to see if the
address is 0! Now if it is, you can BANZAI the continued
operation of the TRACE by...hmmm, erase the disk directory
(?), or erase ALL of memory (?), or...well you get the
point. To be really clever with this, save the result of
address 6...let the jerk trace for awhile to lose track of
why you did the LDA 6, then set the flags, run awhile
longer, then (after he/she has forgotten that also) check
the result of the flags...
P.S. This will not work with FAST running in conjunction
with your program, so watch out! Also, my prefered method to
BANZAI the person trying to "tear apart" my software, is to
scramble the program, then write it back out to
disk...remember, that BDOS CALL's cannot be traced anyway,
so about the time that the "tracer" realizes that file
open/write/close occurs...it's just to late!