*COMDECK,MALETPS
          EJECT 
          QUAL   MALETPS
          IFNE   CMSE,0,1 
          USE    MODD 
          VFD    30/1,6/KEYDESM,6/KEY2,18/0   CW FOR DESM OVERLAY 
          USE    *
*         LENGTHS AND ADDRESSES OF PPU BUFFERS ARE DEFINED BELOW. 
*         THESE VALUES MUST BE KEPT IN PRODUCT OVERLAY ORDER AND
*         MUST ALWAYS AGREE WITH THE ACTUAL VALUES IN THE PPU 
*         PRODUCT OVERLAYS. 
  
          IFNE   CMSE,0,1 
          USE    P0OB 
          DATA   505B        MAX VALUE FOR OB FOR PP OVERLAY (DESM) 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0OBFWA
          DATA   6125B             RELATIVE FWA OF OB 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0IB 
          DATA   505B        MAX VALUE FOR IB FOR PP OVERLAY (DESM) 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0IBFWA
          DATA   5420B             RELATIVE FWA OF IB 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0SB 
          DATA   22B         MAX VALUE FOR SB FOR PP OVERLAY (DESM) 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0SBFWA
          DATA   6632B             RELATIVE FWA OF SB 
          USE    *
  
*         DESM ENTRY POINTS.
  
 RELDESM  EQU    0
 RESDESM  EQU    1
 RDWRDESM EQU    2
 STATDESM EQU    3
 RDWPDESM EQU    4
 FLRGDESM EQU    5
 SDPMDESM EQU    6
 SETFDESM EQU    7
 ERRLDESM EQU    10B
  
          IFNE   CMSE,0,1 
          USE    PKEY 
          VFD    24/0,18/LDESM,18/TDESM 
 KEYDESM  EQU    *-PKEY+PKEYOFF 
          USE    *
  
*         LEGAL HIGH-LEVEL I/O COMMANDS FOR DESM
  
 TDESM    VFD    42/3LREL,18/DESMREL
          VFD    42/3LRES,18/DESMRES
          VFD    42/6LSTATUS,18/DESMST
          VFD    42/4LREAD,18/DESMREAD
          VFD    42/5LWRITE,18/DESMWR 
          VFD    42/6LREADPB,18/DESMRDPB
          VFD    42/7LWRITEPB,18/DESMWRPB 
          VFD    42/4LFLAG,18/DESMFR
          VFD    42/3LSDP,18/DESMMF 
          VFD    42/3LSET,18/DESMSF 
          VFD    42/6LERRLOG,18/DESMEL
          VFD    42/4LSIDE,18/DESMSC
 LDESM    EQU    *-TDESM
  
*         CONSTANTS USED BY DESM
  
 DADDRESS VFD    60/7LADDRESS 
 DBITS    VFD    60/4LBITS
 DCHECK   VFD    60/5LCHECK 
 DCLEAR   VFD    60/5LCLEAR 
 DCLOCK   VFD    60/5LCLOCK 
 DCMDMA   VFD    60/5LCMDMA 
 DCOUNTER VFD    60/7LCOUNTER 
 DDETERR  VFD    60/6LDETERR
 DDISABLE VFD    60/7LDISABLE 
 DDOOR    VFD    60/4LDOOR
 DENVIRON VFD    60/7LENVIRON 
 DERROR   VFD    60/5LERROR 
 DESM     VFD    60/3LESM 
 DEQUSTA  VFD    60/6LEQUSTA
 DFAST    VFD    60/4LFAST
 DFLAG    VFD    60/4LFLAG
 DFORCE   VFD    60/5LFORCE 
 DFROM    VFD    60/4LFROM
 DFUNC    VFD    60/4LFUNC
 DFUNCT   VFD    60/9LFUNCTIONS 
 DGBA     VFD    60/3LGBA 
 DLOCK    VFD    60/4LLOCK
 DLSP     VFD    60/3LLSP 
 DMAINT   VFD    60/5LMAINT 
 DMAXIMUM VFD    60/7LMAXIMUM 
 DONE     VFD    60/3LONE 
 DPROGRAM VFD    60/7LPROGRAM 
 DRDYSEL  VFD    60/6LRDYSEL
 DREAD    VFD    60/4LREAD
 DRECORD  VFD    60/6LRECORD
 DREFRESH VFD    60/7LREFRESH 
 DREG     VFD    60/8LREGISTER
 DRESET   VFD    60/5LRESET 
 DSCANNER VFD    60/7LSCANNER 
 DSDP     VFD    60/3LSDP 
 DSECDED  VFD    60/6LSECDED
 DSELCLR  VFD    60/6LSELCLR
 DSELSET  VFD    60/6LSELSET
 DSET     VFD    60/3LSET 
 DSTATUS  VFD    60/6LSTATUS
 DSYNDR   VFD    60/8LSYNDROME
 DTIME    VFD    60/4LTIME
 DTIMING  VFD    60/6LTIMING
 DTO      VFD    60/2LTO
 DVALID   VFD    60/5LVALID 
 DWRITE   VFD    60/5LWRITE 
 DZERO    VFD    60/4LZERO
 DZERSEL  VFD    60/6LZERSEL
 D18BIT   VFD    60/5L18BIT 
 D4BIT    VFD    60/4L4BIT
  
          EJECT 
 DESMREAD TITLE  DESMREAD - PROCESS THE DESM READ STATEMENT.
