CHD 
          IDENT  CHD,CHD
          PERIPH
          BASE   MIXED
          SST    RDS
          SYSCOM
*COMMENT  CHD - CHESS DISPLAY DRIVER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  CHD - CHESS DISPLAY DRIVER.
          SPACE  4
***       AUTHOR: 
*                 K. E. GORLEN
*                 VOGELBACK COMPUTING CENTER
*                 NORTHWESTERN UNIVERSITY 
*                 6400/6500/6600 SCOPE 3    03/20/69
  
  
***       CONVERSION TO KRONOS -
*         G. R. MANSFIELD.
*         E. W. HOBBS.       70/03/06.
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMDMAC 
*CALL     COMPMAC 
*CALL     COMSCPS 
          SPACE  4
****      DIRECT STORAGE LOCATION ASSIGNMENTS.
  
  
 NC       EQU    15          NUMBER OF CP-S (FOR *COMDSYS*) 
 XC       EQU    16          X-COORDINATE 
 YC       EQU    17          Y-COORDINATE 
 CN       EQU    20 - 24     CM WORD BUFFER 
 CC       EQU    25          CHARACTER COUNT
 KM       EQU    26          MESSAGE ADDRESS
 CR       EQU    27          CARRIAGE RETURN FLAG 
 SW       EQU    30 - 34     STATUS WORD
 WF       EQU    35          WAITING FOR CPU FLAG 
 LF       EQU    36          LIMIT FLAG 
 A.SW     EQU    37 - 40     STATUS WORD ABSOLUTE ADDRESS 
 A.TR     EQU    41 - 42     ADDRESS OF TREE POSITION 
 A.OP     EQU    43 - 44     ADDRESS OF OPTION DISPLAY
 A.GS     EQU    45 - 46     ADDRESS OF GAME SCORE DISPLAY
*         EQU    47 
 WC       EQU    57          KEYBOARD ENTRY WORD COUNT
 FT       EQU    60 - 61     FIRST
 SC       EQU    62          REAL TIME SECOND CLOCK 
 GC       EQU    63          GAME CLOCK STATUS
 OT       EQU    64 - 65     OUT
 LM       EQU    66 - 67     LIMIT
          SPACE  4
**        ASSEMBLY CONSTANTS. 
  
  
 NAME     MICRO  1,, CHESS
 CH       EQU    CHDS        DISPLAY CHANNEL
 CPF      EQU    3           LOOP CYCLES/FLASH
 FPM      EQU    6           FLASHES/MOVE 
 DSCT     EQU    20D         DISPLAY CYCLE (MS) 
 LOPT     EQU    6           LENGTH OF OPTION LIST
 LSCR     EQU    18D*4       LENGTH OF GAME SCORE (CM WORDS)
 LLIM     EQU    8D          LENGTH OF LIMIT LIST 
 XLIM     EQU    6000        LIMIT AND TREE COORDINATES 
 YLIM     EQU    7650 
 XBRD     EQU    6020        BOARD  COORDINATES 
 YBRD     EQU    7120 
 XOPT     EQU    6000        OPTIONS COORDINATES
 YOPT     EQU    7610 
 XSCR     EQU    6060        GAME SCORE COORDINATES 
 YSCR     EQU    7350 
 XCLK     EQU    6000        GAME CLOCK COORDINATES 
 YCLK     EQU    7440 
 XNAM     EQU    6070        PLAYER NAMES COORDINATES 
 YNAM     EQU    7520 
          SPACE  4
**        DISPLAY ENVIRONMENT TABLE POINTERS. 
  
  
 P.PD     EQU    1           PIECE DISPLAY BUFFER 
 P.IM     EQU    2           MESSAGE INPUT BUFFER 
 P.EM     EQU    3           ERROR MESSAGE BUFFER 
 P.OM     EQU    4           OUTPUT MESSAGE BUFFER
 P.LM     EQU    5           LIMIT SETTING
 P.TR     EQU    6           CURRENT POSITION IN TREE 
 P.BD     EQU    7           PACKED BOARD 
 P.OP     EQU    10          OPTION DISPLAY 
 P.GS     EQU    11          GAME SCORE DISPLAY 
 P.NM     EQU    12          PLAYER NAMES 
 P.RO     EQU    13          TEMPORARY ROLLOUT STORAGE
          SPACE  4
**        FUNCTION MNEMONICS. 
  
  
 F.DUM    EQU    2           DUMMY FUNCTION 
 F.AKL    EQU    4           ACCEPT KEYBOARD LINE 
 F.ERR    EQU    6           DISPLAY ERROR MESSAGE
 F.FLA    EQU    10          FLASH PIECE
 F.SET    EQU    12          SET CLOCKS 
 F.STP    EQU    14          STOP CLOCKS
 F.SCA    EQU    16          START CLOCK A
 F.SCB    EQU    20          START CLOCK B
 F.EPR    EQU    22          ENTER PRIORITY 
 F.EFL    EQU    24          ENTER FIELD LENGTH 
 F.DRP    EQU    26          DROP PP
 F.ABT    EQU    30          KILL JOB 
  
****
 LCMA     TITLE  MACROS 
**        LCMA - LOAD AN 18 BIT CENTRAL MEMORY ADDRESS INTO 
*         THE A REGISTER. 
*         THE HIGH ORDER BITS ARE IN BITS 0-5 OF (ADDR).
*         THE LOW ORDER BITS ARE IN (ADDR+1). 
*         ADDR MAY BE EITHER A DIRECT OR MEMORY LOCATION. 
  
  
 LCMA     MACRO  ADDR        LOAD CM ADDRESS
          LOCAL  N
 N        SET    1
          IFGT   ADDR,77,1
 N        SET    2
 K        MICRO  N,1,*DM* 
          LD_"K" ADDR 
          SHN    14 
          AD_"K" ADDR+1 
          ENDM
          SPACE  4
**        SCMA - STORE AN 18 BIT CM ADDRESS.
*         HIGH ORDER BITS IN (ADDR).
*         LOW ORDER BITS IN (ADDR+1). 
*         ADDR MAY BE DIRECT OR MEMORY. 
  
  
 SCMA     MACRO  ADDR 
          LOCAL  N
 N        SET    1
          IFGT   ADDR,77,1
 N        SET    2
 K        MICRO  N,1,*DM* 
          ST_"K" ADDR+1 
          SHN    -14
          ST_"K" ADDR 
          ENDM
          SPACE  4
**        TCMA - TRANSFER THE CM ADDRESS IN (A1 - A1+1) TO
*         (A2 - A2+1).
  
  
 TCMA     MACRO  A1,A2
          LOCAL  N1,N2
 N1       SET    1
 N2       SET    1
          IFGT   A1,77,1
 N1       SET    2
          IFGT   A2,77,1
 N2       SET    2
 K1       MICRO  N1,1,*DM*
 K2       MICRO  N2,1,*DM*
          LD_"K1" A1
          ST_"K2" A2
          LD_"K1" A1+1
          ST_"K2" A2+1
          ENDM
 INDEX    SPACE  4
