Google
 

Trailing-Edge - PDP-10 Archives - walsh_goodStuff_1600 - more-uns/16ldif.mem
There are no other files named 16ldif.mem in the archive.



Title:  BLISS-16C V4 and BLISS-32 V10 Differences

Specification Status:  For Information

Architectural Status:  N/A

File:  16LDIF.RNO

PDM #: not used

Date:  6 September 1978

Superseded Specs:  "BLISS-16C V3 and BLISS-32 V6 Differences",
                   27 March 1978
Author:  Ron Brender

Typist:  Corinne DeLegge



Abstract:  The differences between BLISS-16C V4 and BLISS-32  V10
           are presented and discussed.  Specifications unique to
           BLISS-16C are detailed.  This document is a  companion
           to  "A Summary of BLISS-16C V4" (B16SUM).  Both are to
           be used in  combination  with  the  BLISS-32  Language
           Guide.


Revision History:

(From BLISS-16C V1 to V2)

1.  Add the precompiled declaration library facility:
     a.  LIBRARY declaration
     b.  LIBRARY and NOLIBRARY list-options of the LIST switch
     c.  /LIBRARY command switch

(From BLISS-16C V2 to V3)

2.  Add condition handling facilities
     a.  ENABLE declaration
     b.  Signal expressions: SIGNAL, SIGNAL_STOP, SETUNWIND
     c.  VOLATILE attribute on data- and bind-data-declarations

3.  Add compilation option to  automatically  invoke  the  MACY11
    assembler  to  produce  a  PDP-11  object module and assembly
    listing of the compiled code.

(From BLISS-16C V3 to V4)

4.  Add CH$COMPARE character-handling-function

5.  Allow REQUIRE and UNDECLARE in /LIBRARY compilation
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL      Page 3



                             Table of Contents


1.     Overview

       1.1   Target Hardware Architectures
       1.2   Implementation Limitations

2.     BLISS-16C Specific Module Switches

       2.1   OBJECT Module Switch
       2.2   ADDRESSING_MODE Module Switch
       2.3   IDENT Module Switch
       2.4   OLDBLISS Module Switch

3.     BLISS-16C Machine Specific Functions

       3.1   DECX
       3.2   HALT
       3.3   Memory Management
       3.4   Processor Status
       3.5   RESET
       3.6   ROT
       3.7   SWAB
       3.8   WAIT
       3.9   NOP

4.     BLISS-16C Linkages

5.     BLISS-16C Condition Handling


                                Appendices


A.     BLISS-16C and BLISS-32 Language Differences

B.     BLISS-16C and BLISS-32 Operational Differences
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL      Page 4



                BLISS-16C V4  AND BLISS-32 V10  DIFFERENCES



1.0  OVERVIEW

This document presents a complete statement of the differences between
BLISS-16C  V4  and  BLISS-32 V10.  Functional specifications unique to
BLISS-16C are given,  but  specifications  common  with  BLISS-32  and
BLISS-36C are not restated from other documents except where necessary
to present and discuss the nature of the differences.


The  following  documents   should   be   consulted   for   additional
specifications:

     "A Summary of BLISS-16C V4"
     "BLISS-32 Language Guide", Second Edition
     "Common BLISS Supplement to the BLISS-32 Language Guide"


When the Third Edition of the BLISS-32 Language Guide is available  it
supercedes both the Second Edition and the Common BLISS Supplement.


The differences identified in the following generally result from  two
kinds  of  considerations:   differences  between  the target hardware
architectures, and limitations in  the  technique  used  to  implement
BLISS-16C.



1.1  Target Hardware Architectures

PDP-11 memory is organized as 8-bit bytes.  The primary unit  of  data
is the word consisting of 16 bits - two 8-bit bytes aligned at an even
address.  Fields of up to 16 bits  can  be  accessed  with  reasonable
efficiency;   however,  only a byte or a word can be directly accessed
without using sequences of shift and mask operations.


VAX memory is organized as 8-bit bytes.  The primary unit of  data  is
the longword consisting of 32 bits  -  four 8-bit bytes.  Fields of up
to 32 bits in size can be efficiently accessed  starting  at  any  bit
position;  there are no boundary limitations.


The language differences that result from these characteristics are:

     1.  The allocation-unit LONG of  BLISS-32  has  no  corresponding
         interpretation in BLISS-16C.

     2.  Field selectors in BLISS-16C are limited to fields completely
         contained in a single word.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL      Page 5
OVERVIEW


         Note that signed field extension is supported in BLISS-16C.



1.2  Implementation Limitations

The BLISS-16C compiler is implemented using the BLISS-11  compiler  as
an  integral part of its operation.  BLISS-16C consists of two phases:
a translation phase that processes the BLISS-16C source  and  produces
an intermediate BLISS-11 source, and a BLISS-11 compilation phase.


In some cases, extensions and modifications were made to the  BLISS-11
compiler  to  make  BLISS-16C  operate  as  a  normal  compiler and to
minimize restrictions in BLISS-16C due to  the  use  of  BLISS-11.   A
number of limitations could not, however, be overcome.


Features of BLISS-32 that cannot be provided because of this include:

     o  Restrictions on names (see section A.2.1.4)

     o  The attributes

             ADDRESSING_MODE (not to be confused with module switch)
             ALIGN
             WEAK

     o  The declaration

             FORWARD (not to be confused with FORWARD ROUTINE)

     o  Some minor compilation control options
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL      Page 6
BLISS-16C SPECIFIC MODULE SWITCHES


2.0  BLISS-16C SPECIFIC MODULE SWITCHES


There is one module switch, OBJECT, that is unique to BLISS-16C.   The
module  switches,  ADDRESSING_MODE,  IDENT and OLDBLISS are present in
BLISS-32 or BLISS-36C  but  have  slightly  different  specifications.
These switches are described in the following sections.



2.1  OBJECT Module-Switch

The module-switch

                  { ABSOLUTE    }
         OBJECT ( { RELOCATABLE } )

specifies properties  of  the  object  module  to  be  produced.   The
default, if OBJECT is not given, is RELOCATABLE.


RELOCATABLE indicates that a standard relocatable object module is  to
be  produced.   Such  an  object  module must be processed by a linker
(task builder) in order to be prepared for loading and execution.


ABSOLUTE indicates that an absolute object module is to  be  produced.
Such  an  object  module does not need to be linked.  When ABSOLUTE is
specified, PSECT declarations and all forms of  EXTERNAL  declarations
are not valid.


The object option may also be specified in a  compilation  command  as
follows:

         /OBJECT:ABSOLUTE
         /OBJECT:RELOCATABLE



2.2  ADDRESSINGMODE Module-Switch

The module-switch

                           { ABSOLUTE }
         ADDRESSING_MODE ( { RELATIVE } )

