ASMB,A,B,L,C
      HED SCE2 91700-16162 REV A 760315 * (C) HEWLETT-PACKARD CO. 1976
      ORG 0 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 2 
      SPC 1 
************************************************* 
* 
*SCE2               SCE2
* 
*SOURCE PART #      91700-18162 REV 1621  
* 
*ABS PART #         91700-16162 REV 1621  
* 
*WRITTEN BY:        JIM HARTSEL 
* 
*DATE WRITTEN:
* 
*MODIFIED BY:       CHUCK WHELAN
* 
*DATE MODIFIED:     05-17-76
* 
****************************************************
      SUP 
* 
************************************
*                                  *
*     SCE/2 TERMINAL EXECUTIVE     *
*     INDIRECT ENTRY POINT         *
*                                  *
************************************
* 
* 
* 
      ORG 2 
      JMP 3,I 
* 
B     EQU 1 
SDI   EQU 14B       REMOTE COMPUTER CHANNEL.
TTY   EQU 15B       LOCAL TTY CHANNEL.
* 
************************************
*                                  *
*    TEMPORARY BASE PAGE LINKAGES  *
*                                  *
************************************
* 
      ORG 100B      THIS BASE PAGE AREA NOT USED
      JMP *+1,I     BY TCE/2. 
      DEF CNFIG     RE-CONFIGURATION ENTRY POINT. 
* 
********************************************
*                                          *
*    OVERLAYABLE RECONFIGURATION SECTION   *
*    S-REGISTER SETTING:                   *
*     BITS 0- 5 = REMOTE COMPUTER CHANNEL  *
*     BITS 6-11 = TTY CHANNEL              *
*     BITS 12-14= CORE SIZE (VALUE+1 * 4K) *
*                                          *
********************************************
* 
      ORG 6440B 
* 
ERR   HLT 13B       INCASE OF ERROR 
CNFIG LIA 1         READ SWITCH REGISTER. 
      AND O77 
      SZA,RSS 
      JMP ERR 
      STA RCH       STORE REMOTE COMPUTER CHANNEL.
      LIA 1 
      ALF,ALF 
      RAL,RAL 
      AND O77 
      SZA,RSS 
      JMP ERR 
      STA TCH       STORE TTY CHANNEL.
*  SET CONFIGURED INSTRUCTIONS FOR CORE SIZE
      LIA 1 
      AND P7000     ISOLATE BITS 12-14
      STA TEMP
      LDA NCAD
      STA PNTR      SAVE POINTER TO CONFIGURABLE "DEF"S 
      LDB NCON      NUMBER TO CONFIGURE 
      LDA PNTR,I
      IOR TEMP      INCLUDE HIGH ADDRESS BITS 
      STA PNTR,I
      ISZ PNTR
      INB,SZB 
      JMP *-5       ITERATE 
* 
      LDA RCH 
      LDB RTBL      CONFIGURE REMOTE I/O INSTRUCTIONS.
      JSB CONFG 
      LDA TCH 
      LDB TTBL      CONFIGURE TTY INSTRUCTIONS. 
      JSB CONFG 
* 
      LDB PSIZ      - PGM SIZE
      LDA QUERA 
      STA PNTR
      IOR TEMP
      STA LOC       POINTER TO HIGH CORE FOR MOVE 
      STA 3         STARTING ADDR INTO LOC.3
      LDA PNTR,I
      STA LOC,I     MOVE INTO HIGHER CORE 
      ISZ PNTR
      ISZ LOC 
      INB,SZB 
      JMP *-5       MOVE NEXT 
      JMP 3,I       NOW GO TO SCE-2 
* 
* 
CONFG NOP 
      STA CHANL 
      STB PNTR
CNFL  LDB PNTR,I    FETCH NEXT I/O INSTR. ADDRESS.
      SZB,RSS       DONE IF ZERO. 
      JMP CONFG,I 
      LDA B,I       FETCH I/O INSTRUCTION.
      AND MASK      CLEAR CHANNEL.
      IOR CHANL     INSERT NEW CHANNEL. 
      STA B,I       REPLACE I/O INSTRUCTION.
      ISZ PNTR
      JMP CNFL      LOOP TILL DONE. 