***       INDEX - GENERATE INDEXED TABLE. 
* 
* 
*NAME     INDEX  TYPE,ADDRESS 
*         THIS MACRO IS INTENDED TO GENERATE TABLES WHICH ARE INDEXED 
*         BY SYMBOLIC CONSTANTS.
*         IT HAS 3 CALLING SEQUENCES. 
*         IF *NAME* IS PRESENT, THE FWA OF THE TABLE IS SET TO *NAME* 
*         AND *TYPE* IS APPENDED AS A BIAS TO *TYPE* FOR ALL
*         SUBSEQUENT CALLS. 
* 
*         IF *ADDRESS* IS MISSING, THE TABLE IS TERMINATED WITH AN
*         *ORG* TO THE END OF THE TABLE. THIS RESULTS IN ZERO ENTRIES 
*         FOR UNDEFINED ENTRIES IN THE TABLE. 
* 
*         OTHERWISE, A TABLE ENTRY IS MADE AT *INDEX* + *TYPE* OF 
*         *ADDRESS*, WITH *TYPE* MODIFIED BY *TYPE* GIVEN IN THE
*         INITIALIZING CALL.
* 
*         USES   SYMBOL NAME *INDEX*. 
*         CALLS  NONE.
  
  
          PURGMAC  INDEX
          MACRO  INDEX,A,B,C
          IFC NE,*A** 
 A        BSS    0
 .3       MICRO  1,, B
 .2       SET    A
          ELSE   5
          ORG    .2+B".3" 
          IFC    NE,*C**,2
          LOC    B
          CON    C
          BSS    0
          ENDM
 INDEX    SPACE  4
 .3       MICRO  1,,
 CHD      TITLE  MAIN DISPLAY LOOP
**        CHD - MAIN ROUTINE. 
  
          ORG    PPFW 
  
 CHD      RJM    PRS         PRESET 
 CHD1     RJM    PAUSE       FOR RELOCATION 
          RJM    PFC         PROCESS FUNCTION CODES 
          RJM    RKE         READ KEYBOARD ENTRY
          RJM    DKE         DISPLAY KEYBOARD ENTRY 
          RJM    SKE         STORE KEYBOARD ENTRY 
          RJM    DBD         DISPLAY CHESS BOARD
          RJM    DPC         DISPLAY CHESS PIECES 
          RJM    DOE         DISPLAY OUTPUT AND ERROR MESSAGES
          RJM    DLM         DISPLAY LIMITS AND TREE POSITION 
          RJM    DGC         DISPLAY GAME CLOCKS
          RJM    DOS         DISPLAY OPTIONS AND GAME SCORE 
          RJM    PFP         PROCESS FLASHING PIECE 
          RJM    UGC         UPDATE GAME CLOCKS 
          RJM    DSS         DISPLAY SYSTEM STATUS
          UJN    CHD1        LOOP 
 PAUSE    TITLE  PAUSE - PAUSE FOR RELOCATION 
**        PAUSE - PAUSE FOR RELOCATION. 
*                UPDATE STATUS ADDRESS. 
*                CHECK CONTROL POINT ERROR FLAG.
*                CHECK ROLLOUT FLAG - DROP WITH RECALL IF SET.
*                PROCESS DROP PP FUNCTION.
*                PROCESS KILL JOB FUNCTION. 
*                PROCESS FIELD LENGTH REQUEST.
  
  
 PAUSE    SUBR               ENTRY/EXIT 
          RJM    PSS         PAUSE FOR SYSTEM 
          LCMA   IR+3        UPDATE STATUS ADDRESS
          RJM    ABS
          CRD    SW          READ STATUS WORD 
          SCMA   A.SW        STORE ABSOLUTE ADDRESS OF STATUS 
          LDD    SW+4 
          LMN    F.DRP
          NJN    PAUSE1      IF NOT DROP FUNCTION 
          RJM    SB0
          LJM    DRP         DROP PP
  
 PAUSE1   LMN    F.ABT&F.DRP
          NJN    PAUSE2      IF NOT KILL FUNCTION 
          LJM    ABT         ABORT JOB
  
 PAUSE2   LDD    CP 
          ADN    STSW 
          CRD    CM 
          LDD    CM+2 
          LPN    1
          NJN    PAUSE4      IF ROLLOUT SET 
          LDD    SW+4 
          LMN    F.EFL
          ZJN    PAUSE3      IF FL REQUEST
          LJM    PAUSEX      RETURN 
  
 PAUSE3   LDD    FL 
          SHN    6
          SCMA   SW+2        RETURN CURRENT FL
          RJM    SB0
          LJM    PAUSEX      RETURN 
  
 PAUSE4   LDM    CLKAO       SAVE STATUS IN CENTRAL MEMORY
          STD    CM 
          LDM    CLKBO
          STD    CM+1 
          LDD    GC 
          STD    CM+2 
          LDM    UGCB 
          STD    CM+3 
          LDM    UGCE 
          STD    CM+4 
          LCMA   IR+3 
          ADN    P.RO 
          RJM    ABS
          CWD    CM 
  
*         DROP WITH RECALL. 
  
          RJM    DDS
          LDN    ZERL        CLEAR REQUEST BUFFER 
          CRD    CM 
          LDD    MA          WRITE IR TO MESSAGE BUFFER 
          CWD    IR 
          MONITOR  RECM      RECALL PP
          LJM    PPR         RETURN TO PP RESIDENT
 FNC      TITLE  FNC - FUNCTION CODE PROCESSOR
**        FNC - PROCESS FUNCTION CODES. 
*                READ OUTPUT MESSAGE. 
*                READ CURRENT LIMIT SETTING.
*                UPDATE PIECE DISPLAY BUFFER POINTERS.
*                READ RANK LABELS AND FILE LABELS.
*                UPDATE POINTERS TO BOARD,OPTION,GAME SCORE,TREE. 
  
  
          QUAL   FNC
  
 FNC      SUBR               ENTRY/EXIT 
          LDD    SW+4        CHECK FUNCTION CODE
          LPN    1
          NJN    FNCX        RETURN IF COMPLETED
          LDM    PFPA 
          NJN    FNCX        RETURN IF *FLASH* SET
          LDD    SW+4 
          SHN    -1 
          ZJN    FNCX 
          STD    YC 
          SBN    TFNCL+4
          MJN    FNC1        IF LEGAL FUNCTION CODE 
          LDC    FNCA+CPON   MESSAGE = *ILLEGAL FUNCTION CODE.* 
          RJM    DFM
          LJM    ABT         ABORT JOB
  
 FNC1     ADN    3
          PJN    FNCX        IF ENFL, DROP, KILL
  
*         SET BUFFER POINTERS.
  
          LDD    A.SW 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.PD 
          CRD    CN 
          TCMA   CN+1,FT
          TCMA   CN+3,LM
          LDD    A.SW 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.OM 
          CRD    CN 
          ADN    P.TR-P.OM
          CRD    CM 
          ADN    P.OP-P.TR
          CRD    T6 
          ADN    P.GS-P.OP
          CRD    T4 
          ADN    P.NM-P.GS
          CRD    T2 
          LCMA   T5          READ PLAYER NAMES
          RJM    ABS
          CRM    DOSE,ON
          CRM    DOSF,ON
          LCMA   CN+3        READ OUTPUT MESSAGE
          RJM    ABS
          CRM    DOEB,TR
          TCMA   CM+3,A.TR
          TCMA   CM+1,A.OP
          TCMA   T7,A.GS
  
*         READ LIMIT SETTING. 
  
          LDN    LLIM        SET LENGTH OF LIMIT BUFFER 
          STD    T1 
          LDD    A.SW 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.LM 
          CRD    CM 
          LCMA   CM+3        READ LIMITS
          RJM    ABS
          CRM    BUF,T1 
          LDN    0           SET INDEX
          STD    T5 
          STD    LF          CLEAR FLAG 
          LDC    BUF-1       SET BUFFER POINTER 
          STD    T6 
 FNC2     LDN    5
          RAD    T6          INCREMENT POINTER
          LDI    T6          CHECK LIMIT
          NJN    FNC3        IF NOT ZERO BYTE 
          STM    DLMC,T5     SET ZERO BYTE
          LDD    T5 
          SBN    2*6
          MJN    FNC5        IF @ 6 LEVELS
          UJN    FNC4 
  
 FNC3     RJM    CDD         CONVERT TO DECIMAL DISPLAY CODE
          STM    DLMC,T5     STORE
          LDN    2           INCREMENT INDEX
          RAD    T5 
          SBN    2*LLIM 
          NJN    FNC2        LOOP 
  
 FNC4     LCN    0           SET FLAG 
          STD    LF 
  
