*COMDECK MALETPF
          EJECT 
          QUAL   MALETPF
          IFNE   CMSE,0,1 
          USE    MODD 
          VFD    30/1,6/KEYFMD1,6/KEY2,18/0   CW FOR DEMA1 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 P9 OVERLAY (DEMA1)
          USE    *
          IFNE   CMSE,0,1 
          USE    P0OBFWA
          DATA   6105B             RELATIVE FWA OF OB 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0IB 
          DATA   505B        MAX VALUE FOR IB FOR P9 OVERLAY (DEMA1)
          USE    *
          IFNE   CMSE,0,1 
          USE    P0IBFWA
          DATA   5400B             RELATIVE FWA OF IB 
          USE    *
          IFNE   CMSE,0,1 
          USE    P0SB 
          DATA   64B         MAX VALUE FOR SB FOR P9 OVERLAY (DEMA1)
          USE    *
          IFNE   CMSE,0,1 
          USE    P0SBFWA
          DATA   6612B             RELATIVE FWA OF SB 
          USE    *
          EJECT 
*         DEMA1 ENTRY POINTS. 
  
 RELFMD   EQU    0
 RESFMD   EQU    1
 CNTLFMD  EQU    2
 GETFMD   EQU    3
 MARGFMD  EQU    4
 OUTFMD   EQU    5
 RDWRFMD  EQU    6
 RSETFMD  EQU    7
 RTNFMD   EQU    10B
 SEEKFMD  EQU    11B
 PTFMD    EQU    12B
 STATFMD  EQU    13B
 FLAGFMD  EQU    14B
  
          IFNE   CMSE,0,1 
          USE    PKEY 
          VFD    24/0,18/LFMD1,18/TFMD1 
 KEYFMD1  EQU    *-PKEY+PKEYOFF 
          USE    *
  
*         LEGAL HIGH-LEVEL I/O COMMANDS FOR DEMA1 
  
 TFMD1    VFD    42/7LCONTROL,18/FMDCNTL
          VFD    42/4LFLAG,18/FMDFLAG 
          VFD    42/5LFMDPT,18/FMDPT
          VFD    42/3LGET,18/FMDGET 
          VFD    42/7LMARGINS,18/FMDMARG
          VFD    42/3LOUT,18/FMDOUT 
          VFD    42/4LREAD,18/FMDREAD 
          VFD    42/6LREADCW,18/FMDRDCW 
          VFD    42/3LREL,18/FMDREL 
          VFD    42/3LRES,18/FMDRES 
          VFD    42/5LRESET,18/FMDRSET
          VFD    42/7LRTNADDR,18/FMDRTN 
          VFD    42/4LSEEK,18/FMDSEEK 
          VFD    42/6LSTATUS,18/FMDST1
          VFD    42/6LVERIFY,18/FMDVER
          VFD    42/5LWRITE,18/FMDWR
 LFMD1    EQU    *-TFMD1
  
*         CONSTANTS USED BY DEMA1 
  
 DAND     VFD    60/3LAND 
 DCHANNEL VFD    60/7LCHANNEL 
          VFD    60/2LCH
 DEXEC    VFD    60/7LEXECUTE 
 DSEC     VFD    60/3LSEC 
          VFD    60/6LSECTOR
 DTIME    VFD    60/4LTIME
 DPULSE   VFD    60/5LPULSE 
          EJECT 
 FMDCNTL  TITLE  FMDCNTL  - PROCESS THE DEMA1 CONTROL STATEMENT.
**        FMDCNTL - PROCESS THE DEMA1 CONTROL STATEMENT.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDCNTL  - PROCESS THE DEMA1 CONTROL STATEMENT. FORMATS ARE;
* 
*           CONTROL A,B,C,D,ABT Z 
*           CONTROL A,B,C,D,EXECUTE,ABT Z 
*           CONTROL A,B,C,D,TIME V TO X AND Y,ABT Z 
*           CONTROL A,B,C,D,TIME V X AND Y,ABT Z
*           CONTROL A,B,C,D,TIME V X Y,ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  COM31  IF ITEM NOT FOUND 
*                  P9C4   IF NO ERRORS FOUND
* 
*         ROUTINES CALLED -  FIND   - FIND THE NEXT ITEM FROM SOURCE. 
*                            CSTOREB- STORE GENERATED CODE. 
*                            CLOAD  - FORM BINARY CODE FOR LOAD.
* 
*         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. 
* 
  
**        1. GET VALUE FOR A AND FORM CODE TO STORE INTO PA+50B.
* 
 FMDCNTL  SA1    CNTA        CONTROL WORD FOR VALUE 0-377B
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SX1    STD+PA+50B 
          LX0    12 
          BX0    X0+X1       CODE  LDC A, STD PA+50B
          RJ     CSTOREB
  
