  ABS JSB+LD+MGRDY       NO WAIT FOR READY
  ABS LDB+LD+MGRW        GET REWIND COMMAND 
  ABS JSB+LD+MGOC        DO IT
  ABS JSB+LD+MGRDY       WAIT FOR READY 
  ABS LDB+LD+MGFSF       GET FILE FORWARD COMMAND 
  ABS LDA+LD+MGBF+1      GET REQUEST
      RAR,SLA            DO FILE FORWARD? 
  ABS JSB+LD+MGOC        YES
  ABS JMP+LD+MGLR+100000B RETURN
MGLR0 EQU *-MG
  ABS JSB+LD+MGRDY       WAIT FOR READY 
  ABS LDA+LD+MGWC        GET DMA WORD COUNT 
      STC DMA2
      OTA DMA2
  ABS LDA+LD+MGAD        GET ADDRESS FOR DMA
  ABS ADA+LDMXA-PAGE
  ABS STA+LD+MGDA        SAVE IT FOR LATER
  ABS IOR+%BT15-PAGE     ADD INPUT BIT FOR DMA
      CLC DMA2
      OTA DMA2
  ABS LDA+LD+MGDC1       GET DMA CONTROL WORD 
      OTA DMA6
  ABS LDB+LD+MGRC        GET READ COMMAND 
  ABS JSB+LD+MGOC        DO IT
  ABS JSB+LD+MGRDY       CHECK IF READ WAS OK 
  ABS LDA+LD+MGBF+1 
      CMA,SLA,INA        REVERSE SENSE
      CLA 
      BLF,BLF            MOVE TO EOF BIT OF STATUS
      SSB                CHECK FOR EOT
  ABS JMP+LD+MGLR+100000B YES RETURN WITH END OF FILES
MGW   EQU *-MG
  ABS LDA+LD+MGDA+100000B GET A WORD FROM BUFFER
  ABS ISZ+LD+MGDA        MOVE POINTER TO NEXT WORD
  ABS JMP+LD+MGLR+100000B RETURN
      SKP 
MGOC  EQU *-MG
      NOP 
      OTB SC+1           OUTPUT COMMAND 
      LIA SC+1
      RAR,RAR 
      RAR,SLA            REJECTED?
  ABS JMP+LD+*-MG-4      YES TRY AGAIN
      STC SC+1,C         DO COMMAND 
  ABS CPB+LD+MGRC        WAS IT A READ
      RSS 
  ABS JMP+LD+*-MG+3      NO 
      STC SC,C           START DATA CHANNEL 
      STC DMA6,C         START DMA
      SFS SC+1           WAIT FOR COMPLETION
  ABS JMP+LD+*-MG-1 
      STF DMA6
      CLC DMA6,C         TURN OFF DMA 
MGDC1 EQU *-MG
      CLC SC,C           AND INTERFACE
      CLC SC+1,C
  ABS JMP+LD+MGOC+100000B 
* 
MGRDY EQU *-MG
      NOP 
  ABS LDA+LD+MGSU        GET UNIT SELECT
      OTA SC+1
      LIA SC+1
      LDB A              SAVE STATUS
  ABS AND+LD+MGSM        MASK STATUS
      SZA,RSS            WAS IT REJECTED
  ABS JMP+LD+MGRDY+100000B NO RETURN
  ABS AND+LD+MGRC 
      SZA                ANY ERRORS?
      OCT 106074         YES TELL OPERATOR
  ABS JMP+LD+MGRDY+1     TRY AGAIN
* 
MGRW  EQU *-MG
      OCT 101 
MGWC  EQU *-MG
      DEC -60 
MGAD  EQU *-MG
      ABS LDVR-LDMXA+MGBF 
MGDA  EQU *-MG
      NOP 
MGFSF EQU *-MG
      OCT 203 
MGRC  EQU *-MG
      OCT 23
MGSU  EQU *-MG
      OCT 1400
MGSM  EQU *-MG
      OCT 3451
MGBF EQU *-MG 
      SKP 