*         READ RANK LABELS. 
  
 FNC5     LDN    8D          SET NUMBER OF LABELS 
          STD    T1 
          LDD    A.SW        READ POINTER TO LABELS 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.BD 
          CRD    CM 
          LCMA   CM+3        READ LABELS
          RJM    ABS
          CRM    BUF,T1 
          LDC    BUF+5*7     SET POINTER TO BUFFER
          STD    T2 
 FNC6     LDI    T2          LOAD NEXT LABEL
          STM    DBDE-1,T1   STORE
          LCN    5           DECREMENT POINTER
          RAD    T2 
          SOD    T1          DECREMENT INDEX
          NJN    FNC6        LOOP 
  
*         READ FILE LABELS. 
  
          LDD    A.SW        READ POINTER TO BOARD
          SHN    14 
          ADD    A.SW+1 
          ADN    P.BD 
          CRD    CM 
          LCMA   CM+3        READ LABELS
          ADN    8D 
          RJM    ABS
          CRM    BUF,ON 
          LDC    BUF+4       SET POINTER TO LABELS
          STD    CM 
          LDC    DBDD+12D    SET POINTER TO LABEL BUFFER
          STD    CM+1 
 FNC7     LDI    CM          UNPACK LABELS
          LPN    77 
          STI    CM+1 
          SOD    CM+1 
          LDI    CM 
          SCN    77 
          STI    CM+1 
          LCN    2
          RAD    CM+1 
          SOD    CM 
          LMC    BUF
          NJN    FNC7        LOOP 
  
*         PROCESS FUNCTION CODE.
  
          LDM    TFNC-1,YC   SET ADDRESS OF FUNCTION ROUTINE
          STM    FNC8 
          RJM    **          EXECUTE
 FNC8     EQU    *-1
          LJM    FNCX        RETURN 
  
 FNCA     DATA   C*CHD - ILLEGAL FUNCTION CODE.*
 TFNC     SPACE  4
**        TFNC - TABLE OF FUNCTION CODES. 
  
  
 TFNC     INDEX  /2-1 
          INDEX  F.DUM,SB0
          INDEX  F.AKL,AKL
          INDEX  F.ERR,ERR
          INDEX  F.FLA,SFF
          INDEX  F.SET,SET
          INDEX  F.STP,STP
          INDEX  F.SCA,SCA
          INDEX  F.SCB,SCB
          INDEX  F.EPR,EPR
          INDEX  F.EFL
 TFNCL    EQU    *-TFNC 
  
          QUAL
 PFC      EQU    /FNC/FNC 
 AKL      TITLE  FUNCTION CODE PROCESSING SUBROUTINES 
**        AKL- ACCEPT KEYIN.
* 
*         CALLS  SB0. 
  
  
 AKL      SUBR               ENTRY/EXIT 
          LDD    KM 
          NJN    AKL1        IF MESSAGE SET 
          STD    CC          RESET CHARACTER COUNT
          STD    WC          RESET WORD COUNT 
 AKL1     RJM    SB0         SET COMPLETE 
          UJN    AKLX        RETURN 
 ERR      SPACE  4
**        ERR - ERROR IN KEYIN - SET ERROR FLAG.
* 
*         CALLS  ABS, SB0.
  
  
 ERR      SUBR               ENTRY/EXIT 
          LDD    A.SW 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.EM 
          CRD    CM 
          LCMA   CM+3 
          RJM    ABS
          CRM    ERRA,TR
          LDC    ERRA        DISPLAY ERROR MESSAGE
          STD    KM 
          RJM    SB0
          UJN    ERRX        RETURN 
  
 ERRA     BSSZ   3*5+1
 SFF      SPACE  4
**        SFF - SET FLASH FLAG TO FLASH PIECE.
  
  
 SFF      SUBR               ENTRY/EXIT 
          LDN    0           STOP CLOCKS
          STD    GC 
          LDN    1           SET FLAG 
          STM    PFPA 
          UJN    SFFX 
 SET      SPACE  4
**        SET - SET CLOCKS. 
* 
*         CALLS  CTD, SB0.
  
  
 SET      SUBR               ENTRY/EXIT 
          LDD    SW 
          STM    CLKAO       SET OCTAL SECONDS
          RJM    CTD
          STM    UGCC        SET MINUTES
          LDD    CM 
          STM    UGCD        SET DISPLAY SECONDS
          LDD    SW+1        REPEAT FOR CLOCK B 
          STM    CLKBO
          RJM    CTD
          STM    UGCF 
          LDD    CM 
          STM    UGCG 
          LDN    0           CLEAR TIME UP FLAGS
          STM    UGCB 
          STM    UGCE 
          STD    GC          STOP CLOCKS
          RJM    SB0
          UJN    SETX        RETURN 
 STP      SPACE  4
**        STP - STOP CLOCKS.
* 
*         CALLS  SB0. 
  
  
 STP      SUBR               ENTRY/EXIT 
          LDN    0
          STD    GC 
          RJM    SB0
          UJN    STPX 
 SCA      SPACE  4
**        SCA - START CLOCK A.
* 
*         CALLS  SB0. 
  
  
 SCA      SUBR               ENTRY/EXIT 
          LDM    CLKAO
          ZJN    SCA1        IF TIME IS UP
          LDN    1
          STD    GC 
 SCA1     RJM    SB0
          UJN    SCAX 
 SCB      SPACE  4
**        SCB - START CLOCK B.
* 
*         CALLS  SB0. 
  
  
 SCB      SUBR               ENTRY/EXIT 
          LDM    CLKBO
          ZJN    SCB1        IF TIME IS UP
          LDN    2
          STD    GC 
 SCB1     RJM    SB0
          UJN    SCBX 
 EPR      SPACE  4
**        EPR - ENTER PRIORITY. 
  
  
 EPR1     LDN    ZERL 
          CRD    CM 
          LDN    17 
          STD    CM+4 
          MONITOR  SJCM 
 EPR2     RJM    SB0
  
 EPR      SUBR               ENTRY/EXIT 
          LDD    SW+3 
          NJN    EPR1 
          LDD    CP 
          ADN    JCIW 
          CRD    CM 
          LDD    CM 
          STD    SW+3 
          UJN    EPR2 
 ABT      SPACE  4
**        ABT - ABORT JOB.
  
  
 ABT      RJM    DDS
          MONITOR ABTM
          LJM    PPR
 DRP      SPACE  4
**        DRP - DROP PP.
  
  
 DRP      RJM    DDS
 DPP      MONITOR DPPM
          LJM    PPR
 SB0      SPACE  4
**        SB0 - SET THE COMPLETE BIT IN THE STATUS WORD (BIT 0).
  
  
 SB0      SUBR               ENTRY/EXIT 
          LDD    SW+4 
          SCN    1
          ADN    1
          STD    SW+4 
          LDC    600D        STORE CURRENT GAME CLOCK READINGS
 CLKAO    EQU    *-1
          STD    SW 
          LDC    600D 
 CLKBO    EQU    *-1
          STD    SW+1 
          LDD    A.SW        WRITE CM STATUS WORD 
          SHN    14 
          ADD    A.SW+1 
          CWD    SW 
          MONITOR RCLM       RECALL CENTRAL PROCESSOR 
          UJN    SB0X        RETURN 
 RKE      TITLE  RKE - READ KEYBOARD ENTRY
*CALL     COMPCHI 
 RKE      SPACE  4