specifies the type of addressing mode to be used when a choice  exists
between absolute (mode 37) and relative (mode 67).
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL      Page 7
BLISS-16C SPECIFIC MODULE SWITCHES




                                 NOTE

               In BLISS-16C V3, support of this feature
               is  limited  to  emitting the .ENABL AMA
               assembler  directive  for  the  ABSOLUTE
               option.   More complete support, such as
               generating absolute dispatch tables  for
               the  CASE  expression,  is  not  planned
               initially.



The addressing mode option may also be specified  in  the  compilation
command as follows:

         /ADDRESSING:ABSOLUTE
         /ADDRESSING:RELATIVE



2.3  IDENT Module Switch

In BLISS-16C, the quoted-string in an IDENT module switch must contain
only   Radix-50   characters.   If  the  string  is  longer  than  six
characters, it will be truncated to the initial six  for  use  in  the
object module identification.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL      Page 8
BLISS-16C SPECIFIC MODULE SWITCHES


2.4  OLDBLISS Module Switch

The module switch

         OLDBLISS = ' BLISS-11-module-switch ,... '

provides a means to invoke BLISS-11 specific module switches  for  use
with BLISS-16C.



                                 NOTE

               This   switch   is   provided    as    a
               transitional  aid  for  those  users who
               want to  use  BLISS-16C  in  combination
               with  existing  BLISS-11  modules and/or
               programs.

               It  is  not  upward  compatible  with  a
               possible  future  BLISS-16;   facilities
               comparable to existing  BLISS-11  module
               facilities  may  or may not be available
               in BLISS-16.



If OLDBLISS is specified, the text of the quoted-string is included in
the  intermediate  BLISS-11  module  head  after  the  module switches
produced by the BLISS-16C translator.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL      Page 9
BLISS-16C MACHINE SPECIFIC FUNCTIONS


3.0  BLISS-16C MACHINE SPECIFIC FUNCTIONS

Machine-specific-functions  provide  access  to   specialized   PDP-11
capabilities  that  are not otherwise available in the BLISS language.
In all cases, these functions are implemented as inline code sequences
and, thus, avoid the overhead of an ordinary routine call.


The %REF standard function must not be used as an actual parameter  in
calling any of these functions.


In order to use one of these functions, the name must be declared in a
BUILTIN declaration.


In  the  following  sections,  the  machine-specific   functions   are
presented  in  groups  of logically related operations.  The following
table lists all of the function names in alphabetical  order  and  the
section in which each is described.

         Function Name               Section

         DECX                        3.1
         HALT                        3.2
         NOP                         3.9
         MFPD                        3.3
         MFPI                        3.3
         MFPS                        3.4
         MTPD                        3.3
         MTPI                        3.3
         MTPS                        3.4
         RESET                       3.5
         ROT                         3.6
         SWAB                        3.7
         WAIT                        3.8
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 10
BLISS-16C MACHINE SPECIFIC FUNCTIONS


3.1  DECX

The DECX function provides a specialized routine call using  the  TRAP
instruction followed by arguments inline after the TRAP instruction.


Form of Call:

         DECX ( code, parameter ,... )


Parameters:

         code       - must be a compile-time  constant  expression  in
                      the  range  0  to  255.   The  constant value is
                      incorporated into  the  low  byte  of  the  TRAP
                      instruction.

         parameter  - must be a link-time constant expression.

Result:

         no value




3.2  HALT

The HALT function results in a HALT instruction and returns the  value
of the processor console switches after the processor is continued.


Form of Call:

         switches = HALT ( { display } )


Parameter:

         display    - (optional) value to be displayed in the console
                      lights


Result:

         switches   - value  of  the  console   switches   after   the
                      processor is continued
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 11
BLISS-16C MACHINE SPECIFIC FUNCTIONS


Notes:

     1.  If present, the parameter display is evaluated and placed  in
         register  0  immediately  preceding the HALT instruction.  On
         some  PDP-11  processors  the  contents  of  register  0   is
         displayed in the console lights when the processor is halted.

     2.  HALT is a privileged instruction on some PDP-11 processors.

     3.  Following the HALT instruction, the contents  of  the  switch
         register  is  read  from  the  I/O  page  if the value of the
         function call is used;  the I/O page is not referenced if the
         value  is  not used.  In systems with memory management, this
         may result in an access violation or an unpredictable value.




3.3  Memory Management

Four functions (MFPD, MFPI, MTPD, MTPI) provide a means to move values
to  or  from previous data or instruction spaces.  These functions are
only valid on processors equipped with  the  KT-11  memory  management
hardware.


Form of Call:

         value  =  MFPD ( address )
         value  =  MFPI ( address )
                   MTPD ( value, address )
                   MTPI ( value, address )


Parameters:

         address    - the address  in  the  addressing  space  of  the
                      previous processor mode from which or to which a
                      word value is to be  moved.   Must  be  an  even
                      address.

         value      - the value of a word to be  moved  to  the  given
                      address in the previous address space.


Result:

         value      - (MFPD and MFPI) the contents of the word fetched
                      from the given address in the previous space.

                    - (MTPD and MTPI) NOVALUE
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 12
BLISS-16C MACHINE SPECIFIC FUNCTIONS


3.4  Processor Status

The processor status functions provide a means  to  move  values  from
(MFPS)  or to (MTPS) the processor status word on those PDP-11 systems
where specific instructions must be used for this purpose.


Form of Call:

         psw = MFPS ()
               MTPS ( new-psw )


Parameters:

         new-psw    - value to be assigned as the new processor status
                      word


Result:

         psw        - fetched value of processor status word.


Notes:

     1.  The PDP-11 MFPS and MTPS instructions are available  only  on
         newer  members  of  the  PDP-11 family (e.g., LSI-11, -11/34,
         -11/60).



3.5  RESET

The RESET function performs a system wide hardware reset operation.


Form of Call:

         RESET ()


Result:

         no value


Note:

     1.  RESET is a privileged instruction on some PDP-11 processors.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 13
BLISS-16C MACHINE SPECIFIC FUNCTIONS


3.6  ROT

The ROT function performs a 17-bit circular rotate operation  using  a
given value and the processor C-bit.


Form of Call:

         result = ROT ( value, count )


Parameter:

         value      - the value to be rotated.

         count      - the number of bits that the second parameter  is
                      to  be rotated.  If count > 0, then rotate left;
                      if count < 0, then rotate right;   otherwise  no
                      rotate  is  performed.   Must  be a compile-time
                      constant expression.


Result:

         value rotated the given number of bits.




3.7  SWAB

The SWAB function swaps the high and low bytes of the given value.


Form of Call:

         result = SWAB ( value )


Parameter:

         value      - value  whose  high  and  low  bytes  are  to  be
                      swapped.


Result:

         swapped value
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 14
BLISS-16C MACHINE SPECIFIC FUNCTIONS


3.8  WAIT

The WAIT function performs a processor WAIT operation.


Form of Call:

         WAIT ()


Result:

         no value



3.9  NOP

The NOP function performs a processor NOP operation.


Form of Call:

         NOP ()


Result:

         no value
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 15
BLISS-16C LINKAGES 


4.0  BLISS-16C LINKAGES 