**        2. GET VALUE FOR B AND FORM CODE TO STORE INTO PA+51B.
* 
          SA1    CNTA        CONTROL WORD FOR A-D 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SX1    STD+PA+51B 
          LX0    12 
          BX0    X0+X1       CODE  LDC B, STD PA+51B
          RJ     CSTOREB
  
**        3. GET VALUE FOR C AND FORM CODE TO STORE INTO PA+52B.
* 
          SA1    CNTA        CONTROL WORD FOR A-D 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SX1    STD+PA+52B 
          LX0    12 
          BX0    X0+X1       CODE  LDC C, STD PA+52B
          RJ     CSTOREB
  
**        4. GET VALUE FOR D AND FORM CODE TO STORE INTO PA+53B.
* 
          SA1    CNTA        CONTROL WORD FOR A-D 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SX1    STD+PA+53B 
          LX0    12 
          BX0    X0+X1       CODE  LDC D, STD PA+53B
          RJ     CSTOREB
  
**        5. SEE IF EXECUTE IF NOT THEN STEP 6, ELSE ADVANCE PCRK THEN
*            STEP 12. 
* 
          SB7    B0          (B7) = 0 
          ZR     X3,COM30    IF NO MORE PARAMETERS
          SA1    DEXEC       DISPLAY CODE  *EXECUTE*
          BX1    X1-X3
          NZ     X1,CNTL1    IF NOT EXECUTE 
          SB7    B1          (B7) = 1 
          SA3    A3+1 
          SX6    A3 
          SA6    PCRK 
          EQ     CNTL5
  
**        6. SEE IF TIME IF NOT THEN STEP 8 ELSE BUNMP PCRK THEN STEP 
*            7. 
* 
 CNTL1    SA1    DTIME       DISPLAY CODE *TIME*
          BX1    X1-X3
          NZ     X1,CNTL5    IF NOT TIME
          SB7    B1+B1       (B7)= 2
          SA3    A3+B1       GET NEXT VALUE SHOULD BE X 
          SX6    A3 
          SA6    PCRK 
  
**        7. GET VALUE FOR V AND FORM CODE TO STORE INTO PA+54B.
* 
          SA1    CNTC        CONTROL WORD FOR V 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SX1    STD+PA+1 
          LX0    12 
          BX0    X0+X1       CODE  LDC V, STD PA+54B
          RJ     CSTOREB
  
**        8. SEE IF TO IF NOT THEN STEP 8,ELSE ADVANCE POINTER THEN 
*            STEP 9.
* 
          SX1    2RTO 
          LX1    59-11
          BX1    X1-X3
          NZ     X1,CNTL2    IF NOT TO
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK 
  
**        9. GET VALUE FOR X AND FORM CODE TO STORE INTO PA+55B.
* 
 CNTL2    SA1    CNTB 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF REGISTER NOT FOUND 
          SX0    B3+LDN 
          SX1    STD+PA+55B 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
  
**        10. IF AND USED ADVANCE POINTER ELSE STEP 11. 
* 
          SA1    DAND        SISPLAY CODE *AND* 
          BX1    X1-X3
          NZ     X1,CNTL3    ERROR EXIT IF NOT AND
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        STORE POINTER TO CRKBUF AFTER BUMP 
  
**        11. GET VALUE FOR Y AND FORM CODE TO STORE INTO PA+56B. 
* 
 CNTL3    SA1    CNTB 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF REGISTER NOT FOUND 
          SX0    B3+LDN 
          SX1    STD+PA+56B 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
          SB7    B1+B1       FLAG CODE=2
  
**        12. STORE OPERATION CODE THEN ENTER COMMON ABT SEQUENCE.
* 
 CNTL5    SX0    LDN+B7 
          SX1    STD+PA      CODE IS   LDN  CODE
          LX0    12                    STD  PA
          BX0    X0+X1
          RJ     CSTOREB
          SB7    CNTLFMD
          EQ     P9C4 
          EJECT 
 P9C      TITLE  P9 DEMA1 COMMON CODE PROCESSOR.
