*** empty log message ***
[h316.git] / programs / fortran / src / f4$ios-b.asm
diff --git a/programs/fortran/src/f4$ios-b.asm b/programs/fortran/src/f4$ios-b.asm
new file mode 100644 (file)
index 0000000..8560780
--- /dev/null
@@ -0,0 +1,552 @@
+*    F4$IOS-B - DEC 12 2006 - VERSION 1
+*
+*    FORTRAN COMPILER IO SELECTOR
+*
+*    WHEN THE COMPILER IS STARTED, REGISTER A SPECIFIES THE DEVICES
+*    TO BE USED FOR SOURCE INPUT, OBJECT OUTPUT AND FOR LISTING OUTPUT.
+*    THE IOS SELECTOR HONORS THIS SELECTION BY ACTIVATING THE SELECTED
+*    DEVICES FOR THESE TASKS.
+*
+*    THE FOLOWING OPTIONS ARE SUPPORTED:
+*
+*    A[ 8-10] SOURCE INPUT DEVICE  (1=TTY 2=CR  3=HSR 4=MAGTAPE-UNIT 1)
+*    A[11-13] LISTING DEVICE       (0=SUP 1=TTY 2=LP  4=MAGTAPE-UNIT 2)
+*    A[14-16] OBJECT OUTPUT DEVICE (0=SUP 1=PTP 2=TTY 4=MAGTAPE-UNIT 2)
+*    THE LISTED DEVICE ALLOCATION IS SET BY F4IOS
+*    THIS VERSION OF F4IOS DOES NOT, WITHOUT MODIFICATION, SUPPORT OTHER 
+*    DEVICES FOR THE SPECIFIED TASKS.
+*    THIS ALSO MEANS THAT TAPE UNIT 2 CAN EITHER BE USED FOR
+*    OBJECT OUTPUT OR FOR LISTING OUTPUT
+*
+*    IN CASE NO DEVICE SELECTION IS SPECIFIED IN REGISTER A, A DEFAULT
+*    SELECTION IS MADE BY F4IOS:
+*    - SOURCE INPUT   3=HSR 
+*    - LISTING OUTPUT 1=TTY
+*    - OBJECT OUTPUT  1=PTP
+*
+*    F4IOS LINKS, TO SUPPORT THE SPECIFIED IO, THE DRIVERS FOR THESE DEVICES.
+*    HOWEVER, IF FOR INSTANCE NO MAGTAPE IS AVAILABLE IN A PARTICULAR 
+*    INSTALLATION, THE MAGTAPE DRIVER CAN BE REPLACED BY A DUMMY DRIVER.
+*    THE COMPILER FOOTPRINT IN MEMORY BECOMES SMALLER THEN. DO NOT LINK
+*    THE MAGTAPE DRIVER IN THAT CASE. THE F4$DUM MODULE RESOLVES THE CALLS
+*    TO THE MAGTAPE DRIVER AND MUST BE THAT LAST MODULE TO BE LINKED.
+*
+*    HONEYWELL X16 16 BIT COMPUTER SOFTWARE
+*
+*    PROGRAM LENGTH:  415 WORDS
+*
+*    THIS SOURCE IS RECREATED FROM THE EXISTING SLST FILE: 
+*    - SLST-FRTN.IMG (WHICH ORIGINATES FROM HONEYWELL)
+*
+*    THE SOURCE IS RECREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL)
+*
+*    SUBR F4$INT,F4IN        IO INITIALISATION ROUTINE
+*    SUBR F4$IN,F4SI         GENERAL SOURCE INPUT ROUTINE
+*    SUBR F4$OUT,F4OO        GENERAL OBJECT OUTPUT ROUTINE
+*    SUBR F4$SYM,F4LO        GENERAL LISTING OUTPUT ROUTINE
+*    SUBR F4$END,F4EN        END COMPILATION
+*
+*    SUBR F4$DUI,IL1         DUMMY SOURCE INPUT DRIVER
+*    SUBR F4$DUO,OL4         DUMMY OBJECT OUTPUT DRIVER
+*    SUBR F4$DUS,LL9         DUMMY LISTING OUTPUT DRIVER
+*
+     SUBR  F4$INT,F4IN
+     SUBR  F4$IN,F4SI
+     SUBR  F4$OUT,F4OO
+     SUBR  F4$SYM,F4LO
+     SUBR  F4$END,F4EN
+*
+     SUBR  F4$DUI,IL1
+     SUBR  F4$DUO,OL4
+     SUBR  F4$DUS,LL9
+     REL
+*
+*******************************************************************
+* F4$INT -- INIT COMPILER DATA POOL AND STORE IO DEVICE SELECTION *
+*******************************************************************
+*
+F4IN DAC   *-* 
+     JST   SDEV              SET THE SELECTED DEVICES 
+     JST   PUTR              PUNCH LEADER IN CASE PTP IS OBJECT DEVICE
+     CALL  F4$INI            SET THE SIZE OF THE DATA POOL
+     CRA 
+     STA   SCNT              SOURCE INPUT RECORD COUNTER/LINENUMBER = 0
+     IRS   INFL              SET 1ST-TIME-CALL FLAG FOR LISTING DRIVER
+     JMP*  F4IN
+*
+**************************************
+* GENERAL SOURCE INPUT ROUTINE       *
+* CALLING SEQUENCE:                  *
+*    CALL  F4$IN                     *
+*    DAC  SOURCEBUFFER               *
+**************************************
+*
+F4SI DAC   *-*               SOURCE INPUT DRIVER
+     LDA*  F4SI              GET SOURCE BUFFER ADDRESS
+     STA   IB1               AND STORE
+     STA   IB2       
+     STA   IB3       
+     STA   IB4       
+     STA   IB5       
+     STA   IB6       
+IL6  LDA   DSRC              LOAD SELECTED SOURCE DEVICE
+     JST   SWCH              JMP SWITCH 
+     JMP   IL1               0 NON
+     JMP   IL2               1 TTY
+     JMP   IL3               2 CR
+     JMP   IL4               3 HSR
+     JMP   IL5               4 MAG TAPE
+     JMP   IL1               5 NON
+     JMP   IL1               6 NON
+* DUMMY SOURCE INPUT DEVICE DRIVER: SELECT PROPER DEVICE
+IL1  LDA   MO5               7 NON   =-5 MESSAGE LENGTH, 5 WORDS LONG
+     JST   PRBF         
+     DAC   MDEV              MESSAGE: DEVICE? (NO DRIVER FOR REQUESTED DEVICE)
+     JST   STOP              SET DEFAULT OR NEW DEVICE SELECTION 
+     JMP   IL6           
+*
+IL2  CALL  I$AA              TTY = SOURCE INPUT DEVICE
+IB1  DAC   *-*               SOURCE BUFFER ADDRESS
+     JMP   IL2               EOM/EOF RETURN
+     JMP   IL7               NORMAL RETURN
+IL3  CALL  I$CA              CR = SOURCE INPUT DEVICE
+IB2  DAC   *-*               SOURCE BUFFER ADDRESS
+     JMP   IL3               EOM/EOF RETURN
+     JMP   IL7               NORMAL RETURN
+IL4  CALL  I$PA              HSR = SOURCE INPUT DEVICE
+IB3  DAC   *-*               SOURCE BUFFER ADDRESS
+     JMP   IL4           
+     JMP   IL7           
+IL5  CALL  I$MA              MT = SOURCE INPUT DEVICE
+IB4  DAC   *-*               SOURCE BUFFER ADDRESS
+     OCT   50                BUFFER LENGTH (WORDS)
+     OCT   1                 TAPE UNIT 1 = SOURCE DECK
+     JMP   ERR0              RECORD NOT READABLE RETURN
+     JMP   ERR1              END OF TAPE RETURN
+     JMP   IL5               END OF FILE RETURN; READ NEXT FILE
+     CALL  C$6TO8            NORMAL RETURN; CONVERT RECORD TO ASCII
+IB5  DAC   *-*               SOURCE BUFFER ADDRESS
+     OCT   50                BUFFER LENGTH
+IL7  LDA   SCNT              SOURCE RECORD COUNTER
+     ADD   N1                =1 
+     SSP 
+     STA   SCNT              SOURCE RECORD COUNTER
+     IRS   F4SI              SET RETURN ADDRESS
+     JMP*  F4SI        
+*
+**************************************
+* GENERAL OBJECT OUTPUT ROUTINE      *
+* CALLING SEQUENCE:                  *
+*    A = OBJECT BUFFER ADDRESS       *
+*    X = - BUFFER LENGTH (WORDS)     *
+*    CALL  F4$OUT                    *
+**************************************
+*
+F4OO DAC   *-*               OBJECT OUTPUT DRIVER
+     STA   OSRC              EXTERNAL OBJECT BUFFER ADDRESS
+     LDA   0                 - BUFFER LENGTH (WORDS)
+     TCA 
+     STA   OBFL              + BUFFER LENGTH (WORDS)
+     STA   MTBL         
+     ADD   OPTR              POINTER TO OUTPUT BUFFER
+     ADD   IFLG              INDEX FLAG
+     STA   ODES              INDEXED DESTINATION
+OL1  LDA*  OSRC              MOVE OBJECT TO INTERNAL OUTPUT BUFFER
+     STA*  ODES        
+     IRS   0 
+     JMP   OL1         
+OL6  LDA   DOBJ        
+     JST   SWCH              JMP SWITCH 
+     JMP*  F4OO              0 SUPPRESS OBJECT OUTPUT
+     JMP   OL2               1 PTP
+     JMP   OL3               2 TTY
+     JMP   OL4               3 NON
+     JMP   OL5               4 MAG TAPE
+     JMP   OL4               5 NON
+     JMP   OL4               6 NON
+* DUMMY OBJECT OUTPUT DEVICE DRIVER: SELECT PROPER DEVICE
+OL4  LDA   MO5               7 NON      =-5
+     JST   PRBF        
+     DAC   MDEV              MESSAGE: DEVICE?
+     JST   STOP              SET DEFAULT OR NEW DEVICE SELECTION
+     JST   PUTR              PUNCH TRAILER IN CASE PTP IS SELECTED
+     JMP   OL6         
+*
+OL2  CALL  O$PB              PTP = OBJECT OUTPUT DEVICE
+     DAC   OBUF              OUTPUT BUFFER ADDRESS 
+     JMP*  F4OO              EXIT
+OL3  CALL  O$AB              TTY = OBJECT OUTPUT DEVICE
+     DAC   OBUF              OUTPUT BUFFER ADDRESS 
+     JMP*  F4OO              EXIT
+OL5  CALL  O$MB              MAG TAPE = OBJECT OUTPUT DEVICE
+     DAC   OBUF+1            BUFFER ADDRESS 
+MTBL OCT   0                 BUFFER LENGTH (WORDS)
+     OCT   2                 TAPE UNIT 2 = OBJECT DECK
+     JMP   ERR1              END OF TAPE RETURN
+     JMP*  F4OO              EXIT
+*
+**************************************
+* GENERAL LISTING OUTPUT ROUTINE     *
+* CALLING SEQUENCE:                  *
+*    CALL F4$SYM                     *
+*    DAC  LINEBUFFER                 *
+**************************************
+*
+F4LO DAC   *-*               LISTING OUTPUT DRIVER
+     LDA   SPSP              <SPACE><SPACE> 
+     STA   OBUF              SET LINENUMBER FIELD
+     STA   OBUF+1            (6 CHARS) TO SPACES
+     STA   OBUF+2         
+     LDA*  F4LO              EXTERNAL BUFFER ADDRESS
+     ADD   ILPB              +INDEX / LENGTH      
+     STA   OSRC              INDEXED EXTERNAL BUFFER ADDRESS 
+     LDA   MO50              ='-50 
+     STA   0                 X = INDEX INTO THE LINE BUFFER
+LL1  LDA*  OSRC              MOVE LINE TO INTERNAL DRIVER BUFFER
+     STA   LBUF,1            
+     IRS   0 
+     JMP   LL1               
+LL10 LDA   INFL              NON-ZERO WITH 1ST CALL
+     SNZ 
+     JMP   LL2               EQUAL 0
+* 1ST CALL OF LISTING DRIVER
+     LDA*  F4LO              EXTERNAL BUFFER ADDRESS
+     ERA   IB6               EQUAL TO SOURCE BUFFER ADDRESS??
+     SZE 
+     JMP   LEX               NOT EQUAL; EXIT
+     LDA   DLST              YES; GET REQUIRED LISTING DEVICE     
+     ERA   N2                EQUAL 2 ? (LP)
+     SZE 
+     JMP   LL2               NOT LP
+     CALL  O$LH              YES, LP. INIT THE HEADER
+     DAC   OBUF       
+LL2  LDA*  F4LO              EXTERNAL BUFFER ADDRESS
+     ERA   IB6               EQUAL TO SOURCE BUFFER ADDRESS??
+     SZE 
+     JMP   LL3               NO
+     LDA   TPTR              YES, EQUAL TO SOURCE BUFFER
+     STA   TEMP              TEMP = PTR TO DEC CONV TAB
+     LDA   SCNT              GET SOURCE LINE NUMBER
+     STA   NUMB              LINENUMBER TO PRINT
+* WITH ZERO BEING TRUE, LEADING ZERO'S OF THE LINENUMBER ARE SUPPRESSED
+     IRS   ZERO              LEADING ZERO FLAG IS TRUE (SET TO FALSE WITH 1ST NONZERO) 
+     JST   CDIG              DIGIT 1
+     JST   CDIG              DIGIT 2
+     JST   CDIG              DIGIT 3
+     JST   CDIG              DIGIT 4
+     JST   CDIG              DIGIT 5
+LL3  LDA   DLST              WHICH DRIVER TO OUTPUT LISTING?
+     JST   SWCH              JMP SWITCH 
+     JMP   LL4               0 SUPPRESS LISTING
+     JMP   LL5               1 TTY
+     JMP   LL6               2 LP
+     JMP   LL9               3 NON
+     JMP   LL8               4 MAG TAPE
+     JMP   LL9               5 NON
+     JMP   LL9               6 NON
+* DUMMY LISTING OUTPUT DEVICE DRIVER: SELECT PROPER DEVICE
+LL9  LDA   MO5               7 NON      =-5
+     JST   PRBF        
+     DAC   MDEV              MESSAGE: DEVICE?
+     JST   STOP              SET DEFAULT OR NEW DEVICE SELECTION 
+     JMP   LL10        
+*
+LL5  LDA   O43               TTY = LISTING OUTPUT DEVICE (35 WORDS)
+LL13 STA   0                 REMOVE TRAILING BLANKS
+     LDA   OBUF,1      
+     ERA   SPSP        
+     SZE 
+     JMP   LL11        
+     LDA   0 
+     SNZ 
+     JMP   LL12        
+     SUB   N1          
+     JMP   LL13        
+LL11 IRS   0 
+     LDA   0 
+     TCA                     A = - LENGTH (IN WORDS) OF THE LINE TO PRINT
+LL12 JST   PRBF              PRINT THE LINE
+     DAC   OBUF        
+     JMP   LL4         
+LL6  CALL  O$LA              LP = LISTING OUTPUT DEVICE
+     DAC   OBUF              OUTPUT BUFFER (60 WORDS)
+     JMP   LL4         
+LL8  CALL  C$8TO6            MAG TAPE = LISTING OUTPUT DEVICE (UNIT 2)
+     DAC   OBUF              OUTPUT BUFFER
+     OCT   50                BUFFER LENGTH (WORDS)
+     CALL  O$MA        
+     DAC   OBUF              OUTPUT BUFFER
+     OCT   50                BUFFER LENGTH (WORDS)
+     OCT   2                 TAPE UNIT 2 = OBJECT DECK
+     JMP   ERR1              EOT RETURN
+LL4  CRA                     NORMAL RETURN
+     STA   INFL              RESET 1ST-TIME-CALL FLAG OF THE LISTING DRIVER
+LEX  IRS   F4LO              SET RETURN ADDRESS
+     JMP*  F4LO         
+*
+* CONVERT 1 DIGIT FOR PRINTING A 5 DIGIT LINENUMBER 
+* USED BY THE OUTPUT LISTING DRIVER
+CDIG DAC   *-*      
+     CRA 
+     STA   0                 X=0 (COUNT=0)
+     LDA   NUMB              NUMBER (OR RESIDUAL OF NUMBER) BEING CONVERTED 
+CV1  SUB*  TEMP              TEMP = POINTER INTO CONVERSION TABLE
+     SPL 
+     JMP   CV2               NEGATIVE
+     STA   NUMB              STILL POSITIVE
+     IRS   0                 COUNT + 1
+     JMP   CV1        
+CV2  IRS   TEMP              TEMP = POINTER TO NEXT ITEM IN CONVERSION TABLE
+     LDA   TPTR              POINTER TO TABLE 
+     SUB   TEMP              MINUS THE CURRENT POINTER TO THE TABLE
+     STA   T1         
+     ADD   N1                +1 
+     TCA 
+     LGR   1                 = INDEX IN BUFFER
+     IMA   0                 A = COUNT
+     SNZ 
+     JMP   CV3               COUNT = 0 => DIGIT WOULD BE 0
+CV4  ADD   O20               ='20 (TO MAKE ASCII DIGIT OF SPACE)
+CV5  ALR   '10 
+     IRS   T1         
+     JMP   CV5        
+     ADD   OBUF,1     
+     STA   OBUF,1     
+     CRA 
+     STA   ZERO              RESET THE LEADING ZERO FLAG
+     JMP*  CDIG       
+CV3  LDA   ZERO              NONZERO IF STILL LEADING ZERO'S
+     SZE 
+     JMP*  CDIG              NONZERO, SO STILL A LEADING ZERO
+     JMP   CV4               ZERO, SO NOT A LEADING ZERO, SO OUTPUT
+*
+**************************************
+* STOP COMPILATION: F4$END           *
+**************************************
+*
+F4EN DAC   *-*          
+     LDA   DOBJ              OBJECT DEVICE?
+     JST   PUTR              PUNCH TRAILER IN CASE OF PTP
+     LDA   DOBJ        
+     ERA   N1                PTP?
+     SNZ 
+     OCP   '102              YES; PTP OFF          
+     ERA   N5                OBJECT DEVICE MAGTAPE?
+     SNZ 
+     JMP   LE1               YES
+     LDA   DLST              LISTING DEVICE MAGTAPE?
+     ERA   N4          
+     SZE 
+     JMP   LE2               NO
+LE1  CALL  O$ME              WRITE EOF ON UNIT 2 (OBJECT OR LISTING DEVICE)
+     OCT   2                 UNIT 2
+LE2  LDA   MO6               ='-6
+     JST   PRBF              PRINT EOJ MESSGE
+     DAC   MEOJ         
+     JST   STOP              STOP
+     LDA   DEFT         
+     JMP*  F4EN              AND RESTART
+MEOJ OCT   106612            END OF JOB MESSAGE
+     BCI   1,EN        
+     BCI   1,D         
+     BCI   1,OF        
+     BCI   1, J        
+     BCI   1,OB        
+*
+**************************************
+* STOP AND (RE)LOAD DEVICE SELECTION *
+**************************************
+*    CALLED BY SOURCE, OBJECT AND LISTING (DUMMY) DRIVERS OF F4-IOS
+*    CALLED BY F4$END (WHICH IS ALSO PART OF F4-IOS)
+*
+STOP DAC   *-* 
+     LDA   DEFT              LOAD DEFAULT DEVICE SETTINGS 
+     HLT                     STOP AND POSSIBLY ADAPT THE SETTING
+     JST   SDEV              SET THE NEW DEVICE SELECTION 
+     JMP*  STOP     
+*
+**************************************************************
+* SAVE DEVICE SELECTION AS DEFINED DURING COMPILER (RE)START *
+**************************************************************
+*    DEVICE SELECTION AS SPECIFIED IN REG-A (SOURCE, LIST, OBJECT), OR DEFAULT
+*
+SDEV DAC   *-*               SET SELECTED DEVICES 
+     SZE 
+     STA   DEFT              STORE REQUESTED DEVICES
+     LDA   DEFT              LOAD DEFAULT IF NOTHING SPECIFIED, 
+     LRL   6 
+     ANA   M7         
+     STA   DSRC              SOURCE DEVICE 
+     CRA 
+     LLL   3 
+     STA   DLST              LISTING DEVICE 
+     CRA 
+     LLL   3 
+     STA   DOBJ              OBJECT DEVICE 
+     JMP*  SDEV 
+*
+******************************************************************
+* PUNCH LEADER/TRAILER IN CASE PTP IS THE SELECTED OBJECT DEVICE *
+******************************************************************
+*    A[14-16] = SELECTED OBJECT DEVICE
+*
+PUTR DAC   *-*
+     ERA   N1                =1 PUNCHER SELECTED?
+     SNZ 
+     CALL  O$PLDR            YES; PUNCH LEADER/TRAILER
+     JMP*  PUTR       
+*
+**************************************
+* PRINT MESSAGE FROM BUFFER ON TTY   *
+**************************************
+*    CALLING SEQUENCE:
+*    JST  PRBF     A = - MESSAGE LENGTH IN WORDS
+*    DAC  MESSAGE
+*
+PRBF DAC   *-*               PRINT BUFFER
+     STA   0                 X = A = - BUFFER LENGTH
+     LDA*  PRBF              BUFFER ADDRESS
+     IRS   PRBF              SET RETURN ADDRESS
+     STA   BA                STORE BUFFER ADDRESS
+     SKS   '104              TTY READY?
+     JMP   *-1       
+     OCP   '104              SET OUTPUT MODE
+     LDA   CRLF     
+     JST   PRA               PRINT 2 CHARS IN A 
+     LDA   0 
+     SNZ 
+     JMP*  PRBF    
+P1   LDA*  BA                GET 2 CHARS
+     JST   PRA               PRINT 2 CHARS IN A 
+     IRS   BA      
+     IRS   0 
+     JMP   P1      
+     JMP*  PRBF    
+*
+**************************************
+* PRINT 2 CHARS FROM REG-A ON TTY    *
+**************************************
+*
+PRA  DAC   *-* 
+     LRL   '10 
+     OTA   4 
+     JMP   *-1 
+     LLL   '10 
+     OTA   4 
+     JMP   *-1 
+     JMP*  PRA 
+*
+**************************************
+* SWITCH VIA JUMP-TABLE              *
+**************************************
+*    CALLING SEQUENCE:
+*    LDA   INDEX INTO JUMP-TABLE
+*    JST   SWCH
+*    JMP   --     JUMP-TABLE ENTRY 0 (INDEX 0)
+*    JMP   --     JUMP-TABLE ENTRY 1 (INDEX 1)
+*    ETC
+*
+SWCH DAC   *-*               SWITCH
+     ADD   SWCH   
+     STA   SWCH   
+     JMP*  SWCH   
+*
+**************************************
+* ERROR HANDLING ROUTINES            *
+**************************************
+*
+STRT EQU   '1000             COMPILER START ADDRESS
+ERR0 LDA   MO2               =-2
+     JST   PRBF      
+     DAC   MUR               MESSAGE: UR (RECORD UNREADABLE) 
+     JMP   ERR2      
+ERR1 LDA   MO3               =-3 
+     JST   PRBF       
+     DAC   MEOT              MESSAGE: EOT (END OF TAPE)
+ERR2 JST   STOP       
+     LDA   DEFT              LOAD DEVICE SETTINGS (REG-A) 
+     JMP   STRT              RESTART COMPILATION
+*
+**************************************
+* F4-IOS DATA AREA                   *
+**************************************
+*
+DEFT OCT   311    DEFAULT SELECTION OF IO DEVICES (I 3=HSR; L 1=TTY; O 1=PTP) 
+* DECIMAL CONVERION TABLE (USER FOR PRINTING NUMBERS)
+DTAB OCT   23420             =10000
+     OCT   1750              =1000
+     OCT   144               =100
+     OCT   12                =10
+     OCT   1                 =1
+DSRC OCT   0                 SOURCE INPUT DEVICE AS SPECIFIED DURING START
+DLST OCT   0                 LISTING DEVICE AS SPECIFIED DURING START
+DOBJ OCT   0                 OBJECT OUTPUT DEVICE AS SPECIFIED DURING START
+IB6  OCT   0                 SOURCE BUFFER ADDRESS
+SCNT OCT   0                 SOURCE RECORD COUNTER
+INFL OCT   0                 FLAG LISTING DRIVER (NONZERO WITH 1ST-TIME-CALL)
+OSRC OCT   0                 POINTER TO EXTERNAL OBJECT BUFFER 
+BA   EQU   *                 BUFFER ADDRESS
+TEMP EQU   *                 TEMP POINTER TO DECIMAL CONVERSION TABLE
+ODES OCT   0                 INDEXED POINTER TO INTERNAL OBJECT BUFFER
+NUMB OCT   0                 TEMP STORAGE FOR LINENUMBER TO CONVERT/PRINT
+ZERO OCT   0                 SET TO 0 WITH 1ST NONZERO DIGIT IN LINENUMBER
+T1   OCT   0 
+OPTR DAC   OBUF              POINTER TO OUTPUT BUFFER
+TPTR DAC   DTAB              POINTER TO DECIMAL CONVERSION TABLE
+*
+OBFL EQU   *                 OUTPUT BUFFER LENGTH FOR BINARY OUTPUT (WORDS)
+OBUF OCT   4                 OUTPUT BUFFER (60 WORDS; MUST NOT EXCEED 60 WORDS)
+     OCT   300 
+     OCT   0 
+     OCT   2 
+     OCT   302 
+     BCI   3,                            
+     BCI   3,EOB          
+     BCI   3,000300       
+     BCI   1,             
+     BCI   3,000000       
+     BCI   1,             
+     BCI   3,000002       
+     BCI   3,             
+     BCI   3,             
+     BCI   3,             
+     BCI   3,             
+     BCI   3,             
+     BCI   3,             
+     BCI   3,             
+LBUF BCI   3,                END OF LISTING BUFFER
+     BCI   3,             
+     BCI   3,             
+     BCI   3,             
+     BCI   3,             
+     BCI   2,             
+*
+CRLF EQU   *
+* MESSAGE: DRIVER? (NO DEVICE DRIVER FOR REQUESTED DEVICE) 5 WORDS LONG
+MDEV OCT   106612            MESSAGE: DEVICE? 
+     BCI   1,DE            
+     BCI   1,VI            
+     BCI   1,CE            
+     BCI   1,?             
+*
+MEOT OCT   106612            MESSAGE: EOT (END OF TAPE)
+     BCI   1,EO         
+     BCI   1,T          
+MUR  OCT   106612            MESSAGE: UR (UNREADABLE RECORD)
+     BCI   1,UR         
+MO3  OCT   177775 
+MO2  OCT   177776 
+M7   OCT   7      
+MO6  OCT   177772 
+N4   OCT   4 
+N5   OCT   5 
+O20  OCT   20
+O43  OCT   43
+N2   OCT   2 
+MO50 OCT   177730            ='-50
+ILPB OCT   40050             INDEX LISTING BUFFER
+SPSP OCT   120240            <SPACE><SPACE>
+IFLG OCT   40001             INDEX FLAG
+MO5  OCT   177773     
+N1   OCT   1 
+     END