LINKAGE declarations  provide  a  means  to  optimize  the  time-space
requirements of routines by providing specialized control over details
of the calling sequence and the use of registers between routines.


The linkage capabilities defined in this section are similar to  those
provided   in  BLISS-32.   The  following  features  of  the  BLISS-32
specification are not included:

     o   JSB linkage-type

     o   GLOBAL, PRESERVE,  NOPRESERVE and NOTUSED linkage-options

     o   GLOBAL REGISTER and EXTERNAL REGISTER declarations

The BLISS-16C specification adds the following:

     o   JSR, EMT, TRAP, IOT  and INTERRUPT linkage-types

     o   CLEARSTACK and RTT linkage-options
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 16
BLISS-16C LINKAGES 


4.1  Syntax

______________________________________________________________________

  linkage-declaration  LINKAGE  linkage-definition ,... ;
______________________________________________________________________

  linkage-definition   linkage-name = linkage-type

                          { ( parameter-location ,... )  }
                          { nothing                      }

                          { : linkage-option ... }
                          { nothing              }
______________________________________________________________________

                       { CALL      }
                       { JSR       }
  linkage-type         { EMT       }
                       { TRAP      }
                       { IOT       }
                       { INTERRUPT }
______________________________________________________________________

                       { REGISTER = register-number  }
  parameter-location   { STANDARD                    }
                       { nothing                     }
______________________________________________________________________

  linkage-option       { CLEARSTACK }
                       { RTT        }
______________________________________________________________________

  linkage-name         name
______________________________________________________________________

  register-number      compile-time-constant-expression
______________________________________________________________________


The  keywords  CALL,  JSR,  EMT,  TRAP,  IOT,   INTERRUPT,   STANDARD,
CLEARSTACK, and RTT are unreserved names.


There are two predeclared linkage-names:

         BLISS
         FORTRAN
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 17
BLISS-16C LINKAGES 


4.2  Restrictions

The linkage-attribute given for a routine name in an EXTERNAL ROUTINE,
FORWARD  ROUTINE, BIND ROUTINE, or GLOBAL BIND ROUTINE must agree with
the linkage-attribute given in the  corresponding  ROUTINE  or  GLOBAL
ROUTINE declaration.


Linkage-names defined with EMT, TRAP or IOT linkage-type must  not  be
given  as  a  linkage-attribute  in  any  kind of routine declaration.
(Such a linkage-name must be used only in a general routine call.)


Linkage-names defined with INTERRUPT linkage-type must only be used as
a linkage-attribute in a ROUTINE or GLOBAL ROUTINE declaration.


The register-number value must be in the range 0 to 5.


The CLEARSTACK linkage-option must not be specified with the  CALL  or
JSR linkage-type.


If  the  CLEARSTACK  linkage-attribute  is  given,   the   number   of
actual-parameters  in a (general) routine-call must be the same as the
number of parameter-locations given.


The RTT  linkage-modifier  must  only  be  given  with  the  INTERRUPT
linkage-type.



4.3  Defaults

If a parameter-location is not given, then STANDARD is assumed.


If a routine-call or  routine  declaration  contains  more  actual  or
formal  parameters,  respectively,  than  are  given in the associated
linkage-definition, then STANDARD is assumed as the parameter-location
for each of the additional parameters.



4.4  Semantics

A linkage-definition defines  a  name  that  designates  a  particular
combination  of  calling sequence options.  Generally, such a name may
be used as a linkage-attribute in any kind of routine;  however,  this
is not true of all linkage-names.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 18
BLISS-16C LINKAGES 


The  linkage-type  CALL  specifies  that  the  PDP-11  JSR   and   RTS
instructions  are  to  be  used  by  the  compiled  code, and that the
parameters with STANDARD parameter locations will be materialized as a
counted vector whose address is passed in register 5 (R5).


The  linkage-type  JSR  specifies  that  the  PDP-11   JSR   and   RTS
instructions  are  to  be  used  by  the  compiled  code, and that the
parameters with STANDARD parameter locations will  be  placed  on  the
stack  (without  a parameter count) and accessed by the called routine
relative to the stack pointer (SP) register.


The linkage-type INTERRUPT specifies that a routine will  be  "called"
only  by  a  PDP-11  hardware  interrupt.  Such linkages are discussed
below.


If a REGISTER is specified as a parameter-location, the given register
will  be used as the location to which the actual parameter value will
be assigned, and correspondingly,  will  be  the  location  where  the
called  routine  will  expect to find the actual value.  This use of a
register location to transmit an actual parameter value  to  a  called
routine  does  not affect the semantics associated with the use of the
corresponding formal parameter names.


The CLEARSTACK linkage-option specifies  that  the  actual  parameters
placed  on  the stack in a routine call will be removed from the stack
by the called routine.  If CLEARSTACK is not specified, they will  not
be  removed  by  the called routine (and are the responsibility of the
caller).


The RTT linkage-option (which may be  used  only  with  the  INTERRUPT
linkage-type)  specifies that the PDP-11 RTT intruction should be used
to  exit  from  the  interrupt  routine  instead  of  the  normal  RTI
instruction.



4.5  INTERRUPT Linkage-Type

INTERRUPT must not  be  specified  as  a  linkage-type  except  in  an
ordinary-  or  global-routine  declaration.   It  specifies  that  the
routine being defined will only  be  "called"  by  a  PDP-11  hardware
interrupt  or  a  software simulation of an interrupt (e.g.  RSX SST).
(Interrupts may occur as a result of "external"  events  such  as  I/O
device  completion  or  programmed events such as execution of certain
instructions, EMT, IOT, and so on.)
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 19
BLISS-16C LINKAGES 


The number of formal parameters given for the routine must  equal  the
number  of  values  pushed  on the stack by the "call".  In most cases
this is  exactly  two.   However,  interrupt  routines  that  will  be
"called"  by general-routine-calls having a linkage-type of EMT, TRAP,
or IOT may have additional formal parameters.


The formal parameters of the routine correspond to the hardware values
in  the order pushed;  that is, the first formal parameter corresponds
to the first value pushed, the second formal parameter corresponds  to
the  second  value  pushed,  and so on.  Consequently, the last formal
parameter corresponds to the pushed program counter (PC) and the  next
to  last  formal  parameter corresponds to the pushed processor status
(PS).



4.6  Predefined Linkage Names

There are two predefined  linkage  names:   BLISS  and  FORTRAN.   The
specifications  for these are given in the "Common BLISS Supplement to
the BLISS-32 Language Guide".


Observe that these linkage-names are similar to the following:

     LINKAGE
         BLISS = JSR,
         FORTRAN = CALL;

The only difference is that the predeclared  linkage  FORTRAN  permits
the   use  of  the  linkage-functions  (ACTUALCOUNT,  ACTUALPARAMETER,
NULLPARAMETER) while the explicit declaration above does not.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 20
BLISS-16C LINKAGES 


4.7  General Routine Call

A routine whose address is computed during  execution  may  be  called
with  a  linkage other than the default linkage (as given by a LINKAGE
switch) using a general-routine-call.  The syntax of the call is:

______________________________________________________________________

  general-routine-     linkage-name
     call

                           ( routine-address

                           { , actual-parameter ,... }
                           { nothing                 }

                           )
______________________________________________________________________

  routine-address  }
  actual-parameter }   expression
______________________________________________________________________


A linkage-name defined with linkage-type INTERRUPT must not be used in
a general-routine-call.


In  a  general-routine-call,   the   routine-address   expression   is
interpreted  as  the  address  of  the  routine  to  be called and the
remaining expressions are interpreted as the actual parameters of  the
call.


In the following example,

         EXTERNAL ROUTINE
             F1 : FORTRAN,
             F2 : FORTRAN,
             F3 : FORTRAN;
         BIND
             TABLE = UPLIT(F1,F2,F3) : VECTOR;
         ...
         FORTRAN(.TABLE[.I], P1, P2)
         ...

the address of a FORTRAN routine to be called is computed by  fetching
an element of a vector.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 21
BLISS-16C LINKAGES 


In the above example, the routine call might also be  accomplished  by
the following, which is equivalent:

         BEGIN
         BIND ROUTINE
             R = .TABLE[.I] : FORTRAN;
         R(P1,P2)
         END


For the EMT, TRAP, and IOT linkage-types the following  special  rules
apply:

     o   For EMT and TRAP, the first value in the  parameter  list  is
         not  a routine-address.  Instead it is the value that will be
         incorporated into the low byte of the EMT or TRAP instruction
         itself.  It must be a compile-time constant expression in the
         range 0 to 255.

     o   For IOT,  all  of  the  values  in  the  parameter  list  are
         actual-parameters.  There is no routine-address parameter.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 22
BLISS-16C CONDITION HANDLING


5.0  BLISS-16C CONDITION HANDLING

Condition handling in BLISS-16C is is  very  similar  to  BLISS-32  as
described in Chapter 14 of the BLISS-32 Language Guide, Third Edition.
A few supplementary comments on differences are presented here.


References to VAX-11 and  VAX/VMS,  of  course,  do  not  apply.   The
Condition  Handling  Facility  (CHF)  in  BLISS-16C  is  part  of  the
BLISS-16C library and not dependent on any  PDP-11  operating  system.
CHF  does  not  interface  with  or  support  any  operating system or
hardware defined traps or interrupts.


The encoding of condition values is simpler in BLISS-16C compared with
BLISS-32.   In  BLISS-16C,  the  three low order bits are the severity
field (with the same codes as in BLISS-32) and the remaining  13  high
order  bits  are  the identity field.  The customer definition flag is
the high bit of the identity field.  No bits are  reserved  for  other
purposes.


The only system defined condition value is  the  one  for  the  unwind
signal.   The  name SS$_UNWIND is globally defined by the CHF software
(using symbol SS$.UN at object level) with a value of %O'77777'.


In  BLISS-16C,  the  predeclared  linkage-name  BLISS  must  be  given
(explicitly  or  by  default)  as  the  linkage-attribute of a handler
routine.  Routines that contain  an  enable-declaration  must  have  a
linkage-attribute  that  is  defined  with  either  the  JSR  or  CALL
linkage-types (this includes the predeclared linkage-names  BLISS  and
FORTRAN).


In BLISS-16C, the mechanism vector (passed as the second parameter  to
a  handler)  contains  two elements:  the count and the returned-value
location.  Thus, a handler determines a returned-value by assigning to
MECH[1] (instead of MECH[3] in BLISS-32).


The executable-function SETUNWIND must be called with  no  parameters.
The two optional parameters available in BLISS-32 are not supported.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 23
BLISS-16C CONDITION HANDLING


The following declarations are BLISS-16C versions of the macros  given
in Section 14.6.1 of the BLISS-32 Language Guide:


        FIELD
            CONDIT_FIELDS =
                SET
                STS$V_SEVERITY = [0,0,3,0],   ! Severity field
                STS$V_SUCCESS = [0,0,1,0],    ! Success field
                STS$V_COND_ID = [0,3,13,0],   ! Condition 
                                              !  identification
                STS$V_CUST_DEF = [0,15,1,0],  ! Customer definition
                TES;

        MACRO
            CONDITION_VALUE = BLOCK[1] FIELD(CONDIT_FIELDS) %;

        KEYWORDMACRO
            STS$VALUE (
                SEVERITY = SST$K_SEVERE,
                COND_ID,
                CUST_DEF = 1^15) =
                    (SEVERITY AND 7) OR
                    (COND_ID AND %O'17777')^3 OR
                    (IF CUST_DEF NEQ 0
                        THEN 1^15
                        ELSE 0)
                    %;

        MACRO
            STS$MATCH(A,B)=
                (((A) AND %O'177770') EQL ((B) AND %O'177770')) %;
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 24
BLISS-16C CONDITION HANDLING


          APPENDIX A       BLISS-16C AND BLISS-32 LANGUAGE DIFFERENCES

                  A.1      MODULES
                  A.1.1      Module-Switches
                  A.2      EXPRESSIONS
                  A.2.1      Primaries
                  A.2.1.1      Numeric-Literals
                  A.2.1.2      String-Literals
                  A.2.1.3      Plits
                  A.2.1.4      Names
                  A.2.1.5      Routine-Calls
                  A.2.1.6      Field-References
                  A.2.1.7      Structure-References
                  A.2.1.8      Blocks
                  A.2.1.9      Codecomments
                  A.2.2      Operator-Expressions
                  A.2.3      Executable-Functions
                  A.2.3.1      Standard-Functions
                  A.2.3.2      Supplementary-Functions
                  A.2.3.3      Machine-Specific-Functions
                  A.2.4      Control-Expressions
                  A.2.4.1      Conditional-Expressions
                  A.2.4.2      Case-Expressions
                  A.2.4.3      Select-Expressions
                  A.2.4.4      Loop-Expressions
                  A.2.4.5      Exit-Expressions
                  A.2.4.6      Return-Expressions
                  A.2.4.7      Signal-Expressions
                  A.3      CONSTANT-EXPRESSIONS
                  A.3.1      Compile-Time-Constant-Expressions
                  A.3.2      Link-Time-Constant-Expressions
                  A.4      DECLARATIONS
                  A.4.1      Attributes
                  A.4.1.1      The Allocation-Unit
                  A.4.1.2      The Extension-Attribute
                  A.4.1.3      The Structure-Attribute
                  A.4.1.3      The Field-Attribute
                  A.4.1.5      The Alignment-Attribute
                  A.4.1.6      The Initial-Attribute
                  A.4.1.7      The Volatile-Attribute
                  A.4.1.8      The Novalue-Attribute
                  A.4.1.9      The Linkage-Attribute
                  A.4.1.10     The Range-Attribute
                  A.4.1.11     The Addressing-Mode-Attribute
                  A.4.1.12     The Weak-Attribute
                  A.4.2      Data-Declarations
                  A.4.2.1      Own-Declarations
                  A.4.2.2      Global-Declarations
                  A.4.2.3      Forward-Declarations
                  A.4.2.4      External-Declarations
                  A.4.2.5      Local-Declarations
                  A.4.2.6      Stacklocal-Declarations
                  A.4.2.7      Register-Declarations
                  A.4.2.8      Global-Register-Declarations
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page 25
BLISS-16C CONDITION HANDLING


                  A.4.2.9      External-Register-Declarations
                  A.4.2.10     Map-Declarations
                  A.4.3      Structure-Declarations
                  A.4.4      Field-Declarations
                  A.4.5      Routine-Declarations
                  A.4.5.1      Ordinary-Routine-Declarations
                  A.4.5.2      Global-Routine-Declarations
                  A.4.5.3      Forward-Routine-Declarations
                  A.4.5.4      External-Routine-Declarations
                  A.4.6      Linkage-Declarations
                  A.4.7      Bound-Declarations
                  A.4.7.1      Literal-Declarations
                  A.4.7.2      External-Literal-Declarations
                  A.4.7.3      Bind-Data-Declarations
                  A.4.7.4      Bind-Routine-Declarations
                  A.4.8      Compiletime-Declarations
                  A.4.9      Macro-Declarations
                  A.4.9.1      Keyword-Macro-Declarations
                  A.4.9.2      Positional-Macro-Declarations
                  A.4.10     Require-Declarations
                  A.4.11     Library-Declarations
                  A.4.12     Builtin-Declarations
                  A.4.13     Psect-Declarations
                  A.4.14     Switches-Declarations
                  A.4.15     Label-Declarations
                  A.4.16     Undeclare-Declarations
                  A.4.17     Enable-Declarations
                  A.5      LEXICAL PROCESSING
                  A.5.1      Lexemes
                  A.5.2      Spaces
                  A.5.3      Separation Rules
                  A.5.4      Lexical-Conditionals
                  A.5.5      Lexical-Functions
                  A.5.6      Macro-Calls
                  A.5.6.1      Keyword-Macro-Calls
                  A.5.6.2      Positional-Macro-Calls
                  A.6      PREDECLARED NAMES
                  A.6.1      Literals
                  A.6.2      Macros
                  A.6.3      Structures
                  A.6.4      Linkages and Linkage-Functions
                  A.6.5      Character-Functions
                  A.7      MACHINE SPECIFIC NAMES
                  A.8      NAMES RESERVED FOR SPECIAL PURPOSES











                                APPENDIX A

                BLISS-16C AND BLISS-32 LANGUAGE DIFFERENCES