* 
RCH   NOP 
TCH   NOP 
CHANL NOP 
PNTR  NOP 
MASK  OCT 177700
O77   OCT 77
P7000 OCT 70000 
NCAD  DEF INIT
NCON  ABS INIT-SIZE   # OF RECONFIGURED DEFS
QUERA DEF QUERY 
PSIZ  ABS QUERY-SIZE  SIZE OF SCE-2 MAIN AREA 
* 
RTBL  DEF *+1       TABLE OF ADDRESSES OF I/O 
      DEF INIT1     INSTR. FOR REMOTE COMPUTER. 
      DEF RCH1
      DEF RCH2
      DEF RCH3
      DEF RCH4
      DEF RCH5
      DEF RCH6
      DEF RCH7
      DEF RCH8
      DEF RCH9
      DEF RCH10 
      NOP           END OF TABLE. 
* 
TTBL  DEF *+1       TABLE OF I/O INSTRUCTIONS 
      DEF TCH1      FOR TTY.
      DEF TCH2
      DEF TCH3
      DEF TCH4
      DEF TCH5
      DEF TCH6
      DEF TCH7
      DEF TCH8
      NOP           END OF TABLE. 
* 
      ORG 6600B 
************************************
*                                  *
*    MAIN ENTRY POINT              *
*                                  *
************************************
* 
* 
QUERY CLA,INA       DISPLAY ":" PROMPT. 
      JSB TTYO
      OCT 35137 
* 
      LDA BFSIZ     INPUT THE COMMAND.
      LDB BUFAD 
      JSB TTYIN 
* 
      JMP TMESS     GO PROCESS THE COMMAND. 
* 
* 
M0950 LDA B6        DISPLAY "SYNTAX ERROR". 
      JSB TTYO
      ASC 6,SYNTAX ERROR
      JMP QUERY 
      SKP 
********************************
* DECIPHER OPERATOR MESSAGES. **********************
********************************
* 
*            B CONTAINS # CHARACTERS. 
*            DATA IN BUFFR. 
* 
TMESS CLA 
      STA TEMP+2    CLEAR CHARACTER FLAG. 
      CMB,INB,SZB,RSS   CHECK IF COUNT ZERO.
      JMP QUERY     YES 
      STB TEMP+3    NEGATIVE CHAR. COUNT. 
* 
      LDB MD33      CLEAR PARAMETER AREA. 
      STB TEMP
      LDB PARPT 
      STA B,I 
      INB 
      ISZ TEMP
      JMP *-3 
* 
      LDB BUFAD     INPUT BUFFER
      CLE,ELB       BYTE ADDRESS. 
      STB TEMPP 
      LDA INIT
      STA TEMP+5    INITIAL PARAM POINTER.
      LDA TEMP+5,I
      STA TEMP+4    INITIAL STORE POINTER.
      ADA MD1 
      STA TEMP+6    PARAM CHAR COUNT ADDR.
* 
DEC10 LDB TEMPP     FETCH NEXT BYTE.
      CLE,ERB 
      LDA B,I 
      SEZ,RSS       CHECK IF TO EXAMINE UPPER/LOWER.
      ALF,ALF       UPPER, SO ROTATE. 
      AND M377      ISOLATE CHARACTER.
* 
      CPA COM       CHECK FOR 
      JMP DEC60     COMMA OR
      CPA BLNK      BLANK 
      JMP DEC65     DELIMITER.
* 
      LDB TEMP+6,I  ADD -1 TO CHAR COUNT. 
      ADB MD1 
      STB TEMP+6,I
* 
      LDB TEMP+2    CHECK IF TO BE UPPER/LOWER. 
      SZB           UPPER.
      JMP DEC40     LOWER.
* 
      ALF,ALF 
      STA TEMP+4,I  STORE CHARACTER.
      ISZ TEMP+2    SET FLAG TO LOWER CHARACTER.
      JMP DEC50     GO INCREMENT DATA CHAR. 
* 
DEC40 IOR TEMP+4,I  COMBINE UPPER & LOWER.
      STA TEMP+4,I  STORE.
      CLA 
      STA TEMP+2    RESET FLAG TO UPPER CHAR. 
      ISZ TEMP+4    BUMP STORE LOCATION.
* 
DEC50 ISZ TEMPP     BUMP BUFFER ADDR. 
      ISZ TEMP+3    BUMP CHAR. COUNT. 
      JMP DEC10     GO PROCESS NEXT CHAR. 
      ISZ PARAM     DONE- BUMP PARAM COUNT. 
      JMP M0000     GO TO EXIT. 