**        DESMREAD - PROCESS THE DESM READ STATEMENT. 
* 
*         J. M. OJA. 86/07/10.
* 
*         DESMREAD - PROCESS THE DESM READ STATEMENT. FORMAT; 
* 
*           READ FROM ESM ADDRESS X Y, ABT Z
*           READ ONE RECORD FROM ESM ADDRESS X Y, ABT Z 
*           READ TO CMDMA FROM ESM ADDRESS X Y, ABT Z 
*           READ TO CMDMA ESM ADDRESS X Y, ABT Z
*           READ FAST TO CMDMA FROM ESM ADDRESS X Y, ABT Z
*           READ FAST TO CMDMA ESM ADDRESS X Y, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = RDWRDESM (ADDRESS OF READ ROUTINE IN DRIVER).
*                 (X0) = 1 FOR READ FUNCTION
*                      = 11B FOR READ CMDMA FUNCTION
*                      = 21B FOR READ FAST CMDMA FUNCTION 
*                      = 41B FOR READ ONE RECORD FUNCTION 
*                 PAC  = COMMON CODE TO PROCESS REST OF STATEMENT.
*                FCERR COMPILER ERR FLAG SET IF COMPILER ERROR CREATED. 
* 
*         ROUTINES CALLED    NONE.
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMREAD SB7    RDWRDESM    ENTRY POINT FOR READ 
          SX0    1B          READ FUNCTION
          SA1    DONE 
          BX1    X1-X3
          NZ     X1,DESMRD1  IF NOT ONE THEN CONTINUE 
          SA3    A3+B1
          SA1    DRECORD
          BX1    X1-X3
          NZ     X1,COM30    IF NOT RECORD EXIT 
          SX0    41B         READ ONE RECORD FUNCTION 
          SA3    A3+B1
 DESMRD1  SA1    DFROM
          BX1    X1-X3
          ZR     X1,DESMRD3  IF FROM THEN CONTINUE
          SA1    DFAST
          BX1    X1-X3
          NZ     X1,DESMRD2  IF NOT FAST
          SX0    X0+10B      FLAG FAST READ 
          SA3    A3+B1
 DESMRD2  SA1    DTO
          BX1    X1-X3
          NZ     X1,COM30    IF NOT TO SYNTAX ERROR 
          SA3    A3+B1
          SA1    DCMDMA 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT CMDMA SYNTAX ERROR
          SA3    A3+B1
          SA1    DFROM
          BX1    X1-X3
          SX0    X0+10B      FLAG CM READ 
          NZ     X1,DESMRD4  IF NOT FROM SYNTAX ERROR 
 DESMRD3  SA3    A3+B1
 DESMRD4  SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC         ENTER COMMON SEQUENCE
          EJECT 
 DESMWR   TITLE DESMWR - PROCESS THE DESM WRITE STATEMENT.
**        DESMWR - PROCESS THE DESM WRITE STATEMENT.
* 
*         J. M. OJA  86/07/10.
* 
*         DESMWR - PROCESS THE DESM WRITE STATEMENT. FORMATS ARE; 
* 
*               WRITE TO ESM ADDRESS X Y, ABT Z 
*               WRITE FROM CMDMA TO ESM ADDRESS X Y, ABT Z
*               WRITE CMDMA TO ESM ADDRESS X Y, ABT Z 
*               WRITE FAST FROM CMDMA TO ESM ADDRESS X Y, ABT Z 
*               WRITE FAST CMDMA TO ESM ADDRESS X Y, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = RDWRDESM (ADDRESS OF WRITE ROUTINE IN DRIVER). 
*                 (X0) = 2 FOR WRITE FUNCTION 
*                      = 12B FOR WRITE CMDMA FUNCTION 
*                      = 22B FOR WRITE FAST CMDMA FUNCTION
*                 PAC  = COMMON CODE TO PROCESS REST OF STATEMENT.
*                FCERR COMPILER ERR FLAG SET IF COMPILER ERROR CREATED. 
* 
*         ROUTINES CALLED - NONE. 
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMWR   SB7    RDWRDESM    ENTRY POINT IN DRIVER FOR WRITE
          SX0    2B          WRITE FUNCTION 
          SA1    DTO
          BX1    X1-X3
          ZR     X1,DESMWR3  IF TO THEN CONTINUE
          SA1    DFAST
          BX1    X1-X3
          NZ     X1,DESMWR1  IF NOT FAST
          SX0    X0+10B      FLAG FAST WRITE
          SA3    A3+B1
 DESMWR1  SA1    DFROM
          BX1    X1-X3
          NZ     X1,DESMWR2  IF FROM CHECK CMDMA
          SA3    A3+B1
 DESMWR2  SA1    DCMDMA 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT CMDMA SYNTAX ERROR
          SA3    A3+B1
          SA1    DTO
          BX1    X1-X3
          NZ     X1,COM30    IF NOT TO SYNTAX ERROR 
          SX0    X0+10B      FLAG CM WRITE
 DESMWR3  SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC         ENTER COMMON CODE TO PROCESS STATEMENT.
          EJECT 
 DESMREL  TITLE  DESMREL - PROCESS THE DESM REL STATEMENT.