*         DISC LOADER DRIVER
* 
DS    EQU * 
* 
* 
DSSR  EQU *-DS
      NOP 
      SZB                READ A WORD? 
  ABS JMP+LD+*-DS+3      NO 
  ABS JSB+LD+DSW         YES
  ABS JMP+LD+DSSR+100000B RETURN
  ABS STB+LD+DSBR         SAVE B-REG
      SSB,RSS            READ AND SEARCH? 
  ABS JMP+LD+DSR         YES
      CLA 
      SLB,RSS            REWIND?
  ABS JMP+LD+*-DS+6 
  ABS STA+LD+DSW         FORCE FF IF USED 
  ABS STA+LD+DSNCY       CYLINDER 
  ABS STA+LD+DSCY 
  ABS STA+LD+DSNHS       HEAD & SECTOR
  ABS STA+LD+DSHS 
      RBR,SLB            ANY FILE FORWARDS
      RSS 
  ABS JMP+LD+DSSR+100000B NO MORE RETURN
  ABS LDB+LD+DSW         CHECK IF IN READ 
  ABS STA+LD+DSW         CLEAR FOR NEXT ONE 
      SZB                DO A FF? 
  ABS JMP+LD+DSSR+100000B NO RETURN 
  ABS JMP+LD+DSR+2       YES
* 
DSR   EQU *-DS
      SLB,RSS            FIRST READ?
  ABS JMP+LD+DSSR+3      NO 
  ABS LDA+LD+DSNCY       SET NEXT 
  ABS STA+LD+DSCY         CYLINDER
  ABS LDA+LD+DSNHS           AND
  ABS STA+LD+DSHS              HEAD AND SECTOR
  ABS JSB+LD+DSRD        READ IT
  ABS JSB+LD+DSW         GET CYLINDER 
  ABS CPA+%M1-PAGE       END OF FILES?
  ABS JMP+LD+DSSR+100000B YES 
  ABS STA+LD+DSNCY       NO SAVE IT 
  ABS JSB+LD+DSW         GET NEST HEAD AND SECTOR 
  ABS STA+LD+DSNHS
      CLA 
  ABS STA+LD+DSW
  ABS LDB+LD+DSBR        CHECK IF JUST FF 
      SSB 
  ABS JMP+LD+DSSR+100000B YES RETURN
  ABS JSB+LD+DSW         CHECK ADDRESS
  ABS ADA+LD+DSDMC
  ABS ADA+LDMXA-PAGE
      SSA                OK?
      OCT 0              NO TELL OPERATOR (IGNORE FOR INIT) 
  ABS JMP+LD+DSSR+3      GET COUNT AND CONTINUE 
      SKP 
DSRD  EQU *-DS
      NOP 
  ABS LDA+LD+DSCY 
      OTA SC             CYLINDER 
      STC SC,C
  ABS LDA+LD+DSSK        SEEK COMMAND 
      OTA SC+1
      STC SC+1,C
      SFS SC
  ABS JMP+LD+*-DS-1      WAIT FOR ACCEPTANCE
  ABS LDA+LD+DSHS 
      OTA SC             HEAD AND SECTOR
      STC SC,C
      SFS SC+1
  ABS JMP+LD+*-DS-1 
  ABS JSB+LD+DSST        CHECK FOR ACCEPTANCE 
  ABS LDA+LD+*-DS-5      SET UP DMA 
  ABS IOR+LD+DSRC        CLC AT END OF TRANSFER 
      OTA DMA6
      CLC DMA2
  ABS LDA+LD+DSDMC       GET BUFFER ADDRESS 
  ABS ADA+LDMXA-PAGE     ADD -PAGE
  ABS STA+LD+DSDA 
  ABS IOR+%BT15-PAGE
      OTA DMA2
      STC DMA2
  ABS LDA+LD+DSDMC       DMA COUNT
      OTA DMA2
  ABS LDA+LD+DSRC        READ COMMAND 
      OTA SC+1
      STC SC,C
      STC DMA6,C
      STC SC+1,C
      SFS SC+1
  ABS JMP+LD+*-DS-1 
  ABS JSB+LD+DSST        DID IT READ OK 
  ABS LDB+LD+DSCY        ANY CYLINDER?
  ABS LDA+LDMXA-PAGE-2   GET BOOT POINTER 
      SZB                TO FILES 
  ABS JMP+LD+*-DS+4      YES
  ABS STA+LD+DSNCY       NO SET FIRST CYLINDER
  ABS STA+LD+DSCY 
  ABS JMP+LD+DSRD+1      NOW TRY AGAIN
  ABS LDA+LD+DSHS        UPDATE HEAD AND SECTOR 
      INA 
  ABS CPA+LD+DSHS0
  ABS LDA+LD+DSHS.
  ABS CPA+LD+DSHS1
      CLA 
  ABS STA+LD+DSHS 
      SZA,RSS           UPDATE CYLINDER?
  ABS ISZ+LD+DSCY       YES 
  ABS JMP+LD+DSRD+100000B 
      SKP 
