*COMDECK,MALETPR
          EJECT 
          QUAL   MALETPR
          IFNE   CMSE,0,1 
          USE    MODD 
          VFD    30/1,6/KEY895D,6/KEY2,18/0   CW FOR P895D 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 (P895D)
          USE    *
          IFNE   CMSE,0,1 
          USE    P0OBFWA
          DATA   6103B             RELATIVE FWA OF OB 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0IB 
          DATA   505B        MAX VALUE FOR IB FOR PP OVERLAY (P895D)
          USE    *
          IFNE   CMSE,0,1 
          USE    P0IBFWA
          DATA   5376B             RELATIVE FWA OF IB 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0SB 
          DATA   66B         MAX VALUE FOR SB FOR PP OVERLAY (P895D)
          USE    *
          IFNE   CMSE,0,1 
          USE    P0SBFWA
          DATA   6610B             RELATIVE FWA OF SB 
          USE    *
  
*         P895D FULL TRACK ENTRY POINTS.
  
 RELP895D EQU    0
 RESP895D EQU    1
 RDWR895D EQU    2
 STAP895D EQU    3
  
          IFNE   CMSE,0,1 
          USE    PKEY 
          VFD    24/0,18/LP895D,18/TP895D 
 KEY895D  EQU    *-PKEY+PKEYOFF 
          USE    *
  
*         LEGAL HIGH-LEVEL I/O COMMANDS FOR P895D 
  
 TP895D   VFD    42/3LREL,18/P895REL
          VFD    42/3LRES,18/P895RES
          VFD    42/6LSTATUS,18/P895ST
          VFD    42/4LREAD,18/P895READ
          VFD    42/5LRDSEC,18/P895RD 
          VFD    42/5LWRITE,18/P895WR 
          VFD    42/4LWSEC,18/P895WRT 
 LP895D   EQU    *-TP895D 
  
*         CONSTANTS USED BY P895D 
  
 DSECTOR  VFD    60/6LSECTOR
 DAT      VFD    60/2LAT
 DCM      VFD    60/2LCM
 DFROM    VFD    60/4LFROM
 DTO      VFD    60/2LTO
  
          EJECT 
 P895READ TITLE  P895READ - PROCESS THE P895D READ STATEMENT. 