**        P9     P9 DEMA1 COMMON CODE PROCESSOR.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         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 V CODED/NOT CODED SECTORS AT
  
 P9C      ZR     X3,COM30    ERROR EXIT IF END OF STATEMENT 
          SX0    X0+LDN 
          SA1    P9CA 
          RJ     FIND        GET V
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          SX2    B3+LDN      CODE = LDN V 
          SA1    DCODED 
          BX1    X1-X3
          ZR     X1,P9C0A 
          SA1    DC 
          BX1    X1-X3
          NZ     X1,P9C0     IF NOT C 
 P9C0A    SA3    A3+B1
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
          SX0    X0+20B      SET CODED FLAG BIT 
 P9C0     LX0    12 
          SX1    STD+PA 
          BX0    X0+X1
          LX0    12 
          SX1    STD+PA+53B 
          BX0    X0+X2
          LX0    12 
          BX0    X0+X1       CODE= LDN FLAGS  STD PA  LDN V  STD PA+53B 
 P9C1     RJ     CSTOREB     SAVE GENERATED CODE
          SA1    DSECTOR
          BX1    X1-X3
          ZR     X1,P9C1A    IF SECTORS KEYWORD 
          SA1    P9CE+2 
          BX1    X1-X3
          NZ     X1,COM30    IF NOT SEC THEN SYNTAX ERROR 
 P9C1A    SA3    A3+B1
          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 
  
 P9C2     SX7    B7 
          SA7    P9CB        SAVE ENTRY ADDRESS 
          SB7    B0 
 P9C3     SA1    P9CE+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    P9CA 
          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,P9C3  IF Y HAS NOT BEEN DONE YET 
          SA1    P9CB 
          SB7    X1          RESTORE ENTRY ADDRESS
  
*         CRACK ABT Z 
  
 P9C4     SX7    B7 
          SA7    P9CB        SAVE B7
          SA1    DABT 
          BX1    X3-X1
          NZ     X1,COM30    ERROR EXIT IF NEXT ITEM IS NOT ABT 
          SA1    P9CD 
          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    P9CC 
          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    P9CB 
          LX1    6           POSITION INDEX 
          SX0    2000B       BIAS CODE FOR DEMA 
          BX0    X1+X0
          LX0    12 
          RJ     CSTOREB     SAVE GENERATED CODE
          EQ     COM10       EXIT TO COMPILER 
  
 P9CA     VFD    57/0,3/REG1           CONTROL WORD FOR V,W,X AND Y 
 P9CB     DATA   0                     BUFFER FOR ENTRY ADDRESS 
 P9CC     VFD    42/0,12/77B,6/0       CONTROL WORD FOR Z 
 P9CD     VFD    12/0,12/0,12/0,12/RJM,12/POVL+14B
 P9CE     VFD    60/3LCYL              KEYWORDS IN ORDER EXPECTED 
          VFD    60/3LTRK 
          VFD    60/3LSEC 
  
 CNTA     VFD    42/0,12/377B,6/0      CONTROL WORD FOR A-D 
 CNTB     VFD    57/0,3/REG1           CONTROL WORD FOR X-Y 
 CNTC     VFD    42/0,12/7777B,6/0     CONTROL WORD FOR V 
          EJECT 
 FMDFLAG  TITLE  FMDFLAG - PROCESS THE DEMA1 FLAG PULSE STATEMENT.
**        FMDFLAG - PROCESS THE FLAG PULSE STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDFLAG - PROCESS THE DEMA1 FLAG PULSE STATEMENT. FORMAT
*                   AS FOLLOWS. 
* 
* 
*           FLAG PULSE CH=X,ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - COM31 - IF ERROR FOUND BY FIND ROUTINE. 
*                 COM30 - IF ERROR FOUND IN STATEMENT.
*                 P9C4  - IF NO ERRORS FOUND. 
* 
*         ROUTINES CALLED - CSTOREB- STORE GENERATED PPU BINARY.
*                           FIND   - FIND THE NEXT DATA ITEM. 
* 
*         DATA AREAS USED - CRKBUF - WORD STRING OF SOURCE STATEMENT. 
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 6. 
*                B - 7. 
* 
 FMDFLAG  SA1    DPULSE 
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NOT PULSE
          SA3    A3+B1       GET NEXT DATA ITEM 
          SA1    DCHANNEL 
          BX1    X1-X3
          ZR     X1,FLAG1    IF DATA ITEM IS CHANNEL
          SA1    A1+B1
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NOT CH OR CHANNEL
 FLAG1    SA3    A3+B1       GET NEXT DATA ITEM 
          SX1    X3-1R= 
          NZ     X1,COM30    ERROR EXIT IF NOT = SIGN 
          SX6    A3+B1
          SA6    PCRK        UPDATE POINTER INTO CRKBUF 
          SA1    OUTB        CONTROL WORD FOR X 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SX1    STD+PA 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED BINARY
          SB7    FLAGFMD     ENTRY POINT FOR FLAG SUBROUTINE
          EQ     P9C4        ENTER COMMON ABT PROCESSOR 
          EJECT 
 FMDPT    TITLE  FMDPT - PROCESS THE DEMA1 FMDPT STATEMENT. 