DSW   EQU *-DS
      NOP 
  ABS LDA+LD+DSDA       READ NEW SECTOR?
  ABS CPA+LDMXA-PAGE    ? 
  ABS JSB+LD+DSRD       YES 
  ABS LDA+LD+DSDA+100000B NOW GET WORD
  ABS ISZ+LD+DSDA       MOVE POINTER TO NEXT ONE
  ABS JMP+LD+DSW+100000B
* 
DSST  EQU *-DS
      NOP 
      STF DMA6           TURN OFF DMA 
  ABS LDA+%B7-PAGE       SET TO CLEAR ALL STATUS
  ABS ADA+%M1-PAGE
      CLC SC
      CLC SC+1
      OTA SC+1
      STC SC+1,C
      SFS SC
  ABS JMP+LD+*-DS-1 
      SZA                ALL STATUS CLEARED 
  ABS JMP+LD+DSST+3      NO CLEAR NEXT ONE
      LIA SC             GET STATUS 
      CLC DMA6,C         TURN OFF DMA INTERRUPT 
      CLC SC,C           AND INTERFACE
      CLC SC+1,C
      SLA,RSS 
  ABS JMP+LD+DSST+100000B 
      OCT 106074
  ABS JMP+LD+DSRD+1      TRY AGAIN
* 
DSHS0 EQU *-DS
      OCT 30
DSHS1 EQU *-DS
      OCT 430 
DSHS. EQU *-DS
      OCT 400 
DSBR  EQU *-DS
      NOP 
DSNCY EQU *-DS
      NOP 
DSNHS EQU *-DS
      NOP 
DSCY  EQU *-DS
      NOP 
DSHS  EQU *-DS
      NOP 
DSDA  EQU *-DS
      NOP 
DSSK  EQU *-DS
      OCT 30000 
DSRC  EQU *-DS
      OCT 20000 
DSDMC EQU *-DS
      DEC -128
      SKP 
*         DISC LOADER DRIVER
* 
* 
DF    EQU * 
* 
DFSR  EQU *-DF
      NOP 
      SZB                READ A WORD? 
  ABS JMP+LD+*-DF+3      NO 
  ABS JSB+LD+DFW         YES
  ABS JMP+LD+DFSR+100000B RETURN
  ABS STB+LD+DFBR        SAVE B-REG 
      SSB,RSS            READ AND SEARCH? 
  ABS JMP+LD+DFR         YES
      CLA 
      SLB,RSS            REWIND?
  ABS JMP+LD+*-DF+6 
  ABS STA+LD+DSW         FORCE FF IF USED 
  ABS STA+LD+DFNCY       CYLINDER 
  ABS STA+LD+DFCY 
  ABS STA+LD+DFNHS       HEAD & SECTOR
  ABS STA+LD+DFHS 
      RBR,SLB            FILE FORWARD 
      RSS 
  ABS JMP+LD+DFSR+100000B NO MORE RETURN
  ABS LDB+LD+DFW         CHECK IF IN READ MODE
  ABS STA+LD+DFW         CLEAR FOR NEXT TIME
      SZB                DO FF? 
  ABS JMP+LD+DFSR+100000B NO RETURN 
  ABS JMP+LD+DFR+2       YES