**        DESMREL - PROCESS THE DESM REL STATEMENT. 
* 
*         J.M.OJA  86/07/10.
* 
*         DESMREL - PROCESS THE DESM REL STATEMENT. FORMAT IS 
* 
*           REL, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  -  PAC5   IF NO ERRORS FOUND
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - NONE.
*                X - NONE.
*                B - 7. 
* 
 DESMREL  SB7    RELDESM     ENTRY POINT FOR REL
          EQ     PAC5        ENTER COMMON ABT SEQUENCE
          EJECT 
 DESMRES  TITLE  DESMRES - PROCESS THE DESM RES STATEMENT.
**        DESMRES - PROCESS THE DESM RES STATEMENT. 
* 
*         J.M.OJA  86/07/10.
* 
*         DESMRES - PROCESS THE DESM RES STATEMENT. FORMATS ARE 
* 
*           RES LSP, ABT Z
*           RES SDP, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  -  PAC5   IF NO ERRORS FOUND
*                  (X0) = 2 IF RES LSP
*                         0 IF RES SDP
* 
*         ROUTINES CALLED -  CSTOREB- STORE GENERATED CODE. 
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMRES  SB7    RESDESM     ENTRY POINT FOR RES
          SX0    2
 DESMR1   SA1    DLSP 
          BX1    X1-X3
          ZR     X1,DESMR2   IF LSP 
          SX0    0           FLAG SDP 
          SA1    DSDP 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SDP OR LSP SYNTAX ERROR 
  
 DESMR2   SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          SX6    A3 
          BX0    X0+X1       CODE = LDN FLAG, STD PA
          RJ     CSTOREB
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC5        ENTER COMMON ABT SEQUENCE
  
          EJECT 
 DESMST   TITLE  DESMST  - PROCESS THE DESM STATUS STATEMENT. 
**        DESMST - PROCESS THE DESM STATUS STATEMENT. 
* 
*         J.M.OJA  86/07/10.
* 
*         DESMST - PROCESS THE DESM STATUS STATEMENT. FORMAT IS 
* 
*           STATUS ESM, ABT Z 
*           STATUS ERROR, ABT Z 
*           STATUS OPERATION, ABT Z 
*           STATUS SDP, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  PAC5 = COMMON CODE TO PROCESS REST OF STATEMENT. 
*                     = 1 FOR ERROR 
*                     = 2 FOR OPERATION 
*                     = 3 FOR SDP 
* 
*         ROUTINES CALLED -  CSTOREB- STORE GENERATED PPU BINARY. 
* 
*         DATA AREAS USED -  NONE.
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMST   SB7    B0          CLEAR POINTER
          SB6    LDESMS 
 DESMS1   SA1    DESMS2+B7
          BX1    X1-X3
          ZR     X1,DESMS22   IF KEYWORD FOUND
          SB7    B7+B1       BUMP POINTER 
          NE     B7,B6,DESMS1 IF END OF LIST NOT FOUND
          EQ     COM30       ERROR EXIT IF NOT FOUND
  
 DESMS22  SX0    LDN+B7 
          SX1    STD+PA 
          SA3    A3+B1
          LX0    12 
          SX6    A3 
          BX0    X0+X1       CODE = LDN FLAG, STD PA
          SA6    PCRK 
          RJ     CSTOREB
          SB7    STATDESM    ENTRY POINT FOR STATUS 
          EQ     PAC5        ENTER COMMON SEQUENCE
  
 DESMS2   VFD    60/3LESM 
          VFD    60/5LERROR 
          VFD    60/9LOPERATION 
          VFD    60/3LSDP 
 LDESMS   EQU    *-DESMS2 
          EJECT 
 DESMRDPB TITLE  DESMRDPB - PROCESS THE DESM READPB STATEMENT.