**        P895READ - PROCESS THE P895D READ STATEMENT.
* 
*         G. L. GOLDEN. 77/11/30. 
* 
*         P895READ - PROCESS THE P895D READ STATEMENT. FORMAT;
* 
*           READ SECTOR AT CYL W TRK X SEC Y, ABT Z 
*           RDSEC AT CYL W TRK X SEC Y, ABT Z 
*           READ SECTOR TO CM AT CYL W TRK X SEC Y, ABT Z 
*           RDSEC TO CM AT CYL W TRK X SEC Y, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = RDWR895D (ADDRESS OF READ ROUTINE IN DRIVER).
*                 (X0) = 4B OR 14B (READ OR READ TO CM 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 - NONE.
*                X - NONE.
*                B - 7. 
* 
 P895READ SB7    RDWR895D    ENTRY POINT FOR READ 
          SX0    4           READ FUNCTION
          SA1    DSECTOR
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SECTOR THEN SYNTAX ERROR
          SA3    A3+B1
 P895RD   SB7    RDWR895D    ENTRY POINT FOR READ 
          SX0    4           READ FUNCTION
          SA1    DTO
          BX1    X1-X3
          NZ     X1,P895RD1  IF NOT (TO)
          SA3    A3+B1
          SA1    DCM
          BX1    X1-X3
          NZ     X1,COM30    IF NOT CM SYNTAX ERROR 
          SA3    A3+B1
          SB7    RDWR895D 
          SX0    14B         FLAG CM READ 
 P895RD1  SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC         ENTER COMMON SEQUENCE
          EJECT 
 P895REL  TITLE  P895REL - PROCESS THE P895D REL STATEMENT. 
**        P895REL - PROCESS THE P895D REL STATEMENT.
* 
*         G.L.GOLDEN  83/02/17. 
* 
*         P895REL - PROCESS THE P895D REL STATEMENT. FORMAT IS
* 
*           REL, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  -  PAC4   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. 
* 
 P895REL  SB7    RELP895D    ENTRY POINT FOR REL
          EQ     PAC4        ENTER COMMON ABT SEQUENCE
          EJECT 
 P895RES  TITLE  P895RES - PROCESS THE P895D RES STATEMENT. 
**        P895RES - PROCESS THE P895D RES STATEMENT.
* 
*         G.L.GOLDEN  83/02/17. 
* 
*         P895RES - PROCESS THE P895D RES STATEMENT. FORMATS ARE
* 
*           RES DRIVE, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  -  PAC4   IF NO ERRORS FOUND
* 
*         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 - 1, 3, 6. 
*                B - 7. 
* 
 P895RES  SB7    B0 
          SA1    DDRIVE 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT RES DRIVE 
 RES      SX0    LDN+B7 
          SX1    STD+PA 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED BINARY
          SB7    RESP895D    ENTRY POINT FOR RES
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC4        ENTER COMMON ABT SEQUENCE
  
 DDRIVE   VFD    60/5LDRIVE 
          EJECT 
 P895ST   TITLE  P895ST  - PROCESS THE P895D STATUS STATEMENT.
**        P895ST - PROCESS THE P895D STATUS STATEMENT.
* 
*         G.L.GOLDEN  83/02/17. 
* 
*         P895ST - PROCESS THE P895D STATUS STATEMENT. FORMAT IS
* 
*           STATUS GENERAL, ABT Z 
*           STATUS DETAIL, ABT Z
*           STATUS ERROR, ABT Z 
*           STATUS OPERATION, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  PAC4 = COMMON CODE TO PROCESS REST OF STATEMENT. 
* 
*         ROUTINES CALLED -  CSTOREB- STORE GENERATED PPU BINARY. 
* 
*         DATA AREAS USED -  NONE.
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 P895ST   SB7    B0          CLEAR POINTER
          SB6    LP895S 
 P895S1   SA1    P895S2+B7
          BX1    X1-X3
          ZR     X1,P895S22   IF KEYWORD FOUND
          SB7    B7+B1       BUMP POINTER 
          NE     B7,B6,P895S1 IF END OF LIST NOT FOUND
          EQ     COM30       ERROR EXIT IF NOT FOUND
  
 P895S22  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    STAP895D    ENTRY POINT FOR STATUS 
          EQ     PAC4        ENTER COMMON SEQUENCE
  
 P895S2   VFD    60/7LGENERAL 
          VFD    60/6LDETAIL
          VFD    60/5LERROR 
          VFD    60/9LOPERATION 
 LP895S   EQU    *-P895S2 
          EJECT 
 P895WR   TITLE P895WR - PROCESS THE P895D WRITE STATEMENT. 
**        P895WR - PROCESS THE P895D WRITE STATEMENT. 
* 
*         G. L. GOLDEN  77/11/30. 
* 
*         P895WR - PROCESS THE P895D WRITE STATEMENT. FORMATS ARE;
* 
*               WRITE SECTOR AT CYL W TRK X SEC Y, ABT Z
*               WSEC AT CYL W TRK X SEC Y, ABT Z
*               WRITE SECTOR FROM CM AT CYL W TRK X SEC Y, ABT Z
*               WSEC FROM CM AT CYL W TRK X SEC Y, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = RDWR895D (ADDRESS OF WRITE ROUTINE IN DRIVER). 
*                 (X0) = 5B OR 15B (WRITE OR WRITE FROM CM 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 - NONE.
*                X - 0. 
*                B - 7. 
* 
 P895WR   SB7    RDWR895D    ENTRY POINT IN DRIVER FOR WRITE
          SX0    5B          WRITE SECTOR 
          SA1    DSECTOR
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SECTOR THEN SYNTAX ERROR
          SA3    A3+B1
 P895WRT  SB7    RDWR895D    ENTRY POINT IN DRIVER FOR WRITE
          SX0    5B          WRITE SECTOR 
          SA1    DFROM
          BX1    X1-X3
          NZ     X1,P895WR1  IF NOT FROM
          SA1    DCM
          SA3    A3+B1
          BX1    X1-X3
          NZ     X1,COM30    ERROR IF NOT CM
          SA3    A3+B1
          SB7    RDWR895D    ENTRY POINT IN DRIVER FOR CM WRITE 
          SX0    15B         WRITE/CM BIT 
 P895WR1  SX6    A3 
          SA6    PCRK        UPDATE POINTER TO CRKBUF 
          EQ     PAC         ENTER COMMON CODE TO PROCESS STATEMENT.
          EJECT 
  
          EJECT 
 PAC      TITLE  PAC - P895D 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 SECTOR AT 
  
 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    DAT
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NEXT ITEM IS NOT AT
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
  
*         CRACK CYL W TRK X SEC Y 
  
 PAC2     SX7    B7 
          SA7    PACB        SAVE ENTRY ADDRESS 
          SB7    B0 
 PAC3     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 
          SA1    PACA 
          RJ     FIND        GET W, X OR 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    3
          NE     B7,B6,PAC3  IF Y HAS NOT BEEN DONE YET 
          SA1    PACB 
          SB7    X1          RESTORE ENTRY ADDRESS
  
*         CRACK ABT Z 
  
 PAC4     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 P895D 
          BX0    X0+X1
          LX0    12 
          RJ     CSTOREB     SAVE GENERATED CODE
          EQ     COM10       EXIT TO COMPILER 
  
 PACA     VFD    57/0,3/REG1           CONTROL WORD FOR V,W,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/3LCYL              KEYWORDS IN ORDER EXPECTED 
          VFD    60/3LTRK 
          VFD    60/3LSEC 
          EJECT 
