      JSB READ      READ FROM TTY 
      JMP *-3 
      JSB YCHEK 
      JMP TS6.8 
      LDA .4        WORD II X10, 20VOLTS
      IOR UNIT
      STA TEMP      SAVE IT 
      LDB .10MA     WORD I 100MA
      JSB OUTP      CALL UNIT 
      JSB PRINT     GREATER THAN 9 VOLTS
      DEF MES76 
      JSB READ      READ FROM TTY 
      JMP *-3 
      JSB YCHEK 
      JMP VLIM
      LDA CLEAR 
      IOR UNIT      WORD II SYSTEM CLEAR
      LDB .10MA     WORD I 100MA
      JSB OUTP      CALL UNIT 
      JSB PRINT     VOLTAGE LESS THAN 4 VOLTS?
      DEF MES77 
      JSB READ
      JMP *-3 
      JSB YCHEK 
      JSB TS6.9 
.FNSH LDB FAIL6      CHECK FAIL FLAG
      SZB 
      JMP TS6.2      FLAG SET, GO LOAD FAIL ADDRESS 
      JSB OK         TEST OK
      LDA A61        LOAD PASSED ADDRESS
      INA 
TS6.3 LDB STAR       STORE A STAR AT PROPER POSITION
      STB A,I 
      LDB BLANK      STORE A BLANK AT 
      LDA A63          "NOT PERFORMED" POSITION 
      STB A,I 
      JSB ZERO       PROGRAM ZERO 
      JSB PRINT      SET DCS VOLTMETER TO 100 VOLT RANGE
      DEF MES80 
      JSB PRINT      REMOVE SHORT FROM 10 OHMS
      DEF MES74 
      JSB READ
      JMP *-3 
      JSB YCHEK 
      JMP *-5 
      LDA GO         CHECK GO FLAG
      SZA            IF SET 
      JMP TST          GO PRINT TEST TABLE
      JMP TEST          IF NOT GO TO "TEST #?"
TS6.0 NOP            CMPUTER DIDN'T HLT FOR 
      JSB NCHEK        TIMING MODE INTERRUPT
      JMP TS6.6         PRINT MESSAGE 
      JSB PRINT 
      DEF MES61 
      ISZ FAIL6      SET FAIL FLAG
      JMP TS6.0,I 
TS6.1 NOP            CMPUTER DIDN'T HLT FOR 
      JSB NCHEK        ALARM MODE INTERRUPT 
      JMP TS6.7 
      JSB PRINT          PRINT MESSAGE
      DEF MES62 
      ISZ FAIL6      SET FAIL FLAG
      JMP TS6.1,I 
TS6.2 LDA A62        LOAD FAIL ADDRESS
      JMP TS6.3 
TS6.9 NOP 
      JSB NCHEK 
      JMP TS6.8      WASN'T Y OR N, RESTART 
      JSB PRINT      SYSTEM CLEAR MALFUNCTION 
      DEF MES79 
      ISZ FAIL6 
      JMP TS6.9,I 
VLIM  JSB NCHEK        WAS ANSWER NO? 
      JMP TS6.8        INVALID REPEAT TEST
      JSB PRINT        DO TEST #3 
      DEF MES25 
      ISZ FAIL6        SET FAIL FLAG
      JMP .FNSH        GO END TEST
* 
*   TEST TABLE
* 
TST   LDA TSTA       SET TST.2 AS TTY INTERRUPT 
      STA CHRIN        RETURN ADDRESS 
      JSB PRINT      CR/LF
      DEF MES0
      JSB PRINT      CR/LF
      DEF MES0
      JSB PRINT      PRINT TITLE
      DEF TABLE 
      LDA M6         SET COUNTER
      STA CNT 
      LDA AD1 
      STA AA1 
      LDA TAT        INITIALIZE EACH TABLE ENTRIES
      STA TABA
TST.1 JSB PRNTT      PRINT TABLE
      DEF TABA,I
      JSB PRNTT 
      DEF AA1,I 
      ISZ TABA
      ISZ AA1 
      ISZ CNT 
      JMP TST.1 
      JSB PRINT      CR/LF
      DEF MES0
      JSB PRINT      CR/LF
      DEF MES0
      JSB PRINT      CR/LF
      DEF MES0
      JSB PRINT      SERIAL # 
      DEF MES63 
      JSB PRINT      TESTED BY:    DATE:
      DEF MES0
      JSB PRINT 
      DEF MES64 