**        DESMRDPB - PROCESS THE DESM READPB STATEMENT. 
* 
*         J.M.OJA  86/12/04.
* 
*         DESMRDPB - PROCESS THE DESM READPB STATEMENT. FORMAT IS;
* 
*           READPB, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  -  PAC5   IF NO ERRORS FOUND
*                  X0 = 21B FOR READPB FUNCTION 
* 
*         ROUTINES CALLED -  CSTOREB- STORE GENERATED PPU CODE. 
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - NONE.
*                X - 0, 1.
*                B - 7. 
* 
 DESMRDPB SB7    RDWPDESM    ENTRY POINT FOR READPB 
          SX0    LDN+21B
          SX1    STD+PA 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          EQ     PAC5        ENTER COMMON ABT SEQUENCE
          EJECT 
 DESMWRPB TITLE  DESMWRPB - PROCESS THE DESM WRITEPB STATEMENT. 
**        DESMWRPB - PROCESS THE DESM WRITEPB STATEMENT.
* 
*         J.M.OJA  86/12/04.
* 
*         DESMWRPB - PROCESS THE DESM WRITEPB STATEMENT. FORMAT IS; 
* 
*           WRITEPB, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  -  PAC5   IF NO ERRORS FOUND
*                  X0 = 22B FOR WRITEPB FUNCTION
* 
*         ROUTINES CALLED -  CSTOREB- STORE GENERATED PPU CODE. 
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - NONE.
*                X - 0, 1.
*                B - 7. 
* 
 DESMWRPB SB7    RDWPDESM    ENTRY POINT FOR WRITEPB
          SX0    LDN+22B     WRITEPB FUNCTION 
          SX1    STD+PA 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          EQ     PAC5        ENTER COMMON ABT PROCESSOR 
          EJECT 
 DESMFR   TITLE DESMFR - PROCESS THE DESM FLAG REGISTER STATEMENT.
**        DESMFR - PROCESS THE DESM FLAG REGISTER STATEMENT.
* 
*         J. M. OJA  86/12/11.
* 
*         DESMFR - PROCESS THE DESM FLAG REGISTER STATEMENT. FORMATS ARE; 
* 
*               FLAG REGISTER 18BIT RDYSEL X Y, ABT Z 
*               FLAG REGISTER 18BIT SELSET X Y, ABT Z 
*               FLAG REGISTER 18BIT STATUS X Y, ABT Z 
*               FLAG REGISTER 18BIT SELCLR X Y, ABT Z 
*               FLAG REGISTER 4BIT RDYSEL X Y, ABT Z
*               FLAG REGISTER 4BIT SELSET X Y, ABT Z
*               FLAG REGISTER 4BIT STATUS X Y, ABT Z
*               FLAG REGISTER 4BIT SELCLR X Y, ABT Z
*               FLAG REGISTER 4BIT ZERSEL X Y, ABT Z
*               FLAG REGISTER 4BIT EQUSTA X Y, ABT Z
*               FLAG REGISTER SDP DETERR X Y, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = FLRGDESM (ADDRESS OF FLAG REGISTER ROUTINE IN DRIVER). 
*                 (X0) = 00 FOR 18BIT RDYSEL  (X0) = 04 FOR 4BIT RDYSEL 
*                      = 10 FOR 18BIT SELSET       = 14 FOR 4BIT SELSET 
*                      = 20 FOR 18BIT STATUS       = 24 FOR 4BIT STATUS 
*                      = 30 FOR 18BIT SELCLR       = 34 FOR 4BIT SELCLR 
*                                                  = 06 FOR 4BIT ZERSEL 
*                                                  = 26 FOR 4BIT EQUSTA 
*                                                  = 25 FOR SDP DETERR
* 
*                 PAC3 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 COM30  IF SYNTAX ERROR. 
* 
*         ROUTINES CALLED - CSTOREB.
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMFR   SB7    FLRGDESM    ENTRY POINT IN DRIVER FOR FLAG REGISTER
          SX0    0           READY SELECT 18BIT FUNCTION
          SA1    DREG 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT REGISTER SYNTAX ERROR 
          SA3    A3+B1
          SA1    D18BIT 
          BX1    X1-X3
          ZR     X1,DESMFR3  IF 18BIT THEN CONTINUE 
          SA1    D4BIT
          BX1    X1-X3
          NZ     X1,DESMFR2  IF NOT 4BIT
          SX0    X0+4B       FLAG 4BIT
          SA3    A3+B1
          SA1    DZERSEL
          BX1    X1-X3
          NZ     X1,DESMFR1  IF NOT ZERO SELECT 
          SX0    X0+2B       FLAG ZERO SELECT 
          EQ     DESMFR5     GO TO COMMON ROUTINE 
 DESMFR1  SA1    DEQUSTA
          BX1    X1-X3
          NZ     X1,DESMFR4  IF NOT EQUALITY STATUS CHECK REST
          SX0    X0+22B      FLAG EQUALITY STATUS 
          EQ     DESMFR5     GO TO COMMON ROUTINE 
 DESMFR2  SA1    DSDP 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SDP SYNTAX ERROR
          SX0    X0+25B      FLAG SDP 
          SA3    A3+B1
          SA1    DDETERR
          BX1    X1-X3
          ZR     X1,DESMFR5  IF DETECTED ERROR STATUS 
 DESMFR3  SA3    A3+B1
 DESMFR4  SA1    DRDYSEL
          BX1    X1-X3
          ZR     X1,DESMFR5  IF READY SELECT
          SX0    X0+10B      FLAG SELECTIVE SET 
          SA1    DSELSET
          BX1    X1-X3
          ZR     X1,DESMFR5  IF SELECTIVE SET 
          SX0    X0+10B      FLAG STATUS
          SA1    DSTATUS
          BX1    X1-X3
          ZR     X1,DESMFR5  IF STATUS
          SX0    X0+10B      FLAG SELECTIVE CLEAR 
          SA1    DSELCLR
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SELECTIVE CLEAR SYNTAX ERROR
 DESMFR5  SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SX7    B7 
          SA7    PACB        SAVE ENTRY ADDRESS 
          SB7    B0 
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC3        ENTER COMMON CODE TO PROCESS STATEMENT.
          EJECT 
 DESMMF   TITLE DESMMF - PROCESS THE DESM SDP MAINT FUNC STATEMENT. 