* 
DFR   EQU *-DF
      SLB,RSS            FIRST READ?
  ABS JMP+LD+DFSR+3      NO 
  ABS LDA+LD+DFNCY       SET NEXT 
  ABS STA+LD+DFCY         CYLINDER
  ABS LDA+LD+DFNHS           AND
  ABS STA+LD+DFHS              HEAD AND SECTOR
  ABS JSB+LD+DFRD        READ IT
  ABS JSB+LD+DFW         GET CYLINDER 
  ABS CPA+%M1-PAGE       END OF FILES?
  ABS JMP+LD+DFSR+100000B YES 
  ABS STA+LD+DFNCY       NO SAVE IT 
  ABS JSB+LD+DFW         GET NEST HEAD AND SECTOR 
  ABS STA+LD+DFNHS
      CLA 
  ABS STA+LD+DFW
  ABS LDB+LD+DFBR        CHECK IF FF ONLY 
      SSB 
  ABS JMP+LD+DFSR+100000B  YES RETURN 
  ABS JSB+LD+DFW         CHECK ADDRESS
  ABS ADA+LD+DFDMC
  ABS ADA+LDMXA-PAGE
      SSA                OK?
      OCT 0              NO TELL OPERATOR (IGNORE FOR INIT) 
  ABS JMP+LD+DFSR+3      GET COUNT AND CONTINUE 
      SKP 
DFRD  EQU *-DF
      NOP 
  ABS JSB+LD+DFST        CHECK STATUS 
  ABS LDA+LD+DFSK        GET SEEK COMMAND 
      CLC SC             SET TO OUTPUT COMMAND
      OTA SC,C
      SFS SC
  ABS JMP+LD+*-DF-1      WAIT FOR ACCEPTANCE
  ABS LDA+LD+DFCY        GET CYLINDER 
      OTA SC,C
      SFS SC
  ABS JMP+LD+*-DF-1      WAIT FOR ACCEPTANCE
  ABS LDA+LD+DFHS 
      OTA SC,C           HEAD AND SECTOR
      STC SC
      SFS SC
  ABS JMP+LD+*-DF-1 
  ABS JSB+LD+DFST        CHECK FOR ACCEPTANCE 
  ABS LDA+LD+*-DF-5      SET UP DMA 
  ABS AND+%B177-PAGE     USE SC ONLY
      OTA DMA6
      CLC DMA2
  ABS LDA+LD+DFDMC       GET BUFFER ADDRESS 
  ABS ADA+LDMXA-PAGE     ADD -PAGE
  ABS STA+LD+DFDA 
  ABS IOR+%BT15-PAGE
      OTA DMA2
      STC DMA2
  ABS LDA+LD+DFDMC       DMA COUNT
      OTA DMA2
  ABS LDA+LD+DFRC        READ COMMAND 
      CLC SC             SET TO OUTPUT COMMAND
      OTA SC,C
      STC DMA6,C
      STC SC
      SFS SC
  ABS JMP+LD+*-DF-1 
  ABS JSB+LD+DFST        DID IT READ OK 
  ABS LDB+LD+DFCY        ANY CYLINDER?
  ABS LDA+LDMXA-PAGE-2   GET BOOT POINTER 
      SZB                TO FILES 
  ABS JMP+LD+*-DF+4      YES
  ABS STA+LD+DFNCY       NO SET FIRST CYLINDER
  ABS STA+LD+DFCY 
  ABS JMP+LD+DFRD+1      NOW TRY AGAIN
  ABS LDA+LD+DFHS        UPDATE HEAD AND SECTOR 
      INA 
  ABS CPA+%B60-PAGE 
      CLA 
  ABS STA+LD+DFHS 
      SZA,RSS           UPDATE CYLINDER?
  ABS ISZ+LD+DFCY       YES 
  ABS JMP+LD+DFRD+100000B 
      SKP 
DFW   EQU *-DF
      NOP 
  ABS LDA+LD+DFDA       READ NEW SECTOR?
  ABS CPA+LDMXA-PAGE    ? 
  ABS JSB+LD+DFRD       YES 
  ABS LDA+LD+DFDA+100000B NOW GET WORD
  ABS ISZ+LD+DFDA       MOVE POINTER TO NEXT ONE
  ABS JMP+LD+DFW+100000B