TST.2 LDA M6         INITIALIZE TABLE TO  
      STA CNT          ALL "NOT PERFORMED"
      LDA AD1 
      STA AA1 
      LDA AD2 
      STA AA2 
      LDA AD3 
      STA AA3 
TST.3 LDB BLANK 
      LDA AA1,I 
      INA 
      STB A,I 
      STB AA2,I 
      LDB STAR
      STB AA3,I 
      ISZ AA1 
      ISZ AA2 
      ISZ AA3 
      ISZ CNT 
      JMP TST.3 
      JSB PRINT      CR/LF
      DEF MES0
      JSB PRINT      CR/LF
      DEF MES0
      JMP NEXT       GO TO NEXT UNIT
TAT   DEF TB
TB    DEF TAB1
      DEF TAB2
      DEF TAB3
      DEF TAB4
      DEF TAB5
      DEF TAB6
TABLE DEC 56
      ASC 28,                        PASSED   FAILED   NOT PERFORMED
TAB1  DEC -28 
      ASC 14,TEST 1- UNIT RESPONSE
TAB2  DEC -28 
      ASC 14,TEST 2- FRONT PANEL
TAB3  DEC -28 
      ASC 14,TEST 3- CURRENT AMPLIF.
TAB4  DEC -28 
      ASC 14,TEST 4- CURRENT RANGE
TAB5  DEC -28 
      ASC 14,TEST 5- VOLTAGE LIMIT
TAB6  DEC -28 
      ASC 14,TEST 6- INTERRUPT
BLANK ASC 1,  
STAR  ASC 1,* 
PFN1  DEC 24
      ASC 12,                      *
PFN2  DEC 24
      ASC 12,                      *
PFN3  DEC 24
      ASC 12,                      *
PFN4  DEC 24
      ASC 12,                      *
PFN5  DEC 24
      ASC 12,                      *
PFN6  DEC 24
      ASC 12,                      *
AD1   DEF A11 
A11   DEF PFN1
A21   DEF PFN2
A31   DEF PFN3
A41   DEF PFN4
A51   DEF PFN5
A61   DEF PFN6
AD2   DEF A12,I 
A12   DEF PFN1+6
A22   DEF PFN2+6
A32   DEF PFN3+6
A42   DEF PFN4+6
A52   DEF PFN5+6
A62   DEF PFN6+6
AD3   DEF A13,I 
A13   DEF PFN1+12 
A23   DEF PFN2+12 
A33   DEF PFN3+12 
A43   DEF PFN4+12 
A53   DEF PFN5+12 
A63   DEF PFN6+12 
FWAM2 EQU * 
      ORG 4000B 
      HED TTY DRIVER
      SKP 
* 
*******************  TTY INPUT DRIVER   *********************** 
* 
*   INPUTS FROM AN ASR 33/35 THROUGH THE
*   TELETYPE CONTROL BOARD. 
* 
*    CALL:  JSB 104B,I
* 
*       (A) = POSITION IN BUFFER FOR FIRST CHARACTER. 
* 
*    RETURN:   (A) = -1  TOO MANY CHARACTERS IN RECORD
*              (A) = -2  RECORD DELETED 
*              (A) = NUMBER OF CHARACTERS IN RECORD.
*           
*          THE CHARACTERS ARE PACKED TWO TO A WORD IN THE BUFFER. 
* 
*          ALL RECORDS MUST BE TERMINATED WITH A CARRIAGE RETURN. 
*          THE NULL AND LINE FEED CHARACTERS ARE IGNORED. 
* 
*          AN ALT MODE ANYWHERE BEFORE THE CARRIAGE RETURN DELETES
*          ALL CHARACTERS IN THE RECORD.  THE RECORD IS IGNORED.
* 
* 
TTY.I NOP           ENTRY POINT.
      LDB BUFA      SET 
      STB BADDR      BUFFER ADDRESS.
      STA B         SET CHARACTER COUNTER.
      LDA .16       SET MAXIMUM RECORD LENGTH 
      STA COUNT      T_ 32 CHARACTERS.
      LDA IMODE 