**        DESMMF - PROCESS THE DESM SDP MAINT FUNC STATEMENT. 
* 
*         J. M. OJA  86/12/11.
* 
*         DESMMF - PROCESS THE DESM SDP MAINT FUNC STATEMENT. FORMATS ARE;
* 
*               SDP MAINT FUNC GBA FORCE, ABT Z 
*               SDP MAINT FUNC WRITE VALID ERROR FORCE, ABT Z 
*               SDP MAINT FUNC DISABLE SECDED, ABT Z
*               SDP MAINT FUNC WRITE CHECK BITS, ABT Z
*               SDP MAINT FUNC READ CHECK BITS, ABT Z 
*               SDP MAINT FUNC READ SYNDROME BITS, ABT Z
*               SDP MAINT FUNC READ ZERO CHECK BITS, ABT Z
*               SDP MAINT FUNC CLEAR MAINT FUNCTIONS,ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = FLRGDESM (ADDRESS OF SDP MAINT FUNC ROUTINE IN DRIVER).
*                 (X0) = 0 FOR GBA FORCE
*                      = 1 FOR WRITE VALID ERROR FORCE
*                      = 2 FOR DISABLE SECDED 
*                      = 3 FOR WRITE CHECK BITS 
*                      = 4 FOR READ CHECK BITS
*                      = 5 FOR READ SYNDROME BITS 
*                      = 14B FOR READ ZERO CHECK BITS 
*                      = 31B FOR CLEAR MAINT FUNCTIONS
* 
*                 PAC5 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 COM30  IF SYNTAX ERROR. 
* 
*         ROUTINES CALLED - CSTOREB.
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMMF   SB7    SDPMDESM    ENTRY POINT IN DRIVER FOR SDP MAINT FUNC 
          SX0    0           GBA FORCE PSEUDO FUNCTION
          SA1    DMAINT 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT MAINT SYNTAX ERROR
          SA3    A3+B1
          SA1    DFUNC
          BX1    X1-X3
          NZ     X1,COM30    IF NOT FUNC SYNTAX ERROR 
          SA3    A3+B1
          SA1    DGBA 
          BX1    X1-X3
          NZ     X1,DESMMF1  IF NOT GBA THEN CONTINUE 
          SA3    A3+B1
          SA1    DFORCE 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT FORCE SYNTAX ERROR
          EQ     DESMMF9     PROCESS NEXT WORD
 DESMMF1  SX0    X0+1        ADD FOR WRITE VALID
          SA1    DWRITE 
          BX1    X1-X3
          NZ     X1,DESMMF2  IF NOT WRITE 
          SA3    A3+B1
          SA1    DVALID 
          BX1    X1-X3
          NZ     X1,DESMMF4  IF NOT VALID THEN CONTINUE 
          SA3    A3+B1
          SA1    DERROR 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT ERROR SYNTAX ERROR
          SA3    A3+B1
          SA1    DFORCE 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT FORCE SYNTAX ERROR
          EQ     DESMMF9     GO TO COMMON ROUTINE 
 DESMMF2  SX0    X0+1        ADD DISABLE SECDED 
          SA1    DDISABLE 
          BX1    X1-X3
          NZ     X1,DESMMF3  IF NOT DISABLE CHECK REST
          SA3    A3+B1
          SA1    DSECDED
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SECDED SYNTAX ERROR 
          EQ     DESMMF9     GO TO COMMON ROUTINE 
 DESMMF3  SX0    X0+1 
          SA1    DWRITE 
          BX1    X1-X3
          NZ     X1,DESMMF5  IF NOT WRITE SYNTAX ERROR
 DESMMF4  SX0    X0+2        FLAG WRITE CHECK 
          SA1    DCHECK 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT CHECK SYNTAX ERROR
          SA3    A3+B1
          SA1    DBITS
          BX1    X1-X3
          NZ     X1,COM30    IF NOT BITS SYNTAX ERROR 
          EQ     DESMMF9     IF DETECTED ERROR STATUS 
 DESMMF5  SX0    X0+1 
          SA1    DREAD
          BX1    X1-X3
          NZ     X1,DESMMF8  IF NOT READ CHECK CLEAR
          SA3    A3+B1       GET NEXT WORD
          SA1    DCHECK 
          BX1    X1-X3
          NZ     X1,DESMMF6  IF NOT CHECK 
          SA3    A3+B1       GET NEXT WORD
          SA1    DBITS
          BX1    X1-X3
          NZ     X1,COM30    IF NOT BITS SYNTAX ERROR 
          EQ     DESMMF9
 DESMMF6  SX0    X0+1        FLAG SYNDROME BITS 
          SA1    DSYNDR 
          BX1    X1-X3
          NZ     X1,DESMMF7  IF NOT SYNDROME CHECK ZERO 
          SA3    A3+B1
          SA1    DBITS
          BX1    X1-X3
          NZ     X1,COM30    IF NOT BITS SYNTAX ERROR 
          EQ     DESMMF9
 DESMMF7  SX0    14B         FLAG ZERO CHECK BITS 
          SA1    DZERO
          BX1    X1-X3
          NZ     X1,COM30    IF NOT ZERO SYNTAX ERROR 
          SA3    A3+B1
          SA1    DCHECK 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT CHECK SYNTAX ERROR
          SA3    A3+B1
          SA1    DBITS
          BX1    X1-X3
          NZ     X1,COM30    IF NOT BITS SYNTAX ERROR 
          EQ     DESMMF9
 DESMMF8  SX0    31B         FLAG CLEAR MAINT FUNCTIONS 
          SA1    DCLEAR 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT CLEAR SYNTAX ERROR
          SA3    A3+B1
          SA1    DMAINT 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT MAINT SYNTAX ERROR
          SA3    A3+B1
          SA1    DFUNCT 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT FUNCT SYNTAX ERROR
 DESMMF9  SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC5        ENTER COMMON CODE TO PROCESS STATEMENT.
          EJECT 
 DESMSF   TITLE DESMSF - PROCESS THE DESM SET STATEMENT.