**        FMDPT - PROCESS THE DEMA1PT STATEMENT.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDPT - PROCESS THE DEMA1PT STATEMENT. FORMAT 
*                 AS FOLLOWS. 
* 
* 
*           FMDPT X Y ,ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - COM31 - IF ERROR FOUND BY FIND ROUTINE. 
*                 COM30 - IF ERROR FOUND IN STATEMENT.
*                 P9C4  - IF NO ERRORS FOUND. 
* 
*         ROUTINES CALLED - CSTOREB- STORE GENERATED PPU BINARY.
*                           FIND   - FIND THE NEXT DATA ITEM. 
* 
*         DATA AREAS USED - CRKBUF - WORD STRING OF SOURCE STATEMENT. 
* 
*         USES   A - 1. 
*                X - 0, 1.
*                B - 7. 
* 
 FMDPT    SA1    FMDPTA      CONTROL WORD FOR X 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          SX0    B3+LDN 
          SX1    STD+PA+55B 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB
          SA1    FMDPTA 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          SX0    B3+LDN 
          SX1    STD+PA+56B 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED BINARY
          SB7    PTFMD       ENTRY POINT FOR FLAG SUBROUTINE
          EQ     P9C4        ENTER COMMON ABT PROCESSOR 
  
 FMDPTA   VFD    57/0,3/REG1
          EJECT 
          EJECT 
 FMDGET   TITLE  FMDGET   - PROCESS THE DEMA1 GET STATEMENT.
**        FMDGET -  PROCESS THE DEMA1 GET STATEMENT.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDGET  - PROCESS THE DEMA1 GET  STATEMENT. FORMATS ARE;
* 
*                 GET SERIAL, ABT Z 
*                 GET FACTORY SECTOR X, ABT Z 
*                 GET UTILITY SECTOR X, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  COM31  IF ITEM NOT FOUND 
*                  P9C4   IF NO ERRORS FOUND
* 
*         ROUTINES CALLED -  CSTOREB- STORE GENERATED CODE. 
*                            FIND   - FIND THE NEXT ITEM FROM SOURCE. 
*                            CLOAD  - FORM BINARY CODE FOR LOAD.
*                            FIND   - CRACK NEXT DATA ITEM. 
*                            CLOAD  - FORM BINARY CODE FOR LOAD.
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 6, 7.
* 
 FMDGET   SB7    B0 
          SB6    LFMDG
 FMDG1    SA1    B7+FMDG
          BX1    X1-X3
          ZR     X1,FMDG2    IF KEYWORD FOUND 
          SB7    B7+B1       BUMP POINTER 
          NE     B7,B6,FMDG1 IF LIST NOT EXHAUSTED
          EQ     COM30       ERROR EXIT IF KEYWORD NOT FOUND
  
 FMDG2    SX0    LDN+B7 
          SX1    STD+PA 
          SA3    A3+B1       NEXT ITEM FROM CRKBUF
          LX0    12 
          SX6    A3          BUMP POINTER TO CRKBUF 
          BX0    X0+X1       CODE = LDN CODE  STD PA
          SA6    PCRK 
          RJ     CSTOREB     SAVE GENERATED CODE
          SX0    LDN
          ZR     B7,FMDG4 
          MX0    0
          SA1    DSEC        DISPLAY CODE SEC 
          BX1    X1-X3
          ZR     X1,FMDG3 
          SA1    A1+B1       DISPLAY CODE SECTOR
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NOT SEC OR SECTOR
 FMDG3    SA3    A3+B1
          SX6    A3 
          SA6    PCRK 
          SA1    FMDGA
          RJ     FIND 
          NG     B2,COM31    ERRORS EXIT IF NOT IN RANGE
          RJ     CLOAD
 FMDG4    SX1    STD+PA+1 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     STORE GENERATED CODE 
          SB7    GETFMD      ENTRY POINT FOR GET
          EQ     P9C4        ENTER COMMON SEQUENCE
  
 FMDG     VFD    60/6LSERIAL   GET KEYWORDS 
          VFD    60/7LFACTORY 
          VFD    60/7LUTILITY 
 LFMDG    EQU    *-FMDG 
  
 FMDGA    VFD    42/0,12/37B,3/0,3/REG1    CONTROL WORD FOR X 
          EJECT 
 FMDOUT   TITLE  FMDOUT - PROCESS THE DEMA1 OUT STATEMENT.