TI.1  OTA TTY       SET TTY TO INPUT MODE.
TI.2  STC TTY,C     REQUEST CHARACTER.
TI.3  SFS TTY 
      JMP *-1       WAIT FOR CHARACTER INPUT. 
TI.4  LIA TTY       LOAD CHARACTER. 
      JSB PROCS    PROCESS CHARACTER. 
      JMP TI.2      GET NEXT CHARACTER. 
TI.5  CLC TTY 
      JMP TTY.I,I   RECORD COMPLETE RETURN. 
      HED INPUT CHARACTER PROCESSING
* 
*  PROCESS CHARACTER FOR INPUT
* 
PROCS NOP           ENTRY POINT.
      AND B177      STRIP BIT 7 
      CPA LNFD      LINE FEED?
      JMP PROCS,I   YES, IGNORE.
      CPA B177      RUBOUT? 
      JMP CMPLT-1   YES, CANCEL RECORD. 
      CPA AMODE     NO. ALT MODE? 
      JMP CMPLT-1   YES, CANCEL RECORD. 
      CPA OMODE     NO. OLD ALT MODE? 
      JMP CMPLT-1   YES, CANCEL RECORD. 
      CPA EMODE     NO. ESCAPE MODE?
      JMP CMPLT-1   YES, CANCEL RECORD. 
      CPA CRTN      NO. CARRIAGE RETURN?
      JMP CMPLT     YES, COMPLETE RECORD. 
      CPB COUNT     NO. BUFFER OVERFLOW?
      CCB           YES, LOOK FOR CARRIAGE RETURN.
      SSB           LOOKING FOR CARRIAGE RETURN.
      JMP PROCS,I   YES, RETURN.
      SLB,INB       NO, CHECK ODD/EVEN FLAG.
      JMP PROC2     B0 = 0, EVEN CHARACTER. 
PROC1 ALF,ALF       B0 = 1, ODD CHARACTER.
      STA BADDR,I   RECORD HIGH CHARACTER.
      JMP PROCS,I 
PROC2 IOR BADDR,I   PACK TWO CHARACTERS.
      STA BADDR,I   PUT IN BUFFER.
      ISZ BADDR     INDEX BUFFER ADDRESS POINTER. 
      JMP PROCS,I 
* 
*   THIS SECTION PUTS COUNT IN A AND RETURNS TO P+2 
* 
      LDB M2        SET DELETE FLAG.
CMPLT LDA B         PUT CHARACTER COUNT IN A. 
      ISZ PROCS     SET FOR (P+2) RETURN. 
      JMP PROCS,I   
      SKP 
      HED TTY OUTPUT DRIVER 
* 
******************  TTY OUTPUT DRIVER  *********************
* 
*    OUTPUTS ASCII RECORDS THROUGH THE TELETYPE.
* 
*    CALL:  JSB 102B,I
* 
*          (A) = NUMBER OF CHARACTERS TO BE OUTPUT
*          (B) = STARTING ADDRESS OF BUFFER 
*                     
*    IF (A) >= O THEN OUTPUT (A) CHARACTERS 
*    FOLLOWED BY A CARRIAGE RETURN/LINE FEED. 
* 
*    IF (A) < 0 THEN OUTPUT -(A) CHARACTERS ONLY. 
* 
*    BUFFER CONTAINS ASCII CHARACTERS PACKED TWO PER WORD.
* 
*    IF (B) = 0 ON ENTRY OUTPUT (A) FEED FRAMES.
*    IF (A) = 0 ON ENTRY ONLY A CR/LF IS OUTPUT.
* 
* 
TTY.P NOP           ENTRY POINT.
      JSB INIT      INITIALIZE AND SET UP.
      LDA LMODE 
TP.1  OTA TTY       SET TTY TO OUTPUT MODE. 
TP.3  JSB GETCH     GET NEXT CHARACTER. 
      JMP TP.8      BUFFER EMPTY. 
