121632 001_A_Guide_to_Intellec_Series_III_Microcomputer_Development_Systems_Mar81 001 A Guide To Intellec Series III Microcomputer Development Systems Mar81

121632-001_A_Guide_to_Intellec_Series_III_Microcomputer_Development_Systems_Mar81 121632-001_A_Guide_to_Intellec_Series_III_Microcomputer_Development_Systems_Mar81

User Manual: 121632-001_A_Guide_to_Intellec_Series_III_Microcomputer_Development_Systems_Mar81

Open the PDF directly: View PDF PDF.
Page Count: 111

Download121632-001_A_Guide_to_Intellec_Series_III_Microcomputer_Development_Systems_Mar81 121632-001 A Guide To Intellec Series III Microcomputer Development Systems Mar81
Open PDF In BrowserView PDF
SYSTEMS

intJ
~.

Aguideto

INrELLEC® SERIES III
MICROCOMPUTER
DEVELOPMENT
SYSTEMS
121632-001

Copyright © 1981 Intel Corporation
Intel Corporation, 3065 Bowers Avenue, Santa Clara, California 95051

Additional copies of this manual or other Intel literature may be obtained from:
Literature Department
Intel Corporation
3065 Bowers Avenue
Santa Clara, CA 95051
The information in this document is subject to change without notice.
Intel Corporation makes no warranty of any kind with regard to this material, including, but not limited
to, the implied warranties of merchantability and fitness for a particular purpose. Intel Corporation
assumes no responsibility for any errors that may appear in this document. Intel Corporation makes no
commitment to update nor to keep current the information contained in this document.
Intel Corporation assumes no responsibility for the use of any circuitry other than circuitry embodied in
an Intel product. No other circuit patent licenses are implied.
Intel software products are copyrighted by and shall remain' the property of Intel Corporation. Use,
duplication or disclosure is subject to restrictions stated in Intel's software license, or as defined in ASPR
7-104.9(a)(9).
No part of this document may be copied 'or reproduced in any form or by any means without the prior
written consent oflntel Corporation.
The following are trademarks of Intel Corporation and its affiliates and may be used only to identify Intel
products:
BXP
CREDIT
i
ICE
iCS
im

inte l
In television

Megachassis
Micromap

Intellec
iRMX
iSBC
iSBX

Multibus
Multimodule
PROMPT

lnsite

Library Manager

Intel

MCS

Promware

RMX/SO
System 2000
UPI
~Scope

and the combination of ICE, iCS, iRMX, iSBC, iSBX, MCS, or RMX and a numerical suffix.

ii

PREFACE
This book is a welcome mat for the Intellec Series III Microcomputer Development System. It is
also an introduction to the world of software development for micro-applications. We assume
that you have some basic knowledge of microprocessors and their applications, but few
demands are made on that knowledge. We do not assume that you have had exposure to any
particular programming language. This book can be useful to beginners, and even
sophisticated readers should find it rewarding to skim through.
This book is a tutorial for using the Series III system, especially the "8086 side" of it (the 8086
execution environment). The "8085 side" is similar to a Series II system, which is described in
A Guide to /ntel/ec Microcomputer Deve/opment SystemS by Daniel McCracken.
We lead you through a typical software development process by providing an example of a
micro-application: a climate control system for a building. To keep the example easy to
understand, we only describe the software development effort, assuming that the hardware for
the climate system is being developed simultaneously. In fact, we illustrate some typical problems in software development that occur as a result of changing hardware designs.
Chapter 1 gives an overall view of the Series III system and the application example. It also
describes top-down design, stepwise refinement, modular programming, design considerations, and how to choose the proper software language for each module.
Chapter 2 is a step-by-step tutorial on the Series III operating system, showing typical
operations.
Chapter 3 is a step-by-step tutorial on CREDIT, and it incidently shows the process of stepwise
refinement of the application's main control algorithm.
Chapter 4 describes Pascal-86 programming, structured and modular design, parameter passing, data typing, and the Pascal-86 compiler.
Chapter 5 describes PLlM-86 programming, and it shows a sample PLlM-86 routine used in the
application. It also briefly describes the PLI M-86 compiler and the 8086/8087/8088 Macro
Assembler.
Chapter 7 describes program debugging with DEBUG-86 and hardware emulation with the
ICE-88 emulator.
There is also a bibliography of related material, and a list of Intel manuals supplied with the
Intellec Series III Microcomputer Development System.

iii

CONTENTS
Page
CHAPTER 1: THE SOFTWARE DEVELOPMENT PROCESS.............................
Defining the Product's Software .......................................................
Choosing the Software Development Tools .............................................
Languages ...........................................................................
Modular Programming ................................................................
Debugging and In-Circuit Emulation ....................................................
Using Your Final Product ..............................................................

1
3
5
5
6
7
8

CHAPTER 2: OPERATING THE SERIES III SYSTEM ................................. ..
Turning On Your System ............................................................. .
The Directory Listing ................................................................. .
Formatting Disks .................................................................... .
Hard Disk Subsystem Users ........................................................ .
Flexible Disk Users ................................................................ .
Filenames, Path names, and File Attributes ............................................ .
Renaming and Deleting Files ... _..................................................... .
Copying Files to Disks and Devices ................................................... .
Executing Commands and Programs .................................................. .
Summary of the Series III Operating System ........................................... .

9
9
10
13
13
14
15
18
19
22
25

CHAPTER 3: TEXT EDITING ........................................................ .
Creating a Text File and Inserting Text ................................................ .
Moving Around in the Text File ........................................................ .
Finding Old Text and Substituting New Text ........................................... .
Macros and Command Iteration ....................................................... .
Ending a Text Editing Session and Managing Backup Files ............................. .
Displaying and Printing Text Files .............................. " ..................... .
From Text to Program ................................................................ .

27
28
32
33
36
38
39
39

CHAPTER 4: PROGRAMMING IN PASCAL-S6 ........................................ .
Translating Pidgin Pascal to Pascal-86 ................................................. .
Pascal-86 Data Types ................................................................ .
Another Look at Modularizing.and Hiding Information .................................. .
Passing Data to Other Modules-Parameter Passing Techniques ....................... .
The Interface Specification ........................................................... .
Test Version of the Climate Control System ............................................ .
The Pascal-86 Compiler .............................................................. .
Summary ........................................................................... .

41
41
45
46
48
49
49
55
61

CHAPTER 5:
Another Look
Programming
Programming
Programming

63
63
64
69
70

PROGRAMMING IN OTHER LANGUAGES ............................. ..
at Choosing Languages for Modules ..................................... .
in PLlM-86 ............................................................. .
in 8086/8087/8088 Assembly Language ................................... .
For the Series III Environment ........................................... .

v

CONTENTS (Cont'd.)

PAGE
CHAPTER 6: USING UTILITIES TO PREPARE EXECUTABLE PROGRAMS .............. 75
Preparing a Library of Program Modules ................................................ 76
Linking Modules to Form a Locatable Program .......................................... 77
Locating and Running Programs ....................................................... 78
CHAPTER 7: DEBUGGING AND EXECUTING PROGRAMS ............................ 81
Using DEBUG-86 For Symbolic Debugging ............................................. 82
Using ICE-88, an In-Circuit Emulator .................................................... 92
Execution Environments .............................................................. 95
BIBLIOGRAPHY .. .................................................................... 97
INDEX ............................................................................... 99
THE INTELLEC® SERIES III PUBLICATIONS LIBRARY

ILLUSTRATIONS
FIGURE

1-1
1-2
1-3
3-1
3-2
4-1
4-2
4-3
4-4
4-5
4-6
5-1
5-2
5-3
6-1
6-2
7-1
7-2
7-3

vi

TITLE

PAGE

Developing Software on the Series III System ................................
Block Diagram of Our Climate Control System ................................
Nassi-Schneiderman Chart for Our Climate Control Software ..................
The CREDIT Video Display ..................................................
The Series III Keyboard .....................................................
Algorithm for the Climate Control Main Module ...............................
First Try at Coding the Main Program ........................................
Second Try at Coding the Main Program .....................................
The Interface Specification .................................................
Test Version of Our Climate Control System ..................................
Lisings of Our Test Modules ................................................
The PLlM-86 Typed Procedure THERMOSTAT$SETTING$FROM$PORTS .......
The PLI M-86 Typed Procedures
TEMP$DATA$FROM$PORTS and INTERPOLATE .........................
Listing of PLMDATA with the CODE Control ..................................
Using Utilities to Prepare Executable Programs ..............................
Main Module with Subordinate Modules .....................................
Climate Control Program Listing and Sample Run ............................
Listing of the Modified PLMDATA Module ....................................
Possible Execution Paths for Pascal-86 Programs ............................

2
3
4
28
29
42
43
47
50
51
57
64
66
71
75
77
85
92
96

CHAPTER 1
THE SOFTWARE DEVELOPMENT PROCESS

"Hardware is computing potential; it must be harnessed and driven by software to be useful."
--Andrew S. Grove, President of Intel Corp.

The Intellec Series III Microcomputer Development System is more than a keyboard, a video
display, an integral disk drive, and a box with two microprocessors. It is a useful tool for
designing microcomputer software for the iAPX 86,88 processor family or for the 8080/8085 processors. You can choose the appropriate language (PUM, FORTRAN, Pascal, macroassembly language) for each piece of software, debug these pieces separately, and link them
in different ways for different applications. The applications can then be run on this system or
any other system that is based on the iAPX 86,88 or 8080/8085 families of processors.
Intel's iAPX microprocessor family provides an architecture best suited for modular software
development using high-level languages. The Intellec Series III Microcomputer Development
System takes full advantage of this architecture to provide a more cost effective programming
environment that guarantees a shorter development cycle.
To design a product that will contain a microprocessor, you must coordinate two efforts: the
design of the hardware that surrounds the microprocessor, and the design of the software that
controls the microprocessor. Hardware development involves planning the interaction of the
microprocessor, the associated memory and peripheral circuits, and the specialized
inputloutput circuits and processors. Software development involves programming the
microprocessor with instructions that will eventually be stored in the product's memory.
These instructions must be designed to correctly perform the required tasks.
It is possible to carry out these development efforts independently--the hardware development separate from the software development. In practice, however, it takes a long time to
develop error-free software on prototype hardware. To achieve good system integration and to
save time, software debugging must usually begin long before prototype hardware is available
to test the software.
The Intellec Series III with in-circuit emulation (ICE) is a development solution because it provides support for parallel hardware and software development efforts. Using the ICE-86 or
ICE-88 emulator, you can emulate parts of your prototype hardware in order to test your software in a stable environment that resembles your final product. The ICE-86 or ICE-88 emulator
also allows you to substitute memory and other resources from the Series III system for the
memory and resources missing in your prototype hardware. With the ICE-86 or ICE-88
emulator, prototype hardware can be added to your product as you are designing it, and software and hardware testing can occur simultaneously (thereby speeding up the entire development process).

CHAPTER 1
The chart in figure 1-1 summarizes a software development process, starting with an idea for a
final product. Such a process always starts with an idea, which you refine step by step until
you can define the actual product's environment, hardware, and logic.
To provide a tutorial on using the Intellec Series III system, and to show how Intel's software
development tools are used in a development situation, we provide a simple software application for the iAPX 88 microsystem, at the heart of which is an 8088 microprocessor. The application is a climate control system for a building that uses a solar collector for heating and cooling, with backup methods of heating and cooling when the solar collector is not adequate. All
methods use water, storage tanks, and a water-to-air exchanger or heat pump.

USING INTEL'S UNIVERSAL PROM
PROGRAMMER TO PROGRAM PROMS

USING INTEL'S PROGRAMMING LANGUAGES; LINKING,
lOCATING, AND LIBRARY MANAGEMENT UTILITIES; AND
DEBUGGING TOOLS, INCLUDING ICE'M IN-CIRCUIT EMULATORS

Figure 1-1. Developing Software on the Series III System

2

121632-1

SOFTWARE DEVELOPMENT PROCESS
Several decisions about this climate control system can be deferred to a later date. For example, by designing the system's software in a modular fashion, we can add more methods of
heating or 900ling as necessary, and we can decide how to handle water pumps and valves at a
later date. We know now that the software's primary purpose is to choose a method of heating
or cooling based on temperature data, and to operate the climate system's pumps and valves.
Figure 1-2 is a simplified block diagram of the application.

DEFINING THE PRODUCT'S SOFTWARE
As you define your product's hardware, you must also define the purpose of its software. For
example, the purpose of the software for our application is to gather and store the appropriate
temperature data, decide on a heating or cooling method based on that data, implement the
method in the climate system, and maintain the operation of the climate system. Each task can
be designed as a piece of software called a module. By keeping tasks modular, you can
change the details of any task without affecting the details of the other tasks.
Keep in mind that software provides the capability to change or add to the product. The entire
product could consist of hardware and logic circuits, but then you might have to rebuild each
unit to add more capabilities or change the flow of the logic. Software that is not modular and
easy to maintain does not solve this problem; therefore, you must define the entire purpose of
the software, with an eye to the future of your product. Keep it modular so that you can replace
modules easily without rewriting modules that already work.
For our climate control system, we defined the software to be a set of modules that receive and
store data, decide heating or cooling methods based on that data, and decide how to operate
the hardware associated with the climate system.
At this time, we do not need a more detailed definition; in fact, more detail would hinder our
process of step by step refinement. It is important to realize the order for these actions: first,
the software has to start up the climate system, Once started, the software has to do several
things over and over (unless the system shuts down): (1) read the various temperatures, (2)
store the data for future reference, (3) decide on a heating or cooling method to use, and (4)
operate· the climate system to provide heating or cooling and. to maintain the system (e.g.,
maintain heat gain).

DATA

CONTROLLING SOFTWARE

CLIMATE SYSTEM

SOLAR COLLECTOR

THERMOSTAT

WATER TANKS
AIR TEMPERATURE

WATER TEMPERATURE

II

MINIMUM SETTINGS,
TEMPERATURE COMPARISONS
TO DETERMINE METHODS
OF HEATING AND COOLING,
INTERACTIVE CONSOLE,
AND FILE TO STORE ALL DATA

EXCHANGER

HEAT PUMP

AMOUNT OF SUNLIGHT
CIRCULATION VALUES
AND PUMPS
TIME OF DAY

INDICATOR LIGHTS

Figure 1-2. Block Diagram of Our Climate Control System

121632-2

3

CHAPTER 1

A good software definition breaks the problem into solvable tasks. The order in which these
tasks must occur also determines the structure of the software. If the structure is simple to
understand, it will be that much easier to implement and maintain.
A Nassi-Shneiderman Chart (shown in figure 1-3) is useful for showing structured blocks of
software. Use whatever charts you find useful, but hide many of the details so that you are not
locked into doing things a certain way. In our application, we hid all details about data types,
input and output, and actual heating or cooling methods. It is most important that we design
each module to be self-reliant; that is, a module should not have to know about details hidden
in another module, especially details that might change in the future.

I

OPERATION MODULE

I

MAIN MODULE

15»

<]

GETDATA MODULE

Heating Methods

Collector To Exchanger
Tank To Exchanger
Collector To Heat Pump
Tank To Heat Pump
Heated Tank To Heat Pump
No Method (No heating demand)

Data

InsideTemp
ThermostatSetting
CollectorWaterTemp
TankWaterTemp
HeatedTankTemp
AmountOfSun (for collector operation)
Hour, Minute (for collector and immersion heater operation)

Figure 1-3. Nassi-Schneiderman Chart for Our Climate Control Software

4

121632-3

SOFTWARE DEVELOPMENT PROCESS

CHOOSING THE SOFTWARE DEVELOPMENT TOOLS
It is unfortunate but common in this industry to find software development systems sorely
lacking in the tools of the trade. There are some systems that force you to put together a whole
program in the limited space they allow, and they don't provide the facility to create a library of
canned routines that you could use with many different programs.
The IntellecSeries III system provides both the ability to put together partial programs, and the
facilities to build libraries of routines that you can link to different programs. The concept of
module is inherent in this system. Whenever you build a partial program, it is a module; and
the module can refer to procedures, functions, and variables in other modules found in
libraries.
For our application, we do not have to decide on one programming language-the Intellec
Series III system supports several, including the high-level languages PLlM-86, Pascal-86, and
FORTRAN-86. We can, however, decide whether or not to use modules that already exist, and
design our application with that decision, or change the decision later and create another
module to replace it.
For example, we already have a module written in PLlM-86 that performs a routine to convert
thermocouple voltage into degrees Celsius. We can decide now to tentatively use it, thereby
saving time by not coding this routine into our main program. We can also decide, at a later
time, not to use it, and substitute our own module to do it. The decision to link which module
does not have to be made until the main program is finished!
By choosing the right tools you can save time and defer decisions on specific details until you
are ready to deal with the details. By deferring such decisions, you keep your software
development effort from becoming too cluttered with rigid design decisions, and you keep the
effort flexible enough to accept change.
The right tools are (1) appropriate high-level languages to choose from, (2) a way to manage
libraries of canned routines, (3) a linker that allows you to link finished (or unfinished) modules
in different ways for different applications, (4) a locater that will locate programs in memory for
you, yet give you the opportunity to specify locations for sections of the program, (5) a symbolic debugger you can use to test modules and partial programs easily, and (6) an in-circuit
emulator to emulate parts of your final product before they exist. The Intellec Series III
Microcomputer Development System supports all of. these tools.

LANGUAGES
When designing a system using top-down techniques, you think in and express concepts in
the highest-level language possible at each refinement step in order to expose the logical concepts and conceal the details.
How can you tell whether you are thinking in a language that is "high-level"? A language is
"high-level" for a given application if you use it to define the overall structure of the software.
You use a lower-level language to express in great detail each piece of code. With a high-level
language you gain a clear understanding of the control structures of the system at the highest
level, and you expose logical flaws in the structure that would have led to subtle bugs in the
code. With these advantages in mind, it makes sense to start your programming with the
highest-level language: English. After you have defined the software in English, you can use a
high-level programming language like Pascal, which allows you to express more detailed code
in a language that resembles English.

5

CHAPTER 1
In Chapter 3, we refine our climate control algorithm step by step. We use as a language
something called Pidgin Pascal, which is really a language of concise declarative English
sentences. Since our control structures can be translated easily from English into Pascal, we
decided to use Pascal-S6 for our main climate control module (this decision does not have to
be final). We do not start the translation into Pascal-S6 until after we have tested the logic of our
Pidgin Pascal algorithm.
Pascal is a language that resembles the control structures of human thought. We don't think in
terms of GO TO branches normally; we consider a job to be a set of tasks to DO WHILE
something is true, or to DO UNTIL something is done. IF something is true or false, THEN do
one thing; ELSE do another thing. In the CASE of several different problems, solve each one
accordingly. Occasionally we might need a disaster bail-out (GO TO a panic routine), but we
should be planning our algorithm to take care of disasters elegantly.
The pOint is: we should think about control structures of a system as structures, not as
individual branch statements. Pascal is one language that was designed to express control
structures; PLI M is another, and some new versions of FORTRAN can be structured
accordingly .
.Another point should now be obvious: you should choose the language best suited for the
algorithm. For example, our module that operates the climate system has to manipulate pumps
and valves to implement a chosen heating or cooling method. This operation module receives
the data from the decision-making main module written in Pascal. The operation module might
use bits in a word as control signals to send to the procedure that actually interfaces to the
hardware of the climate system.
We can code this operation module in assembly language or PLlM, since both languages can
easily manipulate bits in a byte or word and respond with appropriate actions based on the
pattern of bits. Our final decision will be made later; in the meantime, we will use a test version
of the operation module, until prototype hardware for the climate system is ready. Our test version will be written in Pascal, and it will simply display appropriate test information at the
console.
It is most likely that the final version of the operation module will not be written in Pascal, since
Pascal does not provide bit manipulation operations. We can also guess that the module will
not be written in FORTRAN--the advantage FORTRAN has over PLI M is its ability to express
complex mathematical formulas. Our climate control system has no complex mathematical
formulas.
We would code the final version of the operation module in assembly language if the application required the most efficient use of processor time and memory; however, PLiM programming saves development and maintenance time since it is easier to learn and the programs are
easier to read and maintain. The only drawback to PLiM is that it is not as efficient in time or
memory, and it cannot compute decimal or real arithmetic. These are not drawbacks in our
application, since we do not need decimal or real arithmetic, nor do we have severe speed and
memory constraints. The advantage of saving development time and maintenance costs with
PLI M far outweigh the advantages of using assembly language.

MODULAR PROGRAMMING
Th.e Intellec Series III system has the linking and locating tools to support modular programming, and the library utility to maintain libraries of canned routines. The decisions we
make at this time are not binding, but they can be very helpful: we can decide now what types
6

SOFTWARE DEVELOPMENT PROCESS
of routines will be separated into which modules. We have several design criteria for making
these decisions. We must be able to (1) write the routines of one module with little knowledge
of the code in other modules, and (2) reassemble and replace any module without affecting
other modules. Each module of our climate control system will contain design decisions that
are hidden from the other modules so that the decisions are not binding.
With these criteria in mind, we designed our system to have several modules: the GetData
module gets and stores our data, the Operation module performs the actual climate system
operation (turning pumps and valves on and off, etc.), and the Main module makes the highlevel decisions.
The only binding decisions to be made at this time concern the data passed between modules.
We try to keep data passing to a minimum, or we try to enforce a data-passing standard that is
easy to comply with. In our climate system, we only need to pass a reference to a data record
to the other modules; the other modules must know what to do with the reference. This datapassing technique is one of the two we can use: pass-by-reference and pass-by-value, which
are described in more detail in Chapter 4.
With the Intellec Series III system capabilities, we can design different versions of the same
module, test each version, and decide at a later time which version to link with the other
modules. We can also defer decisions about the physical memory locations (locations in our
final product's memory) for these modules until after we have debugged our prototype hardware with an In-Circuit Emulator (lCE-86 or ICE-88). In some applications, you never have to
decide physical memory locations; the Intellec Series IIllocater can decide them for you.

DEBUGGING AND IN-CIRCUIT EMULATION
At any time during software development, you can test a compiled module using DEBUG-86. In
certain cases you will want to alter the module to be self-contained; for example, our main
module needs the appropriate data from the GetData module, but the GetData module is not
yet written. We can quickly write a procedure that obtains the data from an interactive session
at the console, link this temporary data acquisition module to our main module, and test our
main module using DEBUG-86.
When we have our modules coded and compiled, we can test the modules in an ICE-86 or
ICE-88 session that can emulate the final product's processor. We can use an ICE-86 emulator
if our final product will contain an 8086 processor, or use an ICE-88 emulator if it will contain an
8088 processor (remember, our iAPX 86, 88 applications software can run on either an 8086 or
an 8088).
For example, our data module will read data from ports of an 8088 processor in our final product. The ICE-88 emulator can emulate those ports before we ever have a prototype of the final
product. Using ICE-88, you can begin testing your software before any prototype hardware
exists. As portions of your prototype become available, you can use them and still borrow
resources like memory from your Series III system.
With in-circuit emulation, you control, interrogate, revise, and completely debug your product
in its own enVironment, or in a stable environment that emulates the final product's environment. Symbolic debugging is one of the key features of Intellec microcomputer development
systems and in-circuit emulators. Symbolic debugging allows you to debug your program
using its own symbols and line numbers-you do not have to convert your symbols to physical
memory addresses.

7

CHAPTER 1

USING YOUR FINAL PRODUCT
Intel supplies other tools to help you put together your final product. If you designed your
product to have its software in ROM (read-only memory), you can use Intel's Universal PROM
Programmer (UPP) with its Universal PROM Mapper (UPM) software to create the PROM
(programmable read-only memory) device to hold the software. You can then install your
device in an SDK-86 or SDK-88 (System Design Kit with an 8086 or 8088 processor), or in an iSBC
(Single Board Computer) system.
You can also run your software in other systems, or in dedicated application environments. For
example, you could transfer your software to RAM (random-access memory) on an SDK-86 or
SDK-88, or to RAM on an iSBC 86/12A (Single Board Computer system with an 86/12A board),
by first using the OH86 utility described in the iAPX 86,88 Family Utilities User's Guide for 8086Based Development Systems to convert the program to hexadecimal object format. You would
then use an appropriate tool to load the software into your execution board (the ICE-86
In-Circuit Emulator, the SDK-C86 Software and Cable Interface, or the iSBC 957 Interface and
Execution Package).
You can also use your Series III development system as the environment for your final software product. The Series III system has an 8086 processor (the "8086 side" or 8086 execution
environment) to run iAPX 86, 88 applications software. As soon as you have debugged your
software, it is ready to be used in any Series III system. Chapter 6 describes the run-time
libraries you use to run your Pascal-86 programs in the Series III environment; you can also
supply your own versions of these libraries to run these programs in another execution
environment. Chapter 6 also shows how you can link modules and locate them in Series III
memory in one easy step to prepare them for execution in the Series III system.
Whatever environment you choose for your final product, Intel provides the appropriate hardware and software tools to develop, debug, and produce your final product. The Intel
environments that are suitable for final software products are excellent investments which can
be upgraded for the software of the future.

8

CHAPTER 2
OPERATING THE SERIES III SYSTEM
"The benefits of using a standardized operating system should prove to be as significant as
the benefits of using standardized microcomputer hardware. Development and programming
costs will be reduced substantially, and you will have an upward compatible interface for future
products. "
-Andrew S. Grove, President of Intel Corp.

As you learned in Chapter 1, the Intellec Series III Microcomputer Development System contains the tools you need to develop software for your application. To use these tools, you must
operate the system; that is, use the system's commands and utility programs.
A large multi-user computer system can serve as a useful analogy to point out the difference
between programming the system and using the system. A working system usually supports
both kinds of activities. In such a large system, one or more programmers might be designing
programs to run on the system. One or more users (who might also be programmers) might be
simply using the programs that have already been developed for the system. Obviously, a user
does not need to know complicated details about the system to use it, whereas a programmer
needs to know such details to write programs for the system.
The Series III system has most of the capabilities of larger systems, but it is only used by one
person at a time. This person could be using the system and its programs, or writing programs
for the system.
We wrote this chapter for people who need to know how to use the system. This information is
important to anyone using or programming the system, but it is not burdened with details that a
first-time user does not need. As we describe system commands and utility programs, keep in
mind that we swept the more complicated details under the rug to keep the chapter easy to
read. For more details on all of the system commands, see the Inte/lec Series /II Microcomputer Development System Console Operating Instructions.

TURNING ON YOUR SYSTEM
Every microcomputer has something called an operating system, which is sometimes called a
supervisor or monitor. It is usually the first piece of software you use-the software that is controlling your computer when you first turn it on, and the software that responds to your first
typed command. Typically, you type a command to ask the computer for a list of the files you
have on disk, or to execute a particular program.
When you turn on the Intellec Series III Microcomputer Development System, the following
message appears on your screen:

SERIES II MONITOR, Vx.y
9

CHAPTER 2

This message tells you that the monitor is up and running (the x and y represent version
numbers). The monitor is a piece of software that gives you direct control of the Series III hardware. Although you can use the monitor for debugging and other operations, for your purposes the monitor performs one quick activity: it loads the operating system from the system
disk in drive 0 into the computer when you push the RESET button.
To load or "boot" the system, you need a system disk: a disk that holds the operating system
files. Intel supplies a flexible disk labeled "ISIS-II Operating System" which is your system
disk. One of the first operations you will perform is a formatting operation to create another
copy of the system disk-a copy designed to be used with the examples in this book.
You insert the "ISIS-II Operating System" disk into flexible disk drive 0, and push the RESET
button (for more detailed instructions, see the Intellec Series 11/ Microcomputer Development
System Console Operating Instructions). The following message should appear on your
screen:

ISIS-II, Vx.y
The operating system for the Intellec Series III Microcomputer Development System is called
ISIS-II ("ISIS" stands for Intel Systems Implementation Supervisor). The x ahd y represent version numbers. ISIS-II is actually a version of the ISIS operating system that runs on older
Intellec systems (the Intellec Microcomputer Development System and the Intellec Series II
Microcomputer Development System).
ISIS-II manages your use of the software tools supplied with the system. Using ISIS-II, you can
run utility programs like CREDIT (a text editor) to write programs, or LlNK86 to link program
modules into a final program. You also use ISIS-II to run compilers like the Pascal-86 and
PUM-86 compilers, and to run your own developed programs. You can also make copies of
programs and control the devices attached to your system by using ISIS-II commands.
In most computer operations, you manipulate files, which are collections of information. Every
file has a name, called a filename. Files and filenames are described in detail after an introduction to the most popular operating system command-the DIR command.
You use the DIR command to display a directory of filenames on a certain disk. You use other
commands to perform file management operations. For example, you use the COPY command
to make copies of files, or to send copies of files to the printer to be printed. You use the
RENAME command to change a file's filename. This chapter explains some of these
commands.

THE DIRECTORY LISTING
The first command to learn is the easiest to use-the DIR command. When your system is up
and running, you will see a dash (-) on the left side of the screen. This dash is called a prompt,
and it tells you that the system is ready for your next command. You can now type the DIR command by typing the letters "DIR", and execute the DIR command by pressing the RETURN
key. The following example is shown in blue to show that it is something you type; the part of
the example that is in ordinary black shows what the system displays. The symbol ""
means that you must press the RETURN key ("cr" stands for the "carriage return" key found
on most typewriters).

10

OPERATING THE SERIES III

-OIR
DIRECTORY OF :FO:970003.06
NAME .EXT BLKS LENGTH ATTR
SYSTEM. LIB
24
2849 WS
PLM80 .LIB
45
5615 W

NAME
FPAL

.EXT
.LIB

BLKS
74

LENGTH ATTR
9125 W

143
1317 14 00 4 BL 0 CKS USED
When you execute the DIR command, the system displays a list of filenames called a directory
listing. These filenames are the names of the files that are stored on the disk in drive o. The
DIR command displays the directory for the disk in drive 0 unless you specify another drive
number with the command, as explained in the next paragraph. Disk drive 0 is usually the drive
that holds the system disk (the disk that contains the system files), so by executing the DIR
command by itself, you get a directory listing of some of the files on the system disk in drive 0
(not all, because some files are invisible).
You can use the DIR command to display the directory listing for disks in other disk drives, and
for a hard disk subsystem, by specifying the drive number with the DIR command. For example, to see a directory listing for a disk in drive 1, insert the "CREDIT ISIS-II CRT-Based Text
Editor" disk in drive 1, and type the following command:

-OIR 1
DIRECTORY OF : F1 : 970049.02
NAME .EXT BLKS
LENGTH ATTR
19470
CREDIT
156
171 W
ADOS .MAC
3
VT52 .MAC
3
163 W
1510T .MAC
165 W
3
123
LEAR .MAC
2

NAME .EXT
CREDIT.HLP
MICROB.MAC
VT100 .MAC
1510E .MAC

BLKS
25
3
3
3

LENGTH
2985
158
190
170

ATTR
W
W
W
W

201
310/4004 BLOCKS USED

The Intel/ec Series 1/1 Microcomputer Development System Console Operating Instructions
give details about typical hard disk and flexible disk configurations, and the associated drive
numbers.
On each line of the directory listing, you are shown the name of a file. Some of these filenames
are followed by a three-character extension, which is an optional identifier used to show types
of files. These extensions are sometimes required for certain files that are used with certain
programs. The section on filenames (following disk formatting) explains some of these
extensions.
Following each filename entry are three columns labeled "BLKS", "LENGTH", and "AHR".
The "BLKS" column tells you how many "blocks" of space the file occupies, where one block
equals 128 bytes. The "LENGTH" column gives the actual number of bytes occupied by the
file. At the bottom of the listing appears a message showing how many blocks are used out of
the total number of blocks available on the disk. You can use block figures to describe file
sizes and to determine whether a file of a given size (In blocks) will fit on a disk.
The "AHR" column might be empty, or it may contain a "W", "S", or both. This column tells
you the attributes of each file-certain characteristics that govern the file's use. If a file has the
"W" attribute, it is write-protected; that is, you cannot write to or delete (overwrite) the file. If a
11

CHAPTER 2

file has the "S" attribute, it is a system file that occurs on most system disks. You use the
ATTRIB command and file attributes to protect your files from inadvertant delete or write
operations, and to designate certain files as system files (as shown in the next section).
There are other files not displayed through normal use of the DIR command. These files are
invisible; that is, they have the I attribute. You can see them if you use a special form of the DIR
command:
-DIR 1< c r>

DIRECTORY OF :FO:970003.06
lENGTH ATTR
NAME .EXT BlKS
I SIS
.0 I R
26
3200
IF
2944
IF
24
I SIS .TO
94
11740 SIF
I SIS . BIN
4909 WSI
ATTRIB
40
DELETE
39
4824 WSI
7240 WSI
EDIT
58
48
5994 WSI
HDCOPY
7895 WSI
IDISK
63
10227 WSI
LIB
82
4578 WSI
LINK .OVL
37
OBJHEX
28
3337 WSI
SUBMIT
39
4821 WSI
.LIB
74
9125 W
FPA l

NAME
.EXT
.MAP
I SIS
I SIS .lAB
I SIS . CLI
COPY
DIR
FIXMAP
HEXOBJ
FORMAT
LI NK
lOCATE
RENAME
SYSTEM.LIB
PlM80 .LIB

BlKS
5
54
20
69
55
52
34
62
105
120
20
24
45

lENGTH
512
6784
2407
8489
6815
6498
4133
7794
13074
15021
2346
2849
5615

ATTR
IF
IF
SI F
WSI
WSI
WSI
WSI
WSI
WSI
WSI
WSI
WS
W

1317
1317/4004 BLOCKS USED
The "I" is called a switch, and it displays files that have the invisible attribute. When you
specify the "I" switch in a DIR command, the DIR command displays all of the filenames,
including ones that are invisible. The files that weren't displayed during the execution of a normal DIR command are now displayed, along with their attributes (one of which is the "I"
attribute). The "F" attribute is reserved for system files that are used to format the disk. These
files are called format files, and you should never alter their attributes.
You should practice using the DIR command, and at the same time, take a look at the directory
listings for each disk you received. Take each flexible disk, insert it into drive 1, and type "DIR
1" to see the directory listing.
NOTE