**        DESMSF - PROCESS THE DESM SET STATEMENT.
* 
*         J. M. OJA  86/12/11.
* 
*         DESMSF - PROCESS THE DESM SET STATEMENT. FORMATS ARE; 
* 
*               SET CLOCK TIMING X, ABT Z 
*               SET REFRESH TIME X, ABT Z 
*               SET SCANNER LOCK, ABT Z 
*               SET MAXIMUM ADDRESS X, ABT Z
*               SET ENVIRON STATUS BITS X, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = SETFDESM (ADDRESS OF SET ROUTINE IN DRIVER). 
*                 (X0) = 0 CLOCK TIMING 
*                      = 1 REFRESH TIME 
*                      = 2 SCANNER LOCK 
*                      = 4 MAXIMUM ADDRESS
*                      = 5 ENVIRON STATUS BITS
* 
*                 PAC4 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 PAC5 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 COM30  IF SYNTAX ERROR. 
* 
*         ROUTINES CALLED - CSTOREB.
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMSF   SB7    SETFDESM    ENTRY POINT IN DRIVER FOR SET
          SX0    0           SET CLOCK PSEUDO FUNCTION
          SA1    DCLOCK 
          BX1    X1-X3
          NZ     X1,DESMSF1  IF NOT CLOCK CHECK NEXT
          SA3    A3+B1
          SA1    DTIMING
          BX1    X1-X3
          NZ     X1,COM30    IF NOT TIMING SYNTAX ERROR 
          EQ     DESMSF5     GET X
 DESMSF1  SX0    X0+1        ADD FOR REFRESH
          SA1    DREFRESH 
          BX1    X1-X3
          NZ     X1,DESMSF2  IF NOT REFRESH THEN CONTINUE 
          SA3    A3+B1
          SA1    DTIME
          BX1    X1-X3
          NZ     X1,COM30    IF NOT TIME SYNTAX ERROR 
          EQ     DESMSF5     PROCESS NEXT WORD
 DESMSF2  SX0    X0+1        ADD FOR SCANNER LOCK 
          SA1    DSCANNER 
          BX1    X1-X3
          NZ     X1,DESMSF3  IF NOT SCANNER 
          SA3    A3+B1
          SA1    DLOCK
          BX1    X1-X3
          NZ     X1,COM30    IF NOT LOCK SYNTAX ERROR 
          SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC5        ENTER COMMON CODE TO PROCESS STATEMENT.
 DESMSF3  SX0    X0+2        ADD MAXIMUM ADDRESS
          SA1    DMAXIMUM 
          BX1    X1-X3
          NZ     X1,DESMSF4  IF NOT MAXIMUM CONTINUE
          SA3    A3+B1
          SA1    DADDRESS 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT ADDRESS SYNTAX ERROR
          EQ     DESMSF5     GO TO COMMON ROUTINE 
 DESMSF4  SX0    X0+1 
          SA1    DENVIRON 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT ENVIRON SYNTAX ERROR
          SA3    A3+B1
          SA1    DSTATUS
          BX1    X1-X3
          NZ     X1,COM30    IF NOT STATUS SYNTAX ERROR 
          SA3    A3+B1       GET NEXT WORD
          SA1    DBITS
          BX1    X1-X3
          NZ     X1,COM30    IF NOT BITS SYNTAX ERROR 
 DESMSF5  SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SX7    B7 
          SA7    PACB        SAVE ENTRY ADDRESS 
          SB7    B0 
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC4        ENTER COMMON CODE TO PROCESS STATEMENT.
          EJECT 
 DESMEL   TITLE DESMEL - PROCESS THE DESM ERRLOG STATEMENT. 