TP.4  OTA TTY       LOAD TTY BOARD BUFFER.
TP.6  STC TTY,C     GIVE PRINT COMMAND. 
TP.5  SFS TTY       WAIT FOR
      JMP *-1         FLAG. 
* 
*  THIS SECTION CHECKS IF A CHARACTER HAS BEEN TYPED FROM THE 
*  KEYBOARD DURING OUTPUT ON TELETYPE.
* 
TP.9  LIA TTY       LOAD FROM BOARD BUFFER. 
      CPA B377      FIRST 8 BITS SHOULD BE 1'S. 
      JMP TP.3      NO KEY STRUCK, CONTINUE.
      JMP CHRIN,I   GO RESPOND TO INTERRUPT.
TP.8  CLC TTY       TURN OFF TTY. 
      SEZ,CLE,RSS   RECORD COMPLETE?  CLEAR E.
      JMP TTY.P,I   E=0, RECORD OUTPUT COMPLETE.
      LDA M2        E=1, ADD A RETURN AND LINE FEED.
      LDB CRLFA     LOAD ADDRESS OF CR AND LF.
      JMP TTY.P+1   DO CR/LF. 
      SKP 
* 
*   SUBROUTINE  GETCH 
* 
*     RETURN TO P+1 ON EMPTY BUFFER.
*     IF THE BUFFER IS NOT EMPTY, 
*     RETURN TO P+2 WITH CHARACTER IN (A).
* 
GETCH NOP           ENTRY POINT.
      CPB COUNT 
      JMP GETCH,I   BUFFER EMPTY. P+1 RETURN. 
      LDA BUFAD,I   GET TWO CHARACTERS. 
      SLB,RSS 
      ALF,ALF       B EVEN, POSITION CHARACTER RIGHT
      SLB,INB       CHECK O/E, AND INDEX COUNT. 
      ISZ BUFAD     B ODD, INCREMENT ADDRESS POINTER
FINSH AND B177      STRIP LEFT CHARACTER. 
      IOR B200      ADD BIT 7.
      ISZ GETCH 
      JMP GETCH,I   RETURN TO P+2.
* 
*  INITIALIZES FOR OUTPUTTING A RECORD
* 
INIT  NOP           ENTRY POINT 
      CCE,SSA       SET E = 1, CHECK FOR (A) < 0. 
      CMA,CLE,INA   SET E = 0, (A) = -(A).
      STA COUNT     SAVE CHARACTER COUNT. 
      STB BUFAD     SET BUFFER STARTING ADDRESS.
      LDB IORI      RESTORE INSTRUCTION 
      STB FINSH+1    TO ADD BIT 7.
      LDB BUFAD     RESTORE B.
      SZA 
      SZB           LEADER/TRAILER ONLY.
      JMP *+4       NO. 
      LDA CLAI      YES, (B) = 0. 
      STA FINSH+1   SET CLEAR INSTRUCTION.
      CLE           SET NO CR/LF. 
      CLB           INITIALIZE OUTPUT COUNT.
      JMP INIT,I
      HED     TTY MESSAGES
* 
* TTY MESSAGES
* 
MES0  DEC 0 
MES1  DEC -16 
      ASC 8,COMPUTER MODEL? 
MES2  DEC -6
      ASC 3,UNIT? 
MES3  DEC -13 
      ASC 7,TEST NUMBER?
MES4  DEC 15  
      ASC 8,X1 MAX POSITIVE     
MES5  DEC 21
      ASC 11,TEST 1, UNIT RESPONSE
MES6  DEC 48
      ASC 24,UNLESS OTHERWISE SPECIFIED, CONNECT 100 OHM LOAD 
MES7  DEC -17 
      ASC 9,TTY I/O ADDRESS?
MES8  DEC -22 
      ASC 11,DVS CARD I/O ADDRESS?  
MES9  DEC -25 
      ASC 13,SYSTEM DUMP I/O ADDRESS? 
MES10 DEC 34
      ASC 17,TURN ON PUNCH, PRESS RUN FOR TAPE. 
MES11 DEC 40
      ASC 20,TO RUN TEST LOAD ADDRESS 100B, PRESS RUN 
MES13 DEC 40
      ASC 20,NORMAL PROGRAM FLAG NOT RETURNED IN TIME 