**        FMDOUT - PROCESS THE DEMA1 OUT STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDOUT - PROCESS THE DEMA1 MARGINS OUT. FORMAT
* 
*           OUT CHANNEL=A B C,ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  COM31  IF ITEM NOT FOUND 
*                  P9C4   IF NO ERRORS FOUND
* 
*         ROUTINES CALLED -  FIND   - FIND THE NEXT ITEM FROM SOURCE. 
*                            CLOAD  - FORM BINARY CODE FOR LOAD.
*                            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. 
* 
 FMDOUT   SA1    DCHANNEL 
          BX1    X3-X1
          ZR     X1,OUT1
          SX1    2RCH 
          LX1    59-11       POSITION CH INTO UPPER 12 BITS 
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NOT CH OR CHANNEL
 OUT1     SA3    A3+B1
          SX1    X3-1R= 
          NZ     X1,COM30    ERROR EXIT IF NO = SIGN
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK 
  
          SA1    OUTB 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          BX6    X2 
          SA6    OUTC        SAVE OUT COMMAND CHANNEL NUMBER
          SX1    STD+PA 
          LX0    12 
          BX0    X0+X1       CODE  LDD A, STD PA
          RJ     CSTOREB
  
          SA1    OUTA        CONTROL WORD FOR B + C 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SA1    OUTC        GET OUT COMMAND CHANNEL NUMBER 
          SX1    X1-1 
          NZ     X1,OUT2     IF NOT CHANNEL 1 
          SX0    SCN+60B
          RJ     CSTOREB     SAVE GENERATED CODE
          EQ     OUT3 
  
 OUT2     SX1    X1+1-5 
          NZ     X1,OUT2A    IF NOT CHANNEL 5 
          SX1    SCN+10B
          LX0    12 
          BX0    X0+X1       CLEAR WRITE BIT ON OUT IF CH=5 
          RJ     CSTOREB     SAVE GENERATED CODE
          EQ     OUT3 
  
 OUT2A    SX1    X1+5-9 
          ZR     X1,COM30    ERROR EXIT IF CHANNEL 9
          SX1    X1+9-10
          ZR     X1,COM30    ERROR EXIT IF CHANNEL 10D
 OUT3     SX0    STD+PA+1 
          RJ     CSTOREB
  
          SA1    OUTA        CONTROL WORD FOR B + C 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          RJ     CLOAD
          SA1    OUTC 
          SX1    X1-1 
          NZ     X1,OUT4     IF NOT CHANNEL 1 ON OUT COMMAND
          SX0    LPC
          SX1    100B 
          LX0    12 
          BX0    X0+X1       FORM LPC 100B
          LX0    12 
          SX1    ADM
          BX0    X0+X1
          LX0    12 
          SA1    TBUF3       GET FIRST WORD OF SB 
          BX1    -X5*X1      CLEAR GARBAGE
          SX1    X1+63B      FORM ADDRESS OF SB+63B 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED CODE
 OUT4     SX0    STD+PA+2    FORM  STD PA+2 
          RJ     CSTOREB
          SB7    OUTFMD      ENTRY POINT FOR OUT COMMAND
          EQ     P9C4        ENTER COMMON ABT PROCESSING
  
 OUTA     VFD    42/0,12/377B,3/0,3/REG2   CONTROL WORD FOR B AND C 
 OUTB     VFD    42/0,12/16B,3/0,3/0       CONTROL WORD FOR A 
 OUTC     DATA   0           DATA FOR CHANNEL NUMBER ON OUT COMMAND 
          EJECT 
 FMDMARG  TITLE  FMDMARG - PROCESS THE DEMA1 MARGINS STATEMENT. 