* 
DEC65 LDA PARAM     FIRST PARAM?
      SZA 
      JMP DEC50     NO, IGNORE BLANKS 
DEC60 CLA 
      STA TEMP+2    CLEAR CHAR. FLAG. 
* 
      ISZ TEMP+5    BUMP PARAM POINTER. 
      ISZ PARAM     BUMP PARAM COUNT. 
      LDA PARAM 
      CPA B10       EIGHT PARAMS? 
      JMP M0000     YES, GO PROCESS.
* 
      LDA TEMP+5,I
      STA TEMP+4
      ADA MD1 
      STA TEMP+6    PARAM CHAR COUNT ADDR.
      JMP DEC50     GO INCREMENT DATA BUFFER. 
      SKP 
* 
*   IDENTIFY THE COMMAND (LOAD OR RUN). 
* 
M0000 LDA OP        ADD UP THE THREE WORDS. 
      ADA OP+1
      ADA OP+2
* 
      CPA SM.LO     = SUM OF "LOAD"?
      JMP M0100     YES.
      CPA SM.RU     = SUM OF "RUN"? 
      JMP M0200     YES.
      CPA SM.RA     = SUM OF "RUNAT"? 
      JMP GETAD     YES.
      JMP M0950     NO, SYNTAX ERROR. 
* 
A.LO  EQU 046117B   "LO"
A.AD  EQU 040504B   "AD"
A.RU  EQU 051125B   "RU"
A.N   EQU 047000B   "N0"
A.NA  EQU 047101B   "NA"
A.T   EQU 052000B   "T0"
* 
SM.LO ABS A.LO+A.AD 
SM.RU ABS A.RU+A.N
SM.RA ABS A.RU+A.NA+A.T 
* 
* 
* LOAD XXXXX
*     LOAD INTO THE TERMINAL THE PROGRAM XXXXX WHICH
*     RESIDES ON THE CENTRAL STATION DISC.
* 
M0100 LDA CP1       IS THERE A NAME?
      SZA,RSS 
      JMP M0950     NO. 
*  FILL TRAILING BLANKS, SCHEDULE PROGL, & DOWNLOAD 
      JSB LODIT 
      JMP QUERY     RETURN TO OPERATOR. 
      SKP 
* 
* RUN(*,P1,P2,P3,P4,P5) 
* 
* RUNAT NNN (,P1,P2,P3,P4,P5) 
* 
* RUN XXXXX (,P1,P2,P3,P4,P5) 
* 
*     P1...P5 = OPTIONAL PARAMETERS.
*     NNN     = START ADDRESS.
*     XXXXX   = PROGRAM NAME. 
* 
M0200 LDA CP1       IS 1ST PARAM NULL OR "*"? 
      LDB P1
      SZA 
      CPB ASTER 
      JMP MOVIT     YES.
* 
*  FILL TRAILING BLANKS, SCHEDULE PROGL, & DOWNLOAD 
      JSB LODIT 
      JMP MOVIT     RUN.
* 
GETAD LDA CP1       IS THERE A START ADDR?
      SZA,RSS 
      JMP M0950     NO, ERROR.
      LDB P1AD
      JSB CVT1      CONVERT START ADDRESS.
      STA IADR
* 
* CONVERT OPTIONAL PARAMETERS TO BINARY AND STORE.
* 
MOVIT LDA P2AD
      STA DCVTA     ADDR OF DATA BUFFER.
      ADA MD1 
      STA DCVTB     ADDR OF CHAR COUNT. 
* 
      LDA DO.P1 
      STA TEMP+4    DESTINATION ADDR. 
      LDA MD5 
      STA TEMP+5    COUNTER 
* 
TRANS LDA DCVTB,I   CHAR. COUNT.
      SZA,RSS       ZERO? 
      JMP STORE     YES, STORE ZERO.
* 
      LDB DCVTA 
      JSB CVT1      CONVERT TO BINARY.
* 
STORE STA TEMP+4,I  STORE VALUE.
      ISZ TEMP+4
      LDA DCVTA 
      ADA B4
      STA DCVTA 
      LDA DCVTB 
      ADA B4
      STA DCVTB 
