File: CAMP.PA of Tape: OS8/OS8-V3/dec-s8-osysb-a-ua8
(Source file text) 

/3 OS8 CAMP

/
/S.R.
/
/
/CASSETTE & MAGTAPE POSITIONER		(CAMP)
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE VITHOUT NOTICE
/AND SHOULD NOT BE CONTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/	COPYRIGHT (C) 1973, BY DIGITAL EQUIPMENT CORPORATION.
/
/
/
/

/	MUST SKIP LOCS 1000-1377

	LINBUF=1000

	XR1=11
	XR2=12
	XR3=13

	*20

TEMP,	0
T,	0
T2,	0
LINPTR,	0
T3,	0
FLAG,	0
SPKNT,	0
DEVTYP,	0		/DEVICE TYPE (BITS 6-11)
ENTRY,	0		/HANDLER ENTRY POINT
NUM,	0
TYP,	0		/0 MEANS 'F', 1 MEANS 'R'
T4,	0
DEVNUM,	0
DCW,	0		/DEVICE CONTROL WORD
DCWPTR,	0
USR,	200		/POINTS TO USR ENTRY POINT
ESCBIT,	0		/1 MEANS USER TYPED ALTMODE
CNT,	0
CTOFLG,	0		/-1 MEANS SAW ^O
COUNT,	0

/	MAGTAPE SPECIAL CODES

	REWKOD=1
	SKFKOD=3	/SKIP FORWARD FILE
	UNLKOD=4
	EOFKOD=5
	SKPKOD=2	/FORWARD RECORD
	BAKKOD=SKPKOD+4000
	BKFKOD=SKFKOD+4000

	DTLA=6766

/0000-0777	/CAMP
/1000-1377	/OS/8 LINE BUFFER
/1400-1777	/PS/8 LINE BUFFER
/2000-		/CAMP
/7000-7177	/I/O BUFFER
/7200-7577	/OS/8 HANDLER
/7600-7777	/OS/8

	DLDC=6746
	DLAG=6743
	PAGE
	*200