MES14 DEC -26 
      ASC 13,DOES DVM READ 50MV,+-10MV? 
MES15 DEC -28 
      ASC 14,DOES DVM READ 500MV,+-100MV? 
MES16 DEC 37
      ASC 19,NORMAL PROGRAM FLAG RETURNED TOO SOON
MES17 DEC 20
      ASC 10,X1 DOES NOT RESPOND. 
MES18 DEC 38
      ASC 19,RANGE CHANGE FLAG NOT RETURNED IN TIME 
MES19 DEC 35
      ASC 18,RANGE CHANGE FLAG RETURNED TOO SOON  
MES20 DEC 21
      ASC 11,X10 DOES NOT RESPOND.
MES21 DEC 20
      ASC 10,TEST 2, FRONT PANEL. 
MES22 DEC -31 
      ASC 16,SET AMMETER TO 16MA RANGE,DONE?
MES23 DEC 27
      ASC 14,INPUT METER READING IN MA    
MES24 DEC 22
      ASC 11,VOLTMETER NOT ACCURATE   
MES25 DEC 45  
      ASC 23,CURRENT AMPLIFIER MALFUNCTION,PERFORM TEST #3
MES26 DEC -36 
      ASC 18,SHORT 10 OHM SENSING RESISTOR,DONE?
MES27 DEC 30                          
      ASC 15,INPUT VOLTAGE READING IN VOLTS 
MES28 DEC 20
      ASC 10,AMMETER NOT ACCURATE 
MES29 DEC 26
      ASC 13,TEST 3, CURRENT AMPLIFIER. 
MES31 DEC 36
      ASC 18,ADJUST POS. 0 (A3R18),IF DONE TYPE Y 
MES32 DEC 17
      ASC 9,CHECK 81.92MA BIT 
MES33 DEC 17
      ASC 9,CHECK 40.96MA BIT 
MES34 DEC 17
      ASC 9,CHECK 20.48MA BIT 
MES35 DEC 17
      ASC 9,CHECK 10.24MA BIT 
MES36 DEC 16
      ASC 8,CHECK 5.12MA BIT  
MES37 DEC 16
      ASC 8,CHECK 2.56MA BIT  
MES38 DEC 16
      ASC 8,CHECK 1.28MA BIT  
MES39 DEC 16
      ASC 8,CHECK .64MA BIT   
MES40 DEC 15
      ASC 8,CHECK .32MA BIT   
MES41 DEC 15
      ASC 8,CHECK .16MA BIT   
MES42 DEC 15
      ASC 8,CHECK .08MA BIT   
MES43 DEC 15
      ASC 8,CHECK .04MA BIT   
MES44 DEC 15
      ASC 8,CHECK .02MA BIT     
MES45 DEC 15
      ASC 8,CHECK .01MA BIT   
MES46 DEC 16
      ASC 8,CHECK .005MA BIT  
MES47 DEC 40
      ASC 20,TEST 6, INTERRUPT/VOLTAGE LIMIT OVERRIDE 
MES48 DEC 21
      ASC 11,TEST 4, CURRENT RANGE
MES51 DEC 15
      ASC 8,X1 MAX NEGATIVE     
MES52 DEC 14
      ASC 7,OUTPUT IS OFF 
MES53 DEC 22
      ASC 11,TEST 5, VOLTAGE LIMIT
MES55 DEC 41
      ASC 21,OUTPUT LIMITED BELOW PROGRAMMED TOLERANCE
MES56 DEC 13
      ASC 7,DID NOT LIMIT 
MES57 DEC 8 
      ASC 4,TEST OK.
MES58 DEC 39
      ASC 20,PRESS RUN IF HLT, NOTE HLT SELECT CODE 
MES59 DEC 16  
      ASC 8,X10 MAX POSITIVE
MES60 DEC 50
      ASC 25,HLT XX? WHERE XX IS I/O SLOT FOR DVS CARD (Y OR N) 
MES61 DEC 37  
      ASC 19,TIMING MODE INTERRUPT NOT FUNCTIONING
MES62 DEC 37
      ASC 19,ALARM MODE INTERRUPT NOT FUNCTIONING 
MES63 DEC 14
      ASC 7,SERIAL NUMBER:
MES64 DEC 35
      ASC 18,TESTED BY:                    DATE:
MES65 DEC -15 
      ASC 8,ALL SIX TESTS?  
MES66 DEC 32
      ASC 16,Y AND N FOR YES AND NO QUESTIONS 
MES67 DEC 24
      ASC 12,INPUT DVM READING IN MV. 
MES68 DEC 16
      ASC 8,X10 MAX NEGATIVE
MES69 DEC 34  
      ASC 17,SET DCS VOLTMETER TO 20 VOLT RANGE 
MES70 DEC 24
      ASC 12,FOR VOLTAGE LIMIT CODE 0 
MES71 DEC 24
      ASC 12,FOR VOLTAGE LIMIT CODE 1 
MES72 DEC 25
      ASC 13,FOR VOLTAGE LIMIT CODE 2 
MES73 DEC 25
      ASC 13,FOR VOLTAGE LIMIT CODE 3 
MES74 DEC -47 
      ASC 24,REMOVE SHORT FROM 10 OHM SENSING RESISTOR,DONE?
MES75 DEC 28  
      ASC 14,SET AMMETER TO 160 MA RANGE  
MES76 DEC -46 
      ASC 23,IS DCS VOLTMETER READING GREATER THAN 9 VOLTS? 
MES77 DEC -43 
      ASC 22,IS DCS VOLTMETER READING LESS THAN 4 VOLTS?
MES78 DEC 43
      ASC 22,RESISTOR AND 10 OHM SENSING RESISTOR TO DCS
MES79 DEC 34
      ASC 17,VOLTAGE LIMIT OVERRIDE MALFUNCTION 
MES80 DEC 36
      ASC 18,SET DCS VOLTMETER TO 100 VOLT RANGE  
      HED             DVS CONFIGURATION TABLE 
* 
* CONFIGURATION TABLES
* 
PUNT  DEF PUNE      HIGH SPEED PUNCH
      DEF DUMP1     I/O INSTRUCTIONS. 
      DEF POUT1 
      DEF POUT2 
      DEF POUT3 
      DEF PNCH5 
PUNE  EQU * 
* 
TTYT  DEF TTYE      TELETYPE
      DEF ION+5     I/O INSTRUCTIONS. 
      DEF ION+6 
      DEF INTCR+1 
      DEF TI.1
      DEF TI.2
      DEF TI.3
      DEF TI.4
      DEF TI.5
      DEF TP.1
      DEF TP.4
      DEF TP.5
      DEF TP.6
      DEF TP.8
      DEF TP.9
      DEF TTAD1 
TTYE  EQU * 
* 
PSLST DEF PSLE
      DEF TS1.0-6 
      DEF TS1.7-6 
      DEF OUTP+1
      DEF OUTP+2
      DEF OUTP+3
      DEF ZERO+6
      DEF TS5.3-15
      DEF TS5.3-4 
      DEF T.06+7
      DEF T.06+8
      DEF TS6.4 
      DEF TS6.4+1 
      DEF TS6.4+2 
      DEF TS6.4+3 
      DEF TS6.4+4 
      DEF TS6.5 
      DEF TS6.5+1 
      DEF TS6.5+4 
      DEF TS6.5+5 
      DEF TS6.5+6 
      DEF TS6.5+7 
      DEF TS6.5+8 
PSLE  EQU * 
* 
      SKP 
      HED FLOATING POINT SUBROUTINES
FPADD NOP            ENTRY FOR FLOATING ADD 
      JSB UNPAK     
      JMP ADMUP   
.FSB  NOP            ENTRY FOR FSB. EXIT FOR FAD/FSB. 
      JSB UNPAK     
      LDA A2
      CMA     
      CMB,INB,SZB   
      JMP OK2 
      SSA,INA,RSS 
      SSA,RSS 
      JMP OK2 
      RAR 
      ISZ X2
OK2   STB B2
      STA A2
ADMUP ISZ .FSB
      LDA X2
AGAIN CMA,INA 
      ADA Z1
      SSA,RSS 
      JMP ADDEM 
      LDA A1
      LDB A2
      STA A2
      STB A1
      LDA B1
      LDB B2
      STA B2
      STB B1
      LDA Z1
      LDB X2
      STB Z1
      STA X2
      JMP AGAIN 