If you have a hard disk subsystem with only one flexible disk drive, use the following
form of the DIR command:

-DIR P
LOAD SOURCE DISK, THEN TYPE (CR)
Takeout the system disk and insert the disk whose directory you want to display,
then press the RETURN key. After the directory listing, the following message
appears:

LOAD SYSTEM DISK, THEN TYPE (CR)
Put the system disk back into the flexible drive. To see other disk directory listings,
repeat these steps for each disk.

12

OPERATING THE SERIES III

FORMATTING DISKS
We present in this section a typical scheme for storing copies of your Intel-supplied files on
either hard disk or flexible disk. Subsequent examples in this book assume that certain programs reside in hard disk drives 0 and 1, or flexible disk drives 0 and 1. You may use your own
scheme and distribute files over disk drives as you wish, but in order to type the examples as
they are, you must use the scheme presented here. If you understand the use of path names as
described in this chapter, and if you use the COPY command correctly, you can copy files to
disks in any distribution scheme you choose, and still use the examples in this book as long as
you substitute your own path names.
If you are using a hard disk subsystem, you must follow the procedures in the Intellec Series 11/
Microcomputer Development System Console Operating Instructions to install your disk platters and prepare them for use. If you are using flexible disk drives, you should refer to the
same manual for instructions on the care and insertion of flexible disks. This section shows
you how to prepare one hard disk platter or one flexible disk as the system disk, and another
hard disk or flexible disk as a non-system disk (to hold your files and other programs).

Hard Disk Subsystem Users
Follow the instructions in the Intellec Series 11/ Microcomputer Development System Console
Operating Instructions to install and power-up your hard disk subsystem. When the hard disk
subsystem is ready, insert your "ISIS-II Operating System" flexible disk into the flexible disk
drive of your computer, and hit the RESET button. When the dash (-) prompt is displayed (after
the ISIS-II message appears), type the following command:

-:F4:FORMAT :FO:SYSTEM.HDK S FROM 4
This command prepares ("formats") drive 0 of the hard disk to be the system disk. We chose
"SYSTEM.HDK" for its name, but you can use any name that has at most six characters to the
right of the period, and three to the left. When this operation is finished, and the system
displays the dash (-) prompt, use the following command to transfer your system files to drive 0
of the hard disk:

-:F4:COPY :F4:*.* TO :FO:
This command will copy all of the files from the "ISIS-II Operating System" disk in the flexible
disk drive (called drive 4) to the hard disk drive o. When this operation is finished, you can
remove the flexible disk from drive 4 and insert another flexible disk. In addition to the "ISIS-II
Operating System" disk, you should also copy files from the "CREDIT ISIS-II CRT-Based Text
Editor" disk, the "Resident 8086/8087/8088 Macro Assembler" disk, and the "Resident
8086/8088 Utilities and Linkage Libraries" disk. For each flexible disk, execute the following
command:

-COPY :F4:*.* TO :FO:
This command copies all files from the flexible disk to drive 0 of the hard disk. If you insert
each flexible disk you received and perform this operation, you will have in drive 0 all of the
files from those flexible disks. If you want to be more selective about the files you are copying
to drive 0, read the "Copying Files" section in this chapter.

13

CHAPTER 2
You should al.so copy files to drive 1 of the hard disk subsystem. First, you must prepare drive 1
by typing the following command:

-FORMAT: F1 :PROG86. HDK
We chose "PRQG86.HDK" for its name, because we intend to use it for our iAPX 86,88 application programs. If you are a Pascal-86 user, insert the "Pascal-86 Compiler and Run-Time
Libraries" disk into flexible disk drive4 and copy all of the files to the hard disk drive 1:

-COPY

:F4:*.* TO

:F1:

Do the same operation with your PLlM-86 flexible disk, and any other disks you have for your
Series III system. The hard disk platters have plenty of room for your own files.

Flexible Disk Users
This section assumes that you have at least two double-density flexible disk drives. If you have
single-density drives, you may run out of room if you try these examples. Refer to instructions
in the Inte/lec Series Iff Microcomputer Development System Console Operating Instructions
for information about flexible disks.
To bring up your system, insert the "ISIS-II Operating System" disk into drive 0 and push the
RESET button. The ISIS-II message should appear, followed by the dash (-) prompt. Insert a
blank disk into drive 1, and type the following FORMAT command:

-FORMAT

:F1:SYSTEM.FLX S

This command creates a new system disk and automatically copies f19m drive 0 all files that
have the "S" attribute. When this operation is finished, you can test YO\lr new system disk by
removing the "ISIS-II Operating System" disk from drive 0, inserting your new system disk into
drive 0, and pushing the RESET button to restart the system.
With your new system disk in drive 0, insert the "CREDIT ISIS-II CRT-Based Text Editor" disk
into drive 1, and type the following command:

-COpy

:F1:CREDIT TO

:FO:

This command copies the program CREDIT to our system disk in drive O. Remove the CREDIT
disk from drive 1 and insert the "Resident 8086/8087/8088 Macro Assembler" disk into drive 1.
Type the following command:

-COpy :F1:RUN.* TO :FO:
:F1:RUN COPIED TO :FO:RUN
:F1:RUN.OVO COPIED TO :FO:RUN.OVO
This command copied two files at once-RUN and RUN.OVO-from drive 1 into drive O. You
need both files in order to use the special RUN command described later.
14

OPERATING THE SERIES III

Remove the flexible disk from drive 1 and replace it with the "Resident 8086/8088 Utilities and
Linkage Libraries" disk. Now type the following commands:

-COpy :F1 :LIB86.86 TO :FO:
:F1:LIB86.86 COPIED TO :FO:LIB86.86
-COpy :F1:LOC86.86 TO :FO:
:F1:LOC86.86 COPIED TO :FO:LOC86.86
-COPY :F1:LINK86.86 TO :FO:
:F1:LINK86.86 COPIED TO :FO:LINK86.86
You now have a system disk that is complete for the examples in this book. You still need
another disk for the Pascal-86 compiler if you have one, to hold the compiler, the run-time
libraries, and your sample program used in examples in this book. To prepare a blank disk to
be a non-system disk, insert the blank disk into drive 1 and type the following command:

-IDISK :F1:PASC86.FLX
NON-SYSTEM DISK
The IDISK command can prepare both system and non-system disks, but it does not
automatically copy files except the ISIS-II format ("F") files.
With the new blank disk in drive 1 and the system disk in drive 0, you could put the "Pascal-86"
disk in drive 2 (if you have a drive 2). The following example assumes that you only have drive 0
and 1. To copy the files from the "Pascal-86" disk, first type the following command (don't
forget the "P"!):

-COpy *.* TO :F1: P
LOAD SOURCE DISK, THEN TYPE (CR)
The system pauses (because you specified a "P" at the end of the command), and waits for
you to insert the "source" disk into drive O. The "source" disk in this case is the "Pascal-86"
disk, assuming you are a Pascal-86 user (if you're using PLlM-86 only, you would substitute
your PLlM-86 disk in this example). Insert this flexible disk into drive 0 and press the RETURN
key.

LOAD OUTPUT DISK, THEN TYPE (CR)
Since the disk to receive the Pascal-86 files is already in drive 1, you only have to press
RETURN. The system should then display the above messages (along with the "COPIED"
messages) every time it returns to drive Oto copy more files-all you have to do is continue to
press RETURN until the entire copy operation is finished.
You can repeat these steps with another blank disk for the PLlM-86 compiler. After these formatting and copying operations, you should have disks that match the ones we used for the
examples in this book.

FILENAMES, PATHNAMES, AND FILE ATTRIBUTES
Most operating system commands manipulate files. A file can be any collection of information
including text, numeric data, program instructions, and combinations of all of these. You refer
to a file by using a filename, and filenames follow certain naming conventions so that the name
of a file also tells you the probable use of the file.

15

CHAPTER 2
Filenames can have six or fewer characters, followed by an optional period and threecharacter extension. Extensions (and filenames themselves) follow certain conventions, but
there are no fixed rules. Certain extensions are necessary for certain programs, as you shall
see in the following discussion. The file naming conventions are relaxed so that you have the
flexibility to create your own file naming conventions for your particular application.
The term filename refers to both the name of the file and the extension, if any. Each new file
you create must have a unique name for that disk (that is, you can have two files with the same
name on two different disks, but not on the same disk). Some extensions have specific meanings to utility programs in the system, but these should not cramp the style with which you
impose your own naming conventions. Here are the extensions that mean something to Intelsupplied programs:
•

The" .BAK" extension denotes a backup of a text file created by CREDIT, the text editor
described in Chapter 3. For example, LETTER.BAK is the backup file for the text file
LETTER.TXT (a text file does not need a particular extension, but "TXT" helps identify it).

•

The" .MAC" extension denotes a "macro" file used with certain programs like CREDIT.
The" .MAC" files supplied with CREDIT enable you to use CREDIT on other non-Intel consoles connected to Intel microcomputers.

•

The" .OVO" extension denotes an "overlay" file used with certain programs.

•

The" .OBJ" extension denotes an object module, which is created by a compiler or
assembler, as described in Chapters 4 and 5. Compilers and assemblers also create files
with the" .LST" extension to denote program listings (also de.scribed in Chapters 4 and
5). Examples are PROG1.0BJ and PROG1.LST.

•

The" .LNK" extension denotes a collection of object modules that were linked together
by the linker utility program, described in Chapter 6. When you run the locater utility program on a file with the" .LNK" extension, the locater strips the" .LNK" extension away,
leaving only the file's name without an extension.

•

The" .LlB" extension denotes a library module that is maintained by the library utility.
Library modules are described in Chapter 6.

•

The" .86" extension denotes a program that should be executed in the 8086 execution
mode (the "8086 side" of the system). Examples are PASC86.86 and PROG1.86.

Most completed programs have either the" .86" extension (if they run in the 8086 execution
mode, described later in this chapter), or no extension. For example, the DIR command is
actually a program named "DIR" without any extension.
In addition to the above extensions, we use the" .SRC" extension to denote a special text file
that holds program instructions called source statements. A ".SRC" (for "source") file can be
created by CREDIT and filled with assembly language, PLlM, or Pascal source statements; you
can then compile this file to create an object module (" .OBJ" file), as described in Chapters 4
and 5.
You can find more extensions explained in the Intel/ec Series 11/ Microcomputer Development
System Console Operating Instructions.
You can display the directory information for a single file by using a version of the DIR command, DIR FOR:

-DIR FOR SUBMIT
DIRECTORY OF SYSTEM.FlX
NAME .EXT BlKS
lENGTH
SUBMIT
39
4821
16

ATTR

OPERATING THE SERIES III

The file SUBMIT is in the directory for drive 0, so the DIR command had no trouble finding it.
However, if SUBMIT happened to be on another disk in drive 1, you would have to tell DIR to
look in drive 1 for the file. To do this, you use a pathname-a filename with a directory
specifier. Whenever you specify a filename for a command or utility program, if the filename is
in the directory for drive 0, you only have to specify the filename. If the filename Is not in the
directory for drive 0, you have to specify a pathname.
A path name consists of a directory specifier and a filename:

: F1: PROG1 • SRC
The ":F1:" part of the path name is the directory specifier. The "1" stands for disk drive 1.
Therefore, to get the dire9tory information for the file PROG1.SRC on the disk in drive 1, type
the following command:

-DIR FOR :F1:PROG1.SRC
The number of separate disk drives depends on the configuration of your system. The format
for directory specifiers is:
: Fn:

where n can be any drive number from 0 to 9 (0 would refer to drive 0, which does not have to be
specified).
If you type a directory specifier that is incorrect, you get an error message. For example, suppose you typed the following DIR command with an incorrect directory specifier in the
path name for PROG1.SRC:

-DIR FOR :G1:PROG1.SRC
:G1:PROG1.SRC, UNRECOGNIZEO DEVICE NAME
The "UNRECOGNIZED DEVICE NAME" is the ":G1:" directory specifier. ISIS-II thinks you are
referring to a device by that name, and there is no device by that name. You will find legal
device names in the section that describes copying files.
Another common error occurs when you forget to use the word FOR in the DIR command when
you are trying to get the directory information for one file. For example, you might type this
command:

-DIR :F1:PROG1.SRC
and get this error message:

:F1:PROG1.SRC, UNRECOGNIZED SWITCH
Since you forgot the word FOR, ISIS-II thinks you are trying to specify a switch to the DIR command-and it doesn't recognize ":F1:PROG1.SRC" as a switch! Switches are usually only one
letter or number. Valid switches are described with the DIR command in the Intel/ec 'Series III
Microcomputer Development System Console Operating Instructions.

17

CHAPTER 2

The ATTRIB command assigns attributes to files. You use file attributes to protect your files
from accidental deletions or modifications. You use the ATTRIB command to turn on or off the
file attributes that are described below:
•

"W" for write-protected (The file cannot be written to, modified, renamed, or deleted
unless this attribute is turned off.)

•

"I" for invisible (The file's name and information is only displayed when you execute the
DIR command with the "I" switch.)

•

"S" for system files (System files on a source disk are automatically copied to the output
disk in a FORMAT operation with the "S" switch.)

•

"F" for format files (Format files are automatically copied by the FORMAT and IDISK
commands to format disks. Do not turn off this attribute, nor use it with your own files,
unless you've read its description in the Intellec Series 1/1 Microcomputer Development
System Console Operating Instructions.)

For example, to turn on the "W" (write-protected) attribute for file CREDIT, type the following
command:

-ATTRIB CREDIT W1
CURRENT ATTRIBUTES
FILE
:FO:CREDIT
W
To turn off the "W" attribute, specify a 0 instead of a 1:

-ATTRIB CREDIT WO
FILE
CURRENT ATTRIBUTES
:FO:CREDIT

RENAMING AND DELETING FILES
Occasionally you will have a file with a name that needs to be changed for some reason. For
example, you could rename UB86.86 to UBRY.86 by using the RENAME command:

-RENAME LIB86.86 TO LIBRY.86
The RENAME command always expects to see the original name first, followed by a space,
then the keyword TO, followed by another space, and finally the new name. Both names must
be legal Series III filenames or path names. You cannot RENAME a file in one directory to a
name with a different directory specifier-the new name must have the same directory
specifier.
If you actually renamed UB86.86 to UBRY.86, you should rename it back to UB86.86, the name
used for it in future examples.
The DELETE command is very simple. Since there are no files in your system disk that you can
delete. we'll use in this example a file that doesn't actually exist on your disk:

-DELETE SAMPLE.TXT
:FO:SAMPLE.TXT DELETED
The DELETE command will irrevocably delete the file you specify. When you DELETE a file,
you cannot retrieve it-it's gone. Use DELETE with caution.

18

OPERATING THE SERIES III

To delete a file on a disk in a drive other than drive 1, simply use the appropriate path name for
the file. For example, suppose the file JUNK.TXT existed on the disk in drive 1. You would use
this command to delete it:
-DELETE :F1:JUNK.TXT
:F1:JUNK.TXT DELETED

You can also delete many files at once. As you will see in Chapter 3, CREDIT creates a backup
file with a ".BAK" extension for every file you edit. At some point (to utilize disk space), you
might want to delete all of your backup files at once. For example, to delete all of the backup
files on the disk in drive 1, use the following command:
-DELETE

:F1:*.BAK

The asterisk (*) matches any name, and the" .BAK" extension matches only filenames with
that extension. This "filename matching" technique is shown in more examples to come.

COPYING FILES TO DISKS AND DEVICES
The COPY command is useful for several operations:
•

To make a copy of a file

•

To send a copy of a file to another hard or flexible disk

•

To send a copy of a file to a device like a printer or a paper tape punch

•

To receive a file from a sending device like a paper tape reader

•

To copy all non-system files from one disk to another

The COPY command is similar to the RENAME command. For example:
-COpy :F1:PROG1.SRC TO :F1:PROG1.BAK
COPIED :F1:PROG1.SRC TO :F1:PROG1.BAK

The COPY command expects to see the name of the source file or device (the source of the
information to be copied, not to be confused with a source file of program source statements),
followed by a space, then the keyword TO, followed by a space, and then the name of the output file or device (the destination of the copied information). After the output (or destination)
file or device name, you can optionally specify a switch like "P" for pause, or "U" for update
(these switches are explained in the Intel/ec Series 11/ Microcomputer Development System
Console Operating Instructions).
More frequent uses of the COpy command are copying to devices, copying files onto other
disks, and copying all the files in one disk to another disk. In all of these cases, you must
specify the device or disk that is the source of the information, and the device or disk that will
receive the copied information. For example, the RENAME program is in the directory for drive
O. If you want to put a copy of it on the disk in drive 1, you would type the following command:
-COpy RENAME TO :F1:
COPIED :FO:RENAME TO :F1:RENAME

When the source file is in the directory for drive 0, you don't have to specify :FO: for the file,
because :FO: is the default directory if none is specified. When the destination is a disk in
another drive, you have to specify the directory (in this case, :F1:) for the destination file.
19

CHAPTER 2

In the example above, the file RENAME was copied to the disk in drive 1, and the drive 1 version has the same name. When you make copies of files for other disks, you will probably want
the files on the other disks to have the same name. To keep the same name for the copy,
specify only the destination directory without a new filename, as we did in the above example.
To change the name for the copy, specify a different name with the destination directory. For
example, if you want to use RNAM as the name of the new copy in drive 1, use this command:

-COPY RENAME TO : F1 : RNAM
:FO:RENAME COPIED TO :F1:RNAM
In the last two examples, the RENAME file was copied from drive 0 to drive 1. To demonstrate
another feature of the COPY command, we will first copy a file from drive 1 to drive 0 (you
should also try this example):

-COPY :F1:PROG1.SRC TO :FO:
:F1:PROG1.SRC COPIED TO :FO:PROG1.SRC
Let's suppose that we used CREDIT (described in the next chapter) to modify the new copy of
PROG1.SRC on the disk in drive 0 (:FO:PROG1.SRC), and that we want to copy the newlymodified PROG1.SRC to the disk in drive 1. Since we already have a PROG1.SRC on the disk in
drive 1, we might want to DELETE that one first, then COpy the newly-modified one to the disk
in drive 1. However, let's suppose that we forgot to DELETE the old one first, or that we don't
even know the old one exists on the disk in drive 1. We would type the following COPY command:

-COpy PROG1. SRC TO : F1: 
:F1:PROG1.SRC FILE ALREADY EXISTS
DE LETE?
The COPY command found :F1 :PROG1.SRC, and now it is asking us if we want to delete it in
order to replace it with the newly-modified :FO:PROG1.SRC. We type a "Y" (or "y") to delete
the old one and replace it with the new one, or type an "N" (or "n" or any other letter) to keep
the old one and abort the copy operation. In this case, we want to replace the old
:F1 :PROG1.SRC with the newly-modified :FO:PROG1.SRC, so we type a "Y" followed by the
RETURN key:

DELETE?Y
:FO:PROG1.SRC COPIED TO :F1:PROG1.SRC
By using this feature of the COPY command, you can selectively update existing files by typing
"Y" (or "y") for the ones you want to update, and "N" (or "n") for the ones you don't want to
update.
To send a file to a device like a line printer or a paper tape punch, specify the device name as
the destination device:

-COpy PROG1.SRC TO :LP:
:FO:PROG1.SRC COPIED TO :LP:
-COPY PROG1.SRC TO :HP:
:FO:PROG1.SRC COPIED TO :HP:
The device name :LP: is the name of the line printer. The second example sends the file to the
high-speed paper tape punch, whose device name is :HP:. For other device names, see the
Intellec Series 11/ Microcomputer Development System Console Operating Instructions.

20

OPERATING THE SERIES III

The COPY command can also be used to copy several files at once, if you make use of wild
card filenames. You can specify a wild card filename with the DELETE, RENAME, COpy, DIR,
HDCOPY, and ATTRIB commands. A wild card filename matches a group of filenames in order
to perform the action on several files at once. For example:

-COpy *.* TO

:F1:

This command copies all of the files in directory :FO: to directory :F1:.
NOTE

To perform this example, you should insert a new disk into drive 1 and use the IDISK
command (described in the next section in more detail) to prepare the new disk in
drive 1 before copying all of the files in drive 0 to it.
The above example demonstrates use of the wild card filename "*. *". The first asterisk will
match any number of characters in the name, and the second asterisk will match any three
characters in the extension of the filename.
You can also specify some of the characters of a filename in a wild card filename. For example,
if you wanted to copy all of the files that have" .SRC" as an extension, you would use this
COPY command:

-COPY *.SRC TO

:F1 :

There are other wild card filenames that are described in detail in the Intellec Series 11/
Microcomputer Development System Console Operating Instructions.
There are several ways to copy entire disks. The IDISK and FORMAT commands are used to
prepare ("format") disks for use in the Series III system. The IDISK command will simply format the disk as a system or non-system disk, copying over to the new disk only the format
("F") files that are needed to format the new disk as a system or non-system disk.
The FORMAT command will format a new disk as a system or non-system disk depending on
the source disk implied (drive 0) or specified (using FROM). The FORMAT command will also
copy certain files from the source disk. FORMAT with the "S" switch copies all files from the
source drive that have the "S" (system) attribute. See the previous section on formatting disks
for an example of the FORMAT command with the "S" switch.
To copy all of the files from the source disk, use the "A" switch. To show an example of the
FORMAT command with the "A" switch, insert another blank disk into drive 1, and type this
command:

-FORMAT :F1:SYSTEM.BAK A
SYSTEM DISK

In this example, the FORMAT command formats the disk in drive 1 as a system disk because
the source disk in drive 0 is a system disk. The new disk is called SYSTEM.BAK. The "A"
switch specified that all files from the source disk in drive 0 should be copied to SYSTEM.BAK
in drive 1.
So far, all of the FORMAT examples used the disk in drive 0 as the source disk. If, for example,
you have more disk drives and you want to FORMAT a disk in drive 1 using as a source a disk in
drive 2, you would specify FROM 2 as in the following example:

-FORMAT: F1 :MYDISK A FROM 2
21

CHAPTER 2

In a previous section on formatting disks, we described formatting operations to prepare your
disks in a way that conforms with our examples. We do not necessarily recommend this formatting scheme for your particular configuration. Chapter 2 of the Intel/ec Series 11/ Microcomputer Development System Console Operating Instructions gives you the specific details
for setting up disks in any Series III configuration, using the IDISK, FORMAT, and HOCOPY
commands.

EXECUTING COMMANDS AND PROGRAMS
The Series III has two processors: the 8085 (8-bit processor), and the 8086 (16-bit processor).
You can execute 8085-based programs in the 8085 environment (which is called the 8085 execution mode or "8085 side"), and execute 8086-based (or 8088-based) programs in the 8086
environment (which is called the 8086 execution mode or "8086 side"). When you type the
filename of a program as a command (as you have been doing when you type "OIR" or
"COPY"), you are executing the program in the 8085 execution mode. In order to execute a
program or command in the 8086 execution mode, you must prefix the command RUN to the
program or command you wish to execute. For example, if you want to execute LlB86.86, the
8086 librarian (which can only be run in the 8086 execution mode), you would type the following:

-RUN LI B86
You should notice two things that are different: the use of the command RUN, and the fact that
you do not have to supply the" .86" extension for LlB86.86 when you RUN it.
The RUN command is actually a program supplied on the system disk that activates the 8086
execution mode. When you supply a filename with no extension, the RUN command
automatically attaches the" .86" extension to the name you supplied, and looks for the file by
that name (i.e., the name with the" .86" extension). This is a protection feature you can use for
your 8085 and 8086 programs: you can use the same name for both, with an ".86" extension for
the 8086 program and no extension for the 8085 program. When you specify filenames without
extensions, RUN only looks for files that are supposed to run in the 8086 execution mode; i.e.,
files with the" .86" extension. This protection feature assumes that you would put the" .86"
extension on files that are meant to run in the 8086 execution mode.
If you actually executed LlB86.86, the following would appear on your screen:

-RUN LIB86
SERIES III 8086 LIBRARIAN, Vx.y

*
The LlB86.86 program is now in control. To leave this program and return to the operating
system, use the librarian's EXIT command:

*EXIT
You can, of course, supply an extension with the filename you supply to the RUN command,
and the RUN command would not supply the" .86" extension. For example, if you have an 8086
program called MYPROG.PRG and you want to run it in the 8086 execution mode (on the "8086
side"), you would type the following:

-RUN MYPROG.PRG
22

OPERATING THE SERIES III

You can also RUN a program whose filename has no extension. However, you must supply a
period to show that there should be no extension (Le., to keep RUN from supplying the" .86"
extension). The following is an example, assuming that the name of the program is not
MYPROG.PRG but is MYPROG:

-RUN MVPROG.
When you use RUN as a command (as in the examples above), the 8086 execution mode is
turned on for program execution, and when the program terminates, the 8086 execution mode
also terminates, returning you to the 8085 execution mode. The 8085 execution mode is controlled by ISIS-II, which signifies its control by displaying the dash (-) prompt. You can,
however, use RUN as a program and stay in the 8086 execution mode.
To use RUN as a program, simply type RUN:

-RUN
ISIS-II RUN 8086, Vx.y

>
The RUN program displays a sign-on message and its own prompt, the right angle (» bracket,
to signify that the RUN program is now in control. This mode is caliedAhe interactive 8086
mode, and you use it to execute more than one program. When you get the angle (» prompt,
you can type the filename of a program in order to execute the program. The rule stated above
about the use of the" .86" extension still applies.
The following example shows the execution of several 8086-based programs: PASC86.86 (the
Pascal-86 compiler), LlNK86.86 (the linker and binder), and PROG1.86 (the assembled, linked,
and bound program). If your Pascal-86 disk (containing the compiler, run-time libraries, and
sample PROG1.SRC) is in drive 1, and LlNK86.86 is on the disk in drive 0, you can type this
example exactly as presented. The LlNK86.86 command line shows use of the "&" continuation character that allows you to type commands over several lines without executing them.
The EXIT command turns off the 8086 execution mode and returns you to ISIS-II and the 8085
execution mode:

-RUN
ISIS-II RUN 8086, V1.0
>:F1 :PASC86 :F1 :PROG1.SRC

This executes PASC86.86 to compile
PROG1.SRC, both of which are on the
di sk in dr i ve 1. The Pasca l-86
compiler displays some information.
>LINK86 :F1:PROG1.0BJ,:F1:P86RNO.LIB,:F1:P86RN1.LIB,&
» : F 1 : P 86 RN2. LI B , : F 1 : P 86 RN3. LI B , : F1 : E80 87. LI B • &< c r>
»:F1:E8087,:F1:LARGE.LIB TO :F1:PROG1.86 BIND

This e x amp l e s how sus e 0 f the ' , & "
command line continuation character.
The ent i re command links the ob) ec t
program with the run-time libraries,
and binds the linked module to form
an executable program called
PROG1.86
23

CHAPTER 2
>: F1 : PROG1 

This command executes :F1:PROG1.86

Farenheit temperature is:72

PROG1.86 is a temperature conversion
program. When it asks for more
input, you can stop the program by
typing "N".
Another temperature input?
>EXIT

:N

This terminates the 8086 execution
mode and returns you to the 8085
execution mode.

In the above examples, commands and programs were executed directly by typing the command name or program name (sometimes followed by the name of a file to be acted upon by
the command or program; this is called an actual parameter). When you execute a program or
command directly, it is called interactive execution.
In many cases you will want to submit a batch of commands or programs to be executed in a
sequence. The SUBMIT command allows you to submit a file of commands as a job to be
handled by the system without any interaction on your part. This is called nOn-interactive

execution.
You use SUBMIT by first providing a file of commands to be executed-a command sequence
definition file, which has the extension" .CSD". This file can contain operating system commands, parameters for the commands, and comments-any line starting with a semicolon (;),
or any text following a semicolon, is a comment, not an executable command. In the following
example, note that the first command is the RUN command, wl"\ich starts the 8086 execution
mode, and that blank spaces in command lines are allowed to improve readability:
CSD fi le to SUBMIT for linking a Pascal-86 object module
to run-time support libraries 
Parameter 0 = :fn:myprog
Parameter 1 = drive containing run-time

RUN
LINK86 %O.OBJ, &
:F%1:P86RNO.LIB, &
: F%1 :P86RN1. LIB, &
:F%1:P86RN2.LIB, &
:F%1:P86RN3.LIB, &
:F%1:E8087.LIB, &
:F%1:E8087, &
:F%1:LARGE.LIB TO %0.86 BIND
EX IT
Returns to 8085 execution mode.

24

Libraries

OPERATING THE SERIES III
When this file, called LNKBND.CSD, is submitted, the system will execute the RUN command,
then the LlNK86.86 program (the 8086 linker), and finally the EXIT command to leave the "8086
side" and return to the 8085 execution mode.
The percent symbols (0/0) indicate the use of formal parameters. When you execute the
SUBMIT command, you supply actual parameters for each of these formal parameters. The
following is an example:
-SUBMIT

LNKBND(:F1:PROG1,1l

The SUBMIT command first looks for LNKBND.CSD (it supplies the missing" .CSD" extension), and then it substitutes the first actual parameter (: F 1 : PRO G1) for "%0" and the
second actual parameter (1 ) for' '% 1" . The resulting command sequence is as follows:
RUN
LINK86

:F1:PROG1.0BJ, &
:F1:P86RNO.LIB, &
:F1:P86RN1.LIB, &
:F1:P86RN2.LIB, &
:F1:P86RN3.LIB, &
:F1:EB087.LIB, &
:F1:EB087, &
:F1:LARGE.LIB TO :F1:PROG1.B6 BIND

EX IT
The SUBMIT program creates another file with a ".CS" extension to hold the resulting command sequence. You should not modify this file.

SUMMARY OF THE SERIES III OPERATING SYSTEM
The Series III system has two execution environments: the 8085 environment (the "8085 side")
where the ISIS-II commands and 8080/8085 programs run, and the 8086 environment (the "8086
side"), activated by the RUN program, where 8086 and 8088 programs run. Programs that run in
the "8086 side" usually have an" .86" extension in their filenames. The RUN program actually
looks for an ".86" extension if you specify a filename without an extension.
You use the Series III operating system and its tools to develop software, but there is another
way to use it: your software products can use it as an execution vehicle. The Intellec Series 11/
Programmer's Reference Manual describes the "innards" of the Series III operating system
and how your programs can make use of sections of the system. By using PL/ M or assembly
language, you can call operating system procedures directly (as described in the summary of
Chapter 5) from your program. Pascal-86 programs automatically use the operating system procedures by using run-time libraries which interface between the Pascal-86 programs and the
Series III system.
The Series III system has a standard set of procedures that your software products can use; by
using this standard programming interface, you can be sure that your future programs will
remain compatible with present and future Intel operating systems.
There are a few more commands that were not introduced because they are used infrequently,
or they are easy to use. These commands are adequately introduced in the Intellec Series 11/
Microcomputer Development System Console Operating Instructions. You should consult this
manual anyway, to be aware of details not mentioned in this tutorial.

25

CHAPTER 3
TEXT EDITING

"A good workman is known by his tools." -proverb

You use a text editing program to create any kind of document, including a document that consists of program instructions. CREDIT is a text editor that takes advantage of the capabilities
you have with CRT screens to:
•

Display and scroll text on the screen

•

Rewrite text by typing new letters over old ones

•

Rearrange lines of text and insert new lines of text between old lines

•

Move to any position in the text file or to any point on the screen instantly

•

Correct typing mistakes easily as you type

To simplify everyday text editing operations, CREDIT also provides features that allow you to:
•

Save both the newly edited version and the old unedited version of the same document

•

Find any string of characters and substitute another string of characters automatically

•

Copy sections of a document to use in another document

•

Create macros to execute several commands at once, or to repeat sets of commands
(command iteration)

CREDIT is useful for all documents; for example, we used CREDIT to write this book. CREDIT is
more often used to write the Pascal statements, PLiM statements, and assembly language
instructions that comprise program modules. Text files created by CREDIT are called
documents if they are meant to be read by humans; and they are also called source programs if
they consist of program statements (Pascal, PLlM, or FORTRAN statements, or assembly
language instructions) that are read by compilers or assemblers in order to be compiled or
assembled into working programs.

In the following examples, we show you how to create and edit a text file consisting of English
sentences that you can translate (eventually) into Pascal-86 statements. As described in
Chapter 1, this step of generating Pidgin Pascal (English sentences describing a Pascal program) is a very important one in program development, because the program logic expressed
in English sentences closely resembles human thinking and is therefore easier to debug.

27

Chapter 3

CREATING A TEXT FILE AND INSERTING TEXT
When you run CREDIT, you also specify the name of a file to be edited. If CREDIT can find the
file you are specifying, it will open the file for editing. If CREDIT cannot find the file you are
specifying, it will create a new file by that name.
For example, let's create a file called PIDGIN.TXT in the directory for drive O. To create and edit
PIDGIN.TXT, type the following command:

-CREDIT PIDGIN.TXT
CREDIT responds with:

ISIS-II CRT-BASED TEXT EDITOR V2.0
NEW FILE
1982 FREE DISK BLOCKS
The number of free disk blocks depends on the number of files on your disk and the size of
your disk-you do nO,t have to worry about it unless you get a "DISK FULL" warning. If you get
such a warning, terminate your CREDIT session by typing "EX" (followed by RETURN), and
specify another disk (like :F1:) for your text file.
The screen is partitioned into two areas, as shown in figure 3-1.
Notice the vertical line "I " in the text area? This symbol marks the end of the text in the file.
Since the file is new and holds no text yet, this symbol appears at the beginning of the file. As
you type text into the file, the symbol moves and continues to mark the end of the text.
The blinking cursor sits underneath this vertical line. You can immediately type text into the
file:
just

typell

As you type, you can make changes to the text you already typed by moving the cursor back to
the previous text and typing over it. Move the cursor by using the cursor control keys that surround the HOME key (do not use the HOME key yet!). If you inadvertantly typed the HOME key,
hold down the CNTL key and type a V (Control-V) to return the cursor to the text body.

ISIS-II CRT-BASED EDITOR V2.0
NEW FILE 1982 FREE DISK BLOCKS

1""'''''1

~

COMMAND AREA

~TEXTAREA

Figure 3-1. The CREDIT™ Video Display

28

121632-4

Text Editing
You end each line of text with a carriage return by typing the RETURN key, just like a
typewriter. CREDIT displays the carriage return operation as an uparrow (f). The carriage
return operation is actually performed by two ASCII codes: one for the carriage return
character, and one for the line feed character. CREDIT uses one symbol, the uparrow (t), for
both characters. This symbol is called the line terminator.
There are several keys used often in editing:
•

The RPT (Repeat) repeats whatever key you hold down. For example, hold down both the
RPT key and a cursor movement key, and the cursor will move faster. Use the RPT key
with RUBOUTto erase a line.

•

The TPWR (Typewriter) key, when in the down position, displays every character in lower
case like a typewriter. When in the up position, all characters are in upper case.

•

The ESC (Escape) key will cause a break in an executing command.

If your keyboard seems to freeze and does not display characters, you probably moved the
cursor past the vertical line. You cannot type any characters after the vertical line, since the
vertical line marks the end of the text. You can move the cursor to the vertical line and type,
thereby moving the vertical line, or you can move the cursor to any position before the vertical
line and type over the previously typed characters.
The ISIS-1/ CREDIT (CRT-Based Text Editor) User's Guide contains an interesting tutorial session. Before you learn how to use some of CREDIT's powerful editing commands, you should
learn how to end a CREDIT session properly, without losing the edits you have made. Figure
3-1 shows the layout of the screen; in the Command Area you'll find an asterisk. To move the
cursor to this asterisk, press the HOME key.

CURSOR
CONTROL
KEYS

ESCAPE
(ESC)

CONTROL
(CNTL)

REPEAT
(RPT)

HOME

Figure 3-2. The Series III Keyboard

TYPEWRITER
MODE
(TPWR)

121632-5

29

Chapter 3
When the cursor appears after the asterisk, you can type a CREDIT command. The EX (exit)
command terminates a CREDIT session properly. Type "EX", followed by RETURN:

*EX
CREDIT will clear the screen and display the following message:

EDITED TO :FO:PIDGIN.TXT
By using the DIR command, you can see that the directory listing for :FO: now contains a new
file called PIDGIN .TXT.
You can use CREDIT to edit PIDGIN.TXT by invoking CREDIT again:

-CREDIT PIDGIN.TXT
This time, CREDIT does not have to create the file, because it already exists in the directory for
the disk in drive O. CREDIT responds with:

ISIS-II CRT-BASED TEXT EDITOR V2.0
OLD FILE
SIZE=2
1980 FREE DISK BLOCKS
The text you typed during the last example appears under this message. The message tells
you that PIDGIN.TXT is an old file, its size is 2 blocks (a block is 128 bytes), and you have 1980
free disk blocks in which to expand the file (these numbers vary depending on the space taken
up by files on your disk). If you do not have enough free disk blocks to expand the file, CREDIT
displays a warning message.
You can continue to experiment with CREDIT by typing and retyping lines of text. When you
are finished typing extraneous characters and are ready to type meaningful English
sentences, move the cursor to the first character or screen position, and type CNTL and Z
(hold down the CNTL key and type Z). The @ symbol will replace the character. Now move the
cursor to the end of the text-to the vertical line-and type CNTL and Z together again. ZAP!
You just deleted all the text you typed. All of the characters between the two @ symbols were
deleted, and you are left with an empty text file again.
Let's start with the simple problem definition. Type the following sentence:
Maintain the climate of a bui lding using a system comprised oft
heating and cooling methods.t
t

NOTE
The uparrow (t) stands for the RETURN key. Use the RETURN key to end each line of
text, including blank lines.
Using CREDIT, you can type the sentences you know you need, and insert more sentences
later. For example, you know you need the following sentences:
Based on temperature data, see if there is a demand,t
and determine the type of demand.t
If there is no demand, simply continue operating the climate system.t
If there is a demand for heat, determine the heating method,t
and operate the system with this method.t
If there is a demand for cold, determine the cooling method,t
and operate the system with this method.t
t

30

Text Editing

Two questions should immediately come to mind: what information does the program need,
and what else would a climate control program do? Let's add new sentences by using
CREDIT's insert capability. Here is our text file so far:

Maintain the climate of a bui lding using a system comprised oft
heating and cooling methods.t
t

Based on temperature data, see if there is a demand,t
and determine the type of demand.t
If there is no demand, simply continue operating the climate system.t
If there is a demand for heat, determine the heating method,t
and operate the system with this method.t
If there is a demand for cold, determine the cooling method,t
and operate the system with this method.t

Move the cursor to the beginning of the fourth line of text (the line that begins with
"Based on ... "). Hold down the CNTL key and type A (CNTL-A). The rest of the text disappears, and you are now able to type sentences. Type the following sentences and blank lines:
t

Startup the climate system.t
t

Whi let h e s y stem i sop era tin g, do (a n d rep eat) the f 0 l low i n g : t
t

Get the data needed for each pass: the time, the temperatures,t
the weather, the state of the solar collector, etc.t
Store this data.t
t

Now type CNTL and A together again. The rest of the text file reappears with the new lines
inserted in their proper places. By typing CNTL and A together, you turn on the Add Text
Mode; by typing them again, you turn off Add Text mode. Here is your text file with the newly
inserted lines:

Mai ntai n the climate of a bui ldi ng usi ng a system compri sed oft
heating and cooling methods.t
t

Startup the climate system.t
t

Whi le the system is operating, do (and repeat) the following:t
t

Get the data needed for each pass: the time, the temperatures,t
the weather, the state of the solar collector, etc.t
Store this data.t
t

Based on temperature data, see if there is a demand,t
and determine the type of demand.t
If there is no demand, simply continue operating the climate system.t
If there is a demand for heat, determine the heating method,t
and operate the sy~tem with this method.t
If there is a demand for cold, determine the cooling method,t
and operate the system with this method.t

31

Chapter 3

MOVING AROUND IN THE TEXT FILE
Using the cursor movement keys, you can move the cursor anywhere within a screenful of
text. If the text file is larger than twenty lines, it will not fit entirely in one screen-you have to
scroll the screen by using the scrolling commands.
The scrolling commands only operate when the cursor is in the text area (when the cursor is in
the text area, you are in screen mode). Refer to figure 3-1 for an illustration of the text and command areas. When the cursor is in the command area (command mode), you can only execute
command mode commands; to move into screen mode (and move the cursor to the text area),
type CNTL-V (hold down the CNTL key and type V).
The scrolling commands are CNTL-N (to see the next screenful of text), and CNTL-P (to see
the previous screenful of text). You can also use CNTL-V to see which character CREDIT is currently pOinting to, and to move into screen mode. If you experiment with CNTL-V, you will
notice that the first use of CNTL-V moves the cursor to the character that CREDIT's pointer is
pointing to (more on this pointer in the next paragraph). Subsequent executions of CNTL-V
rearrange the lines of text so that the line that contains the character pointed to by CREDIT
becomes the third line in a screenful of text. This is very useful for partial scrolling. You can
use these commands without fear, since they do not modify the text.
NOTE

The CNTL key, when used with another key (e.g., CNTL-V), is sometimes
represented by the uparrow (t) symbol in our manuals and pocket references. For
example, CNTL-V is shown as tV, and CNTL-A is shown as tAo
The character pointer mentioned above is a reference point for all of CREDIT's commands. In
screen mode, the cursor represents the pointer. It is sometimes called "the CP". Most text
editors have some pointer or marker that points to a place in the file, and commands that insert
characters, delete characters, or search for characters use this pointer to find the place in the
file to perform their operations. CREDIT's pointer pOints to a single character, and this pointer
moves whenever you move the cursor within the text area. When you type the HOME key and
move the cursor to the command area, the pOinter stays where it is, pOinting to the character in
the text area. The CNTL-V command moves the cursor back to the text area and back to the
character pointed to.
In screen mode, the cursor movement keys and the scrolling commands move this pointer. In
command mode, all editing changes are made relative to the position of this pointer. Deleting a
single character, for example, erases the character pointed to by the pointer, and moves the
pointer to the next character. When you insert text, the text is inserted preceding this pOinter.
Many other commands also move this pointer. CNTL-V will always move the cursor to the
character pointed to by this pointer.
One command that always moves the pointer is the J (jump) command. You can only use the J
command in command mode, and the J command leaves you in command mode (so you have
to do another CNTL-V to get into screen mode). You can jump to any location relative to the
pOinter, or you can jump to specific locations called tags. You can set your own tags by using
the TS (tag set) command, and delete tags by using the TD (tag delete) command. There are
two permanent tags that need not be set, and that cannot be deleted: the beginning of the file,
known as TT (tag for top), and the end of the file, known as TE (tag for end). For example:

*JTT
This command moves the pointer to the top of the text file (the beginning of the first line).

32

Text Editing

Since CREDIT usually puts the pointer at the top of the file when you start an editing session,
the JTT command (jump to tag for top of file) is more useful during an edit session. The JTE
command (jump to tag for end of file) is useful at any time:

*JTE
After using the J command, you are still left in command mode. Use the CNTL-V command to
return to screen mode, and to return the cursor to the character pointed to by the CPo
Use the JTE command (jump to tag for end of file), followed by a CNTL-V command to return to
screen mode, in order to add a sentence to the end of our Pidgin Pascal software definition.
The following example shows the execution of the JTE command, followed by a CNTL-V
(displayed as tV), followed by a display of the current text file with the added sentence at the
end:

*JTE
*tV
Maintain the climate of a bui lding using a system comprised oft
heating and cooling methods.t
t

Startup the climate system.t
t

Wh i let he s y stem i sop era tin g, do (a n d rep eat) the f 0 l low i ng : t
t

Get the data needed for each pass: the time, the temperatures,t
the weather, the state of the solar collector, etc.t
Store this data.t
t

Based on temperature data, see if there is a demand,t
and determine the type of demand.t
If there is no demand, simply continue operating the climate system.t
If there is a demand for heat, determine the heating method,t
and operate the system with this method.t
If there is a demand for cold, determine the cooling method,t
and operate the system with this method.t
t

If no method is possible (abnormal conditions),t
shut down the climate system.t
t

FINDING OLD TEXT AND SUBSTITUTING NEW TEXT
There will be numerous occasions when you will want to find a specific word or group of
words, and move the character pointer at the same time. There will also be times when you will
want to substitute a new word or group of words for an old one. For example, you might write a
program that displays the name of your product (for example, "ACME Solar Controller") in
several different places. Sometime later, you find out that the marketing people changed the
name to "ACME Climate Controller". With one simple CREDIT command, you could substitute
the new word ("Climate") for the old word ("Solar") wherever the old word occurs in the text
file. You would only have to make sure that you specified the old name using upper and lower
case characters as they appear in the file, and that the new name looks exactly as it should
look.
33

Chapter 3

The F (Find) command finds any string (group of characters) you specify. The S (Substitute)
command finds the old string you specify and substitutes the new string you specify, and rearranges the text so that spaces aren't introduced into the file. The SQ (Substitute after Query)
command finds the old string you specify, then asks you for a yes-or-no ansWer: a yes tells
CREDIT to substitute the new string you specified, and a no tells CREDIT not to substitute the
new string. If you executed the SQ command iteratively (see next section), CREDIT would continue looking for more instances of the old string.
To show examples of these commands, we'll return to our Pidgin Pascal text file to add some
new text and substitute a new word for an old one. Use the F command to find the string
"simply continue":
*F/simply continue/
When the F command finishes, it displays the asterisk once again. To see where it put the
character pointer, type CNTL-V. The cursor should be under the space after the last letter of
"continue." We want to rewrite the sentence so that "no method" is one of the methods used
to operate the climate system.
At this point, it is easy to move the cursor to the appropriate place to insert new text. You can
type over the old text, and use the RETURN key to continue typing a line. You can also use the
CNTL-A combination to insert a lot of text. After inserting the new text, the sentences should
read as follows:

If there
and
If there
and
If there
and

is no demand, choose "no method" as the method,t
operate the system with t his method.t
is a demand for heat, det e rmi ne the heating method,t
operate the system with t his method.t
is a demand for coLd, determine the cooLing method,t
operate the system with t his method.t

t

If no method is possibLe (abnormaL conditions),t
shut down the cLimate system.t
To illustrate use of the Sand SQ commands, we will substitute the word "request" for
"demand" throughout our text file (and thereby make our program more polite). First, use the
JTT command to move the character pointer to the beginning of the file; then use the S command in the following manner:
*JTT
*S/demand/request/

The S command found the first instance of "demand" and substituted "request" for it. Check
to see the result by typing CNTL-V:

Based on temperature data, see if there is a request,t
and determine the type of demand.t
Note that S command only found the first instance of "demand" and sUbstituted "request" for
it only. Note also that the S command must have moved the comma after the first "demand" in
order to fit the word" req uest" in that place.

34

Text Editing

To execute the S or SO commands repeatedly, you would use a form of command iteration.
The SO command performs the same operation as the S command if you answer with a yes; on
a no answer, the SO command does not substitute text. Here is an example of the SO command, with a sneak preview of the easiest form of command iteration:
*'
The angle brackets around the entire SO command, in conjunction with the exclamation point,
cause the SO command to be executed repeatedly until the command reaches the end of the
text file. Do not be confused by the angle brackets surrounding the "cr"-that is the symbol
depicting use of the RETURN key. Angle brackets delimit the command to be executed
iteratively, and the exclamation point replaces a number that would specify the number of
iterative executions. This is explained in more detail in the next section.
The sa command displays the line that contains the old text, and then displays a question
mark. You must respond with a "Y" for yes, or an "N" for no:
and determine the type of demand.t
?y

You do not have to type RETURN after typing the "Y" or "N", because CREDIT is expecting
such an answer. The SO command goes on to find more instances of "demand":
If there is no demand, choose' 'no method"
?

as the method,t

Y

If there is a demand for heat, determine the heating method,t
?y

If there is a demand for co l d, determine the cooling method,t
?y

*

When the sa command has found the end of the text file, the condition for iterative execution
is satisfied, and the execution ends. Type CNTL-V, followed by a CNTL-P, to see the previous
page and the substitutions:
Maintain the climate of a bui lding using a system comprised oft
heating and cooling methods.t
t

Startup the climate system.t
t

Whi le the system is operating, do (and repeat) the following:t
t

Get the data needed for each pass: the time, the temperatures,t
the weather, the state of the solar collector, etc.t
Store this data.t
t

Based on temperature data, see if there is a request,t
and determine the type of request.t
If there is no request, choose' 'no method"
as the method,t
and operate the system with this method.t
If there is a request for heat, determine the heating method,t
and operate the system with this method.t
If there is a request for cold, determine the cooling method,t
and operate the system with this method.t
t

If no method is possible {abnormal conditions),t
shut down the climate system.t
t

35

Chapter 3

MACROS AND COMMAND ITERATION
Our Pidgin Pascal program still needs a modification that will vastly improve its readability. We
need to indent all of the sentences that occur after the sentence "While the system is
operating, do (and repeat) the following:". This will improve the readability, since it will then
be obvious that the indented sentences are the actions that have to be repeated.
To make this improvement, we will define a macro to hold several editing commands that will
be executed iteratively. Rather than explain the process of defining macros and the syntax for
command iteration, we'll show you the steps to take to make this improvement to our text file,
and then we'll explain them.
To begin, move the cursor (in screen mode, so that it also moves the character pointer) to the
beginning of the blank line that follows the sentence "While the system is operating ... ". Your
cursor (and the character pointer) should now be at the beginning of this blank line, as shown
by the underscore "_" symbol:

Maintain the climate of a bui lding using a system comprised oft
heating and cooling methods.t
t

Startup the climate system.t
t

Whi le the system is operating, do @
Type this macro definition exactly as it is shown above (the "0" symbol stands for a
space-type five spaces-and the "" stands for the RETURN key). When CREDIT finishes
digesting this definition, it displays the asterisk again. Now type the following command:

*MFX(13)
You will see each line following the sentence "While the system is operating ... " being acted
upon by macro X. All of the lines following that sentence are now indented by five spaces, as
shown below:

Maintain the climate of a bui lding using a system comprised oft
heating and cooling methods.t
t

Startup the climate system.t
t

While the system is operating, do 
XLOi%
  • The display is exactly what you typed before, without the "@" symbols. The "@" symbols were used to define the macro-they delimit the actual text of the macro, so they are not necessary in this display (therefore CREDIT does not display them). The macro starts with its name: X. Following the name is the first command in the macro: the LO command, which moves the character pointer (called CP from now on) to the beginning of the current line (the line that the CP is currently sitting on-this line changes every time the entire macro executes). Following the LO command is a semicolon, which separates one command from the next. The next command in macro X is a set of commands to be executed repeatedly, or iteratively. The "%" (percent) symbol is a special one in this case, and is explained in the next paragraph. You saw the angle brackets in the last section-they delimit the set of commands to be executed repeatedly. The commands to be executed repeatedly are the L command (move CP to the beginning of the next line), the I command (insert the text that is specified within the following "I" (slash) symbols), and the P command (display the current line). The text within the "I" (slash) symbols consists of the five spaces we need to insert in order to indent the lines. Now we'll explain the "%" (percent) symbol. When you typed the command to execute macro X, you typed: *MFX(13) The "MF" command executes the macro "X". The number 13 in parentheses is called a parameter-the MF command substitutes the parameter you specify (in this case, 13) for the "%" (percent) symbol. The result is that the iterative command set ("") is executed 13 times. Why did we pick 13? Because there were only 13 lines ahead of the character pointer to be indented. We could have specified a "!" (exclamation point) symbol to execute the iterative command set over and over until it reached the end of the file, but we chose this method to show you the use of parameters in macros, and to make sure that the last two lines would not be indented. We also chose to use the "@" symbol to delimit the entire macro, but you can use any symbol that is not used within the macro. Obviously, there are more details you should learn before using macros and other advanced editing features. However, you do not need these features to perform simple editing operations. They exist only to make your text editing sessions easier, if you first learn how to use them. 37 Chapter 3 ENDING A TEXT EDITING SESSION AND MANAGING BACKUP FILES When you are editing text, the edited text is in the computer's memory, but it is not yet on disk. To update the text file with the edited text, you have to end your text editing session properly. The EX command properly replaces the old text in the file with the newly edited text, and it also saves the old version of the file in another file called a backup file. When the edit session ends, control of the system returns to the operating system (ISIS-II). If you have been following the examples in this chapter, you are now in CREDIT with your edited text, and you are ready to end your edit session. If you are not in command mode (with the asterisk prompt), use the HOME key to get into command mode. When you are in command mode, type the following command: *EX The text on the screen should disappear, and another message should appear: EDITED TO :FO:PIDGIN.TXT The file PIDGIN.TXT, on the disk in drive 0, now contains the newly edited text. Use the DIR command to see the directory for drive o. In the directory listing, you should see the filename PIDGIN.BAK. CREDIT created this file to be the backup file that contains the old unedited version of PIDGIN.TXT. Every time you use the EX command by itself, CREDIT automatically creates a backup file with the" .BAK" extension to contain the previous version of the file. NOTE You should not execute CREDIT to edit a backup file (a file with the ".BAK" extension), because the EX command would first put the new edits into the" .BAK" file, then it would overwrite the" .BAK" file with the previous (unedited) version of it. Use the REN (rename) command to rename the file before editing it, or use the filename option with the EX command, described in the next paragraph. You can optionally specify a filename with the EX command, so that the newly edited text becomes a new text file, and the old text file remains unedited. For example, if you had typed the following version of the EX command (rather than the preceding version): *EX NEW.TXT the following message would appear: EDITED TO :FO:NEW.TXT The file NEW.TXT would containthe newly edited text, and the old PIDGIN.TXT would not have been updated (and PIDGIN.BAK would not have been created as a backup file). NOTE If you type "EXIT" rather than "EX", CREDIT assumes that you want to store the newly edited text in the file IT (:FO:IT). Another way to end an edit session is to use the EO (quit) command. The EO command will keep all files unchanged, as if nothing had happened. All edits you made while in the edit session vanish, and the text and backup files (if they exist) remain unchanged. If you use the EO command in a session that created the text file, the new text file would not exist. 38 Text Editing To keep you from making a mistake, the EO command will first ask you for a Y or N answer before it ends the session: *EQ QUIT?Y If you reply with anything other than a "Y" or "y", the EO does not end the edit session. DISPLAYING AND PRINTING TEXT FILES Now that you have a text file, we can show you how to display the file on your screen and copy the file to a printing device. You can display the text file on your screen without using CREDIT by using the COPY command and the device name :CO: (for "console output"): -COpy PIDGIN.TXT TO :CO: To print the text file PIDGIN.TXT, you use the COPY command to copy the file to the device name :LP: (for "line printer"), or to the device name :TO: (for "teletype output"). You can COpy a file to any output device. You can find a complete list of device names in the Intel/ec Series 11/ Microcomputer Development System Console Operating Instructions. This example assumes that you have an :LP: device to receive a copy of the file :FO:PIDGIN.TXT: -COPY PIDGIN.TXT TO :LP: FROM TEXT TO PROGRAM Your PIDGIN.TXT text file now contains an algorithm that is actually a program in disguise (the disguise is English, or Pidgin Pascal). You should keep a copy of it somewhere, perhaps on another disk (or leave it in drive 0 if you have a hard disk subsystem). To use this algorithm in the next chapter, you will want to copy the text file to the Pascal-86 disk, and call it MAIN.SRC, since it will become the source file of your main control algorithm: -COpy PIDGIN.TXT TO :F1:MAIN.SRC :FO:PIDGIN.TXT COPIED TO :F1:MAIN.SRC The examples in this and subsequent chapters assume that you either have a hard disk subsystem, or at least two double-density flexible disk drives. If you have single-density flexible disk drives, you should have more than two of them; in this case, you should put your program on the third disk, since it probably will not fit on the Pascal·86 disk in drive 1. Although MAIN.SRC only has Pidgin Pascal statements at this time, you will edit them to make them real Pascal-86 statements as they appear in figures in Chapter 4. 39 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I CHAPTER 4 PROGRAMMING IN PASCAL-86 "One of the most important aspects of any computing tool is its influence on the thinking habits of those who try to use it. .. " -E. W. Dijkstra The Series III Microcomputer Development System was designed to support a variety of programming techniques with several programming languages. The preceding chapters give you the background you need to use this system wisely, and this and the following chapters help you decide the criteria for decomposing your application into modules and picking the appropriate language to use for each module. One popular approach to programming is the top-down approach, where you define the problem completely, design an abstract algorithm to solve the problem, and refine this algorithm into self-supporting modules that can be coded and compiled separately. Typically, the main module would contain the most abstract algorithm-the control algorithm at the top of the design that solves the entire problem. The subordinate modules perform the procedures dictated by the main module. Pascal-86 is a language that is ideal for the main module of such a modular solution. Using Intel's Pascal-86 compiler, you can decompose a program into modules that can be compiled separately, whereas other Pascal compilers only compile whole programs which have to be tailored to fit into microprocessor environments. Perhaps the most important reason for Pascal's wide acceptance is the fact that it is a language that closely resembles English. In the past, programmers had to keep their algorithm designs well within the constraints of programming languages that were designed to express mathematical equations. In other words, at the outset they had to think in terms of the programming language available to them. This approach reinforced the practice of giving implementation ("how to") information in the problem definition (for example, "the input to this program is to be formatted on cards in columns 0-15 ... "). In Chapter 3 we designed an algorithm for the climate control of a building using English, which we jokingly call Pidgin Pascal. Since our control structures are in English, we have been able to communicate this algorithm easily and test its logic before translating it into Pascal-86. By now we should have a complete problem definition and a clean algorithm that could be translated into any programming language. TRANSLATING PIDGIN PASCAL TO PASCAL-86 Figure 4-1 shows the main climate control algorithm, described in Pidgin Pascal. Several assumptions are made: that another subordinate module will operate the climate system, that yet another module will access and store the data, and that the data itself will be in the form of a record, which will be available to this algorithm. 41 CHAPTER 4 As in typical development situations, a change has just occurred in our climate system that we software engineers have to accomodate: the first version of our climate system will not have cooling methods-only heating methods. We must design the software to make room for cooling methods in the future. We made another change to the algorithm to accomodate a "panic" condition. An algorithm is not complete unless it can handle any situation; remember, Murphy said that if it can go wrong, it will. Therefore, we added a test to see if the climate system can handle the request for heat. If neither the collector water nor the tank water is hot enough to heat the building, a panic condition occurs that stops the normal operation of the climate system. At this time, it is sufficient to simply stop the program and output warning messages; later, we can add more procedures to handle such panics. Using CREDIT (as described in Chapter 3), you can change this algorithm into Pascal-S6 by adding the Pascal-S6 statements and using comment symbols to turn the English sentences into program comments. The (* and *) symbols tell the Pascal-S6 compiler to ignore whatever is between them. Some comments are only a few words surrounded by the (* and *) symbols, but comments can take up many lines, as shown at the end of the program in figure 4-2. As soon as the compiler sees the (* symbols, it ignores the characters and lines following it until it sees the *) closing symbols. These comments are carried over With the program statements to the listing file produced by the compiler. You use the listing file as documentation for the program. You'll see a listing file later in this chapter. Figure 4-2 shows the same algorithm expressed in Pascal-S6 statements, with the English sentences masquerading as program comments. We also added more comments. It is a good practice to write the comments of a program before writing the actual program statements. Maintain the climate of a bui lding using a system comprised of h~ating methods. Startup the climate system. While the system is operating, do (and repeat) the following: Get the data needed for each pass: the time, the temperatures, the weather, the state of the solar collector, etc. Store thi s data. Based on temperature data, see if there is a request for heat. If there is no request, choose' 'no method" as the method, and operate the system with this method. If there is a request for heat, determine whether the system can handle the request. If not, cause a panic. Otherwise, determine the heating method, and operate the system with this method. If no method is possible (panic or abnormal conditions), shut down the climate system. Figure 4·1. Algorithm for the Climate Control Main Module 42 PROGRAMING IN PASCAL·86 (**Type and variable declarations to be supplied later**) (**Public procedures external to this program will be supplied later**) PROGRAM MainControl(INPUT,OUTPUT)i BEGIN (**Main Control Algorithm**) StartUpSystemi (*procedure to start up the climate system*) Operating:=TRUEi Panic:=FALSEi WHILE Operating DO (*While the system is operating, do (and repeat) the following:*) BEGIN GetData(CurrentData)i (*Get data needed for each pass: temps, time, etc.*) StoreData(CurrentData)i (*Store this data as record*) (**If there is a request for heat, determine whether the system can handle the request. If not, cause a panic. Otherwise, determine the heating method, and operate the system with this method. If there is no request for heat, choose I 'no method, I I and operate the system with this method. **) WITH Current Data DO BEGIN IF InsideTempMinimumForExchanger THEN BEGIN ChosenMethod:=CollectorToExchangeri OperateSystem(CurrentData)i END ELSE IF ~ollectorWaterTemp>MimimumForHeatPump THEN BEGIN ChosenMethod:=CollectorToHeatPumpi OperateSystem(CurrentData)i END ELSE IF TankWaterTemp>MinimumForExchanger THEN BEGIN ChosenMethod:=TankToExchangeri OperateSystem(CurrentData)i END ELSE IF TankWaterTemp>MimimumForHeatPump THEN BEGIN ChosenMethod:=TankToHeatPumpi OperateSystem(CurrentData)i END ELSE IF HeatedTankTemp>MinimumForHeatPump THEN BEGIN ChosenMethod:=HeatedTankToHeatPumpi OperateSystem(CurrentData)i END ELSE Panic:=TRUEi Operating:=FALSEi END (*if heating request*) ELSE (*no heating request*) BEGIN ChosenMethod:=NoMethodi OperateSystem(CurrentData)i ENDi ENDi (*End routine WITH CurrentData*) ENDi (*Whi le operating*) ShutDownSystem(CurrentData)i (* panic or abnormal condition *) END. Figure 4·2. First Try at Coding the Main Program 43 CHAPTER4 (**The following are only comments: The following procedures wi II be coded in another module called the Operation Module: PROCEDURE OperateSystem(CurrentData) This procedure wi II operate the system and constantly maintain heat gain in the system. Depending on the heating method chosen, it opens certain valves and closes others, and turns on certain pumps and turns off others. It also maintains a flow of heated water to the storage tank. NOTE: for our testing purposes, a dummy OperateSystem procedure wi II only display messages telling us what heating method was chosen, and temperature data. PROCEDURE ShutDownSystem(CurrentData) This procedure wi II perform an orderly shut dowh if a panic or abnormal condition occurs. ihe shut down must keep warm water flowing through the solar collector and close any extraneous valves, etc. It must also send a warning messages to the console, advising manual operation of the furnace, etc. NOTE: for our testing purposes, a dummy ShutDownSystem procedure wi II only display data and a shutdown message. PROCEDURE StartUpSystem This procedure wi II start the climate system (cold start, or after ShutDownSystem occurs), open necessary valves, etc. It wi II also display a startup message. NOTE: for our testing purposes, a dummy StartUpSystem procedure wi II only display a startup message. The following procedures wi II be coded in another module called the GetData Module: PROCEDURE GetData(CurrentData) This procedure wi II obtain the data from a PL/M-86 module called PLMDATA that accesses ports to obtain temperature data. Data other than temperature data wi II come from ports via port input/output procedures in this Pascal-86 module. NOTE: for our testing purposes, a dummy GetData procedure wi l lob t a ina l l d a t a from the con sol e . Figure 4·2. First Try at Coding the Main Program (Cont'd.) 44 PROGRAMING IN PASCAL-86 PROCEDURE StoreData(CurrentData) This procedure wi II store the data record CurrentData in a file (the file would probably reside in non-volatile bubble memory). NOTE: for our testing purposes, a dummy StoreData procedure wi II simply output the data to the console. This i s the las t lin e 0 f c omme n t s . * * ) Figure 4-2. First Try at Coding the Main Program (Cont'd.) This guide cannot possibly explain Pascal syntax-there are several books mentioned in the Bibliography that can give you the background you need, and the Pasca/-86 User's Guide provides all the information you need to use Intel's extensions to standard Pascal. PASCA~86DATATYPES A major advantage that Pascal has over other high-level languages is its strong type checking mechanisms that enforce data typing. By using Pascal's data types, you avoid some of the classic causes of errors in programs-the ambiguities involved with using simple X and Y variables to hold truly non-numeric data, the mistakes that occur when you attach arbitrary meanings to numeric data, and the complexities that are magnified by ambiguous variable names. An example is worth a thousand explanations. In the Pascal-86 algorithm in figure 4-2, we make assignments like this one: ChosenMethod:=TankToExchanger; If ChosenMethod and TankToExchanger are declared properly in the module heading (not shown in figure 4-2, but shown later in this section), the Pascal-86 compiler will know their meanings. When you read this assignment, you know exactly what heating method has been chosen. The data type is a type of heating method, not an integer representing a method. In other programming languages you might be able to have a variable named "ChosenMethod" and another variable named "TankToExchanger", but you would also have to be sure to assign proper numeric or string values to them. A typical way of expressing the above assignment in PLI M would be: CHOSENSMETHOD = 2 I*where 2 is the appropriate method*1 or CHOSENSMETHOD = TSTOSEXCH I*where TSTOSEXCH has already been assigned the appropriate value*1 45 CHAPTER 4 In both cases, you have to know a numeric code for the heating method. In Pasca"l, however, you only have to define a set of heating methods, and pick one for the assignment. Here is an example of such a definition: TYPE HeatingMethods = i <*The above defines the data type HeatingMethods, which is used to define the variable ChosenMethod below.*> VAR ChosenMethod : HeatingMethodsi In order to assign a value to ChosenMethod, the program must assign one of the methods in the set of type HeatingMethods. Any other assignment would cause a compiler error message to occur. By enforcing this data typing mechanism, the Pascal-86 compiler reduces the number of run-time errors by flagging the data type errors early in the game. There are several standard Pascal data types that are useful. For example, you can define a variable to be of type BOOLEAN, which means that the only values that can be assigned to the variable are the values TRUE and FALSE. The variables Operating and Panic are of type BOOLEAN; they are either TRUE or FALSE. Note that ChosenMethod and CHOSEN METHOD would refer to the same variable, since lower case characters are treated as upper case. This feature allows you to create long identifying names with combinations of upper and lower case characters that are easy to read and understand. ANOTHER LOOK AT MODULARIZING AND HIDING INFORMATION The programming technique called information-hiding is not an excuse for designers to withhold information from their documentors-it is more akin to a technique we use to hold a lot of information in our minds. When we have to interface with several different organizations within a company in order to get a job done, we don't pay attention to the inner workings of an organization; we simply assume that the organization will do its job, and we define our interface with the organization. Their organization is one module, and ours is another module; the job gets done because the modules know how to communicate to each other without interfering in each other's details. Most logical algorithms are designed with assumptions about working modules. In our algorithm in figure 4-2, we assume that the procedures StartUpSystem, GetData, StoreData, OperateSystem and ShutDownSystem will work as planned, even though they are not yet written. We also assume that another group may write them. We can make these assumptions because we designed our main module to hide most of the details about choosing heating methods. So far, the main module's algorithm decides the appropriate heating method based on a set of data. Once the algorithm is written, it may never change; and if it had to change, its change should not affect the other modules. However, we could change the control algorithm so that changes to the heating methods, or additional heating methods, would not even affect the main control algorithm. A simple way to do this would be to turn the heating method determina- 46 PROGRAMING IN PASCAL·86 tion algorithm into an independent procedure called DetermineMethod, extract from this algorithm the calls to OperateSystem, and put the call to OperateSystem in the control algorithm. The resulting main module is shown in figure 4·3. We added the module heading, but we still need the interface specification and variable declarations (shown later). MODULE MainControl; (* Interface specification goes here, to be supplied later. *) (* Type definitions and variable declarations to be supplied later. *) PROGRAM MainControl(INPUT,OUTPUT); SystemData) ; PROCEDURE DetermineMethod(VAR Current Data BEGIN WITH Current Data DO BEGIN IF InsideTempMinimumForExchanger THEN ChosenMethod:=CollectorToExchanger ELSE IF CollectorWaterTemp>MinimumForHeatPump THEN ChosenMethod:=CollectorToHeatPump ELSE IF TankWaterTemp>MinimumForExchanger THEN ChosenMethod:=TankToExchanger ELSE IF TankWaterTemp>MinimumForHeatPump THEN ChosenMethod:=TankToHeatPump ELSE IF HeatedTankTemp>MinimumForHeatPump THEN ChosenMethod:=HeatedTankToHeatPump ELSE Panic:=TRUE; Operating:=FALSE; END ELSE (*no heating request*)ChosenMethod:=NoMethod END; (*With CurrentData*) END; (*DetermineMethod) (************** MAIN PROGRAM *************************************) BEGIN StartUpSystem; Operating:=TRUE; Pani c :=FALSE; WHILE Operating DO (*whi le system is operating, do:*) BEGIN GetData(CurrentData); (*Get the temps, time, etc.*) StoreData(CurrentData); (*Store this data as record*) DetermineMethod(CurrentData); (*this detects a panic*) OperateSystem(CurrentData); END; (*whi le operating*) ShutDownSystem(CurrentData); END. (*Main Control Algorithm*) Figure 4·3. Second Try at Coding the Main Program 47 CHAPTER4 The DetermineMethod procedure now hides all the information about choosing the appropriate heating method. We could also rewrite it to include cooling methods, or to change the heating methods. The procedure expects to receive the record CurrentData, and it only changes the value of the variable ChosenMethod. The OperateSystem procedure will not be written until more facts are known about the hardware of the actual climate system. However, we already know that if we make a decision about a chosen method, include that method in the data record CurrentData, and send that data record to the OperateSystem procedure properly, the OperateSystem procedure will know how to operate the system. We defer these details to a later time when we'll have a prototype system to operate. PASSING DATA TO OTHER MODULES-PARAMETER PASSING TECHNIQUES We designed our main module so that it will receive a record of information. A Pascal-86 record is much like a PLI M-86 structure which can be defined to hold certain data types. We have to define this record in order to write the main module, but we can defer decisions about obtaining the data in order to preserve our options. A PLlM-86 procedure could easily obtain the data and build the structure according to interface specifications; so could an 8086/8087/8088 Macro Assembly Language program, or an 8089 Assembly Language program. In fact, we might be able to use existing routines to obtain the data, and simply write another routine to structure the data accordingly. In any case, we only have to pass the address of the structure to the Pascal-86 main module, which knows what to do with it. This parameter-passing technique is known as pass by reference, because the main module only needs a reference to the address of the structure in order to treat the structure as a Pascal record. Another parameter-passing technique is pass by value, where a procedure calls another procedure and sends it a value rather than an address. We don't use this technique in our application, since our procedures need to access data in the record. We decided against paSSing specific values from this data record, and decided instead to make the entire data record available to the appropriate procedures. To define the data record properly and still provide the ability to change it easily, we created a data type for the record: TYPE {*definitions publicly defined in this module*> SystemData 48 RECORD ChosenMethod InsideTemp, ThermostatSetting CollectorWaterTemp, TankWaterTemp, HeatedTankTemp AmountOfSunlight Hour Minute END {*SystemData*>; HeatingMethods; AirTemperature; WaterTemperature; Integer; 00 .• 24; 00 .. 59; PROGRAMING IN PASCAL·S6 Using the data type System Data, we defined the variable CurrentData to be of that type: VAR CurrentData SystemData; We pass the variable CurrentData to other procedures. If we were to change the data fields in the record, we would only have to change the definition of System Data; we would not have to change any of the calls that pass the variable CurrentData. If the data fields kept the same names (Chosen Method, ThermostatSetting, etc.), we would not have to change the routines that use those data fields. THE INTERFACE SPECIFICATION A module that calls a procedure in another module must have some information about where the other procedure is, and it must provide some information to the other procedure about the data being passed. Intel's Pascal-86 provides a mechanism for supplying the appropriate information to all modules that are to be linked to form a program-it is called an interface specification. The interface specification typically holds the type definitions and variable declarations that are needed by all modules, and it also contains the names of procedures (with their parameters) that are public to other modules; that is, they can be called from other modules. Each module of the entire program contains this information. Figure 4-4 shows the interface specification for our program. In addition to PUBLIC definitions in the interface specification, a module can have PRIVATE type definitions and variable declarations for variables used only within the module. Our Operation module will have a PRIVATE section for all variables that are only used within the module, but our MalnControl main module does not need one. In Pascal-86, a PRIVATE heading is used in non-main modules instead of a PROGRAM heading. Several enumerated types are defined in our program: AirTemperature and WaterTemperature are defined as types that can only have values in the ranges specified. The variables Hour and Minute are also of enumerated types, but since their ranges do not change, their types are not defined separately. By defining the temperature types separately, we can easily change their ranges without affecting the data record. By defining the data record as type SystemData, we can easily change data fields in the record without changing the CurrentData declaration. By defining and declaring types and variables in the interface specification, we can maintain the interface speCification separately (and change definitions and declarations) without affecting the procedures. TEST VERSION OF THE CLIMATE CONTROL SYSTEM Since our hardware designs are not yet firm, we should put together a test version of our system that does not interact with any prototype hardware. This version should include dummy procedures for the procedures that would normally rely on 8088 ports and other hardware. 49 CHAPTER 4 PUBLIC MainControl; (*section of interface specification*) CONST (*declarations declared publicly in this module*) MinimumForExchanger MinimumForHeatPump 35; (*degrees Celsius*) 13 ; TYPE (* d e fin i t ion s pub l i cl y de fin e din t his mo d u l e * ) Air Temp era t u r e =- 2 0 .. 1 20 ; (* d e 9 r e e sin Ce lsi us * ) WaterTemperature =0 .• 120; HeatingMethods =(CollectorToExchanger, CollectorToHeatPump, TankToExchanger, TankToHeatPump, HeatedTankToHeatPump, NoMethod); SystemData RECORD ChosenMethod HeatingMethods; InsideTemp, ThermostatSetting Air Temp era t u r e ; CollectorWaterTemp, TankWaterTemp, HeatedTankTemp WaterTemperature; AmountOfSunlight Integer; Hour 00 .. 24; Minute 00 .. 59; END (*SystemData*); VAR (*variables publicly defined in this module.*) Current Data Operating, Panic SystemData; BOOLEAN; PUBLIC GetData; (*GetData Module containing GetData & StoreData*) PROCEDURE GetData(VAR CurrentData:SystemData); PROCEDURE StoreData(VAR CurrentData:SystemData); PUBLIC Operation; (*Operation Module containing OperateSystem, StartUpSystem and ShutDownSystem*) PROCEDURE StartUpSystem; PROCEDURE OperateSystem(VAR CurrentData:SystemData); PROCEDURE ShutDownSystem(VAR CurrentData:SystemData); Figure 4-4. The Interface Specification 50 PROGRAMING IN PASCAL-86 The dummy versions are shown in figure 4-5. You should type these versions exactly as you see them, with the StartUpSystem, OperateSystem, and ShutDownSystem dummy procedures in the dummy Operation module stored in the file :F1 :DUMOP.SRC, and GetData and StoreData dummy procedures in the dummy GetData module stored in the file :F1 :DUMDAT.SRC. The MainControl module should be stored in :F1 :MAIN.SRC, and the interface specification shown in figure 4-4 should be typed into the file :F1 :INSPEC.SRC. If you cannot fit all of these files on the disk in drive 1, you should put all of them on another disk-and use your own path name (:Fn:) for the" .SRC" files. For our examples we assume that these files are on the disk in drive 1, along with the Pascal-86 compiler and run-time libraries. Figure 4-5 shows each module and the dummy procedures. Since the interface specification is repeated in each module, we use a shortcut when compiling the modules by putting the common interface specification in a seperate file (:F1 :INSPEC.SRC), and we use the INCLUDE control in a control line as shown: $INCLUDE(:F1:INSPEC.SRC) If you put INSPEC.SRC on a disk in a drive other than drive 1, use your own path name instead of :F1 :INSPEC.SRC. MODULE MainControl; (* Interface specification common to all modules *) SINCLUDE(:F1:INSPEC.SRC) PROGRA~ MainControl(INPUT,OUTPUT); (* end of interface specification *) PROCEDURE DetermineMethod(VAR CurrentData SYs t emD a t a ) ; BEGIN WITH CurrentData DO BEGIN IF InsideTempMinimumForExchanger THEN ChosenMethod:=CollectorToExchanger ELSE IF CollectorWaterTemp>MinimumForHeatPump THEN ChosenMethod:=CollectorToHeatPump ELSE IF TankWaterTemp>MinimumForExchanger THEN ChosenMethod:=TankToExchanger ELSE IF TankWaterT~mp>MinimumForHeatPump THEN ChosenMethod:=TankToHeatPump ELSE IF HeatedTankTemp>MinimumForHeatPump THEN ChosenMethod:=HeatedTankToHeatPump ELSE Panic:=TRUE; Operating:=FALSE; END ELSE (*no heating request*)ChosenMethod:=NoMethod END; (*With CurrentData*) END; (*Determi neMethod) Figure 4-5. Test Version of Our Climate Control System 51 CHAPTER 4 (************** MAIN PRO'RAM *************************************) BEGIN StartUpSystemi Operating:=TRUEi Panic:=FALSEi WHILE Operating DO (*whi le system is operating, do:*) BEGIN GetData(CurrentData)i (*Get the temps, time, etc.*) StoreData(CurrentData)i (*Store this data as record*) DetermineMethod(CurrentData)i (*this detects a panic*) OperateSystem(CurrentData)i ENDi (*while operating*) ShutDownSystem(CurrentData)i END. (*Main Control Algorithm*) (*This is a dummy Get Data module, with dummy GetData and StoreData procedures, for use with MainControl module in testing phases. It only performs console input to get Celsius temperatures, the time of day, and the amount of sunlight (insolation) for the solar collector. Use PLMDATA module for real application.*) MODULE GetDatai (* Interface specification common to all modules *) $INCLUDE(:F1:INSPEC.SRC) PRIVATE GetDatai (* end of interface specification *) PROCEDURE GetData(VAR CurrentData:SystemData); BEGIN WITH Current Data DO BEGIN WRITE('Type the thermostat setting in degrees Celsius: 'I; READLN(ThermostatSetting); WRITELN; WRITE('Type the inside temperature reading in Celsius:'); READLN(InsideTemp)i WRITELN; WRITE('Type the temperature of the collector water in Celsius: 'I; READLN(CollectorWaterTemp); WRITELN; WRITE('Type the temperature of the tank water in Celsius: 'I; READLN(TankWaterTemp); WRITELN; WRITE('Type the temperature of the heated tank water in Celsius:'); READLN(HeatedTankTemp); WRITELN; WRITE('Type the hour of day, as in 04 or 24:'); READLN(Hour); WRITELN; Figure 4-5. Test Version of Our Climate Control System (Cont'd.) 52 PROGRAMING IN PASCAL·86 WRITE('Type the minute of the hour, as in 01 or 59: '); READLN(Minute); WRITELN; WRITE('Type the amount of sunlight, any integer will do for now:'); READLN(AmountOfSunlight); WRITELN; END; (twith CurrentData t ) END; PROCEDURE StoreData(VAR CurrentData:SystemData); BEGIN (tDummy procedure, eventually wi II store CurrentData in a filet) WITH Current Data DO BEGIN WRITELN('---------------------------'); WRITELN(' CURRENT DATA IS AS FOLLOWS:'); WRITELN('---------------------------'); WRITELN('Thermostat Setting is ',ThermostatSetting, 'C'); WRITELN('Inside temperature is ',InsideTemp, 'C'); WRITELN('Temperature of collector water is ';CollectorWaterTemp,'C'); WRITELN('Temperature of tank water is ',TankWaterTemp,'C'); WRITELN('Temperature of the heated tank water is ',HeatedTankTemp, 'C'); WRITELN('Time of day is ',Hour, ':',Minute); WRITELN('Amount of sunlight is ',AmountOfSunlight); WRITELN; (ta blank line t ) END; (twith CurrentData t ) END. (tThis is a dummy Operation module, with dummy StartUpSystem, ShutDownSystem, and OperateSystem procedures, for use with MainControl module in testing phases. t ) MODULE Operation; (t Interface specification common to all modules .) $INCLUDE(:F1:INSPEC.SRC) PRIVATE Operation; (* end of interface specification *) PROCEDURE StartUpSystem; BEGIN WRITELN ('Climate system is now on.'); WRITELN ('-------------------------'); WRITELN; END; PROCEDURE OperateSystem(VAR CurrentData:SystemData); BEGIN WITH Current Data DO BEGIN WRITELN('=============================================='); WRITELN('The Climate System is now operating. '); Figure 4·5. Test Version of Our Climate Control System (Cont'd.) 53 CHAPTER 4 WRITELN; WRITELN('The Time is ',Hour, ':',Minute); WRITELN('The inside temperature is ',InsideTemp,'C'); WRITELN('The thermostat setting is ',ThermostatSetting,'C'); WRITE('Method chosen to heat the building: '); CASE ChosenMethod OF CollectorToExchanger: WRITE('Solar Collector to Exchanger'); CollectorToHeatPump WRITE('Solar Collector to Heat Pump'); TankToExchanger WRITE('Tank to Exchanger'); TankToHeatPump WRITE('Tank to Heat Pump'); HeatedTankToHeatPump: WRITE('Heated Tank to Heat Pump'); NoMethod WRITE('No heat required'); END; WRITELN; WRITELN('=============================================='); WRITELN; (*write a blank line.*) END; END;(*OperateSystem*) PROCEDURE ShutDownSystem(VAR CurrentData:SystemData); BEGIN WR IT ELN ( , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :' ); 'IF Panic THEN WRITELN('PANIC occurred, NORMAL shutdown.') ELSE WRITELN('No panic occurred, ABNORMAL shutdown.'); WRITELN (':::::::::::::::::::::::::::::::::::::::::::::::::') WITH Current Data DO BEGIN WRITE('Last chosen heating method was: '); CASE ChosenMethod OF CollectorToExchanger: WRITE('Solar Collector to Exchanger'); CollectorToHeatPump WRITE('Solar Collector to Heat Pump'); TankToExchanger WRITE('Tank to Exchanger'); TankToHeatPump WRITE('Tank to Heat Pump'); HeatedTankToHeatPump: WRITE('Heated Tank to Heat Pump'); NoMethod WRITE('No heat required'); END; WRITELN; WRITELN('Thermostat Setting is ',ThermostatSetting,'C'); WRITELN(' Inside temperature is', InsideTemp,' C'); WRITELN('Temperature of collector water is ',CollectorWaterTemp,'C'); WRITELN('Temperature of tank water is ',TankWaterTemp,'C'); WRITELN('Temperature of the heated tank water is ',HeatedTankTemp,'C'); WRITELN('Time of day is ',HOur,':',Minute); WRITELN('Amount of sunlight is ',AmountOfSunllght); END;(*with CurrentData*) WRITELN('::::::::::::::::::::::::::::::::::::::::::::::::::: :::'); WRITELN; WRITELN('Goodnight, Irene ... '); END.(*ShutDownSystem*) Figure 4-5. Test Version of Our Climate Control System (Cont'd.) 54 PROGRAMING IN PASCAL-86 THE PASCAL-86 COMPILER A compiler is a program that translates your high-level language statements into machine code. Machine code, sometimes called object code, consists of the instructions that machines understand, whereas high-level language statements are instructions that humans understand. You must translate your high-level language statements into machine code by compiling your high-level language program. The Pascal-86 statements we typed (using CREDIT) are program source statements. We now have three source files: :F1:MAIN.SRC (for the MainControl module), :F1:DUMDAT.SRC (for the dummy GetData module), and :F1 :DUMOP.SRC (for the dummy Operation module). To translate these source statement modules into object code modules, we must compile each source module separately. The Pascal-86 compiler is supplied as the file PASC86.86. You invoke the compiler by using the RUN command to load and execute it in the "8086 side" (8086 execution mode) of the Series III system. The compiler usually produces two files: a listing file that contains a listing of the source program as the compiler saw it, and an object file that contains the actual machine code. The listing file usually contains a listing of the source statements, additional information about the compilation, and any errors that occurred during the compilation. For example, assume that MAIN.SRC, the first module, is in directory :F1:. The Pascal-86 Compiler, PASC86.86, is also in directory :F1:. To compile this module, use the following command: -RUN :F1:PASC86 :F1:MAIN.SRC DEBUG Let's analyze this command line. RUN is the command used to execute the program in the "8086 side" of the system. :F1 :PASC86 is the path name (without the" .86" extension) of the Pascal-86 Compiler (RUN supplies the" .86" extension). :F1 :MAIN .SRC is the path name for the MAIN.SRC module. Finally, DEBUG is a compiler control which tells the compiler to do something special (described later). This compilation produced two files: :F1 :MAIN .LST is the listing file, and :F1 :MAIN .OBJ is the object file that contains the object code. :F1 :MAIN .SRC is still in drive 1. All of these files are in directory :F1:, since that is where MAIN .SRC resides. Compiler controls tell the compiler to perform certain operations. Most controls have default settings that you do not have to specify. For example, the PRINT control is always on unless you specify NOPRINT. The PRINT control tells the compiler to produce a listing file, and use the name of the source file with an ".LST" extension (e.g., :F1:MAIN.LST). We could have used this version of the PRINT control: -RUN :F1:PASC86 :F1:MAIN.SRC DEBUG PRINT(:LP:) This version of the PRINT control sends the listing to the line printer (:LP:), rather than creating :F1 :MAIN.LST as a listing file. Most of the compiler control default settings are useful for everyday compiling; that is, there is no need to learn how to use the compiler controls unless you want to do something special. For example, if you want the compiler to issue a warning message whenever it sees a nonstandard Pascal statement (an Intel extension to the standard Pascal language), use the NOEXTENSIONS control. 55 CHAPTER 4 We used the DEBUG control for a good reason: we want to do symbolic debugging while the program is running (using DEBUG-86, described in Chapter 7). You will want to do symbolic debugging during the first run of your program. Use the DEBUG control to prepare your program for symbolic debugging unless your program is extremely large. Most compiler controls can be specified in the invocation line as we show above. Most compiler controls can also be imbedded in the source file-as contro//ines. For example, we used the INCLUDE control in a control line: $INCLUDE(:F1:INSPEC.SRC) The INCLUDE control allows you to insert source statements from another file into this compilation. In this case, we wanted to insert the common interface specification (in :F1 :INSPEC.SRC) into our compilation. The INCLUDE control saved us from typing the same interface specification for all three source files. We also need to compile the other modules separately. The following invocation line compiles our GetData module in DUMDAT.SRC: -RUN :F1:PASC86 :F1:DUMDAT.SRC DEBUG SERIES III PascaL-86 V1.O PARSE 68 99 0 0 ***WARNING, input: "END" ***was repaired to: "END;" END PARSE(1), ANALYZE(O), NOXREF, OBJECT COMPILATION OF GETDATA COMPLETED, 1 ERROR DETECTED. END OF PascaL-86 COMPILATION. The compiler displays a sign-on message, then the word "PARSE" to show that it is parsing the program statements. During the parsing phase, the compiler discovered an error-the "END" statement was not punctuated correctly. The compiler repairs our error, and continues to compile. Each phase of compiling is displayed with a number in parentheses-the number of errors detected during the phase. The compiler only detected that one error, and since the error was easily repaired, the compilation was successful. We now have :F1 :DUMDAT.OBJ containing the object module. To compile our dummy Operation module, we use the following invocation line: -RUN :F1:PASC86 :F1:DUMOP.SRC DEBUG The listing files :F1 :MAIN.LST, :F1 :DUMDAT.LST, and :F1 :DUMOP.LST are shown in figure 4-6. 56 PROGRAMING IN PASCAL-86 SERIES-III Pllsca'l1-8b, xC31 501,11"", Fil'l Obj.ct Fih: 09/01/80 "AGE 1 MAINCONTROL :F1:MAIN.SRC :F1:MAIN.:SJ CeBUG. Contl"'oll Slucifi.d: ST"T LINE NESTING 1 1 0 0 2 2 0 0 5:JURce TExT: :F1:MAIN.SAC MC:lUL!: MliinContl"'oli (* Inhr1i!lc. 51)9Cif1c2It101'1 common to lIll modul., *) SINCL.U::JE(:F1 :INSPEC.SRC) 0 11 12 18 20 21 10 23 11 12 26 27 28 29 30 13 14 15 16 17 34 35 18 37 19 20 39 40 21 42 22 23 24 44 45 46 0 0 0 0 0 =1 0 =1 =1 -1 -1 -1 -1 =1 -1 =1 =1 =1 -1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 '1 =1 =1 =1 -1 =1 -1 =1 =1 =1 '1 =1 =1 =1 =1 =1 -1 =1 =1 =1 =1 =1 =1 "'U3LIC MalnContl"'oU (*"etlon of int.r-he. sPlcificatio".) 35; (tilde;,. .. , C.ls1u.*') 131 Hi nillluIIIFOl": x C1'1211"1;'1'" MinimumF ol""ellH'ump TYPE (*d.finitl.ol'ls publicly dlfintd in this "'oclul,.) =-20 •• 120;C.cI.g ..... in CIlIsiu,.) =0 •• 120; A iI"'T''''PIJI'''2! tUl"'6 Wi!lt,,.Tamp'l"'lItul"" P'4ll1tingMatnods = CC 011 /lie tOI"'To exc 1'1;1 1"1 g.'" Co 11ec tor T o lot II 21 tClump, TSlnkTo:xchllng,,., TllnkToHeCltPuml!l' ri eatedT 21nk T oHelltP ump, NoMet"od) i Q:Ee':lRO HeatingMttthodsi InsideT!!mp, T" s ,.most CIt Set tint;j Co 11ec torW~ terT emp, T ankWClterTemp, H2S1t(fdTankTemp Amou n tDfSu n 1iQht H?ur Minute END C-SvstemData-)i VAR (*va,.hb1.s publicly defined eu"rentDat:l Jiarating, Panic PUBLIC G.tDlIta; PROCE:JURE PROe EOURE : : in Wat.r Temp e" a t u r.; Inteoer; 00 •• 24; 00 •• 59; t"is module.-) SvstltmData; aOOLEANi C-GetDatCl Module contalinint;j GetData & StoreOata*) GetOEltaCVAR C\,I,.rentData:SvstemOatali S to"eOClt iii CVAR CurrentData: Sv stemOlltSl); :lWSLIC Operation; C*Opa,.ation Module containing QperateSvstem, StartUpSystem and ShutOownSystem*) PRQe::OURE St2lrt:.JpSvstem; PR:!C:: OU~ E Qp lI,.ateSvstam (" 4 q C u,.rent DSltSl: Sy stemData) i PR::JCEOUR 5 hutJo wnSv stem (V 4 q C urrent'Ja ta: Sys hmCah); = P~OGRAM MainContl"pl (INPUT ,OUTPUT>; 25 (* lind 26 26 27 27 28 28 29 13 14 15 16 17 18 19 31 21 33 23 35 25 37 Z7 40 41 42 44 45 29 30 31 32 33 of interf2lC2 specification *) PROCEDURE Oeter'llineMethod (VA~ Cl.lr"ent')ah SvstemData) i 3::G:i:N WITH Cur,.gntJSlta 0:: 3EGIN !F InsideTempMinimumForExchant;je,.. THEN ChosenMethod: =Co 11ect o,.To Exchange r eLS= IF C?l19ctol"WaterTemp>MinimumForHeatPump THEN e hosenMe thod: =C01lee torT oHeat Pump ELSE IF TankWMinimumFo,.Exchange,. THEN C 1'1 os e nMe t 1'10 d : = T an k T oE x chan gllr :LSE IF TankWate,.Temll>MinimumForHeatDump T"iEN C 1'10 5' n Milt 1"10 d: = T "nk To He a t Pump ELSE IF He&tedTankTemll>MinimumFo"Heeti'ump THEN e n05 en Met nod: = Heil t ad T iI n k T oHea t Pump ELSE Panie:=TIWEi Ope,..ating:=FALSE; :ND ELSE (*no he~ting requllst*>ChosenMethod:=NoMethod E~Di (*With Cu,.rentData*) END; (*DetarmineM/lthod) Figure 4-6. Listings of Our Test Modules 57 CHAPTER 4 (* • ., 45 46 47 48 49 49 50 51 52 53 37 38 39 40 41 42 43 48 ** * * * ***., .***) Panic:=FALSE; (.while system is 0".,.at1ng, do:·) BEGIN GetOatSlCCu,.,.entOata); (*G8t tn, tem"s, time, ete •• > StoreOEltaCCu",-entOata): (*5tol". this data liS record.> Oete,.rnineMlthodCCu,.,.entOi!ita); (.U,!s detects a panic.) Opet"'a te5ystem (Cu,.,..ntDat!l); END: (.while operating.> Shu t Dow r, Sy $ t em (C u I" I" en t:l at cd ; ENO. (*M~in Contl"ol Algol"ithm*> WHIL.E Ol::lel"elting 00 46 ,. 47 56 HA I N P ROG RA M .,., *** '" ******* ** ** * •• *** Op,,.ating:=TRUe; 44 45 55 *.,., **. * * •• ., BEGIN StartUpSysteiTI; Summ.,.y Information: PROCEDURE OFFSET OD11 H De T e 11M I NE MET HOD 0147" Total DATA SIZE CODE SIze 1430 008F" 3270 0016H 220 STACK SIZe 0006H 60 J04CH 760 94 Lines Rlud. a Errors Detaetad. 33~ Utilization of Memory. 09/01/80 SERleS"III PascEll"S6, x031 Source File: :1=1 :DUMOAT.SRC iJbject File: :F1 :OUMJAT.OaJ Controls Sl)eeified; DESUG. STH1 LINE NESTING 1 1 0 0 SOURCE TEXT: :c1:0UMOAT.SQC (*This is aI dummy GetDi!lte module, with dummy GetOata and Stol"eData procedures, fol" use with Ma1nContl"ol module in testing pnases. It only Del"forms console inJ)ut to get Celsius temJ:leratul"es, tne time of day, and the amount of sur,light (insolz,tion) fol" tne sol;;1r collectol". Use PLM86S0ATA module fol" real application.*) MODULE GetDatCl; 10 (* Int9dace specifiCiition common to 11111 modules *) 11 12 18 20 21 10 23 11 12 13 14 26 27 28 29 =1 =1 =1 =1 -1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 -1 =1 =1 SINCLUDE(:1=1 :INSI'EC.SQC> PU3LIC MainContl"ol; (*section of interface specification*) CaNST (*declaratior,s dacl:il"ed publicly 1n this module*) 35; (*degrees Celsius*) 13; Mi n i mumF 0 I" E)( chan gel" Min i mumF orl-lea t Pump TYPE (.definitions publicly defined in this module*> Ai,-r.mpel"atur, ="'20 •• 120;(*de!ilre.s in Celsius*) WaterTemQe,.ature =0 •• 120; Heati ngMet t,ods = (Col lee tOl"ToExc I'Ian gel", ColI ec to rT 0 He at Pump, Tank T oE)( C1'1 IInge,-, TankToHeatPump, He!! t ed T ClnkT oHea t Pump, NO~8tl'lod); SystemOatll QeCOR~ Cl'lOS8nMetl'lod InsideTemp, Thermos ta.t S. t tin 9 ColI ec torWi!lterT emp, T2InkWat.rremp, HeatedTankTeml3 Am 0 untO f S un 1 i gl'l t Hour Minute ;NO C*SystemOata*); Hee1:ingMe1:hod~; AirTemI38,..atu r .; WaterTernl)er.tur8; Intege,-; 00 •• 24; 00 .. 59; Figure 4-6. Listings of Our Test Modul~s (Cont'd.) 58 PAGE PROGRAMING IN PASCAL·86 15 o 30 16 17 34 35 18 37 19 20 39 40 21 42 22 23 24 44 45 46 25 16 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 VAI1: (*va,.iilbles publicly defined in this module •• ) Cu,.rantiJata : Sy~ter'l'lOata; Oper€lting, Panic : BOOLEAN: puaLIC GetOatai (*GetData Module containi"'~ Get02lta & Stor-.oatil.) PROCEDURE GetOataCVAR Cu,."ent!lata: SystemData); PROCEDURE StoreQata(VAR Cu,.rantOCltil:SystGmOat2l); puaLIC Operation; (*Operation Module containing Qperllte$ystem, StartUp$ystem OInd Shut:JownSystem*> PROCEDURE StClrtUp$ystem; PROCEDURE Qpel"'ateSystem(VAR Cu,.,-entDati!l: SystemDad:a); PROCEDURE ShutDown Sy st em (VA R Cur re ntData: Sy stemO i!'Ita); PRIVATE GetD~tC'l; (* end 01 interface specifiCi!'ltion *) 26 26 27 28 30 31 33 34 36 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 37 39 40 42 43 45 46 48 49 51 53 54 37 38 39 40 41 55 55 43 44 0 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 36 Z 1 0 46 56 57 47 48 58 59 49 60 50 61 51 62 52 63 53 64 54 65 55 66 56 67 57 69 58 *.*WARNING, input: "':ND PROCEDURE GetData (VAR CurrentOatCl: SystamData); BEGIN WITH Current!')ati!'l 00 BEGIN WRITEC"Type the thermostat setting in degrees Celsius:'); QEAOLN (Thermostat$et ting); WR I TELN; WRITE('Type the inside temperi!'lture reading in Celsius:'); READLNClnsideTemp); WRITELN; WRITEC'Type the temperature of the collector water in Celsius:'); REAOLN (C 0 HectorWClt erT emp); WRIT ELN; WRITE('Type the temperature of the tank welter in Celsius:'); REA!,)LNCTankWaterTemp); WRITELN; WRITEC'Type the temperi!'lture of the heated tank water in Celsius:"); READLN (HeatedT ankTemp); WRI T E LN; WRITE ("Type the hour of day, as in 04 or 24:"); READLN(Hour); WRITELN; WRITE ("Typ; the minute of the hour, as in 01 or 59: "); READLN(Minute); WRITELN; WRITEC"Type the Clmount of sunlight, any integer will do for now:'); READLN(AmountDfSunlight); WRITELN; END; (*with CurrentDC'lti!'l*> END; PROCEDURE StoreDatCl(VAR CurrentData:SystemOata'l); S E GIN {*Dummy pr6cedure .. eventue.lly will stora CurrentData in a file*) WITH Current:JElti!'l DO BEG:N WR ITELN (" ---------------------------"); WRITELNC"CUi PRQCEDURE ShutDown$ystem(IJAR CurrentOata: $ystemData); SEGIN WI:!ITELN(":::::::::::::::::::::::::::::::::::::::::::::::::"); IF Panic THEN WRITELN("PANIC occurred, NORMAL shutdown.") ELSE WRITELNC"No PClnic occurred, ABNORMAL shutdown."); WRITEL".j("::::::::::::::::::::::::::::::::::::::::::::::::: ")} \fIITH CurrentlJata 00 BEGIN IoIRITEC"Last chosen l'1eClting method was: "); CASE Cl'1osenMethod OF Co llec torToE x chan ge r: WRITEC"Solar Collector to EXChanger"); CollectorToHeatPump : w~ITEC"Soli!lr Collector to Heat Pump"); TankToExch;;lnger WRITEC"Tank to Exchanger"); TankToHeatPu'TIp W;1:ITEC"Ti!lnk to Heat Pump"); He atedT ank T oH eClt Pump: wRlTEC"HeCl'ted TO! WRITELNC"::::::::::::::::::::::::::::::::::::::::::::::::::::::"); 1 2 2 3 3 3 3 3 3 3 2 72 2 7J 2 7~4 2 75 2 76 2 77 2 78 2 79 2 81 1 82 1 ~RITELN} 83 1 wRITElN(#Goodnight, Irene ••• ·); 84 1 END ···WARNING, input: n:N:l .. ·*"'was r"paired to "2ND 85 78 0 0 • C*ShutDownSystem*) Summary Information: PROCEDURE SHUTDOWNSVSTEM OPERATESVSTeM STARTUP$VSTEM DFFS!:T 0698H 044(jH 03E2~ COO::: SIrE 039BN 9200 Q258H 6000 DOSE H 940 oA30H Toul 26GSJ DATA SIZE STACK SIZE 0010H 0010H aD;)::!"'! 00 0010H 160 160 160 0030H 480 125 Lines Read. 1 Error Jetected. 33% Utilization of Memory. Figure 4-6. Listings of Our Test Modules (Cont'd.) Summary We now have three Pascal-86 modules: MainControl, GetData, and Operation. Two of these modules, GetData and Operation, are dummy versions that do not interact with any hardware except the Series III system; we will use them for examples in subsequent chapters. The MainControl module can remain unchanged even in our final application. The final application will probably use an 8088 processor. In Chapter 5, we show PLI M-86 procedures we can use to obtain data from thermocouples via the input/output ports on the 8088. Since you probably do not have prototype climate control hardware with an 8088, we will not include these procedures in our test versions for execution on a Series III system; nevertheless, they are good examples of PLI M-86 procedures. Our Pascal-86 modules cannot run by themselves on a Series III. Certain built-in procedures (like WRITELN and READLN) rely on run-time support software, which consists of public modules that contain the software needed to perform console input/output and other operations. In Chapter 6, we'll show you how to link the run-time support libraries to these Pascal-86 modules to make them executable on a Series III system. 61 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I CHAPTER 5 PROGRAMMING IN OTHER LANGUAGES "It is possible by ingenuity and at the expense of clarity ... [to do almost anything in any language). However, the fact that it is possible to push a pea up a mountain with your nose does not mean that this is a sensible way of getting it there." -Christopher Strachey NATO Summer School in Programming The Intellec Series III system also supports PLlM, FORTRAN, and assembly language programming for iAPX 86,88 and 8080/8085 applications. In the previous chapter we used Pascal-86 for our main control algorithm, but a modular strategy might take advantage of other languages for other modules. ANOTHER LOOK AT CHOOSING LANGUAGES FOR MODULES In the best of all possible worlds, would we all speak the same language? Tower of Babel enthusiasts would have us coding our entire program in one language-but which? We do not want to return to the stone age and lose cultural variety and language diversity. There are expressions that can only be expressed in Chinese characters, and there are problem-solving statements that are better expressed in PLI M than in FORTRAN. A good carpenter should have more tools than nails and a hammer; a good programmer should be fluent in several programming languages. When you design an algorithm, design it using a comfortable language. You will find the algorithm easier to debug, and you will notice the paradigm inherent in your design. When you are ready to translate your algorithm into code for a computer, use the language best suited for the paradigm. If you have many algorithms that must work together, you should keep the communication among them simple. With simple interfaces, you can code each algorithm in the language best suited for the algorithm. In some cases, you can use an algorithm that has already been developed for use in another application-another reason for keeping your algorithms and interfaces simple. With the Intellec Series III development tools, you can link these algorithms in different configurations to form several applications. _ For example, we chose to write our main control algorithm for the climate system in Pascal-86. We still need an algorithm for retrieving the data and converting it to Celsius temperatures. We decided to write a simple Pascal-86 routine for testing purposes only (this routine only retrieves the data from the Series III console); however, our final product will rely on thermocouples and other sources of data, and we will need an algorithm to convert thermocouple voltages to degrees Celsius. Fortunately, we already have a routine in PLI M-86 that performs this activity, and we can save development time and money byusing it. 63 Chapter 5 PROGRAMMING IN PL/M-86 PLI M is renowned for its structure and versatility. PLI M is one of the only structured high-level languages that allow you to manipulate bits with AND, OR, and shift (SHR for "shift right" and SHL for "shift left") operations. PLlM's data types are not as strictly enforced as Pascal's-PLlM's BYTE, WORD (ADDRESS), and POINTER types have loose definitions so that you can use them for different kinds of data. For this reason, PLiM is easier to use for system programming (designing computer systems or control mechanisms), yet harder to use in application programming where enforced data typing makes it easier to write error-free programs. In our climate control system, there are two routines whose paradigms lend themselves easily to PLlM: the routine to get BCD digits from a thermostat device and convert them to a Celsius temperature, and the routine to get voltage data from a thermocouple and convert the voltages to Celsius temperatures. Figure 5-1 shows the algorithm and the actual PLlM-86 code for the routine to retrieve data from a thermostat device. You are already familiar with comments in Pascal programs that occur between the (* and *) symbols; in PLlM, comments occur between the and symbols. '* *' A PLiM typed procedure is like a Pascal or FORTRAN function: it is called in an assignment statement (as in X:=FUNCTlON(Y)), and it returns a value (X receives the value of FUNCTION(Y)). In figure 5-1, the typed procedure THERMOSTAT$SETTING$FROM$PORTS returns the value of THERMO$SETTING, which it computes by accessing the two ports HIGH and LOW and converting the BCD digits to a Celsius temperature. The value of THERMO$SETTING is assigned to ThermostatSetting in the GetData procedure's assignment statement: ThermostatSetting:=THERMOSTAT$SETTING$FROM$PORTS(StatPort1,Stat Port2); PLMDATA: DO; f* This moduLe hoLds the procedures THERMOSTAT$SETTING$FROM$PORTS, TEMP$DATA$FROM$PORTS, and INTERPOLATE (a procedure used by TEMP$DATA$FROM$PORTS). These wi LL be used in the finaL testing phase of the cLimate controL system (when prototype hardware is avai LabLe). For intermediate testing (and exampLes in this book), do not use this moduLe; use the dummy GetData moduLe. *f f* The aLgorithm for getting a CeLsius temperature from a thermostat device that can send BCD digits to two ports of the 8088: The finaL version of the GetData procedure (to be wr itt e n i n Pas caL - 86) wi Ll use t his s tat eme nt tog e t the thermostat reading: ThermostatSetting:=THERMOSTAT$SETTING$FROM$PORTS(StatPort1,StatPort2); A PLfM-86 typed procedure caLLed THERMOSTAT$SETTING$FROM$PORTS receives two port numbers from GetData: StatPort1 and StatPort2. THERMOSTAT$SETTING$FROM$PORTS must access these ports, convert the BCD digits to a CeLsius temperature, and return the temperature. Figure 5-1. The PL/M-86 Typed Procedure THERMOSTAT$SETTlNG$FROM$PORiS 64 Other Languages INPUTS THERMOSTAT$SETTING$FROM$PORTS: Formal parameters HIGH and LOW receive port numbers as actual parameters. Input ports HIGH and LOW: Three BCD digits for the thermostat setting: Port HIGH, bits 3-0: hundred's digit Port LOW, bits 7-4: ten's digit Port LOW, bits 3-0: unit's digit OUTPUT THERMOSTAT$SETTING$FROM$PORTS: Return WORD with Celsius temperature *1 I*Here is the typed procedure THERMOSTAT$SETTING$FROM$PORTS:*I THERMOSTAT$SETTING$FROM$PORTS: PROCEDURE (HIGH, LOW) WORDj DECLARE (HIGH, LOW) WORDj DECLARE (IN$PORT$HIGH, IN$PORT$LOW) BYTEj DECLARE THERMO$SETTING WORDj DECLARE (HUNDREDS, TENS, UNITS) BYTEj IN$PORT$HIGH = INPUT(HIGH)j IN$PORT$LOW = INPUT(LOW)j HUNDREDS = IN$PORT$HIGH AND 00001111Bj TENS = SHR(IN$PORT$LOW, 4)j UNITS = IN$PORT$LOW AND 00001111Bj THERMO$SETTING = UNITS + 10*TENS + 100*HUNDREDSj RETURN THERMO$SETTINGj I*this returns the temperature*1 END THERMOSTAT$SETTING$FROM$PORTSj Hore procedures follow-osee figure 5-2. Figure 5-1. The PL/M-86 Typed Procedure THERMOSTAT$SETTlNG$FROM$PORTS (Cont'd.) There are notable similarities between Pascal and PLiM. Most notable are the logical structures that can occur in both languages-both have the DO WHILE and IF-THEN-ELSE constructs. The languages are lexically and syntactically different in data declarations, procedure headings, and other constructs, but they are logically similar. By conforming to a logical structure, you make your program readable and easier to debug. 65 ChapterS The data declarations in both languages are very similar. In both languages, you must declare your data identifiers to be of some type before using the identif~rs. In Pascal, you define data types or use predefined Pascal data types. In PLlM, you are restricted to the acceptable PLiM data types, but they are loosely defined. A BYTE can be any value expressed in eight bits, and a WORD in PLlM-86 (ADDRESS in PLlM-80) can be any value expressed in sixteen bits; both types of values are treated as unsigned integers. PLlM-86 offers several more types: INTEGER (for signed integers), REAL (for floating point numbers), and POINTER (for 8086 and 8088 addressing). PLlM-86 offers many features useful for system programming- arrays and structures, based variables, easy type conversion, built-in procedures for manipulating strings, setting and disabling interrupts, accessing the 8086 or 8088 hardware stack pointer and base registers, and performing bit shift and rotate operations. We use the AND and SHR operators in the THERMOSTAT$SETTING$FROM$PORTS procedure in figure 5-1. We also use PLlM-86 procedures to obtain temperature data from thermocouple voltage data. the GetData procedure in our GetData module (written in Pascal-86) calls the PLlM-86 procedure TEMP$DATA$FROM$PORTS to obtain the temperatures InsideTemp, ColiectorWaterTemp, TankWaterTemp, and HeatedTankTemp using these assignment statements: InsideTemp:=TEMPSDATASFROMSPORTS(InsidePort1,InsidePort2); CollectorWaterTemp:=TEMPSDATASFROMSPORTS(CollectPort1,CollectPort2); TankWaterTemp:=TEMPSDATASFROMSPORTS(TankPort1,TankPort2); HeatedTankTemp:=TEMPSDATASFROMSPORTS(HotTankPort1,HotTankPort2); In all four aSSignments, the Pascal-86 identifiers on the left side of the := symbols receive the values from the PLlM-86 typed procedure TEMP$DATA$FROM$PORTS. Figure 5-2 shows TEM P$DAT A$FROM$PORTS. 1* The typed procedure TEMPSDATASFROMSPORTS receives two port numbers: HIGH and LOW. These ports are accessed for the binary ADC output from a thermocouple device: HIGH gets the high-order 8 bits, and LOW gets the low-order 8 bits. TEMPSDATASFROMSPORTS then uses the typed procedure INTERPOLATE, a routine that interpolates a Celsius temperature from a thermocouple voltage using two tables. TEMPSDATASFROMSPORTS sends a WORD with the input voltage to INTERPOLATE. INTERPOLATE returns a Celsius temperature, which is returned to the GetData procedure (written in Pascal-86). INPUTS TEMPSDATASFROMSPORTS: Formal parameters HIGH and LOW receive port numbers as actual parameters. Input port HIGH: Binary ADC output of thermocouple, high-order 8 bits Input port LOW: Binary ADC output of thermocouple, low-order 8 bits Figure 5-2. The PL/M-86 Typed Procedures TEMP$DATA$FROM$PORTS and INTERPOLATE 66 Other Languages OUTPUT TEMPSDATASFROMSPORTS: Return WORD with temperature in Celsius /* INTERPOLATE is declared first, then its calling procedure TEMPSDATASFROMSPORTS is declared. */ /* INTERPOLATE is a typed procedure that receives thermocouple voltage and returns temperature in Celsius using an interpolation routine. */ INTERPOLATE: PROCEDURE(VOLTSIN) WORD; DECLARE VOLTS(*) WORD DATA(0,S1,102,1S4,206,2S8,36S,472); DECLARE TSCEL(*) WORD DATA(0,10,20,30,40,SO,70,90); DECLARE (I, VOLTSIN, NUMERATOR) WORD; I = 0; IF VOLTSIN=O THEN RETURN TSCEL(I); DO WHILE VOLTSIN > VOLTS(I); I = I + 1; EN 0; /* Shift for rounding, and return Celsius temperature */ NUMERATOR = SHL«VOLTSIN-VOLTS(I-1»*(TSCEL(I)- TSCEL(I-1», 1); RETURN TSCEL(I-1) + SHR(NUMERATOR/(VOLTS(I)- VOLTS(I-1»+1, 1); END INTERPOLATE; 1******************************************************************1 /* TEMPSDATASFROMSPORTS */ TEMPSDATASFROMS~ORTS: PROCEDURE(HIGH,LOW) WORD; DECLARE (HIGH, LOW) WORD; DECLARE INSPORTSHIGH WORD; DECLARE INSPORTSLOW BYTE; DECLARE (THERMOCOUPLESOUTPUT, TEMPERATURE) WORD; INSPORTSHIGH = INPUT(HIGH); INSPORTSLOW = INPUT(LOW); THERMOCOUPLE$OUTPUT = SHL(INSPORTSHIGH, 8) OR INSPORTSLOW; TEMPERATURE = INTERPOLATE(THERMOCOUPLESOUTPUT); RETURN TEMPERATURE; END TEMPSDATASFROMSPORTS; Figure 5-2. The PLM-86 Typed Procedures TEMP$DATA$FROM$PORTS and INTERPOLATE (Cont'd.) 67 Chapter 3 Let's look closely at the following statement, TEMP$DATA$FROM$PORTS shown in figure 5-2: THERMOCOUPLESOUTPUT which = SHLCINSPORTSHIGH, appears in the procedure 8) OR INSPORTSLOWi The variable IN$PORT$HIGH was declared as a WORD with 16 bits, and the variable IN$PORT$LOW was declared as a BYTE with 8 bits. The thermocouple voltage data from an analog-to-dlgital converter can have up to 13 bits, but our procedure was originally written to access 8-bit ports. To assemble the 13 bits, we use the SHL (shift to the left) built-in procedure to shift the rightmost 8 bits of IN$PORT$HIGH to the left, and we OR this shifted value with IN$PORT$LOW. The INTERPOLATE procedure uses a more complicated expression that includes both the SHL (shift to the left) and SHR (shift to the right) built-in procedures. The INTERPOLATE procedure also uses two tables, or arrays. They are declared in the following statements: DECLARE VOLTSC*) WORD DATACO,51,102,154,206,258,365,472)i DECLARE TSCELC*) WORD DATACO,10,20,30,40,50,70,90)i In both declarations, the arrays VOLTS and T$CEL are assigned actual values through the use of DATA initializations. The DATA initialization allocates storage for the array and assigns the values specified in parentheses after the word OAT A in a single step. , The values chosen for the VOLTS array are from the National Bureau of Standards; they represent the output (in millivolts) of type J thermocouples that corresponds to the Celsius temperature range assigned to the T$CEL array. For example, a thermocouple output of 102 millivolts should correspond roughly to 20 degrees Celsius. The INTERPOLATE procedure uses these tables to arrive at an approximate Celsius temperature value for a known thermocouple output Value. Our calculations would be more accurate if the ranges between values within each table were smaller. Compiling a PLlM-86 program is very similar to compiling a Pascal-86 program. We ~xecute the PLlM-86 compiler in the 8086 execution environment by using the Series III R.UN command. The PLlM-86 compiler is supplied in the file PLM86.86 on the PLlM-86 disk. We inserted a copy of this disk into drive 1 (we also put our source program on the same disk). In the following example, we execute the PLM86.86 using the RUN command. We do not have to supply the ".86" extension, since RUN already assumes that the file you specify has that extension. The following example shows the RUN command line for compiling the module PLMDATA, which is in a source file called PLMDAT.SRC (PLMDAT.SRC and the PL/M-86 compiler are both in directory :F1 :): -RUN :F1:PLM86 :F1:PLMDAT.SRC CODE LARGE This compiler invocation produces two output files: :F1 :PLMDAT.OBJ to hold the compiled object module, and :F1 :PLMDAT.LST to hold the listing. The listing is shown in figure 5-3 (in the next section). Two compiler controls, CODE and LARGE, were also specified. The CODE control tells the compiler to list the approximate assembly language instructions that would be necessary to implement the PLlM-86 statements-this is useful for many reasons, some of which are described in the next section. The LARGE control is needed here because Pascal-86 modules are compiled with a default size control that is equivalent to the PLlM-86 LARGE model. All modules of a program must conform to the same size control, so our PLlM-86 module must be compiled as a LARGE module to conform to the default size of Pascal-86 modules. 68 Other Languages You need to know more about the PLI M-86 language and compiler than the brief introduction provided in this guide. Intel provides a manual for the PLlM-86 language and compiler (PLlM-86 User's Guide for 8086-8ased Development Systems). Intel also supplies two manuals for PLlM-80 program development (PLlM-80 Programming Manual and 1515-/1 PLlM-80 Compiler Operator's Manual) in the 8085 execution environment of the Series III. For tutorial information on the PLIM language, see A Guide to PLiM Programming For Microcomputer Applications by Daniel McCracken (listed in the Bibliography). PROGRAMMING IN 8086/8087/8088 ASSEMBLY LANGUAGE So far we have described high-level languages that are translated by compilers into machine code; namely, Pascal-86 and PLlM-86. Another high-level language not described in this book is FORTRAN, which is also translated by a compiler into machine code. Other high-level ianguages like BASIC-80 are translated by interpreters into machine code. An assembly language program is translated into machine code by an assembler. Intel provides the 8086/8087/8088 Macro Assembler, which is described in this section, to translate 8086/808718088 Assembly Language programs. It is called a macro assembler because it will also translate macro definitions written in the Macro Processor Language, which is described with the 8086/8087/8088 Assembly Language. The common denominator of all these languages is the machine code, which is the binary language of ones and zeros that only the processor can "speak" well. The following is an example of machine code, with comments to explain what action each code performs: Memory Address (Hexadecimal) Memory Contents (Binary) Comments (English) 00000 00001 00002 00003 00004 00005 00006 00007 11100101 00000101 01000000 11100111 00000010 11101011 11111001 Read word into reg. AX ... ... from input port 5. Increment contents of AX. Write word from reg. AX ... ... to output port 2. Repeat by jumping ... ... back seven bytes. This machine code (sometimes called object code) is the code that the processor executes. All languages are eventually translated into this type of code. A program written in assembly language is a symbolic representation of machine code. The relation between assembly language instructions and the resulting machine code is usually very obvious; the relation between statements in a high-level language and the resulting machine code is often not obvious (with some exceptions in the PLlM-86 language). . Assembly language gives you complete control over the resulting machine code and thereby allows you to generate very efficient machine code. There are times when this control is desirable, and other times when you want to be free of such details. Most high-level language compilers are efficient enough for microcomputer applications; in fact, some compilers are more efficient than most humans. 69 ChapterS Assembly language is the cl.osest language t.o machine c.ode, but it d.oes all.ow y.ou t.o use symb.olic names. Here is a rewrite .of the machine c.ode instructi.ons sh.own bef.ore, using 8086/8087/8088 Assembly Language (c.omments f.oll.ow the semic.ol.ons): CYCLE: IN INC OUT JMP AX,5 AX 2,AX CYCLE iRead word from port 5 into reg. AX. iIncrement the contents of reg. AX. iWrite word from reg. AX to port 2. iJump to beginning and repeat. This pr.ogram fragment is simpler t.o read because it uses symb.olic names like CYCLE instead .of binary and hexadecimal numbers. The 8086/8087/8088 Assembly Language als.o pr.ovides s.ophisticated c.ode and data structuring mechanisms usually f.ound .only in high-level languages. The assembler enf.orces s.ome c.onsistency in data types t.o prevent inadvertent err.ors, yet it als.o all.ows s.ome deliberate ways t.o .override data types. The 8086/8087/8088 Macr.o Assembler als.o pr.ocesses macr.o definiti.ons. A macro is a sh.orthand functi.on name f.or a string .of instructi.ons. First y.ou define a macr.o, using the Macr.o Pr.ocessing Language, t.o be a sequence .of assembly language instructi.ons. Once defined, y.ou can specify the macr.o name in an assembly language pr.ogram, and the macr.o assembler aut.omati.cally replaces the macr.o name with the actual sequence .of instructi.ons fr.om the definiti.on. Using this facility y.ou can create many macr.os and use them in many pr.ograms. There are many times when an assembly language versi.on .of a r.outine runs faster and takes up less space than a high-level language versi.on. Intel's c.ompilers can pr.oduce a listing .of the assembly language instructi.ons that are appr.oximately the .ones y.ou w.ould use t.o implement the c.ompiled high-level language r.outine in assembly language. F.or example, we used the CODE c.ontr.ol in the previ.ous secti.on when we c.ompiled the PLlM-86 pr.ogram PLMDAT.SRC. The CODE c.ontr.ol pr.oduced the listing sh.own in figure 5-3. PROGRAMMING FOR THE SERIES III ENVIRONMENT Assembly language and PLiM give y.ou m.ore direct c.ontr.ol .over the pr.ocess.or's .operati.on; h.owever, the Series III system gives y.ou a set .of .operating system pr.ocedures called primitives (.or service routines) that y.our pr.ograms can use t.o perf.orm standard .operati.ons. By using these primitives, y.ou save devel.opment time in tw.o ways: first, y.ou save time by n.ot implementing the standard .operati.ons y.ourself; and sec.ond, y.ou save time in the future by writing pr.ograms that will always be c.ompatible with future Intel .operating systems. In Pascal-86, y.ou are supplied with built-in pr.ocedures that aut.omatically call these primitives. Y.ou link the run-time libraries that c.ontain the primitives t.o y.our Pascal-86 m.odules, and y.ou're all set t.o run the pr.ogram .on a Series III system. The pr.ogram will als.o run .on future Intel .operating systems, since the .only changes it w.ould need w.ould be c.ontained in the run-time libraries; that is, y.ou w.ould have a different set .of run-time libraries f.or each system, but y.our basic pr.ogram m.odules w.ould remain unchanged. T.o have this m.odularity in PLiM .or assembly language, y.ou simply use the set .of primitives described in the /ntel/ec Series 11/ Microcomputer Deve/opment System Programmer's Reference Manua/, and then link in the appr.opriate system libraries t.o y.our PLI M .or assembly language m.odules (as described in the iAPX 86,88 Fami/y Utilities User's Guide). F.or future Intel .operating systems, y.ou .only need t.o use a different set .of system libraries. Y.our basic pr.ogram m.odules w.ould remain unchanged. The next chapter describes the linking and locating .operati.ons f.or .our Pascal-86 m.odules. 70 Other Languages PAGe PLMJATA ISI$-II PL/M-ab H121 CJMPILATICN 0::; M":!::JUlE I'lMDATA OBJECT MOOULE PLACED COMDILER INVOKi:i) 3Y: :N PLM:X.:JSJ PLM36 PLM:X.S~C C::lDO: ,- INPUTS THE RMC S T AT$ S ETTINGSFRQM$PORT S: For-mEl! parameta-rs H:GIi and LJW r~eeoive POl"'t numbers as actual par!lmeters. Input ports H:GI-t C'lnd LOw: Three 3CD digits for the thermostat setting: Port HIGH, bits 3-0; hundred ~s digit POl"'t LOw, bits 7-4: ten's digit POl"'t L'JW, bits 3-0: unit"s digit T EHI' $ OAT A$ FRO H$ P 0 RT S: Formal parameters HIGH .!Ind lOW receiv. POl"t "numbers liS actual parameters. Input port I'C::GH: Sinary ADe output of ther"mocoup!e, high""order 8 bits Input port LOW: BinC'lry ADe output of thermocouple, low-ol"d.,. S bits OUTPUTS THERMQSTATSSETTINGSFROMSPDRTS: TEMPSOATASFROMSPORTS: RetUr"n wO~O with s.t'ting in Celsius ~e'tUr"n WORD wi'th tempera·tur"1iJ in Celsius -, THE RMO S T.A TS S E TTl NG$ F ~OM S P 0 RT S : ; STATEMENT # 2 THE~MOSTATSETTINGFROMPORTS PROC NEAR 0000 55 PUSH 8P 0001 8BEC MOV BP,SP PROCEDURE (HIGH, LOW) WORD; DECLARE (HIGH, LOW) WORD; DECLARE CINSPDRTSHIGH, INSPDRTSLOW) lUTE; ;)ECLARE THERMOSSETTING WORD; DECLARE CHUNDREOS, TENS, UNITS) BYTE; INSPORTSHIGH 0003 0006 0007 0008 OOOE OOOF 0013 0017 OOlA 10 DOH 0022 0024 0026 11 ~OH 002E 0031 INPUT (HIGH); ; STATEMENT MOV ox, CBP). HIGH IN OX MOV I~PORTHIGH, AL INPUT(LOW) ; ; STATEMENT ox, CBP) .LOW 885604 MOV EC IN OX MOV INPORTLOW,AL 88060000 HUNDREDS IN$PORTSHIGH AND 000011118; STATEMENT AL,lNPQRTHIGH 8A060COO MOV AL,OFH 80EOOF AND 88060EOO MOV HUNOREOS,AL TENS SHR(INSPORT$LOw, 4) ; ; STATEMENT AL,INPQRTLOW MOV 8A060000 CL,4H 8104 MOV SHR AL,Cl 02E8 TENS,AL 88060FOO MOV UNITS INSPDRTSLQW AND 000011118; ; STATEMENT AL,INPORTLDW 8A060000 MOV AND AL,OFH 80EOOF MOV UNITS, AL 88061000 # 7 885606 EC 88060COO INSPORTSLOW = = # 8 # 9 # 10 # 11 Figure 5-3. Listing of PLMDATA with the CODE Control 71 II a TH~RMaSSETTING OOH OQU QO~' OQ~O 0041 0043 OOU 0046 OPU OOH QQ4E 004F OQS1 U 0055 .. UNITS + 1Q*Tf!NS + 100*HUNOREOSi ; STATEMENT. 12 MOV BAObPFOO HOV 8104 HUL FH1 MOV uoe100P MOV B500 AOO 03e1 PUSH 50 MOV U060EOO MOv .164 F6e1 MUI. 59 PO" AOO D3C1 MOV 89060000 RETURN THERMOS.S ETT lNG, ~OP 50 AI.,T,NS CI.,OAH CI. .u,U~ITS CH,OH +,x,cx ; 1 AX ,l1.,.,HUNOREOS Cl,.,f>4H tl. ex ; 1 AX.lC;X 1H E RH 0 S e: TTl:.NG, A X ; STATEMENT ~p • 13 RET OOH C20400 4" ENQ THE RHOS TAT$SETT ING$FR ~MSPJRTS; 14 . ; STATEMENT 11 14 TH,RMOST ATSnTINGF'OMPO~T s ENOP I- 4AOth,I" typed pl"lI!H;.e~ur. to return temp.reture datill which uses 'th, INTERP:jL4TS typed Ifjrqeedure, *, I- n INTeRftOLAT~ is a 1YQUI proeedur9 thllt receives thermClco\.lpl(t volt.gl "nd ,..1:\.Il"n5 "ttmc,rllt\.ll"'e 11'1 Celsius using an int.",!:?ol,t;iQn l"outif'llJ' */ IfllT!RPOI,.ATE; ; 55 STATEMENT "litOC NEAR INT;~I'OL.ATe 0059 OQ5, PUSM • 15 S" MGv 3 P,SP WORO; VOI.T$(*) .010 DATA to, S1, 1 02,154, 206, 258, 365,472); nEC U~CEOU.E(VOLT$IN) H '1 18 l ~E~~"E ~ ~ O~C:~.Re T$Ce\.c",) WORO OATA(O,10;20,30,4C,50,70,90); (l, VOLUIN, N~ME~'TOR) WORO; O'~~UE • = 0; 19 QQ$t 20 ; C70~OlOOOOQO f< VOL TUN<1 M~¥ 1IOH CM' Je JMP $+5~ T~eN STATEMENT .19 RerURN 1$O!I.O); STAT;MENT 817EQ~0100 006l 0061 DOb9 7203 OO~t uaooa <9DOOO OO~. 01 E3 00 7 1 8B~71 001$ 0076 ~2 OOQ ~O C20?OQ ~1 ; MOV SHL MOV &X,OH &X,1 pop BP RP ;1 : CSP).VOLTIN,1H DO .HHE VOLT UN ) STATEMENT 2H VO~TSII); I STAHMENT • 22 a2. UHOlOO 01n MQV PX,I SH~ U460~ 0086 0088 77Q3 ;90700 MOV CM' JA JMP 8X,1 I\X, VOL TIN AX,VOI.TSCeXl S+SH a3 OOIS FF060200 23 3B~70000 I ~ • 21 AX,TCEL[BX) 00 79 007Q 007" coU * 20 I + 1; [e'J. STATeMENT. 23 ~4 !NC END; 008F e9E7F' J~p U: az 24 STATEMENT /'It $hj.ft for l"ounQing, and ,..tl,lrn Cel'ius .teml)erature *1 25 NUM!~ATOR 0092 0096 0097 0099 0090 OOAO 00A2 00A6 a.a020a 48 OH3 8687000·0 884e04 28t8 8B360?00 01<6 • S~~, (VOL TSIN-VOI. T S (I-1» - (T$CEL (Xl-TSC! L( 1-1», 1); ; STATEMENT 2S 1$)(,1 MOV oec SHL HOV MOV SUB MOV SHL * ex 8X,1 AX,VOI. TstUl 0, [BPl. VOL TIN eX,AX $1,1 SI,1 Figure 5-3. Listing of PLMDATA with the CODE Control (Cont'd.) 72 Other Languages 00A8 OOAt 0080 0082 0083 0085 00B6 00B8 88971000 889tl000 280A 50 89C8 52 F7E3 01 EO 008A 89060400 NJMERATO~,AX MOV RETuRN TSCElCI-1) + $HR (NUMEQATOR/ (VOL T S (I) -VOL TS< 1-1» +1, 1); ; STATEMENT II 26 26 MOV MOV SU8 PUSH MOV AX,CX PUSH OX 8X MUL SHL DOBE 889tOOOO 00e2 5A 59 000 00e4 2809 00e6 52 00e7 3102 00e9 F7F3 OOCB 40 ooee 01E8 59 OOCE ooeF 03e 1 0001 50 0002 C20200 ENO INTERPDLAT!:i 27 DX,TCEl(SX) 8X,TCEl.(SI) BX,DX AX Ax,l MOV POP POP SUB BX,VOLTS(SIJ Ox 2 ex 1 PUSH XJR OX Ox, DX BX AX DIV INC SHR POP AOO POP RET 8X,CX Ax,1 CX AX, ex BP 2H STATEMENT INTERPOLATE 28 # 27 ENOl' T EMP$OATA$FROMSPORT S: 0005 5S 0006 8BEe TEMPO AT AFRJHPQ RT S PUSH SF' MOV BP,SP PROCEDURE(HIGH,LOW) 29 30 oeCLARE OECLA~E 31 DECLARE IN$PORT$LOW BYTE; OECLARE ,* (THERM(JCOUPLE$OUTPUT, INSPORTSHIGH ADDRESS 34 00E2 00E5 00E6 885606 EC 8400 89060600 INSPORTSLOW STATEMENT • 33 ; STATEMENT II OX,CSP) .lOW 34 ox, (SP). HIGH MOV IN Ox MOV AH,DH MDV INPQRTHIGH,AX INPUT (LOW); MOV IN MOV 8B060600 Bl08 D3EO 8AO.1100 8500 OBe1 89060800 MOV MOV 0106 88060AOO MOV AX,TEMPERATURE 010A SO PCP BP 4H OOEA OOEE OOFO 00F2 00F6 00F8 OOFA 36 OOFE OOFF 0102 37 OX INPORTlOW, AL SHL CINSPORT$HIGH, 8) OR INSPQRTSLOW; ; STATEMENT II 35 AX,INPQRTHIGH CL,8H AX,Cl CL,INPORTLOW CH,OH T HE ~MOC au PL!: SO UT P UT SHL MOV MOV OR u:,cx MOV THERMOCOUPLEQUTPUT,Ax TEMPERATURE INTE RPOLATE (THE RMOC OUPL E SOUT PUT) ; ; STATEMENT II 36 SO PUSH AX ; 1 E8S7FF CALL INTERPOLATE 89060AOO MOV TeMPEiaTURE,AX RETURN TEMPERATURE; ; STATEMENT II 37 0108 e20400 RET ENO TEMPSOATA$FROMSPORTSi 38 TEMPOAT AF ROMPO:n S 39 *' WORO; INPUT (HIGH); 885604 EC 88061100 35 in Mc:C"i!lc:ken~s book TEMPERATURE) ; 0008 OOOB oooe OODE 28 WORO; (HIGH,LOW) WORO; IN$PORTSHIGH ",:lAD; 32 33 ; STAT!:MENT II PROC NEAR i STATEMENT It END? 38 END PLMOATA; ; MOOULE STATEMENT II 39 INFORMATION: CODE ARE' SIZE CONSTANT AREA SIze VARIABLE AREA SIZE MAXIMUM STACK SIZE 010EI-! 0020H 0012H 0010H 2700 320 180 160 95 LINES READ a ENO OF PROGRAM ERROR(S) ~l.IM-86 COMPILATION Figure 5·3. Listing of PLMDATA with the CODE Control (Cont'd.) 73 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I CHAPTER 6 USING UTILITIES TO PREPARE EXECUTABLE PROGRAMS "Three things are to be looked to in a building: that it stand on the right spot; that it be securely founded; that it be successfully executed." -Johann Wolfgang Von Goethe You must do three things to prepare and execute programs successfully: link program modules to resolve external references, locate the linked modules by binding them to memory addresses, and run the program in the appropriate operating environment. These things are easy to do for most high-level language programs. Easy-to-use utility programs perform these operations for you. They are also flexible enough to allow you to perform more complicated linking and locating operations for programs that refer to physical memory addresses. The compilers for high-level languages usually produce programs that do not refer to physical memory addresses; these programs can be linked and located in one easy step. The diagram in figure 6-1 shows the process of linking and locating (binding to addresses) modules to prepare a program that can be RUN on the Series III system (or debugged via DEBUG-86, described in Chapter 7). MODULES CONTAINED IN RUN·TIME AND USER'S LIBRARIES OBJECT MODULES FROM COMPILERS OR ASSEMBLERS t t 9 ~ DEBUG-86 t l RUN Figure 6-1. Using Utilities to Prepare Executable Programs 121632-6 75 CHAPTER 6 PREPARING A LIBRARY OF PROGRAM MODULES A library is any collection of public modules-modules that contain public procedures that can be used by programs. Some libraries are supplied by Intel; for example, the run-time system used with Pascal-86 programs is supplied as several library files. Pascal-86 has a number of built-in procedures that you can use in any Pascal-86 program-these procedures can be found in the supplied run-time libraries. To use any of the built-in procedures, you must link the run-time libraries to your program modules using the LlNK86 utility. You can also build your own library files using the LlB86 utility. With the LlB86 utility you can create a library, add modules from another library, add new modules, delete modules in a library, and list the names of modules in a library. The following example shows a session with LlB86. We create a new library called TONY.LlB, and then we ADD to it some of the modules from a supplied run-time library called P86RN2.LlB. We then LIST the modules in TONY .LlB, and EXIT from the LlB86 utility: -RUN LI B86 SERIES-III 8086 LIBRARIAN V1.0 *CREATE :F1:TONY.LIB *ADD :F1:P86RN2.LIB(MOD1, MOD4, *LIST :F1 :TONY.LIB TONY.LIB MOD1 MOD4 MOD7 *EXIT MOD?) TO :F1:TONY.LIB The linker (LlNK86) treats library files in a special way. As shown in the next section, you specify your program modules first in the LlNK86 command line, then you specify the appropriate libraries. You must be sure to link these modules in the proper sequence. Why? Remember that your program's main module refers to procedures that exist only in other modules-external procedures. The linker must be able to find the external procedures. LlNK86 remembers the references to external procedures in the first module, and looks in the subsequent modules for those external procedures. If it cannot find the external procedures in subsequent modules (maybe because you erroneously specified the library before specifying the program modules in the LlNK86 command line), LlNK86 will generate an error message. The built-in procedures supplied with Pascal-86 (READLN, WRITELN, etc.) are external procedures contained in the modules included with the run-time support libraries. LlNK86 will first see the reference to these procedures in your program modules, and then it will look in the librpries for the modules that will satisfy those references. LlNK86 will only link in those modules that are needed to satisfy external references; it will not link in the entire library of modules unless your program modules refer to all of the library modules. Since you do not need to use LlB86 to handle run-time libraries supplied with Pascal-86, you only need LlB86 to handle your own libraries. Why would you set up your own libraries? To manage sets of repetitive modules. In many software development labs, modules useful to many different programs would either be lost or repeated. Libraries are sets of modules that are easily maintained through use of the LlB86 librarian. The LlNK86 utility is capable of searching such a library and only checking out the modules needed for the linked program. 76 USING UTILITIES LINKING MODULES TO FORM A LOCATABLE PROGRAM Most modular programs have a main module that calls procedures in other subordinate modules. Although a subordinate module can call a procedure in the main module, most calls are from the main module to a subordinate module, and the modular structure resembles an upside-down tree, as shown in figure 6-2. We included the run-time system modules in this tree, since the program modules rely on the built-in procedures and operating environment calls found in the run-time system. When you link these modules together using the LlNK86 utility, you allow LIN K86 to see the main module first, because the main module is the most abstract; that is, it has the highest level of abstraction, and it calls procedures in lower levels to perform each activity. You should then allow LlNK86 to see the next subordinate level of modules, and so on. The last group of modules for LlNKB6 should be any run-time system libraries that are needed to perform the built-in procedures (READlN, WRITElN, etc.). The run-time system libraries contain modules that are at the lowest level of abstraction-these are the modules that call procedures in the operating environment of your system (the operating environment is usually invisible to you, but not to your Pascal program). For an example, we will link together the modules needed to test our main program in the Series III environment. We start with our main module MAIN.OBJ, which holds the MainControl module. We link to it the test versions of the modules GetData found in DUMDAT.OBJ, and Operation found in DUMOP.OBJ. Finally, we link in the modules we need from the run-time system libraries P86RNO.LlB, PB6RN1.LlB, P86RN2.LlB, P86RN3.LlB, 87NUll.LlB, and lARGE.LlB (we explain these libraries after the example): -RUN LINK86 :F1:MAIN.OBJ,:F1:DUMDAT.OBJ,:F1:DUMOP.OBJ,& »:F1:P86RNO.LIB, :F1:P86RN1.LIB,:F1 :P86RN2.LIB,& »:F1 :P86RN 3.LIB,:F1 :87NULL.LIB, :F1 :LARGE.LIB& »TO :F1:PROGRM.86 BIND let's explain this example. We used the RUN command to run the LlNKB6.B6 utility in the "B086 side" of the Series III. We specified the three object modules of our program, and then we specified all of the run-time libraries needed to run our program in the Series III environment. MAIN CONTROL RUN·TlME SYSTEM MODULES Figure 6-2. Main Module with Subordinate Modules 121632-7 77 CHAPTER 6 We directed the output to a file called PROGRM.86. Finally, we specified the BIND control in order to make PROGRM.86 an LTL (load-time locatable) program. The BIND control is the easiest way to make a program locatable in the Series III environment (more on BIND in the next section). PROGRM.86 can now be loaded and executed (via the RUN command) in the Series III system. The run-time system libraries P86RNO.LlB and P86RN1.LlB are required for any Pascal-86 program that needs run-time support. The libraries P86RN2.LlB and P86RN3.LlB are required for any Pascal-86 program that uses the file inputloutput procedures and other operations performed by the operating system. The 87NULL.LlB is needed for programs that do not use either the 8087 processor or emulator to perform real arithmetic. Since our program has no REAL data types, it does not perform real arithmetic; therefore, it needs the 87NULL.LlB library (if it did perform real arithmetic, it would need other libraries). Finally, to run any Pascal-86 program on the Series III system, you need to link the LARGE. LIB library to the program. The LARGE.LlB library contains the primitives (service routines) used to perform operations in the Series III environment. The run-time system is separated into several libraries so that you can customize your runtime environment if you so wish. The libraries described above are the default libraries used to run programs on the Series III system, if your programs do not use REAL data types. If your programs use REAL data types, you would not use 87NULL.LlB; instead, you would use the 8087 processor with the library 8087.LlB, or the 8087 software emulator with the libraries E8087 and E8087.LlB. Consult the Pascal-86 User's Guide for specific information about the run-time system libraries. LOCATING AND RUNNING PROGRAMS A program must reside in actual memory before it can run. The locating process assigns actual (physical) memory addresses to a program. There are two ways to accomplish the locating process: 1. Using LlNK86 with the BIND control to produce an LTL module (discussed in the next paragraph), which can be located, loaded, and executed automatically by the RUN command 2. Using LlNK86 (without the BIND control) to produce a linked module, then LOC86 to locate the module in an area of memory you speCify, and finally RUN to load and execute the program The simplest locating operation involves using the LlNK86 utility with the BIND control, as shown in the previous example. This Simpler process, called binding, binds modules to logical segments, which can be located in actual memory by the RUN command in one fast step. Modules produced by the LlNK86 utility with the BIND control are called load-time locatable modules (L TL modules). An LTL module is a module that can be located almost anywhere in memory, and so the RUN loader can easily locate it in the Series III environment for you. The DEBUG-86 debugger can also locate an LTL module for you, as we will show in the next chapter. For example, our LlNK86 example in the previous section bound the modules properly to form the program PROGRM.86. Now, in one step, you can locate this bound program in actual memory, load it into memory, and execute it in the "8086 side" (8086 execution mode) of the Series III system by using the RUN command: -RUN 78 : F1 : PROGRM USING UTILITIES Note that we did not type PROGRM.86, only PROGRM. The RUN loader looks for the" .86" extension automatically, unless you specify another extension or a period at the end of the name (the period signifies no extension). High-level language programmers usually do not burden themselves with more details about locating programs. However, assembly language programs and some PUM programs frequently refer to physical addresses rather than symbolic (logical) addresses. These program modules are called absolute modules because they use absolute physical addresses. Absolute modules cannot be located automatically by the RUN command-they must be relocated first by the LOC86 utility. There is a case when even the simplest program must be located by LOC86: if you intend to debug your program using an ICE-86 or ICE-88 emulator, you must locate the program with LOC86 to make it an absolute module. The ICE (In-Circuit Emulation) loaders can only load absolute modules. For an example, we will link our new PUM-86 module PLMDAT.OBJ to our program, along with another version of our GetData module in DATA.OBJ, and produce the linked module MAIN.LNK: -RUN LINK86 :F1:MAIN.OBJ,:F1:DATA.OBJ,:F1 :PLMDAT.OBJ,& »:F1 :DUMOP.OBJ,:F1:P86RNO.LIB, :F1 :P86RN1 .LIB, :F1 :P86RN2.LIB,&< cr> »:F1 :P86RN3.LIB, :F1 :87NULL.LIB, :F1 :LARGE.LIB Since we did not specify a new filename with a "TO" clause, the LlNK86 utility directed the linked output to the file :F1:MAIN.LNK (LlNK86 takes the name of the first object module MAIN.OBJ, and changes its extension to LNK to make MAIN.LNK). Now we are ready to locate :F1:MAIN.LNK with the LOC86 utility: -RUN LOC86 :F1 :MAIN.LNK TO :F1 :PROGRM.86 RESERVE(200H TO 77FFHl. We used the RESERVE control with LOC86 to reserve an area of memory for the Series III operating system. LOC86 will not locate anyprogram segments in the area between addresses 200H and 77FFH ("H" is for hexadecimal). You must leave room for the Series III operating system to execute programs in the Series III environment. The LlNK86, LOC86, and LlB86 utilities are described in detail in the iAPX 86,88 Family Utilities User's Guide for 8086-8ased Development Systems. This manual describes all of the utilities for iAPX 86 or iAPX 88 applications development. These utilities are designed to be used in 8086-based development systems like the Series III. We can now RUN our program on the Series III system: -RUN PROGRM Climate system is now on. Type the thermostat setting in degrees Celsius:24 Type the inside temperature reading in Celsius:21 Type the temperature of the collector water in Celsius:60 Type the temperature of the tank water in Celsius:60 79 CHAPTER 6 Type the tempera~ure of the heated tank water in Celsius:70 Type the hour of day, as in 04 or 24:13 Type the minute of the hour, as in 01 or 59:25 Type the amount of sunlight, any integer wi II do for now:1 CURRENT DATA IS AS FOLLOWS: Thermostat Setting is 24C Inside temperature is 21C Temperature of collector water is 60C Temperature of tank water is 60C T~mperature of the heated tank water is 70C Time of day is 13:25 Amount of sunlight is =============================================== The Climate System is now operating. The time is 13:25 The inside temperature ;s 21C The thermostat setting is 24C Method chosen to heat the bui lding: Solar Collector to Exchanger =============================================== ................................................................................................ . No panic occurred, ABNORMAL shutdown • ................................................................................................ ................................................................................................ .. Last chosen heating method was: Solar Coll~ctor to Exchanger Thermostat Setting is 24C Inside temperature is 21C Temperature of collector water is 60C Temperature of tank water is 60C Temperature of the heated tank water is 70C Time of day is 13:25 Amount of sunlight is 1 ............................................................................................................ .......................................................................................................... . ... oO .......................................................................................... .. Goodnight, Irene ... What happened!? Our program stopped with an abnormal shutdown! It had no trouble picking the right heating method; however, something caused the variable Operating to become FALSE, without setting Panic to TRUE. We will have to debug the program in the next chapter ... 80 CHAPTER 7 DEBUGGING AND EXECUTING PROGRAMS "Appearances are often deceiving." -Aesop We have written program modules and they compiled correctly. We used the LlNK86 utility with BIND to link the modules into a program and prepare it for execution. By all appearances, it looks like it will work as planned. However, when we loaded and executed (via the RUN command) the program, something mysterious happened-the "hidden glitch" struck! We now have to debug our program~find all of the "hidden glitches" and fix them. Debugging is so essential to programming that in most software development efforts, more time is alotted to debugging than to any other activity. Debuggers are programs that monitor a program's execution and allow you to stop execution and check details. Usually a debugger is part of an execution vehicle-a piece of hardware your program executes on, or a piece of software your program executes in. The debugger monitors the activity in the execution environment. For example, the Series III provides two execution environments or execution vehiCles: the 8085 execution mode and the 8086 execution mode .. To debug programs that run in the 8085 execution mode, you type the DEBUG command on the "8085 side" (8085 execution mode) to start the Monitor. To debug programs that run in the 8086 execution mode, you RUN the DEBUG command on the "8086 side" (8086 execution mode) to start the DEBUG-86 debugger. Both debuggers reside in ROM. With a debugger you can load and execute a program (rather than using RUN), and stop the execution to check the values of variables, the contents of registers, and other details. You can also change such values, and perform other activities that monitor a program's execution. You can even execute your program one step at a time. Since the Monitor (for80B5· execution mode) is described in several Intel documents (McCracken's Guide to Intel/ec Microcomputer Development Systems and the Intel/ec Series III Microcomputer Development System Console Operating Instructions), we will devote this chapter to describing DEBUG-B6 and the ICE-BB emulator (a version of the1CE-B6 emulator) for debugging programs in the BOB6 execution mode for iAPX 86,88 applications. B1 CHAPTER 7 USING DEBUG-8S FOR SYMBOLIC DEBUGGING Debuggers are useful because they load and execute a program for you, and they allow you to stop execution at any point you specify. If you are an assembly language programmer, your program directly uses registers and memory locations; you would want to check the contents of these registers and memory locations. If you are a high-level language programmer (PLlM, Pascal, FORTRAN, etc.), you do not directly refer to registers and memory locations; you would rather check the values of your variables, or symbols. For example, we know we have a problem with our program: the variable Operating should always have the boolean value of TRUE as long as Panic is FALSE. If Panic is set to TRUE, Operating should then become FALSE; however, Operating is somehow set to FALSE while Panic remains FALSE. During the execution of our program, we should be able to stop execution and check the value of Operating. One way to do this is to find the address of Operating and check its contents. A better way would be to simply ask for the value of Operating in a command such as: *BOOlEAN BYTE .. MAINCONTROl.OPERATING FALSE In DEBUG-86, you can execute our program and stop its execution anywhere. You can then use the above command to find the boolean (true or false) value of Operating without knowing where Operating is located. In our program there is only one symbol named Operating. If there were more than one, we would specify the symbol by specifying both the module name and the symbol name (e.g., .. MAINCONTROL.OPERATING), as we did in the above example. We would have obtained the same result by specifying only ".OPERATING". You use two periods as a prefix to module names, and one period as a prefix to symbol names. To do symbolic debugging using the symbols in your program, you must compile your program using the DEBUG compiler control (see Chapter 4 for the Pascal-86 compiler, and Chapter 5 for the PLlM-86 compiler). The DEBUG compiler control produces a symbol table for your program, which can be loaded by DEBUG-86. If you do not use the DEBUG compiler control while compiling, you can still do symbolic debugging by defining all of your symbols from within DEBUG-86. To invoke DEBUG-86, use the following command: -RUN OEBUG OEBUG 8086, V1.0 * DEBUG-86 is now in control, as shown by the asterisk (*) prompt. You can now type DEBUG-86 commands. To load PROGRM.86 and its symbol table, type the following command: *lOAO :F1 :PROGRM.86 You can check the symbol table by typing the SYMBOLS command: *SYMBOlS 82 DEBUGGING AND EXECUTING PROGRAMS The symbol table contains each module name and symbol name, with their addresses. You can find the address of a single symbol by typing the name of the symbol. For example, we want to know the address of the call (in module MainControl) to the procedure OperateSystem (which is in the module Operation): * .• MAINCONTROL.OPERATESYSTEM .. MAINCONTROL.OPERATESYSTEM=0481:06CCH DEBUG-86 knows where to start executing the program by looking at the contents of the CS and IP (CS:IP) registers. The CS register holds the starting address of the program's code segment, and the IP register holds the address within the code segment where the program should start execution. CS and IP change as the program executes; therefore, to preserve the starting location of the program, we create a new symbol called .START to hold the starting address: *DEFINE .START=CS:IP We could also check the contents of CS:IP: *CS CS=0481H *IP IP=OFD6H You should familiarize yourself with addresses. The 8086 and 8088 processors use 20-bit physical addresses separated into two words: the segment base address and the offset value. The CS register holds the code segment base address, and the IP register holds the offset value. All addresses are in hexadecimal notation (the "H" stands for hexadecimal). All addresses are displayed with the segment base, followed by a colon, followed by the offset. The EVALUATE (abbreviated "EVA") command is useful for evaluating numeric and character values and addresses. For example, the number 4142H can be represented .in several ways: *EVA 4142 1000001010000Y 40S02Q 16706T 4142H 'AB' When you type a number by itself, DEBUG-86 assumes the number is in hexadecimal notation. The number 4142H is equivalent to the decimal number 16706 ("T" denotes decimal notation), the octal number 405020 ("0" denotes octal notation), the binary number 1000001010000Y ("Y" denotes binary notation), and the ASCII characters "AB" (41H is the ASCII code for "A" and 42H is the ASCII code for "B"). The EVA command will also find the closest symbol that has the address you specify. The keyword SYM tells the EVA command to evaluate the address symbolically: *EVA 481:6CC SYM .• MAINCONTROL.OPERATESYSTEM We will now execute our program and stop its execution before it executes the OperateSystem procedure. The GO command will start executing at the beginning of the program, which it knows by looking at the CS and IP registers (CS:IP). You could specify an actual address with GO to start from, or the line number of a program statement, or a statement label; however, we do not use statement labels in our program. We want our program to stop while it is executing the main (WHILE Operating) loop, not at the start of the OperateSystem procedl ·e in the 83 CHAPTER 7 Operation module (since procedure definitions do not actually execute). Our program will GO until it reaches the starting address, in the MainControl module, of the call to the OperateSystem procedure: *GO TILL •. MAINCONTROL.OPERATESYSTEM Climate System is now on. During execution, we type in the temperatures and other data. The program stops and DEBUG-86 displays the next instruction to be executed (in assembly language fo rm) . 0481: 06CCH ** BP PUSH At this point, we can check the boolean values of both Panic and Operating: **BOOL BYTE .PANIC FALSE *BOOL BYTE .OPERATING FALSE To make sure the program stopped at the right place, we evaluate the CS and IP registers symbolically: *EVA CS:IP SYM .. MAINCONTROL.OPERATESYSTEM Another useful DEBUG-86 command is the STEP command. From any pOint of program execution, you can execute the program step by step-one machine instruction at a time. The STEP command also displays the next machine instruction to be executed. This display is in "disassembled" form-the machine instruction is translated back into assembly language: *STEP 0481:06CDH MOV BP,SP * STEP executes one machine instruction and displays the next one disassembled. Another STEP would execute the displayed instruction. We will now change the value of Operating to be TRUE. A boolean variable is TRUE if its numeric value is odd; FALSE Wits numeric value is even. Why? Because a boolean is TRUE if its rightmost bit (in a binary representation) is 1, and FALSE if its rightmost bit is O. All even values written in binary form end with a 0 in the rightmost bit, and all odd values written in binary form end with a 1. To change the value of Operating, we must also specify BYTE, since it is only one byte long: *BYTE .OPERATING=1 *BOOL BYTE .OPERATING TRUE 84 DEBUGGING AND EXECUTING PROGRAMS We can now continue execution with a GO command: *GO ============================================== The Climate System is now operating. Execution continues correctly, and the program loops back to the GetOata procedure to obtain more data. As we continue execution, the program once again erroneously changes Operating to FALSE. We can use our .START symbol to start execution once again at the beginning of the program: *GO FROM .START TILL •• MAINCONTROL.OPERATESYSTEM After repeating these debugging operations, we are sure that our error occurred at the statement where Operating is set to FALSE while Panic is set to TRUE. Refer to the listing in Chapter 4. The Pascal-86 statement numbers are in the "STMT" column of the listing. The "LINE" column shows the source file line numbers (you can use the line numbers with CREDIT to display, edit, move, or copy particular lines). Between statements 37 and 40 (source lines 68 and 70), we have an ELSE clause that should only execute if the temperatures are not greater than the minimums necessary to heat the building. Panic should be set to TRUE and Operating should be set to FALSE, if this ELSE clause executes. However, the "ELSE Panic:=TRUE" is not executing, but the "Operating:=FALSE" is always executing! The error is one of omission: to have two statements execute as part of an ELSE clause, they must begin with BEGIN and end with END, as shown: ELSE BEGIN Panic:=TRUE; dp~t;ng:=FALSE; END; To make this change, a new MAIN.OBJ, and Chapter 6). Figure 7-1 shaded, and a sample run we must re-edit MAIN.SRC, re-compile MAIN.SRC to obtain re-link the modules using L1NK86 (with BIND, as shown in shows the revised listing, with the corrected ELSE clause of the program. SERIES-III Paseal-S6, X031 09/01/80 PAGE 1 MA INCQNTQ:OL Source I=il.: ;F1:MAIN.Src:C qbject File: :1:1:MAIN.OSJ Controls Specified: :lE5UG. STMT LINE NESTING 1 2 1 2 0 0 0 0 SOURCE TEXT: :F1:MAIN.SRC MODULE MiOIinContl"'oli (* =1 Interface specificatior: common to all modules *) SINCLUDE (: 1=1: INSPEC. SRC) PU5LIC MSlinContl"'oli (*section of intel"'face specification*) Figure 7·1. Climate Control Program Listing and Sample Run 85 CHAPTER 7 =, =, .,.,=, .,., =, =, =, =, "'2 =, 20 2' 23 " 26 27 '2 '3 '4 '5 16 28 29 30 '7 34 35 '8 17 19 20 39 40 21 42 22 23 24 44 45 46 35i (*degrees Celsius.) 13; Minimum 1=0 roE)C change,.. Mi n1 mumF 0 ,-Heat P urnp TYP!: (*definitions J)ublicly defined in this module.> Air-Tempe,.lItu"" =-20 •• 120; (*degrees in Celsius.) Wat.,..Tem!)eratur. =0 •• 120; H. a tin9M1 t !'Iod 5 = (C ollee t'orToE xc "'an 0'''' Co llee torT oHeat PUIIIP' TankToExel'tang.,.., Tank T oH eatP UI'III), He at ed T ankT oHea tP ump, NoM,thad); =, '8 '0 =, .,.,., .,.,., .,., .,=,=, .,., ., .,.,., .,., ., CONST ("'declarations declar.d publicly in tl'l15 modul •• ) 0 0 0 0 0 0 0 0 0 0 RECORO CI'tOsltnMethod H•• tlngHethods; Insider.mp, 11'1 &,.11105 tat Set t1 no ColI ec torWe t,,,T emp, rankwat.,.Temp, Hest.dTankT •• p Arnou n t 0 f Sun 1 i ;I'It =, Hour Minute END (*S)'stemData*>; Water-TIIIIP.ratu,...; Integer; 00 •• 24; 00 •• 59; =1 0 0 0 0 0 SystemOata ·1 0 '1 0 =, 0 ·1 -1 0 =1 0 " 0 =, " VAR (*v8 ... iables publicly defined in this module.*) Cu,.,.entOata 0I)e,.8tin;, Panic : SystemOata; : BOOLEAN; PUBLIC GetOata; C"'G,tOata Module cont.tni"g GetOeta & Sto,.eOata*) PROCEDURE GetO.ta(VAR Cu,.,..ntOata:Syste.Oata); PROe EOURE S to,.e Oat a (VAR Cu,.,.ent Oa til: Sy stemOata) ; PUBLIC Operat10n; (*Ol)eration Module containing OperateS.y.tem, StartUpSyste", and ShutOolilnSystem*) PROCeDURE StartUpSystem; PROC eOUR e O~"r a te S Yltem (VA R Cu,.,.. ntOat a: SysteMO ata) ; PROCeDURE ShutOolinSystem CVAR CurrentOllta: SysteIllOati!l); PROGRAM lola i nC on tro l ( INPUT, a UT PUn; 25 (* end of inte ... of'i"ce specification *) 26 26 27 27 28 28 29 13 14 15 16 17 18 19 31 21 33 23 35 25 37 27 38 40 41 42 43 45 46 29 30 31 32 33 34 35 0 1 1 2 2 3 3 PROC EOU U Oetel"mineMetl"lod (VAR CUl"rlntOata SY5temOatll); BEGIN WITH CUl"l"entOatEl 00 BEGIN IF InsideTempMin imumFor Exch anger THEN C1'10 se nMethod: =Co llec torT 0 Exch an gel" ELSE IF CoUectoI"Wa-teI"Temp>MinimumForHeatPump THEN Cnos en.'" e t h od: =Co llec t ol"T oHllit Pump elSE If: TankWatel"Temp>MinimumForExchangel" THEN Ch 0 sen Met hod: =Tlink T0 Ex c han gIl" elSe IF TankWatel"TemD>MiniMulIIFol"HeatPump THEN Chosen Me t 1'10 d: =T a nk ToHeat P u IIIP ELSE IF HeatedTankTemp>MiniliumFol"HeatPump THEN o END ELS:: (*no heating ,.eQuest*) ChosenMethod:=NoMethod ENO; (*With CurrentOilta*) eNO; (*Oetel"mineMethod) (* * ... ** * * ... * * * .... * * MA IN PR OG RAM ... **** *** ** ... ** ** **** ** ** * *** * *** * * * * *) 46 47 48 49 50 50 5' 52 ;] 54 56 57 39 40 41 42 43 44 4S 46 47 48 49 50 B,GIN Stal"tUpSystem; :Jpel"lItin;:=T~U:; Panic;=FALS:; WHIL:: Oper:otin; 00 (*wh11. system is ope,.ating, do;*) Se:;I"l GatOataCCu"l"entOah); (*Get tl"le temps, time, etc.*) Stol"eOSlta(CUl"r."tData); (*$to ... e this data as "ecol"d*) Oete,.mineMethod(C:.Jl"l"entData); (*t"'is detects 1I panic"') OperateS y stem (Cul""'entData); ENO; C*while operating"') Shu t 'jown S y stem (C u "I"e n t 0 at a) ; EN;). (*Main Control Algorithm*) Figure 7·1 . .Climate Control Program Listing and Sample Run (Cont'd.) 86 DEBUGGING AND EXECUTING PROGRAMS Summary Information: PRDCE:JURE OETERMINEMETHOO J=FSET :;011 H To tal CODE SIZ: OJ3F>i 143D 0147'"4 327'J DATA SIZ: 221) 0016H ST~CK 0006" SIZE 60 004Cf1 760 96 Lines ~"ad. :J Errors Olitactad. 33% Utiliz~tion of ,"lemory. SERIES-III Pascel-86, X031 09/01/80 PAGE Source File: : F1 :OUMOAT. SRC Object File: :F1 :OUMOAT.OBJ Controls Specified: DESUG. STMT LINE NESTING 1 1 0 0 SOURCE TExT: :c1 :DUMDAT.SRC (*This is a dummy GetData module, with dummy GetOata and StoreOata procedures, for use with MainControl module in testing phases. It only performs console input to get Celsius temperature!, the time of day, and the amount of sunlight (insolation) for the solar collector. Use PLM86$OATA module for real application.*) MODUL::: GetDatCli 10 (* 11 12 18 20 21 10 23 11 12 26 27 28 29 30 13 14 15 17 16 34 35 18 37 19 20 39 40 21 42 22 23 24 44 45 46 25 16 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 -1 =1 =1 Int~rfe'\ce spGcific.:ltion common to all modules *) $INCloUDE(:F1 :INSPEC.SRC) ::JU9l.IC MainControli (-section of interface specifiC2ltion*) CJNST (*declarations declared publicly in thi. module*) Mini mumF orE xc hange r Min im u mFor!oje;:o t Pum p 35; (*degrees Celsius*) 1 J; TYPE (*definitions publicly defined in this module*) AirTamperature =-20 •• 120iC*degrees in Celsius.) W2ItC?rTemperature =0 •• 120; Heat ingMethods = (C 011 ec torT oE xc hanger, CoIl eC torToHei! tPump, TClnkToExchl':'nge r , T2InkToHeatPu'1lp, Hea ted Tank T 0 H Qat I' ump, NoMethod) ; SystemJata VAR REC:lRD ChosenMethod InsideTemp, The rmo s tatS e t ting Co llec t orWaterT amp, TankWaterTemp, HeatedTankTemp A'I1ountOfSunlight Hour Minute END (*SystemData.); Heo!ltingMethodsi AirTemperature; Wa tarT empe rEI tur II; Integer; 00 •• 24; 00 •• 59; (*IJ2Iriables publicly defined in this module •• > Cu!"'rcntD2Ita Operating, PEinic PUBLIC GetDClta; : SystemOatEl; : BOOl.EAN; (*GetData Modul? containing GetData & StoreData*) PROCEDURE GetDI':'ta (VAq CurrentD¢'ota: SYstemData); PROCEOUR!: StoreOElta(VAR CurrentOata:SystemData); PUBl.IC Jper2ltion; (*Oper?tion Module containing OperaleSystern, St2lrtUpSystem C\nd ShutOownSystem*) PROCEDURE StartUpSystem; PROC EOUR E DperateS ys tern (vAR CurrentData: Sys temData); PROCEDURE ShutDownSystem(VAR CurrentDaht:SystemData); PRIVATE GetDlIta; (* end of interface speCification *) Figure 7·1. Climate Control Program Listing and Sample Run (Cont'd.) 87 CHARTER 7 PRO~;DI,JRE 26 26 21 22 27 28 30 31 33 34 23 24 a5 REAOLNC-Insid'!Temt,l); WRITELN; 26 Z7 36 37 39 40 42 43 45 46 4e 49 51 53 54 WRITEC'Typ. the temperatul"'. of the collectOr" w~te,.. in Celsius:-); 2e RE A:JLN (Co 1 hetorWat&I"'Temp); WRI T ELN; 29 30 31 32 33 34 35 36 37 38 39 40 41 WR!TEC"TYPt the temperature of the tank wet.,. in Celsius:'); qUOLN (T a"kW alter-Temp); WR ITE LN; WRIT!:C"TYl)e the temperature of the heated tank water in Celsius: '); Re,AOLNCHe~t.dTilnkTemp); WRITELN; WRITEC"Type the hour of day, as in 04 0 ... 24:'); IiEAOLN(Hour}i WRITI::I.Ni WRITEC"Type the minute of the hour, as in 01 0" 59: "); REAOLN(Minut,p WRITELN; WRITEC"Typt the amount of sunlight, any integer will do fol"' now:'}; R:: 4:lL.N' Allloun t01 Sun 1 ight); WRl TELN; END; C*~ith Curl"'entOlita*) eND; PIt~C 55 55 Gl3t:la1:a(VAR Cyrl"'entData:SystemOata); BEGIN WITH C",,.,.antp_ta 00 BEGIN WRITe(~Ty~t the th'rlll0stat setting in degre.s Celsius:'); Ii: =AOLN (TtUr"mo stlltSet t1"9>; WR ITEl"N; WRITEC'Type tne inside temperature '-'elding in Celsius:'); E:lURE S'tol"~:la tll (VA R CUl"'l"entOata: S ys temO ata); 43 OEGIN 44 (*ilummy prqced\.lr., 'lventue-l.ly will $tOI"'~ CurrentOata in " fi1,,*) ~ITJ1 Cl,lrrentOata OQ BEGIN WR I TEI,.N (1 ____ ...... _____ ... _ ....... _______ .. ___ "); 56 46 wRITEI,.N("CURRENT DATA IS AS FOLLOWS:"); 57 47 WRI TEL N ( ............ _- - .......... -- ... ---- ... - ...... - ... ---" ) ; 58 48 WRITEI,.N( 'Thermostllt Setting is • ,The,.most~tSetting, 'C"); 59 49 IO/:(;IT!LN("Insidt temp,r.!lture is ",InsideTemp,'C"); 60 50 WRITELNC'T,mperatur, of collector lIIater is ·,CollectorWater"Temp,·C·); 61 51 WRlTELNC'Tem~e ... ature of tiilnk lIIatflr is ·,T",nkWate ... Temp,'C"); 62 52 WRITEI,.NC'Temperatyre of the heated tal'lk water ~s ',HeatedTankTemp,·C'); 63 53 WR:::TELN('Timll of oay i? • ... IoIOU,.,';·,Min\olte); 64 54 WRIT:LNC·Amount of sunli9ht is ',AmountOfSunlj,ght); 65 55 WRITEUJ} C*a blC1nk 1ine*) 66 56 END; C*\IIith CI./,.,.antOat:'l*> 67 57 ENe 69 58 ".*WARNING, i""'I,.It: ItiNO -.*WIS ,.epaj,red to "EN~ ; " 7J !.II ~ 0 SUIII"'~")1 InfOl"'lftBtioA: PRoceDURe STOREOAT" GeT DATA 'JFFSET 04~5H 0294H Total CODE SIZE 0222H 5460 0241H 5770 06F7H 104 I.~"" 17830 i)ATA SIZE OOOOH 00 STACK SIZE 0010H 160 0010H 160 0020H 320 hod. 1 e,.ror pe1ltcttd. 33% U,\ilization of Memory. 09/01/80 Source File: :F1 :OUMOP.$RC DbJ.~t PU., ,F1,OUMOP.OBJ Controls Specified; oeeUG. STHT 1 1.1~e 1 NESTING a 0 SOURCE TEXT, ,Fl,OUMOP.SRC (*Th15 h: ill dummy Op .... ation module, with dummy StartUp System, Sh\.ltOownSyst.m, "I'Id Oper"'ataSyshm procedyres, . fQr use with MC'linControl modlJle in test~ng phases • . ) MOOULE Opert'l'tion; 0 0 C* Interfillce specification common to all modules *) 11 =1 =1 =1 =1 =1 .1 =1 =1 =1 =1 .1 $INCLUDE (,'1 'I NSP,C. SRC) PU3LIC MilinCont,.oli (*section of interface specification*) CONST (*dsc12l ... ations declared publicly in this module.) Mi n:i, mumFor E)( c h Cln ger Mini mumFo ,.He a t Pu mr:;l 35; C*deg ... ees Celsius*' 13; TYPE (*definitions publicly def:i,ned in this module*) AirTe:"llper2lt\.lr"e ="'20~ .120; WaterTemperature =0 •• 120; C*de~r"ees in Celsius*) Figure 7-1. Climate Control Program Listing and Sample Run (Cont'd.) 88 PAGE DEBUGGING AND EXECUTING PROGRAMS 12 21 42 '1 =1 =1 '1 =1 '1 '1 '1 =1 '1 '1 ·1 '1 =1 '1 '1 '1 =1 =1 '1 '1 '1 =1 '1 Z2 23 24 44 45 46 "'1 "=1 25 13 20 21 10 23 II 26 27 28 29 30 12 13 14 15 16 17 34 35 18 37 19 20 39 40 =(C 0 llee; to,.T oE x c niln g''', Co UectorToH •• tPump, Tenk Toe xc hanger, T ~nkToHei!'ltPumru He a te d Tank TaHea tP ump, NoM'thod) ; "=1 18 8. 9 Heat i n gMe t nod s =1 =1 =1 =1 =1 SystemQata RECORD ChosenMethod InsideT.mp, ThermostetS,tting Call e c to "WZI t.,. Temp, TllnkWllterTemp, HeatedTankTe",p H•• tingMethodsi Air-Temperature; Hour" Wat.,.Temperaturei Intege,,; 00 •• 24; Minute 00 •• 59; A11101.1 "tOf S unl 191'1 t END C*Syste",02lta*); VAR (.valr-iables publicly defined in this Module •• ' Curl"'entOate Operating, Panic ; SystemOata; : BOOLEAN; PUBLIC GatD.ta; (*GetDatB Module contlli"1"9 GatData & Sto,..Ollta*) P ROC EOU REG. tDat!! (V AR Cur" 9"tO at I : S y st e .. Oata) ; P~OCEDUR E Stor.Oi!lta (VAR CurrentO.ta: SystemOata); PUBLIC Dperattion; C*Operation Module containing Op.,.ateSyst."" Stell"tUpSystam rtnd ShutDolllnSyste",*) PROC:DURE StCirtUpSystarn; PROCE:lURE :Jp,rateSystemCVAR Curl"entDatat: Syst:uOata); II' R:J C': OUR E Shut OOllin S y s t. III (V A.::l Cur,.en t Oatt at: S y stem 0 1I til) ; PRIVATE Operation; (* end of intel"face s!)ecification *) PROCEDURE Stal"tUpSystem; 26 26 Z7 28 29 30 18 19 20 21 22 23 31 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 53 54 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 0 55 51 52 53 54 55 56 57 58 59 60 61 62 63 64 0 1 1 1 1 1 2 2 3 3 3 3 3 3 BEGIN W~ITeLN ('Climllte system is now on.'); WqITELN C..... - .... ---- ........ -- ...... - .. - .. -- ... ); WRITELN; END; PROCEDURE OperliteSystem CVAR CurrentDati!l: SystemData); 0 BEGIN I WITH Cur,.entOata DO BEGIN WR IT!: LN (' =============================================='); WRITELN('TI,. Climate System is now operating.'); WRITELN; WRITELNC'The Tillie is ',HOu,.,':',Minute); WiUTELNC'The inside temp.,.atul"e is ',InsideTelllp,'C'); WRITELNC'The thermostat setting is ',Th.rmostatSetting,'C'); WRITEC'Method chos.n to heat the building: '); CASE ChosenMethod OF Co llec torT 0 Exc hanger: WRITEC'Sol,r Collector to Exchang.r'); Collectol"ToHeatPump : WRITEC'Solar Collecto" to Heat Pump'); WRITEC'Tank to Exchange,.'); Til n Ie To Exc han ge" TanleToHeatPump : WRITEC'Tank to Heat PUllp·); HeatedT ankToHeatPump: WRITEC 'Heilted Tank to Heat Pump·); NoMethod WRITEC'No heat reCluired·); END; wtUTELN; WR IT ELN C' = ===== I; ========== === ==== ==== ============= =r=s==' ) ; WRITELN; C*wl"ite a blank line.*) END; END; C*Opel"ilteSyst.",*) Z 2 2 2 2 2 2 2 3 3 3 3 3 3 3 2 2 2 2 I PROC EDUR E S 1'1 ut Down S yst em CVAR Cur,. entO. t a: Sy stemOilt a) ; 55 56 57 59 60 61 62 63 64 65 66 67 68 BEGIN W'ITE~N (': : ::::::: :: : : ::: : : : ::::::::: :: :: : :::::::::: ::: :::·Ii IF 'Panic THEN WRITELNC"'PANIC occurr,d, NORMAL shutdown.·) ELSe WRITELNC'No panic occur"ed, A8NORMAL shutdollln.'); WRITELN C':::::;:::::::::::::::::::::::::::::::::::::::::::'); WIT ... Cu,.r.ntOat!l 00 BEGIN WRITEC·LlIst chosen heating method was: '); CASE CMosenMetl'lod OF Collec torT 0 Exc l'Ian gel": WRITEC'Sola,. Collecto,. to Exchanger·); CollectorToHe.tPump : WRITEC'Sol.,. Collecto,. to Heat PUMp'); TankToExchange,. : WRITEC·Tillnk to Exc:hillngel"'"'; WRITEC'Tank to Heat PUMp'); TankToHeatF'ump Hea tedT link ToH ell t Pump: WRITEC·Heated Tank to Heat Pump'); WRITEC'No heat requi,..d'); NoMethod Figure 7·1. Climate Control Program Listing and Sample Run (Cont'd.) 89 CHAPTER 7 69 71 72 73 74 75 76 END; 65 66 67 68 69 70 71 77 72 78 79 81 82 83 84 13 74 75 76 77 78 WRITELN: WRITELN ("Th.,.mostat Setting is .. ,Th.,.mostatSetting," C·); WRITELNC'"Inside teMperature is ·,InsideTemp,·C"); WRITELN( "Temperatu,.. of eollecto,.. lIIat.,. 1s .. ,CollectorWat."Temp,"C"); WR!TELN( "Temlarature of tank wat.,. is .. ,TankWat.rTeIllP,"C"); ioIRITELN("'Tempe,.atur. of the hellted tank lIate" 1s ·,HeatedTankTeIllP,·C·)j w~ITeLN(·T1m. of day is ·,Hour,":",M1nut.); WRITELN ( .. Amount of sunlight is .. ,Alllou"t015u"11ght); SHO: (*1II1th Cu""e"tJata*> WRI TELN (": : :::::: : :: ::: : : :::::::: ::: ::::::::::::: : :: : :: :: :: : :::"); WRITELfH WRITELN( "Goodni;ht, I".ne .... "'; END ***W'ARNING, input: "END ***11111. r.~ai".d to "END ; " 85 78 0 0 SUMma,-y Info,.mation: PROCEDURE SHUT~OWNS OFFseT YSTeM 0698" 0440H OPEiUTESYSTEM STARTUP$YSTEM 03E2H Total CODE SIZE 039B_ 0258H DATA SIZE 9200 6000 O~SeH 940 OA3CH 26nO oOOOH 00 STACK SIZE 0010H 160 0010H 160 0010H 160 0030H 480 125 Lines Read. 1 error Deteeted. 33% utilization of Memory. -RUN PROGRM Climate system is now on. Type the thermostat setting in degrees Celsius:24 Type the inside temperature reading in Celsius:21 Type the temperature of the collector water in Celsius:60 Type the temperature of the tank water in Celsius:60 Type the temperature of the heated tank water in Celsius:70 Type the hour of day, as in 04 or 24:13 Type the minute of the hour, as in 01 or 59:25 Type the amount of sunlight, any integer wi II do for now:1 CURRENT DATA IS AS FOLLOWS: Thermostat Setting is 24C Inside temperature is 21C Temperature of collector water is 60C Temperature of tank water is 60C Temperature of the heated tank water is 70C Time of day is 13:25 Amount of sunlight is Figure 7-1. Climate Control Program Listing and Sample Run (Cont'd.) 90 DEBUGGING AND EXECUTING PROGRAMS =============================================== The CLimate System is now operating. The time is 13:25 The inside temperature is 21C The thermostat setting is 24C Method chosen to heat the bui Lding: SoLar CoLLector to Exchanger =============================================== Type the thermostat setting in degrees CeLsius:24 Type the inside temperature reading in CeLsius:22 Type the temperature of the co LLector water in CeLsius:10 Type the temperature of the tank water in CeLsius:10 Type the temperature of the heated tank water in CeLsius:10 Type the hour of day, as in 04 or 24:13 Type the minute of the hour, as in 01 or 59 :30 Type the amount of sunLight, any integer wiLL do for now:O CURRENT DATA IS AS FOLLOWS: Thermostat Setting is 24C Inside temperature is 22C Temperature of coLLector water is 10C Temperature of tank water is 10C Temperature of the heated tank water is 10C Time of day is 13:30 Amount of sunLight is 0 =============================================== The CLimate System is now operating. The time is 13:30 The inside temperature is 22C The thermostat setting is 24C Method chosen to heat the bui Lding: SoLar CoLLector To Exchanger ................................................................................................ ................................................................................................ . PANIC occurred, NORMAL shutdown . ................................................................................................ ................................................................................................ ... Last chosen heating method was: SoLar CoLLector to Exchanger Thermostat Setting is 24C Inside temperature is 22C Temperature of coLLector water is 10C Temp~rature of tank water is 10C Temperature of the heated tank water is 10C Time of day is 13:30 Amount of sunLight is 0 ............................................................................................................ .......................................................................................................... . Goodnight, Irene ... Figure 7-1. Climate Control Program Listing and Sample Run (Cont'd.) Obviously this book only introduces DEBUG-86. For a complete description, see the Intel/ec Series 11/ Microcomputer Development System Console Operating Instructions. 91 CHAPTER 7 USING ICE-88™, AN IN-CIRCUIT EMULATOR Th~ ICE-88 emulator consists of three circuit boards, a cable, a buffer box, and software on disk. The thr~e circuit boltrds fit inside your Intellec Series III development system, and the cable and buffer box assembly connects your Series III system to your prototype hardware. A forty-pin plug at the end of the cable plugs into your prototype system in place of your prototype's CPU, allowing the in-circuit emulator hardware to emulate all functions of your prototype's CPU. If you do not have any prototype hardware, keep the plug's protector closed to prevent damage to its pins. ' In-circuit emulation shortens your development time in two ways. It provides symbolic debugging capabilities and diagnostic hardware debugging capabilities, and it lets you borrow resources (like memory) from your Series III system until your prototype system is complete. YQur program can be loaded into borrowed memory, prototype memory, or any combination of the two, and run as if it were resident in the prototype. YOIl can emulate program execution at real-time speed or in single- or multiple-instruction steps. You can also stop emulation manually at any time to examine system status, or you Ciln specify breakpOints as you can with DEBUG-86. ' We will debug the PLMDATA module (first shown in Chapter 5) to see if it performs its port input and interpolations correctly. We added statements (shaded in figure 7-2) to the module that will execute the propedures. Figure 7-2 shows th~ listing of the compiled PLMDATA module. PL/M-86 COMPILER PAGE PLMOATA ISIS-II PL/N-86 H121 COMP:LATION ~. NaCULE 0LMOATA OBJECT MOOULE PLACED IN PLMOEB.CBJ PLM86 PLMOE;.S.C DEBUG COMPILER INVOKEO BY: PLMOATA: 00; OECLA~E START LABEL PUBLIC; oeCLARE (SETTING, T5:MPERATI,JRE' WORJ; I' INPUTS THE RHOS TAT S serf I NG $!= R!J M$ :)~R T S : Formal Pill"amtte"'$ HIGH and L:JW receive port numbers as ilIctual pa,.ameters. Input POl"'ts *'1IGfi and LOW: Thre9 9(0 dioits for the thel"'lI'Iostat setting: Port IoIIGI-1, bi,\s 3-0: hundred·s digit Port LOW, bits 7-4: ten·, digit Port LOW, bits 3-0: unit·, digit TeMPSOATAS~ROMSP::::RTS : F=ol"mal parameters H::GH and LOW r.c.iv. port numbers as act'Ual para ... t.rs. Input POl"t HI::iH: Binllry AJC output of thermocouple,. hign-order 8 bits Input oort LJW: Binary ADC outout 01 tnerlftoc:oupl.,. lo .... ord.r 8 bits OUTPUTS THeRMOSTAT$SETTINGSJ=:ROMSPORTS: TEM;>SD~TASP:RJM$PORTS: Return WORD with setting in Celsius Return WORO lIIith temperature 1n ·Celsiu$ *1 Figure 7-2. 92 Lis~ing of the Modified PLMDATA Module DEBUGGING AND EXECUTING PROGRAMS THERMO STA TSSETTI NGSFRO""PQRTS: PRQCeOUqe (HIGH, LOW) wORO; oeCLARe (H1GIoI, LOtI!) wo~u; DeCLA5IE (INSPORTSHIGH, INSPJRTSlOW) BYTE; oeCLARE THERMOSS!:TTING WORO; ~ OeCLA~E (HUNDREDS, TENS, UNITS) BYTE; = 9 INSPDRTSHIGH ':NPUT (H!GH); INSPORTSL:JW = INClUT(L;jW); = I~SPO~TSHIG'" ANJ 00001111e; TENS SHR(INSPCRTSL.C:W, 4); 10 11 12 HUNDREDS = 13 UNITS'lI INSPORTSLOW AND 000011118; THERM:lSSETTING =- UNITS + 10-TEN5 + 1QO*HUNOREOSi 14 1~ RETURN THERMOSSfTTINGi 16 TtiE RMCSTAT$SETTING$F~'JM$PORT S; E NO /. Anothe'" typed procedure to ... 585 ,* 17 t". ,..t . . rn t.mp.I" .. tu"8 data, ""hieh *1 INTERPOLATE typed pl"oc:edur,. INTERPOL.ATE is II typed "rocedu,.. thllt receives tnermocougle voltage .nd ,..tUI"n5 t.mlaratur. in Celsius using an interpolation routine *, INTERPOLATE : PROCEOURE (VOLTSIN) WO~O: DECLARE VOLTSC*) W:lRO OATACO,51,102,154,206,258,365,472): DECLARE TSCELC*) W:]RQ :)ATACO,10,20,30,40,50,70,90): DECLARE CI, VOL TSIN, NUME1UT:JR) W:lRO: 18 19 20 = 0: 21 22 23 24 00 MHILE VOLTS IN > VOLTSCI); 1=1+1; END; 25 26 1* Shift for rounding, and return Celsius te",peratur. *1 NUMERATOR := SHLCCVOLTSIN-VOLTSC1-1»*(TSCEL(I)-TSC!:LCI-1), 1); ~ETURN TSCEt..CI-1) + SHRCNUME~ATOR/CVOLTSCI)-VOLTS(I-1»+1, 1); t 27 END INTERPOLATE; 28 T !MPSO AT ASF II :l"SPO RT S: PROCEDURe tHIGI't,LOW) WORO: OECLAA:E (HIGH, LOW) WORD; DECLARE IHSPORTSHIG"t WORD; ,* ADD~ESS in McCr.cken"s book *, OECLAA:E INSPORTSl:lW BYTE; OEClAA:E CTHERM:lCCUPLESOUTPUT, TEMPERATUIH) WORO; 29 3D 31 32 33 34 35 36 37 2 2 2 2 2 INSPORTSrHGH z INPUTCI1IGI1); INSPOItTSLiJw INPUT CLOW); THERM:JCOUPLES:JUTPUT SHLCINSP:JRTSHI~H, 8) OR INSPCRTSLOW: TEMPEiUTURE INTERPOLATECTHERMOCJUPLESOUTPUT); RETURN TEMPERATU~E; = = = 38 END TEMP$OATASFROMSPORTS; 39 40 41 42 43 STA:tT: 00; SeTT ING = T!1: RM'JST ATSS E1T INGSFROMSPORl S C2000, 1 000); = T::MPSOATASF'RJMSPOIHSC200,100); TEMPe:UTu~E END START: END PLMOATA; MODULE INFORMATION: CODE AREA SIZE CONSTANT AREA SIZE vARIABLE AREA SIZE MAXIMUM STACI( SIZe 101 LINES ~EAO o PROGRAM ERR~'(S) = 012CI.l 3JJ~ 00201"1 0016!1 oo12H 320 220 == 180 END OF PL/M-a6 COMPILATION Figure 7-2. Listing of the Modified PLMDATA Module (Cont'd.) 93 CHAPTER 7 We also have to link the LARGE.L1B run-time library to this module, and locate the final module: -RUN LINK86 :F1:PLMDAT.OBJ. :F1:LARGE.LIB TO :F1:PLMDAT.LNK -RUN LOC86 :F1:PLMDAT.LNK RESERVE(200H TO 77FFH) TO :F1:PLMDAT.86 To use the ICE-88 emulator, copy the ICE88 program from its disk ohto a disk in your system (for example, the system disk in drive 0), and type the following command: -ICE88 You can now use the ICE-88 LOAD command to load the module and its symbols: *LOAD :F1 :PLMDAT.86 *SYMBOLS The SYMBOLS command displays the entire symbol table. We can start emulation with the GO command, specifying both astarting location and a breakpoint. We can"use the .STARTlabel as a starting location, and specify line #8 as a breakpoint: *GO FROM .START TILL #8 EXECUTED EMULATION BEGUN EMULATION TERMINATED, CS:IP=0781:0040H At this pOint, we want to change the contents of the 8088 ports so that the THERMOSTAT$SETTING$FROM$PORTS procedure can pick them up: *PORT 2000=0 ;Hundred's digit of BCD thermostat setting. *PORT 1000=24 ;Tens and units of BCD setting. *GO FROM CS:IP TILL .SE~TING WRITTEN EMULATION BEGUN EMULATION TERMI~ATED. CS:IP=0781:002CH Note that a semicolon and comment is allowed on an ICE-88'command line. We assigned 24H to port 1000 to obtain .a 2 as the tens digit and a 4 as the units digit (to represent a thermostat setting of 24 degrees Celsius). Then we resumed emulation from the program counter (PC) until a value was obtained for the .SETTING variable. At this point, we can check the contents of .SETTING: *WORD .SETTING WOR 0794:0024H = 0018H 18 hex a dec i ma l i s 24 i n dec i ma l. 94 DEBUGGING AND EXECUTING PROGRAMS Since .SETTING is correct, we can set the contents of the other two ports and continue emulation: *PORT 200=0 ;High order 8 bits are zero. *PORT 100=66 ;Low order equal 66H. or 102 in decimal. *GO FROM CS:IP TILL #43 EXECUTED EMULATION BEGUN EMULATION TERMINATED, CS:IP=0781:003BH *WORD .TEMPERATURE WOR 0794:0026H = 0014H * 14 hexadecimal is 20 in decimal. We have a temperature reading of 20 degrees Celsius. Obviously this session only introduces the ICE-88 emulator. The ICE-88 In-Circuit Emulator Operating Instructions for ISIS-II Users contains both tutorial and reference information on the ICE-88 emulator. The similarities between DEBUG-86 and in-circuit emulators enhance their usefulness in software development efforts, since both provide symbolic debugging. In-circuit emulation also lets you emulate all of your prototype CPU functions, even though your prototype CPU is not installed, and even if your prototype has not been built. It is a powerful debugging and diagnostic tool for both the hardware and software of your final product. EXECUTION ENVIRONMENTS The Intellec Series III system provides an 8086 execution environment and operating system support-the support your program needs to be able to access devices and files. When you link the run-time support libraries to your Pascal-86 program, you are providing the software your program needs to "talk" to the Series III operating system. You can also run Pascal-86 programs in other systems, or in dedicated application environments, as long as you provide the run-time support software. For example, you could transfer your program to RAM on an SDK-86 (System Design Kit with an 8086), or to RAM on an iSBC 86/12A Single Board Computer system, by first using the OH86 utility described in the iAPX 86,88 Family Utilities User's Guide for 8086-8ased Development Systems to convert the program to hexadecimal object format, and then using an appropriate tool to load the program into your execution board (the ICE-86 In-Circuit Emulator, the SDK-C86 Software and Cable Interface, or the iSBC 957 Interface and Execution Package). You could also transfer your program to ROM on an SDK-86 kit, iSBC Single Board Computer system, or your own custom-designed hardware, by using the Universal PROM Programmer (UPP) with its Universal PROM Mapper (UPM) software. Figure 7-3 shows possible execution paths for Pascal-86 programs. The Series III operating system has a standard set of primitives (service routines) that any program can use. Intel supplies run-time support libraries that act as an interface between your Pascal-86 program and the Series III system. By replacing this interface with your own customdesigned interface, you can use the same Pascal-86 programs on other non-Intel systems. With each future Intel system, Intel will supply the appropriate run-time interface so that your present programs will also run in future Intel systems. 95 CHAPTER 7 LOCATED OBJECT CODE INTELLEC" SERIES III , DEVELOPMENT SYSTEM iSBC 86/12A'· SYSTEM SDK-86 SYSTEM DESIGN KIT CUSTOM-DESIGNED SYSTEM Figure 7·3. Possible Execution Paths for Pascal·86 Programs 121632-8 A system library is also supplied for PL/ M and assembly language programs; this library (or set of libraries) also acts as an interface between your programs and the Series III operating system. By supplying your own interface, you can also use these programs on other systems. The Series III system was designed in this modular fashion to provide operating system support without necessarily binding programs to that particular system. It was designed to be used as part of your application (as the operating environment), but it was also designed to be useful for the development of applications that do not need full-blown operating system support. With several layers of interfacing between the system and your program, you can choose exactly how much system you want in your final application, and you can preserve your software investment with an eye to the future. 96 BIBLIOGRAPHY 1. Brooks, Frederick P., The Mythical Man-Month: Essays on Software Engineering; Addison-Wesley Pub. Co., Phillipines, 1975. 2. Brown, P.J., "Programming and Documenting Software Projects," Computing Surveys, Dec. 1974, pp. 213-220. 3. Dahl, O. J., Dijkstra, E. W., and Hoare, C.A.R., Structured Programming; Academic Press, New York, 1972. 4. Dijkstra, E. W., "The Humble Programmer," 1972 Turing Award Lecture, Communications oftheACM; Vol. 15, No. 10, Oct. 1972. 5. Floyd, Robert W., "The Paradigms of Programming," 1978 Turing Award Lecture, Communications of the ACM; Vol. 22, No.8, Aug. 1979. 6. Hueras, J. F., Ledgard, H. F., and Nagin, P. A., Pascal With Style (Programming Proverbs Series); Hayden Book Co., Rochelle Park, NJ., 1979. 7. Jensen, Kathleen, and Wirth, Nicklaus, PASCAL Springer-Verlag, New York, Heidelberg, and Berlin, 1975. 8. Kernighan and Plauger, The Elements of Programming Style (2nd Edition); Bell Telephone Labs, Inc., Murray Hill, NJ, and McGraw-Hili, New York, 1978. 9. Kernighan and Plauger, Software Tools; Bell Telephone Labs, Inc., New Jersey, Yourdon inc., New York, and Addison-Wesley, Cambridge MA, 1976. User Manual and Report; 10. Ledgard, Henry F., Programming Proverbs; Hayden Book Co., Rochelle Park, NJ., 1975. 11. McCracken, D. D., A Guide to Intellec Microcomputer Development Systems; Intel Corp., 1978 (No. 9800558B). 12. McCracken, D. D., A Guide to PUM Programming For Microcomputer Applications; Addison-Wesley Pub. Co., Menlo Park, CA., 1978. 13. Morse, Stephen P., The 8086 Primer: An Introduction to Its Architecture, System Design, and Programming; Hayden Book Co., Rochelle Park, New Jersey, 1980. 14. Parnas, D. L., "On the Criteria To Be Used in Decomposing Systems into Modules," Communications ofthe ACM; Vol. 15, No. 12, Dec. 1972. 15. Polya, G., How To Solve It (2nd Ed.); Princeton Univ. Press and Doubleday Anchor Books, Doubleday & Company, Inc., Garden City, NY, 1957. 16. Strunk, William, Jr., and White, E. B., The Elements of Style (3rd Ed.); Macmillan, New York, 1979. 17. Weinberg, Gerald M., PUI Programming Primer; McGraw-Hili, Inc., New York, 1966. 18. Wirth, Nicklaus, "Program Development by Stepwise Refinement," Communications of the ACM; Vol. 14, No.4, April1971. 19. Wirth, Nicklaus, Systematic Programming: An Introduction; Prentice-Hall, Englewood Cliffs, NJ, 1973. 97 INDEX Within this index, for ff after a page number means and the following page (or pages). "&" continuation character, 23ff "< >" (angle brackets) in CREDIT, 35ff ">" (angle) prompt, 23f "", See a/so RETURN key, 10,35 "*,, (asterisk) in CREDIT command area, 29f "*,, (asterisk) in pathname, 19ft "@" in CREDIT, 30 "-", See a/so prompt, 10, 13, 23 "!" in CREDIT, 35ft "(*" and "*)" comment symbols, 42 "1*" and ".* I" comment symbols, 64 "%" (percent) symbols for parameters, 25 "?M" in CREDIT, 37 ";" (semicolon) for comments, 24f 8080/8085 processor family, 1,22 8085 execution environment, Preface, 22ft, 25 8086 execution environment, Preface, 7f, 16, 22ff, 25, 55, 68, 78f 8086/8087/8088 macro assembler, 13ff, 48, 63,68ft 8086/8088 Utilities, 13ft 8087 processor, 78 8087.L1B (Pascal-86 run-time library), 78 8087 software emulator, 78 86 extension, 16, 22ft, 25, 55, 79 8088 processor, 61 87NUlL.L1B (Pascal-86 run-time library), 77f A switch with FORMAT command, 21 absolute modules, 79 actual parameter, 24 ADD command (L1B86), 76 add text mode (CREDIT), 31 f addresses, See physical memory address address, reference to, 48, 75ff Aesop, 81 algorithm for climate control system, 42, 63 AN 0 operation, PLI M-86, 64 angle brackets (CREDIT), 35ft angle (» prompt, 23f application, climate control, 2ff arithmetic, real, 6, 78 array, PLI M-86, 68 assembler, 8086/8087/8088, 13ft,63, 68ff assembly language, 6, 25f, 48, 63, 68ft, 79, 82 asterisk in CREDIT command area, 29f asterisk in path name, 19ft ATTRIB command, 18, 21 attributes, file, 11f, 15f, 18 backup of text file, 16, 19, 38f BAK extension, 16, 19, 38f base address, segment, 83 BCD digits, 64ft binarY,83f binary-coded decimal digits (BCD), 64ft BIND control (L1NK86), 78f, 81 binding modules, 75ft, 78f bit-shift operations, PLI M-86, 64, 68 black printing, 10 block diagram of climate system, 3 blocks, file 11,28,30 blue printing, 10 BOOLEAN command (DEBUG-86), 82ft BOOLEAN type, 46, 82ff breakpoints, debugging, 92 carriage return, See RETURN key Celsius degrees, 5, 24, 63ft, 68, 94f character pointer (CREDIT), 32ft choosing software tools, 5f climate control application, 2ff, 41ff, 44f, 49ft, 57ft, 63, 85ff, 92f CNTl-A command (CREDIT), 31 CNTl-N (CREDIT), 32, 35 CNTl-P (CREDIT), 32, 35 CNTl-V (CREDIT), 28ft, 32ff CNTl-Z (CREDIT), 30 :CO: (console output), 39 CODE control, PLI M-86, 68, 70ff collector water, solar, 42, 45f command area (CREDIT), 28f command iteration, 27, 35ft command mode (CREDIT), 32f command sequence, 25 command sequence definition file, 24f commands, executing, 22ft, 25 comment symbols - Pascal, 42 comment symbols - PLlM, 64 comments, semicolon, 24f compilations, separate, 41 99 INDEX compiler, See a/so Pascal-86 or PLlM-86, 16, 55f compiler controls, Pascal-86, 55f compiler controls, PLI M-86, 68 console output, 39 continuation character (&), 23ft Control key, See CNTL Control lines, source file, 51,56 Controls, Pascal-86, 55f convert voltage to temperature, 5, 63ff, 68 cooling methods, 3ft COPY command, 19ft copying files to disks and devices, 19ff CP, See character pointer CREATE command (LlB86), 76 creating a text file, 28f CREDIT text editor, 2, 11,13,16,20, 27ft, 30ff, 33ft, 36ft, 42 CS extension, 25 CS register (code segment), 83f CSD extension, 24f cursor (editing text), 28ft cursor movement keys, 32f dash, See prompt DATA initialization, PLlM-86, 68 data passing between modules, 7, 48f data type, REAL (Pascal-86), 78 data types, Pascal-86, 45f, 48f data types, PLI M-86, 64, 66 DEBUG-86, 7, 55f, 75, 78, 81ft, 84ft DEBUG control, Pascal-86, 55f, 82 debuggers, 81 debugging, 2ft, 5ft, 55f, 75, 78, 81ft, 84ft default directory (:FO:); 19ft default settings, compiler controls, 55 DEFINE command (DEBUG-86), 83 defining software, 3ff degrees in Celsius, 5 DELETE command, 18ft deleting files, 18ff Determine Method procedure, 47f, 51, 86 device names, 20f devices, copying files to, 19ff Dijkstra, E.W., 41 DIR command, 10ft, 16f, 21 directory, default (:FO:), 19ff directory listing, 10ft, 17 directory specifier, See path name disassembled display (DEBUG-86), 84 disk blocks, See file blocks disks, See formatting disks disks, copying files to, 19ft displaying text file, 39 drive 0, See system disk, See a/so RESET key E8087 emulator, 78 E8087.LlB (Pascal-86 run-time library), 78 editor, text (CREDIT), 2, 16, 27ff, 30ff, 33ft, 36ff, 42 100 emulation, in-circuit (ICE), 1f, 5ft, 8, 79, 92ff emulator, 8087, 78 end of text, 28 ending text editing session, 38f English, 5f, 27, 41 environment, execution, 81, 95f Series III operating, 77ft EQ (quit) command (CREDIT), 38f ESC (Escape) key, 29 EVALUATE command, 83f EX command (CREDIT), 28, 30, 38f exchanger, See climate control exclamation point in CREDIT, 35ff executable programs, 75f executing commands and programs, 22ff, 25,81ft execution environment, 8085, Preface, 22ff, 25,81,95 8086, Preface, 8, 16, 22ft, 25, 55, 68, 78f, 81, 95 execution, interactive mode, 23ft non-interactive mode, 24f paths for Pascal-86 programs, 95f execution vehicle, 81 EXIT command (LlB86), 22FF, 25, 76 extension, filename, 11,16,22,25 extensions to standard Pascal, Intel, 55 external procedures, 76f external references, 75ff F attribute, 12, 15, 18, 21 F (Find) command (CREDIT), 34 :FO: (default directory), 19ft file attributes, 11f, 15f, 18 blocks, 11,28,30 command sequence definition, 24f copying to disks and devices, 19ft deleting, 18ff format (F) attribute, 12, 15, 18, 21 input/output procedures (Pascal-86), 78 invisible (I) attribute, 12, 18 length, 11 IibrarY,76f listing, 16, 42, 55ff, 58ft, 68, 71ff macro, 16 object, See object module overlay, 16 renaming, 18ft source, 27, 55f, 68 system(s) attribute, 12, 14f, 18, 21 text, 27ff text backup, 16, 19, 38f update with COpy command, 20 write-protected (w attribute), 11f, 18 filename, 10ff, 15ft, 18ft, 21ff, 24f filename matching, 19ff files, manipulate, 10, 15 naming conventions, 15f final product, using, 8 finding text, 33f INDEX flexible disks, See also formatting disks, 14f FOR, used with DIR command, 17f formal parameters, 25 FORMAT command, 13ff, 18, 21 format files, 12, 15, 18, 21 formatting disks, 10, 13ft, 16ft, 20f FORTRAN-86, 5f FORTRAN language, 6, 27, 63f FROM with FORMAT command, 21 GETDATA module, 4ft, 7, 44f, 50, 55ff, 58ff, 66,77,87ff GetData procedure, 44, 46f, 50, 52f, 66, 87 glitch, hidden, 81 GO command (DEBUG-86), 83f GO command (ICE-88), 94 Goethe, von, 75 Grove, Andrew S., 1,9 hard disk subsystem, 12ft hardware development process, lIf, 7f HD COPY command, 21 heat pump, See climate control heating methods, 3ff, 42, 45f hexadecimal,83f hexadecimal object format, 8, 95 hidden glitch, 81 hiding information, 46f high-level languages, 2ff, 5f, 41,55, 63f, 69f, 75,79,82 HOME key (CREDIT), 28f, 32f :HP: (paper tape punch), 20 iAPX 86, 88 processor family, 1, 7f, 22 ICE-86, 11, 7f, 79, 92ff, 95 ICE-88, 11, 7f, 79, 92ft, 95 IDISK command, 15, 18, 21 in-circuit emulation (ICE), 11, 5ft, 8, 79, 92ff INCLUDE control, Pascal-86, 51,56 information-hiding,46f inputl output procedures (Pascal-86), 61,78 inserting text, 28f, 311 interactive 8086 mode, 23 interactive execution, 23ff Interface, iSBC 957,8,95 Software and Cable (SDK-C86), 8, 95 interface specification, Pascal-86, 47, 49f, 51 INTERPOLATE procedure, 66ft, 93 invisible file attribute, 12, 18 Irene, goodnight, 54, 80, 91 IP (instruction pointer) register, 83f iSBC 86/12A system, 8, 95f iSBC 957 Interface and Execution Package, 8,95f iSBC (Single Board Computer) System, 8, 95f ISIS-II operating system, See also operating the Series III system, 10ft, 13ft, 16ff, 23 J (jump) command (CREDIT), 32ft keyboard,29 L (Line) command (CREDIT), 37 language diversity, 63 languages, high-level, 2ft, 5f, 41,55, 63f, 69f, 75,79,82 LARGE control, PL/ M-86, 68 LARGE.LlB (run-time library), 77f, 94 Ledbetter, Huddie ("Goodnight Irene"), 54, 80,91 length, file, 11 LIB extension, 16 LlB86.86 utility, 22, 75f librarian utility, 22, 75f libraries, run-time, 14f, 23ft, 75ft, 78f, 94 library file, 76f management, 2, 5ft, 16, 76 module, 16, 75ff, 78f of routines, 2ft, 5ft, 13, 16, 75ft, 78f line feed character, 29 line printer, 20, 39 line terminator (CREDIT), 29 LlNK86.86 Utility, 23f, 75ff, 78f, 81 linkage libraries, 13ft, 16, 23ff, 75ff linker utility, 16, 75ff, 78f linking modules, 2ft, 5f, 16, 75ft, 78f LIST command (LlB86), 76 listing of PLMDATA module, 71ft, 92f listings, program, 16, 42, 55ft, 58ff, 68, 711f, 85ft,92f of test modules, 57ft, 85ft, 92f LNK extension, 16, 79 LOAD command (DEBUG-86), 82f LOAD command (lCE-88), 94 loader, RUN, 78f loaders, ICE (in-circuit emulation), 79, 95 load-time locatable (L TL) module, 78f LOC 86.86 utility, 16, 75ff, 79 locatable program, 77ff locater utility, 16, 75ft, 78f locating modules, 2ft, 5f, 16, 75ff, 78f :LP: (line printer), 20, 39 LST extension, 16 LTL module (load-time locatable), 78f M (Macro definition) command (CREDIT), 36f MAC extension, 16 machine code, 69f macro assembler, 8086/8087/8088, 13ft, 48, 63,68ff macro, assembly language, 69f CREDIT,36f definitions, macro assembler, 69f file,16 processor language, 69f 101 INDEX MAIN module, 4ft, 7, 41ff, 46f, 49f, 55ft, 58ft, 63, 77f, 85ft main program (climate control system), 43f, 461,49, 51ff, 63, 77, 85ft MainControl (main module), 43f, 47, 49f, 51ft, 63,77, 82f, 85ft matching filenames, 19ft memory addresses, See also physical memory ad(lresses, 7, 75ft, 781 methods, heating and cooling, 3ff, 42, 45f MF command (CREDIT), 37 modular programming, 6ff, 41f, 461, 49, 63, 761 modular structure, See also modular programming, 77 module, absolute, 79 concept 01, 5FF. 41, 461, 49 heading, Pascal-86, 45, 491 LTL (load-time locatable), 78t names,82f object, See object module subordinate, 41,77 modules, binding, 75ff, 78f program, 2ft, 6ft, 16, 41f, 44f, 461, 491, 63, 76ff, 85ff, 921 monitor, 91 moving around in text file, 3211 naming Gonventions for files, 151 Nassi-Schneiderman chart, 4 NDP (8087), 78 NOEXTENSIONS control, Pascal-86, 55 non-interactive exeGutipn mode, 241 NOPRINT Gontrol, Pascal-86, 55 numeric data processor (8087), 78 object format, hexadecimal, 8, 95 object module also called object lile, 16, 55f, 68,751 OBJ extension, 16, 55 octal,831 offset value, base address, 83 OH86 utility, 8, 95 Operate System procedure, 44, 461f, 50, 52ff, 831,89 operating environment, Series III, 77ff operating system procedures, 25, 78, 95 Series III, See also operating the Series III system, 79, 95 summary of, 25 operating the Series III system, 9ff, 12ff, 1511, 18ft, 21ff, 24f, 78 OPERATION module, 4fl, 7, 44, 50, 55 It, 58ft, 77,821,88ff operation of Glimate system, 3ft, 44, 46f OR operation, PLI M-86, 64, 68 output disk or device, 19ff overlay file, 16 OVO extension, 16 102 P (switch), used with COPY, 15 P86RNx.LlB (Pascal-86 run-time libraries), 77f panic condition in climate system, 42, 44 paper tape punch device, 20 parameter, actual, 24 parameter passing between modules, 7, 48 parameters, formal and actual, 25 parse phase, Pascal-86 compiler, 56 PASC86.86 Compiler, 23f, 55t Pascal language, 5ff, 27, 39, 411, 45f, 481, 55, 631,651 record, 41, 48 Pascal-86 Compiler and Language, 51, 14, 23, 25,4111,45,481,551,631,66,681,951 data types, 451, 481 run-time libraries, 7711 pass data by relerence, 7, 481 by value, 7, 481 pathname matching, 19ft pathnames, 15ff, 1811, 21ft, 241 percent symbols lor parameters, 25 physical memory address, 7, 75ft, 781, 83ff Pidgin Pascal, 6, 27, 391 PLlM-86 Compiler and Language, 5t, 14, 48, 63ff, 66tl, 691f data types, 64, 66 PLM86.86 Compiler, 68 PLiM language, 6, 251, 45, 63ft, 66, 691, 79 PLMDATA module, 68, 71ft, 941 pOinter, character, 3211 ports, inputloutput, 49, 61, 64ff primitives, Series III operating system, 70, 78,95 PRINT control, Pascal-86, 55 printing, blue or black, 10 printing text lile, 39 PRIVATE delinitions, Pascal-86, 491 procedure, typed (PLI M), 64 procedures, built-in (Pascal-86), 761 external,76t lile input/output (Pascal-86), 78 operating system, 25 processor, 8080/8085, 1ft, 7,61 iAPX 86,88 (8086 and 8088), 1f1, 7, 61 numeric data (8087), 78 product, final, 8 program, executable, 75t locatable, 77 listings, 16, 42, 55ft, 58ft, 68, 71 ft main (climate control system), 431, 461, 49, 51f1 modules, 211, 6ft, 16, 41f, 441, 461, 491, 63, 76ft source statements, See also source lile, 55,85 programmable read-only memory, 2, 8 programming the system, 9, 70 programs, executing, 22ff, 25 PROGRM.86 (test version 01 application), 77f, 79t, 82ft, 901 INDEX PROM, See programmable read-only memory prompt, dash (-), 10, 13, 23 prototype, hardware, 7f, 48f, 61,92 PUBLIC definitions, Pascal-86, 49f RAM, See random access memory random access memory, 8, 95 READLN procedure (Pascal-86l.·61, 76f read-only memory (ROM), 8, 81,95 real arithmetic, 6, 78 REAL data type (Pascal-86), 78 record, Pascal, 41,48 recursive, See self-reference reference, pass data by, 7, 48f to address, 48, 75ft references, external, 75ff RENAME command, 18ft renaming files, 18ft RESERVE control (LOC86), 79 RESET key, 9f, 13f RETURN key, 10, 12ff, 15, 20f, 28f, 35 ROM, See read-only memory RPT (Repeat) key, 29 RUBOUT key, 29 RUN command, 14, 22ff, 25, 68, 75ft, 78f, 81 run-time libraries, 14f, 23ft, 61,70, 75ff, 78f, 94f run-time system, See a/so run-time libraries, 76ft' S attribute, 12, 14f, 18, 21 S (Substitute) command (CREDIT), 34f screen mode (CREDIT), 32f scrolling text, 32f SDK-86, 8, 95 SDK-88, 8, 95 SDK-C86 Software and Cable Interface, 8, 95 segment base, 83 self-reference, See recursive semicolon for comments, 24f, 94 separate compilations, See a/so modular programming, 41 Series II monitor, 9f Series II system, Preface service routines, operating system, 70, 78, 95 shift operations, PLlM-86, 64, 68 SHL (shift left) operation, PLlM-86, 64, 68 SHR (shift right) operation, PLlM-86, 64, 68 ShutDownSystem procedure, 44, 46f, 50, 54, 89f Single Board Computer (iSBC) system, 8 size control, object module, 68 Software and Cable Interface (SDK-C86), 8, 95 Software definition, 3ff, 30f Software development process, 1ft Solar collector, 2ft, 42, 45f Source disk, 15, 19ft source file or program, 27, 55f, 68 SQ (Substitute after Query) command (CREDIT),34f SRC extension, 16 StartUpSystem procedure, 44, 46f, 50, 53, 89 STEP command (DEBUG-86), 84 stepwise refinement, 2ft StoreData procedure, 45f, 50, 53, 87f Strachey, Christopher, 63 string,34f structure, PLlM-86, 48 of software, 4ft SUBMIT command, 24f subordinate modules, 41,77 substituting text, 33f summary of operating system, 25 switch used with DIR, 12, 17 S,YM keyword (DEBUG-86), 83 symbol table (DEBUG-86), 82ft symbolic debugging, 5ft, 82ft symbols, 7, 82ff SYMBOLS command (DEBUG-86), 82f SYMBOLS command (ICE-88), 94 System Design Kits, 8, 95f system climate control, 2ft, 41ff, 44f, 49ft, 55ft, 58ft, 63, 85ft, 92f disk, 9ft, 12ft, 15ft, 21 files, 11ft, 14, 18, 21 operation, Series III, See operating the Series III system run-time, See a/so run-time libraries, 76ft turning on, 9f tags (CREDIT), 32f tank, water (climate system application), 42, 45f TO (tag delete) command (CREDIT), 32 TE (tag for end), used in CREDIT, 32f teletype output, 39 TEMP$DATA$FROM$PORTS, 66ff, 92f temperature conversion program, 24 temperature data, 3f, 49, 63ft, 68 terminator, line (CREDIT), 29 text area (CREDIT), 28f creating and inserting, 28f, 31 editing, ending session, 38f editor (CREDIT), 2, 16, 27ff, 30ft, 33ft, 36ff, 42 file, 27ft file backup, 16, 19, 38f file, displaying, 39 file, printing, 39 finding,33f scrolling,32f su bstituti ng, 33f thermocouple voltage, 5, 61ff, 68 THERMOSTAT$SETTING$FROM$PORTS procedure, 64ff, 92ft 103 INDEX :TO: (teletype output), 39 tools, software, 4ff, 7ft top-down design, 2ft, 41 TPWR (typewriter) key, 29 TS (tag set) command (CREDIT), 32 TT (tag for top), used in CREDIT, 32f turning on your system, 9f TXT extension, 16 type, data, 45f, 64, 66 TYPE definition, Pascal, 46, 48 type, REAL (pascal-86), 78 typed procedure, PL/ M, 64 typeface, blue or black, 10 Universal PROM Mapper (UPM), 8, 95 Universal PROM programmer (UPP), 2, 8, 95 uparrow (f), 29 update files, 20 104 UPM, See universal PROM mapper UPP, See universal PROM programmer using the system, 9 using your final product, 8 utilities, Series III, 2ff, 6ff, 13, 75ft, 78f value, pass data by, 7, 48f VAR definition, Pascal, 46, 49 vehicle, execution, 81 video display (CREDIT), 28 voltage, thermocouple, 5, 61ff, 68 W attribute, 11f, 18 wild card filename, See a/so filename matching, 21 WRITELN procedure (Pascal-86), 61, 76f The Intellec® Series III Publications Library A GUIDE TO THE INTELLEC SERIES 11\ The - B086 Family User's Manual 9800722 INTElLEce SERIES III Mlcrosystem o.,lgn Using the iAPX 86,88 Family Microprocessors The ~~8!:r~:i~u~~~!~:n~nual A GUIDE TO INTElLEC" SERIES III MICROCOMPUTER MICROCOMPUTER DEVELOPMENT SYSTEM PRODUCT OVERVIEW DEVELOPMENT SYSTEMS 121575 121632-001 Using the 121586 Intelle~ Serle, III System Hardware and Sollware Hudware InSlaU.tlO~ and Checkout I Systems operallO~ and System$ Programming INTElLECI!l SERIES III MICROCOMPUTER DEVELOPMENT SYSTEM INSTALLATION AND CHECKOUT MANUAL I -; :~~i~~~·;~:~~i!:~I~I::li:~s Programming lor iAPX 86,88 Applications INTELLEC® SERIES III MICROCOMPUTER DEVELOPMENT SYSTEM CONSOLE OPERATING INSTRUCTIONS r----l ICE·86T~ iAPX 86, 88 FAMILY UTILITIES USER'S GUIDE 121616 1 iAPX 86,88 FAMILY UTILITIES POCKET REFERENCE 121669 '21610 I 1 INTElLEC@SERIESIII MICROCOMPUTER DEVElOPMENT SYSTEM SCHEMATIC DRAWINGS ISIS-II CREDIT'~ CRT·BASED TEXT EDITOR USER'S GUIDE USin~ Assembly Languages ASSEMBLY LANGUAGE REFERENCE MANUAL 9800902 '2'642 r- 8086/8087/8088 MACRO I lor 8086-Based Developmenl Systems I L 1 _1- - MODEL 740 HARD DISK SUBSYSTEM OPERATION AND CHECKOUT 9800943 - - - - 121627 1 I J L 1 I CREDIT'" CRT-BASED TEXT EDITOR POCKET REFERENCE r 8086/8087/8088 MACRO ASSEMBLER OPERATING INSTRUCTIONS 9800903 INTELLEC@SERIESIII MICROCOMPUTER DEVELOPMENT SYSTEM PROGRAMMER'S REFERENCE MANUAL 8086/8087/8088 MACRO ASSEMBLER POCKET REFERENCE I lor 8086-Based Development Systems L I MCS-86'" ASSEMBLY LANGUAGE CONVERTER OPERATING INSTRUCTIONS FOR ISIS-II USERS I 9800642 I r I L LEGEND MANUAL SUPPLIED WITH SERIES III - MANUAL SUPPLIED WITH OPTIONAL PACKAGE r I L _1- - L - 8089 MACRO ASSEMBLER USER'S GUIDE 9800938 -1_18089 MACRO ASSEMBLER POCKET REFERENCE r- - - - -11 12'541 -1_1- - I I L J - 1 121636 _1- - 121662 - - RBF-89 REAL-TIME BREAKPOINT FACILITY FLOATlNG·POINT ARITHMETIC LIBRARY USER'S MANUAL I I J 1 IN·CIRCUIT EMULATOR USERS - - - - I 8080/8085 1 OPERAT~~~ 11~~:a~~MCTIONS 9801018 121617 J 9800950 _1- I" BOBO/BOB5-Based Developmenl Syslems 1 ICE_88'M POCKET REFERENCE -1- MeS·aO/8ST Applications MeS·BO/S5'" UTILITIES USER'S GUIDE I J - 1 PL/M-86 POCKET REFERENCE for 8086-Based Development Systems - - J -11 Progr,mmlni lor 9800452 J 9B00949 r- I I L PLlM-86 USER'S GUIDE _1- - r 1 tor 80B6-Based Development Syslems -1- I -1- ICE·88IM IN-CIRCUIT EMULATOR OPERATING INSTRUCTIONS FOR ISIS-II USERS I L J PASCAL·86 POCKET REFERENCE r- 121674 - - L 1 121618 121539 r- '21628 1 ---1 PASCAL-86 USER'S GUIDE I for 8086-Based Development Syslems High-Level Languages I 9600B3B L I------,u"" I I 1 ICE·86'" POCKET REFERENCE I for 60B6-Based Oevelopmenl Syslems I J -1- 1 INTElLEC® SERIES III MICROCOMPUTER DEVElOPMENT SYSTEM POCKET REFERENCE 121663 r- r- 1 MODEL 556 RESIDENT PROCESSOR BOARD KIT INSTALLATION MANUAL 9600714 L 121609 12'612 IN-CIRCUIT EMULATOR OPERATING INSTRUCTIONS FOR ISIS·II USERS I for BOBG-Based Developmenl Syslems I - I J 1 I J 1 I J 121632-9 The Intellec Series III Publications Library

  • Source Exif Data:
    File Type                       : PDF
    File Type Extension             : pdf
    MIME Type                       : application/pdf
    PDF Version                     : 1.3
    Linearized                      : No
    XMP Toolkit                     : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:56:37
    Producer                        : Adobe Acrobat 9.2 Paper Capture Plug-in
    Modify Date                     : 2010:01:11 17:59:25-08:00
    Create Date                     : 2010:01:11 17:59:25-08:00
    Metadata Date                   : 2010:01:11 17:59:25-08:00
    Format                          : application/pdf
    Document ID                     : uuid:8b410057-ca5c-4f18-87e0-043e73bace9e
    Instance ID                     : uuid:dbde5b5c-146b-451b-968d-552d88a95e5a
    Page Layout                     : SinglePage
    Page Mode                       : UseNone
    Page Count                      : 111
    
    EXIF Metadata provided by EXIF.tools

    Navigation menu