* 
DFST  EQU *-DF
      NOP 
      STF DMA6           TURN OFF DMA 
  ABS LDA+LD+DFSTR       SET TO GET STATUS
      CLC SC
      OTA SC,C
      STC SC
      SFS SC
  ABS JMP+LD+*-DF-1 
      LIA SC,C           GET STATUS 
      CLC DMA6,C         TURN OFF DMA INTERRUPT 
      ALF,ALF 
  ABS AND+LD+DFB37
      SZA 
  ABS CPA+LD+DFB37
  ABS JMP+LD+*-DF+3 
      OCT 106074
  ABS JMP+LD+DFRD+1      TRY AGAIN
  ABS LDA+LD+DFFM 
      CLC SC
      OTA SC,C
      SFS SC
  ABS JMP+LD+*-DF-1 
  ABS JMP+LD+DFST+100000B RETURN
      SKP 
DFB37 EQU *-DF
      OCT 37
DFBR  EQU *-DF
      NOP 
DFNCY EQU *-DF
      NOP 
DFNHS EQU *-DF
      NOP 
DFCY  EQU *-DF
      NOP 
DFHS  EQU *-DF
      NOP 
DFDA  EQU *-DF
      NOP 
DFSK  EQU *-DF
      OCT 1000
DFSTR EQU *-DF
      OCT 1400
DFRC  EQU *-DF
      OCT 2400
DFFM  EQU *-DF
      OCT 7700
DFDMC EQU *-DF
      DEC -128
      SKP 
*     CARTRIDGE TAPE UNIT (2644) DRIVER 
*     ASSUMES INTF. 12966/8 EXT BAUD RATE 
* 
CT    EQU * 
CTLR  EQU *-CT
      NOP 
      SZB                READ A WORD? 
  ABS JMP+*+3-CT+LD 
  ABS JSB+LD+CTINW       YES READ IT AND
  ABS JMP+LD+CTLR+100000B  RETURN 
  ABS STB+LD+CTX         SAVE B REG.
      SSB,RSS            READ RECORD? 
  ABS JMP+LD+CTLR0       YES
      SLB,RSS            REWIND?
  ABS JMP+LD+CTFF        NO SKIP TO FILE FORWARD CHECK
  ABS JSB+LD+CTCMD       YES REWIND TAPE
      OCT 33             "ESC"
      OCT 46             "&"
      OCT 160            "P'" 
      OCT 60             "0"
      OCT 103            "C"
      OCT 21             DC1
      OCT 040340         TERMINATOR 
  ABS JSB+LD+CTINW       WAIT FOR RESPONCE
  ABS CPA+LD+CT.S        OK?
      RSS 
  ABS JMP+LD+CTDRE        NO - REPORT ERROR 
CTFF  EQU *-CT
  ABS LDA+LD+CTX          FILE FORWARD? 
      RAR,SLA 
      RSS 
  ABS JMP+LD+CTLR+100000B NO - RETURN 
  ABS LDA+LD+CTWT         GET WAIT TIME 
      JSB WAIT,I          NOW GO WAIT 
  ABS JSB+LD+CTCMD        YES - DO A FILE FORWARD 
      OCT 33             "ESC"
      OCT 46             "&"
      OCT 160            "P'" 
      OCT 62             "2"
      OCT 103            "C"
      OCT 21             DC1
      OCT 040340         TERMINATOR 
  ABS JSB+LD+CTINW       WAIT FOR RESPONSE
  ABS CPA+LD+CT.S        OK?
  ABS JMP+LD+CTLR+100000B  YES RETURN 
CTDRE EQU *-CT
      OCT 106074              DEVICE ERROR
  ABS LDB+LD+CTX         RESTORE B REG
  ABS JMP+LD+CTLR+1      TRY AGAIN
      SKP 
CTLR0 EQU *-CT
  ABS JSB+LD+CTCMD       READ ONE RECORD
      OCT 33             "ESC"
      OCT 46             "&"
      OCT 160            "P'" 
      OCT 62             "2"
      OCT 122            "R"
      OCT 21             DC1
CTCW4 EQU *-CT
      OCT 040340         TERMINATOR 
  ABS JSB+LD+CTINW       NOW GET ONE WORD 
  ABS CPA+LD+CTRS         END OF FILE?
  ABS JMP+LD+CTLR1       YES - REPORT IT
  ABS JSB+LD+CTINW
  ABS JSB+LD+CTINB
  ABS JSB+LD+CTCMD       READ THE DATA
      OCT 21             DC1
      OCT 040340         TERMINATOR 
  ABS JSB+LD+CTINW       READ RECORD COUNT ON TAPE
  ABS AND+%B377-PAGE     CHECK SECOND BYTE IS 0 
      SZA 
      CCB                NOT SO END OF FILES
      LDA B              GET COUNT  
  ABS JMP+LD+CTLR+100000B  RETURN 