A.1  MODULES

A.1.1  Module-Switches


The following switches are supported in BLISS-16C with  meanings  that  are
analogous, but slightly different than BLISS-32:

     ADDRESSING_MODE
     CODE, NOCODE
     DEBUG, NODEBUG
     IDENT
     OPTLEVEL

ADDRESSING_MODE in BLISS-16C is roughly  a  subset  of  that  in  BLISS-32.
There  are  two  modes  (ABSOLUTE, RELATIVE) instead of the four (ABSOLUTE,
GENERAL, LONG_RELATIVE, WORD_RELATIVE) in BLISS-32.  The keyword forms  for
EXTERNAL  and  NONEXTERNAL are not supported.  NOCODE suppresses production
of the intermediate BLISS-11  source  text  and  the  BLISS-11  compilation
phase.   As  a  consequence,  no  listing  file  is produced;  however, the
intermediate file is produced and may be used as a listing file.  DEBUG  is
passed  through  to  BLISS-11  to  enable the use of the BLISS-11 debugging
package;  however, this debugger is not provided or supported.   The  IDENT
switch  in  BLISS-16C  permits  only  Radix-50  characters (since that is a
requirement  of  the  PDP-11  object  language);   BLISS-32  has  no   such
restriction.    OPTLEVEL   causes  certain  BLISS-11  optimization  related
switches to be selected, but is otherwise not directly supported.


The following switches are supported in BLISS-16C but not in BLISS-32:

     OBJECT
     OLDBLISS


The following list-options are supported  in  BLISS-32,  but  accepted  and
ignored in BLISS-16C:

     ASSEMBLY, NOASSEMBLY
     BINARY, NOBINARY
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-2
MODULES


The following list-options are supported in BLISS-16C with  interpretations
that are slightly different than in BLISS-32:

     COMMENTARY, NOCOMMENTARY
     SYMBOLIC, NOSYMBOLIC

SYMBOLIC controls the listing of the MACRO-11 machine code, and  COMMENTARY
controls the listing of the BLISS-11 intermediate source text.  The default
listing for BLISS-16C  includes  the  BLISS-16C  source,  the  intermediate
BLISS-11 text, and the generated MACRO-11 source code.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-3
EXPRESSIONS


A.2  EXPRESSIONS

A.2.1  Primaries

A.2.1.1  Numeric-Literals - 

Numeric-literals must be in the range

BLISS-16C:   -(2**15)  to  (2**15)-1

BLISS-32:    -(2**31)  to  (2**31)-1


Float-literals are not supported in BLISS-16C.



A.2.1.2  String-Literals - 

In BLISS-16C, a word value (including a %RAD50_11 string-literal) in a plit
or initial attribute must occur on a word boundary.


BLISS-16C does not support the %P string-type.


A string-literal that is not a plit-string in a plit  or  initial-attribute
must not contain more characters than shown below:


     String-Type       BLISS-16C       BLISS-32

     %ASCII            2               4

     %ASCIZ            1               3

     %ASCIC            1               3

     %RAD50_11         3               6




A.2.1.3  Plits - 

BLISS-16C does not support the allocation-unit LONG.


In a BLISS-16C (counted) PLIT, the count that precedes  the  plit-items  is
the  number  of PDP-11 words needed to represent the plit-items.  The count
is allocated in the preceding word.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-4
EXPRESSIONS


A.2.1.4  Names - 