**        RKE - READ KEYBOARD ENTRY.
* 
*         CALLS  DDS, RDS, HDC. 
  
  
 RKE      SUBR               ENTRY/EXIT 
 RKEA     FNC    7020,CH     SELECT KEYBOARD INPUT
          ACN    CH 
          IAN    CH 
          DCN    CH 
          ZJN    RKE0.1      IF NO INPUT
          LMC    0
 RKEC     EQU    *-1
          ZJN    RKEX        IF SAME INPUT
          LMM    RKEC        STORE NEW INPUT
 RKE0.1   STM    RKEC 
          ZJN    RKEX        RETURN IF NO CHARACTER 
          STD    CM          SAVE CHARACTER 
          LMN    60 
          NJN    RKE2        IF NOT CARRIAGE RETURN (60B) 
          LDD    WC 
          NJN    RKE1        IF NOT EMPTY CARRIAGE RETURN 
          LDC    RKEB        DISPLAY *REPEAT ENTRY.*
          STD    KM 
          UJN    RKEX 
  
 RKE1     LDN    1           SET CARRIAGE RETURN FLAG 
          STD    CR 
          UJN    RKEX        RETURN 
  
 RKE2     LMN    1R &60 
          NJN    RKE3        IF NOT RIGHT BLANK (55B) 
          RJM    DDS         DROP DISPLAY 
          RJM    RDS         REQUEST DISPLAY
          RJM    MDC         MODIFY CHANNEL INSTRUCTIONS
          UJN    RKE4        RETURN 
  
 RKE3     LMN    1R*&1R 
          NJN    RKE5        IF NOT (*) 
          LDD    CC 
          NJN    RKE5        IF NOT FIRST ENTRY 
          RJM    HDC         HOLD DISPLAY CHANNEL 
 RKE4     LJM    RKEX        RETURN 
  
 RKE5     LDD    CM 
          LMN    61 
          NJN    RKE7        IF NOT BACKSPACE (61B) 
          STD    CR          CLEAR CR FLAG
          STD    WF          CLEAR WAITING FOR CP FLAG
          STD    KM          CLEAR MESSAGE
          LDD    CC 
          ZJN    RKE4        RETURN IF CHARACTER COUNT = 0
          SHN    -1          FORM WORD COUNT
          STD    WC 
          SOD    CC          DECREMENT CHARACTER COUNT
          LPN    1           TEST SHIFT BIT 
          ZJN    RKE6 
          LDM    KBUF-1,WC   CLEAR LAST CHARACTER 
          SCN    77 
          STM    KBUF-1,WC
 RKE6     LJM    RKE13
  
 RKE7     LMN    53&61
          NJN    RKE8        IF NOT LEFT BLANK (53B)
          STD    CR          CLEAR CR FLAG
          STD    WF          CLEAR WAITING FOR CP FLAG
          STD    KM          CLEAR MESSAGE
          STD    CC          ZERO CHARACTER AND WORD COUNT
          STD    WC 
          LJM    RKEX        RETURN 
  
 RKE8     LMN    62&53
          NJN    RKE9        IF NOT SPACE (62B) 
          LDN    1R          CORRECT SPACE CODE 
          STD    CM 
          UJN    RKE10
  
 RKE9     LDD    CM 
          SBN    60 
          MJN    RKE10       IF LEGAL CHARACTER 
          LJM    RKEX        RETURN 
  
 RKE10    LDD    CC 
          SBN    40D
          PJN    RKE11       IF \ 40 CHARACTERS 
          AOD    CC          INCREMENT CHARACTER COUNT
 RKE11    LDD    CC          SET WORD COUNT 
          ADN    1
          SHN    -1 
          STD    WC 
          LDD    CC 
          LPN    1
          ZJN    RKE12       IF LOWER CHARACTER 
          LDD    CM          STORE UPPER CHARACTER
          SHN    6
          STM    KBUF-1,WC
          UJN    RKE13
  
 RKE12    LDM    KBUF-1,WC   STORE LOWER CHARACTER
          SCN    77 
          ADD    CM 
          STM    KBUF-1,WC
 RKE13    LDC    7001        PRESET 32 CHARACTERS/LINE
          STM    DKEA 
          LDD    CC 
          SBN    31D
          MJN    RKE14       IF < 30 CHARACTERS 
          SOM    DKEA        SET 64 CHARACTERS/LINE 
 RKE14    LJM    RKEX        RETURN 
  
 RKEB     DATA   C*REPEAT ENTRY.* 
 DKE      TITLE  DKE - DISPLAY KEYBOARD ENTRY 
**        DKE - DISPLAY KEYBOARD ENTRY. 
* 
*         USES   T7.
  
  
 DKE      SUBR               ENTRY/EXIT 
          LDD    WC 
          ZJN    DKEX        RETURN IF NO ENTRY 
          LDC    7001        SELECT LEFT SCREEN 
 DKEA     EQU    *-1         SIZE FUNCTION CODE 
          FAN    CH 
          ACN    CH 
          LDD    WC          DISPLAY ENTRY
          ADN    2
          STD    T7 
          OAM    DKEB,CH
          DUP    3
          LDD    T7 
          OAM    DKEB,CH
          ENDD
          DCN    CH 
          LJM    DKEX        RETURN 
  
 DKEB     DATA   6002,7002
 KBUF     BSSZ   21D
 DBD      TITLE  LEFT SCREEN DISPLAYS 
**        DBD - DISPLAY CHESS BOARD.
* 
*         USES   T5 - T7. 
* 
*         CALLS  DHL. 
  
  
 DBD      SUBR               ENTRY/EXIT 
          FNC    7001,CH     SELECT LEFT SCREEN, 32 CHARACTERS/LINE 
          ACN    CH 
          LDC    YBRD        SET Y-COORDINATE 
          STD    T7 
          LDN    4           SET INDEX
          STD    T5 
 DBD1     LDD    T7          OUTPUT Y-COORDINATE
          OAN    CH 
          RJM    DHL         DISPLAY A HORIZONTAL LINE
          LDN    5           INITIALIZE INDEX 
          STD    T6 
 DBD2     LDN    10          ADVANCE Y-COORDINATE 
          RAD    T7 
          OAN    CH 
          LDC    XBRD-4      OUTPUT X-COORDINATE
          OAN    CH 
          LDN    DBDBL
          OAM    DBDB,CH
          SOD    T6          ADVANCE INDEX
          NJN    DBD2        LOOP 
          LDN    10          ADVANCE Y-COORDINATE 
          RAD    T7 
          OAN    CH 
          LDC    XBRD-4 
          OAN    CH 
          LDN    DBDAL
          OAM    DBDA,CH
          LDD    T7          OUTPUT Y-COORDINATE
          OAN    CH 
          RJM    DHL         DISPLAY A HORIZONTAL LINE
          LDN    5           SET INDEX
          STD    T6 
 DBD3     LDN    10          ADVANCE Y-COORDINATE 
          RAD    T7 
          OAN    CH 
          LDC    XBRD-4      OUTPUT X-COORDINATE
          OAN    CH 
          LDN    DBDCL
          OAM    DBDC,CH
          SOD    T6          ADVANCE INDEX
          NJN    DBD3        LOOP IF NOT DONE 
          SOD    T5 
          ZJN    DBD4        IF 8 RANKS DISPLAYED 
          LDN    10          ADVANCE Y-COORDINATE 
          RAD    T7 
          OAN    CH 
          LDC    XBRD-4      OUTPUT X-COORDINATE
          OAN    CH 
          LDN    DBDAL
          OAM    DBDA,CH
          LJM    DBD1        LOOP 
  
 DBD4     LDN    10          ADVANCE Y-COORDINATE 
          RAD    T7 
          OAN    CH 
          RJM    DHL         DISPLAY TOP HORIZONTAL LINE
  