**        FMDMARG - PROCESS THE DEMA1 MARGINS STATEMENT.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDMARG - PROCESS THE DEMA1 MARGINS STATEMENT. FORMAT 
* 
*           MARGINS W, ABT Z
*           MARGINS X OFFSET, Y STROBES, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  P9C4   IF NO ERRORS FOUND
* 
*         ROUTINES CALLED -  FIND   - FIND THE NEXT ITEM FROM SOURCE. 
*                            CLOAD  - FORM BINARY CODE FOR LOAD.
*                            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 - 5, 6, 7. 
* 
 FMDMARG  SA1    FMDMA       ENTRY POINT FOR DIAGRD 
          RJ     FIND        GET W IF SPECIFIED 
          NG     B2,FMDM1    IF NOT FOUND - NOT A REGISTER
          RJ     CLOAD
          EQ     FMDM6
  
 FMDM1    SB7    B0          CLEAR COUNTER
          SB6    LFMDMB      SET LENGTH 
 FMDM2    SA1    B7+FMDMB 
          BX1    X1-X3
          ZR     X1,FMDM3    IF KEYWORD FOUND 
          SB7    B7+B1       BUMP POINTER 
          NE     B7,B6,FMDM2 IF NOT END OF TABLE
          EQ     COM30       ERROR EXIT IF KEYWORD NOT FOUND
  
 FMDM3    SB5    B7          SET OFFSET VALUE 
          SB7    B0          CLEAR COUNTER
          SB6    LFMDMC 
          SA3    A3+B1       NEXT ITEM FROM CRKBUF
          SA1    DOFFSET
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NEXT KEYWORD NOT OFFSET
          SA3    A3+B1       NEXT ITEM FROM CRKBUF
 FMDM4    SA1    B7+FMDMC 
          BX1    X1-X3
          ZR     X1,FMDM5    IF KEYWORD FOUND 
          SB7    B7+B1       BUMP POINTER 
          SB5    B5+10B      BUMP STROBES 
          NE     B7,B6,FMDM4 IF NOT END OF LIST 
          EQ     COM30       ERROR EXIT IF KEYWORD NOT FOUND
  
 FMDM5    SA3    A3+B1       NEXT ITEM FROM CRKBUF
          SA1    DSTROBE
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NEXT ITEM NOT STROBES
          SA3    A3+B1
          SX0    LDN+B5 
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
 FMDM6    SX1    STD+PA 
          LX0    12 
          BX0    X0+X1       CODE = LDN VALUE   STD PA
          RJ     CSTOREB
          SB7    MARGFMD     ENTRY POINT FOR MARGINS
          EQ     P9C4        ENTER COMMON ABT SEQUENCE
  
 FMDMA    VFD    57/0,3/REG2 CONTROL WORD FOR W 
  
 FMDMB    VFD    60/6LNORMAL KEYWORDS FOR X 
          VFD    60/3LFWD 
          VFD    60/3LREV 
 LFMDMB   EQU    *-FMDMB
  
 FMDMC    VFD    60/6LNORMAL KEYWORDS FOR Y 
          VFD    60/5LEARLY 
          VFD    60/4LLATE
 LFMDMC   EQU    *-FMDMC
          EJECT 
 FMDREAD  TITLE  FMDREAD - PROCESS THE DEMA1 READ STATEMENT.
**        FMDREAD - PROCESS THE DEMA1 READ STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDREAD - PROCESS THE DEMA1 READ STATEMENT. FORMAT; 
* 
*           READ V SECTORS AT CYL W TRK X SEC Y, ABT Z
*           READ V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT -   P9C    IF NO ERRORS FOUND
* 
*         ROUTINES CALLED    NONE.
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - NONE.
*                X - 0. 
*                B - 7. 
* 
 FMDREAD  SB7    RDWRFMD     ENTRY POINT FOR READ 
          SX0    4           READ FUNCTION
          EQ     P9C         ENTER COMMON SEQUENCE
          EJECT 
 FMDRDCW  TITLE  FMDRDCW - PROCESS THE DEMA1 READCW STATEMENT.
**        FMDRDCW - PROCESS THE DEMA1 READCW STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDDRD  - PROCESS THE DEMA1 READCW STATEMENT. FORMAT IS 
* 
*           READCW V SECTORS AT CYL W TRK X SEC Y, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  COM31  IF ITEM NOT FOUND 
*                  P9C1   IF NO ERRORS FOUND
* 
*         ROUTINES CALLED -  FIND   - FIND THE NEXT ITEM FROM SOURCE. 
* 
*         DATA AREAS USED -  CRKBUF - WORD STRING OF SOURCE STATEMENT.
*                            MODULE - BINARY CODE GENERATED.
* 
*         USES   A - 1. 
*                X - 0, 1.
*                B - 7. 
* 
 FMDRDCW  SB7    RDWRFMD     ENTRY POINT FOR READCW 
          ZR     X3,COM30    ERROR EXIT IF END OF STATEMENT 
          SX0    LDN+7       READ CHECKWORD FUNCTION
          SX1    STD+PA 
          LX0    12 
          BX0    X0+X1
          SA1    P9CA 
          RJ     FIND 
          NG     B2,COM31    ERROR EXIT IF NOT FOUND
          SX1    B3+LDN 
          LX0    12 
          BX0    X0+X1
          SX1    STD+PA+53B 
          LX0    12 
          BX0    X0+X1       CODE = LDN CODE, STD PA, LDN V, STD PA+53B 
          EQ     P9C1        ENTER COMMON SEQUENCE
          EJECT 
 FMDREL   TITLE  FMDREL  - PROCESS THE DEMA1 REL STATEMENT. 