In BLISS-16C, there are a number of restrictions on the use of  names  that
result  from  the intermediate BLISS-11 compilation and from constraints of
PDP-11 linkers.  Except as noted, these restrictions are  not  detected  or
enforced by BLISS-16C.

     1.  In  general,  names  must  be  unique  within  their   first   ten
         characters.   (This is because BLISS-11 accepts names of arbitrary
         length, but only uses the first ten  characters  as  significant.)
         Some  names  are  completely processed by the translator phase, do
         not get passed into the intermediate BLISS-11 text and hence,  are
         not subject to this restriction.  These are:

               Macro names
               Structure names
               Non-external literal names
               Compiletime names

     2.  Global and external names must be unique within  their  first  six
         characters  to  assure  correct  linking.   Six  characters is the
         maximum length in the object representation and BLISS-11 truncates
         longer names to six characters in the object module.

     3.  Module names must be unique within their  first  four  letters  to
         assure  correct  linking.  BLISS-11 uses the first four characters
         of the module-name to construct default  section  names  (.CSECTs)
         that  identify  parts  of the module image for debugging purposes;
         these may be superseded by PSECT declarations.

     4.  The following names are reserved by BLISS-11 and must not be  used
         in BLISS-16C:

               ASCII
               ASCIZ
               ASCIC
               AT
               BYTES
               CREATE
               CSECT
               DIV
               ELBANE
               INLINE
               INLINECOM
               LENGTH
               NSET
               RAD50
               SIGNAL
               TESN
               $CHARCOUNT
               $COUNT
               $LENGTH
               $NAME
               $QUOTE
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-5
EXPRESSIONS


               $REMAINING
               $STRING
               $UNQUOTE

         A warning diagnostic is given if any of these names appears  as  a
         name to be declared.

     5.  The following names are supported in BLISS-16C, but their BLISS-11
         meaning  is  required in the intermediate BLISS-11 text and hence,
         these names must not be declared for another purpose.

               BLISS
               EMT
               FORTRAN
               IOT
               TRAP

     6.  The following names are supported  as  machine-specific-functions,
         must be declared in a BUILTIN declaration in order to be used, but
         must not be declared for another purpose:

               DECX
               HALT
               NOP
               MFPD
               MFPI
               MFPS
               MTPD
               MTPI
               MTPS
               RESET
               ROT
               SWAB
               WAIT

     7.  The following names are reserved in  BLISS-16C  because  they  are
         reserved in BLISS-32, but have no meaning and/or are not supported
         in BLISS-16C:

               ALIGN
               LONG
               WEAK

     8.  The name character underscore, "_", is transformed to period, ".",
         in the object module.  (This is because underscore is not valid at
         object level, but period is available.)
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-6
EXPRESSIONS


A.2.1.5  Routine-Calls - 



A.2.1.6  Field-References - 

A field-selector <p,s,f> must satisfy the following restrictions:

BLISS-16C:    0  <  p
              0  <  s  <  16
              0  <  p+s  <  16
              f  =  0,1

BLISS-32:     0  <  s  <  32
              f  =  0,1

More intuitively, field-selectors in BLISS-16C must specify a field that is
completely contained in a single machine word.



A.2.1.7  Structure-References - 



A.2.1.8  Blocks - 



A.2.1.9  Codecomments - 



A.2.2  Operator-Expressions

In both BLISS-16C  and  BLISS-32,  the  address  relational  operators  are
implemented  as  unsigned integer relational operators (since valid address
values may overlap both positive and negative integer values).



A.2.3  Executable-Functions

A.2.3.1  Standard-Functions - 
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-7
EXPRESSIONS


A.2.3.2  Supplementary-Functions - 

See Section A.6.5.



A.2.3.3  Machine-Specific-Functions - 

Both BLISS-16C and BLISS-32 have  functions  that  are  specific  to  their
respective  target  hardware  architectures.   These  are detailed in their
respective specifications.



A.2.4  Control-Expressions

A.2.4.1  Conditional-Expressions - 



A.2.4.2  Case-Expressions - 



A.2.4.3  Select-Expressions - 



A.2.4.4  Loop-Expressions - 



A.2.4.5  Exit-Expressions - 



A.2.4.6  Return-Expressions - 



A.2.4.7  Signal-Expressions - 

The executable-function SETUNWIND must be  called  with  no  parameters  in
BLISS-16C;  the two optional parameters in BLISS-32 are not supported.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-8
CONSTANT EXPRESSIONS


A.3  CONSTANT EXPRESSIONS

A.3.1  Compile-Time-Constant-Expressions

A.3.2  Link-Time-Constant-Expressions

Link-time constant expressions are the same in  BLISS-16C  as  in  BLISS-32
except that the forms

         e1  rela  e2      and      e1 - e2

where e1 and e2 are link-time constant expressions and rela is one  of  the
relational  operators  for  addresses  (EQLA,  NEQA,  and  so  on)  are not
supported.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL     Page A-9
DECLARATIONS


A.4  DECLARATIONS

A.4.1  Attributes

A.4.1.1  The Allocation-Unit - 

LONG is supported in BLISS-32, but not BLISS-16C.



A.4.1.2  The Extension-Attribute - 



A.4.1.3  The Structure-Attribute - 

The allocation-actual parameter LONG is  supported  in  BLISS-32,  but  not
BLISS-16C.



A.4.1.4  The Field-Attribute - 



A.4.1.5  The Alignment-Attribute - 

Supported in BLISS-32, but not BLISS-16C.



A.4.1.6  The Initial-Attribute - 



A.4.1.7  The Volatile-Attribute - 



A.4.1.8  The Novalue-Attribute - 



A.4.1.9  The Linkage-Attribute - 
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-10
DECLARATIONS


A.4.1.10  The Range-Attribute - 



A.4.1.11  The Addressing-Mode-Attribute - 

Supported in BLISS-32, but not BLISS-16C.



A.4.1.12  The Weak-Attribute - 

Supported in BLISS-32, but not BLISS-16C.



A.4.2  Data Declarations

NOTE:  As detailed in section A.4.1, the following attributes are supported
in BLISS-32, but not BLISS-16C:

         alignment-attribute
         addressing-mode-attribute
         weak-attribute

This  information  is  not  repeated  in  the  following   data-declaration
differences.


Forward-, global-register- and external-register-declarations are supported
in BLISS-32, but not BLISS-16C.



A.4.2.1  Own-Declarations - 



A.4.2.2  Global-Declarations - 



A.4.2.3  Forward-Declarations - 

Supported in BLISS-32, but not BLISS-16C.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-11
DECLARATIONS


A.4.2.4  External-Declarations - 



A.4.2.5  Local-Declarations - 



A.4.2.6  Stacklocal-Declarations - 



A.4.2.7  Register-Declarations - 

In BLISS-16C, an explicit register-number must be in the range 0 to 5;   in
BLISS-32, the range is 0 to 11.



A.4.2.8  Global-Register-Declarations - 

Supported in BLISS-32, but not in BLISS-16C.



A.4.2.9  External-Register-Declarations - 

Supported in BLISS-32, but not BLISS-16C.



A.4.2.10  Map-Declarations - 



A.4.3  Structure-Declarations

A.4.4  Field-Declarations

A.4.5  Routine-Declarations

NOTE:  As detailed in section A.4.1, the following attributes are supported
in BLISS-32, but not BLISS-16C:

         addressing-mode-attribute
         weak-attribute

This information is  not  repeated  in  the  following  routine-declaration
differences.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-12
DECLARATIONS


A.4.5.1  Ordinary-Routine-Declarations - 



A.4.5.2  Global-Routine-Declarations - 



A.4.5.3  Forward-Routine-Declarations - 



A.4.5.4  External-Routine-Declarations - 



A.4.6  Linkage-Declarations

Linkage-declarations in BLISS-16C and BLISS-32  provide  similar  kinds  of
calling  sequence  options;  however, their respective details are strongly
machine  dependent.   At  a  summary  level,   the   following   pairs   of
linkage-options are comparable:

                              BLISS-16C           BLISS-32

     linkage-types            CALL                CALL
                              JSR                 JSB
     parameter-locations      STANDARD            STANDARD
                              REGISTER            REGISTER