**        DESMEL - PROCESS THE DESM ERRLOG STATEMENT. 
* 
*         J. M. OJA  86/12/16.
* 
*         DESMEL - PROCESS THE DESM ERRLOG STATEMENT. FORMATS ARE;
* 
*               ERRLOG READ, ABT Z
*               ERRLOG RESET, ABT Z 
*               ERRLOG SET PROGRAM COUNTER, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = ERRLDESM (ADDRESS OF ERRLOG ROUTINE IN DRIVER).
*                 (X0) = 10 FOR READ
*                      = 11 FOR RESET 
*                      = 12 FOR SET PROGRAM 
* 
*                 PAC4 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 PAC5 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 COM30  IF SYNTAX ERROR. 
* 
*         ROUTINES CALLED - CSTOREB.
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMEL   SB7    ERRLDESM    ENTRY POINT IN DRIVER FOR ERRLOG 
          SX0    10B         READ ERRLOG PSEUDO FUNCTION
          SA1    DREAD
          BX1    X1-X3
          ZR     X1,DESMEL1  IF READ GO TO COMMON PROCESSOR 
          SX0    X0+1        ADD FOR RESET
          SA1    DRESET 
          BX1    X1-X3
          ZR     X1,DESMEL1  IF RESET GO TO COMMON PROCESSOR
          SX0    X0+1        ADD FOR SET
          SA1    DSET 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SET SYNTAX ERROR
          SA3    A3+B1
          SA1    DPROGRAM 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT PROGRAM SYNTAX ERROR
          SA3    A3+B1
          SA1    DCOUNTER 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT COUNTER SYNTAX ERROR
 DESMEL1  SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC5        ENTER COMMON CODE TO PROCESS STATEMENT.
          EJECT 
 DESMSC   TITLE DESMSC - PROCESS THE DESM SIDE DOOR STATEMENT.
**        DESMSC - PROCESS THE DESM SIDE DOOR STATEMENT.
* 
*         J. M. OJA  86/12/16.
* 
*         DESMSC - PROCESS THE DESM SIDE DOOR STATEMENT. FORMATS ARE; 
* 
*               SIDE DOOR CLEAR X, ABT Z
*               SIDE DOOR READ FLAG REGISTER, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = SETFDESM (ADDRESS OF SET ROUTINE IN DRIVER)
*                        FOR SIDE DOOR CLEAR. 
*                      = ERRLDESM (ADDRESS OF ERRLOG ROUTINE IN DRIVER) 
*                        FOR SIDE DOOR READ FLAG REGISTER.
*                 (X0) = 3 FOR CLEAR
*                      = 2 FOR READ FLAG REGISTER 
* 
*                 PAC4 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 PAC5 = COMMON CODE TO PROCESS REST OF STATEMENT.
*                 COM30  IF SYNTAX ERROR. 
* 
*         ROUTINES CALLED - CSTOREB.
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 DESMSC   SB7    SETFDESM    ENTRY POINT IN DRIVER FOR SET COMMANDS 
          SX0    3B 
          SA1    DDOOR
          BX1    X1-X3
          NZ     X1,COM30    IF NOT DOOR SYNTAX ERROR 
          SA3    A3+B1
          SA1    DCLEAR 
          BX1    X1-X3
          NZ     X1,DESMSC1  IF NOT CLEAR CHECK FLAG REGISTER 
          SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SX7    B7 
          SA7    PACB        SAVE ENTRY ADDRESS 
          SB7    B0 
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC4        ENTER COMMON CODE TO PROCESS STATEMENT.
 DESMSC1  SB7    ERRLDESM    SIDE DOOR READ FLAG REGISTER WITH ERRLOG 
          SA1    DREAD
          SX0    2B          SET FOR READ 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT READ SYNTAX ERROR 
          SA3    A3+B1
          SA1    DFLAG
          BX1    X1-X3
          NZ     X1,COM30    IF NOT FLAG SYNTAX ERROR 
          SA3    A3+B1
          SA1    DREG 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT REGISTER SYNTAX ERROR 
          SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC5        ENTER COMMON CODE TO PROCESS STATEMENT.
          EJECT 
 PAC      TITLE  PAC - DESM COMMON CODE PROCESSOR.