* 
      ISZ TEMP+5    DONE? 
      JMP TRANS     NO. 
* 
      LDB DO.P1     (B) = ADDR OF 1ST PARAM.
      CLC 0,C       "PRESET"
      LDA IADR      IS THERE A START ADDR?
      SZA 
      JMP IADR,I    YES, USE IT.
      LDA B6
      JSB TTYO      TYPE MESSAGE
      ASC 6,NO START ADR
      JMP QUERY 
* 
* 
DCVTA NOP 
DCVTB NOP 
O.P1  OCT 0 
O.P2  OCT 0 
O.P3  OCT 0 
O.P4  OCT 0 
O.P5  OCT 0 
      SKP 
*  SCHEDULE PROGL AT REMOTE AND PASS LU, PROGRAM NAME.
*  THEN LOAD THE PROGRAM INTO TERMINAL CORE.
*  CALLING
*  SEQUENCE:   (B) = ADDR OF ASCII PROGRAM NAME.
*              JSB LODIT
* 
LODIT NOP 
      LDA P1AD
      STA TEMP
      LDA MD3 
      STA TEMP+1
TLOOP LDB BLNKW     FILL TRAILING BLANKS
      LDA TEMP,I
      SZA 
      LDB BLNK
      AND M377
      SZA 
      JMP *+3 
      ADB TEMP,I
      STB TEMP,I
      ISZ TEMP
      ISZ TEMP+1
      JMP TLOOP 
* 
*  NOW SEND THE DOWNLOAD REQUEST TO PROGL 
* 
      JSB LSTN      SET CARD IN LISTEN MODE 
      LDB RC
      JSB OUT       SEND "REQUEST COMING" 
      JMP *-2       RETRY 
      LDB MD6       -LENGTH-1 
      JSB OUT       SEND IT 
      JMP *-2       RETRY 
      LDB B2        GET MODE WORD (2) 
      JSB OUT       SEND IT 
      JMP *-2       RETRY 
RCH10 CLC SDI       TURN CARD TO TRANMITTER 
      LDB MD3 
      INB,SZB       DELAY A WHILE 
      JMP *-1 
      LDB K9
      JSB OUT1      SEND STREAM 
      CLB 
      JSB OUT1      2ND WORD = 0
      LDB P1
      JSB OUT1      SEND 1ST 2 CHARS OF NAME
      LDB P1+1
      JSB OUT1      SEND 3RD & 4TH CHARS OF NAME
      JSB LSTN      SET CARD BACK TO LISTEN MODE
      LDB P1+2
      JSB OUT       SEND LAST WORD (FINAL NAME CHARS) 
      JMP RCH10     ERROR IN TRANSMISSION, TRY AGAIN
      LDB TNW 
      JSB OUT1      SEND REPLY TO COMPLETE REQUEST
* 
      CLA,CLE       CLEAR LOCATION 3. 
      STA ERFLG     INITIALIZE ERROR INDICATOR
      STA 3 
*  READ-IN PROGL DOWNLOAD DATA RECORD 
LOAD1 JSB IN        READ 1ST WORD OF DATA 
      CPB RC        IS IT EOT (RC)
      JMP END       YES (EOT).
      STB RL        SAVE NEGATIVE RECORD LENGTH 
      ADB K100
      SEZ,RSS       DOES  -99 < LEN < 0?
      ISZ ERFLG     NO, FLAG ERROR
      JSB IN        READ STARTING ADDRESS 
      STB ADDR      AND SAVE. 
      STB CKSUM     INITIALIZE CHECKSUM 
* 
DATA  JSB IN        READ DATA WORD. 
      LDA ERFLG 
      SZA,RSS       SKIP IF ANY ERRORS OCCURRED 
      STB ADDR,I    STORE DATA WORD.
      ADB CKSUM 
      STB CKSUM     UPDATED RUNNING CHECKSUM
      LDB ADDR      GET ADDRESS FOR SWR 
      OTB 1         OUTPUT SOMETHING
      ISZ ADDR
      ISZ RL        LAST DATA WORD? 
      JMP DATA      NO. 
* 
      JSB IN        YES, READ CHECKSUM. 
      LDA ERFLG     ERROR FLAG
      CPB CKSUM     CKSUM OK? 
      CLE,SZA       YES, ANY OTHER ERRORS?
      JMP ERRX      FAILED, ERROR RETURN
      JMP LOAD1     ALL OK, DO NEXT RECORD