The remaining linkage-options are unique  to  their  respective  languages.
The  following  linkage  keywords  are  supported  in  BLISS-16C,  but  not
BLISS-32:

           CLEARSTACK
           EMT
           INTERRUPT
           IOT
           RTT
           TRAP

The  following  linkage  keywords  are  supported  in  BLISS-32,  but   not
BLISS-16C:

           GLOBAL
           NOPRESERVE
           PRESERVE
           NOTUSED
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-13
DECLARATIONS


Global register data segments are supported in BLISS-32, but not BLISS-16C.



A.4.7  Bound-Declarations

NOTE:  As detailed in section A.4.1, the  weak-attribute  is  supported  in
BLISS-32,  but  not  in BLISS-16C.  This information is not repeated in the
following bound-declaration differences.



A.4.7.1  Literal-Declarations - 



A.4.7.2  External-Literal-Declarations - 



A.4.7.3  Bind-Data-Declarations - 



A.4.7.4  Bind-Routine-Declarations - 



A.4.8  Compile-time-Declarations

A.4.9  Macro-Declarations

A.4.9.1  Keyword-Macro-Declarations - 



A.4.9.2  Positional-Macro-Declarations - 



A.4.10  Require-Declarations

A.4.11  Library-Declaration
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-14
DECLARATIONS


A.4.12  Builtin-Declarations

The set of names that may be declared in a builtin-declaration is  specific
to each target architecture.



A.4.13  Psect-Declarations

The  following  psect-attributes  are  supported  in  BLISS-32,   but   not
BLISS-16C:

         SHARE | NOSHARE
         PIC | NOPIC
         ALIGN
         ADDRESSING_MODE


The psect-attribute defaults for BLISS-16C are different from  BLISS-32  in
some cases as follows:

     Class             BLISS-16C       BLISS-32

     CODE              WRITE           NOWRITE
     PLIT              WRITE           NOWRITE



A.4.14  Switches-Declarations

The following switch-items are supported in BLISS-32, but not BLISS-16C:

         ADDRESSING_MODE


The following switch-items are supported  in  BLISS-32,  but  accepted  and
ignored by BLISS-16C:

         OPTIMIZE, NOOPTIMIZE
         SAFE, NOSAFE
         ZIP, NOZIP

NOTE:  BLISS-16C interprets the OPTIMIZE, SAFE, and  ZIP  switches  in  the
module-head  as specified in A.1.1, but ignores these options in a SWITCHES
declaration.


The following list-options are supported  in  BLISS-32,  but  accepted  and
ignored by BLISS-16C:

         ASSEMBLY, NOASSEMBLY
         BINARY, NOBINARY
         COMMENTARY, NOCOMMENTARY
         SYMBOLIC, NOSYMBOLIC
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-15
DECLARATIONS


NOTE:  BLISS-16C interprets the COMMENTARY  and  SYMBOLIC  options  in  the
module-head  as  specified in Section A.1.1, but ignores these options in a
SWITCHES declaration.



A.4.15  Label-Declarations


A.4.16  Undeclare-Declarations


A.4.17  Enable-Declarations

See the discussion of Condition Handling in Section 5.



A.5  LEXICAL PROCESSING

A.5.1  Lexemes

A.5.2  Spaces

A.5.3  Separation Rules

A.5.4  Compilation-Choices

A.5.5  Lexical-Functions

A.5.6  Macro-Calls

A.5.6.1  Keyword-Macro-Calls - 



A.5.6.2  Positional-Macro-Calls - 
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-16
PREDECLARED NAMES


A.6  PREDECLARED NAMES

A.6.1  Literals

The following literals are implicitly declared in every module:

                              BLISS-32            BLISS-16C

          %BPVAL  =           32                  16
          %BPADDR =           32                  16
          %BPUNIT =            8                   8
          %UPVAL  =            4                   2



A.6.2  Macros

The following macros are implicitly declared in every module:

                              BLISS-32            BLISS-16C

          %BLISS16[]  =       %                   %REMAINING %

          %BLISS32[]  =       %REMAINING %        %

          %BLISS36[]  =       %                   %
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-17
PREDECLARED NAMES


A.6.3  Structures

A.6.3.1  Vectors - 

BLISS-32 supports vectors of bytes, words, and longwords.


BLISS-16C supports vectors of bytes and words, but not longwords.  


The respective vector definitions are:


BLISS-16C

STRUCTURE
    VECTOR[I;N,UNIT=2,EXT=0]=
        [N*UNIT]
        (VECTOR+I*UNIT)<0,8*UNIT,EXT>;

BLISS-32

STRUCTURE
    VECTOR[I;N,UNIT=4,EXT=0]=
        [N*UNIT]
        (VECTOR+I*UNIT)<0,8*UNIT,EXT>;


Using the default UNIT and  EXT  allocation  parameters  gives  a  BLISS-32
vector  of (32-bit) longwords which is analogous to the BLISS-16C vector of
(16-bit) words.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-18
PREDECLARED NAMES


A.6.3.2  Blocks - 

BLISS-16C and BLISS-32 block structures are the same except  that  BLISS-32
allows  block  allocation  to be in units of longwords in addition to bytes
and words.


The respective block definitions are:

BLISS-16C

STRUCTURE
    BLOCK[O,P,S,E;BS,UNIT=2]=
        [BS*UNIT]
        (BLOCK+O*UNIT)<P,S,E>;

BLISS-32

STRUCTURE
    BLOCK[O,P,S,E;BS,UNIT=4]=
        [BS*UNIT]
        (BLOCK+O*UNIT)<P,S,E>;

Using  the  default  UNIT  allocation  parameter  gives  a  BLISS-32  block
expressed  in  longword  units which is analogous to the BLISS-16C block of
words.



A.6.3.3  Blockvectors - 

The respective blockvector definitions are:

BLISS-16C

STRUCTURE
    BLOCKVECTOR[I,O,P,S,E;N,BS,UNIT=2]=
        [N*BS*UNIT]
        (BLOCKVECTOR+(O+I*BS)*UNIT)<P,S,E>;

BLISS-32

STRUCTURE
    BLOCKVECTOR[I,O,P,S,E;N,BS,UNIT=4]=
        [N*BS*UNIT]
        (BLOCKVECTOR+(O+I*BS)*UNIT)<P,S,E>;

Using the default UNIT allocation parameter gives  a  BLISS-32  blockvector
expressed in longword units which is analogous to the BLISS-16C blockvector
of words.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-19
PREDECLARED NAMES


A.6.3.4  Bitvectors - 

BLISS-16C and BLISS-32 bitvectors are both densely packed in memory.


The respective bitvector definitions are:

BLISS-16C

STRUCTURE
    BITVECTOR[I;N]=
        [(N+7)/8]
        (BITVECTOR+I/8)<I MOD 8,1,0>;

BLISS-32