*         DISPLAY FILE LABELS.
  
          LDN    DBDDL
          OAM    DBDD,CH
  
*         DISPLAY RANK LABELS.
  
          LDC    YBRD+550    SET STARTING Y-COORDINATE
          STD    T7 
          LDN    0           INITIALIZE INDEX 
          STD    T6 
 DBD5     LDC    XBRD-20     STARTING X-COORDINATE
          OAN    CH 
          LDD    T7          OUTPUT Y-COORDINATE
          OAN    CH 
          LDM    DBDE,T6     DISPLAY NEXT LABEL 
          OAN    CH 
          LCN    60          ADVANCE Y-COORDINATE 
          RAD    T7 
          AOD    T6          ADVANCE INDEX
          LMN    8D 
          NJN    DBD5        LOOP FOR 8 LABELS
          DCN    CH 
          LJM    DBDX 
  
 DBDA     DATA   H*I  I  I  I  I  I  I  I  I* 
 DBDAL    EQU    *-DBDA 
 DBDB     DATA   H*I  I//I  I//I  I//I  I//I* 
 DBDBL    EQU    *-DBDB 
 DBDC     DATA   H*I//I  I//I  I//I  I//I  I* 
 DBDCL    EQU    *-DBDC 
 DBDD     CON    XBRD+24
          CON    YBRD-20
          BSSZ   11D         FILE LABEL BUFFER
 DBDDL    EQU    *-DBDD 
 DBDE     BSSZ   8D 
 DHL      SPACE  4
**        DHL - DISPLAY A HORIZONTAL LINE.
  
  
 DHL      SUBR               ENTRY/EXIT 
          LDC    XBRD        DISPLAY LINE 
          OAN    CH 
          LDN    DHLAL
          OAM    DHLA,CH
          LDC    XBRD+10     DISPLAY SHIFTED LINE 
          OAN    CH 
          LDN    DHLAL
          OAM    DHLA,CH
          UJN    DHLX        RETURN 
  
 DHLA     DATA   H*------------------------*
 DHLAL    EQU    *-DHLA 
 DPC      SPACE  4
**        DPC - DISPLAY PIECES. 
* 
*         USES   T6, T7, OT - OT+1. 
* 
*         CALLS  ABS. 
  
  
 DPC      SUBR               ENTRY/EXIT 
          LDD    LM          COMPUTE BUFFER LENGTH
          SBD    FT 
          SHN    14 
          ADD    LM+1 
          SBD    FT+1 
          MJN    DPCX        RETURN IF NEGATIVE 
          ZJN    DPCX        RETURN IF ZERO 
          STD    T7          SAVE BUFFER LENGTH 
          LDC    BUFL        SET BUFFER LENGTH
          STD    T6 
          LCMA   FT          SET STARTING ADDRESS 
          RJM    ABS
          SCMA   OT 
          LCMA   LM          CHECK BUFFER LIMIT 
          RJM    ABS
          FNC    7010,CH     SELECT LEFT SCREEN, DOT MODE 
          ACN    CH 
 DPC1     LDC    -BUFL
          RAD    T7 
          MJN    DPC2        IF NOT A FULL PP BUFFER
          LCMA   OT          FILL PP BUFFER 
          CRM    BUF,T6      FILL PP BUFFER 
          SCMA   OT          SET NEXT STARTING ADDRESS
          LDC    BUFL*5      DISPLAY
          OAM    BUF,CH 
          UJN    DPC1        LOOP 
  
 DPC2     ADC    BUFL        COMPUTE WORDS LEFT 
          ZJN    DPC3        RETURN IF ZERO 
          STD    T6 
          LCMA   OT          LOAD PP BUFFER 
          CRM    BUF,T6 
          LDD    T6          DISPLAY
          SHN    2
          ADD    T6 
          OAM    BUF,CH 
 DPC3     DCN    CH 
          LJM    DPCX 
 DOE      SPACE  4
**        DOE - DISPLAY OUTPUT AND ERROR MESSAGES.
* 
*         CALLS  DPM. 
  
  
 DOE1     DCN    CH 
  
 DOE      SUBR               ENTRY/EXIT 
          FNC    7001,CH     SELECT LEFT SCREEN, 32 CHARACTERS/LINE 
          ACN    CH 
          DUP    3
          LDC    DOEA 
          RJM    DPM
          ENDD
          LDD    KM 
          ZJN    DOE1        EXIT IF NO MESSAGE 
          DUP    3
          LDC    6000 
          OAN    CH 
          LDC    7024 
          OAN    CH 
          LDD    KM 
          RJM    DPM
          ENDD
          LJM    DOE1        RETURN 
  
 DOEA     DATA   6000,7050
 DOEB     BSSZ   16D
 DLM      TITLE  RIGHT SCREEN DISPLAYS
**        DLM - DISPLAY LIMITS AND CURRENT TREE POSITION. 
* 
*         USES   T6, T7.
* 
*         CALLS  DPM, ABS, CDD. 
  
  
 DLM      SUBR               ENTRY/EXIT 
          FNC    7101,CH     SELECT RIGHT SCREEN, 32 CHARACTERS/LINE
          ACN    CH 
          LDC    XLIM        OUTPUT INITIAL COORDINATES 
          OAN    CH 
          LDC    YLIM 
          OAN    CH 
          LDD    LF 
          NJN    DLM1        IF LIMIT FLAG SET
          LDN    DLMAL       DISPLAY *LIMITS-*
          OAM    DLMA,CH
 DLM1     LDC    DLMC        DISPLAY LIMITS 
          RJM    DPM
          LDN    LLIM        SET WORD COUNT 
          STD    T6 
          LCMA   A.TR        READ LIMITS
          RJM    ABS
          CRM    BUF,T6 
          LDC    BUF-1       SET POINTER
          STD    T6 
          LDN    LLIM        SET COUNTER
          STD    T7          INITIALIZE INDEX 
          LDC    YLIM-20     OUTPUT STARTING COORDINATES
          OAN    CH 
          LDC    XLIM 
          OAN    CH 
          LDD    LF 
          NJN    DLM3        IF LIMIT FLAG SET
          LDN    DLMBL       DISPLAY *NOW AT-*
          OAM    DLMB,CH
          UJN    DLM3 
  
 DLM2     LDN    0           DISPLAY *  * 
          OAN    CH 
 DLM3     LDN    5           ADVANCE POINTER
          RAD    T6 
          LDI    T6          LOAD LIMIT 
          ZJN    DLM4        EXIT ON ZERO BYTE
          RJM    CDD         CONVERT TO DISPLAY CODE
          OAN    CH          DISPLAY
          SOD    T7          DECREMENT COUNTER
          NJN    DLM2        LOOP 
 DLM4     DCN    CH 
          LJM    DLMX        RETURN 
  
 DLMA     DATA   C*LIMITS-* 
 DLMAL    EQU    *-DLMA 
 DLMB     DATA   C*NOW AT-* 
 DLMBL    EQU    *-DLMB 
 DLMC     DIS    2*LLIM-1,
          DATA   0
 DGC      SPACE  4
**        DGC - DISPLAY GAME CLOCKS.
  
  
 DGC      SUBR               ENTRY/EXIT 
          FNC    7102,CH     SELECT RIGHT SCREEN, 16 CHARACTERS/LINE
          ACN    CH 
          DUP    4,2
          LDN    UGCAL
          OAM    UGCA,CH
          DCN    CH 
          UJN    DGCX 
 DOS      SPACE  4