ADDEM ADA M25 
      LDB B1
      SSA,RSS 
      JMP TAKIT 
      CMA,CLE 
      ADA M25 
      STA X2
      LDA A2
      LDB B2
LOOP  ISZ X2
      JMP SHFTA 
* DOUBLE ADD SECTION *
      ADB B1
      CLO 
      SEZ 
      CLE,INA 
      SOS 
      JMP *+5 
      ADA A1
      SSA,RSS 
      JMP DONE
      JMP *+4 
      ADA A1
      SOS 
      JMP DONE
      ERA 
      ERB 
      ISZ Z1
      JMP DONE
      RSS 
TAKIT LDA A1
DONE  JSB .PACK 
Z1    BSS 1 
      JMP .FSB,I
SHFTA CLE,SLA,ARS 
      CME 
      ERB,CLE 
      JMP LOOP
UNPAK NOP 
      STA A1
      SZA,RSS 
      CLB,INB 
      JSB .FLUN 
      STB B1
      STA Z1
      LDA UNPAK 
      ADA M2
      LDA A,I 
      STA .FSB
      LDA A,I 
      DLD A,I 
      STA A2
      SZA,RSS 
      CLB,INB 
      JSB .FLUN 
      STB B2
      STA X2
      JMP UNPAK,I 
* 
* 
* 
* 
FPMPY NOP            ENTRY FOR FLOATING POINT MULTIPLY
      STA A1
      JSB .FLUN 
      STA EXPOM 
      RBR 
      STB B1
      LDA FPMPY,I 
      DLD A,I 
      STA A2
      JSB .FLUN 
      ADA EXPOM 
      INA 
      STA EXPOM 
      RBR 
      STB A 
      MPY A1
      STA B2
      LDA B1
      STB B1
      MPY A2
      ADB B1
      CLE 
      ADA B2
      SEZ 
      INB 
      STB B2
      LDA A1
      MPY A2
      CLE,ERA 
      ADA B2
      CLE,ELA 
      SEZ,RSS 
      JMP *+4 
      SOC 
      INB,RSS 
      ADB M1
      STA A1
      LDA B 
      LDB A1
      JSB .PACK 
EXPOM BSS 1 
      ISZ FPMPY 
      JMP FPMPY,I 
* 
* 
FLOAT NOP            ENTRY POINT INTEGER TO FP
      CLB 
      JSB .PACK 
      DEC 15
      JMP FLOAT,I 
* 
* 
.PACK NOP            ENTRY POINT  
      STA A1
      CLA 
      STA EXPON 
      LDA A1
      SZA,RSS 
      SZB 
      JMP NORML 
BACK  CLO 
      ISZ .PACK 
      JMP .PACK,I 
SHIFT ISZ EXPON 
NORML CLE,ELB 
      ELA 
      SEZ,SSA,RSS 
      JMP SHIFT 
      SEZ,SSA 
      JMP SHIFT 
      ERA 
      ERB,CLE 
      ADB B177
      SSA,RSS 
      INB 
      CLO 
      SEZ 
      CLE,INA 
      SOS 
      RAL 
      SSA,SLA,RSS 
      JMP *+3 
      ISZ EXPON 
      ARS,SLA,ALS 
      RAR 
      STA A1
      LDA B 
      AND MASKH 
      STA B 
      LDA EXPON 
      CMA,INA 
      ADA .PACK,I 
      SOC 
      INA 
      ADA P200
      SSA 
      JMP XUNDR 
      ADA M400
      SSA,RSS 
      JMP XOVER 
      ADA P200
      RAL 
      AND B377
      ADB 0 
      LDA A1
      JMP BACK
XUNDR CLA 
      CLB 
      JMP SETOV 
XOVER LDA INF1A 
      LDB INF2
SETOV STO 
      JMP BACK+1
* 
* 
.FLUN NOP            ENTRY POINT UNPACKING ROUTINE
      LDA 1 
      AND B377
      CMB 
      ADB 0 
      CMB 
      SLA,RAR 
      IOR XSEXP 
      JMP .FLUN,I 