STRUCTURE
    BITVECTOR[I;N]=
        [(N+7)/8]
        (BITVECTOR)<I,1,0>;



A.6.4  Linkages And Linkage-Functions

The following linkage-functions are implicitly declared in a routine  which
has the FORTRAN linkage-attribute in BLISS-32, but not BLISS-16C:

          ACTUALCOUNT
          ACTUALPARAMETER
          NULLPARAMETER


The following linkage-functions may be declared in a BUILTIN declaration in
a routine with the BLISS linkage in BLISS-32, but not BLISS-16C:

          ACTUALCOUNT
          ACTUALPARAMETER



A.6.5  Character-Functions

The character functions of BLISS-16C and  BLISS-32  provide  a  common  and
compatible means to perform character handling operations.  With reasonable
care, this can be done transportably.


In both BLISS-16C and BLISS-32 a  CS-pointer  is  implemented  as  a  value
consisting  of  the  address  of  the first byte of the character sequence.
Characters are stored one per byte in increasing byte address order.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page A-20
PREDECLARED NAMES


In BLISS-32, the character functions are all  implemented  as  inline  code
sequences and take advantage of the VAX string instructions.


In BLISS-16C, some of the functions are implemented "inline"  while  others
implicitly call service routines in the run time library.


In both BLISS-32 and BLISS-16C, when doing  single  character  fetches  and
assignments with CS-pointer advance, the post-advance functions

     CH$RCHAR_A
     CH$WCHAR_A

are generally more  efficient  than,  and  preferred  to,  the  pre-advance
functions

     CH$A_RCHAR
     CH$A_WCHAR



A.7  BUILTIN NAMES

Both BLISS-16C and BLISS-32 have  functions  that  are  specific  to  their
respective  target  hardware  achitectures.   These  are  detailed in their
respective specifications.



A.8  NAMES RESERVED FOR SPECIAL PURPOSES

See Section A.2.1.4.











                                APPENDIX B

              BLISS-16C AND BLISS-32 OPERATIONAL DIFFERENCES



BLISS-16C  and  BLISS-32  accept  standard  DECsystem-10  commands.    Both
optionally  produce  relocatable  object  modules  and  listing  files, and
otherwise operate as standard language processors.  In  normal  usage,  the
BLISS-11   compilation   and   MACY11  assembly  phases  of  BLISS-16C  are
transparent.  Differences between  BLISS-16C  and  BLISS-32  occur  in  the
following areas:

     o  default file specifications

     o  command switches corresponding to module switches

     o  command switches specific to the BLISS-16C implementation.

These are discussed in the following sections.



B.1  DEFAULT FILE SPECIFICATIONS

The default file extensions are as follows:

     File Purpose        BLISS-16C           BLISS-32

     SOURCE              .B16,               .B32,
                         then .BLI,          then .BLI,
                         then null           then null

     INTERMEDIATE        .I16                N/A

     ASSEMBLY            .P11                N/A

     OBJECT              .OBJ                .OBJ

     LISTING             .P11 or .LST        .LST
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page B-2
DEFAULT FILE SPECIFICATIONS


The default device for all files is DSK:.


BLISS-16C writes the intermediate BLISS-11 text to a temporary  file  whose
name  is the same as the first source file name and whose file extension is
.I16.  This file is normally deleted  following  the  BLISS-11  compilation
phase.   BLISS-11 writes the intermediate MACRO-11 test to a temporary file
whose name is the same as the previous intermediate  file  and  whose  file
type  is  always  .P11.   This  file is also normally deleted following the
MACY11 assembly phase.



B.2  COMMAND SWITCHES CORRESPONDING TO MODULE-SWITCHES

The following command switches are supported  in  BLISS-16C  with  meanings
that are analogous, but slightly different than in BLISS-32:

     CODE, NOCODE
     DEBUG, NODEBUG

See Section A.1.1 for description of the differences.


The following list-options of the LIST switch are  supported  in  BLISS-32,
but are accepted and ignored in BLISS-16C:

     ASSEMBLY, NOASSEMBLY
     BINARY, NOBINARY


The following list-options of the LIST switch are  supported  in  BLISS-16C
with interpretations that are slightly different than in BLISS-32:

     COMMENTARY, NOCOMMENTARY
     SYMBOLIC, NOSYMBOLIC

See Section A.1.1 for additional discussion of these list-options.



B.3  COMMAND SWITCHES SPECIFIC TO BLISS-16C

The switches described in this section are supported by BLISS-16C, but  are
not permitted by BLISS-32.

The switches have the following interpretation and defaults:

     RBLISS11                 Perform  the  BLISS-11   compilation   phase.
                              NORBLISS11     suppresses     the    BLISS-11
                              compilation phase.  The default is:

                                   RBLISS11
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page B-3
COMMAND SWITCHES SPECIFIC TO BLISS-16C


     IDELETE                  Delete the intermediate BLISS-11 source  file
                              after  the BLISS-11 compilation phase and the
                              intermediate MACRO-11 file after  the  MACY11
                              assembly  phase  if a fatal compilation error
                              does  not  occur.   NOIDELETE   retains   the
                              intermediate files.  The default is:

                                   IDELETE

                              NOTE:  the intermediate BLISS-11 file is  not
                              deleted  if  NORBLISS11  or  NOCODE is given,
                              since  the  deletion  is  performed  by   the
                              BLISS-11  phase.   It is not possible for the
                              compiler to selectively delete only the  .I16
                              or .P11 file.

     COMPRESS                 Compress  the  intermediate  text  to  occupy
                              minimum    file    space,   where   possible.
                              NOCOMPRESS   produces   a    more    readable
                              intermediate file by incorporating additional
                              text formatting characters.  The default is:

                                   NOCOMPRESS

     BLISS11:"switch(es)"     The given  switch(es)  are  appended  to  the
                              BLISS-11  command  created by the translation
                              phase.  These may be used to invoke  BLISS-11
                              options in combination with BLISS-16C.

     INTER:file-spec          The given file-specification is used  as  the
                              name  of  the  intermediate  BLISS-11  source
                              file.  The defaults are:

                              device              DSK:

                              file-name           Same as the first source 
                                                  file name

                              file-ext            .I16

     MACY11:"switch(es)"      The given switch(es) are  used  to  form  the
                              MACY11  command  line  used  to  assemble the
                              intermediate .P11 file.  These may be used to
                              invoke  MACY11  options  in  combination with
                              BLISS-16C.  The switches may be separated  by
                              comma  and/or  equals  to show which switches
                              are associated with which MACY11 command line
                              files.   If  no  comma  or equals is present,
                              then all of the switches are appended to  the
                              source   file  specification.   For  example,
                              ",/SP/NL=/EN:PNC", will associate /SP and /NL
                              with  the  listing  file and /EN:PNC with the
                              source file.
B-16C/B-32--Digital Equipment Corporation, COMPANY CONFIDENTIAL    Page B-4
COMMAND SWITCHES SPECIFIC TO BLISS-16C


[end of 16LDIF.RNO]