* 
END   JSB IN
      JSB IN
      JSB IN        GET STATUS WORD.
      LDA ERFLG 
      SZA           SKIP IF NO ERRORS 
      LDB B2        SET ERROR CODE. 
      JMP CLNUP 
* 
IN    NOP 
      CLA 
RCH3  SFS SDI       WORD RECEIVED?
      JMP *-1       NO. 
RCH4  LIB SDI       READ DATA WORD. 
RCH5  LIA SDI,C     READ STATUS WORD. 
      SSA           PARITY ERROR? 
      ISZ ERFLG     YES, SET ERROR FLAG.
      LDA TNW 
RCH6  OTA SDI       OUTPUT "XMIT NEXT WORD".
      JMP IN,I
* 
OUT   NOP           TRANSMIT A WORD.
      JSB OUT1      GO TRANSMIT FOR CARD...WAIT FOR READY 
RCH9  LIA SDI 
      CPA RLW 
      JMP OUT,I     ERROR RETURN..TRY AGAIN 
      ISZ OUT       SET FOR NORMAL RETURN 
      CPA TNW 
      JMP OUT,I     DO NORMAL RETURN
ERRX  LDB B2        UNKNOWN RETURN..ERROR 
* 
CLNUP SZB           ANY ERRORS? 
      JMP ERRFD     YES, GO PROCESS.
      LDA 3         SET DEFAULT 
      STA IADR      START ADDRESS.
      JMP LODIT,I   RETURN. 
* 
ERRFD LDA B6
      CPB B2
      JMP ERR2      COM LINE ERROR. 
      CPB MD1 
      JMP ERR4      CAN'T LOCATE. 
      JSB TTYO      TYPE MESSAGE
      ASC 6,PROGL ERROR 
      JMP QUERY 
* 
ERR2  JSB TTYO
      ASC 6,COM LINE ERR
      JMP QUERY 
* 
ERR4  JSB TTYO
      ASC 6,CAN'T LOCATE
      JMP QUERY 
* 
*     SUBROUTINE TO SET THE CARD IN LISTEN MODE 
* 
LSTN  NOP 
INIT1 CLC SDI,C     LISTEN..INHIBIT INTERUPTS 
RCH1  LIA SDI,C     READ STATUS 
RCH2  LIA SDI       READ WORD...CLEARS CARD 
      JMP LSTN,I    RETURN
* 
* 
*SUBROUTINE TO OUTPUT A WORD THE CARD AND WAIT
*UNTIL CARD IS READY TO CONTINUE
* 
OUT1  NOP 
RCH7  OTB SDI       SEND WORD 
RCH8  SFS SDI       WAIT
      JMP *-1 
      JMP OUT1,I    RETURN...WHEN CARD READY
      SKP 
* 
*  KEYBOARD INPUT DRIVER. 
*       (A) = RECORD SIZE, WORDS. 
*       (B) = BUFFER ADDRESS. 
*       JSB TTYIN 
*             ON RETURN, (B) = # CHAR. INPUT. 
      SPC 3 
TTYIN NOP           ENTRY.
      RAL,CLE       STORE # CHAR. 
      STA RSIZE 
      CLA 
      STA RL        CLEAR CHAR. COUNTER.
      STB ADDR      STORE BUFFER POINTER. 
* 
      CLC 0,C       TURN OFF INTERRUPTS.
TYIN  JSB TYI       READ A CHARACTER. 
      AND M177
      CPA LF        LINE FEED?
      JMP TYIN      YES, IGNORE.
      CPA CR        CARRIAGE RETURN?
      JMP EOI       YES, ALL DONE.
      CPA RBOUT     RUBOUT? 
      JMP CANCL     YES.
      CPA CONTH     BACKSPACE CHAR? 
      JMP BAKUP     YES.
      CPA BKSPC     BACKSPACE KEY?
      JMP BAK 
* 
      LDB RL        BUFFER FULL?
      CPB RSIZE 
      JMP TTYIN,I   YES, IGNORE CHAR. 
      ISZ RL
      SEZ,CME       INSERT CHAR IN BUFFER 
      JMP RIGHT 
      ALF,ALF 
      STA ADDR,I
      JMP TYIN