**        FMDREL - PROCESS THE DEMA1 REL STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDREL  - PROCESS THE DEMA1 REL STATEMENT. FORMAT IS
* 
*           REL, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT -   P9C4   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. 
* 
 FMDREL   SB7    RELFMD      ENTRY POINT FOR REL
          EQ     P9C4        ENTER COMMON ABT SEQUENCE
          EJECT 
 FMDRES   TITLE  FMDRES  - PROCESS THE DEMA1 RES STATEMENT. 
**        FMDRES - PROCESS THE DEMA1 RES STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDRES  - PROCESS THE DEMA1 RES STATEMENT. FORMATS ARE; 
* 
*           RES CONTROLLER, ABT Z 
*           RES DRIVE, ABT Z
*           RES DRIVE FAULT, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  COM31  IF ITEM NOT FOUND 
*                  P9C4   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, 2, 3, 6.
*                X - 0, 1, 2, 3, 6. 
*                B - 7. 
* 
 FMDRES   SA1    FMDRA       ENTRY POINT FOR RES
          SA2    FMDRB
          BX1    X1-X3
          SB7    B0 
          ZR     X1,FMDR     IF RES CONTROLLER
          BX2    X2-X3
          SB7    B1 
          NZ     X2,COM30    ERROR EXIT IF NOT DRIVE OR CONTROLLER
          SA2    A3+B1
          SA1    FMDRC       GET DISPLAY CODE FOR FAULT 
          BX1    X1-X2
          NZ     X1,FMDR     IF NOT FAULT 
          SX0    LDC
          LX0    12 
          SX1    2000B       DATA FOR RES DRIVE AND DONT CLEAR FAULTS 
          BX0    X0+X1
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        UPDATE PCRK POINTER TO CRKBUF
          EQ     FMDR1
 FMDR     SX0    LDN+B7 
 FMDR1    SX1    STD+PA 
          LX0    12 
          BX0    X0+X1       CODE = LDN 0/1  STD PA 
          RJ     CSTOREB     SAVE GENERATED CODE
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
          SB7    RESFMD      ENTRY POINT FOR RES
          EQ     P9C4        ENTER COMMON ABT SEQUENCE
  
 FMDRA    VFD    60/10LCONTROLLER 
 FMDRB    VFD    60/5LDRIVE 
 FMDRC    VFD    60/5LFAULT 
          EJECT 
 FMDRSET  TITLE  FMDRSET - PROCESS THE DEMA1 RESET STATEMENT. 
**        FMDRSET - PROCESS THE DEMA1 RESET STATEMENT.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDRSET - PROCESS THE DEMA1 RESET STATEMENT. FORMAT IS; 
* 
*           RESET, ABT Z
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT -   P9C4   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. 
* 
 FMDRSET  SB7    RSETFMD     ENTRY POINT FOR RESET
          EQ     P9C4        ENTER COMMON ABT PROCESSOR CODE
          EJECT 
 FMDRTN   TITLE  FMDRTN  - PROCESS THE DEMA1 RTNADDR STATEMENT. 
**        FMDRTN - PROCESS THE DEMA1 RTNADDR STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDRTN  - PROCESS THE DEMA1 RTNADDR STATEMENT. FORMAT IS; 
* 
*           RTNADDR TO Y, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT   - COM30  IF SYNTAX ERROR 
*                  COM31  IF ITEM NOT FOUND 
*                  P9C4   IF NO ERRORS FOUND
* 
*         ROUTINES CALLED - CSTOREB- STORE GENERATED PPU BINARY.
*                           FIND   - FIND THE NEXT ITEM FROM SOURCE.
*                           CLOADC - FORM BINARY CODE FOR LOAD. 
* 
*         DATA AREAS USED -  NONE.
* 
*         USES   A - 1, 3, 6. 
*                X - 0, 1, 3, 6.
*                B - 7. 
* 
 FMDRTN   SB7    RTNFMD      ENTRY POINT FOR RTNADDR
          SA1    DTO
          BX1    X1-X3
          NZ     X1,COM30    ERROR EXIT IF NEXT ITEM IS NOT TO
          SA3    A3+B1
          SX6    A3 
          SA6    PCRK        BUMP POINTER TO CRKBUF 
          SA1    FMDRTNA
          RJ     FIND        GET Y
          NG     B2,COM31    ERROR EXIT IF Y NOT FOUND
          RJ     CLOADC      GENERATE LOAD CONSTANT 
          SX1    STD+PA 
          LX0    12 
          BX0    X0+X1
          RJ     CSTOREB     SAVE GENERATED DATA
          EQ     P9C4        ENTER COMMON SEQUENCE
  
 FMDRTNA  VFD    54/0,3/BUF4,3/0       CONTROL WORD FOR Y 
          EJECT 
 FMDSEEK  TITLE  FMDSEEK - PROCESS THE DEMA1 SEEK STATEMENT.
