Trailing-Edge
-
PDP-10 Archives
-
BB-F492Z-DD_1986
-
10,7/703anf/dn8tsk.mem
There are 3 other files named dn8tsk.mem in the archive. Click here to see a list.
DN8x-SERIES REMOTE STATION MACROS
3 April 1980
The DN8x-series remote station macros manual
describes an extra option available to the
customer who wishes to modify the DN8x system
software.
TOPS-10 7.01 Monitor
MACDLX V27A(667)
PAL10 V142A(144)
Digital Equipment Corporation . Maynard, Massachusetts
First Printing April 1980
The information in this document is subject to change
without notice and should not be construed as a commitment
by Digital Equipment Corporation. Digital Equipment
Corporation assumes no responsibility for any errors that
may appear in this document.
The software described in this document is furnished under a
license and may be used or copied only in accordance with
the terms of such license.
Digital Equipment Corporation assumes no responsibility for
the use or reliability of its software on equipment that is
not supplied by DIGITAL or its affiliated companies.
Copyright (C) 1980 by Digital Equipment Corporation
The postage-prepaid READER'S COMMENTS form on the last page
of this document requests the user's critical evaluation to
assist us in preparing future documentation.
The following are trademarks of Digital Equipment
Corporation:
DIGITAL DECsystem-10 MASSBUS
DEC DECtape OMNIBUS
PDP DIBOL OS/8
DECUS EDUSYSTEM PHA
UNIBUS FLIP CHIP RSTS
COMPUTER LABS FOCAL RSX
COMTEX INDAC TYPESET-8
DDT LAB-8 TYPESET-11
DECCOMM DECSYSTEM-20
CONTENTS
Page
PREFACE iv
1.0 PROGRAMMING CONVENTIONS 1
2.0 TASK SCHEDULING 1
3.0 CORE MANAGEMENT 3
4.0 TASK CONTROL MACROS 3
4.1 Tskgen Macro Call 4
4.2 EXIT Macro Call 4
5.0 CORE MANAGEMENT MACROS 5
5.1 CNKGET Macro Call 5
5.2 CNKFRE Macro Call 5
6.0 SCHEDULING MACROS 6
6.1 HIBER Macro Call 6
6.2 SLEEP Macro Call 7
6.3 WAKE Macro Call 7
6.4 TRIGER Macro Call 7
7.0 INTERTASK COMMUNICATION MACROS 8
7.1 SEND Macro Call 8
7.2 RECEIVE Macro Call 9
8.0 CLOCK REFERENCE MACRO 10
8.1 TIMER Macro Call 10
9.0 TERMINAL I/O MACROS 10
9.1 OPEN Macro Call 12
9.2 RELEASE Macro Call 13
9.3 PUT Macro Call 13
9.4 GET Macro Call 14
9.5 IMGPUT Macro Call 15
10.0 DM11-BB INTERFACE MACROS 16
10.1 GETBIT Macro Call 17
10.2 SETBIT Macro Call 18
10.3 CLRBIT Macro Call 19
11.0 SAMPLE TASK 20
iii
PREFACE
The DN8x-series remote station macros are an extra option
available to the customer who wishes to modify the DN8x
system software by adding special functions, such as polled
terminal handling, screen formatting, data field checking,
and input consolidation. The option itself consists of a
series of macro calls that allow programs added to the
system to communicate with the DN8x system software.
iv
PROGRAMMING CONVENTIONS
1.0 PROGRAMMING CONVENTIONS
Tasks are installed by assembling them with the DN8x system.
Any number of tasks can be included in a DN8x system,
subject to the limitations of available core space.
The DN8x system is written with the assumption that any
added code is correct. Therefore, programming errors in an
added task can corrupt the system software. There is little
protection of DN8x code from errant tasks.
In addition, added tasks must:
o not change the processor priority level.
o not modify the trap and device interrupt vectors of
devices used by the DN8x system. (You can, however,
access other attached devices at will.)
Macro arguments can be in registers, in core, or immediate,
but the arguments can not be on a task's stack.
Macros perform their functions and return immediately to the
calling task unless BLOCKING is specified. Macro execution
does not modify the registers, memory, or stack, unless the
results are returned in the registers or in memory.
2.0 TASK SCHEDULING
The DN8x system software provides four levels of task
priority. These levels are numbered 0 through 3, with 0
being the highest priority. The priority level of a user
task is specified by an argument in the TSKGEN macro call.
The DN8x system software maintains four task queues, one for
each priority level. The tasks in each queue are run in a
round robin. All tasks in a queue must be marked not
runnable before tasks in a lower priority level queue are
run.
The DN8x system software assigns each task a unit of run
time when the task is scheduled for execution. The unit of
run time is an assembly parameter whose name is TK.QTM. and
whose default value is 12 clock ticks or two-tenths of a
second. Once started a task runs to completion or until one
of the following conditions occurs:
o A HIBER or SLEEP macro is executed.
o A PUT macro, a GET macro, or an IMGPUT macro is
1
TASK SCHEDULING
executed in BLOCKING mode.
o A RECEIVE macro is executed in BLOCKING mode when
its message queue is empty.
o A user timeout occurs.
o An EXIT macro is executed.
o A higher priority task becomes executable.
When a task executes a HIBER macro, the task is marked not
runnable and remains in that state until some I/O activity
occurs for the task or until the time specified by the HIBER
macro has elapsed.
When a task executes a SLEEP macro, the task is marked not
runnable and remains in that state until the time specified
by the SLEEP macro has elapsed.
When a task executes a PUT macro, a GET macro, or an IMGPUT
macro in BLOCKING mode, the task is marked not runnable and
remains in that state until the operation has completed.
When a task executes a RECEIVE macro in BLOCKING mode and
the task message queue is empty, the task is marked not
runnable. When another task executes a SEND macro addressed
to the not runnable task, it is marked runnable, and will
resume execution when it reaches the top of its priority
queue.
If a task runs longer than its assigned run time, the task
is marked not runnable and placed at the end of its priority
queue. (This safeguard prevents loops in a user task from
locking out other tasks.)
When a task executes an EXIT macro, the task is marked not
runnable. The task will run again only if the DN8x system
is reloaded or restarted, or if another task executes a
TRIGER macro for the inactive task.
When the DN8x system is initialized, all tasks in the system
are marked runnable, beginning at the starting addresses
specified by their TSKGEN macros. Tasks that are started by
a TRIGER macro call also begin at their starting addresses.
When tasks are restarted after a power failure or other
system restart condition, the tasks begin at the restart
addresses specified by their TSKGEN macros.
2
TASK SCHEDULING
NOTE
The DN8X system software
reclaims all assigned buffer
space before performing the
task restart. Tasks cannot,
therefore, make references to
buffer space assigned to them
prior to restart.
3.0 CORE MANAGEMENT
The DN8x system software provides buffer management services
for added tasks. These services are invoked with the CNKGET
and CNKFRE macros, which dynamically allocate and deallocate
buffer areas.
The buffers, called chunks, are fixed in length and are
specified at assembly time by the system parameter CNKSIZ.
Chunks not allocated to a task are stored on a linked list.
This linked list is generated during the system
initialization process and occupies all the free core space.
NOTE
The DN8x system software
reclaims all assigned buffers
before performing the task
restart. Tasks cannot,
therefore, make references to
buffer space assigned to them
prior to the system restart.
4.0 TASK CONTROL MACROS
3
TASK CONTROL MACROS
4.1 Tskgen Macro Call
Function:
The TSKGEN macro defines a specific task within the
DN8x system and provides task scheduling information.
The TSKGEN macro must be the first statement in a task.
The TSKGEN macro is not an executable statement.
Command Format:
TSKGEN name, stadr, rstadr, priority, pdlsiz
name A 3-character task name used as an argument
in the SEND, WAKE, and TRIGER macro calls.
stadr The task starting address, used when the DN8x
system is first loaded and when the TRIGER
macro references the task.
rstadr The task restart address, used when the DN8x
system is restarted after a power failure or
other system restart condition.
priority The task priority in the range 0 to 3, where
0 is the highest priority.
pdlsiz The number of words (octal) the task requires
on the stack.
Example:
TSKGEN FOO,FOOBEG,FOORST,3,20
;task name is FOO
;starting address is FOOBEG
;restart address is FOORST
;priority level is 3
;stack length is 20 (octal) words
4.2 EXIT Macro Call
Function:
The EXIT macro marks the task executing the call not
runnable. The task can be marked runnable by a TRIGER
4
TASK CONTROL MACROS
macro call from another task or by a system restart.
Command Format:
EXIT
5.0 CORE MANAGEMENT MACROS
5.1 CNKGET Macro Call
Function:
The CNKGET macro call requests the DN8x system to
allocate a chunk to the calling task. If a chunk is
available, the chunk address is placed into the
specified location and the Z bit in the PS word is
cleared upon return to the calling task. If a chunk is
not available, the specified location is cleared and
the Z bit in the PS word is set upon return to the
calling task.
Command Format:
CNKGET adr
adr The location where the chunk address is to be
stored.
Example:
CNKGET R3 ;get a chunk and return its address
;in register 3
NOTE
The CNKGET macro does not clear the
allocated buffer.
5.2 CNKFRE Macro Call
Function:
The CNKFRE macro call returns a specified chunk to the
linked list controlled by the DN8x system.
5
CORE MANAGEMENT MACROS
Command Format:
CNKFRE adr
adr The location containing the address of the
chunk to be deallocated.
Example:
CNKFRE FRED ;deallocate the chunk whose address is
stored at FRED
NOTE
The CNKFRE macro does not clear
the deallocated buffer.
6.0 SCHEDULING MACROS
6.1 HIBER Macro Call
Function:
The HIBER macro call marks a task not runnable until a
specified period of time elapses, until I/O activity
occurs, or until another task issues a WAKE macro to
the not runnable task. The optional argument, if
present, specifies the elapsed time in clock ticks for
the task to be marked not runnable.
Command Format:
HIBER arg
arg (optional) The location containing the number
of clock ticks to wait before the task is
marked runnable.
Examples:
HIBTIM:3
HIBER HIBTIM ;suspend for a maximum of 3 clock ticks
HIBER ;suspend until I/O done
6
SCHEDULING MACROS
6.2 SLEEP Macro Call
Function:
The SLEEP macro marks a task not runnable for a
specified time period.
Command Format:
SLEEP arg
arg The location containing the number of clock
ticks to elapse before the task is marked
runnable.
Examples:
SLPTIM:3
SLEEP SLPTM ;suspend the task execution for three
clock ticks
6.3 WAKE Macro Call
Function:
The WAKE macro call marks runnable a task previously
suspended by a HIBER macro call. If the task named by
the WAKE macro call is not marked not runnable, the
WAKE macro call has no effect.
Command Format:
WAKE name
name The name of the task to be marked runnable.
Example:
WAKE FOO ;mark FOO runnable
6.4 TRIGER Macro Call
Function:
The TRIGER macro call marks runnable a task whose
execution has been terminated by an EXIT macro call.
7
SCHEDULING MACROS
Command Format:
TRIGER name
name The name of the task to be marked runnable.
Example:
TRIGER ODT ;run the task ODT
7.0 INTERTASK COMMUNICATION MACROS
The DN8x system provides intertask communication with the
SEND and RECEIVE macro calls. These two macro calls access
the message queue associated with each task. The length of
the message queue is a system assembly parameter whose name
is TKSQSZ and whose default value is 10 octal.
The SEND macro call places a 1-word message on the message
queue of the specified task, and then returns to the calling
task.
The RECEIVE macro call retrieves a 1-word message from the
message queue of the task that executes the macro. Messages
are retrieved from the queue in a first in, first out
sequence.
A form of task synchronization is provided by the BLOCKING
and NONBLOCKING options for the RECEIVE macro call. The
RECEIVE BLOCKING macro call marks the task not runnable when
the message queue is empty. The RECEIVE NONBLOCKING macro
call proceeds with task execution regardless of the message
queue status.
7.1 SEND Macro Call
Function:
The SEND macro call places a 1-word message into the
message queue of the receiving task.
If the receiving task is hibernating or has previously
executed a RECEIVE BLOCKING, the receiving task is
marked runnable.
If the SEND macro call is successful, the N bit in the
PS word is cleared. If the SEND macro call is
unsuccessful, the N bit in the PS word is set. A SEND
8
INTERTASK COMMUNICATION MACROS
macro call is unsuccessful if the receiving message
queue is full.
Command Format:
SEND name,adr
name The name of the receiving task as specified
by its TSKGEN macro.
adr The location of the 1-word message that will
be sent to the receiving task.
Examples:
SEND ODT,R0 ;send ODT the contents
;of register 0
BMI DIE ;go to DIE if SEND unsuccessful
SEND FOO,FOOBAR ;send FOO the contents of FOOBAR
BMI DIE
7.2 RECEIVE Macro Call
Function:
The RECEIVE macro call extracts the first 1-word
message from the task message queue. If a message is
returned, the N bit in the PS word is cleared. If the
message queue is empty when the RECEIVE NONBLOCKING
macro call is executed, no message is returned and the
N bit in the PS word is set. If the RECEIVE BLOCKING
macro call is executed when the message queue is empty,
the task is marked not runnable. The task remains not
runnable until some other task puts a message into the
message queue of the receiving task, which marks the
task runnable.
Command Format:
RECEIVE adr,mode
adr The address where the 1-word message is
placed.
mode Either the word BLOCKING or the word
NONBLOCKING.
9
INTERTASK COMMUNICATION MACROS
Examples:
RECEIVE R4,NONBLOCKING ;test for a message
BPL WIN ;go to WIN if a message
;is received
8.0 CLOCK REFERENCE MACRO
8.1 TIMER Macro Call
Function:
The TIMER macro call places the 2-word system up-time,
measured in clock ticks, into the specified address and
address+2. Each clock tick represents 1/60 of a second
(1/50 of a second for 50 hertz power). The clock ticks
are derived from the DN8x system line frequency clock.
Command Format:
TIMER adr
adr The destination for the 2-word system
up-time.
Example:
TIMER TLOC ;put the up-time
;into TLOC and TLOC+2
9.0 TERMINAL I/O MACROS
The DN8x system includes five terminal I/O macros: OPEN,
RELEASE, PUT, GET, and IMGPUT. These macro calls enable the
user task to intercept and manipulate characters moving
between the terminals and the network host.
The OPEN macro call reserves a terminal for the exclusive
use of the calling task. When a task has exclusive use of a
terminal as an input device, characters from the terminal go
to the task rather than to the network host. When a task
has exclusive use of a terminal as an output device, no
other task can send characters to the terminal. Data paths
with and without exclusive terminal use are illustrated in
Figures 1 and 2. ;.fg21;.c Figure 1 Data Paths Without
10
TERMINAL I/O MACROS
Exclusive Use of Terminal
Figure 2 Data Paths With Exclusive Use of Terminal
The RELEASE macro call cancels the exclusive use of a
terminal. If no task has exclusive use of a terminal, any
task in the system can issue PUT and GET macro calls to the
terminal. The CTY is usually left free so that any task in
the system can send error messages.
The PUT macro call sends a single character to either the
network host or to a terminal.
The GET macro call requests a single character from either
the network host or from a terminal.
The IMGPUT macro call sends a character string to a
terminal.
The PUT, GET, and IMGPUT macro calls can be executed as
either BLOCKING or NONBLOCKING calls. BLOCKING macro calls
mark the calling task not runnable until the I/O operation
is complete. NONBLOCKING macro calls return immediately to
the calling task.
11
TERMINAL I/O MACROS
9.1 OPEN Macro Call
Function:
The OPEN macro call reserves a terminal keyboard or
printer for the exclusive use of the calling task.
When a task has exclusive use of a terminal, no other
task can access that terminal until the OPEN macro call
has been canceled by a RELEASE macro call.
If the OPEN macro call is successful, the N bit in the
PS word is cleared. If the OPEN macro call is
unsuccessful, the N bit in the PS word is set.
Command Format:
OPEN line,dev
line The octal physical line number of the
terminal or -1, indicating the CTY.
dev Either the word KEYBOARD or the word PRINTER.
Examples:
OPEN #2,PRINTER ;get exclusive use of a TTY's
printer
MOV #0,R5 ;load a line designator into
register 5
OPEN R5,KEYBOARD ;get exclusive use of the keyboard
attached to channel 0
NOTE
Two OPEN macro calls must
be used to obtain
exclusive use of both the
keyboard and the printer
on a given terminal: one
specifying KEYBOARD and
another specifying
PRINTER.
12
TERMINAL I/O MACROS
9.2 RELEASE Macro Call
Function:
The RELEASE macro call cancels the exclusive use of a
terminal keyboard or printer by a task.
If the RELEASE macro call is successful, the N bit in
the PS word is cleared. If the RELEASE macro call is
unsuccessful, the N bit in the PS word is set.
Command Format:
RELEASE line,dev
line The octal physical line number of the
terminal or -1, indicating the CTY.
dev Either the word KEYBOARD or the word PRINTER.
Examples:
MOV #-1,R3 ;load the CTY designator
RELEASE R3,PRINTER ;release the CTY printer
RELEASE R3,KEYBOARD ;release the CTY keyboard
NOTE
Two RELEASE macro calls
must be used to
relinquish both the
keyboard and the printer
of a given terminal:
one specifying KEYBOARD
and another specifying
PRINTER.
9.3 PUT Macro Call
Function:
The PUT macro call sends a single character to a
terminal printer or to the network host. The terminal
printer is specified by the argument PRINTER; the
network host is specified by the argument KEYBOARD.
13
TERMINAL I/O MACROS
The PUT macro call can be either BLOCKING or
NONBLOCKING. The BLOCKING call marks the calling task
as not runnable until the operation is complete; the
NONBLOCKING call returns immediately to the calling
task.
If the PUT macro call is successful, the N bit in the
PS word is cleared. If the PUT macro call is
unsuccessful, the N bit in the PS word is set.
Command Format:
PUT line,dev,mode,adr
line The physical channel number of the terminal
or -1, indicating the CTY.
dev The word PRINTER, indicating the terminal, or
the word KEYBOARD, indicating the network
host, as the destination.
mode The word BLOCKING or the word NONBLOCKING.
adr The address of the single character to be
sent.
Examples:
PUT #-1,PRINTER,BLOCKING,IDLOC ;print the char in
location
CLR R2 ;IDLOC on the CTY
PUT #2,PRINTER,NONBLOCKING,R4 ;print the char in reg 4
on line 0
BMI LOST ;go to LOST if
unsuccessful
9.4 GET Macro Call
Function:
The GET macro requests a single character either from a
terminal or from the network host. The terminal is
specified by the argument KEYBOARD; the network host
is specified by the argument PRINTER.
The GET macro call can be either BLOCKING or
NONBLOCKING. The BLOCKING call marks the calling task
14
TERMINAL I/O MACROS
not runnable until the operation is complete; the
NONBLOCKING call returns immediately to the calling
task.
If the GET macro call is successful, the N bit in the
PS word is cleared. If the GET macro call is
unsuccessful, the N bit in the PS word is set.
Command Format:
GET line,dev,mode,adr
line The physical octal channel number of the
terminal or -1, indicating the CTY.
dev The word KEYBOARD, indicating the terminal,
or the word PRINTER, indicating the network
host as a character source.
mode The word BLOCKING or the word NONBLOCKING.
adr The destination address for the requested
character.
Examples:
MOV #11,R0 ;setup for line 9
GET R0,KEYBOARD,BLOCKING,R1 ;get the next char
BMI ONO ;check for no char
MOV #7,FRED ;change to line 7
GET FRED,PRINTER,NONBLOCKING,R3 ;get a char from the
network host
BMI ONO ;check for no char
9.5 IMGPUT Macro Call
Function:
The IMGPUT (IMaGePUT) macro call sends a string of
characters to a terminal.
The IMGPUT macro call can be either BLOCKING or
NONBLOCKING. The BLOCKING call marks the calling task
not runnable until the operation is complete; the
NONBLOCKING call returns immediately to the calling
15
TERMINAL I/O MACROS
task.
If the IMGPUT macro call is successful, the N bit in
the PS word is cleared. If the IMGPUT macro call is
unsuccessful, the N bit in the PS word is set.
Command Format:
IMGPUT line,PRINTER,mode,count,adr
line The physical octal channel number of the
terminal.
mode The word BLOCKING or the word NONBLOCKING.
count The octal number of characters in the string.
adr The address of the leftmost character of the
character string.
Examples:
C12: 12
FOO: .ASCII/DECSYSTEMS/ ;10 char print string
IMGPUT DEST,PRINTER,BLOCKING,C12,FOO
;type DECSYSTEM on
tty.
10.0 DM11-BB INTERFACE MACROS
The DM11-BB is a 16-line modem control multiplexer for the
terminal lines on the DN8x system that provides an interface
to the Bell 103 and 202 type modems or their equivalents.
The DN8x system includes three macros that reference the
DM11-BB: GETBIT, SETBIT, and CLRBIT. These macro calls
enable a task to access and to manipulate control bits
within the DM11-BB LINE STATUS REGISTER.
The GETBIT macro call retrieves seven bits from the LINE
STATUS REGISTER, as well as other bits supplied by the DN8x
system (see Section 10.1 for the names and positions of the
status bits).
The SETBIT and CLRBIT macro calls set and clear the DATA
TERMINAL READY, REQUEST TO SEND, and SECONDARY TRANSMIT
status bits in the DM11-BB LINE STATUS REGISTER. These two
macro calls also return status information to the calling
16
DM11-BB INTERFACE MACROS
task.
10.1 GETBIT Macro Call
Function:
The GETBIT macro call retrieves seven bits from the
DM11-BB modem control LINE STATUS REGISTER and four
status bits from the DN8x system, and then stores the
bits into a specified location. The names of the
status bits and their bit positions within the word are
shown below:
BIT POSITION NAME OR FUNCTION
15 Set to 1 if either bit 8 or bit 9 is set
to 1.
14 Set to 0.
13 Set to 0.
12 Set to 0.
11 Set to 0.
10 Set to 0.
9 Set to 0 if the network host is alive
(DS.DIE and DS.DSC are both 0).
Otherwise, set to 1.
8 Set to 0 if the line is connected
(DS.CON is set to 1). Otherwise, set to
1.
7 RING bit from the LINE STATUS REGISTER.
6 CARRIER bit from the LINE STATUS
REGISTER.
5 CLEAR TO SEND bit from the LINE STATUS
REGISTER.
4 SECONDARY RECEIVE bit from the LINE
STATUS REGISTER.
3 SECONDARY TRANSMIT bit from the LINE
STATUS REGISTER.
17
DM11-BB INTERFACE MACROS
2 REQUEST TO SEND bit from the LINE STATUS
REGISTER.
1 DATA TERMINAL READY bit from the LINE
STATUS REGISTER.
0 Set to 1 if the device is assembled as a
data set line.
Command Format:
GETBIT line,adr
line The octal physical line number.
adr The destination of the status bits.
Examples:
GETBIT R2,R1 ;place the status bits of the line
;specified in Register 2 into Register 1
10.2 SETBIT Macro Call
Function:
The SETBIT macro call selectively sets three status
bits in the DM11-BB LINE STATUS REGISTER. The bits set
are specified by placing a 1 in the corresponding bit
position of the mask argument in the macro call. The
bits set can be any combination of the DATA TERMINAL
READY, REQUEST TO SEND, and SECONDARY TRANSMIT bits
(see Section 10.1 for the names and positions of the
status bits).
The SETBIT macro call returns the DM11-BB status bits
as described in Section 10.1, GETBIT Macro Call.
Command Format:
SETBIT line,result,mask
line The octal physical line number.
result The location that contains the status bits
upon return.
mask The location that specifies the bits to be
set to 1.
18
DM11-BB INTERFACE MACROS
Examples:
MOV #6,R2 ;Set up the bit mask for REQUEST TO
SEND and DATA TERMINAL READY
SETBIT #1,R3,R2 ;for line 1
;and return the result in Register
3
10.3 CLRBIT Macro Call
Function:
The CLRBIT macro call selectively clears three status
bits in the DM11-BB LINE STATUS REGISTER. The bits
cleared are specified by placing a 1 in the
corresponding bit position of the mask argument in the
macro call. The bits cleared can be any combination of
the DATA TERMINAL READY, REQUEST TO SEND, and SECONDARY
TRANSMIT bits. (See Section 10.1 for the names and
positions of the status bits.) The CLRBIT macro call
returns the DM11-BB status bits as described in Section
10.1.
Command Format:
CLRBIT line,result,mask
line The octal, physical line number.
result The location that contains the status bits
upon return.
mask The location that specifies the bits to
clear.
Examples:
MOVE #2,R2
CLRBIT R1,R2,R2 ;clear the DATA TERMINAL READY bit
;on the line specified in Register 1
;and put the status bits into
;Register 2
19
SAMPLE TASK
11.0 SAMPLE TASK
The task shown below is a simple routine to read addresses
from the console terminal and print the contents of those
addresses. The user types in enough digits to specify the
address and then types a slash (/). The task then prints
the contents of the address. this simple task demonstrates
the use of many DN8X system macro calls.
TSKGEN ODT,20
ODT: OPEN CTY,KEYBOARD
BMI ODT.99 ;IN CASE ALREADY IN USE
OPEN CTY,PRINTER
BMI ODT.99 ;IN CASE ALREADY IN USE
ODT.10: CLR ODTLOC ;CLEAR ADDRESS WE ARE
;EXAMINING
ODT.12: GET CTY,KEYBOARD,BLOCKING,R0
;GET A CHARACTER
;FROM THE CTY
BMI ODT.99 ;SHOULD NOT LOSE HERE
PUT CTY,PRINTER,NUMBLOCKING,R0
;ECHO THE CHARACTER
BMI ODT.99 ;IN CASE WE LOSE
BIC #^C177,R0 ;STRIP THE PARITY
CMP #57,R0 ;"/" OPENING CURRENT
;LOCATION
BEQ ODTOPN
CMP R0,#70 ;CHECK FOR NOT NUMERIC
BPL 18$
CMP R0,#60 ;CHECK FOR NOT NUMERIC
BMI 18$
ANSL ODTLOC
ASL ODTLOC
ASL ODTLOC
BIC #70,R0 ;MAKE CHARACTER A BINARY
;NUMBER
ADD R0,ODTLOC ;ACCUMULATE LOCATION
BR ODT.12 ;GET RESET OF NUMBER
18$: MOV #QESTXT,R1 ;I DON'T UNDERSTAND
JSR PC,ODTSTR
BR ODT.10
ODTOPN: MOV #TABTXT,R1
JSR PC,ODYSTR
MOV @ODTLOC,R0 ;EXAMINE MEMORY
JSR PC,ODTOTY ;TYPE THEM
MOV #CRLTXT,R1 ;CARRIAGE RETURN/
;LINE FEED
JSR PC,ODTSTR ;TYPE THEM
BR ODT.10
;HERE TO TYPE AN OCTAL NUMBER
20
SAMPLE TASK
ODTOTY: MOV R0,-(P) ;SAVE DATA
ROR R0
ROR R0
ROR R0
BIC #160000 ;STRIP PHANTOM BITS
BEQ 20$
JSR PC,ODTOTY ;KEEP GOING FOR
;RESET OF WORD
20$: MOV (P)+,R0 ;GET NEXT MOST
;SIGNIFICANT PART
BIC #^C7,R0 ;STRIP EXTRA BITS
BIS #60,R0 ;CONVERT TO ASCII
PUT CTY,PRINTER,NUNBLOCKING,R0
RTS PC
ODTSTR: MOVB (R1)+,R0 ;GET NEXT BYTE TO TYPE
BNE 10$
RTS PC
10$ PUT CTY,PRINTER,NUNBLOCKING,R0
BR ODTSTR
ODT.99: EXIT ;FATAL ERROR
;SO STOP RUNNING
ODTLOC: .BLKW 1 ;CURRENT LOCATION
;TO EXAMINE
HLPTXT: .ASCIZ / RUNNING ODT/
QESTXT: .ASCIZ /? /
TABTXT: .ASCIZ / /
CRLTXT: .BYTE 15,12,0
.EVEN
21