RIGHT IOR ADDR,I
      STA ADDR,I
      ISZ ADDR
      JMP TYIN
* 
EOI   LDA LF        OUTPUT LINE FEED. 
      JSB TYO 
      LDB RL        SET (B) = CHAR. COUNT.
      JMP TTYIN,I   RETURN. 
* 
CANCL LDA BSLSH     OUTPUT BACKSLASH. 
      JSB TYO 
      LDA CR        OUTPUT CARRIAGE RETURN. 
      JSB TYO 
      LDA LF        OUTPUT LF.
      JSB TYO 
      JMP QUERY     RE-PROMPT THE OPERATOR. 
* 
BAKUP LDA BKARW     OUTPUT BACK ARROW.
      JSB TYO 
BAK   LDA RL        DECREMENT CHAR. COUNT.
      ADA MD1 
      STA RL
      LDB ADDR      ADJUST BUFFER POINTER.
      CME,SLA       FLIP E. 
      ADB MD1 
      STB ADDR
      LDA B,I 
      SEZ 
      AND MASKU     CLEAR RIGHT CHAR. 
      STA B,I 
      JMP TYIN      GO INPUT NEXT CHAR. 
* 
TYI   NOP 
      LDA DA        ECHO INPUT. 
TCH1  OTA TTY 
TCH2  STC TTY,C     INPUT A CHARACTER.
TCH3  SFS TTY 
      JMP *-1 
TCH4  LIA TTY 
      JMP TYI,I     RETURN
      SPC 3 
* 
*  DISPLAY DEVICE OUTPUT DRIVER.
*       (A) = # WORDS.
*       JSB TTYO
*       (BUFFER)
      SPC 3 
TTYO  NOP           ENTRY.
      RAL           FORM NO. OF CHARS 
      CMA,CLE,INA   NEGATE COUNT
      STA RL
* 
TO    LDA TTYO,I    PICK UP NEXT BUFFER WORD. 
      SEZ,CME       LEFT CHAR?
      ISZ TTYO      NO, BUMP BUFFER POINTER.
      SEZ           LEFT CHAR?
      ALF,ALF       YES, RIGHT JUSTIFY. 
      AND M377      MASK CHAR.
      CPA BKARW     IS IT A BACKARROW?
      JMP TTYEX     YES, RETURN.
      JSB TYO       OUTPUT THE CHARACTER
      ISZ RL        BUMP COUNT
      JMP TO        ITERATE 
* 
      LDA CR
      JSB TYO       DO CARRAIGE RETURN
      LDA LF        OUTPUT LINE FEED. 
      JSB TYO 
TTYEX SEZ           ON LHW? 
      ISZ TTYO      YES, BUMP POINTER TO RETURN ADDR
      JMP TTYO,I    RETURN. 
* 
TYO   NOP           OUTPUT A CHARACTER. 
      LDB LOUT      PRINT OUTPUT. 
TCH5  OTB TTY 
TCH6  OTA TTY 
TCH7  STC TTY,C 
TCH8  SFS TTY 
      JMP *-1 
      JMP TYO,I 
* 
* 
CR    OCT 15        CARRIAGE RETURN.
LF    OCT 12        LINE FEED.
BKSPC OCT 31        BACKSPACE KEY.
BSLSH OCT 134       BACKSLASH.
BKARW OCT 137       BACKARROW.
DA    OCT 160000    ECHO INPUT. 
LOUT  OCT 120000    PRINT OUTPUT. 
RSIZE NOP 
      SKP 
* 
* ASCII TO BINARY CONVERSION ROUTINE. 
* 
* CALLING SEQUENCE: 
* 
*     A= CHARACTER COUNT
*     B= DATA BUFFER ADDRESS
*     JSB CVT1
* 
*        IF THE DATA BUFFER BEGINS WITH AN "@" SIGN,
*        THE DATA IS TAKEN TO BE OCTAL, ELSE DECIMAL. 
* 
*         ON RETURN, (A) = CONVERTED VALUE
* 
CVT1  NOP           ENTRY.
      STA TMP+1     SAVE CHAR COUNT 
      CLA 
      STA TMP       CLEAR ACCUMULATING VALUE. 
      CLE,ELB 
      STB TEMP+2    STORE CHAR. ADDR. 
      RBR           IS FIRST CHAR = @?
      LDA B,I 
      AND MSK14 
      STA TEMP+3    (ZERO IF OCTAL NUMBER). 
      SZA 
      JMP CV015     NO. 
      LDA B,I       YES, CHANGE TO ASCII ZERO.
      AND M377
      IOR UPR60 
      STA B,I 