**        DOS - DISPLAY OPTIONS AND GAME SCORE. 
* 
*         USES   T5 - T7. 
* 
*         CALLS  ABS. 
  
  
 DOS      SUBR               ENTRY/EXIT 
          FNC    7101,CH     SELECT RIGHT SCREEN, 32 CHARACTERS/LINE
          ACN    CH 
          LDN    DOSCL       DISPLAY *OPTIONS * 
          OAM    DOSC,CH
          LDN    DOSDL       DISPLAY PLAYER NAMES 
          OAM    DOSD,CH
          DCN    CH 
          FNC    7100,CH     SELECT RIGHT SCREEN, 64 CHARACTERS/LINE
          ACN    CH 
          LDN    LOPT        SET CM WORD COUNT
          STD    T6 
          LCMA   A.OP        READ OPTION LIST 
          RJM    ABS
          CRM    BUF,T6 
          LDC    YOPT        OUTPUT Y-COORDINATE
          STD    T7 
          OAN    CH 
          LDC    BUF
          STM    DOSA        SET POINTER TO OPTION LIST 
          STM    DOSB        SET POINTER TO SCORE 
 DOS1     LDC    XOPT+240    OUTPUT X-COORDINATE
          OAN    CH 
 DOS2     LDN    5           DISPLAY ONE CM WORD
          OAM    **,CH
 DOSA     EQU    *-1
          OAN    CH          DISPLAY *  * 
          LDN    5           ADVANCE POINTER
          RAM    DOSA 
          SOD    T6          DECREMENT WORD COUNT 
          ZJN    DOS3        IF DONE
          LMN    3           IF THREE WORDS COMPLETE
          NJN    DOS2        LOOP FOR THREE WORDS 
          LCN    12          ADVANCE Y-COORDINATE 
          RAD    T7 
          OAN    CH 
          UJN    DOS1        LOOP FOR NEXT LINE 
  
*         DISPLAY GAME SCORE. 
  
 DOS3     LDC    LSCR        SET CM WORD COUNT
          STD    T6 
          SHN    -1          SET INDEX
          STD    T5 
          LCMA   A.GS        READ GAME SCORE BUFFER 
          RJM    ABS
          CRM    BUF,T6 
          LDC    YSCR        OUTPUT Y-COORDINATE
          STD    T7 
          OAN    CH 
 DOS4     LDC    XSCR        OUTPUT X-COORDINATE
          OAN    CH 
 DOS5     LDN    2*5         DISPLAY TWO CM WORDS 
          OAM    **,CH
 DOSB     EQU    *-1
          LDC    XSCR+300    ADVANCE X-COORDINATE 
          OAN    CH 
          LDN    2*5         ADVANCE POINTER
          RAM    DOSB 
          SOD    T5          ADVANCE INDEX
          ZJN    DOS6        IF DONE
          LPN    1
          NJN    DOS5        LOOP FOR NEXT WORD 
          LCN    12          ADVANCE Y-COORDINATE 
          RAD    T7 
          OAN    CH 
          UJN    DOS4        LOOP FOR NEXT LINE 
  
 DOS6     DCN    CH 
          LJM    DOSX 
  
 DOSC     CON    XOPT        X-COORDINATE 
          CON    YOPT-10     Y-COORDINATE 
          DATA   C*OPTIONS *
 DOSCL    EQU    *-DOSC 
  
 DOSD     CON    YNAM 
          CON    XNAM 
 DOSE     BSSZ   5
          CON    XNAM+310 
 DOSF     BSSZ   5
 DOSDL    EQU    *-DOSD 
 SYSDIS   SPACE  4
**        DSS    - DISPLAY SYSTEM STATUS. 
* 
*         CALLS  SYS. 
  
  
 DSS      SUBR               ENTRY/EXIT 
          LDC    6000        SET X-COORDINATE 
          STD    XC 
          RJM    SYS
          DCN    CH+40
          UJN    DSSX 
 DPM      TITLE  DISPLAY SUBROUTINES
**        DPM - DISPLAY PERIPHERAL MEMORY.
* 
*         ENTRY  (A) = FWA OF DISPLAY DATA. 
* 
*         USES   T0.
  
  
 DPM      SUBR               ENTRY/EXIT 
          STD    T0          SET START ADDRESS
 DPM1     LDI    T0 
          ZJN    DPMX        IF ZERO BYTE 
          OAN    CH 
          AOD    T0          ADVANCE POINTER
          UJN    DPM1 
 MDC      SPACE  4
**        MDC - MODIFY CHANNEL INSTRUCTIONS.
* 
*         EXIT   CHANNEL INSTRUCTIONS MODIFIED. 
* 
*         USES   T1, T2, T3.
  
  
 MDC      SUBR               ENTRY/EXIT 
          LDM    /COMDDSP/DDSB  CHECK ASSIGNED CHANNEL
          STD    T3 
          CHTE   *
          LMN    CH 
          ZJN    MDCX        IF CHANNELS MODIFIED 
          LDC    TCHS        MODIFY CHANNELS
          STD    T1 
 MDC1     LDI    T1 
          ZJN    MDC2        IF CHANNEL TABLE MODIFICATION COMPLETE 
          STD    T2 
          LDI    T2 
          SCN    77 
          ADD    T3 
          STI    T2 
          AOD    T1 
          UJN    MDC1        LOOP 
 MDC2     LDC    MDCA        SET 1ST ADDRESS FOR BLIND MODIFICATION 
          STD    T1 
 MDC3     AOD    T1          ADVANCE ADDRESS
          LMC    MDCB 
          ZJN    MDCX        RETURN IF COMPLETE 
          LDI    T1          CHECK WORD 
          LPC    7077 
          LMC    7000+CH
          NJN    MDC3        IF NOT 7XCH
          LDI    T1          MODIFY CHANNEL 
          SCN    77 
          ADD    T3 
          STI    T1 
          UJN    MDC3 
 TCHS     SPACE  4
**        TCHS - TABLE OF CHANNEL INSTRUCTIONS. 
  
  
 TCHS     CHTB
  
          RSTC               RESTORE CHANNEL INSTRUCTIONS 
          SPACE  4
**        COMMON DECKS. 
* 
  
 MDCA     BSS    0           FIRST ADDRESS FOR BLIND CHANNEL MOD
  
*CALL     COMDSYS 
*CALL     COMDDSP 
  
 MDCB     BSS    0           LIMIT ADDRESS FOR BLIND CHANNEL MOD
 PFP      TITLE  PROCESS FLASHING PIECE 
**        PFP - PROCESS FLASHING PIECE. 
* 
*         CALLS  SB0. 
  
  
 PFPD     BSSZ   2           POINTER BUFFER 
  
 PFP      SUBR               ENTRY/EXIT 
          LDC    ** 
 PFPA     EQU    *-1         FLASH STATUS FLAG
          ZJN    PFPX 
          SOM    PFPB        DECREMENT CYCLE COUNT
          NJN    PFPX 
          LDN    CPF
          STM    PFPB        RESET CYCLE COUNT
          SOM    PFPC        DECREMENT FLASH COUNT
          MJN    PFP2        IF FINISHED
          LPN    1           TOGGLE ON OR OFF 
          NJN    PFP1 
          TCMA   PFPD,LM     SWITCH ON
          UJN    PFPX        RETURN 
  
 PFP1     TCMA   LM,PFPD     SWITCH OFF 
          TCMA   SW+2,LM
          LJM    PFPX        RETURN 
  
 PFP2     LDN    FPM/2*2     RESET FLASHES/MOVE 
          STM    PFPC 
          LDN    0
          STM    PFPA        CLEAR FLASH STATUS FLAG
          RJM    SB0
          LJM    PFPX        RETURN 
  
 PFPB     CON    CPF         CYCLES/FLASH 
 PFPC     CON    FPM/2*2     FLASHES /MOVE
 SKE      TITLE  SKE - STORE KEYBOARD ENTRY IN CM 