RNDAF NOP            ENTRY POINT  
      JSB CONST      CALL CONSTANT CONVERTION ROUTINE 
      JMP RNDAF,I    NO INTEGER, RETURN 
      LDB NEGFL      GET POLARITY 
      STB SIGN       SAVE IT
      JSB FLOAT      CONVERT TO FLOATING POINT
      JSB FPMPY      MULTIPLY 
      DEF .100        TIMES 100 
      DST FPN1       SAVE PRODUCT 
      LDB M3         -3 IN B FOR 2 OR MORE CHAR.
      LDA CCNT       LOAD CHARC. LEFT COUNTER 
      CMA,INA        MAKE POSITVE 
      ADA M3         SUBTRACT 3 
      SSA,RSS        IF 2 OR MORE 
      JMP TWLFT       LEFT, TAKE
      INA,SZA          ONLY 2.
      JMP NLEFT      NONE LEFT
      LDB M2         LOAD FOR 1 CHARC. LEFT 
      ISZ MAG        DECREMENT PACK COUNT 
TWLFT STB CCNT       SET CHARC. COUNTER 
      JSB CONST      CALL CONSTANT CONV. ROUTINE
      JMP RNDAF,I    NO INTEGER, RETURN 
      LDB SIGN       GET PROPER 
      SZB             POLARITY FOR
      CMA,INA          LAST TO NUMBERS
      JSB FLOAT      CONVERT TO FLOATING POINT
      ISZ MAG        WAS IT ONE DIGIT?
      JMP *+3        NO 
      JSB FPMPY      YES,MULTIPLY 
      DEF .10         TIMES 10
      JSB FPADD      ADD PARTIALS, SAVE 
      DEF FPN1        TOTAL VALUE IN UA.
      DST FPN1       SAVE IT
NLEFT CLA 
      STA SIGN1      INITIALIZE SIGN
      LDA AMPS       GET PROGRAMMED VALUE 
      SSA,RSS        WAS IT NEGATIVE? 
      JMP *+4        NO 
      ISZ SIGN1      YES, SET SIGN
      CMA            IF (-) TAKE 1'S COMPLIMENT 
      ADA T4X1       ADD -1 IF X1 RANGE, 0 IF X10 RANGE 
      JSB FLOAT      CONVERT TO FLOATING POINT
      JSB FPMPY      MULTIPLY 
      DEF .5          TIMES 5 
      DST FPN2       SAVE IT  
      LDA SIGN1      IF NEGATIVE
      SZA,RSS         POLARITY
      JMP *+5          ADD 5 OFFSET 
      LDA FPN2           TO FLOATING
      JSB FPADD           POINT 
      DEF .5               NUMBER 
      DST FPN2       SAVE IT
      LDA FPN2
      JSB FPMPY      MULTIPLY 
      DEF FP11        TIMES 0.0011
      DST FPN3       SAVE IT  
      LDA RANGE      WHAT RANGE 
      SZA 
      JMP X10R
      DLD FPN3
      JSB FPADD 
      DEF .1
      JMP SAV1
X10R  DLD FPN3
      JSB FPADD 
      DEF .10 
SAV1  DST FPN3
      LDA FPN2
      LDB SIGN1      CHECK SIGN OF PROG. VALUE
      SZB             IF NEGATIVE 
      JMP *+5          LEAVE IT.
      LDB FPN2+1
      JSB FPMPY   
      DEF .M1 
      JMP *+2 
      LDB FPN2+1     ADD MONITORED INPUT
      JSB FPADD       TO NEGATIVE OF PROGRAMMED VALUE 
      DEF FPN1
      SSA            IF SUM 
      JMP *+3         POSIVTE 
      JSB FPMPY        MAKE 
      DEF .M1           NEGATIVE
      JSB FPADD      SUBTRACT TRUE ERROR
      DEF FPN3        FROM ALLOWABLE ERROR
      CLB 
      SSA            IF SUM POSITVE 
      INB             WITHIN TOLERANCE PASS 
      ISZ RNDAF        TEST 
      JMP RNDAF,I    RETURN 
FWAM3 EQU * 
* 
      END 
                                                                                                                                                                                                                                                          