* 
CV015 LDA TMP 
      ALF,RAR 
      LDB TEMP+3    OCTAL NUMBER; 
      SZB,RSS 
      JMP CV018     YES 
      ADA TMP 
      ADA TMP       TMP=10*TMP
CV018 STA TMP       STORE MULTIPLIED VALUE. 
      LDB TEMP+2    GET CHAR ADDR.
      CLE,ERB 
      LDA B,I       GET DATA VALUE. 
      SEZ,RSS       IF E SET, THEN LOWER CHAR.
      ALF,ALF       UPPER, SO ROTATE. 
      AND M377
* 
      ADA MD48      CHECK IF LEGAL DATA CHAR. 
      STA TMP+2 
      SSA 
      JMP M0950     ERROR IN SYNTAX.
      ADA MD8 
      LDB TEMP+3    OCTAL NUMBER? 
      SZB 
      ADA MD2       NO. 
      SSA,RSS 
      JMP M0950     ERROR.
* 
      LDA TMP+2 
      LDB TEMP+3
      SZB,RSS 
      AND B7
      ADA TMP       ADD TO ACCUMULATED
      STA TMP       VALUE AND STORE.
      ISZ TEMP+2    INCR CHAR ADDR. 
      ISZ TMP+1     INCR CHAR COUNT.
      JMP CV015     GO PROCESS NEXT CHAR. 
* 
      LDA TMP       LOAD CONVERTED VALUE. 
      JMP CVT1,I    RETURN. 
      SKP 
B2    OCT 2 
B4    OCT 4 
B6    OCT 6 
B7    OCT 7 
B10   OCT 10
CONTH EQU B10 
K9    DEC 9 
K100  DEC 100 
MD1   DEC -1
MD2   DEC -2
MD3   DEC -3
MD5   DEC -5
MD6   DEC -6
MD8   DEC -8
MD33  DEC -33 
MD48  DEC -48 
M177  OCT 177 
RBOUT EQU M177
M377  OCT 377 
COM   OCT 54
BLNK  OCT 40
BLNKW ASC 1,
ASTER OCT 25000 
UPR60 OCT 30000 
MSK14 OCT 137400
MASKU OCT 177400
IADR  NOP 
RL    OCT 0 
ADDR  OCT 0 
TNW   OCT 170360
RLW   OCT 007417
RC    OCT 170017    "REQUEST COMING"
LOC   NOP 
ERFLG NOP 
CKSUM NOP 
TMP   BSS 3 
* 
TEMPP OCT 0 
TEMP  BSS 7         TEMPORARY STORAGE.
BFSIZ DEC 18
BUFFR BSS 18        OPER I/O MESSAGE BUFFER.
* 
* 
PARAM NOP           PARAMETER COUNTER.
OP1   NOP           CHAR. COUNT - COMMAND MNEMONIC. 
OP    BSS 3         MNEMONIC. 
CP1   NOP           CHAR. COUNT-PARAM 1.
P1    BSS 3          PARAM 1 (UP TO 3 WORDS). 
CP2   NOP           ETC.
P2    BSS 3 
CP3   NOP 
P3    BSS 3 
CP4   NOP 
P4    BSS 3 
CP5   NOP 
P5    BSS 3 
CP6   NOP 
P6    BSS 3 
CP7   NOP 
P7    BSS 3 
* 
*  THE FOLLOWING ADDRESSES ARE RELOCATED AT CONFIGURATION TIME. 
* 
INIT  DEF *+1       PARAMETER INITIALIZATION POINTER
      DEF OP        COMMAND MNEMONIC BUFR ADDR
P1AD  DEF P1        PARAMETER 
P2AD  DEF P2
      DEF P3        N 
      DEF P4
      DEF P5        BUFFER
      DEF P6
      DEF P7        POINTERS. 
DO.P1 DEF O.P1
BUFAD DEF BUFFR 
PARPT DEF PARAM 
SIZE  EQU * 
      END 
                                                                                                                                                  