START,	JMS I [READ	/READ A LINE INTO OS/8 LINE BUFFER
	TAD [LINBUF	/CHAIN ENTRY ADDRESS
	DCA LINPTR	/INITIALIZE POINTER TO LINE BUFFER
	STA
	JMS I [SPACE	/IGNORE LEADING SPACES
	JMS GETTWO	/GET TWO CHARS
	DCA TEMP
	JMS I [SCAN	/SCAN PAST EXTRA LETTERS OR DIGITS
	TAD TEMP
	JMS I [BRANCH	/GO TO APPROPRIATE ROUTINE
	-2313;SKIP	/SK
	-0517;EOF	/EO
	-0201;BACK	/BA
	-2205;REWIND	/RE
	-2516;UNLOAD	/UN
	-2605;VERSION	/VE
	-1005;HELP	/HE
	0
	SNA CLA
	JMP I [GOAWAY
	JMP I [SYNTAX	/NONE OF THESE

/FIXES SINCE FIELD TEST RELEASE:

/1.	ADDED CASSETTE SUPPORT
/2.	FIXED BUG REIMMEDIATE ALTMOD
/3.	CHANGED SPECIAL CODES TO AGREE WITH NEW MAGTAPE HANDLER
/4.	IGNORE NULLS ON INPUT
/5.	ALLOW UNLOADING AN RK8E
/	GETTWO

/GET TWO LETTERS OR DIGITS FROM INPUT LINE, PACK IN SIXBIT
/ADVANCE PAST THEM. SUBSTITUTE NULL IF NOT FOUND.

GETTWO,	0
	JMS GETSIX
	CLL RTL
	RTL
	RTL
	DCA T2
	JMS GETSIX
	TAD T2		/COMBINE
	JMP I GETTWO

GETSIX,	0		/GET A SIXBIT LETTER OR DIGIT (OR NULL)
	JMS ALPHA	/IS IT ALPHANUMERIC?
	JMP NOTALPH	/NO
	AND [77		/YES
	JMP I GETSIX	/TRUNCATE TO SIXBIT
NOTALPH,CLA
	JMS BACKC
	JMP I GETSIX	/RETURN NULL

GETC,	0		/GET A CHARACTER, ADVANCE POINTER
	TAD I LINPTR
	AND [177	/ALWAYS RETURN 8-BIT
	SZA
	TAD [200	/WITH HIGH ORDER BIT ON
	ISZ LINPTR	/ADVANCE SCAN
	JMP I GETC	/RETURN

BACKC,	0		/MOVE SCAN POINTER BACK ONE
	STA
	TAD LINPTR
	DCA LINPTR
	JMP I BACKC	/RETURN
/RETURN 1	NOT OF TYPE DESIRED
/RETURN 2	DESIRED TYPE
/IN BOTH CASES, CHAR IS LEFT IN AC

ALPHA,	0		/LOOK FOR ALPHANUMERIC
	JMS I [GETC
	JMS LETTER	/IS IT A LETTER?
	JMP TRYDIG	/NO, TRY DIGIT
	JMP GOTAL	/YES
TRYDIG,	JMS DIGIT	/IS IT A DIGIT?
	JMP I ALPHA	/NO, AINT LETTER OR DIGIT
GOTAL,	ISZ ALPHA	/YES, EITHER LETTER OR DIGIT
	JMP I ALPHA	/RETURN WITH IT IN AC

LETTER,	0		/LOOK FOR LETTER
	TAD (-"A
	CLL
	TAD ("A-"Z-1
	SNL
	ISZ LETTER
	TAD ("Z+1	/RESTORE CHAR
	JMP I LETTER

DIGIT,	0		/LOOK FOR DIGIT
	TAD (-"0
	CLL
	TAD ("0-"9-1	/(DECIMAL)
	SNL
	ISZ DIGIT
	TAD ("9+1	/RESTORE DIGIT TO CHARACTER FORM
	JMP I DIGIT	/AND RETURN WITH IT IN AC
	PAGE
SYNTAX,	CLA
	JMS PRINT
	TEXT	/? SYNTAX ERROR/
GOAWAY,	TAD ESCBIT
	SZA CLA
	JMP I [7605	/LINE ENDED WITH ESCAPE
	TAD I [READ	/WAS 'READ' EVER CALLED?
	SZA CLA
	JMP I [START	/YES, GET A NEW LINE
	JMP I [7605	/NO, WE MUST'VE BEEN CHAINED TO, RECALL KBM

PRINT,	0
	TAD I PRINT
	RTR
	RTR
	RTR
	JMS PRIN
	TAD I PRINT
	JMS PRIN
	ISZ PRINT
	JMP PRINT+1
LV,	JMS I [CRLF
	ISZ PRINT
	JMP I PRINT

PRIN,	0
	AND [77
	SNA
	JMP LV
	TAD [240
	AND [77
	TAD [240
	DCA T3
	TAD [200
	KRS
	TAD (-203
	SNA
	JMP CTRLC
	TAD (203-217	/^O
	SNA CLA
	JMS CTRLO
	TAD T3
	JMS I [TYPE
	JMP I PRIN
CTRLC,	TAD ["^
	JMS I [TYPE
	TAD ("C
	JMS I [TYPE	/ECHO "^C"
	JMS I [DELAY
	JMP I [7605	/THEN GO AWAY
CTRLO,	0
	KCC		/CLEAR OUT ^O
	TAD ["^
	JMS I [TYPE
	TAD ("O
	JMS I [TYPE
	JMS I [CRLF
	STA
	DCA CTOFLG	/STOP ECHOING
	JMP I CTRLO

VERSION,JMS PRINT
	TEXT	\OS/8 CAMP V2 \
	JMP I [START
NUMBIG,	JMS PRINT
	TEXT	/? NUMBER TOO BIG/
	JMP I [GOAWAY
NONEX,	JMS PRINT
	TEXT	/? CAN'T - DEVICE DOESN'T EXIST/
	JMP I [GOAWAY
	PAGE
HELP,	JMS I [PRINT
	TEXT	/BACKSPACE DEV: N FILES/
	JMS I [PRINT
	TEXT	/BACKSPACE DEV: N RECORDS/
	JMS I [PRINT
	TEXT	/EOF DEV:/
	JMS I [PRINT
	TEXT	/SKIP DEV: N FILES/
	JMS I [PRINT
	TEXT	/SKIP DEV: N RECORDS/
	JMS I [PRINT
	TEXT	/SKIP DEV: EOD/
	JMS I [PRINT
	TEXT	/REWIND DEV:/
	JMS I [PRINT
	TEXT	/UNLOAD DEV:/
	JMS I [PRINT
	TEXT	/VERSION/
	JMS I [PRINT
	TEXT	/HELP/
	JMP I [START
BADEV,	CLA
	JMS I [PRINT
	TEXT	/? CAN'T FOR THIS DEVICE/
	JMP I [GOAWAY
	PAGE
	*2000

/ORIGIN PAST OS/8 LINE BUFFER AT 1000.
/SKIP PAST PS/8 LINE BUFFER (AT 1400) JUST IN CASE
/PS/8 USERSS WISH TO PATCH THIS PROGRAM

/SCAN PAST EXTRA LETTERS OR DIGITS

SCAN,	0
	JMS I [ALPHA
	JMP NOPE
	CLA
	JMP SCAN+1
NOPE,	CLA
	JMS I [BACKC
	JMP I SCAN

/SCAN PAST SPACES; GIVE ERROR IF NO SPACES FOUND UNLESS AC=-1

SPACE,	0
	DCA FLAG	/SET AC=-1 TO PREVENT ERROR ON NO SPACES FOUND
	DCA SPKNT	/INITIALIZE SPACE COUNTER
	SKP		/JUMP INTO LOOP
GOTSP,	ISZ SPKNT
	JMS I [GETC	/GET NEXT CHAR
	TAD (-240
	SNA CLA		/IS IT A SPACE?
	JMP GOTSP	/YES, COUNT IT
	JMS I [BACKC	/NO, PUT IT BACK
	ISZ FLAG	/CHECK FLAG
	SKP		/USER DIDN'T SPECIFY FLAG
	JMP I SPACE	/-0 MEANT DON'T CHECK IF FOUND SPACE
	TAD SPKNT	/HOW MANY SPACES DID WE FIND?
	SZA CLA
	JMP I SPACE	/SOME.  OK
	JMP I (SYNTAX	/NONE.  TSK. TSK.
BRANCH,	0
	DCA T
BR2,	TAD I BRANCH
	ISZ BRANCH
	SNA
	JMP NOTFND
	TAD T
	SNA CLA
	JMP FOUND
	ISZ BRANCH
	JMP BR2

FOUND,	TAD I BRANCH
	DCA T
	JMP I T		/FOUND ITEM IN COLUMN 1, JUMP TO ADDRESS IN COL 2

NOTFND,	TAD T
	JMP I BRANCH	/IF NOT FOUND IN COL 1, RETURN WITH AC INTACT
CHECKR,	0
	TAD DCW
	RAL
	SMA CLA
	JMP I CHECKR
RONLY,	JMS I [PRINT
	TEXT	/? CAN'T - DEVICE IS READ-ONLY/
	JMP I [GOAWAY

CHECKW,	0
	TAD DCW
	RTL
	SMA CLA
	JMP I CHECKW
WONLY,	JMS I [PRINT
	TEXT	/? CAN'T - DEVICE IS WRITE-ONLY/
	JMP I [GOAWAY
	PAGE
/READ A LINE INTO OS/8 LINE BUFFER

READ,	0
	DCA CTOFLG	/ALLOW ECHOING
RD1,	TAD [LINBUF
	DCA LINPTR
	TAD ("#		/PROMPT WITH "#"
	JMS TYPE
	DCA ESCBIT
GT,	JMS GET
LOOK,	JMS I [BRANCH
	-377;RUBOUT
	-217;GT		/^O
	-203;CTRLC	/^C
	-212;LF		/LINE FEED
	-215;CR		/CARRIAGE RETURN
	-375;ESCAPE	/ALTMODE
	-376;ESCAPE	/ALTMODE (2ND FLAVOR)
	-233;ESCAPE	/ESCAPE
	-225;CTRLU	/^U
	-200;GT		/IGNORE NULLS
	0
	DCA TEMP	/NONE OF THESE
	TAD LINPTR
	TAD (-LINBUF-377
	SNA CLA		/AT END OF LINE BUFFER?
	JMP GT		/YES, DON'T ACCEPT CHAR
	TAD TEMP	/NO, RETRIEVE CHAR
	JMS TYPE	/ECHO IT
	TAD TEMP	/INSERT IN BUFFER
	DCA I LINPTR
	ISZ LINPTR	/BUMP POINTER
	JMP GT		/NEXT

CTRLU,	TAD ["^
	JMS TYPE
	TAD ("U
	JMS TYPE	/ECHO "^U" <CR><LF>
	JMS I [CRLF
	JMP RD1
RUBOUT,	TAD LINPTR
	TAD [-LINBUF
	SNA
	JMP BOL		/AT BEGIN OF LINE
	TAD [LINBUF-1
	DCA LINPTR	/MOVE POINTER BACK ONE
	TAD ["\
	JMS TYPE	/ECHO "\"
RUB3,	TAD I LINPTR
	JMS TYPE	/ECHO RUBBED-OUT CHARACTER
GT2,	JMS GET
	JMS I [BRANCH
	-377;RUB2
	-216;GT2	/IGNORE ^O
	-203;CTRLC	/^C
	0
	DCA TEMP	/A NEW CHAR
	TAD ["\
	JMS TYPE	/ENCLOSE RUBBED-OUT CHARS IN \'S
	TAD TEMP
	JMP LOOK

RUB2,	TAD LINPTR
	TAD [-LINBUF
	SNA
	JMP BOL2
	TAD [LINBUF-1
	DCA LINPTR
	JMP RUB3

BOL2,	TAD ["\
	JMS TYPE
BOL,	JMS I [CRLF
	JMP RD1

ESCAPE,	TAD ("$		/ECHO ESCAPE AS DOLLAR SIGN
	JMS TYPE
	ISZ ESCBIT	/NOTE ESCAPE
CR,	DCA I LINPTR	/INSERT 0 AT END
	JMS I [CRLF
	JMP I READ	/RETURN, WE GOT LINE
GET,	0
	KSF
	JMP .-1
	KRB
	AND [177
	TAD [200	/FORCE TO 8-BIT
	JMP I GET

TYPE,	0
	DCA TYPEM
	JMS I [DELAY
	DCA .-1		/DELAY FIRST TIME THRU TO LET THINGS QUIET DOWN
	TAD CTOFLG
	SZA CLA
	JMP I TYPE	/NO ECHOING
	TAD TYPEM
	TLS
	TSF
	JMP .-1
	CLA
	JMP I TYPE

TYPEM,	0

LF,	DCA I LINPTR	/TEMPORARILY INSERT A 0 SENTINEL
	TAD [LINBUF-1
	DCA XR1
	JMS I [CRLF
	TAD ["#
	JMS I [TYPE
LFLP,	TAD I XR1
	SNA
	JMP I [GT	/FINISHED, GET SOME MORE CHARS
	JMS I [TYPE	/ECHO CURRENT CHARS
	JMP LFLP
	PAGE
EOF,	JMS I [SPACE	/SPAN OVER SPACES
	JMS I [GETDEV	/GET DEVICE
	JMS I [CHECKR
	TAD DEVTYP
	JMS I [BRANCH
	-20;MAGEOF
	-27;CASEOF
	ZBLOCK 2
	0
	JMP I [BADEV

SKIP,	JMS I [SPACE
	JMS I [GETDEV
	JMS I [CHECKW
	JMS GETNUM
	TAD DEVTYP
	JMS I [BRANCH
	-20;MAGSKP
	-27;CASSKP
	0
	JMP I [BADEV

REWIND,	JMS I [SPACE
	JMS I [GETDEV
	JMS I [CHECKW
	TAD DEVTYP
	JMS I [BRANCH
	-20;MAGREW
	-27;CASREW
	-16;TCREW
/	-17;LTREW
	ZBLOCK 4	/PATCH SPACE
	0
	TAD DCW
	SMA CLA
	JMP I [BADEV	/NOT FILE STRUCTURED
	CLA IAC		/READ BLOCK 0 TO REWIND
	DCA I [BLK
	TAD (100
	JMS I [GO
	JMP I [GOAWAY
UNLOAD,	JMS I [SPACE
	JMS I [GETDEV
	JMS I [CHECKW
	TAD DEVTYP
	JMS I [BRANCH
	-20;MAGUNL
/	-27;CASUNL
	-16;TCUNL
	-21;TDUNL
/	-17;LTUNL
	-23;RKEUNL
	ZBLOCK 2
	0
	JMP I [BADEV

BACK,	JMS I [SPACE
	JMS I [GETDEV
	JMS I [CHECKW
	JMS GETNUM
	TAD TYP
	SPA CLA
	JMP I [SYNTAX	/CAN'T BACKSPACE TO EOD
	TAD DEVTYP
	JMS I [BRANCH
	-20;MAGBAK
	-27;CASBAK
	0
	JMP I [BADEV
GETNUM,	0		/PARSE OFF :NNNN [F ! R]  OR EOD
	CLA IAC
	DCA NUM
	DCA TYP
	JMS I [GETC
	SNA
	JMP I GETNUM	/EOL
	TAD (-":
	SZA CLA
	JMP I [SYNTAX
	STA
	JMS I [SPACE	/OPTIONAL SPACES
	TAD I LINPTR
	SNA
	JMP I GETNUM	/EOL
	TAD (-"E
	SNA CLA
	JMP EO
	JMS I [NUMBER
	DCA NUM
	STA
	JMS I [SPACE	/MORE OPTIONAL SPACES
	DCA TYP
	JMS I [GETC
	SNA
	JMP I GETNUM	/NO F OR R.  F ASSUMED
	TAD (-"F
	SNA
	JMP R		/0 MEANS 'F'
	TAD ("F-"R
	SZA CLA
	JMP I [SYNTAX
	CLA IAC		/1 MEANS 'R'
R,	DCA TYP
	JMP I GETNUM
EO,	STA		/-1 MEANS 'E'
	JMP R
	PAGE
/GET A DECIMAL NUMBER, RETURN IT IN AC

NUMBER,	0
	DCA NUM
	CLA IAC
	DCA FLG
NM1,	JMS I [GETC
	JMS I [DIGIT
	JMP EON
	TAD (-"0	/CONVERT TO DIGIT
	DCA T4
	DCA FLG		/NOTE PASSAGE OF A DIGIT
	TAD NUM
	AND [7000
	SZA CLA
	JMP I [NUMBIG
	TAD NUM
	CLL RTL
	TAD NUM
	CLL RAL
	TAD T4
	SZL
	JMP I [NUMBIG
	DCA NUM
	JMP NM1

EON,	CLA
	JMS I [BACKC
	TAD FLG
	SZA
	DCA NUM		/IF NO DIGITS, RETURN A 1
	TAD NUM
	JMP I NUMBER

FLG,	1		/0 MEANS THERE WERE DIGITS
/	GETDEV

/PARSES OFF A DEVICE NAME (1-4 CHARS)
/DETERMINES IF IT EXISTS
/LOADS HANDLER INTO 7200-7577 IF NOT ALREADY IN CORE
/SETS ENTRY POINT ADDRESS AT 'ENTRY'
/SETS DEVICE NUMBER AT 'DEVNUM'
/SETS DEVICE CONTROL WORD AT 'DCW'
/SETS 'DEVTYP'

GETDEV,	0
	JMS I [GETTWO
	DCA WD1
	JMS I [GETTWO
	DCA WD2
	TAD WD1
	TAD WD2
	DCA WD1		/COMBINE TWO WORDS INTO 1 (IN WD1)
	TAD WD2
	SNA CLA
	JMP INQ
	TAD WD1		/OS/8 KLUDGE FOR UNIQUENESS
	CLL RAL
	STL RAR		/FORCE BIT 0 ON IF 2ND WORD WAS NON-ZERO
	DCA WD1
INQ,	DCA WD2
	CIF 10
	JMS I USR
	12		/INQUIRE
WD1,	0		/DEVICE NAME
WD2,	0		/GETS DEVICE NUMBER
WD3,	0		/GETS ENTRY POINT
	JMP I [NONEX	/DEVICE DOESN'T EXIST
	TAD WD3
	SZA		/IS HANDLER ALREADY IN CORE?
	JMP INCORE	/YES
	TAD WD1
	DCA DW1
	TAD (7201	/ALLOW TWO PAGE HANDLER IN 7200
	DCA DW3
	DCA DW2
	CIF 10
	JMS I USR
	1		/FETCH
DW1,	0		/DEVICE NAME
DW2,	0		/GETS DEVICE NUMBER
DW3,	0		/GETS ENTRY POINT
	JMP I [NONEX	/DOESN'T EXIST
	TAD DW2
	DCA DEVNUM
	TAD DW3
	DCA ENTRY
	JMP GETYP
INCORE,	DCA ENTRY
	TAD WD2
	DCA DEVNUM
GETYP,	TAD DEVNUM
	TAD (7757
	DCA DCWPTR	/POILT INTO DEVICE CONTROL WGRD TABLE
	CDF 10
	TAD I DCWPTR	/GET DCW
	CDF 0
	DCA DCW
	TAD DCW
	RTR
	RAR
	AND [77
	DCA DEVTYP
	JMP I GETDEV

DELAY,	0
	TAD (-10
	DCA OUTER
	ISZ ZER
	JMP .-1
	ISZ OUTER
	JMP .-3
	JMP I DELAY
ZER,	0
OUTER,	-10
	PAGE
LOADPT,	TAD I (FUNCT
	TAD (-REWKOD
	SNA CLA
	JMP I [GOAWAY	/LOAD POINT ON A REWIND IS NOT AN ERROR
	JMS I [PRINT
	TEXT	/? CAN'T - AT BOT/
	JMP I [GOAWAY
READEOF,JMS I [PRINT
	TEXT	/% CAN'T - AT EOF/
	JMP I [GOAWAY

READBOF,JMS I [PRINT
	TEXT	/% CAN'T - AT BOF/
	JMP I [GOAWAY

READBT,	JMS I [PRINT
	TEXT	/? CAN'T - AT BOT/
	JMP I [GOAWAY
CASSKP,	DCA I (DIR
	TAD TYP
	SNA CLA
	JMP CSKPF
	JMP I (NOTIMPL

CGO,	0
	DCA CFUNCT
	JMS I ENTRY
CFUNCT,	0
CBUFR,	7000
CBLK,	-1
	SKP
	JMP I CGO
	DCA TEMP
	TAD TEMP
	SMA CLA
	JMP I (END	/SOFT ERROR
	JMS I [PRINT
	TEXT	\? CAN'T - I/O ERROR\
	JMP I [GOAWAY

CASEOF,	JMS CGO
	JMP I [GOAWAY

CASREW,	TAD (REWKOD
	JMS CGO
	JMP I [GOAWAY
CSKPF,	TAD NUM
	SNA
	IAC
	CIA
	DCA COUNT
	TAD (SKFKOD
	JMS CGO
	ISZ COUNT
	JMP .-3
	JMP I [GOAWAY

CASBAK,	CLA IAC
	DCA I (DIR
	TAD TYP
	SZA CLA
	JMP CBAKBLK
	TAD NUM
	CMA
	DCA COUNT
	TAD (BKFKOD
	JMS CGO
	ISZ COUNT
	JMP .-3
	JMP I [GOAWAY

CBAKBLK,TAD NUM
	SNA
	IAC
	CIA
	DCA COUNT
	TAD (BAKKOD
	JMS CGO
	ISZ COUNT
	JMP .-3
	JMP I [GOAWAY
	PAGE
TCREW,	JMS TCR
	JMP I [GOAWAY

TCUNL,	JMS TCR
	TAD ENTRY
	IAC
	RTR
	RTR
	AND [7000
	DTLA		/SELECT ANOTHER UNIT
	JMP I [GOAWAY

TCR,	0
	TAD ENTRY
	TAD (-7607
	SZA CLA		/SYSTEM TC08 DECTAPE MUST BE UNIT 0
	TAD ENTRY
	RTR
	RTR
	AND [7000	/ISOLATE UNIT # IN BITS 0-2
	TAD (600	/GO REVERSE
	DTLA
	JMP I TCR
TDUNL,	TAD (-7607
	SZA CLA
	TAD ENTRY
	DCA TEMP
	TAD TEMP
	RTR
	RAR
	CLA RAR
	DCA UNIT
	TAD TEMP
	AND [3
	CIA
	TAD [77		/GET DEV CODE
	CLL RTL
	RAL
	TAD (6004	/BUILD 'SDLC'
	DCA BSDLC
	TAD UNIT
	TAD (3000	/GO, REVERSE
BSDLC,	HLT
	CLA
	JMP I [GOAWAY
UNIT,	0

CRLF,	0
	TAD [215
	JMS I (TYPE
	TAD [212
	JMS I (TYPE
	JMP I CRLF

RKEUNL,	CLL
	TAD ENTRY
	TAD (200
	SNL CLA
	TAD ENTRY
	AND (3		/ISOLATE UNIT
	CLL RAL		/PUT IN PLACE
	TAD (2000	/WRITE PROTECT DISK
	DLDC		/LOAD COMMAND REGISTER
	DLAG
	JMP I [GOAWAY
	PAGE
MAGSKP,	DCA DIR
	TAD TYP
	SNA
	JMP SKPF
	SPA CLA
	JMP SKPEOD
	TAD NUM
	SNA
	CLA IAC
	CIA
	DCA WC
	TAD (SKPKOD
	JMS GO
	JMP I [GOAWAY

MAGEOF,	TAD (EOFKOD
	JMS GO
	JMP I [GOAWAY

SKPF,	TAD NUM
	SNA
	JMP SKP0
	CIA
	DCA WC
	TAD (SKFKOD
	JMS GO
	JMP I [GOAWAY

SKPEOD,	JMS I ENTRY
	SKFKOD
	0
	0		/SKIP 4096 FILES
	SMA
	SKP CLA
	JMP CHKBOT
	JMP I [GOAWAY

MAGBAK,	CLA IAC
	DCA DIR
	TAD TYP
	SNA CLA
	JMP BAKF
	TAD NUM
	SNA
	CLA IAC
	CIA
	DCA WC
	TAD (BAKKOD
	JMS GO
	JMP I [GOAWAY
BAKF,	TAD NUM
	CMA
	DCA WC2
	JMS I ENTRY
	BKFKOD
	0
WC2,	-1		/
	SMA
	SKP CLA
	JMP CHKBOT
	STA
	DCA WC
	TAD (SKPKOD
	JMS GO
	JMP I [GOAWAY

CHKBOT,	DCA TEMP
	TAD TEMP
	AND (1000
	SNA CLA
	JMP IOE
	JMP I [GOAWAY
MAGUNL,	TAD (UNLKOD
	JMS GO
	JMP I [GOAWAY

MAGREW,	TAD (REWKOD
	JMS GO
	JMP I [GOAWAY

GO,	0
	DCA FUNCT
	JMS I ENTRY
FUNCT,	0
BUFR,	7000
WC,
BLK,	-1
	SKP		/I/O ERROR
	JMP I GO
	DCA TEMP
	TAD TEMP
	SMA CLA
	JMP END		/SOFT ERROR
	TAD TEMP
	AND (1000
	SZA CLA
	JMP I [LOADPT
IOE,	TAD TEMP
	JMP I [IOERR

DIR,	0		/0- FORWARD ;  1- BACKWARDS

END,	TAD TYP
	SNA CLA
	JMP I [GOAWAY	/EOF OKAY ON 'F'
	TAD DIR		/SAW FILE MARK
	SZA CLA
	JMP I [READEOF	/AT END OF FILE
	JMP I [READBOF	/AT BEGIN OF FILE
SKP0,	JMS I ENTRY
	SKFKOD
	0		/IRRELEVANT
	-1		/ADVANCE 1 FILE
	SMA
	SKP CLA
	JMP I [IOERR	/HARD ERROR
	JMS I ENTRY
	BAKKOD
	0		/IRREL
	-1		/BACK OVER FILE MARK
	SMA
	SKP CLA
	JMP I [IOERR
	JMP I [GOAWAY
	PAGE
IOERR,	AND (3777
	CLL RAL
	DCA TEMP
	JMS I [PRINT
	TEXT	\? CAN'T - I/O ERROR\
	TAD (-13	/11 BITS TO LOOK AT
	DCA CNT
	TAD (JLIST
	DCA JM
IOLUP,	TAD TEMP
	RAL
	DCA TEMP
	SZL
	JMP I JM
IOCONT,	ISZ JM
	ISZ CNT
	JMP IOLUP
	JMP I [GOAWAY

JM,	0

JLIST,	JMP BIT1
	JMP BIT2
	JMP BIT3
	JMP BIT4
	JMP BIT5
	JMP BIT6
	JMP BIT7
	JMP BIT8
	JMP I (BIT9
	JMP I (BIT10
	JMP I (BIT11
BIT1,	JMS I [PRINT
	TEXT	/(REWINDING)/
	JMP IOCONT
BIT2,	JMS I [PRINT
	TEXT	/(BOT)/
	JMP IOCONT
BIT3,	JMS I [PRINT
	TEXT	/(SELECT ERROR)/
	JMP IOCONT
BIT4,	JMS I [PRINT
	TEXT	/(PARITY ERROR)/
	JMP IOCONT
BIT5,	JMS I [PRINT
	TEXT	/(EOF)/
	JMP IOCONT
BIT6,	JMS I [PRINT
	TEXT	/(RECORD LENGTH INCORRECT)/
	JMP IOCONT
BIT7,	JMS I [PRINT
	TEXT	/(TIMING ERROR)/
	JMP IOCONT
BIT8,	JMS I [PRINT
	TEXT	/(EOT)/
	JMP IOCONT
	PAGE
BIT9,	JMS I [PRINT
	TEXT	/(WRITE LOCK-OUT)/
	JMP I (IOCONT
BIT10,	JMS I [PRINT
	TEXT	/(READ COMPARE ERROR)/
	JMP I (IOCONT
BIT11,	JMS I [PRINT
	TEXT	/(ILLEGAL FUNCTION)/
	JMP I (IOCONT
NOTIMPL,JMS I [PRINT
	TEXT	/% OPERATION NOT YET IMPLEMENTED/
	JMP I [GOAWAY
	PAGE
	FIELD 0
	*200
	$