**        FMDSEEK - PROCESS THE DEMA1 SEEK STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDRTN  - PROCESS THE DEMA1 SEEK STATEMENT. FORMAT IS;
* 
*           SEEK CYL W TRK X SEC Y, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT - (B7) = SEEKFMD (INDEX OF SEEK SUBROUTINE IN DRIVER)
*                P9C2 = COMMON COMPILER CODE TO PROCESS SEEK STATEMENT. 
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  NONE.
* 
*         USES   A - NONE.
*                X - NONE.
*                B - 7. 
* 
 FMDSEEK  SB7    SEEKFMD     ENTRY POINT FOR SEEK 
          EQ     P9C2        ENTER COMMON SEQUENCE
          EJECT 
 FMDST1   TITLE  FMDST1 - PROCESS THE DEMA1 STATUS STATEMENT. 
**        FMDST1 - PROCESS THE DEMA1 STATUS STATEMENT.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDST1 - PROCESS THE DEMA1 STATUS STATEMENT. FORMAT IS; 
* 
*           STATUS GENERAL, ABT Z 
*           STATUS DETAIL, ABT Z
*           STATUS CHANNEL, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT - COM30  IF SYNTAX ERROR 
*                P9C4 = 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. 
* 
 FMDST1   SB7    B0          CLEAR POINTER
          SB6    LFMDS1 
 FMDS11   SA1    FMDS1+B7 
          BX1    X1-X3
          ZR     X1,FMDS12    IF KEYWORD FOUND
          SB7    B7+B1       BUMP POINTER 
          NE     B7,B6,FMDS11 IF END OF LIST NOT FOUND
          EQ     COM30       ERROR EXIT IF NOT FOUND
  
 FMDS12   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    STATFMD     ENTRY POINT FOR STATUS 
          EQ     P9C4        ENTER COMMON SEQUENCE
  
 FMDS1    VFD    60/7LGENERAL 
          VFD    60/6LDETAIL
          VFD    60/7LCHANNEL 
 LFMDS1   EQU    *-FMDS1
          EJECT 
 FMDVER   TITLE  FMDVER - PROCESS THE DEMA1 VERIFY STATEMENT. 
**        FMDVER - FMDVER - PROCESS THE DEMA1 VERIFY STATEMENT. 
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDVER - FMDVER - PROCESS THE DEMA1 VERIFY STATEMENT.  FORMATS ARE; 
* 
*                VERIFY V SECTORS AT CYL W TRK X SEY Y, ABT Z 
*                VERIFY V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = VERFMD (INDEX OF VERIFY ROUTINE IN DRIVER. 
*                 P9C  = COMMON CODE TO PROCESS REST OF STATEMENT.
* 
*         ROUTINES CALLED - NONE. 
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - NONE.
*                X - NONE.
*                B - 7. 
* 
 FMDVER   SB7    RDWRFMD
          SX0    6+40B       VERIFY FUNCTION PLUS WRITE FLAG
          EQ     P9C         ENTER COMMON SEQUENCE
          EJECT 
 FMDWR    TITLE FMDWR - PROCESS THE DEMA1 WRITE STATEMENT.
**        FMDWR - PROCESS THE DEMA1 WRITE STATEMENT.
* 
*         G.L.GOLDEN  81/09/23. 
* 
*         FMDWR - PROCESS THE DEMA1 WRITE STATEMENT. FORMATS ARE; 
* 
*               WRITE V SECTORS AT CYL W TRK X SEC Y, ABT Z 
*               WRITE V CODED SECTORS AT CYL W TRK X SEC Y, ABT Z 
* 
*         ENTRY - CRKBUF = WORD STRING OF SOURCE STATEMENT. 
* 
*         EXIT  - (B7) = RDWRFMD (INDEX OF WRITE ROUTINE IN DRIVER. 
*                 (X0) = 45B (WRITE FUNCTION + WRITE BIT. 
*                 P9C  = COMMON CODE TO PROCESS REST OF STATEMENT.
* 
*         ROUTINES CALLED - NONE. 
* 
*         DATA AREAS USED - NONE. 
* 
*         USES    A - NONE. 
*                 X - 0.
*                 B - 7.
* 
 FMDWR    SB7     RDWRFMD     ENTRY POINT IN DRIVER FOR WRITE 
          SX0     5+40B       WRITE FUNCTION PLUS WRITE BIT 
          EQ      P9C         ENTER COMMON CODE TO PROCESS STATEMENT. 
          EJECT 