**        SKE - STORE KEYBOARD BUFFER.
* 
*         EXIT   KEYBOARD BUFFER STORED IN CM WITH ZERO BYTE
*                APPENDED.
* 
*         USES   T7, CM - CM+4. 
* 
*         CALLS  ABS, SB0.
  
  
 SKE      SUBR               ENTRY/EXIT 
          LDD    CR          CHECK CARRIAGE RETURN FLAG 
          ZJN    SKEX        RETURN IF NOT SET
          LDD    SW+4 
          ZJN    SKE1        IF CP READY TO READ
          LDD    WF          CHECK WAITING FOR CP FLAG
          NJN    SKEX        IF PREVIOUSLY SET
          LDN    1           SET FLAG 
          STD    WF 
          LDD    KM          SAVE CURRENT MESSAGE 
          STM    SKEA 
          LDC    SKEB        DISPLAY *WAITING - CP BUSY.* 
          STD    KM 
          UJN    SKEX 
  
 SKE1     STM    KBUF,WC     SET ZERO BYTE
          STD    CR          CLEAR CR FLAG
          STD    WF          CLEAR WAITING FLAG 
          LDD    KM 
          LMC    SKEB 
          NJN    SKE2        IF WAITING MESSAGE STILL UP
          LDC    ** 
 SKEA     EQU    *-1         PREVIOUS MESSAGE ADDRESS 
          STD    KM 
 SKE2     LDN    4           SET CONSTANT 4 
          STD    T7 
          LDD    A.SW        READ INPUT MESSAGE BUFFER
          SHN    14 
          ADD    A.SW+1 
          ADN    P.IM 
          CRD    CM 
          LCMA   CM+3        WRITE BUFFER 
          RJM    ABS
          CWM    KBUF,T7
          RJM    SB0
          LJM    SKEX        RETURN 
  
 SKEB     DATA   C*WAITING - CP BUSY.*
 UGC      TITLE  GAME CLOCKS
**        UGC - UPDATE GAME CLOCKS. 
  
  
 UGC      SUBR               ENTRY/EXIT 
          LDD    GC 
          ZJN    UGCX        RETURN IF CLOCKS STOPPED 
          LDC    RTCL        READ REAL TIME CLOCK 
          CRD    CM 
          LDD    CM+1 
          SBD    SC          COMPARE CLOCKS 
          ZJN    UGCX        RETURN IF SAME 
          RAD    SC          RESET SECOND CLOCK 
          LDD    GC          CHECK GAME CLOCKS
          SCN    1
          NJN    UGC3        IF CLOCK B 
          SOM    CLKAO       DECREMENT BY 1 SECOND
          NJN    UGC2        IF NON-ZERO
 UGC1     RJM    TUP
          UJN    UGCX        RETURN 
  
 UGC2     RJM    CTD         CONVERT SECONDS TO DISPLAY CODE
          STM    UGCC        STORE MINUTES
          LDD    CM 
          STM    UGCD        STORE SECONDS
          LJM    UGCX        RETURN 
  
 UGC3     SOM    CLKBO       DECREMENT BY ONE SECOND
          ZJN    UGC1        IF TIME IS UP
          RJM    CTD         CONVERT SECONDS TO DISPLAY CODE
          STM    UGCF        STORE MINUTES
          LDD    CM 
          STM    UGCG        STORE SECONDS
          LJM    UGCX        RETURN 
  
 UGCA     CON    XCLK 
          CON    YCLK 
 UGCB     CON    0
 UGCC     CON    2R10 
          CON    XCLK+204 
 UGCD     CON    2R00 
 UGCE     CON    0
 UGCF     CON    2R10 
          CON    XCLK+510 
 UGCG     CON    2R00 
          CON    YCLK+5 
          CON    XCLK+176 
          CON    2R.
          CON    XCLK+502 
          CON    2R.
          CON    YCLK+20
          CON    XCLK+176 
          CON    2R.
          CON    XCLK+502 
          CON    2R.
 UGCAL    EQU    *-UGCA 
 TUP      SPACE  4
**        TUP - TIME IS UP FOR A PLAYER.
  
  
 TUP      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR STATUS 
          CRD    SW 
          LDN    0           CLEAR OUTPUT MESSAGE 
          STM    DOEB 
          LDD    A.SW        CLEAR INPUT MESSAGE
          SHN    14 
          ADD    A.SW+1 
          ADN    P.IM 
          CRD    CM 
          LCMA   CM+3 
          RJM    ABS
          CWD    SW 
          LDD    GC          CHECK GAME CLOCKS
          SCN    1
          NJN    TUP1        IF CLOCK B 
          LDC    2R 
          STM    UGCB        FLAG CLOCK A 
          LDC    2R00        SET SECONDS TO ZERO
          STM    UGCD 
          UJN    TUP2 
  
 TUP1     LDC    2R 
          STM    UGCE        FLAG CLOCK B 
          LDC    2R00        SET SECONDS TO ZERO
          STM    UGCG 
 TUP2     RJM    AKL         SET COMPLETE BIT AND CLEAR MESSAGES
          LDN    0           STOP CLOCKS
          STD    GC 
          LJM    TUPX        RETURN 
 ABS      TITLE  CONVERSION  ROUTINES 
**        ABS - CONVERT RELATIVE ADDRESS TO ABSOLUTE. 
* 
*         ENTRY  (A) = RELATIVE ADDRESS.
* 
*         EXIT   (A) = ABSOLUTE ADDRESS IF IN RANGE.
*                ABORT IF ADDRESS OUT OF RANGE. 
  
  
 ABS1     SHN    14 
          ADD    FL 
          ADD    RA 
          SHN    6
  
 ABS      SUBR               ENTRY/EXIT 
          SHN    14 
          SBD    FL 
          SHN    6
          MJN    ABS1        IF IN RANGE
          LDC    ABSA+CPON   MESSAGE = *POINTER OUT OF RANGE.*
          RJM    DFM
          LJM    ABT         ABORT JOB
  
 ABSA     DATA   C*CHD - POINTER OUT OF RANGE.* 
 CDD      SPACE  4
**        CDD - CONVERT OCTAL TO DISPLAY CODED DECIMAL. 
* 
*         ENTRY  (A) = OCTAL NUMBER TO BE CONVERTED.
* 
*         EXIT   (A) = NUMBER IN DISPLAY CODED DECIMAL. 
* 
*         USES   T0, T1.
  
  
 CDD2     ADN    10D+1R0     CONVERT TO DISPLAY CODE
          SHN    14 
          ADD    T1 
          SHN    6
  
 CDD      SUBR               ENTRY/EXIT 
          STD    T0          STORE THE NUMBER 
          LDN    1R0         INITIALIZE TENS COUNTER
          STD    T1 
 CDD1     LCN    10D         COUNT TENS 
          RAD    T0 
          MJN    CDD2        IF UNDERFLOW 
          AOD    T1          ADVANCE TENS COUNT 
          UJN    CDD1        LOOP 
 CTD      SPACE  4