**        PAC    COMMON CODE PROCESSOR. 
* 
*         G.L.GOLDEN  83/02/17. 
* 
*         ENTRY -CRKBUF CONTAINS REMAINDER OF DATA TO CRACK.
*                PCRK   POINTS TO NEXT ITEM IN CRKBUF.
*                (B7)   CONTAINS ENTRY POINT INDEX. 
* 
*         EXIT  -COM10 IF NO ERRORS 
*                COM30 IF SYNTAX ERROR
*                COM31 IF SYNTAX ERROR DURING FIND
* 
*         ROUTINES CALLED - FIND - FIND NEXT ITEM FROM CRKBUF 
*                           CABSPPU - FORM ABSOLUTE ADDRESS 
*                           CSTOREB - SAVE GENERATED BINARY 
*                           CPSN    - PROCESS STATEMENT NUMBER
* 
*         DATA AREAS USED - CRKBUF - WORD STRING OF SOURCE STATEMENT
* 
*         USES   A - 1, 3, 6, 7.
*                X - 0, 1, 3, 6, 7. 
*                B - 6, 7.
* 
  
**        COMMON CODE PROCESSING
* 
*         PROCESS ESM 
  
 PAC      ZR     X3,COM30    ERROR EXIT IF END OF STATEMENT 
          SX0    X0+LDN 
          LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SA1    DESM 
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NEXT ITEM IS NOT ESM 
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
  
*         CRACK ADDRESS X Y 
  
 PAC2     SX7    B7 
          SA7    PACB        SAVE ENTRY ADDRESS 
          SB7    B0 
          SA1    PACE+B7
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NOT CORRECT KEYWORD
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
 PAC3     SA1    PACA 
          RJ     FIND        GET X AND Y
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          SX0    B3+LDN 
          SX1    B7+STD+PA+55B
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SB7    B7+B1
          SB6    2
          NE     B7,B6,PAC3  IF Y HAS NOT BEEN DONE YET 
          SA1    PACB 
          SB7    X1          RESTORE ENTRY ADDRESS
          EQ     PAC5 
  
 PAC4     SA1    PACA 
          RJ     FIND        GET X
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          SX0    B3+LDN 
          SX1    B7+STD+PA+55B
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SB7    B7+B1
          SB6    1
          NE     B7,B6,PAC4  DO ONLY X
          SA1    PACB 
          SB7    X1          RESTORE ENTRY ADDRESS
  
*         CRACK ABT Z 
  
 PAC5     SX7    B7 
          SA7    PACB        SAVE B7
          SA1    DABT 
          BX1    X3-X1
          NZ     X1,COM30    ERROR EXIT IF NEXT ITEM IS NOT ABT 
          SA1    PACD 
          BX0    X1 
          RJ     CABSPPU
          RJ     CSTOREB     SAVE GENERATED CODE
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
          ZR     X3,COM30    ERROR EXIT IF END OF STATEMENT 
          SA1    PACC 
          RJ     FIND        GET Z
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          NZ     X3,COM30    ERROR EXIT IF NOT END OF STATEMENT 
          RJ     CPSN        PROCESS STATEMENT NUMBER 
          SA1    PACB 
          LX1    6
          SX0    2000B       SET BIAS FOR DESM
          BX0    X0+X1
          LX0    12 
          RJ     CSTOREB     SAVE GENERATED CODE
          EQ     COM10       EXIT TO COMPILER 
  
 PACA     VFD    57/0,3/REG1           CONTROL WORD FOR X AND Y 
 PACB     DATA   0                     BUFFER FOR ENTRY ADDRESS 
 PACC     VFD    42/0,12/77B,6/0       CONTROL WORD FOR Z 
 PACD     VFD    12/0,12/0,12/0,12/RJM,12/POVL+14B
 PACE     VFD    60/7LADDRESS          KEYWORDS IN ORDER EXPECTED 
          EJECT 