CTLR1 EQU *-CT
  ABS LDA+LD+CTX         SECOND EOF?
      CMA,SLA,INA 
      CLA                NO 
  ABS JMP+LD+CTLR+100000B OK RETURN 
      SKP 
CTCMD EQU *-CT
      NOP 
  ABS LDA+LD+CTCW0       MASTER RESET INTF. 
      OTA SC,C
  ABS LDA+LD+CTCW1       INTF CONTROL (OUTPUT)
      OTA SC,C
  ABS LDA+LD+CTCW2       CHAR FRAME CONTROL 
CTCM0 EQU *-CT
      OTA SC,C
  ABS LDA+LD+CTCMD+100000B GET A CHATACTER
  ABS ISZ+LD+CTCMD       MOVE TO NEXT WORD
      OTA SC,C           OUTPUT CHARACTER 
  ABS CPA+LD+CTCW4       END OF LIST? 
  ABS JMP+LD+CTCMD+100000B YES RETURN 
      STC SC,C           NO 
      SFS SC             WAIT FOR TRANSFER
  ABS JMP+*-1-CT+LD 
  ABS LDA+LD+CTCW3       RESET BUFFER EMPTY 
  ABS JMP+LD+CTCM0       DO NEXT WORD 
* 
CTINW EQU *-CT
      NOP 
  ABS JSB+LD+CTINB       READ A BYTE
      ALF,ALF            PUT IT IN UPPER HALF WORD
      STA B 
  ABS JSB+LD+CTINB       READ SECOND BYTE 
      IOR B              ADD FIRST
  ABS JMP+LD+CTINW+100000B  RETURN
* 
* 
CTINB EQU *-CT
      NOP 
      LIA SC             GET DATA 
      SSA,RSS            VALID DATA?
  ABS JMP+*-2-CT+LD 
  ABS AND+%B377-PAGE
  ABS JMP+LD+CTINB+100000B
* 
* 
CTX   EQU *-CT
      NOP 
CTWT  EQU *-CT
      DEC 1000    ONE SECOND
CTRS  EQU *-CT
      OCT 17015          36+15
CT.S  EQU *-CT
      OCT 51415 
CTCW0 EQU *-CT
      OCT 150077
CTCW1 EQU *-CT
      OCT 040700
CTCW2 EQU *-CT
      OCT 030003
CTCW3 EQU *-CT
      OCT 050077
      SKP 
      BSS 128 
LDMXA ABS * 
%B7   OCT 7 
%B60  OCT 60
%B177 OCT 177 
%B377 OCT 377 
%M1   OCT -1
%M10  OCT -10 
%BT15 OCT 100000
* 
*     LOADER DRIVER 
* 
*         B = +1 READ TO FIRST RECORD 
*                A = 0  NEXT FILE 
*                A = #  SERIAL NUMBER OF FILE 
*         B = +2 READ NEXT RECORD 
*         B =  0 READ A WORD OF THE RECORD
*         B = -1 REWIND AND FILE FORWARD
*         B = -2 REWIND ONLY
*         B = -3 FILE FORWARD ONLY
* 
LDVR  NOP 
* 
*        RETURN 
*        A = 0  END OF FILE 
*        A = -1 END OF TAPE (FILES) 
*        A = +# RECORD COUNT
* 
ISZ   EQU 36000B
LDA   EQU 62000B
LDB   EQU 66000B
ADA   EQU 42000B
ADB   EQU 46000B
STA   EQU 72000B
STB   EQU 76000B
AND   EQU 12000B
IOR   EQU 32000B
XOR   EQU 22000B
CPA   EQU 52000B
CPB   EQU 56000B
JSB   EQU 16000B
JMP   EQU 26000B
LD    EQU LDVR-PAGE 
FWAA  EQU * 
      END 
                                                                                                                                                                                                              