*         CTD - CONVERT TIME TO DISPLAY CODED MINUTES AND SECONDS.
* 
*         ENTRY  (A) = TIME IN OCTAL SECONDS. 
* 
*         EXIT   (A) = MINUTES IN DISPLAY CODED DECIMAL.
*                (CM) = SECONDS IN DISPLAY CODED DECIMAL. 
* 
*         USES   T2, T3.
* 
*         CALLS  CDD. 
  
  
 CTD2     ADN    60D         FORM REMAINDER (SECONDS) 
          RJM    CDD         CONVERT TO DISPLAY CODE
          STD    CM          STORE
          LDD    T3 
          RJM    CDD         CONVERT MINUTES TO DISPLAY CODE
          STD    T3          SUPPRESS LEADING ZERO
          SHN    -6 
          SBN    1R0
          NJN    CTD3 
          LDD    T3 
          LPN    77 
          STD    T3 
 CTD3     LDD    T3 
  
 CTD      SUBR               ENTRY/EXIT 
          STD    T2 
          LDN    0           INITIALIZE 
          STD    T3 
 CTD1     LCN    60D         COUNT MINUTES
          RAD    T2 
          MJN    CTD2        IF UNDERFLOW 
          AOD    T3          ADVANCE MINUTE COUNT 
          UJN    CTD1        LOOP 
          SPACE  4,10 
 DIS      HERE               *COMDSYS* *DISPLA* EXPANSION 
          SPACE  4,10 
 BUF      EQU    *
 L        SET    7777-BUF 
 BUFL     EQU    L/5         LENGTH OF PIECE DISPLAY BUFFER (CM WDS)
 PRS      TITLE  PRS - PRESET DRIVER
**        PRS - PRESET. (WILL BE OVERLAID)
* 
*         EXIT   (NC) = NUMBER OF CP-S. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          CATD               CHECK ACCESS TO DISPLAY CONSOLE
*         LDN    0
          STD    WC          INITIALIZE DIRECT CELLS
          STD    CC 
          STD    CR 
          STD    GC 
          STD    KM          CLEAR KEYBOARD MESSAGE 
          LDC    RTCL        SET REAL TIME CLOCK
          CRD    CM 
          LDD    CM+1        SET SECOND CLOCK 
          STD    SC 
          RJM    PAUSE
          LDN    CMUR        CLEAR CMU OPTION AVAILABLE BIT 
          RJM    ABS
          CRD    CM 
          LDD    CM 
          LPC    3777 
          STD    CM 
          LDN    CMUR 
          RJM    ABS
          CWD    CM 
          LDC    PAUSE4      SET RETURN FROM HOLD ON A ROLLOUT FLAG 
          STM    /COMDDSP/ROFA
          LCMA   IR+3        STATUS POINTER 
          NJN    PRS2        IF NON ZERO
          LJM    ABT         ABORT JOB
  
 PRS2     LDD    A.SW        READ PIECE DISPLAY BUFFER POINTERS 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.PD 
          CRD    CN 
          TCMA   CN+1,FT
          TCMA   CN+3,LM
          LCMA   FT 
          RJM    ABS
          LCMA   LM 
          RJM    ABS
          LDD    A.SW        LOAD OTHER POINTERS
          SHN    14 
          ADD    A.SW+1 
          ADN    P.TR 
          CRD    CN 
          ADN    P.OP-P.TR
          CRD    CM 
          ADN    P.GS-P.OP
          CRD    T6 
          ADN    P.NM-P.GS
          CRD    T4 
          LCMA   T7 
          RJM    ABS
          CRM    DOSE,ON     READ PLAYER NAMES
          CRM    DOSF,ON
          TCMA   CN+3,A.TR
          TCMA   CM+3,A.OP
          TCMA   CM+1,A.GS
          LDD    IR+2 
          ADC    -7777
          ZJN    PRS3        IF RECALLED
          LCN    0           SET RECALL PARAMETER 
          STD    IR+2 
          MONITOR DCPM       DROP CPU 
          LDN    0           CLEAR (RA+1) 
          CRD    CM 
          LDD    RA 
          SHN    6
          ADN    1
          CWD    CM 
          RJM    SB0
          MONITOR RCPM       REQUEST CPU
          RJM    RDS         REQUEST DISPLAY
          RJM    MDC         MODIFY CHANNEL INSTRUCTIONS
          LJM    PRSX        RETURN 
  
 PRS3     LDD    A.SW        RESET CLOCKS 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.RO 
          CRD    CM 
          LDD    CM 
          STM    CLKAO
          RJM    CTD
          STM    UGCC 
          LDD    CM 
          STM    UGCD 
          LDD    CM+1 
          STM    CLKBO
          RJM    CTD
          STM    UGCF 
          LDD    CM 
          STM    UGCG 
          LDD    CM+2 
          STD    GC 
          LDD    CM+3 
          STM    UGCB 
          LDD    CM+4 
          STM    UGCE 
  
*         READ OUTPUT MESSAGE.
  
          LDD    A.SW        READ POINTER 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.OM 
          CRD    CM 
          LCMA   CM+3 
          RJM    ABS
          CRM    DOEB,TR
  
*         READ LIMITS.
  
          LDN    LLIM        SET WORD COUNT 
          STD    T1 
          LDD    A.SW        READ POINTER 
          SHN    14 
          ADD    A.SW+1 
          ADN    P.LM 
          CRD    CM 
          LCMA   CM+3        READ LIMITS
          RJM    ABS
          CRM    PRSA,T1
          LDN    0
          STD    T5          SET INDEX
          STD    LF          CLEAR FLAG 
          LDC    PRSA-1      SET POINTER
          STD    T6 
 PRS4     LDN    5           ADVANCE POINTER
          RAD    T6 
          LDI    T6          LOAD NEXT LIMIT
          NJN    PRS5        IF NOT ZERO BYTE 
          STM    DLMC,T5     SET ZERO BYTE
          LDD    T5 
          SBN    2*6
          MJN    PRS7        IF @ 6 LEVELS
          UJN    PRS6 
  
 PRS5     RJM    CDD         CONVERT TO DISPLAY CODE
          STM    DLMC,T5
          LDN    2           ADVANCE INDEX
          RAD    T5 
          SBN    2*LLIM 
          NJN    PRS4        LOOP 
 PRS6     LCN    0           SET FLAG 
          STD    LF 
  
*         READ RANK LABELS. 
  
 PRS7     LDN    8D          SET LABEL COUNT
          STD    T1 
          LDD    A.SW        READ POINTER TO BOARD
          SHN    14 
          ADD    A.SW+1 
          ADN    P.BD 
          CRD    CM 
          LCMA   CM+3        READ LABELS
          RJM    ABS
          CRM    PRSA,T1
          LDC    PRSA+5*7    SET POINTER TO BUFFER
          STD    T2 
 PRS8     LDI    T2          LOAD NEXT LABEL
          STM    DBDE-1,T1   STORE
          LCN    5           DECREMENT POINTER
          RAD    T2 
          SOD    T1          DECREMENT INDEX
          NJN    PRS8        LOOP 
  
*         READ FILE LABELS. 
  
          LDD    A.SW        READ POINTER TO BOARD
          SHN    14 
          ADD    A.SW+1 
          ADN    P.BD 
          CRD    CM 
          LCMA   CM+3        READ LABELS
          ADN    8D 
          RJM    ABS
          CRM    PRSA,ON
          LDC    PRSA+4      SET POINTER TO LABELS
          STD    CM 
          LDC    DBDD+12D    SET POINTER TO LABEL BUFFER
          STD    CM+1 
 PRS9     LDI    CM          UNPACK LABELS
          LPN    77 
          STI    CM+1 
          SOD    CM+1 
          LDI    CM 
          SCN    77 
          STI    CM+1 
          LCN    2
          RAD    CM+1 
          SOD    CM 
          LMC    PRSA 
          NJN    PRS9        LOOP 
          RJM    RDS         REQUEST DISPLAY
          RJM    MDC         MODIFY CHANNEL INSTRUCTIONS
          LDN    NCPL        SAVE NUMBER OF CP-S
          CRD    CM 
          AOD    CM+1 
          STD    NC 
          LJM    PRSX        RETURN 
  
 PRSA     BSS    0
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMPCUA 
          SPACE  4
          END 
